2015-03-05

Amazon面接記

1月の終わりから3月の初めまでの面接記。誰かの参考になるといいなぁ。

1月中旬、AmazonリクルータからLinkedIn経由でAmazon欧州採用イベントのメールを受け取る。このときは「まぁ、どうせ1000通以上送ったメールの一つだろう」くらいな気持ちで、興味があるという旨だけ3行くらいで返す。

同1月。そのリクルータの上司(?)からコーディングテストがあるから受けろといわれる。内容は、ストリームから文字列トークンの切り出し+αの問題と、配列操作+αの問題の2問。46時中プログラムを書いていればそんなに難しい問題ではないと思う。時間制限1時間(最長90分)の制限があった。2問目が難しいという脅しを受けていたのだが、40分で完了。(今イベント最速だったらしい) 今回は欧州採用イベントということで、コーディングテストが先だったらしい。よく知らん。

しばらく間があいて、すっかり忘れていたころにMixerイベントと面接の3月。メールの内容に寄れば2月中にアメリカから電話がかかってきて、面接でどんなことが聞かれるとかのヒントがあるとかないとかだったのだが、それはなかった。(これがなかったので、2月の間はマジで頭から抜けてたという話もある)

っで、面接。ここからは記憶がまだ新しいので多少詳しく書く。

面接は1対1、45分を4回。これを半日で行う。正直かなりの苦行だった。面接官は1日8回x3日なので頭が融けるんじゃないかな?ちなみに、面接官はTPM(Technical Programme Manager)かSDE(Software Development Engineer)のどちらか。内容はテクニカルなこと一辺倒。

最初の面接。データベースモデルの話。既存のテーブルモデルを拡張して新機能を入れたい。どんな風に設計する?という感じのもの。最初に大まかなアイデアを出して、面接官が突っ込んで、修正を入れてという形式だった。正直あれでよかったのかは自信ない。その後に今までのプロジェクトでイニシアチブを取って何かをしたことがあれば教えてくれみたいな質問。普通に答える。

次の面接。Amazonのシステムの一部がクラックされた上にチームの開発者も消された、しかもサーバのバックアップも燃えた(どんな状況だ?) 。そこで新たに雇われた君にそのシステムを設計してほしい。どのような手順でやるかを列挙した後に、細かい部分の説明をしてもらう。割と意味不明な状況だなぁと思いながら、要は上から下まで全体像を描けるかというものだと理解してそんな感じで答える。最後に本番用サーバ台数が不明だけど、どれくらい要る?という質問があったが、
毎秒のリクエストと1リクエストにかかる時間、さらに要求レスポンスから適当に割り出す。1リクエスト200msと適当に仮定してしまったのでサーバが1000台いるとかになって、流石にこれはありえんなぁと思いつつ。残りの時間は、締め切りとプロジェクト要求のプライオリティについての質問。まぁ、これも普通に答える。

3つ目の面接。コーディングテストその1。プロダクト、顧客及びその画面が見られた回数を保持するクラスのリストを、k個の顧客毎に最も多く参照されたプロダクトを保持するクラスのリストに変換するというお題(日本語むずい)。最初は優先度付きキューを使ってO(n*nlogn)で解こうとしたのだが、kはランダムなあんまり大きくない数字といわれたので、普通にバッファ持たせてO(nk)で解いた。リスト処理のお題をSchemerに出しては駄目だなという感じで、ささっと解法説明。んで、紙の上にコーディング(これに30分くらいかかった)。 終わった後に最初の面接と同じ質問。まぁ、定型文ですよね。

4つ目の面接。コーディングテストその2+システムデザイン。コーディングテストは配列の要素間の最大差を求める問題。愚直にやるとO(n^2)かかるけど、O(n)の解法を見つけられるかというもの。多少頭をひねってなんとかひねり出す(この段階では既に頭がまともに働かなかった)。システムデザインはある機能を実装するのにどんなコンポーネントを使ってどのようなシステムを構築するかというもの。正直こんなハイレベル(上流?)の設計はしたことがないのでしどろもどろ。正直にやったことねぇっすとゲロる。っで、2つ目の面接と同じ質問と今までで最も誇れる成果は何?という質問。仕事の成果なんて覚えていないので、Sagittariusのことをここぞとばかりに出してみた。興味を引いたらしいw

んで、結果。受かったw
それなりに経験積んでて、46時中プログラミングしてればいけるっぽい。正直なんで受かったのかは謎だが、こんな僕でもそこそこいけてるプログラマを自負してもいいだろうか?

No comments:

Post a Comment