我如何在代码面试中评估你 解决问题能力 技术技能 沟通能力 结论

2025-05-25

我如何在代码面试中评估你

解决问题

技术技能

沟通

结论

我面试的很多候选人表现不佳,因为他们不明白我是如何评估他们的。虽然其他面试官的标准各不相同,但有一些共同点。了解基本知识有助于你自我评估,并提升面试技巧。

在interviewing.io,我会根据三个方面来评估候选人。我认为这很能体现不同公司对你的评价。即使没有明确考虑这些因素,它们也会影响你的整体评价。

  • 解决问题
  • 技术技能
  • 沟通

我被要求对每一项能力进行评分,但它们之间紧密相连。如果候选人缺乏其中一项能力,其他能力也会显得不足。让我们逐一分析一下,并尝试找出其具体细节。

解决问题

解决问题是从编写代码中抽象出来的部分。我希望了解你的流程,而不仅仅是结果。这需要你知道问题是什么,以及我接受什么样的有效解决方案。解决问题很大程度上在于定义约束条件,发现模糊性或不确定性,并解决它们。

挑战因问题而异。我的卡牌游戏问题要求你编写一个小型游戏模拟。我想看看你如何解决这个问题。我希望你提出问题。“卡牌”究竟是什么?你会如何表示它?“发牌”具体是什么意思?

解决问题的关键在于将高层次的需求转化为具体的步骤。如果你正在做一个项目,这个阶段你就可以编写用户故事和用户旅程。面试的时候你不必这么正式,但我希望看到你理解了这些需求。告诉我你的想法,并写下要点。

展示你正在解决的问题的输入和输出。说明你是在转换数据还是在执行流程。描述如何将大问题分解成更小的问题。对于算法,请提及相关的算法,并告诉我你将如何调整它们以适应新的情况。

确定你熟悉的部分,以及它与你之前做过的事情有何相似之处。如果有白板,请勾勒出流程、数据集以及你脑海中的其他任何内容。尤其是当你遇到困难时,我想知道你是如何解决问题的。永远不要陷入茫然的沉默。我可以帮助你,但如果我不能理解你的流程,就无法帮助你。

千万不要把解决问题当成一个阶段。我不指望你在面试一开始就想出完美的解决方案。我希望看到你提出一个想法并付诸实践。它可能会存在问题,需要修改。我甚至会改变你的要求,或者批评你的方法。我希望你能接受改变并适应。

💭 你解决问题的能力取决于你的技术能力。虽然解决问题的能力并非一项有形的技能,但你的设计是基于计算机在现实世界中的局限性。解决问题的能力和技术能力不可能完全割裂开来。

技术技能

我主要考虑两个方面的技术技能。首先是你对编程习惯用法和知识的掌握。你是否知道什么是可行的,以及如何进行编码?其次是具体的语言能力。一旦你明确了目标,你能否用你正在使用的语言很好地实现它。

第一点是关于你的编程常识。你是否了解数据结构、程序流程以及编程语言的所有功能?这些知识会影响你解决问题的能力,因为它们是你的工具箱。你的设计是否有效取决于你是否有可用的工具。

我评估候选人的标准是他们的犹豫程度,或者他们的工作速度。我评判的不是速度本身,而是看一个人对工具的熟练程度。我还会听你的说话方式,看看你的声音是充满自信,还是带着一种寻求肯定的探究语气。

第二个方面,了解特定语言的语法和语义,与第一个方面至关重要。你如何在代码中表达自己,是我了解你一般编程知识的主要途径。如果你写循环很费劲,我必须判断这是因为你不懂这门语言,还是你不确定循环如何应用于这个问题。

我考察的是你将想法转化为代码的流畅程度。例如,在我的纸牌游戏题目中,有一个发牌的阶段。你必须将牌分成两叠,每个玩家一叠。无论你选择的是循环还是高级拆分函数,你都应该能够编写代码。编写错误的代码、忘记循环的工作原理、使用错误的拆分语法,都会对候选人产生负面影响。

