摘要: 在Thread.start之前的操作,hb 线程里面的操作 对一个锁的解锁,hb 重新获得锁 一个线程里的所有操作,hb其他线程调用这个线程的join返回后。 对一个volatile的写入操作,hb读取操作 对一个并发集合(CopyOnWriteList等)的写入操作,hb于对他的删除、读取操作 h 阅读全文
posted @ 2018-04-27 09:08 邓志国 阅读(159) 评论(0) 推荐(0) 编辑
摘要: Martin Flower说过,一个Web应用,从一个Controler->Service->DAO->数据库开始是个不错的开始(大意)。我相信很多项目可能都是这样的一个结构(我以前也是)。但这样的结构有个问题:Service层实际上应该是业务逻辑层,他依赖的DAO,这样就和DAO耦合在了一起。同时 阅读全文
posted @ 2018-04-24 11:40 邓志国 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 编程范式就像法律。每个法律条文,都从你手中征收了部分权利,但同时赋予你更好的社会(理论上)。比如法律禁止你杀人,那么也同时保证了你不会被随意谋杀。从计算机软件开始之初,一共诞生了3种重要的编程范式。 一是结构化编程。结构化编程范式把我们直接控制语句的权利给没收了。我们从此不再用Goto直接在语句中跳 阅读全文
posted @ 2018-04-24 11:24 邓志国 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 今天听到有人抱怨Scrum中的迭代。说每个迭代时间固定,所以很难安排Feature,经常要做出选择,决定这个迭代到底放入哪些Feature,有时候又难以割舍。这个在刚开始采用Scrum的时候,我也经常碰到这种问题。现在谈谈我对这个问题的理解。 按我的理解。Scrum中的冲刺,其目的并非为了版本发布; 阅读全文
posted @ 2018-04-24 11:07 邓志国 阅读(1150) 评论(0) 推荐(0) 编辑
摘要: 缺省情况下,你自己设定的Header会在传递的时候给清空,需要在配置中加上如下 如果有多个Header,用逗号隔开。 发送方: 阅读全文
posted @ 2018-04-09 14:00 邓志国 阅读(1810) 评论(0) 推荐(0) 编辑
摘要: 在典型的Spring Web层中,我们把协议接口这层也定义为UI的一部分,一般来说就是Controller实现的这部分功能。主要作用是从Web接口获取用户传过来的参数,然后发送给业务装饰层进行调用,获取业务装饰层的返回结果并以约定形式返回给浏览器之类。 业务装饰层接受UI层的调用,并返回结果给UI层 阅读全文
posted @ 2018-04-01 20:45 邓志国 阅读(341) 评论(0) 推荐(1) 编辑
摘要: 不必要的文档 在传统的软件开发过程中,文档是非常重要的东西。从需求到概要到详细到测试,覆盖每个环节。这些文档汗牛充栋,浪费大量人力编写、维护。但哪些文档才真正起到作用呢?在我看来,除了用户使用手册(有些产品需要)、业务流程图以外。绝大多数文档除了浪费人力并没有什么帮助。需求文档?谁能一开始写得清清楚 阅读全文
posted @ 2018-03-15 09:02 邓志国 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 业务逻辑包含两个部分:业务实体和用例。 业务实体,是指那些业务固有的东西,即使不用计算机,也必须要有的。比如对一个在线考试系统,我们即使不用在线的方式,要实现一个考试的业务,我们也必须拥有题库、考卷这样两个实体。那么在系统里面,我们就有题库和考卷这两个实体: 题库。包含有N个可选题目。 考卷。包含N 阅读全文
posted @ 2018-03-13 09:08 邓志国 阅读(768) 评论(0) 推荐(0) 编辑
摘要: 自描述 命名恰当规范,看名字就知道意思。包括包、类、方法、变量等等,而不是靠注释去理解。当你需要注释才能描述清楚你想干嘛,请思考一下,能否从命名就说清楚?除非是在不行,否则不要依赖注释。 注释的一个坏处是,你不能保证注释和代码是同步的。当你由于某些原因改了代码,而没有修改注释,这时候注释是误导人的, 阅读全文
posted @ 2018-03-13 07:21 邓志国 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 如何保证代码都被Review?人一是有惰性,二是习惯问题,可能会导致有些代码没有Review而进入了代码库。如果你用Gitlab系统,可以把主分支设置为protected,不准任何人push。开发只能在分支上进行,开发完后,在网页上发一个merge request。请其他人Review后,merge 阅读全文
posted @ 2018-03-06 19:57 邓志国 阅读(344) 评论(0) 推荐(1) 编辑