見出し画像

外資ITソフトウェアエンジニアの面接の秘訣とは?(面接対策、オファー内容掲載)

こんにちは、サカモトです。ソフトウェアエンジニアが年収を上げるのに、最も効率が良いのはシンプルに年収の高い企業に行くことです。外資IT+日本トップテック企業はまさに先程上げた年収の高い企業になりますが、こちらの企業は入社難易度が高く、前もって面接対策をしなければ(凡人は)通りません。

そこで国内外で半年で20社(外資IT+日本トップテック企業)受けた @gaijineers さんに面接の秘訣をインタビューしました。以下は @gaijineers さんのTwitterです。年収の高いテック企業に行きたい方は是非フォローしてください。

https://twitter.com/gaijineers

@gaijineersさんのプロフィール

元々は日本のベンチャー企業でバックエンドエンジニアとして勤務。使用言語としてはScalaやgolangを使って、AWS基盤の上にバックエンドシステムを開発をしていました。ちなみに転職前は年収は900万円程。今はとある外資IT企業のプラットフォームチームでソフトウェアエンジニアとして働いています。

外資ITソフトウェアエンジニアの技術面接スタイル

外資ITソフトウェアエンジニアの面接で最も大きな部分を占めるのはコーディング面接です。大きく分けてコーディング面接には2種類があり、1つ目がGAFAスタイル(LeetCode)、2つ目が実務に沿ったコーディングテストになります。

これ以外にもbehavioural interview(行動面接)では過去の経験を尋ねる面接がありますが、今回は割愛します。

@gaijineers さんはSRE、バックエンドエンジニアorフルスタックエンジニアとして面接を受けています。フロントエンドエンジニアやモバイルアプリエンジニアとはまた異なる面接なので注意してください。

また@gaijineersさんの面接ストーリーはこちらになります。より詳しい内容を知りたい方は英語にはなりますが是非見てみてください!

GAFAスタイル(LeetCode)

基礎となるエンジニアリングスキルを大事にしている企業で、GAFAと同じようなLeetCode形式のコーディング面接やシステムデザイン面接を行う企業です。例えば、「LinkedListを反転させてください」や「与えられた配列の順列を出してください」等の問題が出されます。ByteDance、PayPay、Foodpanda、DoorDash、Indeed、SmartNews等はこちらのスタイルをとっており、応募前にはLeetCodeの対策必須になっています。

ちなみにサカモトはコーディング面接に関して、以下の書籍(Cracking the Coding Interviewの日本語訳)やLeetCodeの良問+ビデオ付き解説のサイトを使って練習した事があります。ちなみに面接時のライブコーディングのスタイルとしては"ソースコードを実行して全てのテストケースを試すパターン""ホワイトボード(Google Docs等)にコードを書くパターン"の2つがあるので注意。特に後者は目視でデバッグしなければないので練習必須です。

実務に沿ったコーディングテスト

LeetCodeのような問題ではなく、実務に沿った問題を出している企業もあります。Shopify、elastic、CircleCI、Peatix、Woven Planet等はこちらのスタイルをとっており必ずしもLeetCodeの練習は必要ありません。例えば「ログをパースしてあるデータ構造に変換する関数を書いてください」、「とあるデータ構造をバリデーションしてください」等、実務でも使えるコーディングの問題が出ます。

私の個人的な意見としてはこちらの面接タイプの方が実務に沿っているという意味で好みですね。しかしGAFAスタイルは純粋に学力があるタイプが通りやすい面接なので、ポテンシャルを重視して問題を出しているのかもしれません。

ライブコーディング以外にも、とあるシステムのAPIのバックエンドを書いてくださいという宿題(home assignment)を出される事もあります。この場合は短いもので2-3時間、長いと8-10時間程度かかりますが、実装した内容を基に次の面接でなぜこのような実装をしたかを議論する事になります。渡される宿題としてはテンプレートが決まってるわけではなく、自由に書いて良いパターンを経験したそうです。労力はかかりますが、面接特有の緊張感の中でコーディングしなくてもよいのはプラスですね。

ドメイン知識チェック

技術的な知識を深堀りする技術面接になります。例えば「どうやったらスケーラブルなHTTP Serverを実装できますか?」、「TCPとUDPの違いを答えて」、「L7とL4のロードバランサーの違いを答えて」等の問題を出されます。

低レイヤーのプロトコルレベルの話も深堀りされていく可能性があるので、甘い理解で面接に望むと落とされる原因の一つになります。基礎理解大事。この話聞くと応用情報技術者試験とか割と使えそうですね。サカモトの経験だとコーディング面接の前後に出された事あります。

システムデザイン

システムデザイン面接では、大規模システムをどのように設計するかを議論します。基本的にはGAFAのような企業はミドル or シニアレベル以上のエンジニアに対してこのようなスタイルの面接を実施します。

例えばどのような質問を聞かれるかというと「Twitterのシステムはどのようにデザインしますか?」と言った具合です。機能要件、非機能要件などを相手から聞き出して、実際にシステムを構築に必要な設計を面接官とともに作成していきます。

