2012-01-02 11:30 by 横刀天笑, 187 visits, 网摘, 收藏, 编辑
摘要:既然memcached是一个缓存服务器,而且要提供高效的缓存服务,那么网络层肯定要非常有效率才行。要能支撑大量的并发连接,还要有很优秀的响应速度。除此之外,因为memcached的核心业务并不是网络层,它的核心是缓存机制。那么就必须采用一种机制,将网络层隔离,以免网络通信部分缠绕在系统的各处,扰乱了核心逻辑。
阅读全文
2011-12-14 14:16 by 横刀天笑, 1561 visits, 网摘, 收藏, 编辑
摘要:自动化测试是软件开发中非常重要的一环,那么我们如何进行自动化测试呢?何时添加自动化测试呢?自动化测试又有些什么作用。本文是我在team内部分享的一些内容。
阅读全文
2011-12-02 14:28 by 横刀天笑, 318 visits, 网摘, 收藏, 编辑
摘要:缓存在系统设计中占有非常重要的地位。对于构建大型系统,缓存的使用非常重要。一般,缓存的目的都是为了将那些耗时又耗资源的东西,临时的保存在一个能够快速获取的地方,以此来减少资源的消耗,让我们可以更快的得到那些东西。简单的情况,比如我们可以把从数据库里取到的数据放到一个hashtable中,比如以sql为条件。在一定时间内,只要去数据库里取一次,然后就可以重复利用多次。这是个非常简单的缓存利用场景。但是随着系统规模的增长,这种缓存机制就慢慢的不足以应付我们的需求。因为hashtable的这种方式,决定着这个hashtable肯定是与我们的应用放到同一个进程的。如果系统规模大了,我们可能要部署多个应
阅读全文
2011-09-03 13:27 by 横刀天笑, 2754 visits, 网摘, 收藏, 编辑
摘要:昨天晚上是AgileChina 2011的Open House活动,我是Coding环节的志愿者。Coding环节主要是想让参会的开发人员体验一下结对编程、测试驱动开发以及重构的过程。我们准备了四个不同类型的编程题目,公司会有八九位同事和参会的同行一起来体验这个过程在最后一轮Pair当中,一位同学问到:为什么不使用assertEquals呢?我看到你们都是在用assertThat,好像不怎么提倡用assertEquals和assertTrue等。
当时因为活动快结束了,我们要去拍合照,所以简单的回答了一下。这里再详细回答一下这个问题。
阅读全文
2011-08-31 08:10 by 横刀天笑, 3362 visits, 网摘, 收藏, 编辑
摘要:XP(极限编程)里除了大名鼎鼎的TDD,重构等最佳实践外还有一些不怎么被人注意的实践,比如本文想谈的简单设计(Simple Design)。
我们常常说设计要简单,简单即美。甚至敏捷软件开发的四个要素(沟通、反馈、简单、勇气)简单也位于其中。那到底什么是XP开发者眼中所认为的简单呢?
在Kent Beck所著的《解析极限编程》里对简单设计有四条“简单”的描述,通常也被大家称为简单设计四原则
阅读全文
2011-08-31 07:08 by 横刀天笑, 1268 visits, 网摘, 收藏, 编辑
摘要:我们团队使用的Cucumber作为我们的功能测试框架。Cucumber是一种BDD(Behaviour driven development)测试框架。感兴趣的读者可以去Cucumber的官网了解BDD和该框架更详细的信息:点击这里。在这里我就不详细描述了。 那么这和本文要说的Cuke4Duke有什么关系呢?实际上Cucumber是ruby编写的,原生的也只对ruby编写测试提供支持。而Cuke...
阅读全文
2011-06-28 11:57 by 横刀天笑, 16587 visits, 网摘, 收藏, 编辑
摘要:从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了。通过这一年时间也有些感触,想从几个面比较一下这两个平台。希望能做到客观公正。
阅读全文
2011-05-28 15:06 by 横刀天笑, 2439 visits, 网摘, 收藏, 编辑
摘要:既然是自动垃圾回收,那么平台肯定得采取一种方式发现垃圾,然后清除。这就是垃圾收集算法所关注的问题。垃圾收集算法的任务就是将活动的对象和已经死掉的对象分别出来,然后将死掉的对象的内存回收,而且为了更好的利用内存,有的算法还会对内存碎片进行压缩。下面会对常用的垃圾收集算法进行介绍
阅读全文
2011-05-21 12:57 by 横刀天笑, 1051 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就是程序员显式的从堆上分配内存和释放不再使用的内存,将其归还给堆。这种让程序员控
阅读全文
2011-05-21 12:53 by 横刀天笑, 1052 visits, 网摘, 收藏, 编辑
摘要:栈和堆 首先要明确的是,这里所说的栈和堆与数据结构里所说的Stack和Heap不是一个概念。当然,这里的栈和堆的表现形式或实现形式跟数据结构里的Stack和Heap可能是一模一样。 栈 栈是跟线程相关的。比如在Windows平台上,默认情况下,你创建一个线程会给你1MB的内存空间当做栈(对于Native Code来说这1MB是按需提交的,而对于Managed Code来说是创建线程的时候就提交)。这1MB一般来说会用来干这么几件事儿: 线程执行方法时传递参数,方法的局部变量,方法的返回地址等都会保存在这个栈上。 对于线程执行的每个方法都会在这个栈上占一帧,这就是所谓的栈帧。随着线程的执行,栈就
阅读全文