最近由于在学校和老师做项目,需要做一个快速过滤url的小的项目,说白了就是存一些规则,到时候用url匹配,要求代码量足够少,效率足够高。说实话其实我一开始我挺迷茫的,因为在我们学校(东北大学)特别是计算机的本科生是比较注重基础的,所以实际的项目经历和平常的代码量都比较少,可能我们学校出来的本科生基础比较好,但是项目经历就要少很多,这个在公司面试过程中是很吃亏,但是一进公司真的是不差,因为现在来我们学校招聘的公司有好多的架构师都是东大本科生就出去了(哈哈,在这里打一个广告,不要介意啊)。言归正传,java这个过滤检索效率的提高就是我这个没有什么经验的人也知道这个项目八成要用哈希表,所以我一开始我设计了一个根据哈希表来检索的,但是由于底层的实现可能比较笨拙,老师看了不是很满意(其实我自己认为已经很接近Adblock plus算法了,哈哈),他就建议我可以参考一下Adblock plus的算法,因为火狐用户基本都用Adblock plus插件,而且效率还行,没办法,老师吩咐,只能照做。
网上有一篇关于Adblock plus原理的博客,但他是翻译版,说实话,翻译的一般般吧,后来我们找到英文版的又读了一遍,写的真是太泛泛了,读完之后就知道一个shotcut ,推荐用8个字符长度,用来做哈希表的键,剩下的就什么都没有了,没办法,看源码吧。。。
说实话,之前我真的是没用过Firefox,没办法,下了一个Firefox,又装上了Adblock plus插件,又进了Adblock plus社区去找源代码,这中间的坎坷就不说了,没接触过的东西开荒真的是会遇到各种莫名其妙的错误啊,有一些甚至老师都非常诧异。不过最后还是找到了Adblock plus的源代码:完整版本源代码链接:https://hg.adblockplus.org/ github镜像:https://github.com/adblockplus
说到读代码这可真是一门学问啊,由于我们目前做的这个是java的项目,看到有Android的源代码,所以就选择看Android的,结果是各种蒙啊,不知道是不是手机的原因,我的手机对Adblock plus不怎么感冒,但是也是硬着头皮把他这个Android的版本的大致的构造弄清楚了,不知道是不是作者懒啊,这个Android版本的源代码,最上层自然而然的用了java源代码,读了半天发现只是做了一个架子,没有什么具体的实现,java的下一层是C++代码,然后又花了半天读c++代码,最后苦逼的发现竟然还有下一层!js!!&