工作了四年,整理了20个让代码更好的建议
- 仅是判断是否存在时,select count 比 select 具体的列,更好
- 复杂的if逻辑条件,可以调整顺序(根据执行条件调整),让程序更高效
- 写查询Sql的时候,只查需要用到的字段,还有通用的字段,可以节省资源、减少网络开销。可能用到覆盖索引,减少回表,提高查询效率
- 一条sql搞定的尽量不要通过逻辑循环查询sql,优先考虑批量进行。
- catch了异常,需要打印出具体的exception,方便更好定位问题
- 一个方法,拒绝过长的参数列表。不仅看起来不优雅,并且接口升级时,可能还要考虑新老版本兼容。如果参数实在是多怎么办呢?可以用个DTO对象包装一下这些参数
- 使用缓冲流,减少IO操作,减少IO次数,提高读写效率。
- 优化程序逻辑,比如前面已经查到的数据,在后面的方法也用到的话,是可以把往下传参的,减少方法调用/查表
- 不要为了方便,直接在代码中使用0,1等魔法值,应该要用enum枚举代替。使用魔法值,维护代码起来很难受
- 当成员变量值不会改变时,优先定义为静态常量,因为如果定义为static,即类静态常量,在每个实例对象中,它只有一份副本。如果是成员变量,每个实例对象中,都各有一份副本。显然,如果这个变量不会变的话,定义为静态常量更好一些。
- 注意检验空指针,不要轻易相信业务,说正常逻辑某个参数不可能为空。
- 捕获到的异常,不能忽略它,至少打点日志
public static void testIgnoreException() throws Exception {
try {
} catch (Exception e) {
}
}
- 处理Java日期时,当心YYYY格式设置的问题,正确姿势是使用yyyy格式,否则年会+1YYYY是基于周来计算年的
- static静态变量不要依赖spring实例化变量,可能会导致初始化出错
- 不要用一个Exception捕捉所有可能的异常
public void test(){
try{
}catch(IOException e){
log.info(“IOException in test,exception:{}”, e);
}catch(SQLException e){
log.info(“SQLException in test,exception:{}”, e);
}
}
- 函数不要过度封装,言简意赅即可。函数不要过度封装,把意思表达清楚即可。并且,方法调用会引起入栈和出栈,导致消耗更多的CPU和内存,过度封装,会损耗性能的!
- 如果变量的初值一定会被覆盖,就没有必要给变量赋初值
- 金额数值计算要使用BigDecimal
- 如果数据库一次查询的数量过多,建议分页处理。
- 修改对外老接口的时候,思考接口的兼容性。如果你的需求是在原来接口上修改,尤其这个接口是对外提供服务的话,一定要考虑接口兼容。举个例子,比如dubbo接口,原本是只接收A,B参数,现在你加了一个参数C,就可以考虑这样处理。
void oldService(A,B);{
newService(A,B,null);
}
void newService(A,B,C);
- 多线程异步优先考虑恰当的线程池,而不是new thread,同时考虑线程池是否隔离,多个不同的业务尽量不要使用同一个线程池
补充中…