我喜欢的一个软件工程面试题:计算中位数
摘要
作者描述了他们最喜欢的软件工程面试题:计算数组的中位数。他们讨论了这个问题在评估候选人编程技能时的多个角度,包括排序、边界情况、API设计和统计理解。
<p><a href="https://lobste.rs/s/8kxouk/software_engineering_interview">评论</a></p>
查看缓存全文
缓存时间: 2026/07/08 04:24
# Kris Shamloo
来源:https://krisshamloo.com/blog/007
### 我喜欢的一个软件工程面试题:计算中位数 (https://krisshamloo.com/blog/007)
2026-05-03
我在进行技术面试时,手头准备了一些问题。它们风格类似。我不问谜题类问题,觉得价值不高。相反,我提问一些直接但带有多个角度可以深入探讨的问题。
于是就有了这个平凡的中位数。
写一个函数,接收一个数字数组,返回中位数。
- 最基本要求:这能提供一个类似“Fizz Buzz”的信号,表明候选人确实能编程。对数组值进行归约属于基础要求。
- 一上来就有的问题:数字需要排序。函数应该自己排序吗?还是由调用方排序?如果数组是通过引用传入的,修改它是否可以?API 设计如何影响性能?
- 它有一个差一错误陷阱。注意,我其实不在乎是否有人掉入差一错误陷阱,我自己就常犯,但通常能借此观察候选人调试一个小问题。
- 它有一个分支:偶数长度数组 vs 奇数长度数组。
- 可以引导讨论统计学,以及为什么在大多数情况下中位数可能比平均数更受青睐。
- 让候选人有额外加分的机会:因为这个问题非常容易测试。
- 让候选人有展示标准库知识的机会,通过 `statistics` (https://docs.python.org/3/library/statistics.html#module-statistics)。
下面是一个带讨论注释的 Python 实现。
```
def median(numbers: list[float]) -> float:
# 处理空列表的情况
if not numbers:
raise ValueError("median called with empty list")
# 排序并复制以避免修改原始数组
numbers = sorted(numbers)
length = len(numbers)
mid = length // 2
# 偶数长度 vs 奇数长度
if length % 2 == 0:
return (numbers[mid - 1] + numbers[mid]) / 2.0
else:
return numbers[mid]
```
相似文章
jwasham/coding-interview-university
一份全面的、为期数月的软件工程面试学习计划,针对大型科技公司,最初由John Washam创建并被开发者社区广泛采用。
我1994年微软实习面试中的四道编程题(2023)
2023年的一篇回顾性博客文章,讲述了作者在1994年微软实习面试中遇到的四道编程题,分享了题目和背景。
@vintcessun: 一早翻到一个有意思的项目,改变了我对面试准备的认知。一直以为大厂面试刷题就够了,但本质上它考察的是完整的计算机科学知识体系。这个项目把离散的知识点串成了一个系统计划,从 Big-O、数据结构、算法到系统设计、面试技巧全覆盖,甚至包含如何写…
A popular GitHub project providing a comprehensive multi-month study plan for software engineering interviews, covering CS fundamentals, algorithms, system design, and resume tips.
@freeman1266: 面试 AI Coding,我最喜欢的一条面试题: 什么样的prompt 算得上优秀的prompt ?
该内容分享了作者在 AI 编程面试中最喜欢问的一个问题:什么样的 prompt 才算得上优秀的 prompt。
@GergelyOrosz: 相当有趣的是,Hillel Wayne 曾怀疑软件工程是否算“真正的”工程学,于是去采访了“真正的”工程师…
Gergely Orosz 评论了 Hillel Wayne 对其他领域工程师的采访,这些工程师惊讶地了解到版本控制——一项软件工程师习以为常的做法。