更好的技术面试:第 5 部分 - 我常见的面试问题

2025-06-11

更好的技术面试:第 5 部分 - 我常见的面试问题

这篇文章是我正在撰写的关于如何更好地进行技术面试的系列文章之一。期待您在评论区提供反馈!

开始之前:警告

请记住,在之前的文章中,我提到面试过程需要根据您想要填补的职位以及您对受访者所做的研究进行大量定制。

我再次强调这一点,因为它真的很重要。如果你把下面的问题当成一本放之四海而皆准的策略手册,那对你的团队和受访者来说都是有害的。在我看来,没有万能的面试策略手册

以下问题的目的是展示我可能会问的开放式问题类型,以便候选人有空间展示并告诉我他们在特定话题上是怎样的人。这些问题很少单独存在,但我通常会尝试将它们变成简短的对话。后续的后续提问至关重要。

话虽如此,以下是我经常问的一些常见问题以及背后的原因。

我的常见面试问题及其目的

跟我讲讲你最近取得的成就。可以和工作有关,但不一定非要和工作有关。

  • 当我问这个问题时:我倾向于在面试开始时问这个问题,通常作为第一个问题。
  • 我为什么问这个问题:我收到的反馈是,这能让面试官敞开心扉,消除一些紧张气氛,因为我们一起庆祝胜利。这不会让他们一开始就抱有防御的心态。我问这个问题也是为了了解面试官的优先事项是什么,以及他们看重什么成就。
  • 我寻找什么样的答案:我希望人们在工作中或工作之外,至少在某个小方面,拥有一些值得骄傲的事情。在与工作相关的答案中,我还会查看他们是否将这种成就与为更广泛的受众创造某种价值联系起来。对于个人答案,我会观察他们如何珍惜自己的时间,并尝试将其与工作或我们未来对话中的推介联系起来。

这个行业发生了这么多事情,您如何保持自己的技能与时俱进?

  • 当我问这个问题时:当我无法很好地在主题之间过渡时,我有时会使用这个问题作为首选,以便给我一些心理空间来排队其他东西,因为这是一个我可以关注而不会造成太大负担的问题。
  • 我为什么要问这个问题:保持技能更新很重要,并且对于几乎所有开发人员来说都是一件困难的事情。
  • 我寻求什么样的答案:我更希望了解求职者是否有自己的规划,如果这包括希望在工作中学习一些东西,那也没关系。每个人的学习方式各不相同——可能包括阅读博客、Pluralsight或其他视频培训、参加会议或阅读书籍。我通常会问求职者最喜欢的资源是什么,主要是因为我总是想扩充我的资源清单。
  • 注意:正如我在本系列其他文章中提到的,如果有人说“由于(养家糊口/照顾亲人/其他任何工作以外的原因)我没有太多工作以外的时间进行培训”,这种说法也需要被接受。在这种情况下,我会跟进询问,如果他们有更多的时间,他们希望进行哪些类型的学习,并利用这个机会来推广我们的职业发展机会。

平庸的团队和优秀的团队之间有什么区别?优秀的团队会做哪些事情?

  • 我为什么问这个问题:我希望确保应聘者无论担任什么角色,都能认真思考自己在团队中的位置。协作和团队合作是我们工作的重要组成部分。如果简历或任何初步交流给我的印象是应聘者可能认为自己是“独狼”开发者,我尤其倾向于问这个问题。我希望应聘者能够对如何改进整个团队/系统有自己的看法。
  • 我寻求什么样的答案:围绕协作和沟通的答案是我通常希望在答案中找到的两个重要主题。我喜欢听到关于集体所有权、尊重、脆弱性和相互学习的讨论。我也喜欢听到关于心理安全以及专注于创造价值的讨论。这个问题有很多潜在的好答案。

你知道什么是 SOLID 原则吗?如果知道,你觉得它们在哪些地方有用,哪些地方没用?

  • 当我问这个问题的时候:当有人声称自己了解这些知识,或者声称自己是 OOP 方面的专家时。有时我问这个问题是出于好奇。
  • 我为什么问这个问题:如果有人不熟悉这些术语,我可以介绍一下,做一些简单的解释,然后问一些问题。如果有人声称了解这些术语,我希望他们能够阐述一下。而“观点”部分指的是
  • 我寻求什么样的答案: SOLID 原则很重要,但它们不一定是万能的。我希望有人能够理解我的想法,并提出合理的意见。我也会尽力确保你具备一些关于如何良好地使用面向对象编程构建软件的基础知识。通常,缺乏对这些原则的了解会导致讨论的深入,而这种缺乏基础知识的现象会以多种方式暴露出来。

