摘要: ssh代理是很多人都会用到的翻x手段优点:这个可以通过浏览器的插件来定义规则选择哪些网站需要通过代理访问,哪些不需要。缺点:只可以通过浏览器进行访问,手机等移动设备还是得借助VPN才可以。下面是一个我用的登陆脚本,不用每次开代理前都要敲行命令进去直接在本机配置一个crontab就可以了,可以断线重连,很方便的。PID=$(ps aux|grep ssh|grep fgnTN|grep -v grep |awk '{print $2}')echo $PIDif [ $? -eq 0 -a ! -z "$PID" ]then echo "SSH Pro 阅读全文
posted @ 2013-10-23 08:25 Yancey咖啡 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 应用场景:由于Leveldb采用的是分层的存储结构,那么当Get一个key的时候最坏情况就是在所有的层级上都查询一遍这个key,这个开销是非常大的,引入BloomFilter之后,利用BloomFilter能够快速判断“是否存在”的特点可以很快速的知道需不需要在这个Level中进行查询。构造函数:explicit BloomFilterPolicy(int bits_per_key)这里没有默认构造函数,使用时需传入bits_per_key表示每个key的大小主要流程:1)初始化:k_ = static_cast(bits_per_key * 0.69);if (k_ 30) k_ = 30. 阅读全文
posted @ 2013-10-20 22:55 Yancey咖啡 阅读(817) 评论(0) 推荐(0) 编辑
摘要: 程序中经常有计算时间的模块,下面列出一个能够很方便的根据时间偏移取具体时间的方法:imort datetime# 获取当前时间now = datetime.datetime.now()# offset为日期偏移,当前为0,前一天为-1,依此类推res = now + datetime.timedelta(days=offset)# 格式化输出res_str = res.strftime('%Y-%m-%d')其中timedelta的原型为class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[ 阅读全文
posted @ 2013-10-18 14:27 Yancey咖啡 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 推荐系统中经常会用到商品之间的相似度这一数据,业界中最常用的算法莫过于CF算法了,根据用户行为来计算商品之间的相似度,我们可以用一个表格来表述这种算法的原理:Item1Item2Item3User1W11W12W13User2W21W22W23User3W31W32W33在以上表格中Itemi表示的第i中商品,Useri表示第i个用户,而Wij则表示的是用户i对商品j的“评分”,此评分可以是根据行为设定的权重,或者是用户的真实打分。如果要计算Item1和Item2之间的相似度1.用户对Item1和Item2的行为可以看作两个一维的向量(w11,w21.w31),(w12,w22,w32)。2. 阅读全文
posted @ 2013-10-18 00:56 Yancey咖啡 阅读(1487) 评论(2) 推荐(0) 编辑
摘要: 原论文入口1 引言为了实现一个带有容错性的分布式系统而提出的Paxos算法被认为是非常难以理解的。事实上它是一个很简单而且是最平淡无奇的分布式算法之一。它的核心是一个一致性的算法---【5】中提出的“synod”算法,接下来的部分将会讲述这个一致性算法。最后的部分来解释这个复杂的Paxos算法,从一直性的直观应用到建立一个分布式系统的有限状态自动机的模型,应该是众所周知的方法,因为它可能是分布式系统理论中被引用最多的主题。2 一致性算法2.1问题假设一些process可以提出一些提案(value),一个一致性算法保证在这些提出(propose)的提案中有一个会被选择(chosen)。如果没有提 阅读全文
posted @ 2013-10-16 10:23 Yancey咖啡 阅读(1095) 评论(0) 推荐(0) 编辑
摘要: 最小距离算法用来计算两个字符串之间的相似度,这次主要是因为对搜索结果的ReRank需要用这个算法做一下优化。一、简介1.最小编辑距离算法又称 Min Edit Distance,是用来计算两个字符串相似性的比较常用的算法,主要应用场景包括抄袭检测,拼写检查,相似度计算等等方面,这次主要是对搜索结果ReRank时需要用到此算法,Python版的实现已放在我的github上。2. 此算法是利用source串经过插入,删除,更改三种操作转换为目标串所花费资源的多少来衡量两个字符串的相似度的,插入删除等操作分别有相应的权重,一般我们会将插入和删除设为1,更改设为2。二、 算法伪码:数据:1. m = 阅读全文
posted @ 2013-10-15 13:31 Yancey咖啡 阅读(2037) 评论(0) 推荐(0) 编辑
摘要: 在Leveldb中,用户可以将自定义的Cache逻辑传入Option中,默认使用的是LRU算法实现,下面是实现类图:其中LRUHandle是存放数据的nodeLRUCache实现具体的Insert,lookup等操作,而ShardedLRUCache中又实现分片包含多个LRUCache。HandleTable是自己实现的一个HashTable,官方说法是这个实现相较内部实现会有百分之五的提升。下面是主要操作的流程:Insert:1.根据hash结果由ShardedLRUCache选择相应的LRUCache2.将数据存入HashTable中,若空间不足则相应*23.如果是一个已存在的数据那么就根 阅读全文
posted @ 2013-10-14 23:25 Yancey咖啡 阅读(681) 评论(0) 推荐(0) 编辑
摘要: 文件leveldb是根据单机版BigTable来实现的,但是文件的组织方式却有以下几点不同。每一个数据库是由存储在文件夹下面的一系列文件集合来实现的,有很多不同类型的文件:Log Files:log文件(*.log) 存储了一系列最近的更新。每一个更新都会追加到当前的log文件中。当一个log文件到达一个预设阈值(默认是4MB),它将会转变成一个有序表,并且为以后的更新操作生成一个新的log文件。sorted tables一个 sorted tables (*.sst) 存储一系列有序的key。每一个entry是一个key的value或者一个删除的key。sorted tables 由多级的方 阅读全文
posted @ 2013-10-14 11:11 Yancey咖啡 阅读(443) 评论(0) 推荐(0) 编辑
摘要: ./include../leveldb../../db.h db.h 定义了基本的操作接口,包括 Put、Write、Delete等。这里Put,Write等接口用纯虚函数实现,但是却有默认实现。../../cache.h lebeldb 缓存的接口,用LUR算法实现,提供了添加、删除、查找等接口../../comparator.h 压缩算法接口../../env.h 环境设置,一些文件操作../../filter_policy.h 一些过滤的方式,定义了一系列接口,以供实现../../iterator.h 迭代器的一系列操作,包括First,end,seek等../.... 阅读全文
posted @ 2013-10-14 00:04 Yancey咖啡 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 生产者-消费者模型是多线程同步的经典案例此模型中生产者向缓冲区push数据,消费者从缓冲区中pull数据这个Demo中缓冲区用python实现的Queue来做,这个模块是线程安全的使我不用再为队列增加额外的互斥锁.此外这个Demo中信号处理的实现是这样的:1)主线程接到一个SIGTERM的信号后先通知Consumer停止向缓冲区push数据并退出2)Produer将缓冲区中的数据消费完全后在退出3)主线程退出下面是部分代码,全部代码在github上面class Consumer(threading.Thread): def __init__(self, queue): th... 阅读全文
posted @ 2013-10-13 12:42 Yancey咖啡 阅读(1322) 评论(0) 推荐(0) 编辑