Spiga

Bloom Filter算法

2012-02-08 23:22 by 横刀天笑, 491 visits, 网摘, 收藏, 编辑
摘要:集合数据结构一般都有这么一个方法:contains。其作用就是判断给定的元素是否存在集合中,这是一个常用的方法。其最简单的内部实现即遍历集合内的元素,一个个的判断是否与给定元素相等。为了更高效点我们甚至可以采用“更好的(好是相对的)”算法实现。比如如果该集合是已经排序的,那么我们用二分查找来实现contains肯定更好。但是,如果集合的数据量庞大到一定程度,大部分我们熟知的算法不再有什么用了。即使可以使用,但是机器内存也不允许。而Bloom Filter就是这么一个空间利用率非常高的算法。我们先来看看这个算法的原理:1 首先我们有一个长度为n的比特数组,开始的时候将这个比特数组里所有的元素都初 阅读全文

memcached源代码阅读笔记(二):网络处理部分

2012-01-02 11:30 by 横刀天笑, 453 visits, 网摘, 收藏, 编辑
摘要:既然memcached是一个缓存服务器,而且要提供高效的缓存服务,那么网络层肯定要非常有效率才行。要能支撑大量的并发连接,还要有很优秀的响应速度。除此之外,因为memcached的核心业务并不是网络层,它的核心是缓存机制。那么就必须采用一种机制,将网络层隔离,以免网络通信部分缠绕在系统的各处,扰乱了核心逻辑。 阅读全文

关于自动化测试

2011-12-14 14:16 by 横刀天笑, 1775 visits, 网摘, 收藏, 编辑
摘要:自动化测试是软件开发中非常重要的一环,那么我们如何进行自动化测试呢?何时添加自动化测试呢?自动化测试又有些什么作用。本文是我在team内部分享的一些内容。 阅读全文

memcached源代码阅读笔记(一)

2011-12-02 14:28 by 横刀天笑, 531 visits, 网摘, 收藏, 编辑
摘要:缓存在系统设计中占有非常重要的地位。对于构建大型系统,缓存的使用非常重要。一般,缓存的目的都是为了将那些耗时又耗资源的东西,临时的保存在一个能够快速获取的地方,以此来减少资源的消耗,让我们可以更快的得到那些东西。简单的情况,比如我们可以把从数据库里取到的数据放到一个hashtable中,比如以sql为条件。在一定时间内,只要去数据库里取一次,然后就可以重复利用多次。这是个非常简单的缓存利用场景。但是随着系统规模的增长,这种缓存机制就慢慢的不足以应付我们的需求。因为hashtable的这种方式,决定着这个hashtable肯定是与我们的应用放到同一个进程的。如果系统规模大了,我们可能要部署多个应 阅读全文

assertThat, assertEquals, assertTrue

2011-09-03 13:27 by 横刀天笑, 3225 visits, 网摘, 收藏, 编辑
摘要:昨天晚上是AgileChina 2011的Open House活动,我是Coding环节的志愿者。Coding环节主要是想让参会的开发人员体验一下结对编程、测试驱动开发以及重构的过程。我们准备了四个不同类型的编程题目,公司会有八九位同事和参会的同行一起来体验这个过程在最后一轮Pair当中,一位同学问到:为什么不使用assertEquals呢?我看到你们都是在用assertThat,好像不怎么提倡用assertEquals和assertTrue等。 当时因为活动快结束了,我们要去拍合照,所以简单的回答了一下。这里再详细回答一下这个问题。 阅读全文

简单设计

2011-08-31 08:10 by 横刀天笑, 3494 visits, 网摘, 收藏, 编辑
摘要:XP(极限编程)里除了大名鼎鼎的TDD,重构等最佳实践外还有一些不怎么被人注意的实践,比如本文想谈的简单设计(Simple Design)。 我们常常说设计要简单,简单即美。甚至敏捷软件开发的四个要素(沟通、反馈、简单、勇气)简单也位于其中。那到底什么是XP开发者眼中所认为的简单呢? 在Kent Beck所著的《解析极限编程》里对简单设计有四条“简单”的描述,通常也被大家称为简单设计四原则 阅读全文

给Cuke4Duke添加一个AfterAll标签(一):使用Cuke4Duke

2011-08-31 07:08 by 横刀天笑, 1331 visits, 网摘, 收藏, 编辑
摘要:我们团队使用的Cucumber作为我们的功能测试框架。Cucumber是一种BDD(Behaviour driven development)测试框架。感兴趣的读者可以去Cucumber的官网了解BDD和该框架更详细的信息:点击这里。在这里我就不详细描述了。 那么这和本文要说的Cuke4Duke有什么关系呢?实际上Cucumber是ruby编写的,原生的也只对ruby编写测试提供支持。而Cuke... 阅读全文

做Java开发这一年

2011-06-28 11:57 by 横刀天笑, 18663 visits, 网摘, 收藏, 编辑
摘要:从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了。通过这一年时间也有些感触,想从几个面比较一下这两个平台。希望能做到客观公正。 阅读全文

自动垃圾回收学习笔记-垃圾回收算法

2011-05-28 15:06 by 横刀天笑, 2674 visits, 网摘, 收藏, 编辑
摘要:既然是自动垃圾回收,那么平台肯定得采取一种方式发现垃圾,然后清除。这就是垃圾收集算法所关注的问题。垃圾收集算法的任务就是将活动的对象和已经死掉的对象分别出来,然后将死掉的对象的内存回收,而且为了更好的利用内存,有的算法还会对内存碎片进行压缩。下面会对常用的垃圾收集算法进行介绍 阅读全文

自动垃圾回收学习笔记-我们为什么需要自动垃圾回收

2011-05-21 12:57 by 横刀天笑, 1140 visits, 网摘, 收藏, 编辑
摘要:现代的虚拟运行时平台基本上都提供了垃圾回收的机制,其实垃圾回收是一个非常古老的技术,可以追溯到Lisp。 那么为什么要使用垃圾回收呢?这个要和显式的内存分配和释放相比较。我们或多或少的接触过或学习过这样的代码: 1: struct Node{ 2: ElementType Element; 3: Node* Next; 4: } 5: 6: Node* node = malloc(sizeof(Node)); 7: 8: //do something 9: 10: free(node);这里的malloc和free就是程序员显式的从堆上分配内存和释放不再使用的内存,将其归还给堆。这种让程序员控 阅读全文