技術者・SE・プログラマ面接時の技術的な質問事項というエントリをはてブで見かけたのだが、私もjavaプログラマーの面接を割とよくやっているので、よく質問する内容をまとめてみた。
(ちなみに、基本的にコーディング面接の形態を取っている)

プロジェクトの性質にもよると思うが、私の場合には、情報処理技術者試験的に基礎が満遍なく抑えられているかどうかよりも、
  • すぐ答えが見つからないような課題に対して、きちんと自分でやり方を考え、対応することができるか
  • 「変な」コードをコミットしたりしないか(見つけにくいバグを混入させるとか、汚いとか、遅いとか)
といった点を重視している。


■ 開発実績編
まず、何を知っているかよりも、どんなものを作れるか、どんなことができるか、という質問。
ここで強烈な回答が来る人は、たいていここより下の質問は「あー、はいはい」という感じでサラッと答えてくることが多い。
  • これまでに携わってきた開発プロジェクトの中で、一番の自信作と言えるものはどんなものですか?
    • その中であなたが果たした役割は?
    • その中で特に工夫した点、解決が困難だと思われた課題に対してとったアプローチは?

■ プログラミング基礎編
次に、言語に依存しないプログラミングの基本の部分で、分かっていないとクリティカルなバグが混入する可能性があるような内容についての確認。
  • for (int i = 0; i < list.getLength(); i++) {}の潜在的パフォーマンスボトルネック
    (実際、これが原因でパフォーマンスが数倍遅くなっていた事例を見たことがある)
  • 参照渡し/値渡し関係の質問
  • switch fall throughなどのうっかりミスが出やすいケースでの問題箇所の指摘

■ オブジェクト指向編
次に、固有の言語に依存しないオブジェクト指向の理解の確認。
ごく基本的な内容だが、現実問題として、「Javaを5年やってます」というような人でもこの手の質問にきちんと答えられないことがたまにある。
  • クラスとインスタンスの違いの説明
  • インターフェースと抽象クラスをどんな基準で使い分けているか
  • 継承とコンポジションをどんな基準で使い分けているか

■ デザインパターン編
デザインパターンは基本的にはコミュニケーションツール(一言で説明できてすぐ伝わる)としての位置づけが重要だと思っているので、すべて知っていないとNG、ということはまったくないが、普段普通に使っている、という人の場合には、お互いのレベルを見るのにもってこいのディスカッション材料なので、よく面接の時に話題に上る。
  • Singletonパターンとオブジェクト生成コスト、Singletonパターンのマルチスレッド対応について、注意すべき点を説明してください
  • Observerパターンでイベント発火順序が重要な理由を説明してください
  • Mediatorパターンでメソッドが多くなりすぎてきたときにどのような工夫をしますか
  • Visitorパターンを使うべき場合と、再帰的ループで対処する場合とを、どのように使い分けますか
  • Compositeパターンが時として「オブジェクト指向的に気持ち悪く」なるのは何故ですか

■ Java編
次に、Java経験者の場合に質問する、Java関係の質問。
基本的なものからトリッキーなものまで、ここでは下記のような内容を思いつくままにランダムに質問してみることにしている。
  • static/finalの意味
  • List/Set/Mapの違い
  • new Boolean(true)、new Integer(5)などがあまり推奨されない理由
  • 防御的コピーの話
  • Javaでのディープコピーの実装方法としてどのようなものが考えられますか(普通にclone()を実装、直列化を利用etc.)
  • バージョンの異なる同一FQNのクラスを利用する必要があるとします。どのような対応方法が考えられますか(VMをわける→その場合の通信方法、クラスローダーを自作するetc.)
  • スレッドプログラミング関係は得意ですか? → 答えがyesだとその場で簡単なペアプロ開始

■ その他
  • その他、できるだけ相手の得意分野に合わせて都度コーディング面接。

解答編を書きました。

■ 関連エントリ
プログラマーにとっての読み書きそろばん
そして、ペア・プログラミングが始まる
アプレッソのジョエルテスト判定結果



オブジェクト指向における再利用のためのデザインパターン
エリック ガンマ ラルフ ジョンソン
リチャード ヘルム ジョン ブリシディース
ソフトバンククリエイティブ
売り上げランキング: 40554
おすすめ度の平均: 4.5
5 設計の再利用
5 設計をする人は一度見る価値あります
5 オブジェクト指向言語を用いた開発者に必携の本
5 原書は未だにトップランク
5 理解しておくとよい本