大厂面试是否查个水落石出
首先,介绍你自己
一般来说,大厂面试的第一步是自我介绍,面试官会让你简单介绍一下自己。
没有大厂面试经验的同学可能会被拦下来,然后对简历上写的东西结巴。这当然是错误的,因为面试官在给你打电话或者面试你之前肯定会看你的简历,所以只是重复简历的内容是完全没有意义的。
这个问题不是考试,也没有标准答案,所以只能以我个人的理解告诉你一个比较好的答案。
这个自我介绍其实可以理解为整个面试的基调。你需要表现出你的一些特点,尤其是那些不方便写或者简历中难以描述的特点。比如,你可以在简历中写很多项目经历和学术背景,但一般来说,你不会吹嘘自己的学习能力或毅力有多强。但是你可以介绍一下自己,然后结合这些特点在简历中简单提一些条目或者经历,就像写议论文一样,有论点,有论据。
比如我去面试,我会说我是一个学习能力很强的人,懂一点工程和算法。刚毕业的时候,误做了一年的后端开发。后来通过自学转到了算法。之后如何介绍项目和成果,展示自己的能力。有一定的叙述性,而不是干巴巴、直截了当的叙述性,会好很多。
我建议大家可以在面试前在一张纸上写一个简单的草稿,注意不要太长,最好是一分钟左右。
二、白板编程
一般自我介绍环节后面是白板编程环节,会让你在白板或者记事本上做一道算法题。
一般来说,面试过程中不会出现特别难的编程题。除非是FLAG这样的北美大公司,国内公司一般不会太难提问。我来列举一下我个人在白板编程中遇到的话题,一个是裸归并排序,一个是最长非降序子序列,一个是LRU。一般来说,最难的是最长的非下降子序列,几乎等同于LeetCode Hard+。
除了白板编程,还有一些算法问题,就是你不需要写代码,只需要给出思路。其中有一些比较难的问题,比如汉诺塔的变种和KMP原理的解释,还有一些比较简单的概率计算和动态规划问题。
对于非acmer来说并不容易,但是这些问题因为我有acm经验所以被面试官特意做得更难。普通面试应该会轻松一些。所以总的来说,LeetCode Medium能稳定做出的水平差不多就够了。
当然这个环节只是出题目,不是最重要的。代码风格和规范同样重要。比如用英文和驼峰命名,不要用拼音或者aa、bb之类的变量名。另外,白板编程因为没有IDE提示,难免会出现一些bug或者格式错误,但是要尽量避免。这些也是需要提前准备的,否则写在一块白板上的各种bug显然会扣很多分。
三、基本调查
三是基础考察,一般考察一些关于机器学习或者深度学习的基础内容。这个不同的面试官风格,提问和要求都不一样,这是因人而异的很大一部分。
一般来说,主要介绍模型的原理,如决策树、随机森林或SVM。让你详细介绍一下模型的原理。或者是考察几个机器学习的细节中的一些问题,比如AUC曲线是什么,它的横坐标和纵坐标分别是什么。AUC小于0.5意味着什么?再比如是什么导致了梯度爆炸,如何才能避免或者解决梯度爆炸的问题。
这部分有两个度量。第一招,提前做好充分准备,面试前好好复习机器学习和深度学习的基础内容,以查漏补缺。另一种是收集面书,看看面试时别人遇到了什么样的问题。一般来说,大厂都有一些面试题库。不同的面试官可能会从不同的角度提问,但摸底调查的逻辑可能是相似的。
第四,软实力检验
这一块是对软实力的检验。一般来说,工厂无论大小,都有这个流程,只是有些企业是显性检验,有些是隐性检验。
根据我的理解,在这个环节中,我们主要考察几个方面。一个是你的管理成本。说白了就是不听话,是个容易服从管理的人,还是个性很强,容易挑事的“刺头”。一般来说,你只需要在面试的时候谦虚一点,不要太骄傲,不会引起面试官对此的怀疑。
第二点是你的沟通能力,你是不是一个容易沟通的人。这反映在你的理解能力和表达能力上。你能听懂面试官在说什么吗,是指出你的想法还是回答一些问题?那么,能不能把自己的想法表达清楚,让对方明白?这个挺重要的,因为没有人愿意招一个很难沟通的人,和很难沟通的人打交道很累。
第三点是你的抗压能力。当面试官一层一层的问你细节的时候,你能顶住压力,稳住心态吗?有时候面试官故意分层次提问,不仅是考察你对问题的理解,也是看你的抗压能力。有的人面对质疑心态的崩溃,有明显的抵触和不耐烦,明显会扣分。
最后一点是潜力,有点玄学。很难有一个直观的评价标准,往往是面试官的主观判断。总的来说就是考察你的工作经验和你现在的实力。如果你能表现出比同期其他人领先很多,说明你潜力大,学习能力强。如果你的表现没有同期那么好,那么看起来你的潜力比较低,要么你不努力,要么你资历低,努力也学不会。