デベロッパー

デベロッパー

Java 関連職の面接を受ける際の心構え

Liviu Tudor
 
 
Java 業界にいるわれわれの多くは必ずこれを経験したはずだ。次の仕事を決める面接試験だ。また、多くは「完璧な面接」に備えるためのヒントを求めてインターネットのいつもの場所をチェックしたはずだ。

もしあなたが筆者と同じであれば、あなたもお決まりの「アドバイス」(筆者が個人的には役立つと思ったことのない種類のアドバイス)は見つかったはずだ。意気込みを見せ、質問し、面接前に会社のウェブサイトを必ず研究するといったアドバイスだ。

現実問題として、開発者はほとんどの場合が代理人経由で転職するため、職種のある一面を扮装している(もしくは割愛さえしている)かどうかなど事前には分からない。職種の正確な内容を探り出すための質問をしないのはバカげている。

次に、どの会社のウェブサイトでも調査することは可能で、多くの場合は「弊社はこの分野で世界トップです」とか「弊社はお客様のポテンシャルを引き上げることに最大の努力を払います」といった PR 文を目にする。これらは彼らの仕事や、何よりもあなたが関心を持っているであろうその遂行方法に関するあやふやな知識を与えるだけだ。したがって、既に述べたように筆者は前述のアドバイスの大部分は(少なくとも IT 業界で働く場合)ほとんど使いものにならないか余分だと考えている。以下に述べることは、面接官と受験者の両方を経験した筆者からのアドバイスである。

Java の面接でぜひすべきこと

受験者の場合

最近はとにかく Spring と Struts であることを知っておきたい。ちょっと前まではそれが EJB と CORBA だった。これらの技術の「トレンド」を注視し、使ったことがあれば職歴(あるいは経歴書)に必ず入れること。多くの場合は最高の職歴データベースを持っていない人材派遣会社とやりとりすることになる(おそらく PHP で書かれたものではないだろうか)ので、これらの用語を検索していて、あなたが完璧に適任でも職歴を見落とされるかもしれない。さらに具体的に言うと、職歴のなかには必ず「J2EE」を入れること。採用担当者の多くは JSP が J2EE の一部であることなど全く分かっていないからだ。

開発方法論やツールに重点を置く企業が増えていることを理解したい。必要なのはフレームワーク、ライブラリ、そして技術だけではないのだ。あなたのバックグラウンドが RUP でも、これまでずっと Agile/XP を採用していても、面接と職歴では必ずそこを強調することだ。継続統合、構築ツール、さらには使用した IDE さえ、経験があれば言及すること。多くの職種では Agile、ANT、CruiseControl、JUnit、および Eclipse が必須条件になることが多いようだ。

インフラに注意すること。前言に多少関係することだが、Java では一度書いたものがどこでも動作するのだが、ホスト OS 上で何らかのウェブコンテナが動作することになるインフラに関しては残念ながら完全にそのようになることはない。Oracle 9あるいは10を UNIX 系プラットフォームと Windows の両方で使ったことがあり、導入やコンフィギュレーションに関与したことがあるなら、(その職種に関連するなら)必ず面接ですべてを話すようにしたい。

注意を払うこと。どのような職種が求められているのかを探り出すには、聞かれている質問に注意を払うことだ。Hibernate でテーブルにビーンをマッピングする方法を聞いてきたら、既存のコードの保守をして、それを別のプラットフォームに移植するというよりも単純なコーディング作業が求められていることを意味する。Class.forName が機能しない理由を聞かれたら、問題解決のできる人材を捜しているものと思われ、顧客サイトで自社製品の保守作業を行わなければならないのかもしれない。

特定の技術について会社がそれを採用することにした理由を聞くこと。「その方が良かった」などという、古いスタイルの CORBA を(永遠に)使い続けなければならなくなるような事実を隠してしまうかもしれない回答より、SOAP ベースのアプローチの方が優れたソリューションである理由の説明があれば、その会社が新しいアイデアの評価を進めることにオープンであることが分かる。

