05 2012 档案

heritrix总结------HostnameQueueAssignmentPolicy改写
摘要:Heritrix多线程默认是根据域名来分下载队列,但是这种策略非常不符合垂直搜索的要求,故需要引入ELFHash来改进分配策略。指定的链接队列中以host作为key值进行hash,这样使得即使配置了100个线程,也只有一个线程在运行,因为heritrix默认每次从一个队列中取出来一个url进行抓取,等抓取结束之后再取另外一个。因为指定路径基本上都是在一个host里面,这样就会变成单线程爬取,非常的慢。无奈之下继续改写,这次是修改HostnameQueueAssignmentPolicy,也是系统默认的。其中主要是getClassKey这个函数,是生成队列的key值得,使用ELFHash哈希算法 阅读全文

posted @ 2012-05-31 23:31 linzuxin 阅读(186) 评论(0) 推荐(0)

利用 Heritrix 构建特定站点爬虫
摘要:本文由浅入深,详细介绍了 Heritrix 在 Eclipse 中的配置、运行。最后对其进行扩展,介绍如何实现只抓取特定网站的页面。通过本文,读者可以了解 Heritrix 的相关特点以及在 Eclipse 中的配置运行,能够从零开始构建特定站点的专有爬虫,从而为网站增加全文检索服务。背景随着网站内容的增加,为其添加搜索功能是一个常见的需求,搜索引擎也已成为互联网最重要的应用之一。你是否觉得普通的数据库检索已经不能满足你的查询需求了呢?是否希望花最小的代价为你的网站建立一个像 Google、百度那样的全文搜索引擎?是否希望创建自己专有的搜索引擎而不是想尽办法 SEO(Search Engine 阅读全文

posted @ 2012-05-31 09:06 linzuxin 阅读(158) 评论(0) 推荐(0)

linux mysql proxy 的安装,配置,以及读写分离
摘要:一,mysql proxy是什么,干什么用的MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负 载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多 个proxy的连接参数即可。mysql replication 数据同步上图中,web到底连接那个数据库, 阅读全文

posted @ 2012-05-29 14:50 linzuxin 阅读(563) 评论(0) 推荐(0)

雷军 :互联网创业的葵花宝典
摘要:一个朋友,在一家软件的大企业做了十年的软件研发,想出来创业,问我要注意什么。我开玩笑说,要想成功,必须学习互联网创业的“葵花宝典”,第一条就是“挥刀自宫”。大的软件公司有很多资源,研发能力不错,各种推广资源也非常优越,但很少开发出来优秀的互联网产品。初步看上去,原因很多,比如很难调动个人的积极性、内部管理协调非常困难等。我认为还有一个重要的原因,就是方法不得当。大公司资源多,一个互联网创新项目,投入大量资源后,公司期望值高,考虑的问题自然多了,反而不容易做好。从大公司离职出来创业,首先要“挥刀自宫”,干掉大公司这套做法,控制成本尽量少花钱,集中精力和资源解决核心的一两个问题就足够了。不要想太多 阅读全文

posted @ 2012-05-28 09:50 linzuxin 阅读(258) 评论(0) 推荐(0)

Python open读写文件实现脚本
摘要:1.open使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。file_object=open('thefile.txt')try:all_the_text=file_object.read( )finally:file_object.close( )注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。2.读文件读文本文件input=open('data','r')#第二个参数默认为rinput=open 阅读全文

posted @ 2012-05-24 14:03 linzuxin 阅读(461) 评论(0) 推荐(0)

python容器类型----列表的使用
摘要:python的容器主要包含列表列表,字典1、列表对象的方法包含:insert(i,x)--------在指定位置插入一项。第一自变量是要在哪一个元素前面插入,用下标表示。如:a.insert(0,x)在列表前面插入,a.insert(len(a),x)等价于a.append(x)append(x)---------等价于a.insert(len(a),x)index(x)----------在列表中查找值为x然后返回第一个x的元素的下标,没有找到时出错remove(x)---------在列表中删除第一个值为x的元素,找不到时出错sort()------------对列表元素在原位排序,这个方 阅读全文

posted @ 2012-05-24 13:58 linzuxin 阅读(180) 评论(0) 推荐(0)

Java中的五种单例模式实现方法
摘要:package singleton; /** * @author lei * 单例模式的五种写法: * 1、懒汉 * 2、恶汉 * 3、静态内部类 * 4、枚举 * 5、双重校验锁 * 2011-9-6 */ /** *五、 双重校验锁,在当前的内存模型中无效 */ class LockSingleton{ private volatile static LockSingleton singleton; private LockSingleton(){} //详见:http://www.ibm.com/developerworks/cn/java/j-dcl.... 阅读全文

posted @ 2012-05-18 18:24 linzuxin 阅读(175) 评论(0) 推荐(0)

Python random模块
摘要:random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串。random.random() 用于生成一个随机浮点数:range[0.0,1.0)1importrandom2random.random()#输出 0.5487876445645461random.uniform(a,b) 用于生成一个指定范围内的随机浮点数,a,b为上下限,只要a!=b,就会生成介于两者之间的一个浮点数,若a=b,则生成的浮点数就是a1importrandom2random.uniform(10,20)#输出 15.9999970381523583random.uniform(20,10)#输出 12 阅读全文

posted @ 2012-05-18 17:00 linzuxin 阅读(197) 评论(0) 推荐(0)

Python time模块
摘要:Time模块表示方式:1.浮点型: 以1970.1.1到现在经过的秒数(Unix格式),如time.time(), time.mktime(struct_time)2.struct类元组:如time.localtime(), time.gmtime()对于struct_time形式输出函数可用分片的方法限制输出,如:1importtime2time.localtime()#struct类元组3time.localtime()[:6]#(2011, 10, 17, 16, 26, 58)time.time() 取从1970-1-1到当前时间的秒数,以浮点类型表示1importtime2time. 阅读全文

posted @ 2012-05-18 16:41 linzuxin 阅读(141) 评论(0) 推荐(0)

Python os.path模块
摘要:os.path模块basename('文件路径') 去掉目录路径,返回fname文件名1importos2os.path.basename('/Volumes/1.mp4')#输出('1.mp4')dirname('文件路径') 去掉文件名,返回目录路径1importos2os.path.dirname('/Volumes/1.mp4')#输出('/Volumes')splitdrive('文件路径') 返回(drivername,fpath)元组1importos2os.path. 阅读全文

posted @ 2012-05-18 16:36 linzuxin 阅读(155) 评论(0) 推荐(0)

Python os模块
摘要:OS 模块os模块提供了一个统一的操作系统接口函数,os模块能在不同操作系统平台如nt,posix中的特定函数间自动切换,从而实现跨平台操作。os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname") 改变当前脚本工作目录到dirnameos.curdir 返回当前目录: ('.')1importos2os.getcwd()#输出'/Volumes/Leopard/Users/Caroline'3os.chdir('/Volumes')4os.getcwd()#输出&# 阅读全文

posted @ 2012-05-18 16:31 linzuxin 阅读(265) 评论(0) 推荐(0)

Python中的easy_install
摘要:Python中的easy_install工具很爽,它的作用类似于Php中的pear,或者Ruby中的gem,或者Perl中的cpan。如果想使用easy_install工具,可能需要先安装setuptools,不过更酷的方法是使用ez_setup.py脚本:wget -q http://peak.telecommunity.com/dist/ez_setup.pypython ez_setup.py安装完后,最好确保easy_install所在目录已经被加到PATH环境变量里:Windows: C:\Python25\ScriptsLinux: /usr/local/bin比如说要安装Pyth 阅读全文

posted @ 2012-05-11 10:35 linzuxin 阅读(223) 评论(0) 推荐(0)

Redis进阶教程-aof(append only file)日志文件
摘要:今天看了Redis源码两个多小时,搞清楚了appendonlyfile(AOF)日志的rotate原理.官方文档里面对这部分做了单独的说明,但是就我看来,作者不够优美的用词,完全会让人理解错误.(PS:我要不是觉得文档有问题也不至于看源码)何为AOF?在Redis配置文件中有一个叫appendonly的选项,可以写yes或no.这个选项就是负责是否开启AOF日志的开关.AOF日志,你可以简单理解为MySQL binlog一样的东西,作用就是记录每次的写操作,在遇到断电等问题时可以用它来恢复数据库状态.但是他不是bin的,而是text的.一行一行,写得很规范.如果你是一台redis,那你也能人肉 阅读全文

posted @ 2012-05-08 10:31 linzuxin 阅读(3467) 评论(0) 推荐(1)

最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
摘要:Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。初始时,S中仅含有源。设u是G的某一个顶点,把从源到u且中间只经过S中顶点的路称为从源到u的特殊路径,并用数组d. 阅读全文

posted @ 2012-05-05 20:44 linzuxin 阅读(319) 评论(0) 推荐(0)

数据结构:TRIE树
摘要:Trie树就是字符树,其核心思想就是空间换时间。举个简单的例子。给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。这题当然可以用hash来,但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词,我要询问它的前缀是否出现过。这样hash就不好搞了,而用trie还是很简单。现在回到例子中,如果我们用最傻的方法,对于每一个单词,我们都要去查找它前面的单词中是否有它。那么这个算法的复杂度就是O(n^2)。显然对于100000的范围难以接受。现在我们换个思路想。假设我要查询的单词是abcd,那么在他前面的单词中,以b,c 阅读全文

posted @ 2012-05-04 21:32 linzuxin 阅读(175) 评论(0) 推荐(0)

Trie树|字典树的简介及实现
摘要:Trie,又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。相对来说,Trie树是一种比较简单的数据结构.理解起来比较简单,正所谓简单的东西也得付出代价.故Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点.其基本性质可以归纳为:1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3. 每个节点的所有子节点包含的字符都不相同。其基本操作有:查找 插入和删除,当然删除操作比较少见.我在这里只是实现了对整 阅读全文

posted @ 2012-05-04 21:20 linzuxin 阅读(236) 评论(0) 推荐(0)

Hash和Bloom Filter
摘要:这几天的“科研”中涉及到了一个概念,Bloom Filter(有的中文翻译为布隆过滤器,不知道正确否),今天看了下相关的资料,发现这东西和Hash还挺有关系的,在这里一并讲下。Hash(函数/表)Hash (中译为哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。其作用是将一个大的数据集映射到一个小的数据集上面(这些小的数据集叫做哈希值,或者散列值)。Hash table(散列表,也叫哈希表),是根据哈希值(Key value)而直接进行访问的数据结构。也就是说,它通过把哈希值映射到表中一个位置来访问记录,以加快查找的速度。下面是一个典型的hash函数/表示意图:哈希 阅读全文

posted @ 2012-05-04 21:12 linzuxin 阅读(302) 评论(0) 推荐(0)

布隆过滤器 bloom filter
摘要:布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。基本概念如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢()。不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列(Bit ar 阅读全文

posted @ 2012-05-04 21:04 linzuxin 阅读(213) 评论(0) 推荐(0)

Gson简要使用笔记
摘要:经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段。下面是一个简单的例子:Person实体public class Person { private String name; private int age; /** * @return the name */ public String getName() { return name; } /** * @pa... 阅读全文

posted @ 2012-05-03 14:38 linzuxin 阅读(168) 评论(0) 推荐(0)

导航