Skip to content

Java 面试知识点串联指南

核心理念:用"从代码到架构"的纵向主线,把分散的知识点串成网


📌 一、核心串联主线

五层递进模型

┌─────────────────────────────────────────┐
│  5. 架构层:微服务、缓存、消息队列        │
├─────────────────────────────────────────┤
│  4. 框架层:Spring、MyBatis、SpringBoot │
├─────────────────────────────────────────┤
│  3. 并发层:锁、线程池、JUC              │
├─────────────────────────────────────────┤
│  2. JVM 层:内存模型、GC、类加载          │
├─────────────────────────────────────────┤
│  1. 基础层:集合、IO、反射、泛型         │
└─────────────────────────────────────────┘

串联方法:从一行代码出发,逐层深入

java
// 从一个简单的 HashMap 出发
Map<String, Object> cache = new HashMap<>();

// 问题链:
// 1. 基础层:HashMap 底层结构?扩容机制?
// 2. 并发层:线程安全吗?ConcurrentHashMap 如何实现?
// 3. JVM 层:存太多会怎样?触发什么 GC?
// 4. 框架层:Spring 哪里用了 HashMap?
// 5. 架构层:分布式缓存怎么选?Redis vs 本地缓存?

📌 二、七大知识串(完整梳理)

🔹 知识串 1:集合框架 → 并发容器

Collection 接口
├── List
│   ├── ArrayList(数组,随机访问 O(1))
│   │   └── 扩容:1.5 倍,System.arraycopy
│   ├── LinkedList(双向链表,插入删除 O(1))
│   └── Vector(线程安全,已过时)→ CopyOnWriteArrayList
├── Set
│   ├── HashSet(HashMap + PRESENT)
│   ├── LinkedHashSet(维护插入顺序)
│   └── TreeSet(红黑树,自然/比较器排序)
└── Queue
    ├── PriorityQueue(堆实现)
    └── ArrayBlockingQueue(阻塞队列)

Map 接口
├── HashMap(重点!)
│   ├── JDK7:数组 + 链表,头插法
│   ├── JDK8:数组 + 链表 + 红黑树,尾插法
│   ├── 负载因子:0.75,阈值 = 容量 × 负载因子
│   ├── hash 计算:(h >>> 16) ^ h
│   └── 树化条件:链表长度≥8 且数组长度≥64
├── ConcurrentHashMap(高频!)
│   ├── JDK7:Segment 分段锁
│   ├── JDK8:Node + synchronized + CAS
│   └── 不支持 null key/value
├── LinkedHashMap(LRU 基础)
│   └── 双向链表维护顺序
└── TreeMap(红黑树)

面试串联答法:

问:HashMap 和 ConcurrentHashMap 的区别?

  • 结构差异:HashMap 是数组 + 链表 + 红黑树;CHM 在此基础上加了并发控制
  • 线程安全:HashMap 不安全;CHM 用 synchronized+CAS 保证
  • null 值:HashMap 允许 null;CHM 不允许
  • 场景:单线程用 HashMap,多线程用 CHM

🔹 知识串 2:并发编程完整链路

