2009年02月24日

プログラマー面接時の技術的な質問事項(アプレッソ版)

Check このエントリーをはてなブックマークに追加
技術者・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 理解しておくとよい本


Check このエントリーをはてなブックマークに追加
lalha at 16:38 │プログラミング  │Comments(3)TrackBack(3)

トラックバックURL

この記事へのトラックバック

1. プログラマー面接時の技術的な質問事項(キャリアカウンセラー版)  [ 3_01-キャリア形成のお手伝い ]   2009年02月26日 22:06
はてブ経由で知ったプログラマー面接時の技術的な質問事項(アプレッソ版) というエ...
2. [java]RE: プログラマー面接時の技術的な質問事項  [ SiroKuro Page ]   2009年02月27日 17:18
小野和俊のブログ:プログラマー面接時の技術的な質問事項(アプレッソ版) に回答してみよう。まだ学生だし、たぶん間違えているけど、気にしない。 開発実績編 これまでに携わってきた開発プロジェクトの中で、一番の自信作と言えるものはどんなものですか? 実務経験は無い
3. [IT]プロジェクトメンバ採用面接で不景気を感じる  [ プログラマとSEのあいだ ]   2009年03月27日 01:05
プロジェクトメンバ入れ替えのために、採用面接をやったのですが、 少ない採用枠に多数の応募という状況で、厳しい状況。 必要なスキルは、技術力は当然で、顧客折衝も出来ないといけないし、もちろん設計書も書けるよね? とかいうもの。 経験が浅い人や新人は、門前払いと

この記事へのコメント

1. Posted by th.   2009年02月25日 01:29
単純に知識を確かめるだけな面接よりも, このような体系立てた理解力と経験値を問う面接の方が良いですね. 枝葉の知識はその場で検索できれば良いので, それよりは理解力と頭のキレを重視したいです.
2. Posted by iPhoner   2009年02月27日 00:55
何か、一発で論理的な思考かどうかわかる方法とかないですかね。
是非面接で取り入れたい
3. Posted by harumakiii   2011年07月14日 17:42
おもしろかったです

この記事にコメントする
(スパム対策のため、英数字のみからなるコメントは自動削除されますのでご注意ください。)

名前:
URL:
  情報を記憶: 評価: 顔