老废物乐园 瓜子

精选置顶

每日一书 #001|《金钱心理学》:为什么"撑得住"比"算得准"重要

从今天起开一个固定栏目:每天读一本书,把里面的东西压缩到 20 分钟内读完,再写点自己的看法。方向是金融、AI、历史这三块——前两块是饭碗,最后一块是让人不至于把今年发生的事都看成世界末日。 第一本很适合开栏:《金钱心理学》(The Psychology of Money),摩根·豪泽尔。 它的核心

遥望星星 遥望星星 发布于 2026-08-30

最新文章

Java 8 Stream 很好用,但这几个坑我踩过

用 Stream 写的统计,结果是错的 Java 8 的 Stream 我从去年开始用,写起来确实爽,但这段时间接连踩了几个坑,都是"能编译、能运行、结果不对"那种,比直接报错更难查。记一下。 坑一:Stream 只能用一次 第一次遇到是这段代码: Stream<Order> stream = or

遥望星星 遥望星星 发布于 2019-01-29

用枚举干掉满屏 if-else:一次订单状态机重构

我写的 180 行 if-else 被 review 打回了 上周做了个订单状态流转的需求,我吭哧吭哧写完,自我感觉良好地提了 MR。师傅留了一条评论:"状态机别这么写,用枚举。" 先看看我交上去的东西: @Service public class OrderStateService {

遥望星星 遥望星星 发布于 2019-01-25

SimpleDateFormat 非线程安全导致线上日期错乱复盘

客服说:订单创建时间显示成了 1970 年 5 月 14 号早上,客服群里转过来一张用户截图,订单详情里的创建时间是 1970-01-01 08:00:00。我第一反应是数据库存了 0,查了一下,数据库里的时间戳完全正常。 那就是显示的时候格式化错了。去看那段代码: @Service public

遥望星星 遥望星星 发布于 2019-01-23

线程池参数怎么设?一次线程池打满导致的服务不可用

上午十点,接口全部超时 5 月 8 号上午十点整,监控告警连着响了:订单服务的接口 P99 从 80ms 涨到 30 秒(超时阈值),成功率掉到 12%。登录机器看,进程还在,CPU 只有 6%,内存正常,但所有请求都在超时。 第一感觉是数据库挂了。查了 MySQL 监控,QPS 只有平时的三分之一

遥望星星 遥望星星 发布于 2019-01-22

从单体到分层:我的第一个项目重构记录

接手了一个 4000 行的 Service 类 三月底,组里那个做了两年的老项目交到我手上。第一次打开 OrderServiceImpl.java,IDEA 右下角显示 4127 lines,我愣了一会儿。往下翻,一个方法从 1032 行开始,到 1450 行结束,中间嵌套了 7 层 if。 更绝望

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

深拷贝与浅拷贝:一次对象被意外修改引发的生产事故

优惠券金额半夜自己变了 4 月 27 号凌晨一点,我被电话叫醒。客服说有用户投诉:领的 20 元券,下单时变成 5 元了。我爬起来查数据库,发现那批用户券的金额字段确实从 20 变成了 5,而且更新时间不是操作时间。 翻代码的时候找到了这段: // 从配置里取出默认的券模板 CouponTempla

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

volatile 到底解决了什么问题?可见性与指令重排

同事问我:既然有 volatile,为什么还要加锁 上周 code review,同事看到我写的一个状态标记用了 volatile,问我:"这东西不是能保证线程安全吗,那 synchronized 还有什么用?" 我说不能这么理解,但当时没能讲清楚。下来自己看了几天 JMM 的资料,又写了几个例子验

遥望星星 遥望星星 发布于 2019-01-16

Git 分支管理与误合并回滚实战

我把没测完的 dev 合进了 master 这是上周四的事。手上同时开着三个分支,敲 git merge 的时候 tab 补全选错了分支,把还没测完的 dev 合到了 master,还 push 了。等我看到 CI 群里飘红,master 上已经多了 17 个提交。 那一刻脑子里闪过的念头是"要不要

遥望星星 遥望星星 发布于 2019-01-12

String 拼接用 + 还是 StringBuilder?一次循环拼接引发的 CPU 飙高

导出功能上线,CPU 直接干到 780% 新做的对账单导出上线第一天,监控图上 CPU 从 15% 一条直线拉到 780%(8 核机器)。同一个时间点 Full GC 频率从每小时 2 次变成每分钟 30 多次。导出的文件也就 4MB 大小,不至于。 我用 jstack 抓了几把线程,大量线程停在这

遥望星星 遥望星星 发布于 2019-01-12

Spring MVC 日期参数绑定 400 错误排查

前端说:你的接口又报 400 了 那天下午前端同事在工位上喊我,说提交表单一直 400,请求都发出去了。我看了下 Chrome 的 Network 面板: Request URL: /order/list Request Method: GET Status Code: 400 Bad Reques

遥望星星 遥望星星 发布于 2019-01-11

limit 1000000 慢到无法忍受?深分页优化方案

慢查询日志里躺了一条 8 秒的 SQL DBA 每周会给我们发一份慢查询报表。上周的报表里,我们服务贡献了第一名:一条 8.2 秒的 SQL,平均执行 1200 次/天。 # Time: 2018-03-08T10:22:33.123456Z # Query_time: 8.203451 Lock

遥望星星 遥望星星 发布于 2019-01-08

从 SSM 迁移到 Spring Boot 2.0 的第一步与踩坑记录

老大说:新项目别配 SSM 了,直接上 Boot 三月份开新项目,我习惯性地去翻老项目的 spring-context.xml,准备复制粘贴。老大过来一句话把我拦住了:"别配了,用 Spring Boot 2.0。" 我当时是有点慌的——SSM 那套我刚摸熟,web.xml、applicationC

遥望星星 遥望星星 发布于 2019-01-08

Linux 上部署和排查 Java 应用的常用命令清单

第一次登生产服务器,我连日志在哪都不知道 入职第二周,导师丢给我一台测试机的账号,说"你自己把服务起起来"。我 cd 了半天,连 jar 包放哪都找不到,最后是靠 ls 一个个目录翻出来的。那天之后我把常用的命令整理成了这份清单,现在贴出来,也给刚上手的同学参考。 环境是 CentOS 7 + JD

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

MyBatis 一级缓存与二级缓存:一次读到脏数据的排查

运营说:我明明改了数据,页面还是旧的 去年做后台管理系统时遇到件怪事。运营在页面上改了一条商品记录的库存,保存成功,数据库里确认已经改了,但刷新列表看到的还是旧值。过几分钟再刷又对了。 我把日志级别调到 DEBUG,看到这么一段: ==> Preparing: SELECT id, name, s

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

MyBatis 批量插入的几种方式与性能对比

3 万条数据导了 20 分钟 上周五下午接到个活儿:从老系统导 3 万条历史订单到新库。我写了个循环,单次 insert,跑起来就去接水了。回来一看还在跑,最后总共花了 18 分 42 秒。DBA 在钉钉上问我是不是在攻击数据库。 痛定思痛,我把 MyBatis 批量插入的几种写法全试了一遍,顺便记

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