┌─────────────────────────────────────────────────────────────┐
│                    并发编程知识体系                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ① 基础概念                                                  │
│     进程 vs 线程 → 线程状态 (NEW/RUNNABLE/BLOCKED/          │
│     WAITING/TIMED_WAITING/TERMINATED)                       │
│                                                             │
│  ② 三大特性                                                  │
│     原子性 → 操作不可分割                                    │
│     可见性 → volatile、synchronized                         │
│     有序性 → happens-before、指令重排                        │
│                                                             │
│  ③ 关键字详解                                                │
│     volatile                                                │
│     ├── 保证可见性(MESI 缓存一致性协议)                     │
│     ├── 保证有序性(禁止指令重排)                           │
│     └── 不保证原子性(需配合 CAS)                           │
│                                                             │
│     synchronized                                            │
│     ├── 对象头 Mark Word(哈希码 + GC 分代年龄 + 锁标志)      │
│     ├── 锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁           │
│     └── Monitor 机制(进入/退出)                            │
│                                                             │
│  ④ JUC 工具类                                                │
│     ReentrantLock                                           │
│     ├── AQS(AbstractQueuedSynchronizer)核心               │
│     ├── CLH 双向队列                                         │
│     ├── state 字段表示锁状态                                 │
│     └── fair vs non-fair                                     │
│                                                             │
│     CountDownLatch / CyclicBarrier / Semaphore              │
│                                                             │
│  ⑤ CAS 与原子类                                               │
│     Compare-And-Swap                                        │
│     ├── 三个操作数:内存位置 V、预期值 A、更新值 B            │
│     ├── ABA 问题 → 版本号解决                                │
│     └── AtomicXXX 类                                         │
│                                                             │
│  ⑥ 线程池(超高频!)                                         │
│     ThreadPoolExecutor                                      │
│     ├── 7 大参数                                              │
│     │   corePoolSize     - 核心线程数                        │
│     │   maximumPoolSize  - 最大线程数                        │
│     │   keepAliveTime    - 空闲存活时间                      │
│     │   unit             - 时间单位                          │
│     │   workQueue        - 任务队列                          │
│     │   threadFactory    - 线程工厂                          │
│     │   handler          - 拒绝策略                          │
│     ├── 工作流程                                              │
│     │   新任务 → 核心线程?创建 → 满了?入队 →                │
│     │   队列满?非核心线程?创建 → 全部满?拒绝               │
│     └── 4 种拒绝策略                                          │
│         AbortPolicy(抛异常)、CallerRuns(调用者运行)        │
│         DiscardPolicy(丢弃)、DiscardOldest(丢弃最老)       │
│                                                             │
│  ⑦ ThreadLocal                                               │
│     ├── 线程隔离变量                                          │
│     ├── ThreadLocalMap(弱引用 Entry)                        │
│     └── 内存泄漏:必须 remove()                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

执行流程串联:

任务提交到线程池
    ↓
检查核心线程是否已满
    ↓ 未满
创建新核心线程执行
    ↓ 已满
尝试加入阻塞队列
    ↓ 队列满
检查最大线程是否已满
    ↓ 未满
创建非核心线程执行
    ↓ 已满
执行拒绝策略

🔹 知识串 3:JVM 完整体系

┌─────────────────────────────────────────────────────────────┐
│                      JVM 知识体系                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ① 内存区域(JDK8)                                          │
│     ┌──────────────────────────────────────┐                │
│     │           JVM 内存结构                 │                │
│     ├──────────────────────────────────────┤                │
│     │  堆 (Heap)          │ 线程共享        │                │
│     │  ├─ 新生代          │ - Eden         │                │
│     │  │                  │ - Survivor0/1  │                │
│     │  ├─ 老年代          │                │                │
│     │  └─ (JDK7:方法区在堆中)               │                │
│     ├──────────────────────────────────────┤                │
│     │  方法区 (Metaspace) │ 线程共享        │                │
│     │  - 类信息、常量、静态变量             │                │
│     │  - JDK8 后使用本地内存                │                │
│     ├──────────────────────────────────────┤                │
│     │  栈 (Stack)         │ 线程私有        │                │
│     │  - 栈帧(局部变量表 + 操作数栈)        │                │
│     │  - 方法执行与调用                     │                │
│     ├──────────────────────────────────────┤                │
│     │  程序计数器         │ 线程私有        │                │
│     │  - 记录当前执行的字节码行号            │                │
│     └──────────────────────────────────────┘                │
│                                                             │
│  ② 垃圾回收                                                  │
│     判断对象存活                                              │
│     ├── 引用计数法(循环引用问题)                            │
│     └── 可达性分析(GC Roots)                               │
│         ├── 虚拟机栈引用的对象                               │
│         ├── 方法区中类静态属性引用的对象                     │
│         ├── 方法区中常量引用的对象                           │
│         └── 本地 JNI 栈引用的对象                              │
│                                                             │
│     GC 算法                                                   │
│     ├── 标记 - 清除(碎片问题)                               │
│     ├── 标记 - 复制(新生代,Survivor)                       │
│     ├── 标记 - 整理(老年代)                                 │
│     └── 分代收集(主流)                                     │
│                                                             │
│     垃圾收集器                                                │
│     ├── CMS(老年代,标记 - 清除,低停顿)                    │
│     ├── G1(Region 分区,可预测停顿)                         │
│     └── ZGC(JDK11+,超低停顿<10ms)                          │
│                                                             │
│  ③ 类加载机制                                                │
│     加载 → 验证 → 准备 → 解析 → 初始化                        │
│                                                             │
│     双亲委派模型                                              │
│     ├── Bootstrap ClassLoader(启动类加载器)                │
│     ├── Extension ClassLoader(扩展类加载器)                │
│     └── Application ClassLoader(应用类加载器)              │
│                                                             │
│     打破双亲委派                                              │
│     ├── SPI 机制(ServiceLoader)                            │
│     ├── Tomcat(自定义 WebAppClassLoader)                   │
│     └── 热部署/热替换                                        │
│                                                             │
│  ④ 性能调优                                                  │
│     常用命令                                                  │
│     ├── jps - 查看 JVM 进程                                   │
│     ├── jstat - 监控 GC 统计                                  │
│     ├── jmap - 生成堆 dump                                   │
│     ├── jhat - 分析堆 dump                                   │
│     └── jstack - 查看线程栈                                   │
│                                                             │
│     常见参数                                                  │
│     ├── -Xms/-Xmx     堆初始/最大大小                         │
│     ├── -Xmn          新生代大小                             │
│     ├── -XX:NewRatio  新老比例                               │
│     ├── -XX:+UseG1GC  使用 G1 收集器                           │
│     └── -XX:MaxGCPauseMillis 目标停顿时间                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

