解构数据对象的老痛点 做对账时我拿到一个嵌套的支付结果对象,传统写法要一层层 getter 把字段掏出来,还得判空,代码又臭又长。更糟的是改一个字段层级,所有取值点都得跟着改,漏一处就是运行时 NullPointerException,而且这种错编译期发现不了,只能等线上炸。JDK 21 的模式匹配
毫无征兆的线程池打满 新上线的网关用 JDK 21 虚拟线程处理请求。压测到 8000 并发时,吞吐量突然从 1.2 万 req/s 跌到谷底,响应从 30ms 飙到 8 秒,CPU 却只有 40%——典型的"线程都在等,CPU 没事干"。jstack 一看,200 个平台线程(carrier)全卡
为什么要看 Java 的 LLM 框架 团队要做个工单自动分类的小工具,调用 OpenAI。一开始我手搓 HttpClient 拼 JSON,发现每加一个能力就要重写一遍请求体、解析流、管上下文。更烦的是流式输出要自己处理 SSE,错误码要自己映射,超时和重试也要自己写。做了两个功能之后,代码里一半
一个被语法糖耽误的拼接需求 上周我要拼一段带变量的 SQL 调试日志,里面混入三个变量。老写法要么是加号拼接,要么是 String.format,前者冗长后者位置参数容易错位。听同事说 JDK 21 的预览特性 String Templates 把这件事做漂亮了,我拉了 early-access 构
背景:4.x 到 5.x 的跨代升级 八月底我们把分库分表中间件从 ShardingSphere 4.1 升到 5.3。4.x 用的还是旧的 sharding-jdbc 单库形态,配置散在 Spring 的 xxx.yaml 里;5.x 统一成了 shardingsphere-jdbc,配置模型完全
背景:大促前的压测暴露了长尾 八月底大促压测,核心的下单查询接口平均 RT 只有 120ms,看着挺好,但 P99 飙到 800ms,监控里偶发还有 1.5 秒的尖刺。平均好看掩盖了长尾,而用户体验恰恰被那 1% 的慢请求毁掉。我接了这活,目标是把 P99 压到 150ms 以内。 全链路耗时分析:
现象:容器 4 核,GC 却开了 24 个线程 八月初一个 Pod 频繁被 K8s 驱逐,OOMKilled 日志看着是内存超了,但监控显示内存没到 limit。我进容器一查 CPU 使用率 400%——而这 Pod 只申请了 4 核。根因是 GC 线程数按宿主机 24 核算的,Parallel G
背景:ZooKeeper 又成了单点隐患 七月中我们的 Kafka 集群(3.2 版本,还跑在 ZooKeeper 上)遇到一次 ZK 会话超时,导致整个集群控制器选举卡了 90 秒,消息生产大面积抖动。ZK 那套独立组件既要单独运维、又要和 Kafka 版本对齐,一直是心腹大患。Kafka 3.3
背景:团队新人又慌了 七月一次支付成功率骤降,新来的同学第一反应是「我先重启试试」。结果重启把现场冲了,后面复盘只能靠猜。这种事不是第一次,我干脆把我们的线上排查 SOP 固化成文档,要求所有人遇事先照流程走,别凭直觉乱动。 第一原则:止血优先 出问题第一时间想的不是「为什么」,是「怎么不让它继续坏
背景:RestTemplate 越用越别扭 七月我们在预发环境试了 Spring 6.1 的里程碑版本(6.1 当时还没 GA,计划十一月随 Boot 3.2 一起),最让我眼前一亮的是 RestClient 和 HTTP Interface。以前用 RestTemplate,拼 URL、处理异常、