🐈

独学エンジニアの面接対策アルゴリズム勉強計画

2021/12/30に公開

概要

  • 有名ポッドキャスト TodayIlearned を聞いて学びとなった箇所をまとめる
  • 本記事は #6 The Self Taught Engineer's Algorithm Studly Plan を元にしている
  • 現在アメリカで働くエンジニアの方がどのように独学でアルゴリズムに関する面接対策をしていたか、についてまとめる
  • なお、本記事は個人の備忘録的な点が多いので、ご注意を。。。

面接プロセス

  • アメリカの会社でエンジニア職を志望する場合、以下のようなプロセスが行われる
    • Phone Screening(電話面接): 2回
    • Onsite Interviews(オフィスでのコーディング試験): 4時間くらい
  • 上記の面接で十中八九聞かれるのが「アルゴリズム」 に関する質問
    • 例えば、arrayが渡されて特定の処理を行う
    • ランダムな数字が入った配列をSortメソッドを使わずに効率よく昇順にする、など

勉強プラン

  • まず第一に考えること
    • 今勉強していることがどこで仕事につながるだろうか考えることが大事
    • ただ、これは簡単ではなく、結構チャレンジングなこと
    • 具体的には、どのようなコンテキストで使えるかなどを考える
  • 本などを使ってサンプルコードを読む
    • アルゴリズムの概念を理解する
  • 理解ができたら、LeetCodeなどを使って問題を解いてみる
    • 具体的な勉強方法は次の章を参照する
    • とりあえず自力で解いてみる
    • 解き終えたらメモリ最適化など(big o notation)について必ずレビューを行う

LeetCodeを使った具体的な勉強方法

  1. 問題を読んで理解する
  2. 今読んでいる問題がどのカテゴリーに分類されるか理解するb
  3. 解くのに最適なデータストラクチャを考える
  4. 決めたデータストラクチャに基づき、実際に解くアプローチを考察する
  5. 実際に問題を解いた後により最適な解法(速い・メモリ効率がよい)がないか
  6. 手書きで問題の答え(コード)を書く
  7. 書いたコードを見て実際にコンパイルするか読んでみる、コンパイルしたら本当に問題を解けるか確認する
  8. 手書きで書いたコードをLeetcodeエディタに貼り付けて答えを見てみる

重要なポイント

  • コードの手書き
    • 面接の時は普段つかっているエディタによる自動補完(Auto Completion)ができない
    • そのため、手書きで練習しておくのは非常に大事
  • どのパターンに合致する問題か即座に認識する能力
    • アルゴリズムのパターンを理解した上で、面接で重要になるのはどのパターンの問題なのか識別する能力
    • この判別ができれば、あとは型に合わせてコードを考えるだけ
    • そのため、面接前には徹底的にアルゴリズムパターンを頭に入れて、判別できるようにしておくと良い
    • このアルゴリズム概念理解にあたり、有償ではあるがcodelastなどがコンテンツとして良いらしい

所感

  • 筆者は今後エンジニアとして働ける会社への転職を考えているため、今後の勉強方針として勉強になった
  • 将来的に北米圏を目指すしている方などは上の面接プロセスは多くの場合で必要なため、参考に勉強してみるのはよいかも
  • 気になったかは原題のポッドキャストもぜひ(#6 The Self Taught Engineer's Algorithm Studly Plan)

Discussion