HireRoot

ここからはじまる、エンジニア採用

アルゴリズム形式の解答の流れ(候補者向け)

はじめに

こんにちは! 株式会社ハイヤールーの谷合(@poster-keisuke)です。

今回はコーディング試験問題の中でもよく出題されるアルゴリズム形式の解答の流れを画面を元にご説明させていただきます。

コーディング試験の全体の流れに関しては、以下の記事から確認ください。

blog.hireroo.io

アルゴリズム形式の特徴

アルゴリズム形式では、基礎的なコンピューターサイエンスの知識を必要とする問題が複数出題されます。

出題される問題にもよりますが、1問あたりの解答時間の目安は大体~30分程度です。 出題数は企業様ごとに異なりますが、多くても大体3問まとめての出題がほとんどなため、全体でも約1時間半ほどで提出できるものとなっております。

コーディング試験の方法としてはオンラインとオフラインの2種類があり、(どちらの方式かはコーディング試験を発行した企業様が決めているため変更はできません。)それぞれの特徴を以下でご説明いたします。

オフライン方式

オフライン形式は決められた期限内に問題を解き、コードを提出する方式です。 図1の画像のように、スケジュール画面では提出期限を確認することができます。

f:id:poster-keisuke:20210527153851p:plain
図1 スケジュール画面でのオンライン/オフライン課題

可能な限り問題を解き、期限内であれば何度でもセッションをぬけることが可能です。コードの途中結果が保存されているため空いた時間で提出することが可能です。

オンライン方式

オフライン方式と違うのはコーディング試験の日程が決まっていることです。 招待された際に開始時間を共有されるので、その時間にスケジュール画面からコーディング試験を選択することによって、企業の面接官の方とのコラボセッションが開始されます。

知識があって問題自体をちゃんと解けるかということも重要ですが、オンラインでは面接官の方とコミュニケーションを取りながら問題を解き進められるかということが非常に重要です。一緒に働く同僚として一緒に問題を解く感覚で質問や会話をしながら問題を解いてみてください。

オンラインにおけるコーディング試験の意義は別のブログにまとまっていますので、詳しくはこちらをご参照ください。

blog.hireroo.io

操作の流れ

コーディングを行う画面の説明

画面は次のような構成をしております。

  1. 言語の選択
  2. 問題文
  3. コード実行
  4. 提出

1 言語選択

言語はリストにあるものの中から自由に選択して解答することが可能です。 言語によっては実行時に時間がかかるものがありますのでご注意ください。

2 問題文

問題は一問ずつ解答可能です。 問題文の中にはサンプルの入力値が記載されておりますので、書いたコードが正しいかどうかの判断に利用できます。

f:id:poster-keisuke:20210527154344g:plain
図2 問題文と言語選択

3 コード実行

入力値を入力後に実際にコードを実行することができます。

出力と期待値、ソースコード内にログを出力するコードを記述した場合はログの3つが出力タブで確認できます。 仮に文法エラーやコンパイルエラーなどがー発生した場合は、そのログが代わりに出力されますのでその場合はそちら参考にコードを正しく書き換えてください。

4 提出

問題文をしっかり読み、解答となるコードを書きテストを行った上「提出して次に進む」ボタンから提出が可能です。 問題は一問ずつ提出する必要があり、一度提出したコードは再提出できないため事前にしっかりテストを行って下さい。全ての問題を解き終えるか制限時間に達した場合には右上のボタンからセッションを抜けることが可能です。

f:id:poster-keisuke:20210527154523g:plain
図3 コードの実行と提出

入力値の設定

入力値は問題の種類によって若干の差異があります。 それぞれご紹介いたします。

アルゴリズム

問題文の説明をしっかり読み正しい形で入力してください。例えば第一引数に string、第二引数に int 型を持つ問題の場合、以下のように入力します。

"ここにstringが入ります", 100

現在対応しているデータ型は以下です。正しく入力ができていない場合 InputInvalidError が返り値として処理されます。問題の引数のデータ型を確認し、以下の対応表を参考にし引数を入力してください。

備考
string "hello world" シングルクォートでなくダブルクォート
int 12345 特になし
float 1.2345 特になし
bool true trueもしくはfalse
array [1, 2, 3] 複数要素の場合はカンマ区切り
map {"key": "value"} 複数要素の場合はカンマ区切り
linked list [1, 2, 3] 1->2->3
binary tree [1, 2, 3] nodeが存在しない場合はnull

データベース

アルゴリズムと異なりデータベースの問題の際は引数ではなく、シードデータを入力します。

例えばidnameを持つ userテーブルの場合

カラム名
id int
name string
[[1, "kosuke"], [2, "keisuke"]]

のように[ ]の中にテーブルのスキーマ定義に従って入力をしてください。 複数のデータを挿入したい場合は、更に[ ]の中にカンマ区切りでデータを入力します。

以上で操作の説明は終わりです。

Tips

問題は提出後、面接官によって評価されます。わかりやすいコードや設計などを意識して進めることによって、評価がしやすいコードとなり好印象に繋がります。

アルゴリズム形式の問題では関数をわけたりロジックに適切なコメントを書くことによりオフラインでの評価がよりスムーズになります。せっかく実装したアルゴリズムが理解不能のため評価ができないと行ったケースを防ぐためにも伝わりやすいコードを書きましょう。

まとめ

ここまでアルゴリズム形式の解答の流れを順に説明いたしました。 オフライン・オンラインの方式があり、オフラインは決められた期限内に提出する方式でオンラインは実際に面接官の方と行うコラボセッションの中でコーディングするというものでした。

また、提出までに必要な機能の紹介もしました。 UIは非常にシンプルかつ機能性が高いものとなっており、環境の用意などが不要です。 ここで説明した以外のことで使い方に困ったり、事前に確認したい場合はスケジュール画面右下の「i」ボタンから気軽に弊社サポートSlackにご参加下さい。(フィードバック等いただけると幸いです!)

ここまで読んできただき、ありがとうございました。更にCX(Candidate Experience)を改善するために新機能の開発や既存機能の改善を行っていますので、今後も更なるアップデートを乞うご期待ください!