cover image
📱

海外Techの面接内容 for mobile developers

Created
2021/11/2 20:12
Tags
Property
こんにちは
合否がまだ出ていないのですが、海外の大手テック企業の面接を受けた経験のメモになります。
特にSystem Design Interviewについて書かれたモバイルエンジニアに向けたブログ記事は少なく、面接対策をどうすればいいのかわからなかったため、今後海外就職を目指している人の参考になれば幸いです。
かなり雑な書き方になってしまっていますが、ご容赦ください。🙇
 

きっかけ

co-opビザというものを利用しており、現在は労働がパートタイム(週20時間)しか許可されていません。来年の5月からフルタイム(週40時間)で働けます。カナダに来た当初、パートタイムのエンジニアジョブに20~30件ほど応募してみましたが、いくらレジュメを送れども返事をもらえず辛酸を嘗める形となりました。Indeedでは一日に100件は応募がくるという話も聞いたことがあるので仕方ないとは思いつつ、一旦フルタイムで働ける時期を待つことにしました。
そこで1年間ただ待つのではなく、魅力的なレジュメやLinkedInプロフィールをつくれるようにOSS活動や個人開発に力を入れるようにしました。
活動をしていく中ではLinkedInにもブログ記事などを投稿していたところリクルータの目に留まり選考が始まりました。
本腰を入れて就活をしていたわけではなかったのですが、落ちてもいい経験になるしとにかくやってみようという心意気でした。
 

選考の流れ

上記のリクルータとRecruiter Interviewとしてビジネスモデルや企業文化、今後の流れについて15分ほど軽くお話ししました。
大きくCoding Challenge、Phone Interview、Virtual Interviewの3つのステップがあり、それぞれ受けたので詳細について書いていきます。
質問内容などをすべて記録しているわけではないのでご容赦ください。
また参考になるかわかりませんが、自分が取った対策・気をつけたことも残しておきます。
 

Coding Challenge

内容・感想

よくあるLeetCodeやAtCoderにある問題です。
HackerRankというサイトで45分間行い、所感としてはeasy~mediumレベルでした。
言語はSwiftを利用しました。
実際のアプリで起きうるような現実に即した内容になっており、問題の理解に少し時間がかかりましたが、なんとか解くことができました。
 

対策

Coding Challengeについてはとにかく慣れるしかないと考えていました。
Recruiter Interviewの時に、Coding Challengeはいつ受けてもいいと言われていたので2週間ほど毎日2, 3問いろんな問題を解くことで問題の傾向を把握し解法パターンをインプットしていきました。
実際にはそこまで難しい問題ではなかったのですが、アルゴリズム問題の感覚を取り戻すという意味でもやってよかったなと思っています。
 

Phone Interview

内容・感想

いわゆるTechnical Interviewと呼ばれるもので、エンジニアと電話を繋ぎながらいくつかの問題を解いていきます。
HackerRankのオンラインIDEで画面共有しながら提示された問題を解決するメソッドをいくつか書いていきます
 
口頭で伝えられた問題を理解することができず、随時テキストに書いてもらったものを2, 3度読んで理解しコーディングをするという、自身の理解力か英語力かの弱みが露呈した印象です。Phone Interviewは同僚とモブプログラミングしていることを想定されているのでわからないことは明確にすべきなのですが、あまりにも不甲斐ないなと当時感じました。

対策

実際どんな問題を解くのかわからなかったので、引き続きLeetCodeをやっていました。
ただ、複雑なアルゴリズムを解くというよりは与えられた変数や条件をきちんと理解しコードに落とし込むという作業に近いような感じです。話しながらなので黙ってコードを書かず、エッジケースの確認や実装方針を確認してからコードを書き始めるように、そして今何をしようとしているのかを口頭で伝えながらコードを書くように気をつけました。
問題の難易度的には簡単だったのですが、2つの問題を解いたところで時間切れとなってしまいました。最後の質問タイムで問題は3つ用意されていたと教えて持ったので、合格したかどうかは半信半疑でしたが無事通過しました。
 

Four Virtual Interviews

内容・感想

滅茶苦茶大変だった。。というのは置いておいて、これは割と大きなテック企業の面接を受けるなら避けては通れない選考プロセスの一つです。
Technical InterviewとBehavioral Interviewという面接を2つずつぶっ通しで受けました。45分ずつ合計で4時間弱、4人の面接官と話し続けました。あっという間に時間は過ぎていったのですが、日本語ですらこんなに話したことはないと思うほど喉は渇き切っていました。
それぞれの面接内容を覚えている限り解説します。
 

System Design Interview - Waitlist feature

「Waitlist」とは、レストランに到着した際に満席の場合の整理券をアプリ上で順番待ちを確認し、席が確保できれば通知するというものです。
本当にこのくらいの情報しかなかったので、まずは基本的な要件定義や考慮しないことなどを確認し、実装を想定してUIやAPIの定義の仕方などを話していきました。
今回、私はログインなどを必要としないシステムを想定し、ユーザにWaitlist追加時に電話番号を入力してもらうように考えていたのですが、なぜ電話番号なのか、他にはどんな方法が考えられるか、など少しずつ思考を深めていくような印象を抱きました。
 

