Pythonの面接質問
文責 Aaron Cao · 更新
想定すべきは3つの層です。ミュータビリティ、ジェネレーター、デコレーターといった言語の仕組み、GILのようなランタイムの挙動、そしてデータ構造に関する実践的なコーディングです。不合格になる主な原因は、構文の誤りではなく「なぜ」の説明が浅いことにあります。
繰り返し出てくる質問
200問のPythonの質問リストを一通りこなすのは、努力しているようで面接の結果を左右することはほとんどありません。このセクションでは、電話スクリーニングや技術面接で繰り返し登場するごく一部の質問に絞り込み、優れた回答に何が含まれるかを示します。ごく少数の言語機能が、評価シグナルの大部分を占めています。
- ミュータブルなデフォルト引数。なぜ
def f(x=[])は呼び出しのたびに値が蓄積されるのか?デフォルト値は関数が定義されるときに一度だけ評価され、呼び出しごとには評価されません。 - ジェネレーターとリスト。
yieldがリストを作るより優れているのはどんなときか?シーケンスが大きいとき、または途中で読み込みをやめる可能性があるときです。 - デコレーター。デコレーターは実際には何を返すのか、そしてなぜラッパーには
functools.wrapsが必要なのか? - GIL。なぜCPU負荷の高いスレッドはCPythonでスケールしないのか、代わりに何を使うのか?
- 浅いコピーと深いコピー。ネストした構造をスライスでコピーすると何が壊れるのか?
- 同一性と等価性。シェルで小さな整数に対して
isをテストすると、誤解を招く結果になる理由。
合格と不合格を分けるもの
2人の候補者が同じ正しいGILの定義を答えても、次のラウンドに進めるのは片方だけということがあります。違いは通常、2文目にあります。
あるパブリッククラウドベンダーでL5のバックエンドエンジニア職に応募していたエンジニアは、負荷がかかったときにサービスが遅くなる理由を尋ねられました。彼はまずGILを挙げ、そこで終わらせずに続けました。ホットパスはJSONパースであり、そのためスレッドは適切なツールではなく、その処理をプロセスプールに移すことでスループットが回復した、と。制約を名指しできれば部分点にはなります。それを意思決定に結び付けたことで、そのラウンドを突破できました。
それぞれの回答は3つの要素で組み立てましょう。その機能が何をするか、なぜ存在するのか、そしてどんなときにそれを避けるか。3つ目の要素はほとんどの候補者が省略しがちですが、まさにそこで判断力が示されます。コーディング、行動面接、システム設計面接に関する他のページは面接の種類にまとめられています。
暗記に頼らない準備方法
答えを読むことと答えを口に出すことは別のスキルであり、面接で試されるのは後者だけです。時間を計りながら、実際の通話で使うのと同じ言葉で声に出して練習しましょう。
- 繰り返し出る質問それぞれについて、回答を3文で書き出し、それから何も見ずに口に出してみましょう。
- 日常的に使う機能を2つ選び、それぞれについて正直な限界を用意しましょう。自分のツールを批判できることは、経験の証として伝わります。
- Pythonの挙動に驚かされ、その理由を突き止めた実際のデバッグの体験談を1つ用意しましょう。
- 実践パートは別に練習しましょう。辞書、集合、キー関数によるソート、文字列処理は、多くのスクリーニングで大きな割合を占めます。
本番の前にAI面接官相手にタイムを計った模擬をしたい場合は、模擬面接ページをご覧ください。
ライブアシスタントが役立つ場面と役立たない場面
SubcueAIはmacOSとWindows向けのネイティブデスクトップアプリです。通話の両側の音声をキャプチャしてリアルタイムで文字起こしを行い、あなたのマシンにローカルにとどまるフローティングオーバーレイ上に構成の骨子を表示します。そのため会議に参加者やボットとして加わることはありません。Pythonの面接では、役立つ出力は完成した回答ではなく構成のヒントです。詳細な内容は自分自身で組み立てる必要があります。なぜなら、フォローアップの質問はあなたが今説明したコードについて聞かれるからです。
できることよりも、正直な限界のほうが重要です。画面を共有すれば、その画面に映っているものはすべて共有されます。監督付きの評価プラットフォーム上や、会社が管理するデバイス上で行われる面接では、アシスタントは対象外です。セットアップと権限についてはチュートリアルページで解説しています。