面了200+的面试官告诉你面试不是只有刷题这么简单

欢迎大家点击左下角“阅读原文”到原帖与作者交流讨论哦!
听到很多人说, 自己刷题500+, 面试的时候明明做出来了, 还做的很好, 但是就是没有Offer, 百思不得其解。今天就跟大家聊聊,除了刷题, 你在算法面试中还需要做的事情。有些人说, 除了把题目做出来, 其他的部分看运气, 看面试官看你爽不爽。其实不然, 面试官对你的印象, 其实跟你的颜值没什么关系, 而在于你在面试过程中, 对于细节的主动。 你能给到面试官最好的体验, 把他想得到的信息, 很主动的表达了, 面试官才会觉得跟你工作起来很爽, 自然加分不少。
咱们下面就按照时间轴来叙述
面试官给你题目
首先你要知道, 面试官给你题目, 不会像leetcode一样, 整个function header都给你写好, 就等你填空的。 我们一般都是故意只给你描述一个问题, 然后来看你的发挥。所以这个时候, 如果你直接埋头写代码的话, 哪怕你很快写出来也会挂掉。毕竟公司要招的不是写代码的机器。只会写代码, 不会沟通, 招进来是很危险的, 还不如找个资质稍微差一点儿的慢慢培养。
应对之道
所以这个时候该怎么办呢?答案自然是问问题。比如你可以问清楚, 参数, 返回值的要求等等。
当然这个时候, 也不是随便乱问的, 你要是问一些已经告诉你了的问题, 面试官会想, 我刚刚不是说的很清楚了么?你怎么还问, 你这人沟通有问题。那么怎么来问呢?
给大家一个小的技巧, 如果真的就没完全明白面试官的描述, 又不能直接说请你再讲一遍, 就用总结型问法。就是把刚刚面试官说的题目, 跟你你自己的理解, 总结一下, 告诉面试官。 这个时候如果再带2个例子, 一个正常的, 一个corner case的, 也是会大大的加分。而且不仅仅是加分, 你把例子带进去, 还可以帮助你在分析题目的时候, 更加清晰。
分析和解决问题
弄清楚题目以后, 咱们就要开始解题了。建议这一步, 如果不是那种特别特别简单的题目, 建议举个例子, 并且给面试官用例子解释。原因是, 很多同胞的英文确实不怎么样, 用例子去解释, 可以显得你解释的更清楚。另一个是, 有的时候, 你不用例子去解释, 很有可能有些很关键的问题你都没想通, 就去写code, 到时候, 写code写到一半, 忽然迷茫了, 那个时候, 面试官的提示不一定救得了你。就算捞你上岸, 也耽误了大把时间。第三, 如果你举了正常的例子, 和一个corner case, 有的时候, 可以起到抛砖引玉的效果, 面试官可能在这个时候, 就把最刁钻的corner case就告诉你了, 那么你在这个时候, 把他的corner case研究清楚了, 到时候跑code, 他也无法用什么更难的corner case刁难你。所以各种好处都在这里了。
另外, 在这一步, 大家其实可以主动给出时间复杂度。好处是, 显得你很主动。并且, 如果你的时间复杂度不是最优的, 你可以从面试官那里套出最优的时间复杂度。套出了以后, 可以用倒推法, 反过来去推答案。如果你做不出来的话。
写代码
这一块, 很多人觉得没什么好讲的, 但是我还是想给大家几个技巧
第一,命名其实也是重要的。不要再去用什么a, b, c, d, x, y啦。这个变量代表什么就命名什么。特别要提出来的是, 当年命名一个map的时候, 你写命名成key2value的形式, 可以大大降低你写代码的时候自己把自己弄晕的概率
第二, 拆函数也很重要, 就是不要不敢去用helper function, 如果你能用helper function把函数的各个功能表达的很简洁明了, 或者增加代码复用, 都是极好的。可能很多人觉得, 要让自己的代码别人看得懂, 就要写注释。其实不是的。真正好的代码, 自己就会说话。这主要就是来自于好的命名和拆分
最后一步, 证明你写的代码是对的
很多人写完代码就完了, 但是我推荐你主动去证明你的代码去对的。主动肉眼跑你的代码。最好是自己想test case去跑。
很简单的潜规则告诉你, 如果你的代码写的有bug, 如果你自己找到, 可以加分的, 如果是面试官找到, 要扣分的。那么你为什么不用这个机会自己去找呢?
其他技巧:时间管理
还有一点儿不得不提的就是时间管理的问题。在把情况说清楚的时候, 尽量别说废话。特别是面试官刹不住车的那种。虽然一般这种问题不怎么出现在同胞身上。因为时间是你自己的, 大部分面试只有45分钟, 在此期间, 你要是做不完, 很容易挂掉。算法面试的面试官, 很少会帮你在时间上精打细算。就算他们需要控制时间, 也基本是只能叫你别写了。 所以别把时间浪费在废话上。那种写一行代码解释一句的, 其实没有必要。并不能给你的沟通加分, 还浪费你自己的时间。
大家如果还有相关的问题和看法,欢迎点击“阅读原文”到一亩三分地讨论