对于学生而言,相对而言实际的工作经验或者说工程经验会有些差距,因此就我而言,我主要考察的会是技术基础和技术兴趣这两点,进阶的话我会考察在专业研究方向(通常像硕士、博士都会有专门的研究方向)上达到的高度。
技术基础
技术基础要考察的具体的知识点,我在面试前会通过读学生的简历(所以简历非常重要)来决定,一般来说就是就所做过的项目,读过的书来决定要问的知识点,举几个例子来说明下。
例子一
简历里写了写过一些多线程的程序,或者是看过一些并发领域的书,这种情况下通常我会问多线程中的一些更具体的知识点:线程池实现的细节、降低高并发程序锁竞争的方法等;
例子二
简历里写了写过一些网络通信程序,这种情况下通常我会问Blocking-IO,NonBlocking-IO、AIO的不同;连接池、短连接、长连接、连接复用的不同;C10K的难度等;
例子三
简历里写了做过一些Java Web应用的开发,这种情况下通常我会问在这个Java Web应用中用到的框架的知识点,例如Spring的话IoC,AOP的实现原理是什么,或者实在不知道的话可以考虑如果自己要做的话怎么实现等;
例子四
简历里写了对JVM有学习,或者通过JVM参数调优Java程序,这种情况下通常我会问学习的JVM点:JIT、GC、参数的具体作用和对应的背后的原理等;
在上面这些技术基础的知识点的考察中,会设计问的问题逐步越来越深,试探学生在这个知识点上掌握到到了什么程度。
专业研究方向
硕士、博士都会有专门的研究方向,我通常会问研究的方向是什么,涉及到的知识点,研究的方向在业界目前的一些东西的状况等,例如研究方向是弹性资源调度,我会问Mesos、Borg这些事怎么做的;
前面两部分都过关后,我会开始考察技术兴趣。
技术兴趣
技术兴趣这个看起来好像很难考察,但我觉得其实是可以体现出来的,例如前面技术基础中考察的用到的东西的背后的知识点,在这个点上我通常还会问其他几个问题。
对项目中用到的东西背后的知识点在项目后一直继续研究的知识点?
有做过什么非项目/非老师授命的技术的东西,为什么做?
有过不吃饭、通宵做过的什么事情的经历,是什么事?(我始终认为一个对技术极度有兴趣的人,一定都会有不吃饭或通宵写代码的经历)
总结
对于我而言,技术兴趣会是我要求的学生的基本点,没有兴趣的话基本上我不会招,不过这点其实是相辅相成的,没有兴趣还能把技术基础做到非常好的人其实很少;在技术兴趣的基础上,技术基础扎实的话基本上就可以招了,在某个专业点上做到了广阔的视野,较深的研究的话我基本上就会列为努力吸引招进来的人才,如果还刚好是对口的专业点,那就要列为必须努力吸引招进来的人才。
从经历的面试来看,很多学生都会在技术基础这点考察上闯关失败,这里我认为多数是因为对技术的兴趣导致,另外一个原因是学习方法,在如今这么发达的信息传播和分享时代,我认为只要擅长用Google,基本就可以学的还不错,还有就是多写代码练手,很多学生会认为没有实际的场景,没法练,这个其实还是取决于自己,例如想学习写通信程序的,完全可以自己写一个,然后压测,同时对比业界一些成熟的开源的,进而翻代码去学习为什么自己写的不如开源的,又例如想学习写高并发程序,也可以自己写,不断的增加复杂度,做压力测试来不断优化提升自己写的程序的并发能力。