GC 过程串联:

对象在 Eden 区分配
    ↓
Eden 满,触发 Minor GC
    ↓
存活对象复制到 Survivor0
    ↓
再次 GC,Survivor0 存活对象复制到 Survivor1
    ↓
每次复制年龄 +1,达到阈值(默认 15)晋升老年代
    ↓
老年代满,触发 Full GC(可能伴随 Minor GC)

🔹 知识串 4:Spring 全家桶

┌─────────────────────────────────────────────────────────────┐
│                    Spring 知识体系                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ① Spring Framework(核心)                                  │
│                                                             │
│     IOC(控制反转)                                          │
│     ├── 依赖注入的三种方式                                   │
│     │   ├── 构造器注入                                       │
│     │   ├── Setter 注入                                      │
│     │   └── 注解注入(@Autowired、@Resource)                │
│     │                                                        │
│     ├── Bean 生命周期(背诵!)                               │
│     │   实例化 → 属性填充 → Aware 回调 →                    │
│     │   BeanPostProcessor 前置 → 初始化 →                   │
│     │   BeanPostProcessor 后置 → 使用 → 销毁                 │
│     │                                                        │
│     ├── 循环依赖解决                                         │
│     │   三级缓存:singletonFactories、                       │
│     │   earlySingletonObjects、singletonObjects             │
│     │   仅支持 setter 注入的循环依赖                          │
│     │                                                        │
│     └── Bean 作用域                                           │
│         singleton(默认)、prototype、                        │
│         request、session、global-session                     │
│                                                             │
│     AOP(面向切面)                                          │
│     ├── 应用场景:日志、事务、权限、性能监控                 │
│     ├── 动态代理                                             │
│     │   ├── JDK 动态代理(基于接口,Proxy.newProxyInstance) │
│     │   └── CGLIB(基于继承,ASM 字节码技术)                │
│     ├── 通知类型                                             │
│     │   Before、After、AfterReturning、                      │
│     │   AfterThrowing、Around(功能最强)                    │
│     └── @AspectJ 注解                                        │
│                                                             │
│  ② Spring Boot                                               │
│                                                             │
│     自动装配原理(必考!)                                    │
│     ├── @SpringBootApplication                               │
│     │   ├── @SpringBootConfiguration                         │
│     │   ├── @ComponentScan                                   │
│     │   └── @EnableAutoConfiguration                        │
│     │                                                        │
│     ├── @EnableAutoConfiguration                            │
│     │   └── @Import(AutoConfigurationImportSelector.class)  │
│     │       └── 读取 META-INF/spring.factories               │
│     │           └── 加载所有自动配置类                        │
│     │                                                        │
│     └── 按需装配:@ConditionalOnClass 等条件注解             │
│                                                             │
│     Starter 机制                                             │
│     ├── spring-boot-starter-web                             │
│     ├── spring-boot-starter-data-jpa                        │
│     └── 自定义 starter                                       │
│                                                             │
│  ③ Spring MVC                                                │
│                                                             │
│     请求处理流程                                              │
│     请求 → DispatcherServlet → HandlerMapping →             │
│     Controller → ModelAndView → ViewResolver → 视图          │
│                                                             │
│     常用注解                                                  │
│     @Controller、@RestController、@RequestMapping、         │
│     @GetMapping、@PostMapping、@RequestBody、               │
│     @ResponseBody、@PathVariable、@RequestParam             │
│                                                             │
│  ④ Spring Transaction                                        │
│                                                             │
│     事务传播行为(7 种)                                       │
│     ├── REQUIRED(默认):有则加入,无则新建                 │
│     ├── REQUIRES_NEW:挂起当前,新建事务                     │
│     ├── SUPPORTS:有则加入,无则以非事务运行                 │
│     ├── NOT_SUPPORTED:以非事务运行,挂起当前                │
│     ├── MANDATORY:必须有,否则抛异常                        │
│     ├── NEVER:必须没有,否则抛异常                          │
│     └── NESTED:嵌套事务                                     │
│                                                             │
│     事务失效场景                                              │
│     ├── 方法非 public                                        │
│     ├── 自调用(this 调用)                                  │
│     ├── 异常被 try-catch 吃掉                                │
│     ├── 数据库引擎不支持(如 MyISAM)                        │
│     └── 回滚异常类型不匹配                                   │
│                                                             │
│  ⑤ MyBatis                                                   │
│                                                             │
│     #{} vs ${}                                               │
│     ├── #{}:预编译,防止 SQL 注入                            │
│     └── ${}:字符串替换,有注入风险                          │
│                                                             │
│     一级缓存 & 二级缓存                                       │
│     ├── 一级:SqlSession 级别(默认开启)                    │
│     └── 二级:Mapper 级别(需配置开启)                       │
│                                                             │
│     插件机制                                                 │
│     └── 拦截四大对象:Executor、StatementHandler、           │
│         ParameterHandler、ResultSetHandler                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

