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

Lobsters Hottest 新闻

摘要

作者描述了他们最喜欢的软件工程面试题:计算数组的中位数。他们讨论了这个问题在评估候选人编程技能时的多个角度,包括排序、边界情况、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

GitHub Trending (daily)

一份全面的、为期数月的软件工程面试学习计划,针对大型科技公司,最初由John Washam创建并被开发者社区广泛采用。

@vintcessun: 一早翻到一个有意思的项目,改变了我对面试准备的认知。一直以为大厂面试刷题就够了,但本质上它考察的是完整的计算机科学知识体系。这个项目把离散的知识点串成了一个系统计划,从 Big-O、数据结构、算法到系统设计、面试技巧全覆盖,甚至包含如何写…

X AI KOLs Timeline

A popular GitHub project providing a comprehensive multi-month study plan for software engineering interviews, covering CS fundamentals, algorithms, system design, and resume tips.