Skip to content

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;对空值缓存与降级兜底。

在崩溃边缘,完成技术跃迁