编码面试技巧
像专业人士一样闲聊。
在深入学习代码之前,大多数面试官喜欢聊聊你的背景。他们想了解的是:
- 关于编码的元认知。你思考过如何写好代码吗?
- 主人翁精神/领导力。你能否坚持完成工作?你会主动去解决那些不尽如人意的地方吗?即使并非必须,你也会主动去解决。
- 沟通。和你讨论技术问题是有益的还是痛苦的?
您应该至少有一个:
- 您解决的一个有趣的技术问题的示例
- 你克服的人际冲突的例子
- 领导力或所有权的例子
- 关于你在过去的项目中应该做些什么不同的事情的故事
- 关于你最喜欢的语言的一些趣事,以及你对该语言的喜欢和不喜欢之处
- 关于公司产品/业务的问题
- 关于公司工程策略的问题(测试、Scrum 等)
对事物充满热情。表现出你对自己所做的事情感到自豪,对他们所做的事情感到兴奋,并且你对语言和工作流程有自己的看法。
交流。
一旦进入编码问题,沟通就变得至关重要。一个在过程中需要一些帮助但能够清晰沟通的候选人,甚至可能比一个轻松回答问题的候选人更优秀。
了解问题的类型。问题分为两类:
- 编码。面试官希望看到你为问题编写干净、高效的代码。
- 闲聊。面试官只是想让你聊聊。这类问题通常是(1)高级系统设计(“你会如何构建一个 Twitter 克隆版?”)或(2)琐事(“JavaScript 中的提升是什么?”)。有时,这些琐事会引出一个“真正的”问题,例如,“我们能多快对一个整数列表进行排序?好的,现在假设我们不是整数列表……”)。
如果你开始写代码,而面试官只想在进入“真正”问题之前快速地聊一聊,他们会很失望。直接问:“我们应该写代码吗?”
让面试官感觉你和团队在一起。面试官想知道和你一起解决问题是什么感觉,所以要让面试感觉像是在合作。用“我们”而不是“我”,比如说,“如果我们进行广度优先搜索,我们就能及时得到答案。” 如果你可以选择在纸上写代码还是在白板上写代码,请务必选择白板。这样你就能坐在面试官旁边,面对问题(而不是坐在她对面的桌子旁)。
大声思考。认真地。说:“我们试试这个方法——还不确定行不行。” 如果你遇到瓶颈,就直接说出你的想法。说说哪些方法可能行得通。说说你认为哪些方法可行,以及为什么行不通。这同样适用于一些琐碎的闲聊问题。当被要求解释 JavaScript 闭包时,“它与作用域和将内容放入函数有关”这样的说法,很可能就能让你拿到 90% 的分数。
说你不知道。如果你谈到某个事实(例如,特定于语言的琐事,一些棘手的运行时分析),不要试图假装知道你不知道的事情。相反,应该说“我不确定,但我猜是$thing,因为…… ”。“因为”可能包括排除其他选项,比如表明它们的含义毫无意义,或者从其他语言或其他问题中举出例子。
放慢语速。不要自信满满地脱口而出答案。如果答案正确,你仍然需要解释;如果答案错误,你会显得鲁莽。速度太快没有任何好处,而且打断面试官的话或草率下结论更有可能惹恼她。
摆脱困境。
有时你会陷入困境。放松。这并不意味着你失败了。记住,面试官通常更在意你从几个不同角度巧妙地提出问题的能力,而不是你偶然找到正确答案的能力。当希望似乎破灭时,继续探索。
画图。别浪费时间在脑子里思考——在黑板上思考。画几个不同的测试输入。手绘出你如何得到期望的输出。然后思考如何将你的方法转化为代码。
解决这个问题的更简单版本。不确定如何找到集合中第四大项?想想如何找到第一大项,看看你是否能采用这种方法。
写一个简单、低效的解决方案,然后再进行优化。使用蛮力破解。不惜一切代价,只为得到某种答案。
多大声思考。说出你所知道的。说出你认为可能行得通的方案以及为什么行不通。你可能会意识到它确实有效,或者修改后的版本有效。或者你可能会得到一些提示。
等待提示。不要满怀期待地盯着面试官,而是花一点时间“思考”——面试官可能已经决定给你提示,只是为了避免打断你。
思考一下空间和运行时间的界限。如果你不确定你的解决方案是否可以优化,不妨大声思考一下。例如:
- “我至少要查看所有项目,所以我不能做得更好。”
- “蛮力法就是测试所有可能性,也就是。”
- “答案将包含 n^2 个项目,所以我至少必须花费那么多时间。”
把你的想法记下来。
很容易绊倒自己。先集中精力把想法写下来,最后再考虑细节。
调用一个辅助函数并继续。如果你无法立即想到如何实现算法的某个部分,无论大小,直接跳过它。编写一个名称合理的辅助函数调用,并说“这将完成 X”然后继续。如果辅助函数很简单,你甚至可以不去实现它。
不用担心语法问题。轻松搞定就好。如果有必要,可以改回英语。只要说你会回来就行。
留出足够的空间。稍后您可能需要在行间添加代码或注释。从板子的顶部开始,每行之间留一个空行。
把差一检查留到最后再做。不用担心 for 循环是否应该使用“<”或“<=”。在循环末尾打勾提醒自己检查一下。只要记住通用算法就行了。
使用描述性变量名。这会花费一些时间,但它可以防止你忘记代码的功能。使用 names_to_phone_numbers 而不是 nums。在变量名中明确类型。返回布尔值的函数应该以“is_*”开头。包含列表的变量应该以“s”结尾。选择对你来说合理的标准并坚持使用。
完成后请清理。
用手大声朗读你的解决方案,并给出示例输入。实际上,写下程序运行时变量的值——心算不会给你加分。这会帮助你发现错误,并消除面试官对你正在做的事情可能产生的困惑。
查找“差一错误”。你的 for 循环应该使用“<=”而不是“<”吗?
测试边缘情况。这些可能包括空集、单项集或负数。额外提示:提及单元测试!
别太无聊。有些面试官不会在意这些清理步骤。如果你不确定,可以这样说:“那我通常会检查一下代码是否存在一些边缘情况——我们接下来应该这样做吗?”
实践。
最后,没有什么可以替代练习题。
用纸笔实际写代码。对自己诚实一点。一开始可能会感觉尴尬。很好。你现在就应该克服这种尴尬,这样到了正式面试的时候就不会手忙脚乱了。
Interview Cake 的练习题反映了面试过程,当你遇到困难时会提供提示,并提醒你的算法是否可以改进。
文章来源:https://dev.to/interviewcake/coding-interview-tips-1h02