こちらは普段皆さんが業務でやられている内容に非常に近いものはあるので特に対策せずとも通過できる可能性はありますが、面接の流れは必ず抑えておいた方が良いです。信頼性、拡張性、保守性を意識した設計を利点・欠点を話しながら進めていかなればならないので、特に分散システムを構築した事がない人は注意してください。システムデザイン面接対策ではオライリーのデータ指向アプリケーションデザインGrokking the System Design InterviewやGitHubの無料の教材があります。

スクリーニング面接

面接ではKaratのインタビュープラットフォームを通じてスクリーニング面接が行われる事があります。Karatは技術面接の代行サービスで最初のスクリーニングでの面接ラウンドで採用されるケースがあります。採用企業としてはIndeedやCircleCIなどがあります。15分の技術問題と45分のコーディング問題に分かれています。

技術問題では受けているロールによって質問は変わってきますが、フロントエンドなら「クッキーはどのように動作する」などの問題を答えていきます。基礎的な理解を問う問題ですね。

コーディング問題では多くの場合は3問中2問は少なくとも解くことを要求されます。時間配分は非常に大事なので技術質問を早めに終えてコーディング問題に時間を使うことをオススメします。

他のスクリーニング手法だとHackerRankなども個人的に経験した事ありますが、こちらはLeetCodeのような問題がURLで送られてきて一定時間内に2-3問解く形になっています。Online Assessmentとも呼ばれますね。

面接準備の戦略

基本的には2つの戦略を取りながら、面接のパフォーマンスを上げていくべきです。

  • 大凡3ヶ月程度LeetCode・システムデザインの面接対策にかける時間をかけた方が良い。LeetCodeは3ヶ月で200-300問を解くイメージ。

  • 一番行きたい企業は最後に受ける。最初は魅力的ではない企業から受けていき徐々に面接慣れしていくように努めた。@gaijineers さんは欧州やシンガポールなど(移住のハードルが高い)企業からピックアップし面接を受けていった。

半年間の転職活動の中で明らかに最初と比べ自分の面接でのパフォーマンスが上がっていったのを実感していたようです。サカモトのこちらの面接準備の戦略には大賛成で、受かってもおそらく行かないような企業から受けていって自分の実力を図りながら対策していく手法をオススメしてます。面接する側からすると迷惑だとは思いますが、行きたくなるようなオファーを出せないのも企業側の責任ではありますから多少はね、、、、

また、ヨーロッパ(イギリス、フランス)などはビザのハードルがアメリカより低く、「受かったらビザ出すし、来てくれるよねー」という感触だったようです。半年間で20社以上受ける中でモチベーションを保った理由としては、+100、+200万円上がるようなオファーを取るよりもっと大きく上がるオファーを狙っていった結果、大きな年収アップを叶える事ができたようです。

良い・悪い面接体験

特定の企業名は挙げないが、面接を通して良い面接体験と悪い面接体験があったようです。最も悪かった面接体験としては、問題だけ渡されて後は面接官は自分の仕事をやっており、真面目に面接対応していないというやる気のないパターン。また、タイムゾーンが合わない中で6時の朝早い時間から面接をぶっ通しでする事になったのは体力を消耗する事態にもなったとか。

逆に良かった面接体験としては、数週間で面接を絶対に終えると最初にリクルーターから伝えられたところ、本当にその期間で面接で終わった企業もありました。システムデザインの面接もまるごと「Twitterのサービスを作ってください」ではなく、画像のアップロードサービスを作る中で徐々にスケールを大きくしていきながら、それに合った設計を提案する形の問題が良かったようです。

面接での問題は個人的には重要で、知っていなければ何も答えられないような問題を出すのではなく、そのロールを受けるエンジニアであれば誰でも理解しているが、それを深く掘り下げていく中でエンジニアの知識や熟練度を問う問題が良問だなと感じています。

総括

一言で言えば「@gaijineersさん競争力のあるオファーを取るべくして取った」という事です。元々の能力も高かったとは思いますが、面接準備期間を設け、面接慣れのために計画的に企業に応募していく流れは誰もが真似すべきだなと思ってます。

中途半端なオファーでは妥協しないという点も個人的に真似したいと思いました。特に今の環境に不満がない場合は何度でも受かるまで挑戦し続ける方が長期目線で戦えるので結果良いオファーに繋がりやすいと感じています。

宣伝

キャリアに悩んでるエンジニアに向けて無料でキャリア相談をやってます。私に相談がある方は是非以下のnoteを読んでDMで連絡ください!

@gaijineersさんがもらったオファー内容

@gaijineers さんが最終的にもらったオファー(社名+年収)ですが4つほど紹介させてもらいます。

(この後はオファー内容になります、プライバシーも考慮してペイウォールを置かせて頂きます。この記事がためになったと思う方は是非ご購入ください!)

ここから先は

227字

¥ 1,000

よろしければサポート(ワンコイン)お願い致します。今後記事執筆の励みになります。