🔒

第三章 各面接スタイルの対策

ここでは各面接スタイルに対する対策方法について説明します。内容は以下のようになっています。
  • コーディング面接の対策ついて
  • 技術質問(Domain Knowledge Question)対策について
  • システムデザイン対策について
  • 課題提出対策について
  • 行動面接対策について
  • レジュメの深堀り(Resume Deep Dive)について
  • Karat面接について
  • オファー面談対策について(給与を上げるには)

コーディング面接の対策ついて

コーディング面接はグローバルテック企業の面接において最も比重が置かれます。ここにリソースをベットする事が最も重要なのですがどのように効率的に準備をすべきかについて語っていきます。

コーディング面接では、どのように評価されるのか?

各企業において評価項目や比重は違いますが、大まかにわけてこの4つの要素に気をつけてコーディング面接に取り組んで下さい。
  1. Problem solving - 問題を理解し、体系的、論理的かつ正確にアプローチできる。また、複数のアプローチとそのトレードオフについて議論する事が出来ると評価が高い。各アプローチの時間・空間計算量を正確に判断して、最適化できる。
  1. Coding - バグがなく、クリーンで、可読性、再利用性、保守性の高いコードを書く事ができる。
  1. Communication - 問題に対する自分の思考回路を言語化し、面接官に伝える事ができる。
  1. Testing - (エッジケースを含む)複数のテストケースを作成し、自分のコードが正しく動くことを示す事ができる。

コーディング面接でプログラミング言語は何を選択すべきか?

コーディング面接で使用するプログラミング言語は基本的に面接官が読めれば何を選んでもよいパターンが多いですが、応募ポジションによっては相手から指定される場合があります。ここでは何を選んで書いても良いと言われたと仮定し考えていきましょう。
コーディング面接において適切なプログラミング言語とは何でしょうか?個人的に最もオススメなのはPythonです。Pythonは簡潔で読みやすく、アルゴリズムとデータ構造の問題を解く上で必要な標準ライブラリが揃っています。競技プログラミング言語でも近年始めた人はPythonを選んでいるパターンが多いのではないでしょうか?コーディング面接は競技プログラミングのようなシビアな実行時間制限があるわけではありません。オンラインのエディタにコードを書いて実行しないパターンもあります。
Pythonを使わない場合はJavaかC++でしょう。基本的にこの3つの内どれかを抑えておけば間違う事はありません。とあるエンジニアの話ではgolangでコーディング面接に臨もうと思ったら、Javaで書いてくれないか?とお願いされたパターンもあります。私も仕事ではTypeScriptを書いている時間が最も多いですが、インタビュー用のプログラミング言語はPythonを選んでいます。絶対これというものはないので最後は皆さんの判断におまかせします。一番自信のある言語でゴリ押ししたいパターンもあると思います。
💡
高年収企業へ行くためのプログラミング言語何をメインにする? コーディング面接はPythonがオススメですが、実際の仕事では何をメインに置くと良いでしょうか?サカモトはJavaをオススメします。何故かという理由はシンプルで、給与が高い求人の応募条件に合う確率が上がるからです。外資金融などの求人を見るとJavaの経験を必須としている場合が多いです。CitiのApps Dev Lead Programmer Analyst (VP) -JPN- Operations & Technology-の求人には8+ years of rich working experience on Java & Web developmentが必須条件に書かれています。また、大規模システムのバックエンドでは未だにJavaを使っている事が多いです。例えば、PayPayのシステムでは基本的にはJavaで Spring Boot を用いて実装されています 。また、SmartNewsのアドサーバーのバックエンド開発ではJavaの経験を必須としています。 しかし、GAFAMのような企業では基本的にプログラミング言語に関する要件はゆるく、オブジェクト指向言語のいずれかの経験があればOKという場合が多いです。明確な判断基準があるわけではありませんが、大規模システムを扱っていながらも、GAFAMのような巨大エンジニアリング組織という程でもないといった場合に必須か必須でないかの傾向が分かれていると考えています。

学習プラン

コーディング面接対策で重要な要素はどの分野のどの問題をいつまでに何問解くかという学習プランを建てる事です。活用するのは基本的にLeetCodeで問題ありません。LeetCodeは面接で出題された問題が投稿されているNDAを無視したサイトではあります。中にはLeetCodeはevilだと考えている方も数多くいますが、ByteDanceなどのテック企業は公式の技術面接ガイドにLeetCodeで練習してくださいと発言するくらいには世に受け入れられています。活用しない手はないので、活用しましょう。
よくLeetCodeを300問解けば〇〇に入れますか?など色々な噂はありますが、一番の重要な事は解法を丸暗記する事ではなく。良問と呼ばれる問題を解くことで、未知の問題に遭遇した時にこれまで経験したアプローチを応用する事です。数多く解けばそれだけ結果は出ると思いますが、時間効率を考えれば、無闇矢鱈に問題を解くのではなく、良問にフォーカスして習熟していきましょう。
例を挙げると、Reverse Linked Listという、ただLinkedListを逆にする問題があります。逆にするのは簡単と思う人もいるかもしれませんが、全く知らない人が例えば2つのポインタ(prev、current)を使って解くんだよ、再帰を使って解くんだよと一瞬で思いつく事ができるでしょうか(少しは時間がかかるはず)?このような基礎テクニックを頭で考えなくとも身体に身につけるのが効率の良いLeetCodeの使い方だと思っています。
この基礎テクニックを学んだ状態で、例えばReorder ListのようなLinkedListを逆にするテクニックを活用する問題に出会った時に応用できる状態になっていれば、何も知らない時より早く問題を解くことができます。

LeetCodeで学習する上で重要な事項

ただ闇雲に問題を解くより、次を意識しながらLeetCodeで学習していきましょう。
すべてを見るには

返金は購入日から1日以内に申し出て下さい。詳細はこちらからご確認ください。
また、このコンテンツ以外の他の永久アクセス権は付与されない事はご注意下さい。

支払いはによって保護されています

購入済の方はこちらからログインしてください

Loading...