程序员开发手册_阿里Java开发手册(嵩山版)重点问题解读,码出规范,码出质量!...

↑ 点击上面 “时代Java”关注我们, 关注新技术,学习新知识!

程序员开发手册_阿里Java开发手册(嵩山版)重点问题解读,码出规范,码出质量!..._第1张图片

《阿里巴巴 Java 开发手册》主要提炼了阿里巴巴集团技术团队的集体编程经验和软件设计智慧,可全面、立体地帮助开发者的成长和团队代码文化形成。

嵩山版首次新增前后端规约等内容,可帮助开发者码出规范,码出质量。

下载地址:https://nowjava.com/download/31703

或点击最下面的"阅读原文"来下载。

一、为什么禁止使用Apache Beanutils进行属性的copy?
市面上有很多类似的属性拷贝工具类,比较常用的有
1、Spring BeanUtils 2、Cglib BeanCopier 3、Apache BeanUtils 4、Apache PropertyUtils 5、Dozer
那么,我们到底应该选择哪种工具类更加合适呢?为什么Java开发手册中提到禁止使用Apache BeanUtils呢?

76f175f9c6e373c7dbd1c0ece031afe0.png
接下来就聚焦于对比这几个类库的性能问题来分析。

二、为什么要求日期格式化时必须有使用y表示年,而不能用Y?
在Java中进行日期处理大家一定都不陌生,我们经常会需要在代码中进行日期的转换、日期的格式化等操作。

而一般我们进行日期格式化的时候都会使用SimpleDateFormat工具,之前我们有一篇文章介绍过SimpleDateFormat的线程安全问题,这一篇文章再来介绍一个和SimpleDateFormat有关,很容易被忽视,而一旦忽视可能导致大故障的问题。

三、《 Java 开发手册-泰山版》提到的三目运算符的空指针问题到底是个怎么回事?

手册中有一条规约引起了作者的关注,那就是手册中提到在三目运算符使用过程中,需要注意自动拆箱导致的NullPointerException(后文简称:NPE)问题:

程序员开发手册_阿里Java开发手册(嵩山版)重点问题解读,码出规范,码出质量!..._第2张图片

四、为什么建议初始化HashMap的容量大小?

我们之前提到过,《Java 开发手册》中建议我们设置 HashMap 的初始化容量。

92c19ad43d680fa6dd27230ad9617e71.png

五、Java开发手册建议创建HashMap时设置初始化容量, 但是多少合适呢?
HashMap 有扩容机制,就是当达到扩容条件时会进行扩容。HashMap 的扩容条件就是当 HashMap 中的元素个数(size)超过临界值(threshold)时就会自动扩容。在 HashMap 中,threshold = loadFactor * capacity

所以,如果我们没有设置初始容量大小,随着元素的不断增加,HashMap 会发生多次扩容,而 HashMap 中的扩容机制决定了每次扩容都需要重建 hash 表,是非常影响性能的。

六、为什么禁止使用Executors创建线程池?

为什么说可以通过Executors静态工厂构建线程池,但一般不建议这样使用。

本节我们就来围绕这个问题来分析一下为什么JDK自身提供的构建线程池的方式并不建议使用?到底应该如何创建一个线程池呢?

七、为什么要求谨慎使用ArrayList中的subList方法?
集合是Java开发日常开发中经常会使用到的。

关于集合类,《Java开发手册》中其实还有另外一个规定:

程序员开发手册_阿里Java开发手册(嵩山版)重点问题解读,码出规范,码出质量!..._第3张图片

八、为什么不建议在for循环中使用“+”进行字符串拼接?

使用+拼接字符串,其实只是Java提供的一个语法糖,那么他的内部原理到底是如何实现的。

语法糖:语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·兰丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。

程序员开发手册_阿里Java开发手册(嵩山版)重点问题解读,码出规范,码出质量!..._第4张图片

十、为什么禁止工程师直接使用日志系统(Log4j、Log back) 中的API?
作为Java程序员,我想很多人都知道日志对于一个程序的重要性,尤其是Web应用。很多时候,日志可能是我们了解应用程序如何执行的唯一方式。

所以,日志在Java Web应用中至关重要,但是,很多人却以为日志输出只是一件简单的事情,所以会经常忽略和日志相关的问题。

十一、为什么禁止把SimpleDateFormat定义成static变量?
在日常开发中,我们经常会用到时间,我们有很多办法在Java代码中获取时间。但是不同的方法获取到的时间的格式都不尽相同,这时候就需要一种格式化工具,把时间显示成我们需要的格式。

最常用的方法就是使用SimpleDateFormat类。这是一个看上去功能比较简单的类,但是,一旦使用不当也有可能导致很大的问题。本节就围绕SimpleDateFormat的用法、原理等来深入分析下如何以正确的姿势使用它。

十二、为什么禁止开发人员使用is Success作为变量名?
在日常开发中,我们会经常要在类中定义布尔类型的变量,比如在给外部系统提供一个RPC接口的时候,我们一般会定义一个字段表示本次请求是否成功的。

关于这个”本次请求是否成功”的字段的定义,其实是有很多种讲究和坑的,稍有不慎就会掉入坑里,作者在很久之前就遇到过类似的问题,本节就来围绕这个简单分析一下,到底该如何定一个布尔类型的成员变量。

十三、为什么禁止开发人员修改serialVersionUID字段的值?

关于serialVersionUID 。这个字段到底有什么用?如果不设置会怎么样?为什么《Java开发手册》中有以下规定:

1f07f36c321305f1bb191667f9ee0d6d.png

十四、为什么建议开发者谨慎使用继承?

对于很多开发者来说,继承肯定都是不陌生的。但是,继承一定适合所有的场景吗?毫无忌讳的使用继承来做代码扩展真的好吗?

为什么《Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。

十五、为什么禁止使用count(列名) 或count(常量) 来替代count(*)?

除了COUNT(id)和COUNT(*)以外,还可以使用COUNT(常量)(如COUNT(1))来统计行数,那么这三条SQL语句有什么区别呢?到底哪种效率更高呢?为什么《Java开发手册》中强制要求不让使用 COUNT(列名)或 COUNT(常量)来替代 COUNT(*)呢?

ba13007367bdd9b8f8442a22e0689c60.png

--

知识分享,时代前行!

~~ 时代Java

还有更多好文章……

请查看历史文章和官网,

↓有分享,有收获~

你可能感兴趣的:(程序员开发手册)