web-dev-qa-db-ja.com

面接の準備

重複の可能性:
インタビューの質問をプログラミングするための準備方法は?

誰かが技術面接の準備についてどのように行くかについての指針を教えてもらえますか? CSの卒業生として、私は次のトピックを徹底する必要があると思います:

データ構造:配列、リンクリスト、スタック、キュー、ヒープ、ハッシュテーブル、バイナリツリー、バイナリ検索ツリー、自己分散バイナリツリー(AVL、赤)ブラックツリー)、Bツリー、トライ/サフィックスツリー

アルゴリズム:ソート(バブルソート、挿入ソート、選択ソート、シェルソート、クイックソート、マージソート、外部ソート)、検索(線形および対数時間)検索)、グラフ理論(隣接リスト、隣接行列、DFS、BFS、トポロジカルソート)、動的プログラミング、貪欲アルゴリズム、分割統治。

Adhoc Algorithms:Select Algorithm、Fisher Yates Card Shuffle、Reservoir Sampling and list is endless。

データベース:SQLクエリ

プログラミングと設計:C、C++、Java、スクリプト言語(Perl、Python)、(OOPSの基本、仮想関数、深い浅いコピー、コピーコンストラクター、代入演算子、STL、メモリ管理、ポインタ/参照、インターフェース、抽象クラス

オペレーティングシステム:スレッド同期(Mutex、条件変数、セマフォ、デッドロック)、メモリ管理(セグメンテーション、ページング、TLB、キャッシュメカニズム)


また、これらのトピックをブラッシュアップするためにインターネットで入手できるリソースをすべて集めることができれば素晴らしいと思います。これらのいくつかを追加します。

リンクリストとツリー: http://cslibrary.stanford.edu/103/

これらのトピックの準備に役立つリソースを見つけるために私を助けてください。また、これらのトピックに追加していただければ幸いです。

14
Amm Sokun

それは本当にあなたが申請している仕事の種類に依存します。私はいくつかのインタビューを経て、さらに多くのことを行いました。ここにいくつかのヒントがあります。

  • あなたがリストしたものはすべて「テクニカルトリビア」カテゴリに分類されます。知っておくことが重要です。それは、技術的知識の深さと幅が十分にあることを証明するのに役立ちます。現実には、多くの場合、勉強するのが本当に難しいです-あなたはそれを知っているか、知らないかのどちらかです。物事を磨くのは悪い考えだとは言わない。
  • 問題解決と批判的思考も非常に重要です。 「マンハッタンにマンホールがいくつあるか」などの質問がよくあります。正しい答えを探しているのではなく、問題の解決方法を見たいと思っています。 プロセスの説明-間違いを発見した場合は、その理由と改善方法を説明してください。空中で手を投げてあきらめないでください。粘り強く、創造的になることをいとわない-マンホールの質問には、キャベツにインタビューすることを提案できます。
  • 喜んでdefendあなたのポイント。私は議論の余地があると言っているわけではありませんが、特定の状況で使用するテクノロジーや方法論を尋ねられた場合は、その点を弁護する準備ができています。特定の問題を解決するためにWebアプリケーションとクライアントアプリケーションのどちらを構築するかを尋ねられた場合(誰もが常にクライアントに尋ねると言っていますが、通常はそれでは不十分です)、そのテクノロジを選択する理由を説明します。通常、「私が知っているすべてです」は正しい答えではありません。 選択の理由は、選択よりも興味深いものです。私たちは1人(私たちが雇った人)に1回インタビューし、さまざまな問題に対してWebまたはクライアントソリューションを選択するかどうかを尋ねました、彼はWebについて述べ、その理由を説明しましたが、アフリカ向けでない限り(彼はそこから移住しました)インターネットインフラはひどかった!
  • BSしないでください-答えがわからない場合は、前に出てください。しかし、答えを見つけようとする方法や、知っていることに基づいて何をするかを説明してください。私は、誰かが私にBSしていたことを証明するために、実際には答えがないことを知っている質問をしました。
  • 会社について調べてくださいインタビュー対象です。 求人一覧やその他の一覧から、それらについて多くを学ぶことができます。求人情報のすべてのテクノロジーを調査し、(他のリストに基づいて)会社で使用されている他のテクノロジーに注意してください。これは私に以前に仕事を与えました。
  • 思慮深い質問を計画してください。特にあなたの会社とそのテクノロジーへの研究に触発されました。
  • ポートフォリオのコードサンプル、ユーザーインターフェイスのデザイン、ブログ投稿、論文、特許、オープンソースプロジェクト、Stack Overflowの回答、解決した興味深い問題(紙で説明した場合でも)などを作成します。あなたのスキルや経験などのいくつかを示すことができます。共有するものに対する権利があることを確認してください。以前、候補者に、彼が前の従業員のために設計したアプリケーションへのログイン資格情報をメールで送ってきました。自分の時間(または学校)で行った作業が重要です。さらに、それはあなたの情熱を示します。

お役に立てば幸いです。幸運を!

19
Jim McKeeth

これ 本は過去に私にとって非常に役に立ちました。特に私がちょうど学校を卒業したとき。

編集:それは「公開されたプログラミングインタビュー:次の仕事の着陸の秘訣、第2版(プログラマーからプログラマー)」と呼ばれます。

2
socialMatrix

リストの項目をできるだけ多く知っておくのは良いことですが、私がインタビューを手伝うときは、項目を知っているかどうかをすぐに確認します。私たちは興味があり、あなたが知っているほどよくなりますが、特定の問題でデータ構造を選択する理由や、ミューテックスではなくセマフォを使用する時期などを十分に理解していればなおさらです。

それに加えて、過去の作品のサンプルを持ち込んでいただいた方も大歓迎です。これを行う場合は、必ずよく理解してください。つまり、本当に理解していない限り、コードの大部分が他の人によって書かれた「チーム」として行ったものを持ち込まないでください。なぜアルゴリズムを選択したのか、どのような制約の下で作業していたのかなどを説明できるように準備してください。

あなたがリストしたもののほとんどは直接インタビューで出てくることはありません。あなたはあなたの経歴に基づいてそれのほとんどを知っていると仮定されます。あなたが示す必要があるのは、知識ではなくスキルであり、仕事をします。のようなもの:

  • 文書と口頭の両方での優れたコミュニケーション能力。履歴書やカバーレターを含む応募と面接のプロセス全体が、これを自慢する機会です。
  • 迅速な学習と優れたリサーチスキル:知らないことを認め、止めさせない能力。 「わからない」と言う準備をし、「まだ」を追加できる自信を持っている。誰にもわからない質問が1つまたは2つ与えられることがあります。これは、あなたが落ち着いたり、物事を作り上げたりしないことを証明するためです。落ち着いて迅速に行って、知っておくべきことを見つけることができます。
  • 分析的思考:問題を乗り越えて解決策にたどり着けることを証明するために、さまざまななぞなぞが提示される場合があります。最も重要なのはあなたのプロセスであり、最終的な答えではありません。多くの場合、尋ねる人はあなたの最終的な答えが書き込みか間違っているかを知りません(または気にしません)。彼らはあなたがそれを思いつく方法を見たいと思っています。
  • 技術的なデモンストレーション:そうです、楽しい部分です。優れた会社は、完了するためのプログラミングタスクを提示し、ソリューションをレビューします。問題は通常比較的簡単ですが、経験以外にこれに対する準備はありません。彼らはあなたの背景が本物の実装能力につながるという証拠を求めているだけです。

これらのことはどれも、実際に「調査」することはできず、実践することしかできません。練習すればするほど良くなりますが、常に覚えておいてください。「練習が完璧になる」ではなく、「完璧な練習が完璧になる」ということです。単にそれを行うだけでなく、常に正しく行うことを練習してください。

幸運を!!

1
Adrian