从今天起开一个固定栏目:每天读一本书,把里面的东西压缩到 20 分钟内读完,再写点自己的看法。方向是金融、AI、历史这三块——前两块是饭碗,最后一块是让人不至于把今年发生的事都看成世界末日。 第一本很适合开栏:《金钱心理学》(The Psychology of Money),摩根·豪泽尔。 它的核心
跑批脚本算出来的数对不上 2 月 11 号早上,财务来找我对账:昨天的日结脚本跑出来的金额是 1000 元,但后台页面显示是 1200 元。我翻脚本日志,发现它做了这么一件事: START TRANSACTION; SELECT SUM(amount) FROM t_order WHERE pay_
同事问:我这个接口没写 limit,为什么只返回 10 条 1 月底,隔壁工位的同事喊我过去看个怪事。他的导出接口调了两次 Mapper:第一次查订单列表,第二次查订单状态统计。结果统计接口只返回了 10 条数据,而他的 SQL 里压根没有 limit。 我把 MyBatis 的 SQL 日志打开(
一个 DTO 我写了 47 行 if 年前接手了一个商户入驻的接口,参数对象有 12 个字段,原来的校验代码长这样: public Result<?> apply(MerchantApplyDTO dto) { if (dto.getMerchantName() == null || dto
压测报告里,那根最扎眼的柱子 一月初做订单履约服务的性能优化,主管让我把瓶颈点列一遍。用 JMH 跑了几个核心组件的基准测试,结果里最刺眼的是本地缓存这一项:同样 8 线程、读写比 9:1,Collections.synchronizedMap(new HashMap<>()) 的吞吐是 2.1M
code review 时,我们为一个顺序吵了半小时 一月中旬,同事小王提了个 PR,商品改价接口里他这么写的: @Transactional public void updatePrice(Long skuId, BigDecimal newPrice) { redisTemplate.d
发布后第二天上午,接口全卡在 3 秒 12 月 18 号那次上线加了个订单导出功能,第二天上午十点,运维在群里 @ 我:订单查询接口 P99 从 40ms 涨到了 3000ms,超时率 12%。 第一反应是慢 SQL。打开 Druid 监控页(我们一直开着 /druid),看到的画面不太对: Act
DBA 甩给我一个 2.3G 的慢日志文件,说"你们那边先看看" 双十二前一周,DBA 在群里发了条消息:订单库 QPS 涨了 3 倍,慢查询日志一天产生 2.3G,让各个业务方自查。我负责的订单模块首当其冲。 拿到日志文件的时候我是懵的,2.3G 文本,几百万行,根本没法用编辑器打开。这篇记录我当
注入的 service 是 null,我对着空指针查了一下午 十二月初写了个定时任务,跑起来第一行就 NPE: @Component public class OrderTimeoutJob { @Autowired private OrderService orderService
改了 application.yml 重启了八次,配置还是不生效 十一月底给服务加一个超时配置,我在 application.yml 里加了这么一行: http: connect-timeout: 5000 然后重启,打印出来还是默认值 3000。我以为没编译进去,clean 重新打包,还是
我一度以为 Redis 就是个能过期的 String 字典 刚接触 Redis 那两个月,我写的缓存代码全是这个画风: // 用户信息缓存 redisTemplate.opsForValue().set("user:" + userId, JSON.toJSONString(user), 1, Ti
扣了库存没生成订单,@Transactional 一个字没生效 十一月中旬那次上线后,客服陆续接到投诉:用户付款成功,但订单列表里查不到。我翻数据库,发现 t_stock 的库存扣了,t_order 里却没有对应记录。同一个 @Transactional 方法里的两个操作,一个成了一个没成。 这种"
同事发来一段代码,问为什么 127 和 128 结果不一样 万圣节前一天,隔壁工位刚转岗过来的同事在群里贴了这段代码: Integer a = 127; Integer b = 127; System.out.println(a == b); Integer c = 128; Integer d
同一笔订单被扣了两次款:我写的分布式锁形同虚设 十月下旬,财务对账发现 7 笔订单重复扣款。查下来是用户点了两次支付按钮,两个请求几乎同时打到两台不同的应用服务器上,都通过了库存和状态校验,各扣了一次。 我当时的第一反应是"加个锁不就行了",然后写出了这一版: public boolean pay(
入职第三个月,我把线上服务搞 OOM 了 那是个导出报表的功能。测试环境数据量小,跑得飞快;上线之后运营点了一次"导出全部",三分钟后服务就挂了。监控上堆内存是一条 45 度的斜线,直接顶到天花板然后掉底。 我登机器捞日志,看到了人生中第一个这个: Exception in thread "http
Hello Halo 如果你看到了这一篇文章,那么证明你已经安装成功了,感谢使用 Halo 进行创作,希望能够使用愉快。 关于 Halo Halo 是一个现代化的开源博客系统,专注于提供优秀的写作体验。 特色功能 🎨 现代化的编辑界面 📱 响应式设计 🔌 丰富的插件生态 🌍 多语言支持 🚀