ITエンジニアが転職活動をする中で、コーディングテストに出会うことがあると思います。
私もちょうどコーディングテストに出会い色々と対策を行いました。
これからコーディング試験に臨む人の力になればと思い、簡単にまとめておきます。
コーディングテスト
エンジニアとしての最低限持っていてほしい実装力、アルゴリズムの構築力が問われる試験だと思います。
私の知る限り、下記の3種類があります。
- オンラインサイトでの試験
- 電話で画面を共有しながら問題を解いていく試験
- オンサイトでホワイトボードに問題を解いていく試験(Googleなどで実施されるやつ)
筆者は一番上に3回ほど出会いました。今回は、このオンライン試験形式についてまとめようと思います。
オンライン試験
出題範囲
間違いなくアルゴリズムの問題は出ます。範囲は幅広く、基本的な動的計画法などはおさえておく必要があります。
後は職種や技術領域に応じて、知識問題や特殊な問題が出たりします。
筆者はSQLの問題やDeep Learningの知識問題にも出くわしたことがあります。
時間
1時間から2時間程度です。家で受験する場合は、コーヒーを淹れるなど集中できる環境の整備を事前にしておくことをオススメします。
選択言語
C,Java,Python,Python3...など基本的には自由に選択できるはずです。
ただ、参考サイトにも記載してありますが、よほど使い慣れている言語が無い限りは、pythonがおすすめです。圧倒的に楽です。業務でjavaを使ってますが、効率重視であえてpythonを選択しました。
オンラインサイトだと予測変換が効かないため、予測変換をせずとも実装できるようによく使うような構文、表現くらいは暗記しておく必要があります。
Tips
- 使い慣れたエディタを利用
- ローカルで使い慣れたエディタを用意しておき、答えがわかったらブラウザ上のエディタにコピペがベターです。
- わからなかったら即ぐぐる
- せっかくのオンライン試験です。拘らずにわからなかったらぐぐりましょう。もちろん試験後にわからなかった部分の復習は必須です。
試験対策
色々なWebページで試験対策方法が書かれていますが、私の取った方法を書いておきます。
LeetCodeで高評価のeasy問題を解きまくる。
LeetCodeは、海外で有名なコーディング試験対策サイトです。
OS、アルゴリズム、SQLなどカテゴリごとに問題があり、それぞれeasy, medium, difficultの難易度に分かれています。
さらに、その問題毎に問題を解いた方の評価(good or bad)が書かれています。
また、問題を解いた後に、自分の回答が実行時間・メモリ使用量が他の回答者と比較してどれくらいか、がわかります。
私はeasyの難易度でgoodの比率が50%以上の問題を良問として、一日一問以上解いていきました。合計50問くらい解いたかな、と思います。また、なかなか時間が取れない方はここでとりあげられている問題だけでも良いかもしれません。
個人的には、easyの問題をbruteforceでなく、しっかりとアルゴリズムを理解しながら解くことをオススメします。bruteforceは、誰でもできてしまうので…。
脱線ですが、問題ごとに解法議論ページがあります。めちゃ賢いプログラマかいるので一瞥をおすすめします。私が50Stepで書いたプログラムが2Stepにまとめて書かれてるのを見て、手が震えました。
Codilityで苦手な問題の種類を解く。
Codilityは楽天などが採用しているらしいコーディング試験サイトです。
こちらはアルゴリズム系のみで、20問くらいは無料で解けます。
LeetCodeは解けたがどうかが重視されますが、Codilityは解けた上でパフォーマンスチェックや外れ値もカバーできているか、テストされます。
そのため、Leetcodeで基本パターンを学習した後に、Codilityでパフォーマンスや外れ値制御を習慣づけるのが大切だと思います。
他
Atcoderやproject eulerなど利用してもいいかもしれません。
競プロは、それでそれで面白いと思いますが、今回はテストに打ち勝つのが主目的だったのでこれらのサイトは利用しませんでした。
さいごに
私は上記のLeetCode, Codilityで試験対策を行い、当日はpython3を利用したところ2勝1負でした。
業務でpython3を書くことはあまりありませんが、上記の対策サイトで使うだけで最低限は使いこなせるようになると思います。
参考
https://medium.freecodecamp.org/coding-interviews-for-dummies-5e048933b82b
※英語もそんなに難しくないので、mediumの原文を読んでもいいと思う。
https://qiita.com/tmsausa/items/1ea54a2af12dbf36065e
http://hirotaka-hachiya.hatenablog.com/entry/2014/09/01/204720