Behavioral Interview 1

一つのインタビューから連続してBehavioral Interviewが始まりました。
お互いの自己紹介から始まり、最近取り組んだ仕事やプロジェクトについて話し、Conflict(仕事上での衝突や対立)の経験や、どうやって対応したのか、コミュニケーションについてなどいろんなことを聞かれました。
 

Behavioral Interview 2

15分の休憩を挟んだ後、2度目のBehavioral Interviewです。
内容は1回目とあまり変わりませんでしたが、面接官によってどんなポイントを重視しているのかが違うことはよくわかりました。コードレビューや新しい技術のキャッチアップなどより技術的な話をより多くした印象です。その他にも、なぜ前職を辞めたのか、これまでの経験と失敗、そこから何を学んだのかなどを聞かれました。
 

System Design Interview - Search feature

2回目の今回は、アプリ内に検索機能を導入せよというもので、これまたざっくりしているなと感じつつ、REST APIならエンドポイントはPOST api/search?query=xxxにするみたいな話から始めて
  • どんな画面構成が必要か?
    • 結果が空ならどうする?
  • オフライン対応どうやってする?
  • どれくらいの結果をキャッシュに保存する?
    • そのUnitテストってどうやって書く?
  • GraphQLって言ってたけど、RESTと比べた時のデメリットって何?
 
のような質問を受けました。 わからないものはキッパリわからないと言いつつ、推測できそうなものは落ち着いて答えてみましたが果たして。。
面接官は質問リストを用意しているみたいでしたが、たまに思いつきで質問してきたりすることもありました。
System Design Interview は1つで、もう一つは前述したPhone Interviewのような内容だと事前に伝えられていたのですが、驚きましたが2回目だったので乗り切れました。

対策

System Design Interview

一度はMock Interviewしてもよかったなとは思いますが、自分はなんとかなりました。
Goodle Drawingsで自分なりにアーキテクチャ設計をしたり、メッセージアプリを作るならどうやって作るか?を友達と議論したのがとても役立ったのでおすすめです。
System Design InterviewについてググるとインフラやDBなどモバイルエンジニアが普段関与しない分野について触れられていることが多い印象でした。そんな中でも勉強になることは多かったので楽しめましたが。下記に参考にしたYouTubeや記事を残します。
System Design Interview2021/11/11 0:382021/11/11 1:16
 

Behavioral Interview

大きく2つのことをしてきました
 
  1. 自分自身について英語で話す練習
いかにエピソードトークを英語で上手に話せるかという印象で、この準備がなければ45分間しどろもどろだったろうなと思います。
そんななかで気をつけていたのはSTAR Methodと呼ばれるフレームワークを意識することです。詳しくは下記のリンクが参考になりますが、どんな話をするにせよ状況(Situation)、課題(Task)、行動(Action)、結果(Results)を順に話していくことで相手にわかりやすく伝えることができます。
また、質問はある程度固定化されているので下記ページのようなリストに対して回答を用意し、なんとなく空で話せるように準備しました。(自分の回答は公開にあたり削除しました。)
Initial Interview questions2021/11/11 0:272021/11/11 1:08
 
 
  1. 会社についての調査
主に技術ブログを読むことで、扱っている技術だけでなく評価手法や企業文化・バリューについて学びました。アウトプットというよりインプットが目的でインタビュアーと話せるトピックを一つでも多くしておこうというのがモチベーションでした。
また、自分ならどうやって会社のバリューを発揮できるのかも一応考えました。(聞かれることはありませんでした。)
 

逆質問

Virtual Interviewの各セクションで最後の5分ほど質問できる時間をもらえました。個人的には、リクルータには聞けないような技術的な質問をしたかったので、もっと時間が欲しかったですが仕方がありませんね。
インタビュアーのキャリアやプロジェクト、インタビューの中で議論したトピックに関連したことを臨機応変に聞いてみました。
下記のような質問リストを準備しておいたので参考にしてくださいませ。
Do you have any questions for us?2021/10/28 19:012021/11/12 6:33
 

おわりに

リクルータから連絡をもらってから1.5ヶ月の長い戦いがようやく落ち着きました。10月いっぱいは本当に落ち着かず、プレッシャーに弱い自分を感じながら過ごしており、合否はともあれ漸くホッと一息ついているところです。しばらくゆっくりしていたので、粛々とコードを書いていく所存です。
今回のインタビュー内容はある種形式化されているので、一度経験すれば何度でも再利用できますし、とても有意義な期間となりました。特にBehavioral Interviewにおいては自身の経験を英語で話せるようにするいい練習になりましたし、Technical Interviewも慣れの部分も大きいので、今後転職するにしてもすぐに思い出せそうで、とても良い機会となりました。
もっとここの部分について知りたいなど質問があれば答えられる範囲で答えますのでお気軽にご連絡ください