面接官の場合

自分が必要としているのが科学技術者なのか、それともフレームワークに関して寛容な人材なのかを決めること。Struts の熱心な支持者は別の技術に移行するときにあきらめの悪さを露呈する(もしかしたら最初から考えを拒絶する)が、寛容な人材ならば技術の変更に関してかなりオープンだ。したがって、製品の別プラットフォームへの移行が予想されているのかどうか、そしてその影響を認識しているのかどうかを事前に知っておく必要がある。

即席入門書の棒読みにならない形で言い換えて質問すること。われわれの多くは、Hashtable は同期されていて、HashMap は同期されていないことは知っている。しかし、この質問(と回答も)は(少なくとも)数十か所のサイトにある。質問は「複数のスレッドによって同時に使用およびアップデートされる辞書を持ったコンポーネントをアプリケーションにインプリメントする場合、この辞書データを格納するのにどのコレクションクラスを使うだろうか? 」のように言い直すようにしたい。 こうすれば、この話題が大きく広がっても同期/非同期の問題には間違いなく触れられるだろう。

候補者をどのように活用するのか考えること。候補者が古い(レガシー? )コードのメンテナンスを任すのか、自社製品の新しい「派生物」に関与させるのか、あるいは1つの製品から次の製品への移行に関与させるのかどうかを相当慎重に考えること。その職種が、おそらくゼロから書かれた(新しい) Simple タグしか扱わないのであれば、taglib に関連する Classic タグの詳細を聞いても意味がない。しかし、もし候補者がコードベースの Simple タグモデルへの移植に関与するのであれば、おそらく両分野のしっかりした訓練が必要になるだろう。

現在は、何らかのバックエンドストレージ(つまりデータベース)のないアプリケーションを持つことはほとんど不可能だ。Java の世界では Hibernate が多くのことを処理するが、候補者に SQL の基本的な質問をしておく価値はあるだろう。

候補者がこれまでのプロジェクトで XML を使ったことがある可能性は高い。しかし、XML を採用する判断が下された理由をその候補者は知っているだろうか?  代わりにシリアル化オブジェクトを使わないのはなぜなのだろうか? これに関連した質問をすれば、XML の良い点と悪い点の両方に関する受験者の理解度が多数明らかになる。DOM/SAX に話題が及ぶ可能性も高く、Web サービスにまで言及されるかもしれない。

面接で絶対にしてはならないこと

受験者の場合:

別の言語/技術(C++や PHP)が関係する前職についてはあまり多く話さないこと。そのようなことをすると、たとえそれが Java と別の言語の両方の組み合わせだったとしても、Java 業界で十分な経験がないかもしれないと面接官に思わせる可能性がある。

やり方は1つだけではないので、具体的な EJB のような特定の Java ベース技術だからというだけで辞退をしないこと。あなたの考えている技術(EJB など)ではその会社が開発中の製品には重すぎるのかもしれない(だから彼らはあなたが職歴に追加した異なる技術を採用することにしたのだ)。もしかすると異なる技術を使うメリットに気付いていない可能性もあり、そこであなたが役に立つかもしれないのだ。

デザインパターンは素晴らしく、われわれは全員がそれを受け入れてきたことと思う。だが、デザインパターンが何のために使用されているのかだけでなく、その Java インプリメンテーションの詳細も確実に把握しておくこと。Singleton の遅延初期化やパターンのダブルチェックはご記憶か? 

実際にあまり経験がないのであれば、職歴にマルチスレッドプログラミングを書かないこと。これはかなり一般的な言葉だが、そのようなスキルがあると主張する候補者が、結局、アプリケーションで扱ったことのあるスレッドはウェブコンテナ(Tomcat、JBoss など)からスポーンされたものだけで、これらのスレッドは完全隔離された状態で動作していたことが分かった例もある。

ネットワークプログラミングも最近の面接に良く出てくるが、Socket / ServerSocket レベルで開発をしたことがない限り得意そうに話してはならない。インターネット上で Tomcat ベースのアプリに HTTP 経由でアクセスできるだけでネットワークプログラマーにはなれない。

