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

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

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

Interview Questions

1.

跟我们说说你最近做的项目吧. Was it completed successfully? Explain how you contributed to its success and how you handled any obstacles you may have run into.

View answer

这个问题应该让你深入了解候选人对项目的整体贡献, 他们的管理能力和团队合作能力, 以及他们与项目管理和其他利益相关者的互动. 软件项目几乎总是面临障碍和复杂性, 并且能够识别障碍, 快速有效地解决问题, and get the job done properly and within deadline is a key attribute for a software engineer/developer.

2.

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

View answer

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

Critical thinkers often also have an explorative mindset which can lead to innovation and the improvement of production systems and processes.

3.

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

View answer

良好的沟通能力是应聘者应该具备的最重要的技能之一. A question like this will give you an idea of how the candidate handles the most difficult or complex conversations.

应聘者可能会这样回答:

An API (应用程序编程接口)可用于基于web的系统, software library, computer hardware, 操作系统或数据库系统. It is a set of rules (code) and specifications that software programs can follow in order to communicate. 简单地说,它作为不同程序之间的接口,促进它们之间的交互.

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

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

这个稍微好一点:没有那么多学术论调, and some precision was traded for slightly more relatable terms like “web site” over “web-based system” and “desktop software” over “software library”. However, 它仍然过于技术性,因为它必须有一个侧面来定义操作系统, 观众可能不太熟悉.

Compare that with:

An API tells programmers how to automate a product—anything from web apps like Twitter all the way down to Windows itself. For example, I could use Twitter’s API to fetch our company’s most recent tweets and then display them on our website. 这样我们的社交媒体专家就可以简单地发推特了, 不必总是采取额外的步骤来复制推特到我们的网站.

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

  1. What it is每个人都听说过程序员、Twitter和Windows.
  2. What it does, using a concrete example. 这里的示例再次使用了熟悉的概念:在网站上发布tweet和显示某些内容.
  3. Why it’s beneficial, building on the example and highlighting the “before and after” difference: It saves time and lets employees focus more on creativity over monotony.

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

申请加入Toptal的发展网络

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

Apply as a Freelancer
4.

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

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

Example question 2 (longer time frame): Write a function that takes the current position of a knight on a chessboard, 并返回骑士可能采取的初步行动列表. (That is, 其他件的当前位置不提供, so you can’t check against capturing pieces on the knight’s own side nor making their king vulnerable to capture.)

View answer

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

  • 这给了你一个机会看看他们在压力下是如何工作的. (It’s important to have them do this in front of you—you need to hire people who can write code under stress when needed!)
  • 这显示了他们的教育基础.
  • 它只是显示了他们是否会写代码,以及他们有多少经验.
  • 根据你选择的挑战类型,它可以帮助你区分技能组合. It also helps tease out their scientific/mathematical background and whether they are a high-level thinker.
5.

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

View answer

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

GitHub, 世界各地开发人员使用的代码共享网站, listed the following as ten of the most commonly used programming languages and technologies at the end of 2017:

  • JavaScript 动态语言通常用于在网站上添加交互性吗.
  • Python 是一种强大的通用语言,在2018年获得了广泛的普及. 它被广泛用于各种任务, including web development, machine learning, and data analysis.
  • Java (unrelated to JavaScript) is a versatile general-purpose programming language used to create cross-platform applications.
  • Ruby is a dynamic, object-oriented, 通用的开源编程语言,专注于简单性和生产力. 它主要用于web应用程序,特别是通过 Rails server-side MVC framework.
  • PHP 是一个开源的,服务器端脚本语言用于开发web应用程序.
  • C++ 面向对象的编程语言通常用于操作系统吗, games, and embedded software. It can also be used for building higher-level systems such as remote-device and network management applications.
  • Cascading Style Sheets (CSS)是网络的中流砥柱,用于格式化网页内容. CSS文件有助于定义关键方面(字体、颜色、布局大小、间距等).),以及在网站的多个页面中保持连续的外观和感觉.
  • C# 是微软开发的一种面向对象的语言吗. It is designed for improving productivity in web development and is often used with XML-based web services on the .NET platform.
  • Go 开源编程语言是为大规模构建而设计的吗, 复杂的软件基础架构. 它也可以被翻译成JavaScript用于前端web开发, 尽管目前这种情况不太常见.
  • C 是一种高级的通用编程语言吗. 最初为编写系统软件而开发的, 现在,它经常用于开发固件或便携式应用程序.
