coding-interview-cheatsheet


文档摘要

id: 编程面试速查表 title: '编程面试速查表:面试前、中、后最佳实践' description: 根据编程面试评估标准,提供面试前、中、后应采取的技巧,以展现招聘信号 keywords: [ 编程面试最佳实践, 编程面试最佳做法, 编程面试期间该做什么, 编程面试结束后该做什么, 编程面试前该做什么, 如何在编程面试中展现招聘行为, 如何通过编程面试, ] sidebarlabel: 面试前、中、后最佳实践 import InDocAd from './\components/InDocAd'; 随着编程面试的不断发展,如今对候选人面试时的行为有了更明确的期望。这些做法也有助于你向面试官展示“招聘”信号,体现你良好的沟通能力和应对障碍的能力。

id: 编程面试速查表
title: '编程面试速查表:面试前、中、后最佳实践'
description: 根据编程面试评估标准,提供面试前、中、后应采取的技巧,以展现招聘信号
keywords:
[
编程面试最佳实践,
编程面试最佳做法,
编程面试期间该做什么,
编程面试结束后该做什么,
编程面试前该做什么,
如何在编程面试中展现招聘行为,
如何通过编程面试,
]
sidebar_label: 面试前、中、后最佳实践

import InDocAd from './_components/InDocAd';

随着编程面试的不断发展,如今对候选人面试时的行为有了更明确的期望。这些做法也有助于你向面试官展示“招聘”信号,体现你良好的沟通能力和应对障碍的能力。

我们根据顶尖候选人的最佳实践以及编程面试中的评估标准,总结了一份详尽的清单,列出了面试时应遵循的最佳技巧——还包括一些需要避免的常见错误。

即使在开始练习编程面试题之前,你也应该阅读并熟悉这份指南。配合LeetCode刷题使用本指南,能让你尽早养成这些重要的面试行为习惯。

面试前该做什么

  • ✅ 穿着舒适。

    通常不需要穿正装,休闲装即可。大多数地方T恤和牛仔裤都是可以接受的。

  • ✅ 确保你已阅读并准备好你的自我介绍最后要问的问题

对于线上现场编程面试

线上现场编程面试前该做什么的总结 线上现场编程面试前该做什么
  • ✅ 准备好笔和纸。

    如果你需要记录或画图,尤其在树或图的问题上,画图会非常有帮助。

  • ✅ 使用耳麦或耳机,并确保身处安静环境。

    避免使用扬声器,因为如果回声太大,沟通会更加困难,参与者反复解释只会浪费宝贵时间。

  • ✅ 检查你的网络连接是否正常。
  • ✅ 检查你的摄像头和音频设备是否正常工作。
  • ✅ 熟悉并设置编码环境中的快捷键(CoderPad / CodePen)。

    设置编辑器快捷键,开启自动补全、制表符间距等。如果你熟练掌握并善用快捷键,面试官会印象深刻。

  • ✅ 尽可能关闭摄像头。

    大多数远程面试并不需要视频聊天,保持摄像头开启只会分散注意力,占用网络带宽。

对于电话屏幕编程面试

电话屏幕编程面试前该做什么的总结 电话屏幕编程面试前该做什么
  • ✅ 使用耳麦,并将手机放在桌面上。

    避免一手拿着手机,另一手才能打字。

  • ✅ 请求使用Zoom/Google Meet/Hangouts或Skype代替电话通话。

    这样发送链接或文字会更方便。

对于现场白板编程面试

  • ✅ 学习如何管理白板空间。

    在代码行之间留出空隙,以防你需要在现有代码中间插入新行。

面试中该做什么

面试中该做什么的总结 面试中该做什么

1. 面试开始时做个好的自我介绍

  • ✅ 用一两分钟简单介绍自己。

    参考我们的指南,学习如何为软件工程师做一次出色的自我介绍。

  • ✅ 表现得充满热情!

    带着微笑说话,你会自然而然地显得更有吸引力。

  • ❌ 不要在自我介绍上花太多时间,否则留给编码的时间就少了。

2. 接到题目后,先进行澄清

不要一上来就直接编码。 编程题目往往故意模糊且描述不完整,以便面试官考察候选人的细节关注力和谨慎程度。至少提出2到3个澄清问题。

  • ✅ 向面试官复述并重复题目。

    确保你完全理解他们到底在问什么。

  • ✅ 明确假设条件(参考算法速查表了解常见假设)
    • 一个类似树的图结构很可能是一个允许环路的图,朴素递归解法是行不通的。请确认给定的图是树还是图。

    • 你可以对原始数组/图/数据结构做任何修改吗?

    • 输入是如何存储的?

    • 如果给你一个单词字典,它是字符串列表还是Trie?

    • 输入数组是否排序?(例如用于决定二分搜索或线性搜索)

  • ✅ 明确输入值的范围。

    输入:有多大?范围是多少?

  • ✅ 明确输入值的格式。

    数值:负数?浮点数?空值?空值?重复?极大值?

  • ✅ 通过一个简化示例来确保你理解了题目。

    例如,要求你写一个回文检查器,在编码前先想出几个简单的测试用例,比如“KAYAK”=> true,“MOUSE”=> false,然后与面试官确认这些例子是否符合他们的预期。

  • ❌ 不要一上来就直接编码,或者在面试官没有给出许可前就开始编码。

3. 和面试官一起探讨并优化你的解题思路

接下来最糟糕的做法就是直接跳到编码——面试官希望你花些时间与他们双向讨论正确的解题思路,包括分析时间和空间复杂度。

