1 左小括号和代码之间不出现空格,又小括号代码之间不出现空格,左大括号代码之间出空格
if (a == b) {
}
2 任何2目 3目运算符左右加空格
if (a == b) {
}
3 if与括号之间必须有一个空格
if (a == b) {
}
4 注释与注释的内容之间必须有一个空格
// 我是注释
5 强制类型转换不能有空格
long first = 10000;
int second = (int)first;
6 单行超过120个字符强制换行,点和方法名称一起换行,不再逗号前换行
7 方法参数在定义和传入时后面要有一个空格
method(one, two, three)
8 单个方法总行数不超过80行
9 所有复写的方法加@Override
10 建议尽量不用可变参数编程
11 所有整形包装类比较用equals,因Integer 的-127和128之间是同一个对象,而在此之外就是不同的对象,会不相等
12 浮点数之间不能用 == 比较,包装类型不能用equals比较 float a = 1.0f - 0.9f; float b = 0.9f - 0.8f; if (a == b) false
解决方案是把浮点数放到BigDemical中,并用equls比较BigDemical
13 bigInt要对应Java代码Long
14 禁止使用BigDemical(double),要使用BigDemical.valueOf(0.1)
15 Pojo类禁止使用默认值,因为保存的时候,会默认保存这个默认值
16 pojo类一定要重写toString方法
17 禁止pojo类同时使用 is和get方法。因为不知道哪种会被优先调用
18 当使用数组的split方法截取时要进行数组有没有内容判断,否则可能报错数组下表越界
19 在get和set方法中不要加业务逻辑,否则会增加排查难度
20 在for循环拼接的时候使用StringBuilder来拼接字符串
21 慎用Object的clone方法来克隆对象,因为是浅拷贝,要深拷贝要重写clone方法
22 使用Array.asList(),不能使用add方法,以为他本质上是一个数组
23 不要在foreach方法中使用add和remove,如果使用remove要通过Iterator遍历
24 在集合初始化时,指定集合初始大小
25 使用entrySet遍历Map集合,不要keySets遍历,因为后者实际上遍历两次,java8使用Map.foreach方法
26 ConcurrentHashMap的key是不能为空的
27 在try之前使用lock,避免在finally中执行unlock时报异常
28 如果每次访问冲突概率小于20%,使用乐观锁,否则使用悲观锁
29 与资金相关的敏感操作使用悲观锁
30 switch块内一定要加default
31 如果switch判断的是字符串,并且是通过参数传入的,那么一定要进行非空判断
32 if else 不能超过3层,如果超过三层使用卫语句,就是把复杂的条件表达式拆分成多个条件表达式,当条件为真返回给调用方
33 条件表达式中禁止赋值
34 条件表达式尽量不用反逻辑
35 异常不要用来做流程控制,条件控制,因为他效率比条件判断低很多
36 如果使用try catch在事务中,如果事务需要回滚一定要注意rollback
37 finally如果出现异常也要用try catch操作
38 try catch 中如果出现return并不会马上返回,而是会先执行finally,如果finally中写了return,那么会忽略掉try 中的逻辑
39 Http接口报错返回错误码
40 日志系统保存的日志推荐不少于15天,对于敏感的信息要保存至少6个月
41 对日志进行分类,错误日志和业务日志要分离开
42 在设计评审阶段,开发人员和测试人员一起确定单元测试范围
43 用户的敏感信息禁止直接展示,如手机号中间四位要用****替换
44 禁止字符串拼接的sql直接访问数据库,防止sql注入
45 当单表数据量超过500万条,表超过2g才考虑分库分表
46 超过3个表禁止使用join
47 sql优化目标至少是range级别,目标是ref级别,最好是consts级别
48 count(*) 会统计为null 的行count(列名)不会统计null行,推荐使用count(列名)或者count(常量)
49 当某一列为null时 sum(列)会返回null,所以使用sum()要注意空指针异常
50 不得使用外键和级联,外键和级联是强阻塞不适合分布式。