从一次支付状态建模说起 早些年写支付结果,我习惯用一个 enum 加一堆 if: enum PayStatus { SUCCESS, FAILED, PENDING, REFUNDED } void handle(PayStatus s) { if (s == SUCCESS) { ...
一段 SQL 在 Java 里换行,我存成了诡异的格式 前几天 Code Review,看到有人拼一条多行 SQL 用了老套路: String sql = "SELECT id, name, price FROM product " + "WHERE category = ? AND
「为什么这个 DTO 里的字段改不动了」 1 月底,一个新同事在群里问:他给订单查询的返回 DTO 加了个 @Data,然后用 Jackson 反序列化的时候报了一堆奇怪的错,改成 record 之后就好了,问我能不能把所有 DTO 都换成 record。 我当时的回答是:DTO 可以用,但不是所有
Code review 时那行 Arrays.asList 12 月底做代码评审,看到一个新同事写的状态判断: private static final List<String> PAID_STATUS = Collections.unmodifiableList( Arrays.a
起因:升级 JDK 11 之后堆少了 500 MB 前面那篇迁移记录里提过,订单服务从 JDK 8 升到 11 之后,稳定态堆占用从 2.6 GB 降到 2.1 GB。我当时只当是 GC 改进的附带效果,直到有同事问"为什么少了这么多",我才认真去查了一下。 答案主要来自 JEP 254:紧凑字符串
安全组的一封邮件 2021 年 1 月 20 号上午,公司安全组群发了一封邮件,标题是《关于 fastjson 反序列化漏洞的紧急排查通知》,要求各业务线在周五前上报使用了 fastjson 的服务清单和版本。 我心里咯噔一下。我们三个核心服务全在用 fastjson,版本 1.2.62。 $ mv
升级 JDK 11 之后,代码里开始出现 var 2 月初我们把一个服务从 JDK 8u272 升到了 JDK 11.0.10。升级本身没什么好说的,倒是有个副作用:有同事开始用 var 了。 第一次在 review 里看到这段代码,我打了回退: var result = orderService.
那个 CPU 100% 的现场,和我熬夜复现的死循环 12 月初,隔壁组的老服务(跑在 JDK 7 上的一套结算系统,JDK 一直没升)CPU 突然跑满。监控上 CPU 从 30% 直接顶到 100%,而且是持续的,降不下来。接口全部超时,重启之后几分钟又上去。 我过去帮忙看,抓了现场。这篇记录整个
对账少了 3.7 万元:一行 parallelStream 惹的祸 10 月 8 号,财务来找我,说 9 月 30 号的日报表金额对不上,系统算出来 148.2 万,实际银行流水 151.9 万,少了 3.7 万。而且奇怪的是,同一个任务重跑一遍,出来的数字还不一样:第二次是 149.6 万。 同样
review 的时候,我看到一段"用 Optional 写的判空" 5 月底做代码评审,看到同事写了这么一段: Optional<User> userOpt = userMapper.findById(userId); if (userOpt.isPresent()) { User user