コーディング面接の決定版

アップデートしました。

これは、コーディングの面接について知っておく必要があるすべてのことを含む包括的なガイドです。 この記事では、何を学び、どのように学び、さらに重要なことに、面接でどのようにソリューションを提示するかを徹底的に説明します。

もしあなたがコーディング面接にパスしたいならば、正しい記事を見つけたことになります。 これを読んだ後、同じトピックに関する他の記事を検索したくなるかもしれません。「もしかしたら、もっと役立つヒントやトリックが見つかるかもしれないからです」

ヒントやトリックを探すのはやめましょう。これは、あなたを夢の仕事から遠ざけるものです。

その仕事を得るためのヒントもトリックもありません。 それは、ただ努力することだ。 この記事では、3つのパート&3つのビデオを持っており、それはread.4707>

  1. コーディング面接とは何ですか?
  2. コーディング面接のためにどのように準備する?

まず、自分が話していることに自信があることをわかってもらうために、発表します。

Largest programming competition in Nord-Western Europe

My name is Andrei and I have been a competitive programmer for the last five years. Google が主催する最大のアルゴリズム競技会である Google HashCode の世界決勝に参加したことがあり、それ以前には、ルーマニアのコンピューティング オリンピアードで 3 つの金メダルを獲得したことがあります。 この経験を生かして、私は「Introduction to Algorithms and Data Structures in C++」というオンラインコースを公開し、135 カ国から 8000 人以上の学生がこの分野への第一歩を踏み出す手助けをしてきました。 この記事では、コーディング面接の経験を共有し、合格するための最短の方法をお伝えしたいと思います。

ここで質問させてください:あなたは、マイクロソフトのような大きなハイテク企業で働くことを夢見たことがありますか? もしそうなら、私たちの多くもそうだったと確信してください。 そして、数十の仕事に対して高い需要があるため、どの候補者がより良い準備ができているかを確認する方法が必要です。

コーディング インタビューに招待される前に、そのポジションへの応募と他の中で輝く履歴書が必要とされます。 この記事では、求人の応募プロセスではなく、実際のコーディング面接とその準備方法についてお話します。

ほとんどの技術系企業では、コーディング面接はアルゴリズム & データ構造の問題で構成されています。 これらは問題解決のための質問だと考えてください。面接官は、あなたが見たこともないような問題を解決する能力を評価しようとしているのです。 1回の面接はおよそ45分で、1つか2つのコーディングの問題が与えられます。 面接官は、あなたが最も最適な解決策を見つけ、それをコーディングし、あなたが今コード化したものを説明することを期待しています。

最後に、あなたは会社やあなたが興味を持ったことについて、彼に質問する機会があります。

コーディングの面接に備えるには?

最初にはっきりさせておきたいのは、面接に合格するための近道やコツはないということです。 アルゴリズムの問題に対する最適な解を見つける唯一の方法は、練習して、できるだけ多くの問題を解くことです。

2 つの言葉で言うと、それはハードワークです。 そんなコツがあるなら、なぜみんなそれを使って面接に合格しないのか、ちょっと考えてみてください。

そこで、面接合格の唯一の変数は、それまでにどれだけ練習したか、ということだと理解する必要があるのです。 あなたの経験、知性、その他はすでに決まっているのです。 それゆえ、練習に費やした時間が合格者と不合格者の差になるのです。

コーディング面接は自分との戦いであり、それに勝つための唯一の方法は、たくさん練習することなのです。

最初のステップは、C/C++、Java、Pythonなどの主流のコーディング言語で快適に感じることです。 また、このような場合、「忖度(そんたく)」という言葉が使われます。 一番好きなものを選び、それを使い続けることです。 準備の途中で言語を変えようとは思わないでください。 この記事の残りの部分では、あなたが言語を選択し、その構文をよく知っていると仮定します。

さて、通常、コーディングの面接はアルゴリズムとデータ構造についてすべて行われます。 4707>

以下に、あなたが知っておくべきアルゴリズムとデータ構造のリストがあります。 このような場合、「曖昧さ」をなくすことが重要です。 その意味を理解し、基本的なアルゴリズムを見ただけでその複雑さを言えるようになりましょう。

2) 配列。 この時点で、配列の概念に慣れているはずです。 このトピックでは、配列が単に保存のために使用され、解答には2つのポインタを使った反復処理などの基本的なテクニックが含まれる問題を指します。 古典的な問題は、与えられた配列が順列であるかどうかをチェックすることである

3) 文字列。 文字列の操作方法を知っておき、文字列の連結や回転を求める問題に慣れておく。 面接では、リンクリストの問題に遭遇することがよくあります。 ここでは、特にコーナーケースに注意する必要があります。 リンクリストが空の場合どうなるか考えてみてください。 あるいは、要素が1つだけだったら? あるいは、最後の要素まで反復処理したい場合? リンクリストを使った問題を解くときは、コーナーケースについてよく考えてください。

5) ハッシュテーブル ほとんどの面接で出てくる基本的なデータ構造。 一つのトピックを深く掘り下げるなら、ハッシュテーブルを選択する。 使用言語のハッシュテーブルライブラリを使いこなし、最低5問は練習してください。 最後に、「異なるエントリを持つ最長の部分配列はどのように見つけるか」

