一个资深面试官的“面试心得”

在公司当技术面试官几年间,从应届生到工做十几年的应聘者都遇到过。先表达一下我本身对面试的观点:java

1.笔试、面试去评价一我的确定是不够准确的,了解一我的最准确的方式就是“路遥知马力,日久见人心”。经过1、二个小时内的作题、交流,只是没有其余办法下进行的无奈之举,因此经过了面试不表明有多成功,没经过也不表明有多失败。 2.好的面试官自己交谈的时候就不该当把本身一个居高临下的角色上,应当把本身和应聘者当作两个作技术的人平等的交流,把本身看成权威每每就会受到观点的角度、语言表达、工做领域的惯性的制约。 3.好的考察题目则是你们能常常接触,不一样层次的人能有不一样层次的答案,能从问题引伸出后面继续讨论的话题。面试

举个例子抛砖引玉,下面这个问题是我之前常问的,从应届生到工做十几年的人都问过: 引用算法

“地球人都知道,Java有个东西叫垃圾收集器,它让建立的对象不须要像c/cpp那样delete、free掉,你能不能谈谈,GC是在何时,对什么东西,作了什么事情?”架构

我本身分析一下这个问题,首先是“何时”,不一样层次的回答从低到高排列:线程

1.系统空闲的时候。 分析:这种回答大约占30%,遇到的话通常我就会准备转向别的话题,譬如算法、譬如SSH看看可否发掘一些他擅长的其余方面。对象

2.系统自身决定,不可预测的时间/调用System.gc()的时候。 分析:这种回答大约占55%,大部分应届生都能回答到这个答案,起码不能算错误是吧,后续应当细分一下究竟是语言表述致使答案太笼统,仍是自己就只有这样一个模糊的认识。内存

3.能说出新生代、老年代结构,能提出minor gc/full gc 分析:到了这个层次,基本上能说对GC运做有概念上的了解,譬如看过《深刻JVM虚拟机》之类的。这部分不足10%。作用域

4.能说明minorgc/full gc的触发条件、OOM的触发条件,下降GC的调优的策略。 分析:列举一些我指望的回答:eden满了minor gc,升到老年代的对象大于老年代剩余空间full gc,或者小于时被HandlePromotionFailure参数强制full gc;gc与非gc时间耗时超过了GCTimeRatio的限制引起OOM,调优诸如经过NewRatio控制新生代老年代比例,经过 MaxTenuringThreshold控制进入老年前生存次数等……能回答道这个阶段就会给我带来比较高的指望了,固然面试的时候正常人都不会记得每 个参数的拼写,我本身写这段话的时候也是翻过手册的。回答道这部分的小于2%。开发

PS:加起来不到100%,是由于有确实少数直接说不知道,或者直接拒绝回答的= =#虚拟机

分析第二个问题:“对什么东西”:

1.不使用的对象。 分析:至关于没有回答,问题就是在问什么对象才是“不使用的对象”。大约占30%。

2.超出做用域的对象/引用计数为空的对象。 分析:这2个回答站了60%,至关高的比例,估计学校教java的时候老师就是这样教的。第一个回答没有解决个人疑问,gc到底怎么判断哪些对象在不在做 用域的?至于引用计数来判断对象是否可收集的,我能够会补充一个下面这个例子让面试者分析一下obj一、obj2是否会被GC掉? class C{ publicObject x; } C obj一、obj2= new C(); obj1.x = obj2; obj2.x = obj1; obj一、obj2= null;

3.从gcroot开始搜索,搜索不到的对象。 分析:根对象查找、标记已经算是不错了,小于5%的人能够回答道这步,估计是引用计数的方式太“深刻民心”了。基本能够获得这个问题所有分数。 PS:有面试者在这个问补充强引用、弱引用、软引用、幻影引用区别等,不是我想问的答案,但能够加分。

4.从root搜索不到,并且通过第一次标记、清理后,仍然没有复活的对象。 分析:我期待的答案。可是的确不多面试者会回答到这一点,因此在我心中回答道第3点我就给所有分数。

最后由一个问题:“作什么事情”,这个问发挥的空间就太大了,不一样年代、不一样收集器的动做很是多。

1.删除不使用的对象,腾出内存空间。 分析:同问题2第一点。40%。

2.补充一些诸如中止其余线程执行、运行finalize等的说明。 分析:起码把问题具体化了一些,若是像答案1那样我很难在回答中找到话题继续展开,大约占40%的人。 补充一点题外话,面试时我最怕遇到的回答就是“这个问题我说不上来,可是遇到的时候我上网搜一下能作出来”。作程序开发确实不是去锻炼茴香豆的“茴”有几 种写法,不死记硬背我赞成,我不会纠语法、单词,可是多少你说个思路呀,要直接回答一个上网搜,我彻底没办法从中获取能够评价应聘者的信息,也很难从回答 中继续发掘话题展开讨论。建议你们尽可能回答引向本身熟悉的,可讨论的领域,展示给面试官最擅长的一面。

3.能说出诸如新生代作的是复制清理、from survivor、to survivor是干啥用的、老年代作的是标记清理、标记清理后碎片要不要整理、复制清理和标记清理有有什么优劣势等。 分析:也是看过《深刻JVM虚拟机》的基本都能回答道这个程度,其实到这个程度我已经比较期待了。一样小于10%。

4.除了3外,还能讲清楚串行、并行(整理/不整理碎片)、CMS等搜集器可做用的年代、特色、优劣势,而且能说明控制/调整收集器选择的方式。 分析:同上面2个问题的第四点。

最后介绍一下本身的背景,在一间不大不小的上市软件公司担任平台架构师,有3年左右的面试官经验,工做主要方向是大规模企业级应用,参与过若干个亿元级的项目的底层架构工做。

相关文章
相关标签/搜索