Java面试题解构
副标题[/!--empirenews.page--]
有次一个同事让我一同去面试一个候选人,没仔细看简历,所以在问了设计模式之后就让他谈一谈对内存泄漏和垃圾回收的理解,当时候选人一下子就懵了。后来才知道,他面的是初、中级开发职位,想来估计候选人心里也在骂我吧。 我自己用过各式各样的方法面试候选人,也被各式各样的方式面试过。有让拿电脑直接写代码的,有让在白板上写思路、画结构的,或者挨个知识点问问题的。面试,应该是要测试候选人「是否有做好某些事情的能力」,而不应该是「知道某些事情的能力」。虽然这两者往往是相关的,但有很大一部分问题却是对「把事情做好」没有任何帮助的。其中的一类是那些「你不用的时候只是大概知道,需要使用的时候花一分钟就可以搞清楚」的问题,就算你是一个比较好学的开发者,平时会看一些跟工作关系不是那么大的东西,并且可以搞得很清楚,但时间一长,再去问你细节,我想同样会模糊不清,甚至会出错。
面试问题的分类关于会被问到的Java方面的问题,大致可以分为以下几类: 1. Hotspot VM(Runtime、GC、JIT)相关问题这些问题其实属于要了解的东西,对指导编码、问题排查、运行时逻辑的理解都有好处。 但如果非要问你G1、CMS、Serial垃圾回收器各自的实现方法及其不同,除非你面的就是做JVM调优的职位,那你也是倒了霉了,解决方案只能是面试前突击巩固这方面的知识。 2. JDK中特定类的使用问题如果你的工作会用到一些类,可能你会很熟悉,但老实说,还是会有很多类用了很多次,每次都要去源码里看注释的情况…… 有注释为毛要浪费珍贵的脑容量。有病 3. JDK中特定类(或操作符、关键字)的实现问题相信很大一部分(有工作经验的)工程师的工作内容是不需要考虑这些问题的,但很多有追求的工程师都很乐意去探索这些问题,比如 但是,那么多类,谁能保证全部记得很清楚,如果有,一定是来面试前背过了。 4. 其他一些变态的陷阱问题各种乱花渐欲迷人眼的问题,如「重载和重写的区别」「final、finally、finalize的区别」之流,实在无力吐槽。出这些题的人估计是想要考察你的基本功,但又怀着不耐烦的心情,所以挖个坑看你怎么跳。 有种你编程不用搜索引擎啊。
5. 解决实际问题这是真正有价值的问题,可以考察人的思维及解决问题能力的问题。而且不论是业务相关,亦或是技术理论相关的,都可以问出有价值的问题。 如「自己设计一个 6. 与Java无关的问题这种问题通常是为了考察应聘者的性格、人品、知识面、学习能力等,比如「简单描述一下HTTPS的工作流程」、「最近是否有在看书或者哪方面的知识」等。有些有套路,可以抱抱佛脚,通过刷题刷出来。其他的只能自求多福了。 相关问题示例下面是一些从网上看到或者自己被问到过的一些问题,仅供参考。 第一类问题1. 简单描述一下JVM的GCA:随意发挥……可以参考 这是一个典型的比较有开放性的问题,面试者可以从自己了解的方面入手,如分代、运行时内存结构。如果对垃圾回收器比较了解,那更可以侃侃而谈。 如果被问到了比较有针对性的问题,那就看你面试前的课补的好不好了。 2. Java中有哪些多线程同步的手段这个问题也可以延伸出很多知识, 第二类问题1.
|