松岡玲音
メルカリを退職してロンドンのMetaに転職します 〜 外資Big Tech転職活動体験記
見出し画像

メルカリを退職してロンドンのMetaに転職します 〜 外資Big Tech転職活動体験記

松岡玲音

この度、3年半に渡って勤めたメルカリを2022年5月に退職し、この夏からロンドンのMetaにSenior Machine Learning Engineerとして転職することが決まりました!わいわい✌('ω')。その過程で、東京およびロンドンのBig Tech合計5社を数ヶ月かけて対策をし面接に臨んだので、そこで得たノウハウをここで共有できたらと思います。面接を受ける際にNDA(Non Disclosure Agreement)にサインするので具体的な面接の詳細には触れられませんが、伝えられる範囲でできる限り記述しています。

また、Metaから最終的に提示されたオファー条件を最後に記載してあります。なにぶん日本においては給与の話は燃えやすいということもあり、その部分だけ某日本の有名エンジニアに倣って有料にしてあるのですが、ご興味のある方は是非ご購入いただければと思います(1コイン分の金額で、このnote経由で私に入る収入は全て医療系ないし教育系の国際団体に寄付する予定です。)ちなみに、メルカリのSlackの私の個人チャンネル(#zp-lain21)にその辺の話は全部書いていたので、メルカリに勤めている方は特に有料部分を買う必要はないと思います笑。

全体として超長いnoteになってしまって恐縮ですが、目次をつけておいたので、読みたいところだけ好きに読んでいただけると幸いです。

*本当はMetaのロゴをアイキャッチ画像に使いたかったのですが、なにせ有料noteということもあり、権利周りを調整するのがめんどくさかったので、今回は諦めました。代わりに、こないだ女友達3人と伊豆旅行に行ってきた時に撮ったなんとなく映える写真を適当に選んで使ってますw

1. 転職の契機

昨年(2021年)半ばごろから、本格的に転職をしようという機運が自分の中にありました。当時はワインであまりに忙しくて転職活動をする余裕はなかったのですが、年末ごろにMetaおよびGoogleのリクルーターから直接LinkedIn経由で連絡があり、2022年はいよいよ転職に向けて乗り出そうと思ったのでした。

MITの博士課程を中退して日本に帰国したのが2018年夏、その年の10月からメルカリでインターンをし、2019年1月から正式に機械学習エンジニアとして入社。私にとってのファーストキャリアで、そこから数えるとおよそ3年半勤めたことになります。

気がついたら3年半もいたんやなぁ

メルカリでは、社内の平均と比べて破格の待遇を受けていたと思います。仕事内容も充実しており、Recommendation teamのtech leadとして、オーナーシップを持ちながらアプリの根幹に直接関わる仕事をさせてもらっていました。ただ、組織的な問題が頻繁に発露したり、同じ領域で私以上にシニアなエンジニアが周りにいないということもあり、このまま同じ環境にいても自分の成長は見込め無さそうだという実感が、もやのように心に覆い被さっていました。メルカリは大変良い会社でとても快適なのですが、同時にそれは自分にとってのcomfort zoneにもなってしまっていたのです。

また、日本内資ということもあり、給料の伸びにも限界がありました。周りと比べれば圧倒的に高待遇を受けていたとは思いますが、やはり上には上がいるんですよねぇ。。。また、今の自分が、圧倒的な待遇を出すような世界的に成功している会社から、一体どの程度の評価を受けられるのだろうと挑戦してみたかったというのもあります。

そんな折に2つのBig Techのリクルーターから直接連絡があったので、折角の機会、挑戦してみようと思ったところから、今回の転職活動がスタートしました。

2. タイムライン

最初に連絡があったのはMetaとGoogleからでしたが、最終的にAmazon、Apple、そしてIndeedも含む5社と面接をしました。Meta、Amazon、Appleはロンドンのポジション、GoogleとIndeedは日本のポジションです。なぜロンドンかというと、私の彼氏がロンドンのUCLのPh.D.課程の学生なので…😂 今はコロナが理由で日本に一時帰国していますが、2022年の夏頃には向こうに戻るので、もし同じタイミングに行ければ最高だね、ということでロンドンを中心に受けました。

1-2月: リクルーターとの面談、phone interview

2021年末にMetaのリクルーターから「1月末にはphone screenを受けてね!」と言われてケツが決まってしまったので、慌ててcoding interviewの準備を始めました。LeetCode premium(後述)を契約し、最初の面接までに120問ほど解いたと思います。幸いにも面接はLeetCode easy-medium程度の問題が2問で、片方は瞬殺、もう片方は面接官のガイドを受けながら最適解にたどり着いて、無事に通過しました。

それが2月前半。それで勢いづいて、Google Japanのリクルーターにもphone interviewを受けると連絡し、また友人づてでAmazonとAppleのリファラルをもらってリクルーターと話し、Indeedのリクルーターからも直接連絡があって、予想以上にとんとん拍子で進んでいきました。相当幸運な方だったと思います。これが2月中旬から後半、実は寒い冬で体調やメンタルを崩しつつもなんとかやっていた時期でした。

3月: 模擬面接、onsiteの日程決め

3月頭にGoogleのphone interviewを受けてこれも通り、3月末にMetaの最終面接(tech companyではこれをonsiteと呼ぶ)が予定されていたので、いよいよ本格的な準備に乗り出しました。これも後述しますが、Big Techのonsiteは会社ごとであまり形式に差は無く(Appleだけ例外)、coding interview、system design interview、behavioral question interview、(MLの人だけ)machine learning design interviewを受ける形になります。coding interviewはLeetCodeで対策できますが、system designとML designは別途準備が必要で、かつ模擬面接での練習が圧倒的に大切なので、そういったことに時間を使っていきました。

Apple、Amazon、Indeedはリクルーターと連絡を取り始めたのが他の2社と比べてかなり遅かったというのもあり、この時期にphone interviewを受けたり、通ったところから順次onsiteの日程を組んでいったりしました。

4月: onsite、オファー

4月は怒涛のonsiteラッシュ、Google、Amazon、Apple、Indeedの順番で一気に最終面接を受けました。onsiteは上述の複数種類の面接を合計4-5個まとめて受けるので、丸々一日かけて受けたり、時差のあるロンドンは数日間に渡って日程を組んで受けたりと、ひたすらに忙しかったです。

3月末にonsiteを受けたMetaから2週間ほどで最初に合格の連絡があり、その次にIndeed(なんとonsite翌日にpassの通知が!)、そしてAmazonからもオファーを頂くことができました。
Googleはteam matchingまで進んだのですが、応募していたlead machine learning engineer(L5)にはあと少し及ばず、その時L4以下のヘッドカウントが無かったということで最終的にオファーまで辿り着くことができませんでした。
Appleはhiring managerが育休に入ってしまい、オファーはほぼ出せる状況だったらしいのですが、それが5月以降になってしまうということで、既に他の会社から良いオファーが出ていたということもあり、こちらから辞退した次第です。

3. 主な面接の種類と傾向・対策

上述したように、外資Big Techは一部例外があるものの、面接のフォーマットがほぼ決まっています。適切に情報収集をし適切に準備をすれば、ある程度の素養がある人なら必ず一定の成果は出るものだと今回実感しました。また、日本で主に流布されている「Big Techの面接は競プロが強い人じゃないと絶対通らない」という言説は、必ずしも真ではないという感想も持ちました。

Coding interviewは基本的にはpass or failで、残りの面接がleveling(最終的なグレード、つまり待遇を決定する)面接であることが一般的です。もちろんcoding interviewの評価も最終的なグレードに響いてくることもあるのですが、こういった理由からsystem design interviewやbehavioral question interviewの対策も徹底的にやった方がいいです。

*基本的に面接で出た問題は全てNDAを結ばされて秘匿しないといけないので、下記に記述した問題例などは実際に問われたものとは関係がありません。

*また、私はbackend or ML or dataのsoftware engineerとして今回面接を受けました。なので、webやnativeなどのfrontendのsoftware engineerの方々には、system design interviewの傾向などはあまり参考にならないかもしれません。

*Big Techを受ける際は、基本的に全面接の受け答えやリクルーターとの会話は英語になるので、ある程度の英語力は必要です。

Coding Interview(コーディング面接)

形式
Big Techやそれに倣う企業(日本ならSmart News、Woven Planetsなど)は、これをphone interview(最初の面接)とそしてonsite(最終面接)に必ず持ってきます。AtCoderやLeetCodeを解いたことがある人ならすぐわかると思うのですが、例えば「連結リストで表される数値同士の和を計算せよ」とかそういうのです(もちろんもう少し難しい問題が本番は出ます笑)。基本的なデータ構造やアルゴリズムの理解度とコーディングの品質、そしてコミュニケーション力を測られます。

面接官に出された問題をその場で解いていく形式で、以下のような流れで進めていくのが定番です。

  1. 出された問題に対し、ひとまず思いついた解答の方針を面接官に伝える

  2. 面接官の反応やフィードバックを通して、もしさらに最適な解がすぐ見つかりそうであればそれを考えて提案し直す(この辺で時間計算量と空間計算量について触れられると良い)

  3. 了承が得られれば実装開始(応募しているポジションにもよるが、自分の好きな言語を選べることが多い)

  4. 一通りデバッグを終えた後、与えられたテストケースを実際にコードを追いながら検証する

  5. 場合によっては面接官から追加の質問(follow up question)をいくつかされたり、さらにもう一問同じ流れで解かされたりする

対策
対策として最も一般的なのはやはりLeetCodeでしょう。私は1月から解き始め、最後の4月のonsiteを終えた時点で合計455問ほど解いていましたが、流石にそこまでやらなくていいと思います。easy-mediumレベルを各分野満遍なく合計200問程度解けばだいぶ安心、300問も解けば盤石だと思います。

LeetCode Premiumという有料サービスに課金すると、全ての問題が閲覧できるようになるし、大部分の問題で模範回答(たまに効率が悪かったり可読性が低かったりもするw)も見れます。各企業ごとの頻度別過去問とかいう果てしなくグレー(てかアウト)なコンテンツもありますが、正直あまり真に受けない方がいいです。
LeetCodeにはExploreというデータ構造やアルゴリズムのテーマごとに徹底的に練習できるコンテンツがあるのでそれがめちゃくちゃオススメです。また、Silicon Valley在住の日本人が作成した60 LeetCode problems to solve for coding interviewという問題のリストが超良い。Exploreで一通り練習したり、後述の「問題解決力を鍛える!アルゴリズムとデータ構造」を読んで勉強した後に解くと良いと思います。

LeetCode ExploreのLearnコンテンツ

世間一般でお勧めされている参考書で"Cracking the coding interview"(「世界で闘うプログラミング力を鍛える本 コーディング面接189問とその解法」)という本があるのですが、私は正直お勧めしません。なぜなら字が小さいw 最後のAppendixに載っているRabin Carp法やRed Black Treeの解説・実装は参考にはなりましたが、正直使う場面なんて出てこないし、アメリカの本なので書き方も冗長だし、一応一読しましたがあまり役に立った実感はないです。
むしろ、日本のけんちょん氏と秋葉さんが共同執筆した問題解決力を鍛える!アルゴリズムとデータ構造という本の方が圧倒的に勉強になりました。また、同けんちょん氏が中心になって作成しているアルゴ式というウェブサービスも基礎を鍛える上ではとても役立ちます。

すぐこの後に説明しますが、コーディング面接はコミュニケーション力も測られるので、ただ黙々と問題を解くだけではなく、実戦形式での模擬面接を何回かやって慣れておくといいでしょう。peer to peerで面接練習したい人同士をマッチングするPrampというサービスが一番オススメです。すぐにマッチングするし、コードを書いて実行もできるプラットフォームの安定性が魅力的です。有料の模擬面接に課金してもいいですが、coding interviewに関しては私はPrampで2-3回練習するだけで十分に感じました。

本質はどこにあるのか?
さて、前述した「Big Techの面接は競プロが強い人じゃないと絶対通らない」という言説は、必ずしも真ではないという話について。まず、セグメント木やダイクストラ法、AVL木、クラスカル法などのやや発展的なアルゴリズムやデータ構造が必要な問題は、5社受けて一度も見ませんでした。DPが必要な問題ですら1つだけ、それもガイドされながらかろうじて最適解に辿り着いても通った。なので、流れるように瞬時に難しい問題の解答に辿り着く必要はおそらくないのだと思います。
LeetCode easy-mediumレベルというのは、主に下記に並べたような基本的なデータ構造・アルゴリズムの内容がわかっていれば解けるものが多く、実際の面接でもそういうものしか殆ど出ません。ただ、メルカリのインド人の同僚によると、インドのGoogleやAmazonははちゃめちゃに難しい問題を平気で出してきて、しかも完璧に解けないと落ちるらしい。。。もしかすると、受ける地域による差もあるのかもしれません笑

絶対押さえておいた方がいいやつ:linked list, queue, stack, heap, hashmap, graph, tree (binary tree, BST), binary search, sort, DFS, BFS, two pointer, sliding window, prefix sum, greedy, backtracking, DP

ではそういった高度なアルゴリズムの知識を問わずして何を見ているのか?ここからは面接官やリクルーターの話し振りから推測した仮説に過ぎませんが、以下の3つの点を確認しているのではないでしょうか。

  1. 最低限のコンピューターサイエンスの教養

  2. コーディングの品質(可読性、バグの少なさ)

  3. 曖昧な問題から要求を適切に引き出し、自身の考えを適切に伝えるコミュニケーション力

Googleのonsite後、不採用の連絡を受けた際にリクルーターから「問題は解けていたが、やや面接官の混乱を招くようなコミュニケーションをしてしまっていて、技術的なディスカッションをリードしなければならないシニアポジションとしては一歩足りていなかった」というフィードバックをもらいました。
学部や修士卒の新卒に関してはまた違うのかもしれませんが、中途、特にシニアなポジションでコミュニケーション力はより重視されるようです。まあそれもそうで、仕事は結局個人プレーではなくチームプレー、コミュニケーションをちゃんと取れる人と仕事をしたいですよね。それをなくして通るような人は本当に一握りの卓越した技術力を持つ人だけなのだと思います。

Behavioral Question Interview(行動面接)

形式
過去の開発経験を掘り下げたり、チームワークやリーダーシップなどの発揮の仕方について問われます。onsiteでは絶対1つはある面接で、Amazonに関しては全ての面接の冒頭20分程度がこれに割かれていたりします。

問われる質問としては、主に下記の2パターンに分類できると思います。

  1. レジュメに記載した過去の経験について問うもの(e.g. 「過去に取り組んだプロジェクトで、最も苦労したものについて話してください」)

  2. What if ~~~?(もし〜だったら?)を問うもの(e.g. 「もしチームメンバーと開発方針が合わなかった場合どうしますか?」)

1つ目に関しては、以下の3点を意識するといいでしょう。

  • できるだけ具体的な、自身がオーナーシップを持って取り組んだエピソード、それも可能であれば最近のものに言及する

  • STAR (Situation, Task, Action, Result) の流れで構造立てて簡潔に説明する

  • その経験から得た教訓や学びについて触れる

3点目は過去の失敗談などについて聞かれたときに特に重要になってきます。失敗についてはむしろそれを話すことに及び腰になる必要はありません。全て正直に話し、そこから何を学んだかを伝えることが大切らしいです。

2つ目のWhat ifタイプの質問についても、自身の経験、特に成功体験を交えながら具体的な行動指針を話していくとやりやすいと思います。例えば上記の例に対しては、私なら(だいぶ端折ってますが)このような体験談を交えながら解答するでしょう。

「過去に、特定の領域にしかフォーカスしたくないメンバーとチームを組むことになり、全くソリが合わないことがあった。そこで、in personのコミュニケーションを重ねることでお互いの意図を理解し合い、お互いの足りない部分を補完し合うようにペアプロをしたりタスクの分担をし合うことで、最終的にプロジェクトの成功につながった。なので〜〜〜」

対策
こういったことを流暢に話すためには、英語力や事前の準備ももちろんですが、日頃から仕事に対して主体的にオーナーシップを持って取り組んでいることが何よりも大切です。自身が提案して先導したプロジェクト、本気でコミットした成功と失敗の体験、そしてビジネスに対する深い理解と情熱。こういったものが自身の内に無いと、どうしてもこの面接での応答は薄っぺらいものになってしまいます。それは面接する側からは一目瞭然でしょう。逆に普段から本気で仕事に取り組んでいれば、むしろこれほど簡単な面接もありません。ガンガン仕事してやっていこうぜ( •̀ᄇ• ́)ﻭ✧

System Design Interview(アーキテクチャデザイン面接)

形式
おそらく、最も対策が困難で時間がかかり、本番でも苦労するのがこの面接だと思います。その名の通り、「こういうサービスを作るには、どういうふうにシステムを設計する?」というものです。例えば有名な問題としては、「Twitterのタイムラインを作れ」というものがあったりします。そういった漠然としたサービス設計の問いに対して機能・非機能要件を引き出し、安定してスケールする最適なアーキテクチャを提案していく面接で、主に下記のような流れで行われます。

  1. 面接官から曖昧なお題が渡される(e.g. 「弊社のサービスでこういう機能がある。ここに〜〜〜な機能を足したい。どう設計する?」)

  2. 機能要件と非機能要件を面接官から引き出し、具体的な問題のスコープを定める。

  3. 非機能要件について、予想されるトラフィック量(read/write)や必要なDB容量を概算する

  4. 大まかな設計の方針を立て、high level architecture(ざっくりとしたコンポーネントの配置、コンポーネント間のコミュニケーションプロトコル)を提案する

  5. DBの選択(RDBMS vs NoSQLなど)とトレードオフについて議論し、データモデル(スキーマ)を確定する

  6. スケールさせるため、データの分散方法やキャッシュの方法になどについて議論する

  7. その他、面接官から都度される質問に答えていく

こんな感じでめちゃくちゃ大変です。特に3つ目の運用に関わる数値の概算や6つ目のデータシャーディングの方針などは、ちゃんと練習しておかないと絶対にパッと出てきません。様々なサービスが実際にどう実装されているか、その引き出しをできるだけ多く持っておくことも大切で、それが無いとそもそもの方針が全く思いつかなかったりすることもあります。

アーキテクチャを議論する際は、ExcalidrawやGoogle Drawingなどの共有お絵描きツールを使って、その場でアーキテクチャ図を書いたりしながら話すことが多いです。

模擬面接で実際に私が解いた時のアーキテクチャ図(Excalidraw)

対策
まず、バックエンド開発に関する一通りの知識をおさらいしましょう。特に、マイクロサービス設計、DBやデータモデル、データエンジニアリングに関して深く理解をしていると話が早いです。主に下記の本は私も実際に読んで、自信を持ってオススメできます。

特にイノシシ本(データ指向〜)は超オススメです。今後少なくとも5年、下手すると10年以上はバックエンド開発のバイブルとして使えるような骨太な技術書だと思います。実際、海外のBig Tech受験生たちにも、system design interviewの対策としてまずはこれを挙げる人たちが多いです。
マイクロサービスに関しては、メルカリがKubernetesを用いたマイクロサービスアーキテクチャを採用しているため、特に追加で勉強することはありませんでした。

また、様々な例題に触れながら面接の流れを理解し、自身の引き出しを増やしていく作業も必要になってきます。私は下記の2つのウェブサイト(後者は月額サブスクの有料サービス)を使って勉強しました。正直お金はかかるものの、Grokking the System Design Interviewはほぼmustで必要だと思います。

そして、coding interview同様に、というかそれ以上に模擬面接での練習が肝になってきます。この面接に関しては、peer to peerのものよりも有料の模擬面接サービスをとにかく強くお勧めします。というのも、有料のサービスは実際にBig Techで現在進行形で働いている人が面接練習に付き合ってくれるので、ほぼ本番の形式で練習ができる。そして現場で働いているシニアなエンジニアから有意義なフィードバックが貰えるのが何よりも大きい。おすすめはTechMockInterviewというサービスです。1回の模擬面接が$80-$120とそれなりに高価なのですが、その価値は絶対にあります。私はMetaのonsite直前に5回ほど受けました。

Levelingについて
与えられた課題に対して正しく要求を引き出し、時間内にちゃんと動きそうなシステムを設計する。実はこれはsystem design interviewの7割くらいで、よりシニアなレベル(senior, staff)を目指す場合はさらに高い水準の議論が求められます。
この「高い水準」というのは、「広さ」と「深さ」のこと。例えば、DB選定についてはNoSQLを選ぶ際はどういった物を用いるのか?それはなぜか?キャッシュを用いる際はwrite throughがいいのか?などなど、実際に本気で設計しようとすると直面する様々な具体的なトレードオフにどれだけ広く深く触れられるかが、その候補者の成熟度を判断する上で重視されているようです。(模擬面接で相手してくれたAmazonのsenior managerやGoogleのstaff engineerがそう言っていました。)
ここまで完璧にしようとすると途方もないので、そこまで深刻にならなくてもいいとは思います。ただ、日本のエンジニア界隈であまり話題に上がらないsystem design interview、おそらく皆さんが思っている以上に重要なので、真剣に取り組んで準備することを強くお勧めします。オファーが出た時の待遇に直に関わる上に、何より普段の業務に直接役に立ちます

Machine Learning Design Interview(機械学習サービスデザイン面接)

私は機械学習エンジニアとしてのポジションをMetaおよびGoogleでは受けて、AmazonもAmazon SageMakerを担当することのあるポジションに応募したので、この3社では機械学習エンジニア向けの特別な面接が行われました。

形式
System design interviewとかなり似ています。例えば、「Facebookのフィード画面を最適化する機械学習システムをデザインせよ」みたいな問題が出ます。しかしsystem design interviewとは異なり、どのように機械学習の問題に落とし込むか?評価はどうするか?アルゴリズムはどのようなものを選定するか?どういったデータを活用するか?推論はリアルタイムでやるべきか?などの、機械学習特有のトピックに触れて設計していく必要があります。その代わり、system design interviewのような詳細なDB設計やアーキテクチャ設計の必要は無いです。主に以下のような流れで行われます。

  1. 面接官からお題を渡される(e.g. 「クレジットカードの不正利用を検知して弾くサービスを作るにはどうする?」)

  2. 機能要件を聞き出し、ビジネス上の最適化したいKPIについて議論し、サービスが満たすべきゴールを定める

  3. KPIといったonline metricのproxyになるようなoffline metric(e.g. 推薦アルゴリズムならnDCGやMRRなど)を定める

  4. どのようなデータを利用できるかを確認し、学習用データセットと評価用データセットをどのように作成するかを議論し、いくつか具体的な特徴量についても提案する

  5. ビジネス要件に留意しながら全体の構成を描き出す

  6. サービスをスケールさせるために、どのような推論形式をとるのか(batch vs streaming vs on-the-fly)を議論する

  7. 再学習やモニタリングなどについても余裕があれば触れる

盛りだくさんですが、ちゃんと練習すればこれら全部をカバーすることができるようになります。

対策
2-3種類以上のドメインや性質の異なるMLサービスを実際に設計して実装、運用、評価したことがある人なら、基礎的な部分は苦労しないと思います。不安な人は「仕事ではじめる機械学習」を熟読することをお勧めします。これは良い本だ。

問題は、面接官が問うてくるような非常に規模の大きいサービスに対してどういうふうに設計するか、上記の流れをちゃんと追えるようになるにはどうすればいいかというところ。ここでも、system design interviewの所で挙げた有料のサービスを使った学習がオススメになります。こちらはGrokking the Machine Learning Interviewといい、いくつかの典型的な問題に対するアプローチや考慮すべきことが一通り解説されています。特徴量のところが少し細かすぎたり、一部「うん?それはおかしくないか?」と思うところもあるのですが、上記の流れを追いながら具体的にどう解答を組み立てていくのかのイメージがつくようになります。

この面接については色々調べてもなかなか「これをやればOK!」みたいなものがあまり出てこないので、どちらかというと本人のポテンシャル勝負的な側面が強いです(元も子もなし)。System design interviewのlevelingの所でも話したように、この面接でも、より具体的で実践的な深い議論をシニア以上のポジションでは要求されます。生みの苦しみを味わってサービスとビジネスに向き合ってきた人ならきっと大丈夫なので、自信を持って臨んでください。

そもそも面接にたどり着くには

上記のように、準備しないといけないことはそれなりに多いですが、きちんと傾向を掴んで対策をすればそれなりの結果は返ってきます。このように一見オープンで平等な能力主義のシステムに見えるのですが、面接にたどり着くまでが実は最初の大きな関門だったりします。なので、それについて最後に軽く触れておきます。

まず、各企業のキャリアサイト経由での応募。これはほとんど引っかかることがないので、あまりやっても意味ないです。特に世界的に有名なBig Techは世界中から応募が殺到し続けているので、大量のレジュメの山から自分のものが選ばれることはまあ無いと思った方がいいでしょう。

ベストなのはリファラル。内部で働いている知人・友人にリファラルしてもらえれば、余程のことがない限りphone interviewまでは進めます。もしその友人が勤めているregionとは別のregionのポジションに応募したかったとしても、リファラルがあればそのregionのリクルーターに繋いでもらえます。私の場合、AmazonとAppleはそのようにしてロンドンのポジションに応募できました。

また、リクルーターに直接見つけてもらえれば話は早いです。LinkedInはできるだけこまめにアップデートして、具体的にプロフィールを書いておくと良いことがあるかもしれません。(参考に私のLinkedIn profileをここに置いておきます)このケースでも、リクルーターが提示してきたところとは別のregionのリクルーターに繋いでもらうことができます。Googleはそれで一旦ロンドンのリクルーターに繋いでもらったのですが、全然ヘッドカウントがなかったので日本の方で結局受けることにしました。

最終手段として、LinkedIn上で受けたい会社のリクルーターを探して、直接メッセージを送ってみるというのもあります。私はやったことないですが、確かにキャリアサイト経由で応募するよりはこっちの方が当たる確率は高そうです。

4. 各企業ごとの特色

今回受けた5社について、その特徴や受けてみた感想をつらつら書いていきます。NDAを結んでいるので具体的な内容には突っ込まず、ネットで探せば大体出てくるような内容の範囲で書けることに限られていますので悪しからず。

Meta@London, Senior Machine Learning Engineer (E5/IC5)

結果
E5(シニアレベル)として採用

面接の構成
Phone interview - coding x1
Onsite - coding x2, behavioral x1, system design x1, ML design x1

受けてみた所感
一番最初にリクルーターから連絡があり、一番最初に受けて、一番最初に結果が出た会社。Onsiteはこれが人生初だったというのもあってめちゃくちゃ緊張した。
今回受けた5社の中では、最もオーソドックスで対策がしやすい会社だと思う。捻った問題はほぼ出なかったし、練習通りに臨んでそれがそのまま結果につながった。System designの出来がちょっと微妙で一瞬E4での採用になりかけたが、他の面接の出来がどうやらよかったらしく、最終的にE5でオファーが出て安心した。
Metaは入社後最初の2ヶ月間で行うbootcampというonboarding制度があり、そこで所属するチームを決めるので、特定のjob descriptionに応募するという形ではなかった。
Metaのもう一つの特色は、面接対策のためのリソースをこれでもかというほど向こうから提供してくれたことだろうか。応募する際に作られるCareer Profileページからは、まさかの面接対策の問題集やレクチャー動画にアクセスすることができる。他の会社もphone interviewに通るとある程度のリソースはくれるが、このレベルのものは無かった。至れり尽くせりとはこのである。
オファー確定後、各チームの雰囲気を知るために、興味のあるチームのEMたちと面談を設定してもらった。Facebook Ad OptimizationチームとInstagram ShoppingチームのEMたちとそれぞれ話せて、どちらも両方魅力的だったし、何より彼らの人柄の良さやビジネスへの情熱が伝わってきてめっちゃテンション上がった。

Google Japan, Lead Machine Learning Engineer (L5)

結果
L4(ミッドキャリアレベル)としてなら文句無しの採用だったが、ヘッドカウントがなかったため不採用

面接の構成
Phone interview - coding x1
Onsite - coding x2, behavioral x1, ML knowledge x1, ML design x1

受けてみた所感
「Googleはとにかく遅い」と、その採用プロセスに関する悪評が立っているが、全然そんなことはなかった。私のリクルーターはレスポンスがめちゃくちゃ速かったし、onsite後のteam matchingまでもスルスルと進んだ。ただ、私のonsiteのパフォーマンスが際どいラインだったというのもあり、そこから先は少し時間がかかってしまった。5社の中では、onsiteに関するフィードバックを最も熱心にしてくれたので、結局通らなかったとはいえ最後までとても良い体験だった。
Phone interviewはシンガポール在住のEMの気のいいおっちゃんが面接官だった。豪快な口調で「俺は意味もなく難しい問題は出さねぇから、気楽に解いてくれよな!」みたいな感じで言ってくれて、確かにリーズナブルな難易度だった。私が頑張って説明している間にいきなり席を立って部屋の窓を開けて「暑いんだよ〜」とか言ってきたり、まー自由なこと自由なこと。前日遅くまでワインバーで飲んでて、面接当日は体調最悪だったが、おかげさまでなんとかなった。おっちゃん、サンキュー。
日本支社だったので、onsiteでは日本人の面接官の人も何人かいた。その場合は日本語か英語か選べたが、言語のコンテクストスイッチを切り替えるのがめんどくさかったので、全部英語でやってもらった。
Coding interviewはLeetCodeではあまり見ないようなちゃんと考えられた実践的な問題が出されて、とても楽しかった。ML knowledgeは上記の形式とは異なり、機械学習に関する基礎的・理論的な部分に関しての知識・理解を問われる面接だった。
Team matchingは検索ドメインのweb question answering teamにやってもらったが、Googleの検索機能の開発や今後の展望について色々聞けて、とにかく楽しかった。
Indeedもそうだったが、今回担当してくれたGoogle Japanのリクルーターの人は本当に良い人で、結局不採用になってもその後に面接のフィードバックを直接Hangout越しに話してくれたし、割とマジで悔しそうに今回の結果について伝えてくれたので、なんか落ちたのにめっちゃ嬉しかった。もしまた受けることがあったら、ぜひまた彼女に私のリクルーターになって欲しいと思った。

Amazon@London, AWS Software Development Engineer (SDE II)

結果
SDE II(ミッドキャリアレベル)として採用

面接の構成
Phone interview - coding x1(大量のfollow up question付き)
Onsite - coding x2, low level design x1, high level design (ML design) x1(全面接の冒頭20分ほどはbehavioral question)

受けてみた所感
本当はSDE III(シニアレベル)で受けたくてそのポジションにリファラルを通して応募したのだが、特に何のコミュニケーションもなくSDE IIのポジションへのアプリケーションに変えられてしまった笑。どうやら、私の経験年数的にSDE IIIには応募できなかったからよしなに変えたということだったらしい。
Amazonは、onsiteの全面接の冒頭でbehavioral questionを聞いてくるのが大きな特徴だと思う。AmazonにはLeardership Principlesといういわゆるcompany valueのようなものがあり、それをとにかく大事にしているらしい。なので、behavioral questionでもそれに即した内容の質問がされる。4-5個ある面接全てでbehavioral questionをされると、流石に同じようなことを聞かれることもあり、流石に引き出しが足りず何度も繰り返し同じことを話したりした笑。めっちゃ喋ってから急いで問題を解くので、とにかく疲れるし喉がやられる。面接の合間にウィダーを飲んでトローチを舐めたりしていた。
また、Amazonはhigh level design(system/ML design interview)とは別に、low level designというちょっと特殊な面接をすることでも知られている。これは主に、特定の機能を満たすAPIやライブラリを設計してそれをざっくりと実装する、というもので、オブジェクト指向設計やインターフェース設計に関する能力を見られている。
Amazonのonsiteは、基本的に応募したポジションのチームのメンバーが面接官になるのだが、1つだけ全く関係ないチームのエンジニアが担当する面接がある。その面接官はbar raiserと呼ばれ、チームのバイアスが乗らないように、より高い水準を採用の意思決定に求めるように働きかける役割を持つ。Bar raiserがどの面接を担当するかは基本ランダムらしい。私の場合、2つ目のcoding interviewの面接官だけAWSの人ではなかったので、おそらく彼女がbar raiserだったのだろう。ただ、幸運にも問題が恐ろしく簡単だったので瞬殺で解けてしまい、おそらくそれが効いて、ロンドンでのSDE IIにしてはかなり高いオファー額を提示してもらうことができた。

Indeed Japan, Software Engineer

結果
Senior software engineerとして採用

面接の構成
Phone interview - Karatという外部サービス上での面接
Onsite - coding x2, behavioral x1, system design x1, code review x1

受けてみた所感
リクルーターから直接連絡が来て応募したが、Meta同様に特定のポジションに応募する形ではなく、面接のパフォーマンスでグレードが決まり、その後のteam matchingで具体的なポジションが決まる形だった。
5社受けた中で、日程調整やリクルーターからのインストラクションも含め、面接全体の体験が最も良い会社だった。もう最高。あまりに良すぎて、さらにオファーの条件も想像を遥かに超えて良くて、最後の最後までMetaとIndeedで悩んだ。
Phone interviewで用いられるKaratとは、外部の技術面接用プラットフォームサービスで、Indeedのエンジニアではなくそのサービスのエンジニアが面接官をやってくれる。これが存外大変なのだが、そこで問われる内容はなかなかレベルの調整がいい感じになされていて、phone screenにはうってつけなのではないかと思う。
Onsiteのcode review interviewは、今回受けた中ではIndeedだけの特色のある面接だった。他の会社もmanagerやstaff engineer以上のレベルでの応募では聞かれることがあるらしい。コードレビューについて軽くディスカッションしたり、ツッコミどころ満載な趣深いコードが渡され、それをその場でコードレビューしてコメントを書き込んでいったりする。いかに丁寧に具体的にoffensiveにならないように、教育的なコメントをしていくかが大事らしい。シニアになればなるほど人のコードをレビューすることが増え、コードレビューを通してメンタリングをしたりするので、なるほど納得である。この面接もIndeedではleveling面接として扱われる。
他の会社ももちろんそうだが、Indeedは特にエンジニアのビジネス理解を重要視しているらしく、behavioral question interviewでもその片鱗が見てとれた。また、coding interviewでもただ問題が解けるだけでは終わりではなく、より深い部分について突っ込むようなfollow up questionをひたすら問われる。Indeedのonsiteは、今回受けた5社の中で最も楽しくやり応えのある面接だった。
Team matchingでは3つのチームのEMと面談をさせてもらい、チームのカルチャーやビジネス課題、開発のスタイルや期待される業務のスコープについて根掘り葉掘り聞いた。そのうちの1つのPersonalization platformチームのEMはonsiteのbehavioral question interviewを担当してくれた人でもあり、とにかくめちゃくちゃ情熱的で良い人で、「この人の下で働けたら超楽しいだろうな〜」って掛け値無しに思えた。Matching ScienceチームのEMとも話せて、実は前々からTwitterで相互フォローで繋がっていたというのもあり、キャリアのことなど脱線しつつひたすら長話してしまった。
Indeedのリクルーターもとても良い人で、正直オファーを断るのが辛過ぎた。真面目で仕事が早くてコミュニケーションも丁寧で、本当に素晴らしいリクルーターだった。

Apple@London, Big Data Engineer for Machine Learning

結果
結果が出るのが遅かったので途中辞退(通ってはいたっぽい)

面接の構成
Phone interview - 無し
Onsite - coding x1, behavioral x1, data engineering knowledge x1

受けてみた所感
AppleはData Engineerとしてのポジションを受けた。MLに関連はするものの、よりdata focusなので、面接の内容もdata engineer向けのものになった。どうやらAppleは、受けるポジションやチームによって面接の形式が全然違うことで有名らしい。
Coding interviewは少し独特で、分析クエリを書かされるような問題も出たりした。シャドウイングといって、メインの面接官とは別でサブの面接官が横で黙って静かに聞いているということがBig Techのonsiteではよくある。Appleのcoding interviewでもそういうシャドウイングをするサブの面接官がいたのだが、その人は実はメインの面接官よりもシニアな人で、結局その人がめっちゃ質問してきて、彼女と話して盛り上がり過ぎてメインの面接官の人が苦笑いしてて、なんかウケた。
Data engineering knowledge interviewはデータエンジニアの基礎知識について問うような面接だった。面接官の人は多分個人の仕事部屋から面接をしてくれていたのだが、彼の部屋には大量のギターがズラッと並べて置いてあって、それについて突っ込みたくて突っ込みたくて仕方がなかった。

総括

そんなこんなで、今回の5社の面接体験をざっと振り返ってみました。各会社ごとに特色があって、なんだかんだ全部楽しめて、最後は笑顔で振り返れるような体験になったと思います。やってみると存外これが面白く、面接のたびに実際のところ中はどうなってるのか聞き放題(面接の最後5分は大体自由な質問タイム)なので、知的好奇心もかなり満たされました。ただ、5社同時並行は流石に大変過ぎたので、次に転職する際はもうちょっと緩くできるようにスケジュールを組もうと思います笑。

5. オファーと意思決定

意思決定とその理由

4月中にAmazon、Indeed、Metaからのオファーが出揃いました。オファー条件から最後はIndeedとMetaの2社で悩み、最終的にMetaを選びました。その理由を簡潔にまとめるとこうなります。

  • Metaでは実際に自分が普段良く触るサービス(Facebook, Instagram)の開発ができる

  • 普段高品質で感心していたFacebookの広告やInstagram Shoppingのコンテンツの最適化をするチームがMeta@Londonにあり、それがとても楽しそう

  • Metaはユーザー数が地球規模(10億人超え)で、そういった超大規模サービスの開発に携わることで学べることが多そう

  • Metaの自分が興味を持ったチームのEMがワイン好きのフランス人で、なんかちょっとバイブスが合いそう

  • Metaはロンドンなので、確実にcomfort zoneを抜けることになり、自分が今持っている価値観を揺さぶるような強烈な刺激になりそう

正直オファー額に関しては、日本の物価を加味すれば実はIndeedの方が良いオファー条件でした。MetaよりIndeedの方がRSUの割合が低くてベースが高かったのも魅力でした。リクルーターの対応も良く、面接官たちやteam matchingで話したEMたちもみんな良い人たちで、Indeedに行っても絶対に自分のキャリアにおいて大きなプラスになったと思います。正直今回ほど自分の身体が複数個あったらな。。。と思ったことはなかったです。

こんな長々とした記事を最後まで読んでいただいてありがとうございます。ここに記載した私の転職活動体験が、誰かの今後のキャリアに役に立つことがあれば無上の幸甚であります。最後に、Metaから提示された具体的なオファー条件について、下記に記載して締めくくりたいと思います。

Offer Package of Meta@London, Senior Machine Learning Engineer (E5/IC5)

この続きをみるには

この続き: 1,147文字

メルカリを退職してロンドンのMetaに転職します 〜 外資Big Tech転職活動体験記

松岡玲音

500円

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
松岡玲音
メルカリUSの機械学習エンジニア、検索や推薦機能を担当。日本ソムリエ協会認定ワインエキスパート(2020年)🍷