【阿里巴巴Java开发手册】是一本理论与实践相结合的编程指南。这本书以码出高效和码出质量为愿景,将阿里巴巴集团技术团队的经验与智慧提炼出来,形成了一套立体的编程规范和实践。这本手册不仅适合计算机相关行业的管理者和研发人员,还适合高等院校的计算机专业师生以及求职者阅读。不仅如此,这本手册还对Java开发做了重点讲解,极具实用性和指导性。无论是想要提高编程技能、了解阿里巴巴的编码经验还是希望招聘优秀的Java开发人员,这本书都是必读之选。
阿里巴巴Java开发手册电子书封面
读者评价
规范就像打拳学了秘籍,从此有了章法;铸造有了模具,从此有了依拖。秘籍中假使有一招半式的纰漏,也不会影响一套武功的博大精深。 遗憾的是没有展开来讲,要是有更详细的说明帮助理解就好了。
是一本讲java规范的,对初学者如我的用处并不是非常大,囤着以后慢慢看吧
这手册里面的知识都比较浅显,基础,如果是一个数年开发经验且有一定技术积累的话,这里面的东西都没有什么值得看的,只适合新手看看
代码规范是给人看的,给个规范好统一,不仅仅限于新手也可以看,毕竟一个项目多个人写风格都不一样看着也累。
内容介绍
《阿里巴巴Java开发手册Java开发手册》的目标是在编码过程中实现高效和高质量的代码。笔者结合自己的开发经验和架构历程,将阿里巴巴集团技术团队的集体编程经验和软件设计智慧进行了提炼,并形成了全面的编程规范和实践。如今,现代软件行业发展迅猛,对开发人员的综合素质要求越来越高。因此,除了编程相关的知识之外,其他领域的知识点也会对软件的最终交付质量产生影响。例如,数据库的表结构和索引设计缺陷可能导致软件架构的缺陷或性能风险,失位的单元测试可能导致集成测试困难,没有鉴权的漏洞代码易受黑客攻击等等。
因此,本手册以开发人员为中心,从编程规约、异常日志、单元测试、安全规约、MySQL数据库、项目结构、设计规约等七个维度进行划分。每个维度下都有相应的扩展解释和说明,还有示例及反例,全面、多角度地帮助开发者成长并培养团队的代码规范文化。严格来说,本手册不仅仅涵盖了Java语言本身,还明确了一名合格开发人员应具备的基本素质。因此,本手册适用于计算机相关行业的管理者和开发人员,高等院校的计算机专业教师和学生,以及求职者等。希望本手册能成为大家工作上的良师益友,成为工作手册、工具字典和床头书。
目录
- 序 V
- 前言 XI
- 第1章 编程规约 1
- 1.1 命名风格 2
- 1.2 常量定义 7
- 1.3 代码格式 9
- 1.4 OOP规约 14
- 1.5 集合处理 21
- 1.6 并发处理 28
- 1.7 控制语句 33
- 1.8 注释规约 38
- 1.9 其他 41
- 第2章 异常日志 43
- 2.1 异常处理 44
- 2.2 日志规约 49
- 第3章 单元测试 53
- 第4章 安全规约 59
- 第5章 MySQL数据库 63
- 5.1 建表规约 64
- 5.2 索引规约 68
- 5.3 SQL语句 72
- 5.4 ORM映射 75
- 第6章 工程结构 79
- 6.1 应用分层 80
- 6.2 二方库依赖 83
- 6.3 服务器 87
- 第7章 设计规约 89
- 附 录 专有名词 94
编程规约 (一)命名风格 1、代码中一切命名都不能以下划线或者美元符号开始或结束。 我:没犯过这类型错误 2、严禁使用拼音英文混合方式,不允许使用中文 我:犯过,爱用拼音,个人任务问题不大,只要方便读懂就可以,当然,要慎用自己床在的缩写 3、类名使用UpperCamelCase风格,以下例外:DO /BO /DTO /VO /AO /PO /UID等 我:首字母大写的驼峰风格,一直这样 4、方法名、参数名、成员变量、局部变量统一用lowerCamelCase风格 我:首字母小写驼峰风格 5、常量全部大写,需要用多个单词表述清楚地,单词之间用下划线分隔 我:一直这样 6、抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以要测试的类名开始,Test结尾 7、类型与中括号相邻来表示数组 我:还是这样、、例如int[] string[] args... 8、POJO类中的布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误。 我:使用过is前缀,当时未发现问题;在网上查看一下,会出现一个问题,就是在POJO类中,例如变量名是success,它的get方法是isxxx,这就是问题,如果变量名是isxxx的话,就出问题了,接收参数会得到相反的结果。 9、包名统一使用小写,点分隔符之间有且仅有一个自然语义的单词。包名统一使用单数形式。 我:即形如com.company.xxx的形式,常规操作都这样应该 10、杜绝不规范的缩写,避免望文不知义 我:这错误犯过,而且总犯,尤其在给变量起名字的时候经常自行想象缩写。 11、为了达到代码自解释的目标,任何自定义编程元素在命名时候,尽量采用完整的单词组合来表达含义 我:也就是避免int a 或者 string str这种形式出现,我总犯,但是一定要注意以后,不要怕麻烦,要表达清晰明确 12、模块、接口、类、方法使用了设计模式,在命名时需要体现出具体设计模式 我:没这个习惯,慢慢养 13、接口类总的方法和属性不要加任何修饰符号(包括public也不要用),保持代码的简洁性,并加上有效的Javadoc注释。尽量不要在接口里定义变量,一定要定义,那么该变量对所有实现类有效。 我:有时会加public,从没定义过变量 14、接口和实现类的命名有两套规则: 1)对于service和dao,基于soa的理念,暴露出来的服务一定是接口,内部实现类用Impl的后缀与接口区别 2)如果是形容能力的接口名称,取对应的形容词为接口名。例如:AbstractTranslator实现Translatable接口。 我:第二种不常用,第一种重新理解了一遍SOA理念,松耦合的黑盒子服务,(收藏:SOA概念解惑) 15、枚举类名带上Enum后缀,枚举成员名称需要大写,单词间用下划线隔开。 我:使用枚举非常少,收藏文章重新认识Java----Enum类作为参考 16、各个层命名规约: A)Service/Dao层方法命名规约: 1)获取单个对象的方法用get做前缀 2)获取多个对象的方法用list做前缀,复数形式结尾 3)获取统计值的方法用count做前缀 4)插入的方法用save或insert做前缀 5)删除的方法用remove或delete做前缀 6)修改的方法用update做前缀 B)领域模型命名规约 1)数据对象:xxxDO,xxx为数据库表名 2)数据传输对象:xxxDTO,xxx为业务领域相关 3)展示对象:xxxVO,xxx为网页名称 4)POJO是这一类的总称
集合处理 1、必须重写equals和hashCode:a、set存储的对象 b、自定义对象作为map的键 2、array = list.toArray(new T[list.size()]) 3、不要在foreach循环里进行元素的remove和add操作,remove请用Iterator 4、如果倒序的遍历,中间即使有删除也不会漏掉元素 5、集合初始化时,尽量指定集合初始值大小 6、使用entrySet遍历Map类集合KV,keySet其实是遍历了两次,一次是转为Iterator,一次是从hashMap取值?
OOP规约 1、所有的覆写方法,必须加@override注解 2、不能使用过时的类 3、所有的POJO类属性必须使用包装数据类型(null) 不用设定默认值,getter/setter不要加逻辑 4、序列化类新增属性时,请不要修改serialVersionUID 5、声明final的情况: a、不需要重新赋值的变量 b、对象参数不允许修改指向 c、类方法不允许被重写 6、对象的clone方法默认是浅拷贝 浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制 深拷贝:对象,对象内部的引用均复制
A) Service/DAO 层方法命名规约 1) 获取单个对象的方法用 get 做前缀。 2) 获取多个对象的方法用 list 做前缀。 3) 获取统计值的方法用 count 做前缀。 4) 插入的方法用 save(推荐)或 insert 做前缀。 5) 删除的方法用 remove(推荐)或 delete 做前缀。 6) 修改的方法用 update 做前缀。 B) 领域模型命名规约 1) 数据对象:xxxDO,xxx 即为数据表名。 2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。 3) 展示对象:xxxVO,xxx 一般为网页名称。 4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。