10个重要的软件开发面试问题 *

最优秀的软件开发人员可以回答的全部基本问题. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.

现在就雇佣一名顶尖的软件开发人员
Toptal logo是顶级自由软件开发人员的专属网络吗, designers, finance experts, product managers, 和世界上的项目经理. 顶级公司雇佣Toptal自由职业者来完成他们最重要的项目.

Interview Questions

1.

跟我们说说你最近做的项目吧. Was it completed successfully? 解释一下你是如何促成它的成功的,以及你是如何处理你可能遇到的任何障碍的.

View answer

这个问题应该让你深入了解候选人对项目的整体贡献, 他们的管理能力和团队合作能力, 以及他们与项目管理和其他利益相关者的互动. 软件项目几乎总是面临障碍和复杂性, 并且能够识别障碍, 快速有效地解决问题, 在最后期限内正确地完成工作是软件工程师/开发人员的关键属性.

2.

谈谈你在制作过程中必须做出关键决定的一次经历. What happened? How did you manage it?

View answer

这个问题可以帮助你判断应聘者是否能够独立思考, 快速、清晰地分析和评估问题, 并认识到思想之间最合乎逻辑的关系.

批判性思考者通常也有一种探索的心态,这可以导致创新和改进生产系统和过程.

3.

你如何向非技术涉众解释api?

View answer

良好的沟通能力是应聘者应该具备的最重要的技能之一. 这样的问题可以让你了解应聘者是如何处理最困难或最复杂的对话的.

应聘者可能会这样回答:

An API (应用程序编程接口)可用于基于web的系统, software library, computer hardware, 操作系统或数据库系统. 它是一组规则(代码)和规范,软件程序可以遵循这些规则(代码)和规范来进行通信. 简单地说,它作为不同程序之间的接口,促进它们之间的交互.

虽然这个答案足够准确, 对于不懂技术的观众来说,这可能只是“更多的技术术语”. A better answer would be:

“API”是一个非常通用的术语——它可以在各种编程环境中使用:网站, mobile apps, desktop software, and even operating systems (e.g. Windows, macOS, or Linux). 它是一个软件如何被其他软件使用的规范.

这个稍微好一点:没有那么多学术论调, 一些精确的词语被用在了更有关联的词语上,比如“网站”取代了“网络系统”,“桌面软件”取代了“软件库”。. However, 它仍然过于技术性,因为它必须有一个侧面来定义操作系统, 观众可能不太熟悉.

Compare that with:

API告诉程序员如何自动化一个产品——从像Twitter这样的网络应用一直到Windows本身. For example, 我可以使用Twitter的API获取我们公司最新的tweet,然后在我们的网站上显示它们. 这样我们的社交媒体专家就可以简单地发推特了, 不必总是采取额外的步骤来复制推特到我们的网站.

在这里,答案涵盖了这个话题的三个关键方面:

  1. What it is每个人都听说过程序员、Twitter和Windows.
  2. What it does, using a concrete example. 这里的示例再次使用了熟悉的概念:在网站上发布tweet和显示某些内容.
  3. Why it’s beneficial, 以此为例,强调“前后”的差异:这样可以节省时间,让员工更多地专注于创造力,而不是单调乏味.

这应该会给你一个寻找什么的想法, 但是可以随意选择一个比“API”更熟悉的技术术语,” if applicable. Communication is one thing, 但如果你的应聘者的答案甚至都不正确,这将是一个明确的危险信号!

申请加入Toptal的发展网络

并享受可靠、稳定、远程 自由软件开发人员职位

Apply as a Freelancer
4.

这是一个简单的编程挑战. 你能试着解决这个问题吗?

示例问题1(较短的时间框架):编写一个函数来计算第n个斐波那契数.

示例问题2(更长的时间框架):编写一个函数,取棋盘上骑士的当前位置, 并返回骑士可能采取的初步行动列表. (That is, 其他件的当前位置不提供, 所以你不能检查骑士自己那边的棋子,也不能让他们的国王容易被俘虏.)

View answer

