阿里巴巴开发手册手记

时间:2021-03-31 03:24:41

  1.  所有相同类型的包装类对象之间值的比较,全部使用equals方法比较。

          说明:Integer var = ? 在-128~127范围的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间的Integer值可以直接使用==进行判断,但是在这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,推荐使用equals方法判断。


    2. 关于hashCode和equals的处理,遵循以下规则:

          1)只要重写equals,就必须重写hashCode。
          2)Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方                 法。
          3)如果自定义对象作为Map的键,那么必须重写hashCode和equals。
          4)String重写了hashCode和equals方法

    3. ArrayList的subList结果不可强转成ArrayList


   4. 使用集合转数组,必须使用集合的toArray(T[ ] array),传入的是类型一样的数组,大小为list.size()。


   5. 使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合的相关方法,add/remove/clear方法会抛异常。

        说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法。Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。


    6. 泛型通配符<? extends T>来接收返回到数据,此写法的泛型集合不能使用add方法,而<? super T> 不能使用get方法,作为接口调用赋值时易出错。

        PECS(Producer Extends Consumer Super)原则:

           第一、频繁往外读取内容的,适合于<? extends T>。

           第二、经常往里插入的,适合于<? super T>


   7. 不要在foreach循环里进行元素的remove/add操作。remave元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁


   8.  合理利用集合的有序性(sort)和稳定性(order),避免集合的无序性(unsort)和不稳定性(unorder)带来的影响。


   9.  SimpleDateFormat 是线程不安全的类,一般不要定义为static变量。注意线程安全,使用DateUtils.


   10. 小数类型为decimal,禁止使用float和double

    说明:float和double在存储的时候,存在精度丢失问题,如果存储的范围超过decimal时,建议将数据拆成整数和小数分开存储。


    11.  varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义类型为text,独立出一张表,用主键来对应,避免影响其他字段索引效率。


    12.  表必备三字段:id,gmt_create,gmt_modified.

    说明:其中id必为主键,类型为unsigned bigint、单表时自增,步长为1.gmt_create, gmt_modified类型为date_time类型,前者现在时表示主动创建,后者过去分词表示被动更新。


    13.  字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:

    1)不是频繁修改的字段

    2)不是varchar超长字段,更不能是text字段。