面试官: 最后问几个基础原理问题,确认一下你的底层知识:

JUC 并发

Q1. ConcurrentHashMap 在 Java 8 中是如何保证线程安全的?

Q2. 它与 synchronized 锁整个 Map 相比优势在哪里?

Q3. putVal 方法大致流程?

JVM 内存

Q1. 老年代发生 Full GC 的触发条件可能有哪些?

A1. 年代空间不足(Promotion Failed)或 Metaspace 溢出。


Q2. 如何从 JVM 参数和代码层面尽量避免频繁 Full GC?

Redis 持久化

Q1. RDB 和 AOF 持久化方式的主要区别是什么?各自的优缺点?

Q2. 如果同时开启,Redis 重启时如何加载数据?

RocketMQ 存储

Q1. RocketMQ 是如何保证消息持久化且能高效读写的?(CommitLog, ConsumeQueue 的设计思想)

MySQL 索引

Q1. 有一个查询 SELECT * FROM orders WHERE user_id = 100 AND status = ‘SHIPPED’ ORDER BY create_time DESC LIMIT 10; 你会在哪些列上建索引?为什么?(考察联合索引、最左前缀、排序、覆盖索引等概念)