给候选人一个简单的编程挑战可能看起来微不足道, 但它有几个有用的原因:

  • 这给了你一个机会看看他们在压力下是如何工作的. (让他们在你面前做这件事很重要——你需要雇佣能够在需要的时候在压力下写代码的人!)
  • 这显示了他们的教育基础.
  • 它只是显示了他们是否会写代码,以及他们有多少经验.
  • 根据你选择的挑战类型,它可以帮助你区分技能组合. 这也有助于梳理出他们的科学/数学背景,以及他们是否是一个高水平的思想家.
5.

你用什么编程语言? 你更喜欢哪三个,或者最熟悉哪三个?

View answer

这个问题会让你了解候选人的编程知识, their level of proficiency, 以及他们是否适合你的公司.

GitHub, 世界各地开发人员使用的代码共享网站, 以下列出了2017年底十大最常用的编程语言和技术:

  • JavaScript 动态语言通常用于在网站上添加交互性吗.
  • Python 是一种强大的通用语言,在2018年获得了广泛的普及. 它被广泛用于各种任务, including web development, machine learning, and data analysis.
  • Java (与JavaScript无关)是一种通用的编程语言,用于创建跨平台应用程序.
  • Ruby is a dynamic, object-oriented, 通用的开源编程语言,专注于简单性和生产力. 它主要用于web应用程序,特别是通过 Rails server-side MVC framework.
  • PHP 是一个开源的,服务器端脚本语言用于开发web应用程序.
  • C++ 面向对象的编程语言通常用于操作系统吗, games, and embedded software. 它还可以用于构建更高级的系统,如远程设备和网络管理应用程序.
  • Cascading Style Sheets (CSS)是网络的中流砥柱,用于格式化网页内容. CSS文件有助于定义关键方面(字体、颜色、布局大小、间距等).),以及在网站的多个页面中保持连续的外观和感觉.
  • C# 是微软开发的一种面向对象的语言吗. 它是为提高web开发的生产力而设计的,并且经常与基于xml的web服务一起使用 .NET platform.
  • Go 开源编程语言是为大规模构建而设计的吗, complex software infrastructure. 它也可以被翻译成JavaScript用于前端web开发, 尽管目前这种情况不太常见.
  • C 是一种高级的通用编程语言吗. 最初为编写系统软件而开发的, 现在,它经常用于开发固件或便携式应用程序.
6.

在审查其他团队成员的代码时,您认为需要注意的最重要方面是什么?

View answer

代码审查是软件开发过程的基础, 即使只有一个工程师. 通过提出这个问题,你可以了解应聘者的知识和解决问题的能力, their attention to detail, 以及他们是否能保持对项目的概述.

Here is a sample answer:

“我首先考虑的是安全性、功能性和可读性. 代码是简单的,还是杂乱、臃肿和低效的? 我需要重写或删除多少行不必要的代码? 我检查任何可能导致漏洞的弱点,并确认已满足法规要求.”

每个人都有自己的编码风格,每个开发人员或团队都有特定于其代码库的需求. 有效的代码审查通常有检查清单. 以下是一些你可以考虑的一般性建议:

  • 软件通过了自动和手动测试
  • 代码遵循适用的约定,并且易于理解
  • Code is not duplicated
  • 没有负命名的布尔变量
  • Scrutinize methods with boolean parameters
  • 循环中的代码块越小越好
  • No memory leaks

但比候选人提出的具体观点更重要的是他们这样做的理由. 要小心那些纠结于tab - vs -space的应聘者,而忽略了更关键的工程元素:以上内容的重要性不应该相同.

7.

你认为单元测试是必要的,还是浪费时间?

View answer

每个值得考虑的工程师/开发人员都应该熟悉单元测试. 问这个问题会让你了解他们对这件事的态度, 以及他们在工作过程中给予它的优先级. 他们遵循测试驱动开发(TDD)还是行为驱动开发(BDD) ?, 或者,单元测试是他们为了过程一致性或仅仅是外观的缘故而在之后添加的东西?

通常被大多数行业专业人士视为代码维护和软件开发中的最佳实践, 单元测试通常是整体测试策略的一部分. 它们测试逻辑错误和编码缺陷, 帮助防止错误发展到最终产品. 另外,因为它们是自动化的,它们可以预防 regressions,其中已经修复的错误返回.

8.

作为敏捷软件开发过程的一部分,你有过什么样的经历?

View answer

