众所周时,阿里巴巴的Java开发手册一直被封为Java开发界的典范和规约,是阿里巴巴和社会上从业人员智慧的结晶!随着对于开发要求的不断严格,Java开发手册也进行了不断的升级,前几日最新发布的黄山版就是最新发布的内容!

增加了11条最新规定!

大概目录

部分内容节选

(二) 常量定义

1.【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。

反例:

// 开发者 A 定义了缓存的 key。

String key = “Id#taobao_” />

cache.put(key, value);

// 开发者 B 使用缓存时直接复制少了下划线,即 key 是”Id#taobao” + tradeId,导致出现故障。

String key = “Id#taobao” + tradeId;

cache.get(key);

2.【强制】long 或 Long 赋值时,数值后使用大写 L,不能是小写l,小写容易跟数字混淆,造成误解。

说明:public static finalLong NUM = 2l; 写的是数字的 21,还是 Long 型的 2?

3.【强制】浮点数类型的数值后缀统一为大写的 D 或 F。

正例:public static final doubleHEIGHT = 175.5D;

public static final floatWEIGHT = 150.3F;

4.【推荐】不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。

说明:大而全的常量类,杂乱无章,使用查找功能才能定位到要修改的常量,不利于理解,也不利于维护。

正例:缓存相关常量放在 CacheConsts 下;系统配置相关常量放在 SystemConfigConsts 下。

5.【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。

1)跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下。

2)应用内共享常量:放置在一方库中,通常是子模块中的 constant 目录下。

反例:常量也要统一定义成应用内共享常量,两个程序员在两个类中分别定义了表示“是”的常量:

类 A 中:public static final String YES = “yes”;

类 B 中:public static final String YES = “y”;

A.YES.equals(B.YES),预期是 true,但实际返回为 false,导致线上问题。

3)子工程内部共享常量:即在当前子工程内的 constant 目录下。

4)包内共享常量:即在当前包下单独的 constant 目录下。

5)类内共享常量:直接在类内部 private static final 定义。

6.【推荐】如果变量值仅在一个固定范围内变化用 enum 类型来定义。

说明:如果存在名称之外的延伸属性应使用 enum 类型,下面正例中的数字就是延伸信息,表示一年中的第几个季节。

正例:

public enumSeasonEnum{

SPRING(1),SUMMER(2),AUTUMN(3),WINTER(4);

private intseq;

SeasonEnum(intseq) {

this.seq=seq;

}

public intgetSeq() {

returnseq;

}

}

(二) 索引规约

1.【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。

说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。

2.【强制】超过三个禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时,保证被关联的字段需要有索引。

说明:即使双表 join 也要注意表索引、SQL 性能。

3.【强制】在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度。

说明:索引的长度与区分度是一对矛盾体,一般对字符串类型的数据,长度为 20 的索引,区分度会高达 90%以上,可以使用 count(distinct left(别名,索引长度)) / count(*) 的区分度来确定。

4.【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

说明:索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

5.【推荐】如果有需要 order by 的场景,请注意利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现 filesort 的情况,影响查询性能。

正例:where a = ” />

最后的最后需要领取这份黄山版学习资源的同学麻烦帮忙点赞+转发一下文章,然后私信我【学习】领取哈!