Algorithm/Think In Code
文章平均质量分 70
RayChase
博客搬家了: https://www.raychase.net/
展开
-
函数式编程(Functional Programming)
函数式编程已经有比较长的历史了,如今的动态语言,很大程度上也受到了函数式编程(反过来名叫命令式编程)的启发。 在函数式编程语言中,当你写了一个函数,接受一些参数,那么当你调用这个函数时,影响函数调用的只可能是你传进去的参数,而你得到的也只能够是计算结果。因此,一个void的方法,是没有任何意义的。如果传入了引用类型的参数,也是不合要求的。 在函数式编程中访问状态是十分安全的,因为状态不会改变,我可以把一个Point或List对象交给任意多的地方去访问,完全不用担心副作用。函数式编程的十分容易并行,因为我原创 2011-02-11 21:04:00 · 3639 阅读 · 0 评论 -
功能、模块质量和非功能性测试
<br />但凡面向终端用户的产品,产品做大了以后,几乎都要涉及到基线能力和定制能力的划分。任何一个优秀的产品,都要经历从相对无序到有序的逐步成熟的过程。产品的发展总是要经历不断的阵痛,可是时间长了,我还是总免不了思考:好吧,就算产品最初匆忙和艰辛的时期已经过去,就算现在基线能力的建设已经迈入正轨,可是为什么我们的直接客户,定制团队还是那么辛苦?<br /> <br />有多少功能是真正值得去完成、真正被用户所需要的?<br />据一位定制的兄弟说,其实这个比例只有8%,我相信数据也许是不准确的,但不管数据原创 2011-03-09 23:48:00 · 2055 阅读 · 0 评论 -
代码的变和不变
哲学上说变与不变,讲的是绝对运动与相对静止的道理,在代码设计中,也有许多变和不变之间的辩证故事。 有一些类在创建以后,整个生命周期内都不会发生变化,这种模式被称为Immutable Pattern。 较弱的不变模式:指的是一个类的实例状态是不可变化的,但是这个类的引用的实例却可以变化。 比如说:Visitor模式常常是这样的,整个流程是不可变的,但是我为我的整个流程提供灵活的切入点,提供出来访问接口,供变化的部分完成。 较强的不变模式:一个类实例状态不可变,其内部引用的所有实例也不可变。 这原创 2011-03-14 23:51:00 · 990 阅读 · 0 评论 -
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(汇总帖)
J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(一) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(二) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(三) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(四) J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(五) J2EE 核心模式(Core J2EE Patterns)学习原创 2011-05-15 21:33:00 · 1603 阅读 · 1 评论 -
大型互联网应用的技术选型和决策,10条成功与失败的记录
作为以老版本为模子重做的解耦版本,这个大型互联网应用产品是从2009年中开始落地的。而我本人也是该版本的主创人员之一,到今日,团队已经发展到开发测试人数百人的大型互联网产品团队的规模,发布、割接和上线了许许多多个商用版本。 对架构的审视,对选型和设计的反思,不仅仅要在产品初创时期,更要在产品发展的整个过程中进行,团队做同类型产品的能力就是这样在不断总结和自我批评中成熟的。以下为个人观点,难原创 2011-06-05 23:00:00 · 1486 阅读 · 0 评论 -
Javascript Memoizer
以下来自John Hann的实现,这段代码引起了我的注意,它用巧妙的方法把方法调用的结果缓存起来了。 代码解析:// memoize: 使用memoization来缓存的通用方法 // func: 要被缓存的方法 // context: 方法执行上下文 // Note: 方法必须是外部可访问的,参数是可字符序列化的 function memoize (func, con原创 2011-06-20 23:52:00 · 1082 阅读 · 0 评论 -
过度工程
最初我知道这个词是在Rod Johnson的《J2EE Development without EJB》,随着阅历地增长,渐渐发现书中熟悉的场景也在身边再现了。 敏捷、还有设计模式,给一个团队带来了什么? 我之所以把这两个词放在一起讲,是因为我要说一件显而易见的事情,可是这样一件事情很多人又不愿承认。 团队,是有风格个性的;团队,也是有能力强弱的。不管你承认不承认,整体来说,我们都还不是精英团队,因此相对于某些公司成功的案例来说,我们有很多事是不适合做的。 敏捷强调了主动性,强调了沟通,事实上原创 2011-04-30 22:25:00 · 1624 阅读 · 0 评论 -
随手记:巧妙设计,并发场景下突破常规synchronize,提高读写效率
1、Peterson 算法(Dekker算法的演化),这个算法设计得很巧妙,理解的核心就是搞清楚三个标志位是怎样控制两个方法对临界区的访问的: volatile int flag1 = 0; //主观因素:flag1表示方法1自身是否要求进入临界区 volatile int flag2 = 0; //主观因素:flag2表示方法2自身是否要求进入临界区 volatile int原创 2011-06-26 01:10:00 · 2150 阅读 · 1 评论 -
Java的无锁编程和锁优化
在这篇文章里面已经提到了三件事情:1、Peterson 算法,2、ConcurrentHashMap,3、无锁编程的初识。 如果站在语言层面之上,仅从设计的层面看,可以避免锁的思路至少包括:1、单线程来主导行为,多线程池化操作避开状态变量。比如在一个WEB应用中,原创 2011-08-07 17:53:48 · 4925 阅读 · 1 评论