Java 基础
集合
- 问题:
ArrayList如何扩容?HashMap何时树化? - 直达:
ArrayList以 1.5 倍扩容;HashMap当桶内数量≥8 且容量≥64 时链表转红黑树。
- 问题:
并发
- 问题:
volatile能保证原子性吗?线程池参数如何选? - 直达:
volatile仅保证可见性与有序性;核心池基于 CPU 与阻塞占比,队列类型与拒绝策略结合业务。
- 问题:
JVM
- 问题:双亲委派是什么?如何选择 GC?
- 直达:类加载优先由父加载器;大堆与低停顿选 G1,超低延迟考虑 ZGC/Shenandoah。
数据库与索引
索引
- 问题:联合索引列顺序如何定?覆盖索引意义?
- 直达:高选择性列靠前,匹配最左前缀;覆盖索引减少回表提升查询性能。
事务
- 问题:幻读与不可重复读的区别?如何避免?
- 直达:不可重复读是同条件读取结果变化;幻读是范围新增行导致统计变化;使用更高隔离与合理锁策略。
分页
- 问题:
offset慢的原因?如何优化? - 直达:深度偏移扫描多行;用游标/主键条件分页更快。
- 问题:
缓存
策略
- 问题:旁路/写穿/写回如何选择?
- 直达:强一致写穿;吞吐优先写回配合异步刷新;读多写少用旁路。
容灾
- 问题:如何防止雪崩/穿透/击穿?
- 直达:预热与均匀 TTL、BloomFilter、热点加本地缓存与降级兜底。
设计模式
创建/结构/行为
- 问题:适配器与防腐层关系?
- 直达:适配器用来转换接口,防腐层隔离外部模型并统一内部语义。
领域驱动结合
- 问题:策略/命令/观察者在 DDD 中如何用?
- 直达:策略封装可变算法,命令驱动聚合行为,观察者承载领域事件发布。
Spring Boot
事务失效
- 直达:方法非
public;同类内部调用未走代理;注解在接口无效;异常被捕获未抛出;代理类型与事务管理器不匹配;多数据源未正确配置;事务边界过大或嵌套事务未预期传播。
- 直达:方法非
最佳实践
- 直达:统一异常与校验、结构化日志与 TraceId、Profile 管理与密钥外置、仓储抽象返回领域模型。
Spring Cloud
基础
- 直达:配置中心/注册中心职责分离;网关进行路由与限流熔断;链路与日志统一接入。
灰度与治理
- 直达:金丝雀发布与流量染色;熔断降级与重试退避;监控与告警闭环。
架构综合(DDD + CQRS)
- 直达:写侧按聚合处理命令与不变式,领域事件经 Outbox 投递;读侧由事件投影物化视图,接受最终一致;跨域通过防腐层适配。
示例题(含答案)
题:
@Transactional为什么在同类内部调用不生效?- 答:Spring AOP 基于代理生效,内部调用绕过代理链;需通过外部 Bean 调用或使用 AspectJ 编织。
题:如何设计“查询很复杂、写规则很多”的系统?
- 答:采用 CQRS:写侧小聚合、命令保证不变式;读侧物化视图优化查询;通过领域事件维持读写一致,UI 披露最终一致。
题:避免缓存击穿的通用做法?
- 答:热点加本地缓存与互斥锁;预热与均匀 TTL;对空值缓存与降级兜底。