一杯咖啡的时间,聊聊技术与成长
定位工具箱:performance_schema 与 sys schema 实战
凌晨 CPU 飙高是谁干的?MySQL 自带的体检仪实战:按 digest 找 TOP 慢 SQL、sys.session 抓现行、innodb_trx 揪长事务、锁等待与 MDL 一次排清。
扩展点全家福:让框架替你干活的十把钩子
BeanFactoryPostProcessor 改定义、BeanPostProcessor 改对象、EnvironmentPostProcessor 改环境、ControllerAdvice 接异常——按容器、配置、Web 三层盘点常用扩展点。
自定义 Starter:把公司组件装进 Boot 的标准件
命名规范、AutoConfiguration.imports 注册、Properties 配置绑定、@ConditionalOnMissingBean 留后门——三十行代码把短信组件做成开箱即用的依赖。
自动装配:@EnableAutoConfiguration 的寻宝游戏
引入 starter 依赖,Bean 就自己出现了?@SpringBootApplication 的三件套、META-INF 里的候选清单、@Conditional 条件装配、ConditionEvaluationReport 排查术。
Spring Boot 启动流程:run 方法背后的十步
从 main 到 Tomcat 就绪发生了什么?推断应用类型、准备环境、注册主类、refresh 容器、内嵌服务器启动——把启动日志翻译成一张流程图。
事件机制:一次发布,多处响应
下单成功后的短信、积分、日志不该堆在主干里。ApplicationEvent 三步上手、默认同步的三个真相、@TransactionalEventListener 的 AFTER_COMMIT 时序对齐。
循环依赖进阶:@Lazy 能救,构造器救不了
BeanCurrentlyInCreationException 怎么破?Boot 2.6 为什么默认禁止循环依赖、@Lazy 的延迟代理、ObjectProvider 的体面写法——从三级缓存原理推演出的实战三招。
@Autowired 与 @Resource:注入的门道
byType 与 byName 的分野、@Primary 与 @Qualifier 的分工、构造器注入为什么是官方推荐——注进来的可能还是代理,注入的门道比你以为的深一层。
传播行为七式:REQUIRED、REQUIRES_NEW、NESTED 的真实差别
REQUIRED 绑在一起、REQUIRES_NEW 各过各的、NESTED 是游戏存档。审计日志必须独立落库的标准解法,连接占用翻倍与自锁死锁两笔成本,挂起的源码真相。