🔹 知识串 5:MySQL 数据库

┌─────────────────────────────────────────────────────────────┐
│                   MySQL 知识体系                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ① 索引(超高频!)                                          │
│                                                             │
│     数据结构                                                  │
│     ├── B+ 树(主流)                                         │
│     │   ├── 非叶子节点只存索引                              │
│     │   ├── 叶子节点存数据,有序链表连接                     │
│     │   └── 适合范围查询                                     │
│     ├── B 树                                                 │
│     │   └── 每个节点都存数据                                 │
│     ├── Hash(等值查询快,不支持范围)                       │
│     └── R-Tree(空间索引)                                   │
│                                                             │
│     索引分类                                                  │
│     ├── 聚簇索引(主键索引,数据物理存储)                   │
│     ├── 非聚簇索引(二级索引,叶子节点存主键)               │
│     ├── 联合索引(覆盖索引、最左前缀原则)                   │
│     └── 全文索引                                             │
│                                                             │
│     最左前缀原则                                              │
│     联合索引 (a,b,c):                                       │
│     ✓ a=1 AND b=2 AND c=3   走索引                          │
│     ✓ a=1 AND b=2           走索引                          │
│     ✓ a=1                   走索引                          │
│     ✗ b=2 AND c=3           不走索引                        │
│     ✗ c=3                   不走索引                        │
│                                                             │
│     索引失效场景                                              │
│     ├── LIKE '%xxx'(前缀模糊)                             │
│     ├── 索引列上计算或函数操作                               │
│     ├── 类型隐式转换(字符串不加引号)                       │
│     ├── OR 连接,一边没索引                                  │
│     └── 违反最左前缀                                         │
│                                                             │
│  ② 事务与锁                                                  │
│                                                             │
│     ACID 特性                                                 │
│     ├── 原子性(Atomicity)- undo log 保证                  │
│     ├── 一致性(Consistency)                               │
│     ├── 隔离性(Isolation)- MVCC + 锁保证                  │
│     └── 持久性(Durability)- redo log 保证                 │
│                                                             │
│     隔离级别(4 种)                                          │
│     ├── READ UNCOMMITTED(读未提交)- 脏读                  │
│     ├── READ COMMITTED(读已提交)- Oracle 默认              │
│     ├── REPEATABLE READ(可重复读)- MySQL 默认,MVCC        │
│     └── SERIALIZABLE(串行化)                              │
│                                                             │
│     MVCC(多版本并发控制)                                    │
│     ├── ReadView(可见性视图)                               │
│     ├── 隐藏字段:DB_TRX_ID、DB_ROLL_PTR                    │
│     └── RC 每次 select 生成 ReadView,RR 首次 select 生成      │
│                                                             │
│     锁分类                                                    │
│     ├── 粒度:全局锁、表锁、行锁(记录锁、间隙锁、临键锁)   │
│     ├── 类型:共享锁(S)、排他锁(X)                       │
│     └── 意向锁:IS(意向共享)、IX(意向排他)               │
│                                                             │
│  ③ SQL 优化                                                   │
│                                                             │
│     EXPLAIN 关键字段                                          │
│     ├── type:system > const > eq_ref > ref > range > index > ALL
│     ├── key:实际使用的索引                                  │
│     ├── rows:扫描行数(越少越好)                           │
│     └── Extra:Using filesort(需优化)、Using temporary    │
│                                                             │
│     优化技巧                                                  │
│     ├── SELECT 只取需要的列,避免 SELECT *                  │
│     ├── 小表驱动大表(EXISTS 优于 IN)                        │
│     ├── 避免 WHERE 子句 NULL 值判断                          │
│     ├── UNION ALL 替代 UNION(不去重更快)                   │
│     └── 适当使用覆盖索引                                     │
│                                                             │
│  ④ 日志系统                                                  │
│                                                             │
│     redo log(重做日志)                                      │
│     ├── InnoDB 特有,记录"什么数据被修改"                     │
│     ├── 循环写入,固定大小                                   │
│     └── 崩溃恢复保证持久性                                   │
│                                                             │
│     undo log(回滚日志)                                      │
│     ├── 记录"相反操作",用于回滚和 MVCC                       │
│     └── 事务提交后可清理                                     │
│                                                             │
│     binlog(二进制日志)                                      │
│     ├── Server 层,所有引擎可用                              │
│     ├── 追加写入,用于主从复制和数据恢复                     │
│     └── 两种格式:STATEMENT、ROW                           │
│                                                             │
│     两阶段提交                                                │
│     Prepare 阶段 → 写 redo log → binlog → Commit 阶段        │
│     (保证 redo log 和 binlog 一致性)                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

