三面被问到JVM ZGC和MySQL索引合并盲区的反思面经

某中大厂 · 后端开发工程师 · 三面 · 2026-07

《面试题目》

  1. ZGC(Z Garbage Collector)的底层原理和细节是什么?
  2. MySQL 的索引合并(Index Merge)是什么,和最左前缀原则是什么关系? 3.(软技能)面对完全不了解的八股问题,应该如何应对?

《参考解析》

  1. ZGC 原理:ZGC 是一款以低延迟为目标的垃圾回收器,STW(Stop-The-World)时间通常在毫秒级,且不随堆大小增长而显著增加。它通过**染色指针(Colored Pointer)在指针的高位存储对象的分代/标记信息,配合读屏障(Load Barrier)**在应用线程访问对象引用时协助完成并发标记和并发转移(Relocation),从而把绝大部分标记、转移、重映射工作都放到与业务线程并发执行的阶段,只在极短的窗口内暂停。这与 CMS(基于”标记-清除”、存在较长的并发标记/重新标记 STW,且有内存碎片问题)在实现机制上完全不同,不能混为一谈。
  2. 索引合并 vs 最左前缀:这是两个不同维度的概念。最左前缀原则针对的是单个联合索引内部——查询条件必须从联合索引的最左列开始连续匹配,索引才能生效。索引合并(Index Merge)针对的是多个独立的单列索引之间——当 WHERE 条件涉及多个可单独走索引的列时,MySQL 优化器可以分别用每个索引检索出结果集,再对结果集做交集(intersection,对应多个 AND 条件)、并集(union,对应多个 OR 条件)或排序合并(sort-union)后返回,避免退化成全表扫描。可以通过 EXPLAINExtra 字段看到 Using intersect/union(...) 来确认是否命中了索引合并。
  3. 面对知识盲区更稳妥的做法:不确定时不要用相近但不同的概念生搬硬套(如把 CMS 的机制往 ZGC 上套),这类”自圆其说”很容易被追问戳穿,反而显得基础不牢。更好的方式是坦诚说明掌握程度,同时给出自己的合理猜测并请教,比如”这个底层细节我确实没深入研究过,但我猜测可能是因为……,您能指点一下吗”,把对抗姿态转成请教姿态。面试官更看重是否具备快速学习和诚实自省的潜力,而不是能否把每个八股细节都背全。