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の面接では、役立つ出力は完成した回答ではなく構成のヒントです。詳細な内容は自分自身で組み立てる必要があります。なぜなら、フォローアップの質問はあなたが今説明したコードについて聞かれるからです。

できることよりも、正直な限界のほうが重要です。画面を共有すれば、その画面に映っているものはすべて共有されます。監督付きの評価プラットフォーム上や、会社が管理するデバイス上で行われる面接では、アシスタントは対象外です。セットアップと権限についてはチュートリアルページで解説しています。

よくある質問

Pythonの面接では今でもGILについて聞かれますか?

はい、そして多くの場合それは代理質問として使われます。面接官が知りたいのは、CPU負荷の高いワークロードとI/O負荷の高いワークロードを見分け、それに応じてスレッド、プロセス、非同期のいずれかを選べるかどうかです。定義だけでは半分しか答えたことになりません。

Pythonの豆知識はどのくらい暗記すべきですか?

思っているより少なくて済みます。面接官がめったに使われない構文を覚えていることに報酬を与えることはほとんどなく、自分で説明できる挙動について正しく推論できることに報酬を与えます。使わない機能の広さより、実際に使う機能の深さを優先しましょう。

Pythonの面接にはコーディング問題も含まれますか?

たいてい含まれます。多くのスクリーニングでは、ディスカッション形式の質問に加えて、辞書、集合、ソート、文字列処理などの小さな実践問題が組み合わされます。タイピングする前に自分のアプローチを話しながら進めることが期待されており、沈黙は悪く評価されます。

答えがわからないときは正直に認めるべきですか?

はい、そのうえでどうやって調べるかを示しましょう。ある機能を使ったことがないと伝え、その挙動をどう確認するかを説明するほうが、面接官にすぐ訂正されてしまう自信満々の当て推量よりも強い回答になります。

PythonのコーディングインタビューでAIアシスタントを使ってもいいですか?

それは完全に、面接の形式とあなたが同意したルール次第です。監督付きプラットフォーム、画面共有、会社が管理するデバイス上では対象外です。自分自身で行う練習ラウンドであれば、そのような制約はありません。

関連する質問

← 詳しく見る: 面接の種類