我不会因为别人犯错而惩罚他们。犯错是难免的。但是,如果犯了类似的错误,或者直接重复以前的错误,则表明你缺乏知识。如果我发现错误,我可能会忽略它,或者向你询问代码。能够识别错误会对你的能力产生积极的影响。

语言有很多特性,我正在寻找你如何有效地运用它们。你使用枚举和常量吗?你能创建一个结构体来封装值吗?你是否正确地通过值或引用传递变量?你是否使用了标准的错误机制?

我不指望你什么都懂,但我希望你掌握所有基础知识。对于自称精通该语言的人,我会考察其常用的惯用语。例如,在 Python 中,我会考察列表推导式和字典的使用。在 C++ 中,我会考察智能指针,可能还会考察 lambda 表达式。如果代码中缺少所有常用的语言惯用语,那么候选人似乎对该语言缺乏经验。

💭 我进行一般面试时,并不会过分强调语言知识。你的代码是帮助我评估你的一种方式。但是,如果你面试的是特定职位,需要特定的语言知识,那么你的语言技能就会更有分量。

沟通

正确地表达你的想法是确保我正确评估你的最佳方法。做不到这一点的候选人表现会比其他人更差。良好的表达能力不仅能提高我对你沟通能力的评价,还能确保面试更顺利,确保你按时完成代码。

沟通是避免代码错误的关键。如果你只是写代码,那么我对你能力的评价就只能通过代码本身。如果你告诉我你写这段代码的原因,那么即使代码本身有误,我也能理解你的做法。

这也意味着大声朗读代码毫无意义。我可以自己看代码,自己读。你的文字应该表达代码中没有明确表达的想法。很多候选人意识到需要交流,但我觉得他们不知道应该讲什么。所以他们最终还是会朗读代码。分享你的想法是可以学习的,但需要练习。

注意编程词汇。你应该知道如何用行业术语谈论软件。这能充分展现你的经验和对细节的关注。我想听具体的东西,比如实例变量、常量值以及带参数调用函数。我想听你谈论如何从堆栈中弹出元素以及如何枚举映射中的元素。我不想听“用这个东西做点什么”。

我也不想听那些流行语。不要使用你不懂的术语,也不要声称自己懂一些你不懂的词。不诚实在面试中是一个很大的危险信号。别以为你能侥幸逃脱。我擅长识别那些胡说八道的人,大多数人力资源部门的人和很多做过很多招聘工作的程序员也一样。

不用担心自己并非无所不知。我会根据你的经验水平调整我的期望。初级程序员接触的概念并不多。保持开放、诚实和好奇心。然而,我对拥有十年或以上经验的人要求很高。

面试是互动的,沟通能确保我们双方都在同一条思路上。沟通不畅通常会导致你解决问题的能力和编程知识被误解。我越了解你的想法,就越能帮助你解决问题。

结论

一般来说,缺乏沟通能力或解决问题能力会导致候选人被淘汰。我无法想象一家公司会愿意雇佣缺乏其中任何一项技能的人。当然,有些情况下需要特定的、不常见的技术知识。但即便如此,你仍然需要与其他候选人竞争。

有些人会写基本的代码,但无法将他们的知识运用到新的情况中。他们似乎只学会了一种特定的方法,却不理解其背后的任何概念。我无法保证我的印象总是准确,因为我的判断是基于面试中看到的情况。因此,展现所有这些能力至关重要。

你可能想知道如何展示这些技能。显然,提高其中任何一项技能都需要练习和学习。但要在面试中展现所有技能,则需要平衡。不要只专注于代码。说出你的想法,这是展现你的知识和解决问题方法的关键。不要害怕暴露你知识的局限性,而是要保持开放的心态,并展示你是如何克服这些局限性的。与面试官交流。在白板上画出草图。

请注意,您正在接受评估,评估内容主要包括三个方面:解决问题的能力、技术技能和沟通能力。

文章来源:https://dev.to/mortoray/how-i-evaluate-you-in-a-code-interview-42hh
PREV
糟糕的面试问题:没有临时变量的情况下交换变量
NEXT
适用于远程工作的最佳 VS Code 扩展