读《阿里巴巴Java开发手册》有感

  • 内容
  • 评论
  • 相关

作为一名高级Java攻城狮,对于《阿里巴巴Java开发手册》应该并不陌生。

 

它强调的是码出高效,码出质量,并非是消灭代码的创造性、优雅性,而是限制过度个性化,提高效率。

 

我个人觉得,它的作用是进化程序员,就算阿里没有出本手册,其他有影响力的公司也会力挺而出,目前,google也有Java开发手册,Google Java编程风格指南

 

全文大致包括:

1、编程规约

1.1、命名风格

1.2、常量定义

1.3、代码格式

1.4、OOP规范

1.5、集合处理

1.6、并发处理

1.7、控制语句

1.8、注释规约

1.9、其他

2、异常日志

2.1、异常处理

2.2、日志规约

3、单元测试

4、安全规约

5、MySQL数据库

5.1、建表规约

5.2、索引规约

5.3、SQL语句

5.4、ORM映射

6、工程结构

6.1、应用分层

6.2、二方库依赖

6.3、服务器

 

 

以下是我个人觉得这本手册比较好的几个点,并非所有人都如此,可以借鉴一下:

 

编程规约

  1. 【强制】String[] args并非String args[]
  2. 【强制】POJO杜绝is
  3. 【强制】包名小写,单数形式,但类名可以以复数形式,比如util并非utils
  4. 【推荐】接口不加修饰符,public也不要,保持代码简洁,有Javadoc注释,尽量不在接口定义变量
  5. 【参考】获取单个对象->getXxx()
  6. 【参考】获取多个对象->listXxx()
  7. 【参考】统计值->countXxx()
  8. 【参考】插入->saveXxx()(推荐)或insertXxx()
  9. 【参考】删除->removeXxx()(推荐)或deleteXxx()
  10. 【参考】修改->updateXxx()
  11. 【强制】所有相同类型包装类之间值的比较,equals
  12. 【推荐】调用String.split时,需要对最后一个分隔符有无内容检查,否则会有抛IndexOutOfBoundsException的风险
  13. 【强制】只要重写equals就必须重写hashCode
  14. 【强制】操作ArrayList的subList,其实subList是一个视图,所有的操作都会映射到原有的ArrayList;在subList使用中,操作原List,会在使用subList抛ConcurrentModificationException
  15. 【强制】集合转数组,必须用toArray(T[] array)
  16. 【强制】数组转集合,使用Arrays.asList(),转换完集合后调用add/remove/clear会抛UnsupportedOperationException
  17. 【强制】不能再foreach里面对元素的add/remove
  18. 【推荐】集合初始化尽量指定大小
  19. 【推荐】使用entrySet遍历Map,而不是用keySet遍历
  20. 【强制】线程资源必须由线程池提供,禁止自行显示创建线程
  21. 【强制】if/else/for/while/do必须使用大括号
  22. 【推荐】if里面尽量使用可读性较高的代码片段或变量
  23. 【强制】类、类属性、类方法的注释必须使用Javadoc规范,/**内容*/
  24. 【强制】所有的类必须有创建者信息
  25. 【强制】所有的枚举类型字段必须有注释,说明每个数据项的用途
  26. 【强制】修改代码的同时,切记勿忘修改相关注释,否则会使得代码可读性非常低
  27. 【推荐】注释掉的代码要有配合说明
  28. 【强制】注释是写给自己看的,也是写给别人看的,切记简单易懂
  29. 【强制】获取当前毫秒System.currentTimeMillis(),而不是new Date().getTime(),纳秒级System.nanoTime()

 

异常日志

  1. 【强制】禁止对大段代码try-catch。
  2. 【强制】防止NPE,是程序员最基本的修养

 

安全规约

  1. 【强制】隶属于个人页面或者功能必须权限校验
  2. 【强制】用户敏感信息禁止直接展示,必须对数据进行脱敏
  3. 【强制】用户传入的任何参数必须做有效性的校验
  4. 【强制】禁止向页面输出未经安全过滤或未正确转义的用户数据
  5. 【强制】使用平台资源一定要防重放限制
  6. 【推荐】发帖,评论,发送即时消息等用户生成内容的场景必须实现防刷,文本内容违禁词过滤等风控策略

 

MySQL

  1. 【强制】表达是否概念的字段,必须以is_xxx的方式命名,数据类型为unsigned tinyint
  2. 【强制】表名不使用用复数
  3. 【强制】主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名为idx_字段名
  4. 【强制】小数类型为decimal,禁止使用float和double
  5. 【强制】如果存储的字符串长度几乎相等,使用char定长字符串类型
  6. 【强制】varchar长度不超过5000,如果大于,使用text
  7. 【推荐】表名最好使用“业务名称_表的作用”
  8. 【推荐】库名尽量与应用名一致
  9. 【强制】如果修改字段含义或状态追加,必须更新注释
  10. 【推荐】单表超过500w或单表容量超过20G,才推荐分库分表(预计三年数据量达不到标准,不要在建表时分库分表)

 

索引

  1. 【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建立唯一索引
  2. 【强制】超过3个表禁止JOIN(即使双表JOIN也要注意表索引、SQL性能)
  3. 【强制】页面搜索禁止左模糊或者全模糊匹配

 

SQL

  1. 【强制】禁止使用count(列名)或者count(常量)来代替count(*)
  2. 【强制】使用ISNULL()来判断是否为NULL值
  3. 【强制】禁止使用外键,一切外检概念必须在应用层解决
  4. 【强制】禁止使用存储过程
  5. 【强制】数据订正时,删除和修改记录时,要先select,避免出现误删
  6. 【推荐】in操作能避免则避免,不能避免则必须保证in后面的集合数量不超过1000

 

ORM

  1. 【强制】在表查询中,一律不要使用 * 代替字段查询字段
  2. 【强制】POJO类的boolean值不加is,数据库必须加,在resultMap进行字段和属性的映射
  3. 【强制】sql.xml配置参数用#{}、#param#,不要使用${},容易出现SQL注入
  4. 【参考】@Transactional事务不要滥用

 

 

以上的【强制】【推荐】【参考】有些做过改动,并非与《阿里巴巴Java开发手册》一致,严格要求自己才能使自己做的更好!

 

对数据库的了解甚少,所以在此书学到数据库相关的还是比较多的,接下来会深入学习mysql,因为我觉得这是作为架构师的一种必备能力,SQL能力一定要强,名字已经想好,就叫《千锤百炼的SQL》!

 

 

 

笔记是写给自己看的,技术是分享给他人的

喜欢 4

评论

1条评论
  1. Gravatar 头像

    立刻有 回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Title - Artist
0:00