← 返回信息流
AI 资讯Hacker News·1 小时前

一道我喜欢的软件工程面试题:计算中位数

原标题:A software engineering interview question I like: computing the median

速览

本文介绍了一道经典的软件工程面试题:计算中位数。作者阐述了该问题的多种解法及其应用场景,强调其考察候选人的算法思维与实现能力。该问题简单但灵活,非常适合筛选编程基础扎实的候选人。

AI 深度解读

背景

在软件工程面试中,面试官常常需要设计既能快速筛选候选人基础编程能力,又能深入考察工程思维的问题。传统“谜题式”问题(如脑筋急转弯)往往与日常工作脱节,价值有限。本文作者 Kris Shamloo 介绍了自己偏好的一道面试题——计算中位数(median),并阐述了为什么这道看似简单的题目能覆盖多个关键考察维度。该文最初发表于 Hacker News,反映了技术面试中一种务实、分层式的评估思路。

核心内容

面试题要求:编写一个函数,接收一个数字数组,返回该数组的中位数。作者指出,这道题包含多个层次,从最基本的“Fizz Buzz”级别信号(候选人能否实际编程)到更深入的讨论。

  • 最低要求:候选人对数组求值(如排序、取中间值)是基本能力,能证明其具备编程基础。
  • 立即出现的设计问题:数据必须排序。函数内部是否应该自行排序?还是由调用方负责?如果数组是以引用传递(Python 中 pass-by-reference),修改原数组是否可接受?API 设计如何影响性能?
  • 差一错误陷阱:计算中位数时容易遇到索引越界或取错值的问题。作者不在意候选人是否掉入陷阱,但能观察其调试过程。
  • 分支逻辑:数组长度为偶数时,需取中间两个数的平均值;长度为奇数时,直接取中间数。
  • 统计讨论:可以引申到为何中位数在多数情况下优于平均数(均值)——例如对异常值更稳健。
  • 可测试性加分:题目本身易于编写单元测试,候选人可借此展示测试意识。
  • 标准库知识:Python 的 statistics 模块中有 median 函数,候选人若提到或使用标准库可加分。

作者还给出了一个带有讨论注释的 Python 实现示例(见原文),其中包含空列表处理(抛出 ValueError)、排序方式选择(sorted() 返回新列表 vs numbers.sort() 就地修改)、以及奇偶分支逻辑。

关键要点

  • 基础能力验证:这道题能快速判断候选人是否会写基本函数、处理数组和条件分支。
  • API 设计权衡:排序是函数内部完成还是外部完成?是否允许修改输入?这反映了对副作用的考虑和接口设计意识。
  • 调试与边界情况:差一错误是常见陷阱,观察候选人如何定位和修复问题能评估其调试能力。
  • 统计知识延伸:中位数与平均数的对比可以引出数据分布、稳健性等深入讨论。
  • 测试与代码质量:题目天然适合编写测试用例(空列表、单元素、奇偶长度等),候选人若能主动展示测试意识是加分项。
  • 标准库利用:Python 的 statistics.median 可直接调用,但使用它可能掩盖对底层实现的理解;面试官可借此探讨“何时重用库、何时自行实现”。
  • 空列表处理:抛出异常还是返回哨兵值?这是设计决策的体现。

意义与影响

这道题体现了技术面试中“简单但深入”的设计哲学。它并非考察冷门算法或复杂数据结构,而是围绕日常编程中常见的“排序+取中位数”任务,构建多个讨论维度。对于面试官而言,它可以在短时间内评估候选人的编程基础、代码风格、调试能力、统计常识以及工程决策意识。对于候选人,它提供了一个展示自己思考过程的机会,而非仅仅输出正确答案。这种面试方式有助于减少对“刷题”的依赖,更贴近真实工作中的问题解决场景,因此受到不少技术团队的认可。

查看原文 →krisshamloo.com