栈
栈是一种先进后出的线性数据结构,规定只允许在一端进行插入和删除元素的操作。其中进栈操作又叫做压栈(Push),出栈操作又叫做弹出(Pop)。允许进行操作的一端叫做栈顶(top),另一端叫做栈底(base)。 ¶ 分类 顺序栈:数组实现 链式栈:链表实现 ¶ 代码实现 ¶ 顺序栈 1. 构建栈的结构 #define MAXSIZE 1024 //定义栈的空间大小 typedef struct stack{ int data[MAXSIZE]; int top; }Stack; 2. 初始化 Stack *Init(){ Stack stack; stack = (Stack*)malloc(sizeof(Stack)); if(!stack){ printf("Memory allocation failed!"); return NULL; } else{ stack->top = -1; //C语言数组下标从0开始 printf("Init succes...
搭建属于自己的 Shadowsocks 服务
最近一直想自己搭一个 Shadowsocks 服务,并且利用服务器学习一些技术知识,但是国内的服务器实在是贵得很啊,像我这种苦逼大学生根本玩不起,无奈之下只好各种 Google 百度,最后找到了一些国外的 VPS 资源 BandwagonHost(搬瓦工 VPS):据观察搬瓦工这个 VPS 还是算计比较便宜的,年付 $20 ,平均下来每个月只有 $1.6,而且套餐很良心很良心, 512MB 的内存,10GB 的 SSD,1TB 的流量是不是比国内很多主机都划算的很。 Vultr:同样也是 SSD VPS, 这个套餐看起来也还是很不错的,只不过每月两刀的套餐总是能被抢空。 Digital Ocean:也是我目前正在使用的,大家可以点击此链接注册,通过这个优惠链接注册的小伙伴们会直接获得 $10 的额度在你的账户余额里。而且他的这个套餐也是很诱人的,同样的 SSD VPS,20G 硬盘,每月 1TB 流量,1G 的带宽,只不过这个费用看起来太贵了,一个月需要 $5。 但是事情有这么简单吗? 当然没有,鼎鼎大名的 gayhub 上有个提供给学生的 pack,...
解决 Ubuntu 下 PHP 验证码不显示问题
这两天在帮别人写一个注册登录功能的页面,用到了简单的 TP 框架,但是在我自己的 Ubuntu 环境下发现验证码出了问题 —— 验证码图片显示不出来。 我将图片单独拉出来,发现错误提示如下: Call to undefined function imagecreate() 百度一问就找到了答案,原来这是由于没有安装或者开启 PHP 的 GD 库导致的,既然这样我只需要安装一下 GD 库就解决了: sudo apt-get install php7.0-gd 安装完毕后将 Apache 服务器重启,如果是 Nginx 的话,则可用可不用 如果是 Windows 环境的话,打开 PHP 安装目录下的 php.ini 配置文件,找到: ;extension=php_gd2.dll 去掉注释,重启服务就解决了。
解决 Ubuntu 下 Apache 不解析 PHP 问题
这两天笔者遇到了一个很操蛋的问题 ——Apache 无法解析 PHP 代码了,之前一直用的挺好的,突然就挂了,然后在网上疯狂的找解决办法,但是大都是 PHP5 的版本,而我却是 PHP7 的版本,我就先顺便把 5 版本的解决方法贴出来: 对 httpd.conf 配置文件做如下调整: 在 AddType application/x-gzip .gz .tgz 该行下面添加 AddType application/x-httpd-php .php 将 DirectoryIndex index.html 修改成 DirectoryIndex index.html index.htm index.php 将 #ServerName www.example.com:80 改成 ServerName localhost:80 然而 Ubuntu 下的 Apache 并没有 httpd.conf 这个配置文件,而是通过一个 apache2.conf 来引用每个部分的配置文件,这样在一个配置包里找到那一句配置也并不简单,而且我还没有找到。。。 不过皇天不负有心人,终于是找到了解...
一个学习 Python 的小游戏
笔者最近在自学 Python 的过程中想起曾经有人推荐过的一款学习编程的小游戏,叫做 Codecombat,通过玩游戏的方式学习编程语言的语法规则。 游戏有很多关卡,每个关卡都会有之前没有学过的语法,学习的难度是逐渐上升的,用游戏的方式将学习者带入比起看起枯燥的书本文字效果要好的多。 当然这里除了有 Python 之外还有 Javascript 等脚本语言可以学习。
SQL 进阶
我们都知道 select 的基本用法select <字段名> from <表名> [where <限制条件>],然而select语句后面还可以跟很多限制条件。我们这次用 user 表来作为示范,下面是 user 表的结构: ¶Between、And、In、<=、>=、<、> 等条件查询 通过select * from table where id between 1 and 3和select * from table where id >=1 and id <= 3的返回结果,我们可以发现between and和>= and <=是等同的。 如果我们要查询的条件不是一个连续的数值,可以用in: select * from table where id in (2,4) ¶locate () 函数:locate(substr,str) 这个函数返回substr在字符串str中的第一个出现的位置,如果不存在则值为 0 ¶Count () 函数 count (字段名):返回指定列的值的数目...
Python 基础
最近在自学 Python,所以一边学也一边总结一些知识点 ¶Python 的输出 Python 的输出和 C 语言类似,在print()函数里加上字符串(用单引号或者双引号,但是不能混用),例如: >>> print('Hello world!') print()函数也可以接受多个字符串,用逗号隔开即可。print()函数依次打印字符串,每遇到逗号就会输出一个空格。 print()也可以打印整数或者计算结果,例如: >>> print('5+3=',5+3) 注:对于5+3,python 解释器会自动计算出结果,但是'5+3='是字符串而非数学公式 ¶Python 的输入 Pyhton 提供了input()函数,可以让用户输入字符串,并且存到一个变量里,例如: >>> info = input() 输入任意字符后按下回车完成输入,输入的内容就被存放在变量info里面了。 input()函数可以显示一个字符串来提示用户,如:input('please input something:') ¶Python 的数据类型 整数:...
SQL 语句的基本操作
¶ 数据库操作 创建数据库: CREATE DATABASE <数据库名> [其他选项] 使用数据库: USE <数据库名> 修改数据库: ALTER DATABASE <数据库名> 删除数据库: DROP DATABASE <数据库名> ¶ 数据表操作 创建表: CREATE TABLE <表名> ( <列名1><数据类型>[<列级完整性约束>], [<列名n><数据类型>[<列级完整性约束>]] ); 例: create table studets ( id int not null auto_increment primary key, name varchar(8) not null, sex varchar(5) not null, score int(5) not null ) 修改基本表 ALTER TABLE...
关于 TCP
互联网协议族(Internet Protocol Suite,缩写 IPS)是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。它常被通称为 TCP/IP 协议族(TCP/IP Protocol Suite,或 TCP/IP Protocols),简称 TCP/IP 协议集。因为该协议家族的两个核心协议:TCP(传输控制协议)和 IP(网际协议),为该家族中最早通过的标准。由于在网络通讯协议普遍采用分层的结构,当多个层次的协议共同工作时,类似计算机科学中的堆栈,因此又被称为 TCP/IP 协议栈(TCP/IP Protocol Stack) 以上来自维基百科,我们知道 TCP / IP 协议族是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的大的集合。其中包含了 ARP、UDP、ICMP(互联网消息控制管理协议)等协议,它将软件的通信过程抽象化为四个抽象层(应用层、传输层、网络层和物理层),类似于简化的 OSI 七层。 在数据传输方面,早期研发提出两种传输方式 —— 面向连接的传输和非面向连接的传输,经过后来长期的发展,提出面向连接的 IS...
解决配置完七牛后无法 Deploy 到 Github
将七牛的插件配置好后我写了上一篇博客试一试效果,结果发现怎么也没部署到 github,每次hexo d都会出现 ERROR Deployer not found: git 这样的报错,Google 了半天都没有找到解决的办法,最后在找到了 Github 上的一条 issue,终于发现了解决办法:只要将配置文件_config.yml 中 plugins 的那段给注释掉就 OK 了,即 #plugins: #- hexo-qiniu-sync 还是希望开发者能早点修改文档吧,不然还真的挺容易出事,不过说一句,我的 Hexo 是 3.2.2 的版本的,不知道 2.x 版本会不会出现类似的情况
Hexo 搭配七牛存储图片等媒体资源
今天把博客的图片存储搞了一下,利用的七牛存储,相对来说还是比较简单,但是为了测试成功与否就只好写这篇博客了。 七牛 是一个云存储服务商,注册并实名认证之后后,你将免费享有 10GB 存储空间,每月 10GB 下载流量、100 万次 GET 请求、 10 万次 PUT / DELETE 请求。如果想要注册可以点击这里,这样可以为我增加每月 5GB 的容量。 注册完成之后就可以进行创建空间了,注意我们添加的资源为对象存储,访问控制为公开空间 然后点击右上角进入密钥管理,复制当前使用的 AK 和 SK,配置的时候会用得到 下面我们会用到一个叫做的hexo-qiniu-sync 的插件,首先在 hexo 主目录下安装: npm install hexo-qiniu-sync - -save 然后把配置信息添加到_config.yml 中 plugins: - hexo-qiniu-sync #七牛云存储设置 ##offline 是否离线. 离线状态将使用本地地址渲染 ##sync 是否同步 ##bucket 空间名称. ##acce...
解决 Ubuntu 系统设置打不开
今天把 Ubuntu从16.04 更新到 16.10 之后卸载了些软件,之后蛋疼的发现系统设置打不开了,真是欲哭无泪。去网上搜了下发现是我之前由于卸载了 iBus 导致的,虽然我不懂为什么 iBus 和 Ubuntu 之间的关系为什么会如此紧密,但是既然发生了这种事情我也很绝望啊,只能按照网上的方法 sudo apt-get install ubuntu-desktop #这个会把Ubuntu预装的软件office还有Amazon什么的装回来,装完自己再慢慢卸载吧 或者他也提供了一次性的安装办法 sudo apt-get install ibus-pinyin unity-control-center unity-control-center-signon webaccounts-extension-common xul-ext-webaccounts 但是我眉头一皱,发现事情并不简单,我继续搜了下去,也有很多人遇到这种问题,发现还有更简单的办法 sudo apt-get install gnome-control-center #如果系统设置...
Hexo 的建站之旅
这几天觉得 wordpress 作为博客实在是太臃肿了,而且访问的后台以及更新都极其的慢,以至于想把博客迁到 Hexo 上去。 Hexo 是个简洁快速且高效的博客框架,是个台湾的学生写的,所以对中文还是挺友好的,我们用起来也很方便,而且 Hexo 仅依赖 node,易于安装。 首先准备的工具仅需要 node.js,git 即可,在 ubuntu 上安装这两样工具也是极其简单: sudo apt-get install nodejs sudo apt-get install npm sudo apt-get install nodejs-legacy #由于 ubuntu 仓库中本来就有一个 node,所以在 ubuntu 下 nodejs 命令不是 node 而是 nodejs,但是安装 nodejs-legacy 后就可以解决这个问题了,具体为什么我也不知道 sudo apt-get install git 下面开始安装 Hexo: sudo npm install -g hexo-cli 安装完成后就可以部署博客了,根据 Hexo 官网上的步骤: hexo init...
记一次 Arch 的安装经历
最近由于听信了别人的 “谗言”,心血来潮想试一试 Arch,所以便准备在虚拟机上装一个 Arch 来看看效果,也算是一次艰难的装系统之路了吧。 那么下面打开虚拟机,进入安装界面: 首先是分区,Arch 给我们提供了一个很好的分区交互工具 cfdisk cfdisk #使用cfdisk进行分区 选择第二个 dos 类型,这是将 sda 设置成 MBR 类型的分区,之前在遇到这个选项的时候,我下意识的选了第一个 GPT,然后还去 Google 了一下,说 GPT 很好, 就使用这个吧,结果后面分区的时候和教程不一样,装好系统后怎么也进不去。 接下来你可以把整个硬盘设置成一个根分区或者分成一个根分区和一个 boot 分区。如果设置成一个根分区记得要把那个分区设置 bootable;如果是一个根分区和一个 boot 分区记得要把 boot 分区设置 bootable。 退出 cfdisk 后格式化新设置的分区 lsblk #查看存储设备的状态,sda1、sda2这样的就是我们刚刚分出来的 mkfs.ext4 /dev/sda1 mkfs.ext4 /dev/...
关于 timestamp 自动更新
最近笔者在 “温习 TP 框架”(其实就是不会然后抓紧时间啃),从最简单 Blog 开始做起,以前学习的时候是跟着教程,用 time () 函数获取当前时间戳,然后用 int 型数据来存储。这一次我突然想用 Mysql 内置的时间类型的数据 ——timestamp。 Mysql 中常用到的除了 timestamp 之外还有 datetime,我们先来比较一下这两个的区别: timestamp 占用的存储空间为 4 个字节,所以它能表示的时间范围为 1970.1.1 08:00:01~2038.01.19 11:14:07,这个范围比较小,容易出现超出的情况。 datetime 占用的存储空间为 8 个字节,所以它能表示的时间范围为 1000.01.01 00:00:00~9999.12.31 23:59:59, 这个时间范围完全够用了。 其实 timestamp 这个时间范围目前也是够用的,而且我也只是来学习的,所以我就选择了这个数据类型。然而后来我发现我在修改表中数据的时候时间并没有自动更新,这就比较奇怪了,我当时的 sql 代码是这样的: date timest...