常见流程代码审查

本文介绍了在IT开发中的一系列最佳实践,包括异常处理策略、并发控制方法、数据库操作注意事项、数据完整性维护以及接口设计原则,强调了幂等性、小数精度控制和数据验证的重要性。
摘要由CSDN通过智能技术生成
  1. 字符串转其他类型时,要处理转换异常
  2. 禁止空指针异常
  3. 依赖于先前值得更新要处理并发情况(分布式锁或消息队列处理)
  4. 要处理数据库无法存储的特殊字符
  5. 小数计算要用BigDecimal
  6. else 部分必须处理(哪怕只打印debug日志)
  7. 接口要保证幂等
  8. 耗时接口要限制调用频率
  9. 循环中禁止单记录查询
  10. 批量保存要写在事务中
  11. 禁止sql子查询
  12. 禁止sql超过3个表的关联
  13. 禁止在事务中处理耗时操作(事务中调用外部接口)
  14. 获取大量数据并处理时,必须分批,不能一次获取
  15. 应该建立字典表记录枚举列字段
  16. OLTP业务查询应该查主库
  17. 存储日期时字段时,如果精确到秒,则不应该直接将new Date()传入数据库(new Date()精度到毫秒)
  18. 禁止打印大数据量日志
  19. 在使用redis锁(setNx)时,必须获取到锁,才能释放锁
这种写法是错误的
     try {
       AssertUtil.service(!JedisUtils.lock(key), "重复请求");
   } catch (Exception e) {
       rsp.setFailMsg("系统异常");
       e.printStackTrace();
   } finally {
       if (StringUtils.isNotBlank(key)) {
            JedisUtils.del(key);
        }
    }
   修改如下
   boolean isLock=false;
    try {
       isLock=JedisUtils.lock(key);
       AssertUtil.service(!isLock, "重复请求");
   } catch (Exception e) {
       rsp.setFailMsg("系统异常");
       e.printStackTrace();
   } finally {
       if (StringUtils.isNotBlank(key)&&isLock) {
            JedisUtils.del(key);
        }
    }  

  1. 禁止使用动态值判断
if(new Date())
elseif(new Date())
//new Date()随着代码执行一直在变化
  1. 更新表记录时,只更新需要更新字段,禁止无理由的全部字段更新
  2. 返回错误值时要打印日志
 if (genderMappingBO == null) {
        v.setSyncResult(false);
        return null;//返回之前要打印日志
}

  1. 禁止在事务中写异步流程
  2. 明确小数保留位数
  3. 明确保留小数位是每一步保存,还是最后计算结果保存
  4. 锁要在事务结束后才能释放
  5. 一个业务涉及多个流程,每个流程都应try{}catch(){}来确保流程独立,至于某个流程出现错误后是否终止业务,则需具体判断
  6. 禁止以页面结构来设计接口响应数据结构
  7. 数据长度验证,避免too long异常
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值