继承和组合有什么区别?

  • 当我问这个问题时:再次,当某人的 OOP 技能似乎缺乏或当他们宣称自己是 OOP 原则和实践的专家时。
  • 我为什么问这个问题:接口和抽象是专业开发人员应该理解的重要概念。我也遇到过很多开发人员试图把所有东西都塞进继承层次结构(危险区域!)。
  • 我寻求什么样的答案:我喜欢听里氏替换原则。我还希望了解组合是指通过实现接口来组合行为对象,而不是假设对象应该相互继承。如果有人知道“Is-a”(继承)和“Has-a”(组合)之间的区别就更好了。

什么是接口?它们为什么有用?

  • 当我问这个问题时:如果某人似乎在语言知识的其他领域存在问题,或者我在他们提交的示例代码中看到大型复杂的继承结构。
  • 我为什么要问这个问题:接口是许多 OOP 语言的核心部分(例如 C#,我通常用它来面试)。
  • 我寻找什么样的答案:接口就是契约。它们只是对行为的定义,而不是实际实现这些行为本身。我喜欢有人举个例子,比如电源插座。面向抽象而非具体进行编程是 SOLID 开发原则的一部分。除此之外,面向契约编程还为我们带来了一些优势,比如能够创建遵循这些契约的伪对象或模拟对象。

您曾经进行过哪些类型的自动化测试?

  • 当我问这个问题时:如果某人的测试经验不是很明显或者他们声称自己是专家。
  • 我为什么要问这个问题:它让我了解某人的整体经历,并且几乎总是会引发后续讨论。
  • 我需要什么样的答案:我不需要有人有编写自动化测试的经验才能雇佣他们。我需要的是,有人能够理解开发人员编写测试的重要性,并且他们也希望学习如何编写测试。对我来说,一个很大的危险信号是“QA 人员会做测试”、“我的代码第一次就成功了,我不需要测试”,或其他类似的、表明对开发工作质量缺乏责任感的答案。

代码优先和数据库优先有什么区别?

  • 当我问这个问题时:当某人的经验似乎不包括对象关系映射器(ORM)库或所讨论的职位将需要大量进行数据库设计的实际工作时。
  • 我为什么要问这个问题:我想知道开发人员是否了解使用工具时的利弊权衡。我想知道他们是否熟悉不同的方法,并且意识到这类技术存在的问题。
  • 我寻求什么样的答案:对这些术语在至少一种 ORM 风格工具(EF、NHibernate 等)中的应用有大致的理解。即使候选人不具备这些知识,我也会稍微解释一下这些术语,并请他们演示一下使用某个系统进行更改的具体流程。在这种情况下,我希望候选人能够运用我们刚刚介绍的概念。

如果您有一个大型遗留应用程序并且需要重构大部分代码库,您将如何处理?

  • 当我问这个问题时:当有人声称他们过去的经历中曾担任过架构师或首席开发人员的角色时。
  • 我为什么要问这个问题:我想了解某人的宏观思维,以及他们对质量流程的理解。
  • 我寻找什么样的答案:对我来说,最重要的是候选人了解测试和验证在重构过程中的重要性。重构意味着在不改变外部行为的情况下改变底层设计,而没有测试,我们无法证明外部行为没有改变。除此之外,我还希望候选人拥有某种方法,或者至少是一致的思维过程,并且能够就大规模重构进行沟通,而不是独自花费数周时间完成。

好的单元测试有哪些关键特征?

  • 当我问这个问题时:当有人声称有单元或自动化测试经验时。
  • 我为什么要问这个问题:了解单元测试和集成测试或其他类型测试之间的区别很重要。
  • 我寻找什么样的答案:任何以首字母缩写词 FIRST 开头的答案(快速、隔离、可重复、自验证、及时)。尤其重要的是,测试者理解单元测试的隔离性,这说明他们可能之前就处理过单元测试和模拟测试。我还希望测试的“安排/执行/断言”部分清晰易懂,或者测试应该首先具备可读性(即使某些代码重复)。

成为领导者意味着什么?

  • 当我问这个问题时:每当有人面试领导职位时,通常也是面试高级职位时。
  • 我为什么问这个问题:这个问题常常会暴露出一些偏见。有人会认为领导者专制吗?他们是否认为领导者无所不知?我想了解人们如何看待领导力,既要考虑与他们共事的其他人,也要考虑他们自己作为领导者。
  • 我寻找什么样的答案:我寻找关于仆人式领导、指导、培养更多领导者以及支持团队成员的答案。我寻找关于良好沟通和反馈、清晰的愿景和目标以及鼓励的答案。我寻找关于积极态度的答案。如果我感觉到某人可能以前没有接触过这种领导力的定义,我可能会稍微提醒一下。我主要寻找的是,这个人并没有积极反对这种领导力理念。

告诉我不同​​的访问修饰符以及它们的作用?

  • 我问这个问题是为了测试一个人的语言基础能力,尤其是当我感觉到某人可能在夸大自己的技能,或者对一些基本知识没有掌握的时候。有时,在准备其他问题时,我也会把它作为引导性问题来问。
  • 我为什么问这个问题:我不需要有人在这个问题上做到完美。我和其他人一样,有谷歌。但这些都是基础知识,如果有人真的遇到困难,那就说明我需要深入挖掘,因为他们可能遇到了一些困难。
  • 我寻找什么样的答案:我主要想知道是否有人能够区分公共和私有,以及为什么这种区别很重要。如果有人谈论这一点以及如何管理封装状态,我会觉得没问题。“” internalsealed“”、“”等等都是值得深入研究的好关键词,如果他们没有提到,我可能会问他们,但这对我来说并非最终目的。如果有人确实正确地理解了这种区别,我会听他们如何解释,以及他们是否使用了任何很棒的技巧/示例来阐明要点。

你会如何指导比你资历浅的开发人员?或者比你资历深的开发人员?

  • 当我问这个问题时:当我对某人与同事合作和成长的能力有任何疑问时。
  • 我为什么问这个问题:与其让他们站在学习者的立场上,我更倾向于让他们站在导师的立场上。从两个角度提问,让我能够看到他们可能会根据感知到的权威来调整答案。
  • 我寻找什么样的答案:获得认同;制定计划;与同等水平的人会面;边教边学。

您将错过最后期限;您会怎么做?

关于这个问题的一些背景:我倾向于这样表述:“你正在处理一项任务,对你的客户来说,截止日期非常重要。随着截止日期越来越近,你意识到你和你的团队根本无法在截止日期前完成承诺的交付。这种情况令人沮丧。你会怎么做?”

  • 当我问这个问题时:当我想探索某人如何将他们的工作与价值交付联系起来时,或者当我想看看某人是否理解敏捷价值主张的重要部分时。
  • 我为什么问这个问题:我问这个问题是为了看看一个人是否善于沟通,以及他们是否能够超越任务范围或价值交付来思考他们的工作。
  • 我寻找什么样的答案:我希望有人能够承认人为失误,并坦诚、毫不犹豫地与我沟通。我希望有人能够谈谈如何避免这种情况(例如,正确界定项目范围,持续交付小部分价值)。我希望有人能够讨论缩小项目范围,或者询问不同的价值部分可能是什么,看看他们能否在截止日期前交付尽可能多的价值。我还希望有人能够讨论未来工作的预防和缓解策略。如果这个人从未担任过领导职务,我会关注他们如何与内部团队沟通。如果这个人正在寻求高级职位或领导职务,我可能会敦促他们询问他们如何就此与客户沟通。

您理想的日常生活是怎样的?

  • 当我问这个问题时:当简历上有空白或跳跃可能表明某人尚未找到长期合适的工作时,或者当我感觉到某人的性格可能与他们即将加入的组织不匹配时。
  • 我为什么问这个问题:因为我通常能看出别人是不是在胡扯。如果这个职位/组织可能与求职者的实际要求相差甚远,这也能让我更好地设定预期。
  • 我寻找什么样的答案:最重要的是诚实。其余的取决于是否合适。如果我听到有人想整天写代码,从不与人交流,那么一家好的咨询公司可能并不是最合适的。如果我听到有人说他们想整天从事开源工作,我不会因此而责怪他们,但我可能会确保他们也能胜任专有客户的工作。我还想了解一个人是否讨厌开会,他们是否喜欢或避免结对和围观,以及他们有多想与客户利益相关者互动。

理想的流程从需求 –> 生产

我通常会这样表述这个问题:“好吧,假设你选择了一个工作项/故事并开始实施它。所有细节都在那里,而且从业务角度来看,你确切地知道要做什么工作。跟我谈谈你理想的流程,从你选择这个故事开始实施到它投入生产。”

  • 当我问这个问题时:当我觉得某人可能不掌握重要的生命周期概念,例如源代码控制、分支、集成、测试或部署时。如果有人声称自己是 DevOps 专家,我也会问这个问题。
  • 我为什么问这个问题:我想确保有人能以不同于“我写完然后扔给别人”的方式来思考代码。我需要团队里的开发人员至少理解这些生命周期的存在,并且希望它们成为一个高质量的生命周期。
  • 我寻找什么样的答案:我在这里寻找的不仅仅是耸耸肩。希望有人提到源代码控制、创建分支、以测试优先的方式构建代码、从持续集成系统获取反馈、合并代码、让持续集成系统自动部署和跨环境推广代码。这通常能让我判断那些声称拥有自动化测试经验的开发人员是否仍然将其视为开发的一个独立阶段,而不是他们的职责。

现在您对 .NET 世界中的什么事情感到兴奋?

  • 当我问这个问题时:当我想看看某人是否对该行业进行了投资,或者他们是否已经埋头苦干了一段时间。(没有这个并不一定是对某人的不利)
  • 我为什么问这个问题:对我来说,尤其是在咨询行业,开发人员必须了解更大的生态系统和正在发生的事情。我问这个问题也是因为我几乎总能学到一些东西。坦白说,我经常问这个问题是为了识别那些不关心的开发人员。即使是严格按照朝九晚五的模式在遗留系统上工作的开发人员,也应该时不时地查看一下。
  • 我寻找什么样的答案:任何答案都行。人们可能会提到他们对.NET 生态系统中大部分组件开源的兴奋之情。他们可能会对.NET Core 及其跨平台功能感到兴奋。他们可能会对了解到的某个 IDE 工具、某个让他们的生活更轻松的库,或者某个刚刚听说并打算参加的会议感到兴奋。我希望人们能够指出社区/生态系统中他们认为很酷的东西。如果这么宽泛的问题没有得到有意义的回应,那对我来说就是一个危险信号。

您希望长期保持什么样的契合?

  • 当我问这个问题时:当我看到某人的简历上有很多空白或有很多短期演出(同样,这些本身并不取消资格)
  • 我为什么问这个问题:我通常在日常提问时都会问这个问题,因为看看这两个答案是否吻合,如果吻合不好,就需要跟进。我也想确保每个人都对预期保持清醒的认识。
  • 我寻找什么样的答案:同样,我主要看的是诚实。其余的都取决于是否合适。如果有人想成为团队中的领导者,或者想用新技术或好方法为客户解决重要问题,以振兴遗留系统,那么我的雇主很可能能为他们找到一个有趣的职位。

什么是 ORM?它的优点和缺点是什么?

  • 当我问这个问题时:当我觉得某人可能没有在现代应用程序中处理数据的经验时,其中许多应用程序使用对象关系映射器(ORM)
  • 我为什么要问这个问题:我不仅想知道面试者是否知道 ORM 是什么,还想知道他们是否明白 ORM 并不是世界上万能的东西。
  • 我寻求什么样的答案:我希望有人能解释一下什么是 ORM,以及如何将对象映射到数据库表。理想情况下,我希望有人能解释一下阻抗不匹配以及使用 ORM 的一些性能损失。如果他们能比较各种工具,例如 ADO.NET、EF/NHibernate、Dapper 等,那就更好了。

如何在企业环境中确保质量?

  • 当我问这个问题时:当我觉得某人可能处于一个不重视高质量开发实践的环境中时,或者当他们向我提出有关流程/关注技术卓越的其他问题的担忧时。
  • 我为什么要问这个问题:这是一个开放式的问题,可以让人们探索品质对他们意味着什么。
  • 我希望得到什么样的答案:我希望有人能表明质量是每个人的职责,而不是将其外包给其他团队/部门。至少应该有人在讨论中提到自动化测试或测试工具。如果有人能深入探讨质量的文化层面——反馈循环、持续集成和部署、同理心代码审查等等,那么我们就处于一个相当不错的阶段。

告诉我不同​​类型的自动化测试。

  • 当我问这个问题时:如果有人没有提到自动化测试经验。
  • 我为什么问这个问题:自动化测试对我来说非常重要,我希望开发人员对此有所了解,除非他们是初级员工。
  • 我寻求什么样的答案:如果有人提到单元测试、集成测试以及功能测试或验收测试,并且能够阐述这三者的优点/地位,那么我们就找到了一个相当不错的答案。我喜欢听任何关于测试象限或测试金字塔的讨论,也喜欢听有人讨论测试框架(NUnit、xUnit 等)和其他测试工具(例如测试替身框架、SpecFlow 或 Selenium)。

如果您正在构建具有服务器和客户端方面的现代 Web 应用程序,那么您今天会从什么技术堆栈开始,为什么?

  • 当我问这个问题时:当某人需要具备一些高级架构能力时,或者当我想进入不同的思维空间或让某人稍微绘制一下图表时。
  • 我为什么问这个问题:我通常会从别人提出的技术栈中学到一些东西。我通常会给出一个小假设,并解释一下在他们看来这个技术栈是如何运作的。
  • 我寻找什么样的答案:我寻找的答案是不会公然滥用工具/库,超出其预期用途的人。我还寻找能够稍微拓展一下思路,讨论利弊的人。最后,我希望你能够理解高级概念(“哦,MVC 框架,太棒了!跟我说说 MVC 是什么意思。什么时候 MVC不是一个好的选择?”)。
鏂囩珷鏉ユ簮锛�https://dev.to/seankilleen/better-technical-interviews-part-5-my-common-interview-questions-g46
PREV
自学AWS?你需要了解的10项服务
NEXT
前端开发的演变🌻:框架中的 WebPack、Babel 和构建步骤是什么。