在尝试找到一份软件工程工作时,您可能必须通过几次面试,包括行为和系统设计。但归根结底,这一切都归结为一件事:您的编码技能。您对编码的熟练程度是决定您是否适合该职位的关键因素。
无论您的经验水平如何(无论您是经验丰富的开发人员还是刚从大学毕业),通过编码面试都可能很困难,但坚持不懈和努力工作会有回报。作为经过整整一年的准备后从 Facebook 获得录取通知书的人,我对此有切身体会。在本文中,我想与您分享我一路上学到的一些技巧和策略。
让我们开始吧。
在您作为软件工程师的日常工作中,您可能不会经常使用算法和数据。尽管如此,它们仍然是您需要了解的基本知识。那么你如何擅长这些呢?学习算法和数据结构可能具有挑战性,但这不是火箭科学或秘密艺术。主要问题是学习它们所需的时间,因此计划和练习是关键。
想想提高你的编码技能,比如锻炼你的肌肉。您不能指望在短短几周的高强度锻炼中就可以得到充分的锻炼和健美。同样,你不会在几天内掌握算法。关键是要在很长一段时间内坚持不懈地努力,以获得你想要的结果。
早在 2019 年,当我开始准备编码面试时,我对如何编写最基本的算法(例如二分搜索)一无所知。我花了大约六个月的时间坚持练习,才获得了谷歌的第一次现场面试。进展如何?我失败了。
但是我放弃了吗?不,我又练习了一年,直到我终于收到了来自 Facebook(我们现在称为 Meta)的 offer。所以,最重要的是学习这些技能需要时间和精力,但回报可以改变生活!
当您第一次开始处理编码问题时,感到有点不知所措是完全正常的。你甚至可能会发现自己在想,“我怎么了?为什么连最简单的问题我都解决不了?”这只是学习过程中自然而然的一部分。随着时间的推移,你会变得更好。
一个有用且经过时间考验的应对压力的策略是将一项大任务分解成可管理的块并设定可实现的目标。
我建议每天从 1-2 个简单或中等级别的问题开始,每个问题花费大约 15-30 分钟。这将帮助您逐渐培养解决问题的能力,避免不知所措。一旦您开始感到更加自信,您可以通过每天解决多达 3-4 个问题来增加强度。
为了让您了解通过一致的实践可以实现什么,在我收到一家大型科技公司的第一份录用之前,我在一年多的时间里亲自解决了大约 200 个问题(50% 中等,40% 简单,10% 困难)。请记住,每个人都按照自己的节奏学习,因此请务必确定最适合您的练习量。重要的是保持专注并坚持下去。
如果您想找到优秀的资源来练习编码并提高您的面试技巧,您可以考虑多种选择。其中一些最好的是Leetcode 、 Hackerrank和 Codeforces——这些平台提供了各种具有挑战性的问题,可以帮助您磨练您的编码能力。
但如果您需要更多结构或指导,也可以使用 Interviews.school 等资源或 Algoexpert.io 等付费课程。如果您刚刚起步或不确定从哪里开始,这些内容会特别有用。
在我自己的面试准备过程中,我已经使用了所有这些资源,并且可以保证它们的质量。
对您将要使用的语言有扎实的掌握非常重要,这样您才能充分展示您的技术技能和解决问题的能力。通常,您可以为算法编码选择语言,但有时面试官可能有特定的语言要求。请务必事先检查。
使用您最熟悉的语言,即使它不是您的主要语言。确保您了解它的通用数据结构、快捷方式和内存管理。我的编码面试选择是 Python,尽管我每天都使用 PHP。 Python 简单的语法帮助我快速构建解决方案原型,而且我不必担心 $ 符号、括号或分号等问题。
要提高您的编程语言技能,请花时间学习其基础知识、练习编码并研究其他程序员的解决方案。我建议查看 Leetcode——在其评论和讨论部分,你可以找到一些很好的例子和技巧来学习。
不要先问问题就急于解决问题。这是一个常见的错误,可能会成为面试官的危险信号。即使您确信自己正确理解了问题,也可以问一些澄清问题。
编码问题是故意模棱两可的,面试官不会预先提供所有必要的细节。
相反,面试官希望你澄清细节,所以问几个问题以绝对确保你和面试官在同一页面上。
此外,通过这种方式,您将能够识别和澄清边缘情况。例如,您可能想询问输入的格式、涉及的数据类型或问题是否有任何限制。了解具体细节可以节省您的时间并让您专注于手头的任务。
当你在面试中解决问题时,不要急于开始编码。先花点时间谈谈您的解决方案。这将帮助您弄清问题并确保在开始之前有一个可靠的计划。说出来还可以节省您的时间并防止您犯不必要的错误。
我自己也差点掉进这个陷阱。在一次采访中,我被要求实现字符串前缀匹配。我立即想到了一个涉及 Trie 的相当复杂的解决方案。但是当我开始大声描述我的想法时,面试官阻止了我并要求一种更简单的方法,只涉及迭代两个字符串。
如果我立即开始编码,我会把时间浪费在一个面试官甚至没有要求的过于复杂的解决方案上。
一旦您讨论了解决方案并且面试官对它感到满意,您就可以开始实施它。
在编码面试中,面试官对你是否真的找到了解决方案并不那么感兴趣。
他们想看看您如何处理问题解决过程。
确保在进行时阐明您的想法并解释您的推理。
请记住,面试官就在您身边,可以帮助您取得成功。将面试视为团队合作,您和面试官一起寻找解决方案。不过,您应该进行大部分谈话(大约 70-80% 的时间)。面试官可能偶尔会提供反馈或纠正你。思想开放,愿意从面试官的反馈中学习,利用它来发挥自己的优势。
在整个面试过程中保持友好和反应迅速。如果你需要一点时间集中注意力,让面试官知道。稍作停顿整理思绪,但不要拖得太久。
完成后不要忘记严格测试您的代码。测试对于发现您可能遗漏的任何错误或问题非常重要。
为确保您的代码产生预期的输出,请使用面试官提供的示例输入。考虑测试边缘情况,包括输入边界、格式或输入类型、空值、空值或负值,以及太小或太大的输入。
测试时,逐行检查代码并检查变量和表达式的值。通过这种方式,您只需看一眼代码就能捕捉到难以发现的错误。
测试完所有内容后,退后一步,思考如何让代码变得更好。也许有更有效的方法来解决问题,或者您可以使代码更易于阅读和理解。
编码面试是一项挑战,但您可以通过充分的准备和练习大大提高成功的机会。
让我们回顾一下要点:
保持冷静,将面试视为协作解决问题的过程。
祝你在未来的编码面试中好运!
主要图像是使用 HackerNoon 的稳定扩散AI 图像生成器功能生成的,通过提示“在 facebook 进行编码采访”。