作者 | Ravi Shankar Rajan
译者 | IT外文选刊(公众号回复“IT666”领取技术学习全网最全资料,更多资源持续更新中!)
仅仅作为一个优秀的程序员,可能还不足以通过程序员面试。
好吧,不得不承认,程序员面试是很难的。
面试中会精神紧张。会有不舒服的感觉。会有尴尬的感觉。也会有种奇怪的恐惧,担心我们可能会在这次面试中表现差劲,并成为了自己的笑料。可能出错的情况层出不穷。
但是,这就给我们带来了一个问题。
程序员面试为什么难?是只问技术性的东西,还是更深层次的东西?
达尔文在研究进化论时也有过类似的问题(不,他不是程序员!!!)。有一天在伦敦动物园,达尔文决定做一个实验。他把自己的脸尽量贴近把自己和一条有毒的膨身蛇隔开的厚厚的玻璃。他发现,每当毒蛇向他扑来时,他就会本能地往后跳几英尺,尽管玻璃是无法打破的,而蛇也无法伤害到他。
达尔文最后得出的结论是,人类尽管智力超群,但仍旧按照原始的动物本能做出反应。这就是所谓的 "战斗或逃跑反应",这是一种对感知到的威胁的生理反应,其目的是为了让动物做好逃离危险或与危险搏斗的准备。
而在现代,这些威胁可以归结为名誉的丧失,成为被人嘲笑的对象,甚至被人吐槽,这一切都会在艰难的编程面试中痛苦地暴露出来。这些可能性是非常真实的,足以让我们在面试中慌乱,最终毫无头绪。
「话虽如此,但作为一名优秀的程序员并不能保证你在面试中成功。每一次的面试,除了技术性的东西外,都是一场神经战,你需要在紧张的情况下快速解决问题,把你的想法说得很清楚。」这和一般的技术性的东西是不一样的。在此之上,我们可能也会遇到有一些很差的面试官,他们会把一个好的面试搞得一团糟。
以下是我职业生涯中帮助我成功通过面试的一些经验。
提前做好准备工作
「我知道这听起来很老套,但我见过很多程序员坐在面试室外,在面试前的10分钟内,试图学习 "一切可能的东西"。这是一个灾难性的方法,因为这不仅会让你不那么自信,更糟糕的是,你可能会在面试时把关键的概念搞混。」
你理想的面试准备工作应该在面试前一周开始。一个可行的简单的方法是制作10到15张幻灯片,突出可能被问到的关键点和你的回答。一张幻灯片可以是这样的:
- 主题 – 问题的要点
- 关键点- 这些可以是概念的概括性解释
- 例子(结合你的经验,举出一些独特的东西)
- 你的观点- 这是你的解决方案
记住,你不是在写一本书。你只是在创建一个像闪存卡一样的演示文稿,它储存在你的记忆中,并在面试官提问时让你回想起来。另一个好处是,你还可以在镜子前演练这些幻灯片,进一步增强你的信心。
是的,这似乎是大量准备工作,但是当面试很重要并且是你梦寐以求的工作时,没有什么能称得上是“大量准备工作”。
充满热情
「这可能听起来又是老生常谈了,但50%的程序员在面试中被拒绝的原因不是因为他们的技术能力,而是因为他们没有表现出对这份工作的热情。」
「请记住,面试官也是在从各个角度评价你是否“适合”这份工作。企业想要的是那些对加入他们充满激情的求职者。他们很欣赏那些对公司产品有研究的候选人,在面试时能提出自己的独特见解。道理很简单,兴奋的程序员是快乐的程序员,快乐的程序员是高效的程序员。」
「请记住,任何面试就像约会,在约会中隐含的信息是,你是众多选择中的一个,如果你想在众多选择中名列前茅,你需要和别人不一样。」这就是为什么要认真准备笔记,说明你为什么觉得某公司很让你兴奋,真的会提高你的通过率。带上准备好的笔记,可以体现你的准备情况以及随之而来的兴奋程度。
寻求面试官的帮助
是的,这是个难点,因为面试官不会帮助每个候选人。事实上,他将无情地对待他们中的大多数人,并且只倾向于帮助一小部分与他建立了某种信任的程序员。
「是的,这里的关键词是信任,而在60分钟内建立信任并不容易,但非常可行。」而关键是要明白他到底在期待什么。一旦有面试问题,你需要绝对清楚地问出问题,如果这意味着要问出更多的细节,不要犹豫不决。
即使你几乎确定了答案,也要问问题。这样做很有用,因为它可以验证你的想法,也可以吸引面试官的注意力。你还能得到一个额外的好处,那就是在回答最后的解决方案之前,你可以有更多的时间来收集你的想法。
「记住,关键是要与面试官互动,读懂他的想法。」如果你没有任何说明就直接开始编码,你可能会错过面试官给你进一步指点或提示的机会。
「记住,仅仅表现出你对代码的热情是不够的。要建立信任,你需要表现得很好。」人们需要感觉到你能做到,并且应该觉得与你进一步的对话很舒服。
最后,慎重选择你的战场
广义上说,参加面试的程序员可以分为两种类型,一种是软弱型,一种是争论型。
软弱型,顾名思义就是同意面试官说的一切。解决问题的方法总是不止一种。始终是如此。通常解决一个问题有多种方法,其中有些方法可能不是最佳的。「而好的面试官都希望你能指出来他们思路是错误的。有时也是刻意为之。所以同意他说的话可能并不是一个好主意。」
「而另一个极端是争论型的程序员,他们会在面试官的每一个概念中找到漏洞。虽然这在一定程度上是好事,但不断的争论只是为了证明自己的观点,满足自己的自尊心,可能会让你站在错误的立场上。」毕竟,没有人愿意在永久的冲突模式下工作,这是最坏的自我毁灭行为。
这里的关键是要慎重选择你的战场。你只需要选择那些你能赢的战役,展示你的专业知识。软件开发是复杂的,而且非常主观的,有些习惯也因程序员的不同而差异很大。「因此,改变另一个程序员(面试官)的“工作方式”只是为了证明你的观点,并不会给你加分。」
相反,把精力集中在真正重要的事情上,优先考虑那些会让你的价值更快地在台面上发挥出来的战斗。
结论
「通过面试是一项技能。作为一个优秀的程序员是有帮助的,但这只是其中的一部分。你还需要培养自己的思维能力,才能成为胜利者。」
在你的职业生涯中,你会有几次“好的”、“坏的”和“丑的”面试。但是,不要太担心这个问题,因为每一次面试都是一次学习的经历,和流行的观点(或书籍上的观点)相反,我认为没有灵丹妙药能100%保证通过面试。你只需要学习,准备,参与,再学习,再提高,才能越来越好。仅此而已。
正如Bo Bennett所说的那样:
“成功,没有捷径可言。”
END
外文链接:
https://medium.com/swlh/how-t...