6.

What do you think are the most important aspects to pay attention to when reviewing another team member’s code?

View answer

代码审查是软件开发过程的基础, 即使只有一个工程师. By posing this question you’ll get an idea of the candidate’s knowledge and problem-solving skills, their attention to detail, 以及他们是否能保持对项目的概述.

Here is a sample answer:

“我首先考虑的是安全性、功能性和可读性. 代码是简单的,还是杂乱、臃肿和低效的? 我需要重写或删除多少行不必要的代码? I check for any weaknesses that could cause vulnerabilities and confirm that regulatory requirements have been met.”

Everyone has their own coding style and every developer or team will have requirements that are specific to their codebase. 有效的代码审查通常有检查清单. 以下是一些你可以考虑的一般性建议:

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

但比候选人提出的具体观点更重要的是他们这样做的理由. Be wary of candidates who get stuck on tabs-versus-spaces bikeshedding at the expense of more crucial engineering elements: The above items shouldn’t all carry the same weight.

7.

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

View answer

每个值得考虑的工程师/开发人员都应该熟悉单元测试. 问这个问题会让你了解他们对这件事的态度, 以及他们在工作过程中给予它的优先级. 他们遵循测试驱动开发(TDD)还是行为驱动开发(BDD) ?, or are unit tests something they tack on afterward for the sake of process conformance or mere appearances?

Typically regarded by most industry professionals as being a best practice in code maintenance and software development, 单元测试通常是整体测试策略的一部分. 它们测试逻辑错误和编码缺陷, 帮助防止错误发展到最终产品. 另外,因为它们是自动化的,它们可以预防 regressions,其中已经修复的错误返回.

8.

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

View answer

The Manifesto for Agile Software Development outlines an approach based on iterations rather than a waterfall model. Requirements and solutions are generated through the collaboration of self-organizing and cross-functional teams and their end users. 除此之外,它鼓励灵活的规划风格和对变化的快速反应.

Knowing how a developer feels about agile development can help you understand how they will fit into your own process. Open-minded developers that are also able to see flaws in how agile processes have been run can provide valuable feedback to help your team’s methodology grow and evolve.

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

9.

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

View answer

OOP has been a standard convention for over 20 years and is organized around objects rather than actions, 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

Big-O notation (Landau’s symbol) is used in computer science to describe the performance or complexity of an algorithm. 它描述了函数的运行时或空间需求如何随着输入的增长而增长.

Two functions with the same Big-O notation will tend to have the same growth rate and thus have the same relative performance with large inputs.

For example, the bubble sort algorithm has an average time complexity of O(n^2) while merge sort and heap sort both have an average complexity of O(n log n). In average cases, merge sort and heap sort will demonstrate similar performance while they will both outperform bubble sort.

Candidates should be able to demonstrate a basic understanding of the fundamentals of big-O algorithmic complexity analysis.

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

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

They should also be able to explain why a given operation falls into a particular complexity class.

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

Why Toptal

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

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

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

我们的独家软件开发网络

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

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

Apply as a Software Developer

工作机会从我们的网络

Submit an interview question

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, 由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是一名经验丰富的网络和移动开发人员,来自巴西,目前居住在硅谷. She has a very strong understanding of software architecture and also a very strong mathematical background. 她被ZDNet选为巴西十大最具影响力的女性科技创新者之一, Mashable上也提到过, Forbes, and others several times.

Show More

Nate Gibson

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

Nate is a highly skilled software developer who started his professional career in business intelligence in 2010 after years of programming as a hobby. 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