摘要: linux,误删,文件恢复 阅读全文
posted @ 2013-04-08 11:51 ~嘉言懿行~~我是煲仔饭~~ 阅读(366) 评论(0) 推荐(0) 编辑
摘要: rtsudo apt-get remove phpunitsudo pear channel-discover pear.phpunit.desudo pear channel-discover pear.symfony-project.comsudo pear channel-discover components.ez.nosudo pear update-channelssudo pear upgrade-allsudo pear install --alldeps phpunit/PHPUnitsudo pear install --force --alldeps phpunit/PH 阅读全文
posted @ 2013-03-31 09:34 ~嘉言懿行~~我是煲仔饭~~ 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 本文参考了 侯捷译的 <inside the c++ object model>~~四种情况下,c++会为class A创建默认构造函数,分别是1. 类A中包含带有构造函数的成员数据B~ 1 #include <iostream> 2 3 4 using namespace std; 5 6 class Foo 7 { 8 public: 9 Foo()10 {11 cout<<"A construct func called"<<endl;12 };13 };14 15 class Bar16 {17 private:18 阅读全文
posted @ 2013-02-01 15:44 ~嘉言懿行~~我是煲仔饭~~ 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 今天在看stl源码的同事突然发来一个new表达式1 template<class _T1, class _T2>2 3 inline void _Construct(_T1* __p, cosnt _T2& __value)4 5 {6 7 new ((void*)__P) _T1(__value);8 9 }一下自己迷糊了~~ 这种new的用法还是第一次见,正好比较闲,就查了一下,在百度上看了几篇博文后,大概有了些了解new其实有三种用法~1. 当new是运算符的时候2. 当new是函数的时候3. 当new作为placement new 的时候分别介绍一下用法:1. 这种 阅读全文
posted @ 2013-02-01 11:47 ~嘉言懿行~~我是煲仔饭~~ 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 从什么开始呢,就介绍一下最近接触到的一个强大的开源前端测试工具吧~~ selenium~~网上有很多关于这个工具的介绍,但是感觉主要还是关于这个工具的安装和官方文档的衍生品,实际的介绍好像很少~~ 其实我也不是很了解,只是最近接触了一个关于这个工具的一个小项目,做些初级的介绍吧。 首先第一篇,当然只是这个工具的简单介绍,使用环境,环境安装,基本工作机理和简单的范例,其他的嘛。。。。。我也还不会,不过可以慢慢学嘛,我会慢慢更新到这里的。。。言归正传~开始吧0. selenium介绍"Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的 阅读全文
posted @ 2013-01-29 01:05 ~嘉言懿行~~我是煲仔饭~~ 阅读(411) 评论(0) 推荐(0) 编辑
摘要: python中的数据类型0. 引子工作中涉及到python,也有一段时间了,发现个很容易忽略的问题,居然一直没注意到。dict = {}def func(dict): dict['key'] = 'value'func(dict)print dict以前印象里,python这里的dict结果应该是空的,理所当然的认为了,函数中拿到的dict是另一个被复制了的dict。可是这里打印的结果是:{'key': 'value'}这几天任务比较少,就花时间研究了一下,顺便把学习的过程记录在这1. python中变量python中的变量拿到的 阅读全文
posted @ 2012-12-03 18:52 ~嘉言懿行~~我是煲仔饭~~ 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 为自己做一份总结吧,从毕业到现在~时间过得不快不慢,从毕业到现在挣扎着已经2年多了,2年多经历的了很多事情。毕业回国不到一个礼拜,就跑到大连工作,一个造船厂,公司在长兴岛开发区,岛上几万人,一半是我们公司的员工,每天吹着海风,做大巴从岛的一头驶向另一头,晚上再回来。岛上的生活我倒是很喜欢,只是工作内容,过于单调,几十年前的ibm小型机的商用物料管理系统,代码像汇编,开发简单机械,上司是几个10倍于我们的高薪的交流不便的韩国人~ 总之,意识到没什么意思之后用了十分钟下决定离开,又用了十分钟写了辞呈~ 三天后离开大连回家休息了2周,10月份用2个月试用攒的5000元左右来到哈尔滨,跟11届的同学一 阅读全文
posted @ 2012-09-20 15:31 ~嘉言懿行~~我是煲仔饭~~ 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 前些天主要看了redis底层依赖的一些数据结构和事件管理库的代码,比较零散,但大体上了解了作者的设计思路.对不同规模【n】的数据采用不同的数据结构以实现对内存利用的"最优",这里的最优我想作者也没有做过严格的实验,不同的应用场景在redis上的表现肯定有所不同,如果有必要,可以再配置文件中对一些阈值做调整,比如 hash-max-zipmap-entries和 hash-max-zipmap-value,这两个参数决定了在一定数据规模的时候,是用zipmap作为哈希表数据结构还是dict。好了,开始介绍redis在没有异常的情况下默认的整个工作流程,从main函数开始:1. 阅读全文
posted @ 2012-09-10 22:39 ~嘉言懿行~~我是煲仔饭~~ 阅读(458) 评论(0) 推荐(0) 编辑
摘要: intset 实现了一个数字元素的集合。使用数组和元素的有序存放实现存取,查找过程使用二分查找法,所有插入删除的的效率为O(log2N)。 与其他数据结构类似,作者使用变编码方式实现对内存的高效利用。 初始化的intset中的数字定义为int16_t,即每个元素占用2个字节,而随着数据的插入,逐渐调整编码方式到int32_t或int64_t上代码intset.h 1 #ifndef __INTSET_H 2 #define __INTSET_H 3 #include <stdint.h> 4 5 typedef struct intset { 6 uint32_t encoding 阅读全文
posted @ 2012-09-04 11:43 ~嘉言懿行~~我是煲仔饭~~ 阅读(580) 评论(0) 推荐(0) 编辑
摘要: 无疑,作为key-value的nosql存储工具,redis中最核心的数据结构便是dict本身了。 哈希表作为查找效率 O(1)的数据结构,本身也存在着一些局限性,如hash算法的选择,怎样做到元素在桶内的均匀分布,及当哈希表内元素数量增多时,如果处理随着增加的碰撞,碰撞如果较深,会严重影响哈希表的效率redis中的dict便是hash实现的一个很好的范例,dict的实现中最巧妙地细节便是采用了类似双buffer的hash扩容方式,及缓慢的哈希表转移算法。1. 哈希表扩容方式【双buffer的hash表结构】1 typedef struct dict {2 dictType *type... 阅读全文
posted @ 2012-09-03 17:58 ~嘉言懿行~~我是煲仔饭~~ 阅读(700) 评论(0) 推荐(0) 编辑
摘要: 和memcached不同的是,redis没有使用第三方的事件框架,而是自己封装了io处理机制。有些细节上,redis并没有做到最优化,比如超时事件管理,redis仅仅使用了一个单链表,最新插入的超时事件放在链表头,作者在源码中也提到超时事件上的一些可以改进的地方【比如libevent超时事件采用最大堆实现】“Note that's O(N) since time events are unsorted.Possible optimizations (not needed by Redis so far, but...):1) Insert the event in order, so 阅读全文
posted @ 2012-08-31 18:19 ~嘉言懿行~~我是煲仔饭~~ 阅读(976) 评论(0) 推荐(0) 编辑
摘要: 和zipmap作为dict数据结构的备选一样,ziplist同样追求牺牲性能的情况下节省内存,毕竟redis被看做是一个in-memory的nosql工具。zipmap的源码中,印象最深的两个细节是:1. 作者为了节省内存,如果存入的value是一个能转化成int的数字串,存储的时候,ziplist会将其转换成int类型存储2. 同样为了节省内存,在存储长度的字段都是用1or5的存储方式,当被存储字段长度小于254的时候,使用一个字节,大于等于254的时候再使用额外四个字节去存储长度【吐槽一下,代码中最麻烦的那30%的代码都和这个细节有关~~~~~~如果直接用4个字节不好吗,亲?】添加了简单注 阅读全文
posted @ 2012-08-30 00:23 ~嘉言懿行~~我是煲仔饭~~ 阅读(917) 评论(0) 推荐(0) 编辑
摘要: 【请初学者作为参考,不建议高手看这个浪费时间】上一篇文章,我们抓取到了一大批代理ip,本篇文章介绍如何实现downloaderMiddleware,达到随即使用代理ip对目标网站进行抓取的。抓取的目标网站是现在炙手可热的旅游网站 www.qunar.com, 目标信息是qunar的所有seo页面,及页面的seo相关信息。qunar并没有一般网站具有的 robots.txt文件,所以无法利用列表进行抓取,但是,可以发现,qunar的seo页面主要部署在http://www.qunar.com/routes/ 下,这个页面为入口文件,由此页面及此页面上所有带有routes的链接开始递归的抓取所有带 阅读全文
posted @ 2012-08-28 21:49 ~嘉言懿行~~我是煲仔饭~~ 阅读(3556) 评论(8) 推荐(0) 编辑
摘要: 双向链表~~ 代码比较容易懂,小弟只是做了简单的注释,没啥特别的,不多说了,上代码~~Adlist.h 1 #ifndef __ADLIST_H__ 2 #define __ADLIST_H__ 3 4 /* Node, List, and Iterator are the only data structures used currently. */ 5 6 typedef struct listNode { 7 struct listNode *prev; 8 struct listNode *next; 9 void *value;10 } listNode;... 阅读全文
posted @ 2012-08-27 17:21 ~嘉言懿行~~我是煲仔饭~~ 阅读(562) 评论(0) 推荐(0) 编辑
摘要: 更科学的分析见这篇文章,小弟看了之后才明白一点点的http://www.open-open.com/bbs/view/1321697543077下面几句是我自己对zipmap的理解1. zipmap是一个简单的使用字符串实现的hash表,按照作者的本意,只会包含254以内的的key-value对2. 整个redis来看,redis是一个巨大地hash表【key-value对】,只不过这个大hash表的value不只支持字符串,而是redisObject,redisObject中的void * ptr指针可以指向任何数据结构~~~【强悍的扩展性,咱可以自己添加】3. dict乃是redis实现h 阅读全文
posted @ 2012-08-27 16:06 ~嘉言懿行~~我是煲仔饭~~ 阅读(893) 评论(0) 推荐(0) 编辑
摘要: Sds为redis的字符串操作函数,主要依赖于Zmalloc,直接贴代码Sds.hView Code 1 #ifndef __SDS_H 2 #define __SDS_H 3 4 #include <sys/types.h> 5 #include <stdarg.h> 6 7 typedef char *sds; 8 9 10 //可变长度结构体,sizeof(sdshdr)=811 struct sdshdr {12 int len;13 int free;14 char buf[];15 }; 16 17 sds sdsnewlen(const void ... 阅读全文
posted @ 2012-08-25 23:38 ~嘉言懿行~~我是煲仔饭~~ 阅读(1090) 评论(0) 推荐(0) 编辑
摘要: Zmalloc是redis的基础,redis源码的阅读从Zmalloc开始,相信这个一个愉快的旅程,读优秀的代码,就像听音乐~ 好了开始吧头文件 Zmalloc.h,没什么好说的,声明了一些函数,具体的实现见Zmalloc.c 1: #ifndef _ZMALLOC_H 2: #define _ZMALLOC_H 3: 4: void *zmalloc(size_t size); 5: void *zcalloc(size_t size); 6: void *zrealloc(void *ptr, size_t size); 7: void zfr... 阅读全文
posted @ 2012-08-25 23:30 ~嘉言懿行~~我是煲仔饭~~ 阅读(2722) 评论(0) 推荐(0) 编辑
摘要: 【请初学者作为参考,不建议高手看这个浪费时间】前两篇大概讲述了scrapy的安装及工作流程。这篇文章主要以一个实例来介绍scrapy的开发流程,本想以教程自带的dirbot作为例子,但感觉大家应该最先都尝试过这个示例,应该都很熟悉,这里不赘述,所以,将用笔者自己第一个较为完整的抓取程序作为示例作为讲解。首先,要大规模抓取一个网站的内容,必要的资源便是代理ip这一资源,如果不使用代理ip,又追求抓取的速度,很可能会被被抓网站发现行踪并封掉抓取机,所以抓取大量可用的代理ip便是我们第一个任务。大概这个爬虫要实现以下三个功能:1. 抓取代理ip,端口信息2. 验证代理ip,判断其透明性3. 将可用的 阅读全文
posted @ 2012-08-25 01:30 ~嘉言懿行~~我是煲仔饭~~ 阅读(4130) 评论(7) 推荐(0) 编辑
摘要: 【请初学者作为参考,不建议高手看这个浪费时间】上一篇文章里介绍了scrapy的主要优点及linux下的安装方式,此篇文章将简要介绍scrapy的爬取过程,本文大部分内容源于scrapy文档,翻译并加上了笔者自己的理解。忘记scrapy,一般所说的爬虫工作分为两个部分,downoader 和 parser:downloader输入是url列表,输出抓取到的rawdata,可能时候是html源代码,也可能是json,xml格式的数据。parser输入是第一部分输出的rawdata,根据已知的规则提取所需的info图1. 简单爬虫图1所示的是最简单的爬虫,不考虑解析url,并把rawdata中的ur 阅读全文
posted @ 2012-08-19 14:00 ~嘉言懿行~~我是煲仔饭~~ 阅读(1756) 评论(0) 推荐(0) 编辑
摘要: nginx + php-fpm 环境的部署的文章:http://blog.s135.com/nginx_php_v6/关于php-fpm的百度百科介绍:http://baike.baidu.com/view/4168033.htm笔者在实际运用这套环境中,遇到了一个诡异的问题,问题的具体描述是:浏览器同时向网站请求php页面的时候,后开始的页面需要等待前一个页面拿到response后才能开始执行。问题发现的情况是,由于网站某个页面的后台接口问题,又没有设置超时机制,导致这个页面响应龟速。 在等待这个页面的时候,再打开其他网站页面是无法打开的,要等到这个页面返回,才会执行其他页面。经过调查,将问 阅读全文
posted @ 2012-08-18 23:29 ~嘉言懿行~~我是煲仔饭~~ 阅读(810) 评论(0) 推荐(0) 编辑
摘要: 我想来到这的同行们应开看过这篇文章,强烈推荐各位先阅读一下这篇文章,这篇文章中介绍的问题,基本同样的出现在我们的网站上,并一度使我们webserver负载升高(8核负载100)到不可用状态,导致前端502问题。http://blog.s135.com/file_get_contents/按照这篇文章中的讲述的方法:1. file_get_contents 显式设置socket超时时间经过测试是不可行的,进一步的测试,发现在php-fpm + nginx的系统环境中,这种设置超时的方式是不生效的。 而在其他环境中,如apache+php-cgi的方式,超时是可以生效的。超时设置不生效的原因还不清 阅读全文
posted @ 2012-08-18 23:12 ~嘉言懿行~~我是煲仔饭~~ 阅读(729) 评论(0) 推荐(0) 编辑
摘要: 【请初学者作为参考,不建议高手看这个浪费时间】工作中经常会有这种需求,需要抓取互联网上的数据。笔者就经常遇到这种需求,一般情况下会临时写个抓取程序,但是每次遇到这种需求的时候,都几乎要重头写,特别是面临需要抓取大数量网页,并且被抓取网站有放抓取机制的时候,处理起来就会很麻烦。无意中接触到了一个开源的抓取框架scrapy,按照introduction做了第一个dirbot爬虫,觉得很方便,就小小研究了一下,并在工作中用到过几次。scrapy的文档是英文的,网上相关的说明很少,使用的过程中也遇到过很多问题,大部分都是在 stack overflow 上找到的解答,看来这个工具国外的同行们用的会更多 阅读全文
posted @ 2012-08-18 22:22 ~嘉言懿行~~我是煲仔饭~~ 阅读(1390) 评论(0) 推荐(1) 编辑