破解面试密码的7个有效步骤
最初发表于Books on Code
程序员容易患上冒名顶替综合症是有原因的。在技术白板编程面试中失败可能是人生中最令人警醒的经历之一。
数据结构和算法是考试的基础,这些知识点是几年前某个枯燥乏味的讲师教给你的。然而,考试本身却异常残酷。
一次或多次失败的测试,可能会让你质疑自己作为程序员的价值。但不要这样做。
我在这里告诉你,编码面试就是一场测试,要想通过它,你需要学习才能通过测试。
这是我们自己的版本,类似于美国律师资格考试或工程基础考试(FE),只不过我们不获得任何证书,只是与其他考生进行比较(这让人松了一口气!)。通过这些考试的工程师和律师都刻苦学习,而不是仅仅依靠经验。我们也应该以同样的方式对待编程面试。
成功学习并通过这项广泛使用的白板编码面试将使您获得顶级软件公司的软件工程师职位,因此投资学习是您能做的最好的事情之一。
概述
以下七个步骤源自畅销书《破解编码面试》(现已更新至第六版)。这本备受好评的书篇幅浩大,令人望而生畏:厚厚的17章涵盖了令人头疼的面试问题,以及一些额外的建议:如何在面试中表现,思考“大O符号”,以及如何应对录用和拒绝。
这本书是你的朋友——在美酒、电影和廉价巧克力的陪伴下,你既可以与之欢笑,也可以与之哭泣。当你成功完成训练,从《洛奇》的台阶上跑下来时,你欣然拥抱着这本书。
这本书所提供的是辛勤工作和巨大回报。
本书的建议来自盖尔·拉克曼·麦克道尔 (Gayle Laakmann McDowell),她曾是谷歌的软件工程师和面试官,阅历丰富。她深知软件工程师常犯的错误。她如同向导,带领我们攀登险峻险峻的险境。听从她的建议,就能让你作为一名软件工程师保持活力。
破解编程面试的 7 个步骤
我为你们以及你们即将掌握的技能感到兴奋。充分的准备将使你们获得广泛的技术和沟通能力。无论付出多少努力,这都是值得的。
--- 《破解编码面试》前言
第一步:纸上练习
我们被 IDE、谷歌搜索和自动完成功能宠坏了。你可能已经输入了数百甚至数千次命令,但在纯文本编辑器、纸张或白板前,你却一片空白。而当你在白板上时,你没有任何精神支柱。
这是很正常的,也是导致这些考试如此具有挑战性的主要缺陷之一。
《破解编码面试》针对解决问题时如何训练你的思维提出了几条建议:
在纸上写代码。在计算机上编码有很多便利,例如语法高亮、代码补全和快速调试。但在纸上编码则没有。通过纸上编码,你需要习惯这些便利,以及编写和编辑代码的速度有多慢。
测试你的代码——在纸上进行。这意味着测试一般情况、基本情况、错误情况等等。你需要在面试时进行这些测试,所以最好提前练习一下。
将纸质代码原封不动地输入电脑。你可能会犯很多错误。把所有错误都列成清单,以便在实际面试时牢记。
你现在是不是坐立不安?我知道。认为我们能够或者必须在纸上写代码才能在事业上出类拔萃,这种想法简直太疯狂了。
作为一种思维技巧,你可以选择一个截然不同、令人愉悦的地方来练习编程,从而进入纸上编程的氛围。买一支你最喜欢的笔。点上一根蜡烛。泡上一杯你最爱的热饮。然后,想想远离电脑也能练习编程是多么美好。
我想强调最后一条建议:按原样输入你的论文代码。这是至关重要的一步。研究表明,当我们猜测、检查并出错时,我们会从错误中吸取教训,从而学得更快。
犯错是最好的学习方法之一。
全身心投入这些问题,将我们的答案写在纸上,并愿意面对我们所犯的一切错误,这将使我们在面对真正的面试时处于绝对最佳的位置。
第二步:进行模拟面试
听我说:不要跳过这个对于破解密码面试绝对关键的一步。
我是认真的。如果你真的想过在正式面试前不做模拟面试(因为害怕——害怕问朋友,或者害怕失败),想象一下《动物森友会》里的卧底雷塞蒂先生会不会不让你溜走。
现在背诵给雷塞蒂先生听:“我会进行模拟面试。”他不相信你。再说一遍。
现在让我们看看《Cracking the Code Interview》对此有何评论:
此外,尽量多做模拟面试。你可以和朋友轮流进行模拟面试。即使你的朋友不是面试专家,他/她或许也能帮你解决编程或算法问题。体验面试官的感受也能让你学到很多东西。
主动邀请别人参加编程面试是帮助你做好准备的好方法。联系你的人脉网络。记住,要求模拟面试并不自私。邀请别人参加或接受测试的朋友也会受益。
如果你没有朋友可以一起进行模拟面试,可以上网。Pramp.com是一个免费服务,可以帮你与其他程序员配对,进行模拟面试。
第三步:倾听每一个细节
在模拟面试中(以及之后的真实面试中),练习专心倾听。
编程面试是互动的,是面试官和面试者之间的交流。因此,你需要集中注意力。你的积极倾听能展现出面试官所寻求的智慧和好奇心。
倾听问题时,你需要注意所有细节。这就像收集食谱中的各种食材:你不会在第一步就用到所有食材。
当你听一道题时,你必须绝对确定自己听得正确,这样才不会一头雾水地解决错误的问题。提出问题,重复一遍。鼓励寻求澄清。
面试官不太可能向您提供与问题无关的信息。
《破解编码面试》说道:
许多考生能够正确听清题目。但开发算法十分钟后,他们就忘记了问题的一些关键细节。现在他们实际上无法以最优方式解决问题。
如果你发现自己陷入困境,问问自己是否使用了问题中的所有信息。
但是,如果你发现解决方案初稿中没有用到某些细节,也不用担心。解决问题的必要步骤就是找到解决方案——即使一开始就存在一些问题。你的面试官会理解你正在积极解决问题。
步骤 4:绘制一个具体且足够大的例子
在模拟面试中,就像解决问题的第一步一样,你需要举一个例子。《破解编码面试》的作者提醒道,面试官通常会举一些不好的例子。
什么是不好的例子?它们太小,不足以表达问题场景的常见情况。
这本书展示了一棵只有两个分支的树:总共三个单元。这棵树对于问题空间来说不够用。
您还可能绘制了一个后来被发现并不完全正确的例子。
但在技术面试中,一切都可以调整。回去修改你的例子吧。
第五步:设计算法并优化
在编程面试中编写代码之前,你需要根据示例设计算法。现在就开始吧:直接动手。
开始吧,即使你的算法很糟糕。
开始吧,即使你的算法太明显,面试官肯定会认为你是个白痴。
行动起来吧。一个解决方案——即使是一个糟糕的解决方案——也是一个开始。
一旦你把它落实到位,你就可以大声说出你的想法:它有哪些地方没有得到优化。这样你就有了前进的方向,也朝着解决问题迈出了一步。
《破解编码面试》中提出了一些改进算法的建议。以下是我最喜欢的:
寻找任何未使用的信息。面试官有没有告诉你数组是排序的?你该如何利用这些信息?
使用新的例子。有时候,仅仅看到一个不同的例子就能理清你的思路,或者帮助你发现问题的规律。
使用哈希表。哈希表在面试题中被广泛使用,应该放在首位。
第六步:编写漂亮的代码
为了在模拟或真实编码面试中写出漂亮的代码,您需要充分了解算法。
规划好算法后,无需直接开始编写代码。您可以花一点时间来规划代码,并准确理解所有步骤。了解变量是什么,以及它们何时何地会发生变化。
《破解编码面试》警告说:“白板编码很慢——非常慢……如果你不完全理解你将要写什么,那么你将很难编写它。”
要想写出漂亮的代码,你面临着来自黑板、你自己的笔迹以及你自己的整洁度的挑战——哦天哪。你可以采取的简单预防措施是给自己留出足够的空间,并注意写直线。
但优美的代码不仅仅体现在白板上。优美的代码是模块化的,具有错误检查功能,使用其他类和结构体,并且具有良好的变量命名。你一定可以做到。
步骤 7:测试您的代码
即使你尽力编写了优美的代码,你也还没完成!最后一步是“运行”代码,并运用你的大脑“调试”错误。
《破解编码面试》警告说,这对许多面试官来说是一个重大陷阱,因为手动运行测试需要很长时间——太长了。面试可能在你解决代码中的主要错误之前就结束了。
那么接下来呢?《破解编程面试》建议采用一种更快捷的方法,先逐行阅读代码,并向面试官解释每行代码的作用。检查代码是否按照你预期的功能运行。
接下来,仔细检查代码中任何看起来奇怪的部分。你是否做了一些代码中不明显的选择?
接下来,检查容易出错的地方。如果你写过很长一段时间的代码,你就会知道这些地方在哪里。
接下来,用一个小测试用例进行实际测试。
接下来,测试特殊情况,例如空情况或极端情况。
最后,在修复发现的错误时,请花一点时间分析错误发生的原因并确保修复确实有效。
结论
现在您已经完成了这 7 个步骤,您是否已准备好应对代码面试了?
我知道。这就像从消防水龙带里喝水一样。
但是,有一些资源可以帮助你学习并增强自信。你可以在 YouTube 上找到编程面试的直播,了解真实的编程面试是什么样子的。你可以通过观看讲座、阅读书籍(我推荐《Grokking Algorithms》)或参加一些价格实惠的在线课程来复习你的数据结构和算法。
如果你喜欢这篇文章,不妨分享给你身边的程序员朋友。不妨用它来打破僵局,一起进行模拟面试。
程序员的生活有时会很艰难,但你会得到一个以学习和持续改进为生活方式的社区的支持。
如果您想和我一起踏上通过代码改进的旅程,请加入“代码书籍”时事通讯并接收有关编码和学习之旅的激励更新。
好了,下篇文章再见。👋😊
文章来源:https://dev.to/mlimonczenko/7- effective-steps-to-cracking-the-code-interview-5fpl