阅读本文大概需要 6 分钟。
作者:黄小斜
文章来源:微信公众号【程序员江湖】
发现一个有趣的现象,网上一些比较热门的文章、博客往往都是“某某公司面试题汇总”、“某某公司面试题解析”,似乎程序员们对面试题总是抱有热情,好像多看了几道面试题,自己的能力就可以很快提高一样。
作为一个研发工程师,看过很多公司的面试题,也参与过很多公司的面试,发现大厂的面试题更加具有代表性,虽然现在很多大厂的面试官也懒得自己出题了,不过经验老到的他们还是更清楚如何高效率地考察面试者。
而小公司的面试题往往五花八门,有的更加贴近公司自身业务,希望面试者结合业务给出解决方案,有的干脆直接从书本上找题目,考察一些死记硬背的概念,当然,有的初创公司逼格很高,则会搞一些高难度的面试题,角度刁钻,常常让面试者猝不及防。
既然大公司的面试题具有共性,那么我们也不妨来尝试探讨一下,大厂面试题到底考察面试者哪些方面的能力。
1、基础知识
基础知识无疑是大厂面试官最喜欢考察的东西了。如果面试者的基础都不扎实,那么建立于基础知识之上的实战能力、业务能力都是空中楼阁。
说到基础知识,首当其冲的就是岗位要求的能力了,比如对于Java工程师,你需要熟悉Java核心技术:反射、多线程、异常处理、集合类、IO流。
作为一个程序员,你还需要掌握计算机网络、操作系统、数据结构与算法,甚至是计算机组成原理(一般很少考察)。
这些都是最基本的,除此之外,作为一个Java Web工程师,你需要熟悉Web框架,比如SpringMVC、SpringBoot,能说出它们的工作原理,特性、优缺点等等。
而作为一个后端工程师,你需要了解MySQL的工作原理、常用命令,了解Redis的常用数据结构、使用方式,了解Java网络编程的基本概念,能够解释NIO和BIO、能够了解JVM,了解GC等等。
面试官考察这些基础知识的方式很简单,找一些相关的面试题一一进行提问,根据你的回答,基本上就可以了解你对这些知识点的掌握程度了。
2、知识深度
也许上面这些问题,你通过背一些面试题,看一些面经,就能掌握得八九不离十了,毕竟面试官提的很多问题也是在网上找到的,所以你可能会放松警惕,觉得这样就足够了。
其实不然,大厂面试官还有一个爱好,就是对于每个知识点,都喜欢深入往下问,问到没有问题可以问,或者问到你不会为止,这样提问的目的只有一个,就是试探你对这个知识点的理解深度,如果你无法提供足够深刻的回答,结果往往就是失败。
举个例子来说,大家都知道JVM的GC,一般来说,常见的GC算法、垃圾回收器也都知道那么几个,但是要说到具体的回收过程,可能很多人的理解还是没有到位。
我们可以这么回答:首先对象先分配到年轻代,下次GC时,活着的对象进入老年代,实际上年轻代还分为Eden和Survivor区,Survivor区又分为From区和To区,From区和To区的对象在每次YGC时都会交换,在Survivor区存活下来的对象的年龄会+1,直到年龄达到进入老年代的阈值,此时Survivor区的对象进入老年代。
就算答案已经这么冗长,其实还可以被拓展,被补充。面试是一个面试官考察你的机会,也是一个你展现自己能力的机会,所以,每次面试都要毫无保留,把你会的东西全部表现出来,结果往往会令人满意。
相比于基础知识,要提高你的知识深度更加需要时间和精力,这就不是一朝一夕的事情了,需要你不断地去积累,这方面的内容读者朋友也可以参考我之前的文章。
3、解决问题的能力
解决问题的能力,这个主题有点宽泛,但是却真的是大厂最喜欢考察的东西。
比如面试官拿出一道你没见过的算法题,往往是很容易让你产生畏难情绪的,如果你放弃思考直接回答不会,那你就输了。
题目可能很难,但是面试官想看到的是你思考的过程,以及解决问题的能力,如果你可以介绍自己的思路,给出一些解决方案,就算题目真的不会写,可能也会给面试官比较正面的影响。i
当然,如果你有很多题都不会,那可能你解决问题的能力也就这样了。
除了算法题,智力题也是一种常见的面试题型,这些题目可能涉及概率论、博弈论,题目本身不会很难,你应该给出你的解题思路和思考过程,面试官一般也会引导你打开思路,这类题目也很能反映一个人解决问题的能力。
如果你有项目经历或者实习经历,那么面试官往往会问你在项目中负责什么,遇到了哪些困难,又是如何解决的,其实也是为了考察你解决问题的能力。
如果你能很清楚地介绍你所做的东西,并且能够告诉面试官自己通过努力解决了项目中的一些难题,一定会让面试官对你刮目相看,当然,前提是你真的做过这些项目,克服过这些困难,简历造假就是搬起石头砸自己的脚。
总结:
说了这么多,其实大厂面试官只不过想要了解面试者的可塑造性,面试题、算法题、压力面试等,都只是一种手段。因为大厂需要的有可持续发展能力的人才,能够为公司和部门长期发展提供更多的可能性。不需要救火队长,也不需要混子。
点个在看,元气满满