一杯咖啡的时间,聊聊技术与成长
类加载机制:Class 文件是怎么变成可用对象的
加载、验证、准备、解析、初始化五步各司其职——静态变量的坑大多出在"准备"和"初始化"的顺序差上。六种主动引用、一次 clinit 的线程安全,都在这篇。
对象的一生:从 new 一句到被回收
new Object() 这一行背后有五道工序,对象头里藏着分代年龄与锁标志,内存布局里藏着 8 字节对齐。对象怎么生、长什么样、怎么被访问,这篇讲透。
运行时数据区:堆、栈、方法区到底怎么分
StackOverflowError 和 OutOfMemoryError 天天见,但一个在栈、一个在堆——线程私有的三块和全局共享的两块,一张地图把 JVM 的地皮划分讲清楚。
为什么 Java 工程师绕不开 JVM:从一次线上 OOM 说起
周日早上七点的 OOM 告警,重启后三天又来——不认识 JVM 的工程师,只能永远在重启大法里轮回。内存怎么分、垃圾怎么收、问题怎么查,这个系列把 JVM 从黑盒讲成工具箱。
写给后端的 Vite 配置指南:从懵到懂
每次前端构建出问题就 copy Stack Overflow?这篇用后端工程师能听懂的语言,拆解 Vite 的依赖预构建、HMR 和打包优化。
收官:秒杀架构全景复盘
回到崩掉的那一晚:同样的 10 万人抢 50 台,现在的系统怎么接——从 CDN 到数据库逐层走一遍。漏斗全景、演进路线与克制的设计:小流量秒杀用不到全套装,过度设计也是事故。
全链路压测与容量规划
单接口压八万、全链路压八百——每个组件的容量账都好算,拼在一起才是真相。影子库隔离压测数据,容量公式加冗余系数,短板决定上限,压测报告要给每层一个结论。
降级与兜底:秒杀挂了也要体面
Redis 不可用、MQ 堆积、风控超时——秒杀链路上没有组件是永远可靠的。降级的本质是有损服务:提前定义哪些损失可接受、谁来决策、开关在哪,预案写在演练里而不是文档里。
数据对账:Redis 与 DB 的最终一致
Redis 扣的、MQ 传的、DB 记的——三个存储三条路径,每个失败分支都是差异来源。总库存恒等式、实时抽样加离线全量、自动修复与人工兜底的分界线,对账是最终一致的最后一块拼图。