6) スタック。 スタックの一端だけを操作することに慣れ親しんでください。 この課題を解決する:MAX APIを持つスタックを実装する。つまり、どの瞬間にもスタックの最大要素は何かと尋ねることができる。) キュー(待ち行列)。 スタックと混同しないように、スタックには両端があります。 2つのスタックを使って待ち行列をシミュレートする古典的な問題を実装する。

8) Greedy: このテクニックは非常にシンプルで、おそらく毎日使っていることでしょう。 基本的には、将来の結果を考慮することなく、特定の瞬間に可能な限り最善の決定を下すことを指します。 いくつかの問題を練習して、どんな問題でもグリーディで解決できると思わないでください

9) プリミティブ型。 ビット操作や数値の基本的な演算が主な内容です。 しかし、問題によってはかなり厄介なことになります。 2進表現で1の数を数えるには?

10) 2分木。 トラバーサル、共通の祖先、木を再帰的に反復することに焦点を当てる。

11) ヒープ 実世界のアプリケーションで広く使用されているので、ヒープを知りましょう!

11) ヒープ:ヒープを理解する。 ミニヒープとマックスヒープの使い分けに自信が持てるようになるまで練習してください。 数列から最大の5つの要素を表示するには? ミニヒープを使うか、マックスヒープを使うか。

12) 検索:検索は誰もが知っておくべき核心的な科目です。 そこで、2値探索を使った問題を3問以上練習してください。

13) ソート マージソートとクイックソートを実装できるようにしておくこと。 その複雑さの最高、平均、最悪のケースをよく知ること。 時間があれば、ヒープソートも勉強しましょう。

14) 二項探索木。 コーディングの面接で広く質問されるので、要素の削除を含むすべての基本的な操作を実装できる必要があります!

15) バックトラック。 それは基本的にすべての可能な解決策を生成し、あなたの要件に尊重するものを取ることを意味します。 集合の冪集合の生成器とn-Queen問題を実装する!

16) Graphs: グラフはコンピュータサイエンスで最もよく使われるデータ構造であろう。 あらゆるソーシャルネットワークは巨大なグラフに過ぎないことをご存じでしょうか。 グラフのコピーをメモリ上に作成し、グラフのサイクルを検出する練習をします。

17) ダイナミックプログラミング 動的計画法は、最も怖いトピックと思われています。 しかし、その背後にある考え方を理解すれば、最も美しいものです。 そこで、よくある質問のトップ5を練習し、どこからが再帰なのか理解できるまで、粘り強く練習してください。 もうネットで他のガイドを探す必要はなく、ただ練習してください。 面接は自分との戦いであり、練習すればするほど、勝つ確率が上がることを忘れないでください。

コーディングの面接でベストを尽くすには?

面接は5つのパートに分かれており、その詳細を説明します。

1) Introduction

この部分は面接が始まり、3~5分ほどで終了します。 面接官はあなたについてもっと知りたいと考えており、あなた自身を紹介する機会を与えてくれます。 一般的には、あなたが以前どのようなプロジェクトに携わったか、そして最も印象的だったのはどれかということに興味があるようです。 今、これはあなたが輝くためのチャンスですので、それを無駄にしないでください!

お世辞を言おうとしないことです。 騙そうとする偽人格は簡単に見破れる。 私もみんなもそういう人は嫌いなので、本当の性格を見せるようにしましょう!

自分のお気に入りの企画について何を言うか事前に知っておく必要があるので、面接前に用意しておくことです。 さて、ほとんどの人が短い文章を2つだけ言うのですが、これはまずいですね。 どの答えがより好きですか?

1) 「私は病院の患者をよりよく管理するためのWebアプリケーションに取り組みました。 バックエンドはNode.jsで書きました」

自分をどう見せるかが本当に重要

2)「私が本当に楽しんだプロジェクトは、イギリスの国民保健サービスのために、病院の患者をよりよく管理するためのWebアプリケーションを作るというものでした。 これは大学のカリキュラムの一部で、2ヶ月かかり、私は3人のチームのリーダーを務めました。

私たちはプロジェクトを基本的なアイデアから実際のアプリケーションに作り上げました。 私は、バックエンドをNode.jsで、データベースをMongoDBでコーディングすることを担当しました。 クライアントのために作成した初めてのアプリケーションで、Web 技術に精通していませんでした。 開発プロセスは反復的で、途中で何度か失敗もしました。

最終的には、多くの機能を提供し、私のお気に入りは、ユーザーがハードコーディングされる代わりに、病院の部屋を更新できることです。 技術的な問題やチームの問題が発生する場面もありましたが、最終的にはすべてがうまくいき、その年の最高点を獲得することができました!」

このプレゼンテーションを自分の強みに変えてください。 面接官はあなたについてもっと知りたいと思っているので、まずプロジェクトについて簡潔に紹介し、それが何であるかを説明します。 次に、あなたの貢献は何か(スマートなアイデアでチームを助けたのなら、それを言ってください!)、そして開発プロセスから何を学んだかを述べます。

自分のプロジェクトについて1~2分話すとよいでしょう。

2) 問題を理解する

面接官は、あなたが解決しなければならない問題文を簡単に話します。 私が「簡単に」と言ったのは、制約、コーナーケース、またはデータを受け取る方法についての詳細をあまり教えてくれないからです。 問題を解決するために必要なことをすべて聞くのも仕事のうちです。 正しく理解できたかどうか確認するために、大きな声で発言を繰り返してください

コメントする