xyz327

hakuna matata

SpringMvc初始化

Springmvc的入口是DispatcherServlet,先从这里看起
DispatcherServlet的继承关系图
dispatcherServlet继承图

阅读全文 »

java中ArrayListLinkedList的区别

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2. 对于随机访问getsetArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  3. 对于新增和删除操作addremoveLinedList比较占优势,因为ArrayList要移动数据。

ArrayList使用动态数组存储数据,

使用无参构造函数时默认大小是10,初始化时动态数组是个空数组{}

当数组容量不够时会扩容,扩容方式是 newCapacity=oldCapacity+(oldCapacity>>1), 当前数组大小*1.5
所以当插入数据量比较大时可能会浪费一部分空间,在可以确定数据量大小时给定初始化容量大小可以提高效率
在空间分配完毕后可以使用trimToSize去除掉多余的空间

LinkedList使用链表存储数据,

阅读全文 »

异常

第57条:只针对异常的情况才使用异常

第58条:对可恢复的情况使用受检异常,对编程错误使用运行时的异常

java 三种可抛出结构(throwable): 受检异常,运行时异常,错误

第59条:避免不必要的使用受检的异常

第60条:优先使用标准的异常

阅读全文 »

通用程序设计

第45条:将局部变量的作用域最小化

1. 最有力的方法就是在第一次使用它的地方声明
2. 几乎每个局部变量的声明都应该包含一个初始化表达式
3. 在循环终止后不再需要循环变量的内容时, `for`循环优先于`while`循环

第46条:for-each循环优先于传统的for循环

不能使用`for-each`循环的情况
1. 过滤, 需要使用显示的迭代器,或者java8的stream
2. 转换,
3. 平行迭代,

第47条:了解和使用类库

阅读全文 »

方法

第38条: 检查参数的有效性

第39条: 必要时进行保护性拷贝

第40条: 谨慎设计方法签名

1. 谨慎地选择方法的名称。方法的名称应该始终遵循标准的命名习惯
2. 不要过于追求提供便利的方法。每个方法应该尽其所能。只有当一项操作被经常用到的时候,才考虑为它提供快捷方式。如果不能确定,还是不提供快捷为好
3. 避免过长的参数列表。 目标是4个或更少
    缩短过长参数的方法
    1. 把方法分解成多个方法,每个方法只需要这些参数的一个子集。
    2. 创建辅助类,用来保存参数的分组。这些辅助类一般为静态成员类。
    3. 从对象构建到方法调用都采用Builder模式,设置完参数再调用执行(execute)方法
4. 对于参数类型,要优先使用接口而不是类

第41条:慎用重载

阅读全文 »

枚举和注解

第30条: 用enum代替int常量

第31条:用实例域代替序数

不要依赖枚举的`ordinal`而是自己定义实例域

第32条:用EnumSet代替位域

第33条:用EnumMap代替序数索引

阅读全文 »

泛型

第23条:不要在新代码中使用原生态类型

第24条:消除非受检警告

1
@SuppressWarnings("unchecked")
`@SuppressWarnings`注解可以用在任何粒度的级别中,应该尽可能使用在小的范围中 
每当使用`@SuppressWarnings`注解时,都要添加一条注释,说明为什么这么做是安全的

第25条:列表优先于数组

阅读全文 »

第13条: 使类和成员的可访问性最小

第14条:在共有类中使用方法而不是公有域

第15条:使可变性最小

使类成为不可变,要遵循下面五条规则
1. 不要提供任何会修改对象状态的方法
2. 保证类不会被扩展
3. 所有的域都是final的
4. 所有的域都是私有的
5. 确保对任何可变组件的互斥访问

第16条:复合优先于继承

第17条:要么为继承而设计,并提供文档说明,要么就禁止继承

阅读全文 »

第八条:覆盖equals时请遵守通用约定

  1. 类的每个实例本质上都是唯一的
  2. 不关心类是否提供了“逻辑相等”的测试功能
  3. 超类已经覆盖了equals, 从超类继承过来的行为对于子类也是合适的
  4. 类是私有的或者包级别私有的,可以确定它的equals方法永远不会被调用

equals方法实现了等价关系

  1. 自反性: 对于任何非null的引用值x, x.equals(x) 必须返回true;
  2. 对称性: 对于任何非null的引用值xy, 当且仅当x.equals(y)返回true时, y.equals(x)必须返回true;
  3. 传递性: 对于任何非null的引用值x,’y’和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也必须返回true;
  4. 一致性: 对于任何非null的引用值xy,只要equals中的比较信息没有被改变,多次调用x.equals(y)就会一直返回true或者false;
  5. 对于任何非null的引用值xx.equals(null)必须返回false;

第九条: 覆盖equals时总要覆盖hashCode

第十条: 始终要覆盖toString

阅读全文 »