Skip to content

Latest commit

 

History

History

gc

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

GC (垃圾回收)

GC 的考察点

GC 在特定的语言里面,是一个极其重要的面试知识点,比如说 Golang 和 Java。

GC 的面试,主要是从三个维度进行考察:

  1. GC 的算法:例如引用计数,标记清扫,标记整理等,纯粹从算法的层面考察大家;
  2. GC 的实现:例如 JVM 中 HotSpot 实现的 CMS,G1等,重点考察这些实现的具体步骤,部分情况下会涉及细节;
  3. 实践:集中在,DEBUG 和调优。DEBUG是指,实践中是否遇到多 GC 相关的问题,如果遇到了,怎么解决的;调优则是发现实际中的 GC 的效果不理想,如何优化的问题;

因此 GC 要如何复习,才能面试顺利呢?

  1. 背熟算法;
  2. 背熟具体实现的步骤,部分重点实现要深挖细节。要熟记影响这些实现的参数,同时可以结合自己公司内部配置来记忆参数和理解;
  3. 准备案例,包括各种奇诡问题,优化案例。这里要注意的是,如果你亲自遇到过,那么就用你亲自遇到过,如果没有,用你同事遇到的问题;依旧没有,就用公司出过的问题;完全没遇到,就准备网上的案例;

那么常见的面试失误在哪里呢?

  1. 算法和实现不能区分清楚;
  2. 并行和并发不能区分清楚;
  3. 实现之间混淆;
  4. 遗漏了不同实现的参数配置及其影响;
  5. 未提前准备好各种案例;

那怎么样才能在 GC 面试里面刷出来亮点?—— 与众不同

  1. 别人不知道的,我知道;
  2. 别人知道的,我知道更多细节;
  3. 结合实际
  4. 结合内存分配器
  5. 横向比较

前两条很好理解,后一条如何理解呢?要知道,面试官面 GC,不管是面算法,面实现还是面调优,他就是想确认你能不能解决 GC 的问题。所以结合实际能够让他知道,你确实是知道如何解决 GC 问题的。

第四点则是一个盲点。就是大部分的人只关注过GC,但是没有关注过不同垃圾回收器,其内存是如何被分配的。比如说 CMS 采用了空闲链表法来管理空闲内存,就是一个很有特色的点。