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

Optional 与 Stream 的性能代价实测

review 时和同事吵了一架 1 月中旬做 code review,我写了一段统计订单金额的代码: long total = orders.stream() .mapToLong(Order::getAmount) .sum(); 同事评论:"Stream 有性能

遥望星星 遥望星星 发布于 2020-06-27

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

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

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

CompletableFuture 异步编排实战

商品详情页 800 毫秒,我把它改成了 180 毫秒 10 月底做性能优化,商品详情页是重点。这个页面要聚合 6 个数据源,原来的代码是串行调的: public ProductDetailVO getDetail(Long skuId) { ProductVO product = produ

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

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

Lambda 表达式与函数式接口:从会用到了解实现

同事说"Lambda 就是匿名内部类的语法糖" 三月底做代码评审,我提了个建议说"这里可以用 Lambda 简化"。同事回了句:"Lambda 不就是匿名内部类的语法糖吗,性能还差一点,没必要改。" 我说不上来哪里不对,但记得在哪看过说 JDK 8 的 Lambda 底层用的是 invokedyna

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

Java 8 日期时间 API 全面迁移:LocalDateTime 实战

统计三月的订单,查出来是四月的 3 月中旬接了个老项目的改造任务,其中一块是给运营加个按月导出订单的功能。我写了个 SQL 拼时间的工具类,自测的时候点了三月,导出来的数据全是四月的。 当时那段代码: public static Date monthStart(int year, int month

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

注解处理器与自定义注解:手写一个参数校验

一个 DTO 我写了 47 行 if 年前接手了一个商户入驻的接口,参数对象有 12 个字段,原来的校验代码长这样: public Result<?> apply(MerchantApplyDTO dto) { if (dto.getMerchantName() == null || dto

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

ConcurrentHashMap 为什么比 synchronizedMap 快

压测报告里,那根最扎眼的柱子 一月初做订单履约服务的性能优化,主管让我把瓶颈点列一遍。用 JMH 跑了几个核心组件的基准测试,结果里最刺眼的是本地缓存这一项:同样 8 线程、读写比 9:1,Collections.synchronizedMap(new HashMap<>()) 的吞吐是 2.1M

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

为什么 127 == 127 为真,128 == 128 却为假?Integer 缓存池踩坑

同事发来一段代码,问为什么 127 和 128 结果不一样 万圣节前一天,隔壁工位刚转岗过来的同事在群里贴了这段代码: Integer a = 127; Integer b = 127; System.out.println(a == b); Integer c = 128; Integer d

遥望星星 遥望星星 发布于 2019-03-26