• Dao层返回的单个对象,有可能为null,所以最好做个非空判断
  • Dao层返回的列表,会返回一个空数组,而不是一个null,所以for循环的时候不需要判空或者Collections.isempty
  • 服务层返回的对象和列表,建议都做非空判断,因为每个人写的逻辑不一样
  • 不要太过相信第三方接口,要把调用的参数和响应参数记录好,到时候排查bug和扯皮的时候,开发能把不属于自己的锅甩出去
  • 最好不要用缓存注解,因为维护起来麻烦,最好使用原生的redistemplate
  • 分库分表,有部分函数是不支持的,比如分表之后,sharding-jdbc不支持ifnull的写法。
    • 分表,查询要加上创建时间作为搜索条件
    • 分表的表名,不需要加上具体的时间戳,因为分片算法已经自动托管
  • 并发更新的时候,如果更新对象,没把控好,会导致一个更新头像,一个更新昵称,最后只有一个变更成功,最好是new一个对象,然后把要变更的属性set一遍,这样其他的属性为null,就不会造成ABA问题
  • 要重视idea的每一个黄色警告,比如空指针,if条件永真,代码重复,代码过时等
  • 定期使用sonarlint和阿里巴巴插件扫描代码,发现缺陷
  • 开发/测试/预发布/生产,开发环境最好可以远程debug,方便排查问题
  • 要有一套告警系统,在全局异常里面发送 报错的堆栈日志,比如钉钉,飞书告警,邮件告警太多看不过来,还是聊天记录方便查看,而且不需要去线上捞日志
  • 多套环境时,默认为true,默认为生成环境,怕没配置导致翻车
  • 为了避免开发/测试/预发布有脏数据,定期清理,或者创建一个只读的账号,然后给开发/测试 人员Navicat直连
  • 使用BigDecimal如果是相除,要注意设置精度,否则1/3会 无限不循环,会报错;并且比较的时候要用compareTo而不是equals,因为equals会把scale(精度范围),也进行比较,比如1.0 equal 1是不相等的