キャリア
私が好きなソフトウェアエンジニアリングの面接問題:中央値の計算
A software engineering interview question I like: computing the median (krisshamloo.com)
要約
著者は、ソフトウェアエンジニアの面接でよく使う「数値配列の中央値を計算する関数を作成する」という問題を気に入っている。この問題は、基本的なプログラミング能力の確認だけでなく、ソートの必要性、API設計、ミューテーション、エッジケース(空のリスト、偶数長・奇数長)、そしてなぜ平均値よりも中央値が好まれるのかといった統計的な議論まで、候補者の多角的なスキルや思考プロセスを引き出すことができる。
全文翻訳
私が好きなソフトウェアエンジニアリングの面接問題:中央値の計算
2026-05-03
候補者に技術面接を行う際、私はいくつかの質問を用意しています。それらはすべて似たような性質を持っています。パズル問題は好きではありません。価値が低いと感じるからです。代わりに、率直でありながら、より深いトピックを探求するためのいくつかの側面を持つ質問をします。
そこで登場するのが、謙虚な中央値です。
数値の配列を受け取り、中央値を返す関数を書いてください。
最低限、これにより候補者が実際にプログラミングできるかどうかの「Fizz Buzz」のようなシグナルが得られます。値の配列を削減することは、基本的なスキルです。
最初から、数値はソートされている必要があります。関数がソートすべきでしょうか?呼び出し元がソートすべきでしょうか?配列が参照で渡された場合、ミューテーションしても良いのでしょうか?API設計はパフォーマンスにどのように影響しますか?
オフバイワン(off-by-one)のエラーの落とし穴があります。誰かがオフバイワンのエラーに陥っても、私は気にしません。私もよく陥りますが、候補者が小さな問題をデバッグするのを見る機会はよくあります。
分岐があります。要素数が偶数の配列と奇数の配列です。
ほとんどの場合、なぜ平均値よりも中央値を好むのかについての統計的な議論につながる可能性があります。
テストが容易であるため、候補者が追加のポイントを獲得する機会を与えます。
統計を通じて標準ライブラリの知識を示す機会を候補者に与えます。
議論コメント付きのPython実装を以下に示します。
def median(numbers: list[float]) -> float:
# リストが空の場合、どうすべきでしょうか?
# 例外を発生させる? センチネル値を返す?
if not numbers:
raise ValueError("median called with empty list")
# Pythonは参照渡しです。sorted()とnumbers.sort()の
# 意味合いの違いは何でしょうか?
numbers = sorted(numbers)
length = len(numbers)
mid = length // 2
# 高品質な候補者は、is_evenライブラリ関数を取得するために
# 1,000個の依存関係を勇敢にインポートするでしょう。
if length % 2 == 0:
return (numbers[mid - 1] + numbers[mid]) / 2.0
else:
return numbers[mid]
Copyright © 2010–2026 Kris Shamloo
Feed: https://krisshamloo.com/feed