面接官の場合

別の面接で同じ質問を繰り返さない。たとえば、最初の候補者に wait / notifyAll の動作について聞いたら、ほかの候補者には聞かない。あなたの聞いた質問の一部が人材派遣会社の耳に入り、そこからまたほかの候補者の耳に入ってしまう。彼らは面接の前に回答を検索できるようになる。もしそれが、その職種にとってきわめて重大な部分であり、具体的な分野について候補者の知識を確実に検証する必要があるるならば、その質問は別の方法で聞くようにしたい(前述の言い換えて質問するという部分を参照)。

Java でも使うつもりのない分野の知識しか明らかにならないことは候補者に質問しないこと。アプリケーションがコンフィギュレーションには Properties を使うが、ほかの I/O は行わないという場合は、RandomAccessFile に関する質問はおそらく不要だろう。その代わりに、InputStream や Reader 関連の質問をしたい。

技術やトレンドは出入りが激しい(CORBA をご記憶か? )ので、近い/遠い将来に採り入れる技術の計画は慎重に立てたい。たとえば、1年以上先(もしかすると次のメジャーリリースに必要な機能をすべてインプリメントした後)に Hibernate を採用する計画であるなら、後に新しい JSR がその技術を時代遅れにしてしまう可能性もあり、候補者にそのような知識を要求する意味はあまりない。

一般的な質問はしないこと。最もまじめな開発者は、「ポリモフィヒズム」のコンセプト、「カプセル化」、Java の単一継承モデル、そして抽象クラスとインターフェースの違いを理解できる。もし候補者が本当にこれらの問題をあまり知らない場合は、面接を通じてそれが明らかになる。

「Java 対.NET」のような話題で本格的な議論を始めないこと。これらの話題に明確な回答がないことはだれもが分かっている。このような議論を開始して実際に明らかになるのは候補者が Java のエバンジェリストであることだが、そのようなことがあなたの製品開発に役立つだろうか?

全員へ

大事なことを言い忘れていたが、現在、Oracle が Sun MicroSystems の買収を進めているので、もしかすると、やはり PHP の関連書にも目を通しておくだけの価値があるかもしれない。(失礼、冗談である。

著者紹介

Liviu Tudor(Liviu Tudor)
Liviu は英国在住の Java コンサルタントで、オンラインメディア分野を中心に高可用性システムの豊富な経験を持つ。何年もの間 Java で開発を行ってきた同氏は、パフォーマンスが重要な場合、ミドルウェアのフレームワークを肥大化させすぎずにアプリケーションを配布できるようにするのは「ローレベル」のコアの Java であることに気付いた。同氏は、ロンドンの Phantoms ( http://www.phantomsrfc.com)というチームでラグビーをしていて負傷すると developer.com に Java 技術のコラムを書く。
【関連記事】
『Ubuntu』の生みの親、Oracle による Google 提訴に不快感
Oracle、『Android』の『Java』に関し Google を提訴
JSF 2.0のビーン検証と依存性の注入
Java Web サービスで Restlet ルーティングシステムを活用する
日本オラクル、Java VM「Oracle JRockit」最新版で障害対応機能を追加

New Topics

Special Ad

“超高速無線 LAN 時代”の幕開け--新規格 11ac(Draft)に対応したバッファロー最新ルーターの潜在能力を試す
“超高速無線 LAN 時代”の幕開け--新規格 11ac(Draft)に対応したバッファロー最新ルーターの潜在能力を試す バッファローは次世代無線 LAN 規格 IEEE802.11ac(Draft)通信速度最大 1,300Mbps 対応無線 LAN ルーター「WZR-1750DHP」を3月下旬に販売開始。今回、同機器を入手できたので、使用感や便利な機能についてレポートしたい。⇒詳細記事へ

Hot Topics

IT Job

Interviews / Specials

Follow japan.internet.com

Popular

Access Ranking

Partner Sites