读阿里Java开发规则整理

本文档提供了Java编程中的一系列最佳实践指南,包括高效遍历Map集合的方法、集合去重技巧、线程池的正确使用、处理日期格式化的注意事项、双重检查锁定模式的应用等。此外还强调了代码注释的重要性,并提出了一系列强制规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用enTry进行遍历Map集合,尽量不使用keySet进行遍历:

keySet需要遍历两次,一次是对key值Iterator取值,然后根据key值取对应value值,
enTry则一次直接将键值对取出来,获取key、value值不需要两次遍历;
JDK1.8:Map.foreach();
2、 集合中去重操作:
利用 Set 元素唯一的特性,可以快速对一个集合进行去重操作,避免使用 List 的
contains 方法进行遍历、对比、 去重操作。
3、 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
说明: 使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资
源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题;
4、SimpleDateFormat使用
 SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为static,必须加锁,或者使用 DateUtils 工具类;
immutable:不可变的
mutable:易变的
5、 ScheduledExecutorService
 注意,子线程抛出异常堆栈,不能在主线程 try-catch 到
6、 Double-Checked Locking
在JDK1.5及其后续版本中,扩充了volatile语义,系统将不允许对 写入一个volatile变量的操作与其之前的任何读写操作 重新排序,也不允许将 读取一个volatile变量的操作与其之后的任何读写操作 重新排序。
 在jdk1.5及其后的版本中,可以将instance 设置成volatile以让双重检查锁定生效,如下:
public class Singleton {
    private static volatile Singleton instance = null;
    private Singleton(){}
   
    public static Singleton getInstance() {
       if(instance == null) {
           synchronized(Singleton.class) {
              if(instance == null) {
                  instance = new Singleton();
              }
           }
       }
       return instance;
    }
}
instance = new Singleton();instance初始化未完成时调用getInstance方法出错!

7、注释约定:【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用// xxx 方式。
说明: 在 IDE 编辑窗口中, Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释; 在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。
8、 【强制】所有的类都必须添加创建者和创建日期
9、谨慎注释掉代码。 在上方详细说明,而不是简单地注释掉。 如果无用,则删除。
说明: 代码被注释掉有两种可能性: 1) 后续会恢复此段代码逻辑。 2) 永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库保存了历史代码) 。
10、 【强制】避免重复打印日志,浪费磁盘空间,务必在 log4j.xml 中设置 additivity=false。
正例: <logger name="com.taobao.dubbo.config" additivity="false">
11、UC与UI
UC:use  case
UI:user Interface
12、脱敏操作与权限控制校验
13、 用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,禁止字符串拼接 SQL 访问数据库。
14、 【强制】 主键索引名为 pk_字段名; 唯一索引名为 uk_字段名; 普通索引名则为 idx_字段名。
说明: pk_ 即 primary key; uk_ 即 unique key; idx_ 即 index 的简称。
15、 【强制】小数类型为 decimal,禁止使用 float 和 double。
说明: float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不
正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
16、 【强制】表必备三字段: id, gmt_create, gmt_modified。
说明: 其中 id 必为主键,类型为 unsigned bigint、单表时自增、步长为 1。 gmt_create,
gmt_modified 的类型均为 datetime 类型,前者现在时表示主动创建,后者过去分词表示被
动更新。
17、 【强制】超过三个表禁止 join。需要 join 的字段,数据类型必须绝对一致; 多表关联查询时,
保证被关联的字段需要有索引。
说明: 即使双表 join 也要注意表索引、 SQL 性能。
 先快速定位需要获取的 id 段,然后再关联:
SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id
18、java中常用方法类:
DateUtils
StringUtils

java8中Optional类防止NPE错误


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值