通知公告: 请使用IE9及其以上的浏览器浏览本页面。

tiyee's微言微语

无边天道,绝顶为峰…记录我自己,关注互联网!

  • 昨天群里有人问怎么处理超大规模的nginx访问日志(50G),有人回答直接用awk,有的人回答用hadoop,那么到底有谁真的尝试过了呢?对于小文件,awk自然是十分方便的,一条命令就能得到访问top N的ip,可是很明显内存不够,故这个方法行不通。对于hadoop,肯定是十分合适的,但是也不是每个公司都会配置hadoop的,既然没有hadoop,我们可不可以自己来实现一个简易版的mapredus呢?本人昨天还真的试了试。其实整个过程并不复杂,用fgets扫描整个日志,这个过程是可以开多线程处理的,也可以先切割这个日志文件,然后分到多台电脑上去处理,完了进行一次或多次合并。每扫一行就可以得到一个ip,如果日志不大,自然是可以直接在内存里构建hash表来存储的,但是…

  • 之前在另一篇博客里说过了,本人的webservice ,db都是跨地区的,web在杭州机房,db都在北京机房,所以每次连库都是100多ms,为了加快速度,本人用了memcache,将整个网站的数据都缓存起来了,然后发现访问速度还算理想。但是今天闲来无事,用siege进行了一次压测,模拟了1000个用户,1分钟的持续时间,最后发现结果并不理想,所以今天决定探本索源一次。我首先去查看了mysql的日志,发现日志里显示mysql有连接也有查询,既然全站缓存了,为何还有连接呢?我开启了xdebug追踪了下运行过程,发现确实连了数据库,原来我在写框架的时候,为了省事,在model的基类里用了一个构造函数,如下:    protected $db = null; public func…

  • 支付宝对于网银来说,最方便的莫过于免去了一大堆乱七八糟的证书的安装过程,但是支付宝本身也是有证书的,当然pc端的支付宝页面也可以不通过证书登录,而是通过手机二维码扫描来判断登陆。那么问题来了,如果我们自己的项目要采取类似的东西,该如何做呢?pc页面和支付宝客户端是2个不同的客户端,所以支付宝客户端扫描并认证后,必须生成用户登录标识,然后通知pc页面已经登陆成功,执行跳转,跳转后的页面会根据支付宝客户端生成的表示,去读取用户信息。现在我们自己的网站没有客户端,那我们就用微信好了,为了简便,我们就不扫描二维码了,通过订阅号窗口发送一个四位的token来模拟扫描过程。pc端和服务器的通讯必须持续等待,…

  • php的每次请求是独立的,请求间的变量在请求完了就回收了,所以是没法共享变量的,有像swoole这类常驻型的框架是可以类似python样运行的,但是为了一个小小的功能就换个框架是不是太伤心病狂了?当然也可以通过第三方实现,比如memcache,redis,file,yac,等,但是明显这些都是变通,而不是真正实现了变量共享。前面,我们实现了一个内置常量,如果我们实现一个内置变量,在php启动的时候初始化,然后在每次请求的时候不回收,直到php关闭的时候才回收,是不是就可以实现变量共享了?类似glob,我们新建个hashtable,专门用来存储跨页面变量,不过因为跨页面了,必须加锁防止冲突。待续…

  • 又到了年末的时候了,寒风瑟瑟,多事之秋,公司新来的总监执意要全线转java,看来是不带哥玩儿的节奏了,哥只好寻觅下个安身之处了。甲公司A部门接到甲公司的的邀请,当场就答应了,虽然自感离BAT差距甚远,可人毕竟还是要有梦想的,万一实现了呢?所以也就去了,反正人家也不认识我,出了任何错误,出门后,人家也找不到我了,也就不怕被人笑话了。头两轮比想象的容易,第一轮出了些笔试,有考归纳法的,有考概率问题的,有考具体解决方案的,为了隐私,笔试题就不方便透露了,还是说说面试题吧二轮的面试,考C语言的较多(你没有看错,是C语言),比如一个单循环链表,有1-5这五个节点,怎…

  • 本人的个人项目,部署在阿里云上,公司的开发环境是debian,家里笔记本是fedora,项目是通过git管理的,但是呢,阿里云的数据库是走内网的,所以在公司或家里是不能连接该数据库的,只能使用另一个可以走外网的备用库,其他的组件如memcache,radis也是如此,这就有些麻烦了,在第一次git clone后,往往还要添加数据库和memcache或redis的配置信息,这就需要手工配置了,然后通过.gitignore忽略这些文件。如果我能判断当前环境是哪个机器,然后根据机器的识别号来调用相应的配置文件,是不是就简单多了?识别机器最简单的是mac地址,但是显然php无法获取到,根据phpinfo()里的System值识别?貌似不知道怎么实现。那么比较简单的方法就是给php增加一个常量,然后赋予不…

  • 当我们在设计数据库的数据表时,经常会遇到一对多的数据结构,如文章的tag等,比如本人之前在设计手机app的后端的时候,就碰到了这个问题,当时涉及中小学教材的诗歌诗歌表(poetry)和出版社表(poetry_press),因为一首诗可能会涉及多个出版社,而且出版社的数量并不是很多。为了便于搜索,如果把所有出版社的ID用分隔符组合成一个字符串肯定不符合要求。所以一般都是单独使用一个表来存储他们的对应关系,每次修改的时候,还必须先清除所有的对应数据,然后重新插入,非常麻烦,为了保证数据的一致性,还必须用事物。很显然,对于关联数据种类很少的情况下,这两种方法都不好。在linux里,读写运行权限用421来表示,这就是一个典型的一对多的…

  • 在日常的调试中,我们经常需要输出数组,但是print_r函数输出的数组是没有格式的,不太好看,为了方便,我们只要自己增加一个函数,如function dump($arr) { echo '< pre>'; print_r($arr); echo '< /pre>'; } 例如thinkphp就是这么做的,但是个人感觉太麻烦了,如果php有个类似的内置函数,那不是方便多了?为此我们可以更改print_r的源代码,让他在输出数组前先输出pre标签,print_r的源代码在ext/standard/basic_functions.c中,但是呢,修改php的原有函数毕竟不太好,我们还是新添加一个扩展好了。我们添加一个tiyee扩展,增加一个dump()函数代码如下…

  • 本人的博客在09年就开始了,最开始在百度空间,可惜百度空间娱乐化太严重了,遂有搬家之意。第一波搬家的时候,正好赶上许朝军的点点网发布,轻博客风头正起,再加上创新工场李开复的推荐,所以就博客搬到了点点,并绑定了独立域名。当时的点点确实很火,每天都可以在后台看到其他博主的文章。然后好景不长,轻博客这概念很快就冷却下来,许朝军把精力放到paipai去了,点点无人打理,人气直线下降,后台后来发表编程代码的bug也无人管了,于是本人又准备搬家了。经历了前两次风波,本人再也不相信第三方托管了,决定自起炉灶,自己搭建一个博客。恰好本人在2013年起,就自己开发了一个框架,于是就直接拿来用了,但是博客当时搭好后访问速…

  • 网上其实关于这类程序有很多,但是今天本人想使用双向链表来实现。一般说来,此程序分为3部分游戏背景区域蛇和食物移动以及死亡判断由于我使用的ide是dev c++,内置的编译器是gcc,所以并没移动光标的gotoxy()函数,需要自己来实现,好在利用win api也不难。蛇在移动过程中,如下图,不难发现,虽然在移动时,身体的坐标都改变了,,向左移动时,是x轴分别+1.下移时,是y轴-1.如果单凭人眼的观察,我们可以这样认为,把尾节点插入到头节点,然后根据移动方向,改变这个新插入的节点的…