
1.线程池配置如何实现热更新使用 Spring 的RefreshScope实现配置动态刷新。但直接替换运行中线程池会有并发风险。正确做法是通过代理模式 / 工厂模式管理线程池并保证更新操作是原子的。2.Spring Boot 启动后如何预热数据常用三种方式1PostConstructJava 标准侵入性低PostConstruct 阶段很多东西还没就绪— AOP代理没生成、ApplicationContext 还没完全 初始化、其他 Bean 可能还在创建中。如果在 PostConstruct里调用依赖了完整容器环境的逻辑就会出问题。2)init-methodBean(initMethodinit)指定的初始化方法 最后执行。常见于没法改源码的第三方类——没法 加PostConstruct也没法让它实现 InitializingBean但可以在Bean 方法上指定 它的初始化方法。 三种机制可以同时存在执行顺序固定: PostConstruct→ afterPropertiesSet()→initMethod()3ApplicationRunner/CommandLineRunner应用启动完成后执行4InitializingBean不推荐侵入性强一般业务初始化用PostConstruct启动后任务用ApplicationRunner。2.1为什么不用 InitializingBean侵入性强绑定 Spring 接口PostConstruct更符合 Java 标准更灵活2.2 ApplicationRunner 和 CommandLineRunner 区别执行时机相同ApplicationRunner用ApplicationArgumentsCommandLineRunner用原始参数数组3.Spring Boot 是如何知道要加载哪些 Bean 的启动时解析EnableAutoConfiguration注解通过自动装配机制读取AutoConfiguration.imports文件配合条件注解控制ConditionalOnClassConditionalOnMissingBean满足条件才加载对应 Bean4.Transactional 什么时候会失效常见场景异常被catch 吃掉调用的是private 方法同类方法内部调用方法是异步方法传播行为或异常类型不匹配5.MySQL 是行存储还是列存储逻辑上是行存储物理上以页Page为单位管理InnoDB 实际读写的最小单位是页默认 16KB多个行会被打包放进同一个数据页BTree 叶子节点即使你只查某一列也大概率要把整行所在页读入 Buffer Pool。行存优势点查、增删改、事务WHERE id ?列存优势大量聚合SUM / AVG / COUNTI/O 更少6.为什么 MySQL 表数据很小但磁盘占用很大主要原因索引占用空间删除数据后产生碎片行溢出大字段✅ 可通过OPTIMIZE TABLE回收空间7.MySQL 有哪些日志分别有什么用日志作用错误日志记录错误信息查询日志记录所有 SQL慢查询日志排查慢 SQLbinlog主从复制、数据恢复、审计redo log崩溃恢复undo log事务回滚8.binlog 的使用场景有哪些主从复制数据恢复全量 binlog审计数据同步 / 异构系统消费9.Redis 为什么这么快基于内存单线程避免上下文切换高效数据结构Hash、跳表等I/O 多路复用10.Redis 能做消息队列吗支持 Pub/Sub不适合做可靠消息队列持久化弱适合实时通知、容忍少量丢失的场景11.Redis 分布式锁有哪些坑锁过期未续期死锁误释放别人的锁不可重入阻塞等待问题生产建议使用Redisson12.gRPC 有注册中心吗gRPC 本身没有注册中心可结合Nacos服务注册gRPC 服务端主动向 Nacos 注册注册信息包括服务名、IP、端口服务发现gRPC 客户端查询 Nacos动态更新客户端连接地址负载均衡结合 Nacos 的负载均衡策略选择实例健康检查利用 Nacos 健康检测只调用健康实例✅好处服务可动态上下线支持流量调整提高系统 灵活性 可扩展性13.gRPC 和 HTTP 怎么选场景选择小请求、高性能gRPC大文件传输HTTP公网 APIHTTP原因gRPC 对负载有限制HTTP 更灵活14.Redis 分布式锁怎么续期看门狗机制如 Redisson Watch Dog定时延长锁过期时间