シリコンバレー 面接 (1)

では面接はどんなものか? 何人も面接してきていますが時折私も面接を受けます。 たぶん興味あるのは”受けたほう”ではないかと思いますので経験を思い出して書いてみます。基本質問されたことはその日のうちに簡単に書いておくのでずいぶんはっきり覚えています。

ポジションはプロセッサアーキテクトとタイトルはカッコいいですが実際にはハードウエア設計エンジニアです。ハードウエアのポジションですが面接はほとんどソフトウエアに関することでありました。

面接は6人でしたがそのうちの一人は昼食係で雑談だけ。ボスに当たる人とは既に会っていたので都合5人が技術面接係でした。

面接はひとり45分。45分くらいだと雑談的な時間はほんの5分程度です。最初にちょっと、そして最後に時間が有ればもう少し。でも大抵なし。次の面接官(面接するエンジニア)がドアをノックするまで問題に当たっていることの方が多いですよ。そしてまず必ずと言って聞いてくるのはトイレと何か飲み物など。気分転換にトイレは使えるので一度は行くと良いですよ。

質問はまさしく全部ソフトウエア関連でした。ハードウエアの質問はボスになる人が一手に引き受けるかのように先のミーティングで済んでいました。低消費電力とキャッシュ、MMUの設計を質問された。

以下は皆ソフトウエアに関する質問です。

ー画像のスケーリング(拡大、縮小)をするフィルタの設計を自分が得意とする言語で記述することを求められた。比率は有理数(つまり2倍、3倍とかではなく有理数)をサポートすること。

ーTree構造のデータセットを深さ方向ではないスキャン方法で全サーチしていくアルゴリズムを説明してコーディングしていく。アルゴリズムをその後メモリ、サイクル数(効率)の面から検討する質問。

ー配列があります。その配列であるストリングをサーチしていき一番最後に見つけたストリングの先頭ポジションをインデックスとして返す。配列の最後はNULL。

ーいくつかの配列(例として例えば3)がありそれらはすべて既にソートされている。そのソートされたいくつかの配列をつなぎ合わせたひとつの配列をつくる。簡単そうですが効率とメモリの使用を検討させられます。配列の大きさは? ちょっとあやふやにされました。既知なのか、それとも何か終了マーカーがあるのか?どちらが大変ですか?同じ程度?

ー2次元配列の掛け算(データをそうですね浮動小数点としましょう)のプログラムを作成。簡単?でもそのコードが出来てから面接は始まります。この問題ではキャッシュがらみで色々と聞いてきましたよ。

基本的にアルゴリズムとデータ構造、メモリ、そしてアルゴリズムの効率について聞いてきました。しかもポジションはあくまでもプロセッサ設計のポジションですからそれをプロセッサの観点からも評価するのです。キャッシュだとか色々と出てきますね。データがとても大きくてキャッシュに収まらないような場合どんな手立てを使う?とかね、配列の掛け算の質問のように。

のっけからつまずくととても焦ります。実はつまずきました。簡単そうに書き始めたら”比率は有理数なんだけど。。。”とか後から言ってくるんですね。おそらくそんな質問を私がすることを期待していたのかな?このように問題の説明が不十分人もいます。わざとあやふやにしているひともいればあまり考えていない人もいる。自分にはすでに答えがあるので深く考えないで質問している場合に多いでしょうかね?

できたと思ったら、”XXXXならどうする?”と言った具合にさらに質問されます。たとえば配列の掛け算、プロセッサの命令にSIMD命令があるのだけどどう使う?と聞いたりします。これね、落とし穴がいくつもありますよ。やったことがあればまず大丈夫ですがそうでないと実は難解になります。

とりあえず焦ると45分(実質40分)は短いです。

でもあっという間に面接はおわります。6人45分、あっという間です。サンプル集ですがいかがでした?10年以上経験があるというポジションの面接です。簡単? でしたら私にぜひあなたを紹介させてください。立派に面接を突破できると確信します。そんなあなたに必要なのは読んでもらえる履歴書(パスするように)と人脈(仕事探しに有利)なだけです。