这段讨论可能持续几分钟,甚至长达5到10分钟,具体取决于题目的复杂程度。这也给了面试官机会为你提供提示,引导你找到可接受的解决方案。

  • ✅ 如果你在思路或优化上卡住了,使用这种结构化方法来帮你回忆或找到合适的解法。

  • ✅ 高层次地说明几种可能的解题思路(不要过多深入实现细节)。和面试官讨论每种解法的权衡,就好像面试官是你同事,你们正在合作解决问题一样。

    对于算法题,时间和空间常常是权衡的焦点。以著名的两数之和为例,有两种常见的解法:

    1. 使用嵌套循环。这在时间复杂度上是O(n²),空间复杂度是O(1)。
    2. 在遍历数组的一次过程中,将每个值与其索引哈希到一个哈希表中。对于后续的值,查询哈希表看看能否找到一个已经存在的值与当前值相加等于目标值。这种方法在时间和空间上都是O(N)。讨论这两种解法,指出它们的权衡,最终确定哪个更好(通常是时间复杂度更低的那个)。
  • ✅ 说明并解释你所提方案的时间和空间复杂度。

    提及时间复杂度的大O表示法,并解释原因(例如,时间复杂度是O(n²),因为有嵌套循环;空间复杂度是O(n),因为创建了一个额外的数组)。掌握所有时间和空间复杂度,参考算法优化技巧

  • ✅ 商定最理想的解题思路并对其进行优化。识别重复、冗余或重叠的计算,通过缓存减少它们。参考优化你的解法页面。

  • ❌ 不要一上来就直接编码,或者在面试官没有给出许可前就开始编码。

  • ❌ 不要忽略任何提供的信息。

  • ❌ 不要对自己的解题思路或分析表现出不确定。

4. 边说边写代码实现你的解法

  • ✅ 只有在你解释完思路并得到面试官许可后才开始编码。
  • ✅ 编码时随时解释你正在尝试实现的目标。必要时比较不同的编码方式。

    这样能展现你对所选编程语言的熟练掌握。

  • ✅ 编码速度要适中,既能边写边解释,又不会太慢。

    你要打字的速度足够慢,能清楚地解释代码,但也不能太慢,以免没时间回答所有问题。

  • ✅ 尽可能写出可编译、可用的代码,而不是伪代码。
  • ✅ 写出干净、简洁、整齐的代码,尽量减少语法错误和bug。

    总是优先选择清晰、简洁的实现,而不是复杂、凌乱的。确保采用整洁的编码风格和良好的编程实践,符合语言的范式和构造。尽量避免语法错误和bug。

  • ✅ 使用能解释代码的变量名。

    好的变量名很重要,因为你需要向面试官解释你的代码。最好使用长而自明的变量名。比如,如果你需要找出数组中3的倍数,就把结果数组命名为multiplesOfThree,而不是array/numbers。

  • ✅ 询问是否可以使用一些简单的函数,而无需自己实现。

    例如,reducefilterminmax都可以直接使用。

  • ✅ 以模块化的方式编写代码,从高层次函数开始,逐步分解成更小的辅助函数。

    比如,如果你被要求造一辆车,可以先写几个高层次的函数:gatherMaterials()assemble()。然后把assemble()分解成更小的函数,makeEngine()polishWheels()constructCarFrame()。你甚至可以询问面试官,是否可以不实现一些简单的辅助函数。

  • ✅ 如果你在代码中做了取巧处理,大声告诉面试官,并说明在非面试环境下你会怎么做(没有时间限制)。

    例如:“在非面试环境下,我会用正则表达式解析这个字符串,而不是用split(),因为它可能无法覆盖某些边界情况。”

  • ✅ [现场/白板] 练习白板空间管理
  • ❌ 不要在面试官讲话时打断他。通常他们讲话是为了给你提示或引导你走向正确方向。
  • ❌ 不要花太多时间写注释。
  • ❌ 不要重复自己。
  • ❌ 不要用不好的变量名。
    • 不要用特别冗长或单字符的变量名(除非它们很常见,比如in),
  • ❌ 不要复制粘贴代码而不检查(比如有些变量可能需要粘贴后重命名)。

5. 编码完成后,检查代码并补充测试用例

编码完成后,不要马上宣布结束。面试官期待你开始检查代码中的错误,并添加测试用例来改进你的代码。

  • ✅ 检查代码中的错误——比如越界错误。

    用全新的眼光重新审视你的代码——就像第一次看到别人写的代码一样——并说出你发现错误的过程。

  • ✅ 和面试官一起头脑风暴边缘情况,并补充更多测试用例。(参考算法速查表了解常见边界情况)

    设计的测试用例通常很简单。头脑风暴可能的边缘情况,比如大尺寸输入、空集、单元素集、负数。

  • ✅ 用这些测试用例逐步运行你的代码。
  • ✅ 注意可以重构的地方。
  • ✅ 重申你代码的时间和空间复杂度。

    这样能提醒你自己注意代码中可能偏离原始时间和空间复杂度的问题。

  • ✅ 解释权衡,以及如果时间充裕的话,代码或解法还能如何改进。
  • ❌ 不要立刻宣布编码完成。先完成上述步骤!
  • ❌ 不要和面试官争论。他们可能错了,但考虑到他们对题目很熟悉,这种情况非常罕见。

6. 面试结束时留下好印象

  • ✅ 提出针对公司的优质问题。

    参考提示和示例问题

  • ✅ 感谢面试官。
  • ❌ 不要结束面试而不问任何问题。

面试后该做什么

面试后该做什么的总结 面试后该做什么
  • ✅ 记录下面试题目和答案,这些将来可能会很有用。
  • ✅ 发送一封跟进邮件或LinkedIn邀请给你的面试官,感谢他们抽出时间并给你面试的机会。

    作为面试官,这些举动会给我留下深刻印象。

免责声明
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。


发布者: 作者: 转发
评论区 (0)
U