老废物乐园 瓜子的技术笔记 · Java / AI / 金融科技

Sealed Class 密封类的使用场景

从一次支付状态建模说起 早些年写支付结果,我习惯用一个 enum 加一堆 if: enum PayStatus { SUCCESS, FAILED, PENDING, REFUNDED } void handle(PayStatus s) { if (s == SUCCESS) { ...

遥望星星 遥望星星 发布于 2022-02-11

文本块 Text Block 写 SQL 与 JSON 的正确姿势

一段 SQL 在 Java 里换行,我存成了诡异的格式 前几天 Code Review,看到有人拼一条多行 SQL 用了老套路: String sql = "SELECT id, name, price FROM product " + "WHERE category = ? AND

遥望星星 遥望星星 发布于 2021-12-26

Record 类型与不可变数据建模实践

「为什么这个 DTO 里的字段改不动了」 1 月底,一个新同事在群里问:他给订单查询的返回 DTO 加了个 @Data,然后用 Jackson 反序列化的时候报了一堆奇怪的错,改成 record 之后就好了,问我能不能把所有 DTO 都换成 record。 我当时的回答是:DTO 可以用,但不是所有

遥望星星 遥望星星 发布于 2021-05-11

JDK 9+ 的新集合工厂方法与不可变集合

Code review 时那行 Arrays.asList 12 月底做代码评审,看到一个新同事写的状态判断: private static final List<String> PAID_STATUS = Collections.unmodifiableList( Arrays.a

遥望星星 遥望星星 发布于 2021-04-02

String 在 JDK 9 之后为什么改用 byte 数组

起因:升级 JDK 11 之后堆少了 500 MB 前面那篇迁移记录里提过,订单服务从 JDK 8 升到 11 之后,稳定态堆占用从 2.6 GB 降到 2.1 GB。我当时只当是 GC 改进的附带效果,直到有同事问"为什么少了这么多",我才认真去查了一下。 答案主要来自 JEP 254:紧凑字符串

遥望星星 遥望星星 发布于 2021-02-23

Fastjson 反序列化漏洞与 Jackson 迁移

安全组的一封邮件 2021 年 1 月 20 号上午,公司安全组群发了一封邮件,标题是《关于 fastjson 反序列化漏洞的紧急排查通知》,要求各业务线在周五前上报使用了 fastjson 的服务清单和版本。 我心里咯噔一下。我们三个核心服务全在用 fastjson,版本 1.2.62。 $ mv

遥望星星 遥望星星 发布于 2021-02-05

var 局部变量类型推断:用还是不用

升级 JDK 11 之后,代码里开始出现 var 2 月初我们把一个服务从 JDK 8u272 升到了 JDK 11.0.10。升级本身没什么好说的,倒是有个副作用:有同事开始用 var 了。 第一次在 review 里看到这段代码,我打了回退: var result = orderService.

遥望星星 遥望星星 发布于 2020-07-15

HashMap 扩容死链:JDK 1.7 那个著名的 CPU 100% 问题

那个 CPU 100% 的现场,和我熬夜复现的死循环 12 月初,隔壁组的老服务(跑在 JDK 7 上的一套结算系统,JDK 一直没升)CPU 突然跑满。监控上 CPU 从 30% 直接顶到 100%,而且是持续的,降不下来。接口全部超时,重启之后几分钟又上去。 我过去帮忙看,抓了现场。这篇记录整个

遥望星星 遥望星星 发布于 2019-10-05

Stream 并行流慎用:一次 parallelStream 导致的数据错乱

对账少了 3.7 万元:一行 parallelStream 惹的祸 10 月 8 号,财务来找我,说 9 月 30 号的日报表金额对不上,系统算出来 148.2 万,实际银行流水 151.9 万,少了 3.7 万。而且奇怪的是,同一个任务重跑一遍,出来的数字还不一样:第二次是 149.6 万。 同样

遥望星星 遥望星星 发布于 2019-09-04

Optional 的正确用法,别把它当成判空工具

review 的时候,我看到一段"用 Optional 写的判空" 5 月底做代码评审,看到同事写了这么一段: Optional<User> userOpt = userMapper.findById(userId); if (userOpt.isPresent()) { User user

遥望星星 遥望星星 发布于 2019-07-04