核心技巧!如何应对面试笔试环节中的算法题?
本文始发于公众号: Coder梁,欢迎关注
大家好,最近快到校招季了,今天和大家聊聊招聘环节当中很多人头疼的做题环节。
很多人以为做题只会在笔试题当中出现,其实不然,不仅笔试,面试的时候同样会遇到。面试官当场给你出一道题然后在你一个链接,打开是一个编辑器,让你在编辑器当中现场写出解法的代码来。不仅你写代码的时候面试官会全程盯着,而且在你写完之后还会现场给你捉bug,给你指出你做法当中有问题的地方。很多人本来面试就紧张,加上题目往往没有准备出乎意料,当场就蒙住了脑子里一片空白。我想很多同学应该都有类似的经历。
今天呢,这篇文章就和大家聊聊这个话题,跟大家分享一下,我们应该如何准备这些做题环节。
出题范围
首先我们第一个要做的就是搞清楚面试和笔试的出题范围,一般来说正规公司尤其是大公司的出题范围往往都是固定的,甚至会有一个对应的题库,即使是不同的面试官也会遇到类似的问题。即使问题不一样,至少方向或者是考察的点都是相通的,因此就和考前需要老师划重点一样,我们在面试和笔试之前也同样需要提前准备。其中最重要的一项就是搞清楚出题范围。
出题范围怎么搞呢?其实很简单,就是借助发达的互联网,我们可以找到很多和企业以及面试相关的信息。
最简单的方法就是去找企业面试或笔试的题库,有同学估计要笑了,这怎么可能会有题库,这些公司是傻么,还会把题目放出来?公司的确不傻,但是耐不住面试的求职者会进行整理啊。而且也有像是牛客网这样的官方机构和企业进行合作,虽然分享了一些内部的笔试或者是面试题,但是这也同样吸引到了更多的求职者,另外学生提前进行了刷题做了准备,有了较好的面试表现,企业也就更容易找到人,要知道国内的公司往往都是非常缺人的,所以他们很乐意做这样的分享。
在我之前的文章当中曾经写过很多字节跳动、拼多多的校招笔试题的题解,相信看过的同学都应该有映像。如果没有看过也没有关系,相关的资料在牛客网当中很多,都是免费的,大家自行获取就是。
牛客网虽好但也不是万能的,你可能又要问了,如果我要面试的企业的题目牛客网没有收入怎么办?
也很好办,可以利用搜索引擎进行搜索。只要是有一定规模的公司,肯定都已经有过不少求职者,保不齐就有一些把面试的一些信息分享在了一些地方。
比如我拿同花顺来举个例子,同花顺是杭州的一家互联网金融公司,相对不是那么有名,在牛客网里就没有收录对应的题目。但是当我谷歌搜索关键词“同花顺 笔试题”之后,很容易就能找到一些关键信息。
多看几个,很容易就能找到一些原题。即使我们在面试或者是笔试的时候不会刚好遇到同样的题目,但至少确定一下考察的范围和题目的难度是完全没有任何问题的。
有同学可能又要问了,如果我要面试的公司规模特别小,网上一点信息也找不到该怎么办?
这种情况也不用慌,既然网上找不到信息,那么我们就按照常规的准备流程准备就行了,也就是LeetCode + 剑指offer的组合。LeetCode前300题刷完或者是把剑指offer啃完,基本上算法类的笔试题都不成问题。因为面试不是炫技,本身就不会考察太难的算法,我面了这么多家公司,基本上难度没有超过LeetCode Hard的。偶尔几次LeetCode Hard难度的问题还是看在我有ACM获奖经历才问的。
熟悉白板编程
说到面试和笔试前的准备,很多人能想到的就只有刷题,刷题固然是必须的,但还有另外一样需要我们好好准备的就是白板编程。
因为面试或者是笔试的时候,考察的并不仅仅是你能不能想出解法把代码写出来,你的代码风格和代码质量同样重要。另外一点是白板编程本身就是一个考验,因为现在IDE的代码补全功能太好用了,很多人离开IDE甚至都不太会编程了。可能不记得main函数的传参,或者是不记得遵守一些规范等等。这些虽然都是小的细节,但在面试的时候就是会影响评价的,所以千万不能放松警惕。
我有一次在面试的时候,候选人虽然把解法写出来了,但是写的代码又臭又长,可读性非常差。更过分的是,他居然连main函数都名字都写错了,写成了mian,既不记得return 0,也不记得using namespace。看得出来他之前做了很充分的准备,但就是因为这些小细节,让我们对他的代码能力有了怀疑,最终没给他通过。
还有一点寻常很多人都不会意识到的就是代码风格,一些大牛在面试和笔试之前都会重温一下谷歌命名规范,就是为了在白板编程的时候不会踩雷。虽然国内的企业对于代码风格的要求没有那么严格,但是漂亮的代码风格一样是很大的加分项。相反,如果是很糟糕的代码风格一样会导致减分。
所以我建议大家也能向大牛学习,能花一点时间熟悉一下正规的代码风格。像是什么用拼音给变量起名的事情就千万不要有了。
思考策略
最后,和大家聊聊我们拿到题目的时候思考的策略。
很多同学由于没有准备以及紧张,拿到题目的瞬间就懵了,完全不知道应该怎么办,大脑也死机了。这样的情况一旦发生, 显然面试也就凉了一半了。
所以第一件要做的事情就是稳住心态,千万不要慌。这个时候的一个技巧是先和面试官确认一下题意,一方面可以确定下一下自己理解的是否正确,以及一些题目的边界条件。另外一方面也可以缓解一下紧张的情绪。
理解了题意之后,我们可以按照先易后难的方式。先把最容易想到的思路分享给面试官,有了最简单的思路之后,再围绕思路的缺陷或者是问题思考解决方法。比如说是复杂度太大了,还是有一些什么问题没有解决。这样你整个解题的过程就严格遵循了分析问题解决问题的思路,即使你最终没能想出解法,你的整个思考路径一样是非常有价值的。
千万不能思维跳跃,所有的地方都推倒完了,然后卡在一个地方一直卡着。也不和面试官沟通,面试官都不知道你只差一点了,还以为你一点头绪都没有。另外,当你实在想不出来的时候也可以跟面试官交流和沟通,找他要一点提示也是可以的。千万不能埋头干想,一定要给出反馈和你思考的过程。某种程度上来说这个思考的过程和你的方法论比你最终的结果要重要得多。
尾声
无论是面试笔试还是白板编程, 虽然都有一些临场技巧,但最重要的其实不是临场的发挥而是前期的准备。我个人感觉前期的准备至少占80%以上,通过充分的准备,我甚至有押中过面试原题的经历。
最后,祝愿大家都能好好准备,拿到心仪的offer。
今天的文章就到这里,感谢大家的阅读,喜欢的话不要忘记三连。