摘要: 花了两个月时间,终于完整的看了一遍这本书。我的感觉,会不会设计模式,不是看你是否知道这些设计模式的名字,知道他们的用途;而是看你在设计的时候,是否会根据问题选择合适的模式。而这里“合适”二字又包含了很多的内容,什么是合适,什么是不合适。这个本书告诉我们,能够容纳变化,不因为需求变化而违背OO设计原则的设计是合适的。 那么什么是OO设计原则呢?封装,继承,多态是基本的OO设计工具,基于这几个工具建... 阅读全文
posted @ 2013-03-16 16:48 永远是学生 阅读(941) 评论(0) 推荐(0) 编辑
摘要: 感觉最近很浮躁,遇到问题,拿到错误消息就往google或者baidu扔。实际上这样解决问题的效率很低。以今天遇到的问题为例。我们的web的权限验证系统可以验证某个人是否可以访问某个action路径。我发现我的所有的访问都被拒绝了,说不能访问jndi:java:comp/env/xxx.action。 刚开始我以为是权限系统出错了,问了一圈,别人都没有这个问题。然后我以为是我的tomcat坏了。拿... 阅读全文
posted @ 2013-03-13 17:43 永远是学生 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 我今天参加了这个培训,有些东西比较有意思,和大家分享一下: 1. 创新的步骤:提出,扩展,评估,执行。 2. 创新的方法: a) 衍生创新法:提出初始解决办法;分析该办法背后的概念;根据这个概念提出新的想法;例如解决健康的问题: i. 初始想法:跑步 ii. 抽取概念:锻炼心肺功能;或者加强新陈代谢 iii. 针对“锻炼心肺功能”扩展:游泳,爬山 iv. 针对“加强新陈代谢”扩展:蒸... 阅读全文
posted @ 2013-03-12 22:29 永远是学生 阅读(249) 评论(0) 推荐(0) 编辑
摘要: maven的核心内容都在pom上面,pom包含几个部分: 1. groupid,artifactid以及版本之类的; 2. 父亲; 3. 依赖,dependency 4. 若干lifecycle。 lifecycle包含若干步骤,每个步骤包含若干目标,每个目标由一个plugin提供。 不同的pom类型有不同的lifecycle,比如jar,war和ear的步骤就不一... 阅读全文
posted @ 2013-03-10 18:22 永远是学生 阅读(229) 评论(0) 推荐(0) 编辑
摘要: show global status 和show session status可以查看数据库server上当前的各项参数。范围限于使用当前用户名登陆的所有应用。 常见的选项有: connections表示总共有多少连接被打开, max_used_connections表示最多有这么个connection被同时使用。 threads_connected表示有多少线程曾经连接过。 threa... 阅读全文
posted @ 2013-02-25 23:43 永远是学生 阅读(156) 评论(0) 推荐(0) 编辑
摘要: thread和runnable已经out了。取而代之的是callable<V>,它的结果存在future<V>中。后者有get对象可以阻塞并最终获得异步结果。FutureTask既是callable又是future。可以作为一个执行单元。 直接启动一个thread执行callable是不明智的,因为太多的短命的线程会影响jvm的性能。较好的办法是Executors的线程池。它有不同的方法创建不同... 阅读全文
posted @ 2013-02-17 15:31 永远是学生 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 当项目做大的时候,分清楚单元测试和集成测试是必要的。在单元测试的阶段,分清楚stub和mock的概念,有助于我们使用最合适的工具,最小的代价实现我们的测试目标和外部依赖之间的关联。 从概念上说stub是外部依赖的一个简单实现,它暴露出测试所需要的方法,以及需要验证的状态。单元测试的时候,它的这些方法会被调用到,而其内部状态也会发生改变,我们就可以对这个内部状态进行验证。它的理论上,如果我们测试目... 阅读全文
posted @ 2013-02-17 11:29 永远是学生 阅读(625) 评论(0) 推荐(0) 编辑
摘要: 基于比较大排序算法至少需要O(n*lgn)的复杂度。对于一些特殊的输入我们有一些特殊的算法,有可能得到复杂度为O(n)的算法。本文简要描述其中的几种:count排序,基数排序和桶排序。 count排序的假设是被排序的字段在一个有限的范围内,比如对1000人按照年龄排序。 count排序需要两个额外的变量,一个用于存放排序结果,长度是n,另一个用于存放中间结果,长度是k。其中n为输入的长度,k-... 阅读全文
posted @ 2013-02-14 23:01 永远是学生 阅读(423) 评论(0) 推荐(0) 编辑
摘要: 本文将讲解泛型的基本用法,内部的实现机制,限制等。希望本文能帮助读者更好的利用泛型解决实际问题。 对泛型的需求是显而易见的。如果没有泛型,我需要为int和string写两个排序函数,虽然代码完全一样。没有泛型,容器中存放的都是Object,调用方法需要进行强制转换,并且需要手动保证容器类型的一致性。 正如大家所知道的,实现泛型有两种基本的方法,泛型class和泛型method。下面这种是泛型m... 阅读全文
posted @ 2013-02-11 22:39 永远是学生 阅读(1542) 评论(0) 推荐(0) 编辑
摘要: 代码复用有以下几个好处: 1. 避免重复劳动,提高效率; 2. 减少需求变动影响的代码范围; 3. 保持系统的一致性; 4. 降低测试成本; 为了实现代码重用,有以下几个方法可以使用:抽取方法,抽取类。 抽取方法适用于class中的复用,比如: class A{ public void x0(){ …… ... 阅读全文
posted @ 2013-02-10 23:00 永远是学生 阅读(4186) 评论(0) 推荐(0) 编辑