《阿里巴巴Java开发手册1.4.0》阅读总结与心得(一)
前言
下面是阿里对《阿里巴巴 Java 开发手册》(下称《手册》)的介绍:
凝聚了阿里集团很多同学的知识智慧和经验,这些经验甚至是用血淋淋的故障换来的,希望前车之鉴,后车之师,能够帮助更多的开发者少踩坑,杜绝踩重复的坑。

在知乎上,也有关于这本开发手册的讨论十分热烈的帖子:https://www.zhihu.com/question/55642203。
其中一位网友的话让楼主觉得十分有趣,现贴出来博大家一笑:

在楼主看来,阿里巴巴的这本Java开发手册,可谓包罗万象,几乎日常Java开发中方方面面都有所涉及。
由于里面涉及的内容比较多,下面重点罗列下一些楼主读过之后十分赞同与持保留意见的条目:
(一)编码规范
(一)命名规约
8. 【强制】POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。
反例: 定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(), RPC框架在反向解析的时候, “误以为” 对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
看法:此条级别为强制,不过是有特殊的应用场景的,boolean类型变量加上is前缀无可厚非。举例来说,对于处理状态标志,我觉得isProcessed/processed/processFlag/processStatus,这四种写法都是很OK的。不过我个人可能更偏好用processed,比较简洁。当然此条目被列举在开发手册中,也是前人踩坑的教训,吸收一下挺好。
10. 【强制】杜绝完全不规范的缩写,避免望文不知义。
反例: AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类 随意缩写严重降低了代码的可阅读性。
看法:非常赞同,时常在公司项目代码中看到不能一眼看出含义的拼音或者英文缩写比如cashFlow缩写为CF,代码可读性降低很多。Java代码不要害怕变量名或者方法名过长,除非你能找到一个比原先短,并且含义完全相同的更好的命名。
15.【参考】枚举类名建议带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。
说明: 枚举其实就是特殊的类, 域成员均为常量, 且构造方法被默认强制是私有。
正例: 枚举名字为 ProcessStatusEnum 的成员名称: SUCCESS / UNKNOWN_REASON。
看法:级别被列为参考,代表此条目推荐程度不是太高。我的看法也是如此,其实枚举类命名后缀什么type啦,status都可以啊。
(二)常量定义
3. 【推荐】不要使用一个常量类维护所有常量, 要按常量功能进行归类,分开维护。
说明: 大而全的常量类, 杂乱无章, 使用查找功能才能定位到修改的常量,不利于理解和维护。
正例: 缓存相关常量放在类 CacheConsts 下; 系统配置相关常量放在类 ConfigConsts 下。
看法:挺好的规范,对于大型项目,按照业务功能/模块常量类分开维护还是很有必要的。
(三)格式规约
12.【推荐】 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性。
说明: 任何情形, 没有必要插入多个空行进行隔开。
看法:在方法内部,逻辑上互相较为独立的代码块之间加入一个空行,会看起来更为清楚。但是也不要太极端,每行代码之间都插入空行,显得反而看起来空洞。
(四)OOP规约
9. 【强制】定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值。
反例: POJO 类的 gmtCreate 默认值为 new Date(), 但是这个属性在数据提取时并没有置入具体值,在更新其它字段时又附带更新了此字段,导致创建时间被修改成当前时间。
看法:非常赞同。曾经遇到一个bug,按条件筛选数据集怎么也查不出来,后来发现是实体类中一些字段被加入了默认值,导致查询的时候带上了这些莫名增加的筛选字段。
(五)集合处理
10. 【推荐】集合初始化时, 指定集合初始值大小。
说明: HashMap 使用 HashMap(int initialCapacity) 初始化。
正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loaderfactor) 默认为 0.75, 如果暂时无法确定初始值大小,请设置为 16(即默认值) 。
反例: HashMap 需要放置 1024 个元素, 由于没有设置容量初始大小,随着元素不断增加,容量 7 次被迫扩大, resize 需要重建 hash 表,严重影响性能。
看法:非常赞同,在确定集合中元素个数的情况下,最好new的时候就指定好大小,这样不仅可以减少空间开销,也可以避免内存碎片的产生。
《阿里巴巴Java开发手册1.4.0》阅读总结与心得(一)的更多相关文章
- 码出高效,阿里巴巴JAVA开发手册1.4.0
码出高效,阿里巴巴JAVA开发手册1.4.0阅读笔记 一.编程规约(三) 代码格式// 关键词if与括号之间必须有一个空格,括号内的f与左括号,0与右括号不需要空格 if (flag == 0) { ...
- 读阿里巴巴Java开发手册v1.2.0之工程结构有感【架构篇】
首先,把昨天那俩条sql语句的优化原因给大家补充一下,第一条效率极低,第二条优化后的,sql语句截图如下: 经过几个高手的评论和个人的分析: 第一条sql语句查询很慢是因为它首先使用了in关键字查询, ...
- 读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】
不为过去蹉跎,改变当下. 为什么开篇就送这么一句话给大家,我相信很多处于1-3年码龄的哥们儿们,在平时的编码历程中编码的个性可能是多彩的,每个人都有每个人特定的风格,但是我们现在这么随意写,以后这么 ...
- 阿里巴巴 Java开发手册1.4.0
<阿里巴巴Java开发手册1.4.0>下载地址: 下载地址:https://102.alibaba.com/downloadFile.do?file=1528269849853/Java_ ...
- 【阿里巴巴Java开发手册1.7.0(嵩山版)】编程规约&MySQL 数据库规约
阿里巴巴Java开发手册1.7.0(嵩山版) 一.编程规约 (一)命名风格 所有命名不得以下划线和$开始和结束. 所有命名不得以拼音或拼音英文混合. 类名使用UpperCamelCase风格. 方法名 ...
- 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(五)
笔者作为一名有数年工作经验的Java程序员,仔细研读了这份手册,觉得其是一份不可多得的好材料.阿里巴巴在发布时所说,“阿里巴巴集团推出的<阿里巴巴Java开发手册(正式版)>是阿里巴巴近万 ...
- 304902阿里巴巴Java开发手册1.4.0
转自官网 前言 <阿里巴巴Java开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者.现代软件行业的高速 ...
- 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(四)
(七)设计规约 1. [强制] 存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档. 说明: 有缺陷的底层数据结构容易导致系统风险上升,可扩展性下降,重构成本也会因历史数据迁移和系统平滑过渡 ...
- 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(三)
(六)工程结构 (一)应用分层 1. [推荐]图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web 层,也可以直接依赖于 Service 层,依此类推: 开放接口层: ...
随机推荐
- 三千字讲清TypeScript与React的实战技巧
很多时候虽然我们了解了TypeScript相关的基础知识,但是这不足以保证我们在实际项目中可以灵活运用,比如现在绝大部分前端开发者的项目都是依赖于框架的,因此我们需要来讲一下React与TypeScr ...
- C# sql 批量插入数据库的语句
//执行DataTable数据导入 public static int UpdateDt(string strConn, DataTable dt) { try { string tablaName ...
- spring @Required注解
以下内容引用自http://wiki.jikexueyuan.com/project/spring/annotation-based-configuration/spring-required-ann ...
- Mac 使用小结
小白使用 Mac 的点点滴滴总结,更新中…… 1. 显示/隐藏 文件的命令: a) 显示文件: defaults write com.apple.finder AppleShowAllFiles -b ...
- 数据结构-二叉搜索树和二叉树排序算法(python实现)
今天我们要介绍的是一种特殊的二叉树--二叉搜索树,同时我们也会讲到一种排序算法--二叉树排序算法.这两者之间有什么联系呢,我们一起来看一下吧. 开始之前呢,我们先来介绍一下如何创建一颗二叉搜索树. 假 ...
- [Short-Circuit Constraint Violation]警告解决办法
今天用Altium Designer16画PCB时候遇到一个问题,进行DRC检测,警告如下: [Short-Circuit Constraint Violation] GrayscaleSensor1 ...
- 灰度级分层(一些基本的灰度变换函数)基本原理及Python实现
1. 基本原理 灰度级分层通常用于突出感兴趣的特定灰度范围内的亮度.灰度级分层有两大基本方法. 将感兴趣的灰度范围内的值显示为一个值(比如0),而其他范围的值为另外一个值(255). 将感兴趣的灰度范 ...
- Linux 根分区扩容
扩容分区之前,首先要保证当前有闲置空间 1. 查看当前现有分区情况 df -lah 可以看出当前根分区只剩 6.4 G 可用 2. 查看当前磁盘情况 fdisk -l 可以看出有 30G的未分配空间 ...
- 浏览器输入URL到返回页面的全过程
[问题描述] 在浏览器输入www.baidu.com,然后,浏览器显示相应的百度页面,这个过程究竟发生了什么呢? [第一步,解析域名,找到主机] 正常情况下,浏览器会缓存DNS一段时间,一般2分钟到3 ...
- C#使用LitJson解析Json数据
//接受MQ服务器返回的值 private void jieshou(string zhiling, string can1, string can2, string can3, string can ...