🔹 知识串 6:Redis 缓存

┌─────────────────────────────────────────────────────────────┐
│                    Redis 知识体系                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ① 数据结构(5 种基础 + 3 种高级)                            │
│                                                             │
│     String(字符串)                                         │
│     ├── 二进制安全,最大 512MB                               │
│     ├── 应用:缓存、计数器、分布式锁                         │
│     └── 命令:SET/GET/INCR/DECR/MSET/MGET                   │
│                                                             │
│     List(列表)                                             │
│     ├── 双向链表实现                                         │
│     ├── 应用:消息队列、最新列表                             │
│     └── 命令:LPUSH/RPOP/BRPOP                              │
│                                                             │
│     Hash(哈希)                                             │
│     ├── 键值对集合,适合存储对象                             │
│     └── 命令:HSET/HGET/HGETALL/HDEL                        │
│                                                             │
│     Set(集合)                                              │
│     ├── 无序去重集合,支持交集并集差集                       │
│     └── 应用:标签、好友关系                                 │
│                                                             │
│     ZSet(有序集合)                                         │
│     ├── 带分数的 Set,按分数排序                             │
│     ├── 跳表实现                                             │
│     └── 应用:排行榜                                         │
│                                                             │
│     Bitmap(位图)                                           │
│     ├── 按 bit 操作,节省空间                                │
│     └── 应用:签到统计、在线状态                             │
│                                                             │
│     HyperLogLog(基数统计)                                  │
│     ├── 固定 12KB,允许 0.81% 误差                            │
│     └── 应用:UV 统计                                         │
│                                                             │
│     Geo(地理位置)                                          │
│     └── 应用:附近的人、距离计算                             │
│                                                             │
│  ② 持久化                                                    │
│                                                             │
│     RDB(快照)                                              │
│     ├── fork 子进程,copy-on-write                           │
│     ├── 优点:文件紧凑、恢复快                               │
│     └── 缺点:可能丢失最后一次快照后的数据                   │
│                                                             │
│     AOF(追加日志)                                          │
│     ├── 记录每条写命令                                       │
│     ├── fsync 策略:always/everysec/no                      │
│     ├── 优点:数据更安全                                     │
│     └── 缺点:文件大、恢复慢                                 │
│                                                             │
│     混合持久化(Redis 4.0+)                                  │
│     └── RDB 快照 + AOF 增量                                   │
│                                                             │
│  ③ 高可用架构                                                │
│                                                             │
│     主从复制                                                  │
│     ├── 全量复制:RDB 传输                                   │
│     ├── 增量复制:replication buffer                         │
│     └── 读写分离:主写从读                                   │
│                                                             │
│     哨兵模式(Sentinel)                                     │
│     ├── 监控、选主、故障转移                                 │
│     └── 主观下线 → 客观下线 → 投票 → 选主                   │
│                                                             │
│     Redis Cluster(集群)                                    │
│     ├── 去中心化,16384 个槽                                 │
│     ├── 客户端直连真实节点                                   │
│     └── MOVED 重定向、ASK 迁移                                │
│                                                             │
│  ④ 缓存三兄弟(必考!)                                       │
│                                                             │
│     缓存穿透                                                  │
│     ├── 问题:查询不存在的数据,直接打穿到 DB                │
│     └── 解决:布隆过滤器、缓存空值                          │
│                                                             │
│     缓存击穿                                                  │
│     ├── 问题:热点 key 过期,大量请求瞬间打到 DB             │
│     └── 解决:互斥锁、逻辑过期                              │
│                                                             │
│     缓存雪崩                                                  │
│     ├── 问题:大量 key 同时过期,DB 压力激增                  │
│     └── 解决:随机过期时间、限流降级                         │
│                                                             │
│  ⑤ 内存淘汰策略                                              │
│                                                             │
│     noeviction:不淘汰,写满报错                             │
│     allkeys-lru:所有 key 用 LRU 淘汰(推荐)                 │
│     volatile-lru:设置了过期时间的用 LRU                    │
│     allkeys-random:随机淘汰                                │
│     volatile-ttl:按剩余 TTL 淘汰                            │
│     volatile-random:过期 key 中随机                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

