第一部分:命名与注释的“自掘坟墓”(产出:加班改Bug)
【核心观点】 代码是写给人看的,只是顺便给机器跑。低质量的命名,会让后续维护者(包括你自己)浪费50%的时间在“猜”上面。
坑点1:万能变量名 a、b、temp、data、list1、list2
错误示范:
java
List list1 = getData();
List list2 = getOtherData();
for (Object obj : list1) {
// 三个月后:这个obj到底是什么?list2又是干嘛的?
}
加班场景: 三个月后改需求,对着list1和list2反复调试,一不小心改错,引发生产Bug。
正确姿势:
java
List<UserOrder> pendingPaymentOrders = getPendingPaymentOrders();
List<UserOrder> alreadyShippedOrders = getShippedOrders();
坑点2:注释只写“是什么”,不写“为什么”
错误示范:
java
// 这里加1
count = count + 1;
加班场景: 谁特么不知道是加1?问题是“为什么加1”?是因为索引从0开始?还是为了跳过状态=0的记录?
正确姿势:
java
// 因为订单状态枚举中,0=待支付,需要排除,所以索引从1开始
count = orderList.size() + 1;
第二部分:逻辑结构的“高利贷”(产出:加班改架构)
【核心观点】 复制粘贴、超长函数、层层if-else——这是代码界的“高利贷”。今天你图快借了,明天连本带利加班还。
坑点3:复制粘贴式“偷懒”
错误示范:
处理VIP用户和普通用户的逻辑,复制了两份,改了VIP的忘了改普通的。
加班场景: 产品说“普通用户的优惠券规则调整一下”,你改了A处,忘了B处的copy-paste代码,线上出现资损。
正确姿势: 抽取公共方法,用策略模式或参数区分。
坑点4:函数超长(超过100行)
错误示范:
一个doHandle()方法里,从参数校验、数据查询、业务计算、发送消息、记录日志全部写完。
加班场景: 上线后某个环节出错,堆栈信息指向第247行,你根本分不清是查询错了还是计算错了,只能一行行打日志排查,耗时2小时。
正确姿势: 一个方法只做一件事。即使只是逻辑分组,也拆成validateParams()、calculatePrice()、sendNotification()。
第三部分:并发与事务的“定时炸弹”(产出:加班通宵排查)
【核心观点】 你写的代码在单线程、测试环境跑得飞起,一上生产高并发就炸。因为从第一行代码起,你就没考虑过并发情况。
坑点5:@Transactional 大包大揽
错误示范:
java
@Transactional
public void placeOrder() {
// 1. 查库存
// 2. 扣库存(远程RPC调用耗时3秒)
// 3. 生成订单
}
加班场景: 高并发下,事务一直不提交,数据库连接池被耗尽,整个系统雪崩。
正确姿势: 事务边界要小。远程调用、非关键操作移出事务。
坑点6:if 判空后以为万事大吉
错误示范:
java
if (user != null) {
String address = user.getAddress();
if (address != null) {
String city = address.getCity();
}
}
加班场景: 某天address变成空对象但非null,或者city返回了空字符串,代码继续往下走,最后在某个地方抛NPE,但日志没打出完整链条,排查1小时。
正确姿势: 用Optional或卫语句及早返回。
第四部分:性能的“慢性自杀”(产出:加班搞优化)
【核心观点】 很多性能问题,不是上线后才出现的,而是写代码的第一天就已经埋下了。
坑点7:循环里查数据库/调接口
错误示范:
java
for (Long userId : userIdList) {
User user = userMapper.selectById(userId); // 循环N次SQL
}
加班场景: 数据量从100涨到10000,接口从200ms变成20秒,线上超时告警,你被从被窝喊起来优化。
正确姿势: 批量查询 selectBatchIds,或者SQL中用 IN。
坑点8:toString() 大对象
错误示范:
java
log.info("订单详情:{}", JSON.toJSONString(giganticOrder));
加班场景: 并发请求下,打印日志把内存打爆,频繁GC导致应用卡顿。
正确姿势: 只打印关键字段(订单号、状态),大对象用bean的toString(需避免循环引用)。
我是Java女工板砖,一个想让大家早点下班的程序员。 你见过哪些‘一把辛酸泪’的代码?评论区说出来,帮其他兄弟避个坑。我们下期见。”