我一年做几次面试,可能还不够[1]。 除了机会,我每次都会学到宝贵的经验。
面试压力揭示了弱点。 我的情况过于复杂,不耐烦和惊慌:
- 我以某种方式期望这个问题会很困难。 因此,如果它们看起来太明显,我将忽略它们的宝贵线索和直觉。
- 如果我有预感,我会在没有完全理解的情况下潜入。 我一直踩着耙子,解决了一个错误的问题!
- 我的问题听起来很吓人,我慌张地冻结,不知道从哪里开始。
蛮力
为了弥补这些弱点,我现在从想到的最简单的解决方案开始。 我首先研究一个简单的解决方案,阐明自己的理解,然后集思广益,以改进它。
当您开始研究改进的解决方案时,以这种方式组织工作可以减轻认知负担。
这是一种直观且值得推荐的技术。 但是,我觉得应聘者害怕看起来没有经验,会跳过这一步。 作为面试官,您可能想让您的候选人轻松上手。

游戏计划
它有助于从心理上将访谈分为多个阶段。 开口很重要,因为它可以定下基调,而蛮力可以帮助您度过难关。 早期阶段是单挑:协作,学习和探索。 后期阶段是低落的:集中精力和交付。
游戏计划还可以帮助您管理时间并在面试结束之前提供解决方案。
开幕
整个阶段应该像是进行一些原型设计的流畅对话。 这里的目标是了解并了解问题所在。 不要尝试先提出每个问题-随手编写。 您将有更多问题,有些问题将自行解决。
讨论并实施暴力解决方案。 编写一些好的代码,按照设计原则展示您的技能。 确保您的解决方案正确,检查边缘情况。 确定运行时和内存复杂度。 聊天,放松。
中局
当您谈论复杂性时,请讨论任何权衡取舍,并思考最佳的运行时间是什么。 这缩小了您可以尝试的方法的范围。 例如,如果您的目标是O(n log n),则可以尝试排序或其他D&C技术。 如果问题与连续子数组有关, 则滑动窗口可以帮助解决O(n)中的问题。
重要的是要有一个好的测试案例来支持您的想法。 您的面试官可以提供一个基本的解释问题的方法。 这通常是有目的的,因此请找到一个好的测试用例-这是激发您的直觉的关键!
现在该再次询问约束条件了。 输入是否适合内存? 参数的可能值是什么-我们可以将其映射到向量中,还是必须使用哈希集?
如果您被卡住,请寻求提示。 这比继续深入研究要好。如果您掌握了提示并擅长使用您的代码,那将是一次成功的面试! 一些面试官会认为这是一个比您自己提出解决方案时更强的信号(也许您知道答案吗?)
我不建议您什么时候知道答案。 关键是您不应该害怕提示。
残局
与您的面试官最终确定方法并认真实施。 当您已经弄清所有内容后,这应该很容易-只需专注于代码并消除干扰即可!
使用之前的测试用例验证您的代码。 即使您感到自信,也要仔细检查您的工作,这一点很重要。
集中讨论在重点时间内出现的新想法。 聊天,微笑🙂
编码实践
最重要的建议-继续解决问题! 您需要练习各种技术和方法; 这就像一套工具,您可以尝试解决下一个问题!
LeetCode是我最喜欢算法问题的目的地。 它有上千个问题,并且有大量的测试案例,以验证正确性以及计算和内存复杂性。 还有一个大型社区,讨论不同的方法,技巧和窍门。