🔹 知识串 7:分布式与微服务

┌─────────────────────────────────────────────────────────────┐
│                分布式与微服务知识体系                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ① CAP 与 BASE                                               │
│                                                             │
│     CAP 定理                                                  │
│     ├── Consistency(强一致性)                              │
│     ├── Availability(高可用性)                             │
│     └── Partition tolerance(分区容错性)                    │
│     └── 三者最多取其二(CP 或 AP)                           │
│                                                             │
│     BASE 理论                                                 │
│     ├── Basically Available(基本可用)                      │
│     ├── Soft state(软状态)                                 │
│     └── Eventually consistent(最终一致)                    │
│                                                             │
│  ② 分布式 ID                                                 │
│                                                             │
│     UUID                                                      │
│     ├── 优点:本地生成,性能好                               │
│     └── 缺点:无序,不适合主键                               │
│                                                             │
│     雪花算法(Snowflake)                                    │
│     ├── 64bit:符号位 (1) + 时间戳 (41) + 机器 ID(10) + 序列号 (12)
│     └── 优点:有序、高效                                     │
│                                                             │
│     号段模式                                                  │
│     └── 数据库批量获取 ID 段                                  │
│                                                             │
│  ③ 分布式锁                                                  │
│                                                             │
│     Redis 实现                                                │
│     ├── SETNX key value(原子操作)                          │
│     ├── 加过期时间防死锁                                     │
│     ├── Redlock 多锁方案                                     │
│     └── Watch Dog 自动续期(Redisson)                       │
│                                                             │
│     ZooKeeper 实现                                           │
│     ├── 创建临时有序节点                                     │
│     └── 监听前一个节点                                        │
│                                                             │
│     数据库实现                                                │
│     └── 唯一索引乐观锁                                        │
│                                                             │
│  ④ 分布式事务                                                │
│                                                             │
│     2PC(两阶段提交)                                        │
│     ├── 准备阶段 → 提交/回滚阶段                             │
│     └── 缺点:同步阻塞、单点故障                             │
│                                                             │
│     TCC(Try-Confirm-Cancel)                               │
│     ├── 业务层实现三个接口                                   │
│     └── 优点:性能较好,缺点:代码侵入                       │
│                                                             │
│     本地消息表                                                │
│     ├── 消息与业务在同一本地事务                             │
│     └── 定时任务轮询发送                                     │
│                                                             │
│     RocketMQ 事务消息                                        │
│     ├── 半消息 → 执行本地事务 → 确认                        │
│     └── 回查机制兜底                                         │
│                                                             │
│     Seata                                                     │
│     ├── AT 模式(基于 2PC 改进)                             │
│     ├── TCC 模式                                             │
│     └── Saga 模式(长事务)                                  │
│                                                             │
│  ⑤ Spring Cloud 组件                                         │
│                                                             │
│     服务注册与发现                                            │
│     ├── Eureka(已停更,AP)                                 │
│     ├── Nacos(阿里,支持 CP/AP 切换)                        │
│     └── Consul(HashiCorp,CP)                              │
│                                                             │
│     负载均衡                                                  │
│     ├── Ribbon(客户端)                                     │
│     └── LoadBalancer                                         │
│                                                             │
│     服务调用                                                  │
│     ├── OpenFeign(声明式 HTTP 客户端)                      │
│     └── Dubbo(RPC 框架)                                    │
│                                                             │
│     熔断降级                                                  │
│     ├── Hystrix(已停更)                                    │
│     ├── Sentinel(阿里,功能更强)                           │
│     └── Resilience4j                                         │
│                                                             │
│     网关                                                      │
│     ├── Zuul(一代,阻塞 IO)                                │
│     └── Gateway(二代,WebFlux 异步)                        │
│                                                             │
│     配置中心                                                  │
│     ├── Spring Cloud Config                                 │
│     └── Nacos Config                                         │
│                                                             │
│  ⑥ 消息队列(MQ)                                            │
│                                                             │
│     应用场景                                                  │
│     ├── 异步解耦                                             │
│     ├── 流量削峰                                             │
│     └── 延迟队列                                             │
│                                                             │
│     Kafka                                                    │
│     ├── 高吞吐,日志持久化                                   │
│     └── 应用:大数据、日志采集                               │
│                                                             │
│     RabbitMQ                                                 │
│     ├── AMQP 协议,可靠性高                                  │
│     └── 应用:订单、支付                                     │
│                                                             │
│     RocketMQ                                                 │
│     ├── 阿里开源,支持事务消息                               │
│     └── 应用:电商交易                                       │
│                                                             │
│     消息可靠性                                                │
│     ├── 生产者确认(confirm/callback)                       │
│     ├── 消费者 ack 机制                                       │
│     └── 死信队列 + 重试机制                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

