ソフトウェアエンジニアの技術面接|種類と対策
この記事で説明する「ソフトウェアエンジニアの技術面接の種類と対策」をみることで、 実際の技術面接を迎える前に準備やどういったことをすればいいのかのイメージがつくようになります。
技術面接の種類
大きく分けて下記の通りです。
面接の種類 | 必要なスキル | 具体例 |
---|---|---|
1. ナレッジクイズ (Knowledge Quiz) | 技術知識力 | |
2. システムデザインインタビュー (System Design Interview) | 設計力 | |
3. データ構造とアルゴリズム (DSA: Data Structure and Algorithm) | アルゴリズム力 | |
4. コーディングインタビュー (Coding Interview) | 実装力 |
全ての面接で「コミュニケーション力」はコアスキル
面接では、人と人のやり取りなので「コミュニケーション力」はコアスキルとなります。
そのため、技術力がいくらあってもそれを表現できるコミュニケーション力がゼロだと評価されません。
最低限として下記のような観点でコミュニケーション力を意識しておくことをおすすめします。
- 質問に答える時は相手の質問内容にきちんと答えられているか
- 何かを説明するときはわかりやすく順序立てて説明できているか
- 面接官からの質問に「それは〜という意味ですか」など、きちんと不明点は確認できているか
- 答えがわからない時は、「わからないです」と明確に回答して開示できているか
- 下手に誤魔化す方が逆効果なので、マイナス点が高くなることがあります。
- 「わからないのですが、今考えた答えとしては〜」とあくまで考えを述べるのはOKです。
- わからない問題は早めに切って、他のわかる内容でアピールしていった方がベターです。
特に、わからない時は下手に誤魔化さずに「わからないです」と切り捨てた方が良いです。
ここからは、それぞれの技術面接の種類を1つずつみていきます。
1. ナレッジクイズ(Knowledge Quiz)
「技術知識力」を主に示すことになる面接です。
技術的な質問がされるので、それに対して回答します。具体的な質問例では、下記のようなものです。
- React と jQuery の違いを教えてください
- 依存オブジェクトの注入とはなんですか?
どのポジションでもよく使われる形式の面接です。
また、他の形式の面接をしている途中でもこの形式の質問が入ることがあります。
対策
面接での定番質問集などがあるので、それを使って勉強します。具体的には下記のようなリンクがおすすめです。
特にこの形式では明確な正解が存在するため事前に準備をすればするだけ効果が出やすいです。
出題される問題は、応募先の会社の技術スタック、応募しているポジション、応募先の会社の規模、などによって変わってきます。
2. システムデザインインタビュー(System Design Interview)
「設計力」を主に示すことになる面接です。
あるシステムや機能を設計することが問題として出題されます。具体例では、下記のようなものです。
- Twitterを作成してください。
- タイムラインを作成してください。
バックエンドとフロントエンドでは出題される内容・求められるスキルが異なる傾向があります。 そのため、それぞれのポジションに応じた対策が必要です。違いとして、下記のような形になります。
フロントエンド | 観点 | バックエンド |
---|---|---|
ex) タイムラインを作成してください | 設問の例 | ex) Twitterを作成してください |
機能レベル | 規模 | プロダクトレベル |
コンポーネントレベル | アーキテクチャ | インフラ・クラウドレベル |
評価ポイントの例 |
個人的な感想ですが、システムデザインインタビューはバックエンドのポジションで利用されることが多い印象です。 そのため、フロントエンドで出題されるケースはやや少ないかと思います。
対策
システムデザインインタビューでは学んだ内容の応用が効きやすいです。
そのため、知らない内容を質問されても、勉強していればその場で考えられる可能性があります。
面接でよく出やすい質問集があるので、それを使って勉強します。インターネット上にあるコンテンツ例としては下記の通りです。
- バックエンド: GitHub - donnemartin/system-design-primer
- フロントエンド: Front End System Design Guide | GreatFrontEnd
他にも本などもあるので、参考にしてください。
3. データ構造とアルゴリズム(DSA: Data Structure and Algorithm)
「アルゴリズム力」を主に示すことになる面接です。
コンピュータサイエンスにおけるアルゴリズムの知識と実装力を必要とする質問がされるので、それに対して回答します。具体的な質問例では、下記のようなものです。
- 優先度付きキューをどうやって作りますか
日本では、あまりアルゴリズムを問われるような面接は少ないです。
対策
データ構造とアルゴリズムの基礎学習と実際に練習問題を解くことが大事になります。
入門の基礎学習としてのおすすめは下記の通りです。これらを見たら、できる限り問題をガンガン解いていきます。
練習問題としては、下記のようなサービスがあります。おすすめはLeetCodeでグローバルスタンダードなので、外資系や海外で就活する時にも役に立つのでこちらを使っていました。
4. コーディングインタビュー(Coding Interview)
「実装力」を主に示すことになる面接です。
オンラインエディタ上で何かの機能を実装します。具体的な実装例としては下記のようなものです。
- ゼロからFizzBuzz を実装してください。
「コーディング」という名称から、実装をすることに意識が向きますが実際にはコミュニケーションの比重がかなり高いです。
いきなり書き始めずに、仕様の理解のための確認や、要件を明確にしていきます。
その後も、全体的なアーキテクチャを先に説明して設計として完成してから、実際にコーディングを始めていきます。
コーディングをするときも、常に説明しながら書いていきます。
対策
日本の教材はほぼないため、英語の教材で雰囲気をまずは理解します。 YouTubeerがいくつか動画を挙げているので「Coding Interview」などのキーワードでYouTubeで検索してみてください。 ここでは、良さげなものを挙げておきます。
これで、雰囲気を掴んだら実際に練習します。
実際の仕事をしているならおすすめとしてペアプロです。 同僚や後輩などに「ペアプロしませんか?」と提案して、ペアプロをしながら仕事をすると練習も兼ねられます。
プライベートで練習するならおすすめとして、実際に自分で作ったことのある機能から始めてみましょう。 すでに実装・仕様などを理解しているので、問題自体で詰まってしまうことがなく、コーディングインタビューの練習に集中できます。
まとめ
技術面接について、種類と対策を見てきました。
面接の種類 | 必要なスキル | 具体例 |
---|---|---|
1. ナレッジクイズ (Knowledge Quiz) | 技術知識力 | |
2. システムデザインインタビュー (System Design Interview) | 設計力 | |
3. データ構造とアルゴリズム (DSA: Data Structure and Algorithm) | アルゴリズム力 | |
4. コーディングインタビュー (Coding Interview) | 実装力 |
この記事がどなたかの参考になれば幸いです。