12 业务代码真的会有这么多坑?

2023-10-10  本文已影响0人  滔滔逐浪

意识不到坑的存在,比如所谓的服务器不稳定很可能是代码问题导致的,很多时候遇到 OOM、死锁、超时问题在运维层面通过改配置、重启、扩容等手段解决了,没有反推到开发层面去寻找根本原因。

有些问题只会在特定情况下暴露。比如,缓存击穿、在多线程环境使用非线程安全的类,只有在多线程或高并发的情况才会暴露问题。

有些性能问题不会导致明显的 Bug,只会让程序运行缓慢、内存使用增加,但会在量变到质变的瞬间爆发。


private static final ThreadLocal<Integer> currentUser = ThreadLocal.withInitial(() -> null);

@GetMapping("wrong")
public Map wrong(@RequestParam("userId") Integer userId) {
 //设置用户信息之前先查询一次ThreadLocal中的用户信息
 String before  = Thread.currentThread().getName() + ":" + currentUser.get();
 //设置用户信息到ThreadLocal
 currentUser.set(userId);
 //设置用户信息之后再查询一次ThreadLocal中的用户信息
 String after  = Thread.currentThread().getName() + ":" + currentUser.get();
 //汇总输出两次查询结果
 Map result = new HashMap();
 result.put("before", before);
 result.put("after", after);
 return result;
}

业务项目有两大特点: 工期紧、逻辑复杂,开发人员会更多地考虑主流程逻辑的正确实现,忽略非主流程逻辑,或保障、补偿、一致性逻辑的实现;

往往缺乏详细的设计、监控和容量规划的闭环,结果就是随着业务发展出现各种各样的事故。

学习:Java 核心技术面试精讲学习笔记

上一篇下一篇

猜你喜欢

热点阅读