📌 三、面试答题模板:三层递进法

模板结构

第一层:是什么(What)
- 一句话定义概念

第二层:怎么用(How)
- 基本用法/API
- 典型应用场景

第三层:为什么(Why)
- 底层原理
- 与其他技术对比
- 扩展思考

实战示例

例 1:请说说 volatile 关键字

【第一层 - 是什么】
volatile 是 Java 中的轻量级同步关键字,用于保证变量的
可见性和有序性,但不保证原子性。

【第二层 - 怎么用】
典型用法有两个:
1. 状态标记:private volatile boolean running;
2. 双重检查锁(DCL)单例模式

【第三层 - 为什么】
原理层面:
- 可见性:通过 Lock 前缀指令,强制将修改立即写回主内存
- 有序性:通过内存屏障禁止指令重排
- 不保证原子性:++操作仍是三步(读 - 改 - 写)

对比延伸:
- 相比 synchronized,volatile 更轻量但功能有限
- 原子性需求可用 AtomicXXX 类(基于 CAS)

例 2:请讲讲 Spring 事务

【第一层 - 是什么】
Spring 事务是基于 AOP 实现的声明式事务管理,
通过@Transactional 注解简化开发。

【第二层 - 怎么用】
使用方式:
1. 开启事务:@EnableTransactionManagement
2. 标注方法:@Transactional
3. 常用属性:propagation、isolation、rollbackFor

