网上一些比较热门的文章、博客往往都是“某某公司面试题汇总”、“某某公司面试题解析”,似乎程序员们对面试题总是抱有热情。
小公司的面试题往往五花八门,而大厂的面试题更加具有代表性,那么我们不妨来尝试探讨一下,大厂面试题到底考察面试者哪些方面的能力。
基础知识
不管在哪,参加什么面试,基础知识都是面试官钟爱的东西。基本功不扎实,对于一个研发人员而言,再好的能力也都是纸上谈兵。
不同的岗位对基础知识的细分也不一样,比如对于Java工程师,你需要熟悉Java核心技术:反射、多线程、异常处理、集合类、IO流。作为一个程序员,你还需要掌握计算机网络、操作系统、数据结构与算法等。
而作为一个后端工程师,你需要了解MySQL的工作原理、常用命令,了解Redis的常用数据结构、使用方式,了解Java网络编程的基本概念,能够解释NIO和BIO、能够了解JVM,了解GC等等。
基础知识考察比较简单,一般是面试的第一关,如果基础知识都不能很好的回答,可能会给面试官留下负面印象。
知识深度
关于基础知识,刷一些面试题,多看几个总结,临时抱佛脚可能还管点用,但是这些毕竟只是基础,一旦涉及到深度的问题,可就不好使了。
知识深度,无非就是想知道你的“底”在哪,你对这方面究竟是了解到什么程度。所以很多大厂面试都会追着一个点问,直到问到你不会的,面试官心里就知道你的知识深度在哪里了。
举个例子来说,大家都知道JVM的GC,一般来说,常见的GC算法、垃圾回收器也都知道那么几个,但是要说到具体的回收过程,可能很多人的理解还是没有到位。
我们可以这么回答:首先对象先分配到年轻代,下次GC时,活着的对象进入老年代,实际上年轻代还分为Eden和Survivor区,Survivor区又分为From区和To区,From区和To区的对象在每次YGC时都会交换,在Survivor区存活下来的对象的年龄会+1,直到年龄达到进入老年代的阈值,此时Survivor区的对象进入老年代。
就算答案已经这么冗长,其实还可以被拓展,被补充。面试是一个面试官考察你的机会,也是一个你展现自己能力的机会,所以,每次面试都要毫无保留,把你会的东西全部表现出来,结果往往会令人满意。
相比于基础知识,要提高你的知识深度更加需要时间和精力,这就不是一朝一夕的事情了,需要你不断地去积累才行。
解决问题的能力
解决问题的能力,这个主题有点宽泛,但是却真的是大厂最喜欢考察的东西。
一般来说,面试官都会给你拿出一道算法题,当然很可能是你没有见过的,或者看着不一定能解答出来的,如果直接放弃,那也许就错过了一次机会。
未必都要答出来,回答出你的大概思路,或者要往哪个方向去考虑,这都算“解题”过程,面试官也都会看在眼里,如果大体思路是没错的,面试官心里也会有自己的判断。
除了算法题,智力题也是一种常见的面试题型,这些题目可能涉及概率论、博弈论,题目本身不会很难,你应该给出你的解题思路和思考过程,面试官一般也会引导你打开思路,这类题目也很能反映一个人解决问题的能力。
如果你能很清楚地介绍你所做的东西,并且能够告诉面试官自己通过努力解决了项目中的一些难题,一定会让面试官对你刮目相看,当然前提是你真的做过这些项目,克服过这些困难,简历造假就是搬起石头砸自己的脚了。
总结
面试,不过是想通过一些考题在短时间内了解一个人的业务水平。所以很多时候的临场发挥也尤为重要,因为面试官出的不一定都是你全部都会的,但是怎样在不完全会的时候最大化的展示自己的能力,让面试官看到潜力,就要看临场的心态了。
要准备充分去面试,但也不用战战兢兢,放平心态对待,才更有可能拿到心仪的offer~