それでは、ここからインタビューの詳細に移ります。
Technical phone interview の一週間前にリクルータの人から電話があり、簡単な会話をしました。専攻は何か、いつ卒業するか、就労ビザは必要か、などなど。会話の最後に、どんなスキルが特に求められるか聞いたところ、「開発言語、ドメインは特にこだわらないから、CS の基礎が備わっていればいいよ」との答えをいただきました。ふむ、Google にも買収されたし、そこと似たような問題が飛んでくるのかなと思い、Google とインタビューをするような気持ちで挑みました。
[1st round interview]
最初のインタビューで出された問題は2つ。私はどちらの問題も CareerCup でおさえていたため、ここは乗り切ることができました。具体的には、
- Singly linked list に cycle があるかどうか、どのように判別しますか。また、cycle があった場合、そのcycle の開始点をどうやって見つけますか
- 100階建てのビルがあります。あなたの手元には同一のたまごが二個あります。たまごは、ある特定の階より上の階から落とすと割れていまいますが、その特定の階およびそれより下の階から落としても割れることはありません。その手元にある二個のたまごを使って、その特定の階を割り出してください。二個とも割れるとゲームオーバーですので、そうなる前に割り出してください。ただし、worst case でたまごを落とす回数が最少になるようなアプローチを考えてください
二つ目の問題は正解だけ書きますね。一つ目のたまごを14階、27階、39階、50階、60階・・・と落としていき、それがいずれかの階で割れたら一つ前のステップの階に戻り(50階で割れたら、39階へ戻る)、そこからは一階ずつ増やして二つ目のたまごを落としていきます。これは有名な Brain Teaser の問題ですので、WEB で検索すると「なんでそうなるの?」が見つかると思います(たとえばこちら)。
ちなみに、どちらの問題も Google や Facebook の時のようにオンラインコーディングをすることはなく、すべて口頭で答えを伝えました。数日後に interviewer から "good job!" のお言葉をいただき、2nd round interview に進むことになりました。
[2nd round interview]
このインタビューでは、自分のバックグラウンドを説明するところから始まり、技術的な質問がそれに続きました。
- オブジェクト指向プログラミングの概念を説明してください
- B-Tree のデータ構造について説明してください。要素を検索するときの実行速度はビッグ・オーで何になりますか?
- Model-View-Controller アーキテクチャについて説明してください
- 4GB のメインメモリで 4 byte の整数 1,000,000,000 個をソートしてください
あと、MVC アーキテクチャでひとつ腑に落ちないことがあるのですが、Model と View と Controller の円があってそれらが線で結ばれている典型的な MVC アーキテクチャの図、あの図の view type は何でしょうか。コード依存などを表した static view なのでしょうか、それともシステムの実行時の振る舞いを表した runtime view なのでしょうか?MSE の Architecture のクラスでアーキテクチャの文書化について習ったまず最初のことは、view type をはっきりさせなさい、ということでした。コード依存を表した static view なのか、実行時の振る舞いを示した runtime view なのか、物理的なデバイスの割り当てを示した allocation view なのか?これらをごちゃごちゃにして、アーキテクチャの図を描くと、ソフトウェアシステムの特性の分析が非常に難しくなります。たとえば、変更容易性はコードの変更に関わるということから、static view で議論されるべき特性で、runtime view で議論できる特性ではないと思うのです。逆にパフォーマンスは、runtime view で議論されるべき特性で、モジュールの依存を示した static view で議論されるべき特性ではないと思います。典型的な MVC の図は、データの受け渡しをしているように描かれているため、一見 runtime view なのかなと思いますが、一方で Model, View, Controller の開発、保守を独立に行えるという記述も添えていることがあるため、static view のことを言っているようにも聞こえます。どうでもよいことかもしれませんが、view type をはっきりさせることは、Architecture のクラスで学んだ重要なことのひとつだったもので。"A picture is worth a thousand words" と言われるように図は重要で、一度に多くの情報を与えることができますが、逆に100人のエンジニアがそのアーキテクチャの図を、自分の "a thousand words" で解釈してしまい、その解釈が一致しない恐れもあるわけです。100人のエンジニア全員が同じ解釈をできるよう、アーキテクチャの図を描く際は、箱や線には必ず凡例をつけるなどして、図が示す意味の曖昧さを取り除く努力をしなければいけません。出された問題とは直接関係ないことなのですが、電話インタビューの後にふと思ったことだったのでここに書いてみました。
結果、Admob からは 2nd round の電話インタビューで reject されてしまいました。iPhone 上の開発が活発に行われているとも聞きましたし、Admob とインタビューしていたその友人が興奮気味に語っていましたが今や Google の傘下ですし、もしもインタビューをパスできれば、きっと面白い仕事が待っていることと思います。
他にもインタビューをした会社がありましたが、これにて就職活動インタビュー反省記録を終わらせたいと思います。今後は、Natick や Boston のこと、空き時間に趣味でやっている勉強のこと、その他日々のことなどを書いていきたいと思います。これからもよろしくお願いいたします。
0 件のコメント:
コメントを投稿