典型场景:
- 转账操作:多步数据库操作需要原子性
- 批量插入:要么全成功要么全失败

【第三层 - 为什么】
原理层面:
- AOP 拦截:BeanPostProcessor 生成代理对象
- 事务管理器:PlatformTransactionManager 抽象
- 绑定机制:ThreadLocal 绑定 Connection

失效场景(加分项):
1. 方法非 public
2. 同类自调用(this.xxx())
3. 异常被 try-catch 吃掉
4. 数据库引擎不支持(MyISAM)

传播机制(7 种):
- REQUIRED(默认):有则加入,无则新建
- REQUIRES_NEW:挂起当前,新建事务
- ...

📌 四、记忆技巧

1. 数字归纳法

数字知识点
3三大特性(原子、可见、有序)
44 种引用类型、4 种隔离级别
55 种基础数据结构、5 种状态
6HashMap 扩容 2 次幂、6 种锁
7线程池 7 参数、事务 7 传播
8JDK8 新特性、方法区 Metaspace

2. 对比记忆法

对比项ArrayListLinkedList
底层结构数组双向链表
随机访问O(1)O(n)
插入删除O(n)O(1)
适用场景读多写少写多读少

3. 流程图记忆

HashMap put 流程:
计算 hash → 定位桶位置 → 桶空?创建 Node
    ↓ 桶不空
覆盖 or 链表追加
    ↓ 链表长度≥8
树化(数组长度≥64)or 扩容
    ↓ 达到阈值
扩容 → rehash → 迁移

📌 五、复习优先级

优先级模块核心考点建议时长
⭐⭐⭐集合HashMap、ConcurrentHashMap2 天
⭐⭐⭐并发线程池、锁、AQS、volatile4 天
⭐⭐⭐JVM内存模型、GC、类加载3 天
⭐⭐⭐SpringIOC、AOP、事务、Boot 自动装配4 天
⭐⭐MySQL索引、事务、锁、SQL 优化3 天
⭐⭐Redis数据结构、持久化、缓存问题2 天
⭐微服务Spring Cloud、MQ、分布式锁3 天
⭐项目自我介绍、项目难点、技术选型2 天

📌 六、考前速记清单

JVM 必背

  • [ ] 内存区域划分(堆、栈、方法区)
  • [ ] GC Roots 有哪些
  • [ ] G1 vs CMS 区别
  • [ ] 双亲委派模型

并发必背

  • [ ] volatile 三大特性
  • [ ] 线程池 7 参数 + 工作流程
  • [ ] synchronized 锁升级过程
  • [ ] AQS 核心思想

Spring 必背

  • [ ] Bean 生命周期
  • [ ] 循环依赖如何解决
  • [ ] 自动装配原理
  • [ ] 事务失效场景

MySQL 必背

  • [ ] B+ 树特点
  • [ ] 最左前缀原则
  • [ ] MVCC 原理
  • [ ] redo vs undo vs binlog

Redis 必背

  • [ ] 5 种基础数据结构
  • [ ] RDB vs AOF
  • [ ] 缓存穿透/击穿/雪崩
  • [ ] 持久化机制

最后提醒:面试不是背书,理解 + 实践才是王道。 每个知识点都要问自己:是什么?怎么用?为什么?

祝面试顺利!🎉

更新于:

note