真·随笔
Posted dhcao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了真·随笔相关的知识,希望对你有一定的参考价值。
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、在系统发展到一定程度,重构是一种必然选择。优秀的架构设计不是阻止重构的可能性,毕竟技术栈、业务方向和规模都在不断变化,而是尽可能的让重构来得更晚一些,重构幅度小一些。
以上是关于真·随笔的主要内容,如果未能解决你的问题,请参考以下文章