真·随笔

1、读JDK源码之前先读数据结构与算法,读框架源码之前先读设计模式;在框架源码中,大量应用了设计模式,可以通过读框架源码,快速的学习和理解设计模式的用法;同样,理解的设计模式,会帮助自己更好的了解源码
 
2、在人力平衡时,要根据项目的实际情况进行分析,如果项目的完成时间,跟人力成反比,跟交流复杂度成正比。即:项目拆解分配到人后,有些时候项目人力越多,越节省时间。有些时候项目总体时间是固定的,例如生孩子,无法分解,无法优化分配。在拆解分配任务之后,如果拆解的任务设计到多个人或者项目的交流依赖,这样的任务分配再多人也无用,交流沟通的时间成本,可能会覆盖通过增加人力节省的时间,所以在项目复杂时,需要注意拆解的独立程度,如果相互依赖的任务模块,如何拆解才能充分利用人力,才能平衡人力系统。
 
3、关于http请求的流转过程:
    客户端http -> tomcat -> servlet -> tomcat ->客户端。
    在servlet中将请求转为request。从而维护request声明周期。将request最终转为response返回到客户端
 
4、勒布朗法则(LeBlanc):稍后等于永不(Later equals never)
 
5、过滤器Filter是servlet的,针对于request和response进行过滤。
    拦截器interception是MVC的,可以自定义拦截在哪里。
 
6、关于聚合和组合:
    在画uml的时候,聚合和组合的区别,让我有点烦,总是忘记。
    聚合:属于“关联”关系的一种,但是classA和classB互相独立,只是在classA中保持它的引用(通常是外部传入)。比如,汽车和轮胎,轮胎可以安装在这个汽车,当这个汽车“消亡”了,轮胎可能还活着,它还能安装在另外的汽车上。
    组合:属于“关联”关系的一种,但相关性更强,classA创建后(创建时)才会创建classB,并且classA维护classB的生命周期,如果classA“消亡”,则classB也“消亡”。比如皮肤和毛发,中国有句老话“皮之不存毛将焉附”,大概就是这种情况。
 
7、java的javaBean中属性注入时的规范:
    java的属性变量,我们可以通过构造函数注入和属性注入的方法来为其设置值;javaBean的属性命名“前2个字符必须都是小写或者都是大写”,如brand,IDcard都是合法的,但是Dahuan,sYping就是非法的!
    这个问题很不常见,但是会导致注入问题,也会造成@requestBody这个注解失效。凡是使用set方法进行属性注入的都失效!
 
8、Java注解中的@Configuration注解,采用的是工厂方法注入
9、Java的克隆,依然会创建一个新的对象,在内存里面不指向同一个内存地址,而是存在2份。浅克隆和深克隆的区别只在于是否对聚合引用进行克隆,如果对象属性也复制一份,则叫深克隆,如果对应属性指向的内存地址不变,则叫浅克隆
 
10、Spring中很多配置都支持数组形式,例如new ClassPathXmlApplicationContext(String[] configLocations)
    通常xml中配置支持多个时,可以以逗号或者分号隔开,通常spring会同时解析这两个;就是说都支持
 
11、对于继承类和接口,必须要有以下认识,继承类被继承时体现的是is-a的关系,接口在被实现时体现的是can-do关系。
    例如:Eagle is Bird. Bird is an Object。这是继承的关系
               Plane can fly.Bird can fly。把fly定义为借口,这是can-do的关系
个人理解:接口的抽象,必定重点在于方法,虽然jdk8以后允许写属性,但属性一定不是为了传递到实现类,而是接口方法的必要服务属性。否则,就失去了接口的意义
 
12、消除重复,是程序员最重要的工作之一
 
13、一个典型的单元测试有三个步骤:1.准备测试类及数据;2.执行要测试的行为;3.检查结果
14、在系统发展到一定程度,重构是一种必然选择。优秀的架构设计不是阻止重构的可能性,毕竟技术栈、业务方向和规模都在不断变化,而是尽可能的让重构来得更晚一些,重构幅度小一些。
 
15、很有意思,在阿里开发手册上,指定方法的行数不要超过80。是因为心理学上认为对事物的印象不能超过3个魔法数,80行在显示器一般是2屏幕半的代码量。而且阿里内部抽样显示只有5%的代码超过了80行,而这些代码通常由优化空间。
 
16、发生误解,我曾以为return才是方法结束的最后一条语句。注意:finally是在return表达式运行后执行的,此时将要return的结果已经被暂存起来,待finally代码块执行结束后再将之前暂存的结果返回。(曾经在被问到这个时回答错误….)
  • finally中不要有赋值语句
  • finally中不要有return语句

17、我们知道Arrays.asList(T t);可以将数组T转换为List。但是注意,这里得到的List只是Arrays的内部类ArrayList,而不是真正我们平常new ArrayList的。

// asList转换来的list
java.util.Arrays$ArrayList

// new ArrayList()得到的list
java.util.ArrayList

  

原文地址:https://www.cnblogs.com/dhcao/p/11371727.html