阿里代码规范学习


阿里代码规范学习

本文记录备考阿里代码规范的学习情况,章节会杂乱一些。反正考完证写到简历里就完事了。

TreeMap的key不可以为null,value允许为null,ConcurrentHashMap的key和value都不可以为null,HashMap的key/value均可以为null。Hashtable的KV都不可以为null

总之,HashMap kv都可以为null, TreeMap的v可以为null

数组使用Arrays.asList转化为集合,浅拷贝,对于转换过来的集合,它的 add/remove/clear 方法会抛出: UnsupportedOperationException。Arrays.asList 体现的是适配器模式,只是转换接口,后台的数据仍是数组。

关于ORM的规则,数据库中,表达是与否概念的字段,必须使用is_xxx的方式命名。不要用resultClass当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义。

关于多线程并行处理,不推荐Timer方式处理,推荐使用ScheduledExecutorService方式处理。

方法签名中,抛给调用者的关键字为throws。throw关键字在方法中抛出异常

POJO类的serialVersionUID不一致会抛出序列化运行时异常。

二方库里接口的入参可以使用枚举类型。

业务上具有唯一特性的字段(含组合字段),必须指定唯一索引。

hashcode决定(如:HashMap)存储位置;equals决定是否需要覆盖(同一hash下)集合元素。类重写hashcode,必须重写equals。

SimpleDateFormat 是线程不安全的类。

checked异常继承java.lang.Exception类,unchecked异常继承java.lang.RuntimeException类,NullPointerException , IllegalArgumentException属于unchecked exception。

应用服务器与数据库之间是短连接

第二行相对第一行缩进 4 个空格, 运算符与下文一起换行,方法调用的点符号与下文一起换行。

在多个参数超长,逗号后进行换行。在括号前不要换行。

sort表示元素在存入集合时进行了排序,数据遍历的结果是按某个排序规则输出的; 而order表示每次遍历的序列都是一样的,元素前后关系每次遍历都是确定的,那么下列哪些集合既是sort,又是order的:TreeSet

ArrayUtils、NumberUtils、DateFormatUtils、DateUtils等优先使用org.apache.commons.lang包。不对,应该是优先使用(org.apache.commons.lang3.time.DateFormatUtils),落下了个time

向公司外部提供的http/api接口,推荐使用“错误码”方式返回异常或者错误信息。

对于应用内部的方法调用,推荐使用“抛出异常”的方式处理异常或者错误信息。

跨应用的RPC调用,推荐使用将“错误码”和“错误简短信息”封装成Result的方式进行返回。

包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式

表必备三字段命名:id, gmt_create, gmt_modified,不是gmt_modify!!!

SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 const 最好。

ref 指的是使用普通的索引, range 对索引进行范围检索。

type = index ,索引物理文件全扫描,速度非常慢,这个 index 级别比较 range 还低

由最好到最差的连接类型为:const,eq_ref,ref,range,index,ALL

iBATIS自带的queryForList(String statementName,int start,int size)分页接口有性能隐患,不允许使用。

禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。

NULL与任何值的比较结果都为NULL,当某一列的值全是NULL时,sum(col)的返回结果为NULL。

所有的POJO类属性必须使用包装数据类型,RPC方法的返回值和参数必须使用包装数据类型,所有的局部变量推荐使用基本数据类型。

在注释中用FIXME标记某代码是错误的,而且不能工作,需要及时纠正的情况 .

全模糊或左模糊查询需求,优先使用搜索引擎。

我的命名和代码结构非常好,可以减少注释的内容。是对的。

POJO类中的任何布尔类型的变量,都不要加is,因为部分框架解析时有可能会出现序列化错误。

如果变量值仅在一个范围内变化推荐用Enum类.

sublist是弱引用,是视图。子集合不能被序列化,所以不能应用于RPC场景。B是A的子集合。对A元素个数的修改,会导致集合B的遍历产生ConcurrentModificationException 异常。

定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值

【强制】当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果 为 NULL,因此使用 sum()时需注意 NPE 问题。

正例:可以使用如下方式来避免 sum 的 NPE 问题:SELECT IF(ISNULL(SUM(g)),0,SUM(g)) FROM table;

根据《阿里巴巴Java开发手册》,数据库的表设计允许适当冗余,以提升SQL查询的性能,避免表的关联查询,下面哪些字段不允许冗余?

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

1)不是频繁修改的字段。 2)不是唯一索引的字段。 3)不是 varchar 超长字段,更不能是 text 字段。

正例:各业务线经常冗余存储商品名称,避免查询时需要调用 IC 服务获取。


文章作者: 爱敲代码の鱼儿
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 爱敲代码の鱼儿 !
  目录