敏捷软件开发宣言概述了一种基于迭代而不是瀑布模型的方法. 需求和解决方案是通过自组织和跨职能团队及其最终用户的协作生成的. 除此之外,它鼓励灵活的规划风格和对变化的快速反应.

了解开发人员对敏捷开发的看法可以帮助您了解他们如何适应您自己的流程. 思想开放的开发人员也能够看到敏捷过程运行中的缺陷,他们可以提供有价值的反馈,帮助团队的方法成长和发展.

On the other hand, 如果他们坚决反对你的核心流程, 最终可能会有太多的摩擦使他们无法保持高效率.

9.

你对面向对象编程(OOP)有多熟悉??

View answer

20多年来,OOP一直是一种标准约定,它围绕对象而不是操作进行组织, and data rather than logic. 它无处不在,候选人不可能在某个时候不遇到它.

下面是他们应该能够定义的十个术语的例子:

  • 类、对象(以及两者的区别)
  • 方法(例如,与C函数相反)
  • 虚方法,纯虚方法
  • class/static method
  • static/class initializer
  • constructor
  • destructor/finalizer
  • superclass or base class
  • subclass or derived class

NB. 一些公司避免面向对象,而更喜欢使用函数式编程(FP)语言,如 Clojure.

10.

请用最简单的术语解释大0符号.

View answer

大o符号(朗道符号)在计算机科学中用于描述算法的性能或复杂性. 它描述了函数的运行时或空间需求如何随着输入的增长而增长.

具有相同Big-O符号的两个函数往往具有相同的增长率,因此在大输入时具有相同的相对性能.

For example, 冒泡排序算法的平均时间复杂度为O(n^2),而归并排序和堆排序的平均时间复杂度均为O(n log n)。. In average cases, 归并排序和堆排序将展示相似的性能,但它们都优于冒泡排序.

候选人应该能够展示对大o算法复杂性分析基本原理的基本理解.

他们应该知道算法通常分为以下性能类:

  • Constant-time
  • Logarithmic
  • Linear
  • Polynomial
  • Exponential
  • Factorial

它们还应该能够解释为什么给定的操作属于特定的复杂性类.

面试不仅仅是棘手的技术问题, 所以这些只是作为一个指南. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. At the end of the day, 招聘仍然是一门艺术,一门科学,需要大量的工作.

Why Toptal

厌倦了面试候选人? 不知道该问什么才能让你得到一份好工作?

让Toptal为你找到最合适的人.

现在就雇佣一名顶尖的软件开发人员

我们的独家软件开发网络

想找一份软件开发人员的工作?

让Toptal为你找到合适的工作.

Apply as a Software Developer

工作机会从我们的网络

Submit an interview question

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, at the sole discretion of Toptal, LLC.

* All fields are required

Looking for Software Developers?

Looking for Software Developers? 查看Toptal的软件开发人员.

Matthew Newman

Freelance Software Developer

United StatesToptal的自由软件开发人员 Since November 8, 2019

Matthew在数据库管理和软件开发方面拥有超过15年的经验, 专注于全栈web应用程序. 他擅长Django和Vue.拥有在AWS上部署服务器和无服务器环境的专业知识. 他还处理关系数据库和大型数据集.

Show More

Marcela Kashiwagi Silveira

Freelance Software Developer

United StatesToptal的自由软件开发人员 Since June 20, 2012

Marcela是一名经验丰富的网络和移动开发人员,来自巴西,目前居住在硅谷. 她对软件架构有很强的理解,也有很强的数学背景. 她被ZDNet选为巴西十大最具影响力的女性科技创新者之一, Mashable上也提到过, Forbes, and others several times.

Show More

Nate Gibson

Freelance Software Developer

United StatesToptal的自由软件开发人员 Since September 13, 2022

Nate是一名高技能的软件开发人员,他在2010年开始了他在商业智能领域的职业生涯,此前他一直将编程作为一种爱好. 2013年从计算机科学专业毕业后, 他主要从事web应用程序开发, ERP (NetSuite) customization, and system integrations. Proficient in several languages, frameworks, and tools, Nate also spearheaded, architected, 作为首席开发者开发了无数个项目.

Show More

Toptal Connects the Top 3% 世界各地的自由职业人才.

Join the Toptal community.

Learn more