至2023春以来开发问题阶段性记录总结Part4
阿昌 Java小菜鸡
# 至2023春以来开发问题阶段性记录总结Part4 Hi,我是阿昌,记录一下针对2022秋至2023春以来的一些开发问题的记录和一些注意点,菜鸡🐔见笑了哈哈。+4

1、前端Tab页功能切换,带着旧数据请求问题

业务情况:前端开着A和B页面,A能看到id为1的规格,B也能看到id为1的规格;
B页面删除了id为1的规格,但A页面还能看到,于是A页面继续操作业务;
如果业务代码或数据库没有判断的话就会出现异常数据的可能。
解决方案:
1⃣️数据库层加上校验
2⃣️业务代码层加上校验
3⃣️前端页面定期重新刷新
4⃣️请求Filter对请求参数进行校验等。。。。

2、核心业务和旁支业务要分离

如当处理保存商品逻辑之后,在同步请求中可将添加“日志”等旁支业务操作异步分离,可发布事件/mq消息等

3、map集合获取get后修改导致引用共享问题(组合货品分配值)

注意引用传递类等参数,公用一个变量导致业务出现异常情况

4、注意sql执行是的隐式类型转换问题,会导致扫全表

当用户id为bigint类型时,如果查询用的是varchar类型去查询,会出现sql层面的隐式类型转换,导致索引失效,后扫描全表

5、注意service逻辑所在的包,让独立的逻辑在自己的service中

如Task业务 依赖service包,web服务也依赖service包,当某个业务只可能存在task业务中,那不应该写在service包层,出现web服务类加载器加载更多的类

6、服务调用超时问题

可设置timeout时间 或 拆分参数请求(评估是否需要保证拆分后的原子性)

7、mq消息传递用独立的对象,传递不应该传递业务模型,而是传递关键的id信息,不然可能会出现异步数据覆盖的情况

消息体要传递重要id信息,而不传递快照的业务信息,导致处理业务处理过期数据出现异常数据

8、找bug的处理方案

1⃣️可复现问题,可通过如arthas等工具类去内存变量问题
2⃣️若直接可在本地debug,或远程debug时,也可以看到当时的内存参数
3⃣️若如上都不用或不允许debug时,只能通过打印当时内存变量的日志情况,来后续看日志排查问题

9、针对dubbo接口,禁止使用字段接收,必须使用继承BaseRequest

当一些列公共服务的Filter过滤器可能是别对应的接口,或者基类时,若dubbo接口的餐食为实现,可能会使得业务不完整

10、pdd消息延迟,延迟4个小时,早期延迟9个小时,从批量消费改成单个消费

 请作者喝咖啡