1、逻辑判断调整顺序
if(is吉利车主 && is第一次登陆){
巴拉巴拉巴拉送礼物,弹消息等
}
is吉利车主 大概率为true
is第一次登陆 小概率为true
假设条件:总流量是100次,
'is吉利车主'80%通过,'is第一次登陆'10%通过。两is方法和送礼物各方面消耗皆为一单位
则:调用'is吉利车主'100次,调用'is第一次登陆'80次,最终'送礼物'8次
总消耗单位:188单位
但因为 如果&&的左边判false,则右边不用进行运算。
那么如果把概率小的放在前面:
那么调整一下顺序
if(is第一次登陆 && is吉利车主){
巴拉巴拉巴拉送礼物,弹消息等
}
同样假设条件:总流量是100,
'is第一次登陆'10%通过,'is吉利车主'80%通过。两is方法和送礼物各方面消耗皆为一单位
则:调用'is第一次登陆'100次,'is吉利车主'调用10次,最终'送礼物'8次。
总消耗单位:118单位
因为这样减少了"is吉利车主"的调用
2、空指针问题
NullPointerException:NPE
user.getFlag().equals("1"); //会NPE
"1".equals(user.getFlag()); //不会NPE
3、业务代码写日志
二维码扫描付款转账,入参日志打印,捕捉异常信息
4、方法返回空集合
如果返回null,调用方在忘记检测的时候,可能会抛出空指针异常。返回一个空集合呢,就省去该问题了。
mybatis查询的时候,如果返回一个集合,结果为空时也会返回一个空集合,而不是null。
5、初始化集合尽量指定大小
new ArrayList<>(int initialCapacity); 默认10
阿里巴巴手册
【推荐】集合初始化时,指定集合初始值大小。
说明:HashMap使用HashMap(int initialCapacity) 初始化。
正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loader factor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)。 反例:HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容 量 7 次被迫扩大,resize 需要重建 hash 表,严重影响性能。
6、接口幂等性 并发问题
什么是幂等性:
一次和多次请求某一个资源对于资源本身应该具有相同的结果。
换句话来说:就是任意多次执行对于资源本身产生的影响均和一次执行相同。
int flag = userMapper.select某一个雇员Employee.getFlag();
if(flag<=0){
userMapper.update这个雇员employee.setFlag(1);
给这个雇员Employee年终奖;
}
但可能出现问题,如果有两个相同的请求同时发过来,那么可能出现:
那么,可能加了两次年终奖,多么让人快乐!
为了避免这种问题
if(userMapper.update这个雇员employee.setFlag(1);){
给这个雇员Employee年终奖;
}
更新操作成功时,才进行业务操作。
7、私有化工具类构造器
工具类的方法都是静态的,通过类名直接调用即可
但为了避免“调用方先实例化工具类然后调用实例工具类的方法” ,可以私有工具类的构造器
class XXXUtil{
···
private XXXUtil(){}
···
public static void method(){}
}