
程序设计
windsome
这个作者很懒,什么都没留下…
展开
-
动手实现舞蹈链算法
把 简书 的文章转过来,这边看的人应该多点。舞蹈链(Dancing links)实际上是一种数据结构,可以用来实现 X算法,以解决精确覆盖问题。什么是精确覆盖(Exact Cover)问题呢?维基百科上对精确覆盖的定义如下:在一个全集 X 中若干子集的集合为 S。S* 是 S 的一个子集,当且仅当 X 中的每一个元素在 S* 中恰好出现一次时,S* 称之为一个精确覆盖。在计算机科学中,精确覆盖...原创 2020-02-14 16:28:14 · 680 阅读 · 3 评论 -
JAVA并发编程笔记(4)
Thread Confinement如果数据只被一个线程访问,那自然就不需要同步。所以Thread Confinement是获得线程安全最简单的方式之一。这有几种方式。可以完全依赖于实现,也就是调用者来保证只有单线程访问,但这有可能不是很安全。所以还有其它办法来实现这一点。Stack Confinement局部变量必然是线程安全的,只要它们没有escape。局部变量存在于当前线程的栈中原创 2010-05-06 23:36:00 · 1000 阅读 · 0 评论 -
JAVA并发编程笔记(3)
Publication and Escape发布一个对象意味着能够从它能够从它当前范围之外被访问到。比如,保存可以被其他代码找到的这个对象的一个引用,或者将其作为一个非私有方法的返回值,或者将其作为参数传递给其它的类。public static Set knownSecrets;public void initialize() { knownSecrets = new H原创 2010-05-02 00:44:00 · 577 阅读 · 0 评论 -
JAVA并发编程笔记(2)
可见性Visibility这玩意儿很微妙,很容易违反直觉。要在多线程之间读写内存保证可见性,需要使用同步:always use the proper synchronization whenever data is shared across threads.Stale Datapublic class MutableInteger { private int value;原创 2010-05-02 00:09:00 · 449 阅读 · 0 评论 -
java并发编程实践 笔记(1)
线程安全 什么是线程安全(thread-safe)? 一个类,如果能够在多线程并发访问的环境下(不管线程访问的顺序)正确表现自己的行为,并且无需外部调用添加任何同步之类的操作,这个类就是线程安全的。 这个正确性可以这么理解,就是说多线程访问的结果不会不同于单线程的访问。 线程安全的类不需要外部调用提供任何附加的同步。 无状态(stateless)的类永远是线程安全的。原创 2010-04-22 11:54:00 · 499 阅读 · 0 评论 -
送一句话(转)
转载自o6z的bloghttp://ozzzzzz.javaeye.com/blog/198057 朋友要去应聘了,信心不是很足。我有一句话:对自己没信心无所谓,只要对自己的代码有信心。我很久之前认识一个人,他几乎不符合所有的做成功程序员的必要条件:不勤奋,不学习,不喜欢交流,不遵守纪律,不注意团结。总之你可以想到的会令他失败的条件,他都具备了。唯独他能写出好的转载 2009-11-11 13:59:00 · 545 阅读 · 0 评论 -
软件最重要的是做什么,而不是怎么做
假设把软件分成两个方面,一个方面是做什么,一个方面是怎么做,那么哪个方面更重要貌似是不言而喻的。实际上,我认为跟软件相关的任何人,都应该将自己对软件关注的焦点首先放在做什么上。似乎前面说的有点废话,但我感觉程序员在编写代码的时候,往往会忽略了这一点。太多的代码纠结于如何去实现一个功能,而这个功能本身究竟是什么,从代码上看却经常是模糊不清的。我还是认为任何一段代码都应该清晰的反映出这段代码所代表原创 2009-09-27 21:24:00 · 1051 阅读 · 0 评论 -
沟通,简单,灵活
Kent Beck在他的《实现模式》里面,提到了编程的价值观问题。沟通,简单,灵活,这就是Kent Beck认为的编程时影响他每一个决策的核心的价值观。我完全认同他的观点。在我的编程实践里,我也时刻朝着这个方向努力。这种价值观都建立在这样一个基础之上,就是说代码是经常需要人去维护的。事实上维护代码的成本远远高于构建它们的成本。当然,如果一个软件写出来之后就基本上不需要再维护,那么我们或许应该采原创 2009-09-10 01:14:00 · 604 阅读 · 0 评论 -
面向对象分析与设计(第3版)
Booch的这本书分成三个部分,第一部分介绍了面向对象的基本概念。我觉得这是这本书写得最好的一部分。虽然我觉得从理论上而言讲的可能还是不够深入,但至少读完之后对面向对象会有一个直观上的认识。第二部分则介绍了UML2.0,以及软件开发生命周期和项目管理等方面的一些知识。同样的,后面这两点也不够深入,只是简略的介绍。第三部分属于实战部分,作者依次介绍了五个项目如何用面向对象分析与设计的方法进行开发。这原创 2009-08-31 10:08:00 · 899 阅读 · 0 评论 -
应该如何使用Mock
话说昨天看了一篇《Mock Roles, not Objects》的论文,彻底颠覆了我对mock的理解和认识。这篇论文是jMock作者在2004年发表的,描述了Mock Objects应该如何在TDD的过程中使用。 按照这篇文章的说法,Mock最重要的用途是用于推进纯粹的测试驱动开发。 例如,我们在开发一个对象A的时候,A需要一个service S,但这时S还没有编写实现。于是原创 2009-08-25 10:10:00 · 1056 阅读 · 1 评论 -
关于测试驱动和遗留系统
随手google到gigix的blog,看了一些他的观点和若干人等的相关评论,有些觉得颇有道理,摘录如下。 看“测试驱动开发”这个名字,首先应该明确:与它对应的是“文档驱动开发”。它是一种开发过程,这里的测试是一个设计问题,而不是QA问题。在没有 TDD之前,“正统的”开发过程要求有设计文档:高层设计描述一个模块“做什么事”,详细设计描述一个模块“如何做这些事”。软件工程课讲得原创 2009-08-24 15:11:00 · 462 阅读 · 0 评论 -
开发人员最重要的技能
08年初写的。话说我现在越来越发现,想写出好的代码真不是一件看上去那么简单的事情,要远远比学习某些特定的技术困难得多。 2008-01-23 19:37 阅读了Martin Fowler最新的一篇blog,颇有感触。 http://martinfowler.com/bliki/PreferDesignSkills.html 这篇文章一开始就提到这样一个场景:假设你原创 2009-08-24 15:06:00 · 435 阅读 · 0 评论