README-ja.md 155 KB

#コーディングインタビュー大学

私はもともとこれをソフトウェアエンジニアになるための短期的な研究テーマのリストとして作成しましたが、 しかし、それは今日あなたが見る大きなリストに成長しました。この調査計画を経て、私は雇われました Amazonのソフトウェア開発エンジニアとして! あなたは私のように勉強する必要はないでしょう。とにかく、必要なものはすべてここにあります。

ここに記載されている項目は、ほぼすべてのソフトウェア会社のインタビューの中で、 巨人を含む:Amazon、Facebook、GoogleまたはMicrosoft。

あなたに最高の運勢!

翻訳:

  • 中文版本
  • TiếngViệt - ベトナム語
  • Español

翻訳中:

それは何ですか?

これは、Web開発者(独学で、CS指導なし)から大企業のソフトウェアエンジニアに向かうための私の複数月の学習計画です。

ホワイトボードでのコーディング - HBOのシリコンバレーから

これは、新しいソフトウェアエンジニアまたは ソフトウェア/ウェブ開発からソフトウェア工学(コンピュータサイエンスの知識が必要な場合)。あなたが持っている場合 長年の経験とソフトウェア工学の長年の経験を主張している、より面白いインタビューを期待しています。

何年ものソフトウェア/ウェブ開発経験がある場合は、Google、Amazon、 FacebookとMicrosoftはソフトウェアエンジニアリングをソフトウェア/ Web開発とは異なるものと見ており、コンピュータ科学の知識が必要です。

信頼性エンジニアまたはシステムエンジニアになりたい場合は、オプションのリスト(ネットワーク、セキュリティ)から詳細を調べてください。


目次

----------------この時点より下のものはすべてオプションです----------------

なぜそれを使用するのですか?

私がこのプロジェクトを始めたとき、ヒープからスタックを知りませんでした、Big-Oの何か、木のこと、または グラフを横断する。並べ替えアルゴリズムをコーディングしなければならない場合は、あまりうまくいきませんでした。 これまで使用してきたすべてのデータ構造は言語に組み込まれており、どのように動作するのか分かりませんでした ボンネットの下にすべて。私が実行していたプロセスが " 私は人生でいくつかの多次元配列を使いました。 何千もの連想配列ですが、データ構造を一から作成したことはありません。

それは長い計画です。あなたに数ヶ月かかるかもしれません。すでに多くのことに慣れていれば、それほど時間がかかりません。

それの使い方

下のすべてがアウトラインです。アイテムを上から下に順番に取り組まなければなりません。

私はGithubの特別なマークダウンフレーバーを使用しています。

**新しいブランチを作成して、このような項目をチェックできるようにするには、xを角かっこで囲みます:[x] **

    ブランチをフォークし、以下のコマンドに従ってください。

git checkout -b progress

git remote add jwasham https:// github.com / jwasham / coding-interview-university

git fetch --all

    変更を完了した後にXですべてのボックスにマークを付ける

git add。

git commit -mとマークしたx"

git rebase jwasham / master

git push --force

Github風味のマークアップの詳細

##あなたは十分にスマートではないと感じないでください

##ビデオリソースについて

一部のビデオは、Coursera、EdX、またはLynda.comクラスに登録することによってのみ利用できます。これらはMOOCと呼ばれています。 時にはクラスがセッションに入っていないので、数ヶ月待つ必要があるため、アクセス権がありません。 Lynda.comコースは無料ではありません。

    オンラインコースビデオに付随するYouTubeビデオなど、無料で常時利用可能なパブリックソースを追加することに感謝します。     私は大学の講義を使うのが好きです。

##インタビュープロセスと一般インタビュー準備

##インタビューのための1つの言語を選ぶ

インタビューのコーディングの部分に慣れ親しんだ言語を使用することはできますが、大企業にとってはこれらの選択肢が確実です。

  • C ++
  • Java
  • Python

これらを使用することもできますが、最初に読んでください。注意が必要な場合があります:

  • JavaScript
  • Ruby

あなたは言語に非常に慣れて知識が必要です。

選択肢についてもっと読む:

言語リソースはこちら

私は学習しているので、以下に含まれるC、C ++、Pythonの学習を見ることができます。いくつかの本があります、下を参照してください。

予約リスト

これは私が使ったものよりも短いリストです。これは時間を節約するために省略されています。

インタビュー準備

もし余分な時間があれば:

コンピュータアーキテクチャ

短い時間:

  • グレートコードの作成:第1巻:マシンの理解
    • この本は2004年に出版され、幾分古いですが、コンピュータを簡単に理解するには素晴らしいリソースです。
    • 作者はHLAを発明したので、塩の穀物でHLAの言及と例を取り上げます。広く使われているわけではありませんが、どのようなアセンブリのように見えますか?
    • これらの章はあなたに素敵な基礎を与えるために読む価値があります:
      • 第2章 - 数値表現         第3章2進算術とビット演算
      • 第4章 - 浮動小数点表現
      • 第5章 - キャラクター表現
      • 第6章 - メモリ構成とアクセス         第7章複合データ型とメモリオブジェクト         第9章CPUアーキテクチャ
      • 第10章命令セットのアーキテクチャ
      • 第11章 - メモリのアーキテクチャと構成

もっと時間があれば(私はこの本が欲しい):

###言語固有

インタビューの言語を選択する必要があります(上記参照)。 私はすべての言語のためのリソースがありません。私は追加を歓迎する。

これらのうちの1つを読んだら、コーディングの問題を開始するために必要なすべてのデータ構造とアルゴリズムの知識が必要です。 あなたがレビューしたいと思わない限り、このプロジェクトのビデオ講義をすべてスキップすることができます**。

ここに言語固有の追加リソースがあります

C ++

私はこれらの2つを読んだことはありませんが、Sedgewickによって高く評価され書かれています。彼は素晴らしいです。

C ++の推奨事項がある場合は、私に知らせてください。包括的なリソースを探しています。

Java

OR:

  • Javaにおけるデータ構造とアルゴリズム
    • Goodrich、Tamassia、Goldwasserによる
    • UCバークレーのCSイントロコースのオプションテキストとして使用
    • 下のPython版の私の本のレポートを見てください。この本は同じトピックを扱っています。

Python

###オプションの書籍

何人かはこれをお勧めしますが、何年ものソフトウェアエンジニアリング経験があり、より面白いインタビューを期待している場合を除いて、

  • [ ] アルゴリズム設計マニュアル(Skiena)

    • レビューと問題認識として
    • アルゴリズムのカタログ部分は、インタビューで得られる難易度の範囲をはるかに超えています。
    • この本は2つの部分を持っています:
      • データ構造とアルゴリズムに関する教科書
        • プロ:
          • アルゴリズムの教科書はどんなものでも良いレビューです
          • 業界および学界の問題を解決した経験から得た素敵な話
          • Cのコード例
        • 短所:
          • CLRSと同様に密集しているか、侵入不可能な場合があります。場合によっては、CLRSが一部の被験者にとってより良い選択肢になる可能性があります
          • 章7,8,9は、いくつかの項目がうまく説明されていない、または私が持っているよりも多くの脳を必要とするため、追跡しようとすると痛いことがあります
          • 私は間違っていない:私はSkiena、彼の教授のスタイル、そしてマタニズムが好きだが、私はストーニーブルックの素材ではないかもしれない。
      • アルゴリズムカタログ:
        • これがあなたがこの本を買う本当の理由です。
        • この部分に近づくこと。一度私がそれを通り抜けたら、ここで更新されます。
    • それを光り輝かせることができます
    • Half.comは、良い価格で教科書のための素晴らしいリソースです。
    • 回答:
    • 正誤表
  • [ ] アルゴリズムの紹介

    • 重要: この本の読書は価値が限られています。この本はアルゴリズムとデータ構造の素晴らしいレビューですが、良いコードを書く方法を教えてくれません。まともなソリューションを効率的にコーディングすることができなければなりません。
    • Half.comは、良い価格で教科書のための素晴らしいリソースです。
    • スタインはゲームに遅れていたので、別名CLR、ときにはCLRS
  • [ ] Programming Pearls

    • 章の最初の2つは、プログラミング上の問題(データテープを使用して非常に古くなっているもの)       それはちょうどイントロです。これはプログラムの設計とアーキテクチャに関するガイドブックです。Code Completeとよく似ていますが、はるかに短いものです。
  • シェンの "アルゴリズムとプログラミング:問題と解決策"

    • 良い本ですが、いくつかのページで問題を解決した後、私はPascalに悩まされ、whileループ、1つのインデックス付き配列、不確実な事後条件の満足度結果を得ました。
    • 別の書籍やオンラインのコーディングの問題からコーディングの問題に時間を費やすことになります。

##あなたが始める前に

このリストは何ヶ月にもわたって成長しました。

ここで私が作ったいくつかの間違いがあります。あなたはより良い経験をするでしょう。

1.あなたはそれをすべて覚えていない

私は数時間のビデオを見て、豊富なメモを取りました。そして数ヶ月後に私は覚えていないほどでした。私は3日間過ごした 私のメモとフラッシュカードを作って見直すことができました。

あなたが私の間違いをしないように読んでください:

コンピュータ科学知識の保持

2.フラッシュカードを使用する

この問題を解決するために、私は2種類のフラッシュカード、一般とコードを追加できる小さなフラッシュカードサイトを作った。 各カードのフォーマットは異なります。

私はモバイル先のウェブサイトを作ったので、どこにいても電話とタブレットを見直すことができました。

あなた自身を無料で作る:

私は船外に出て、アセンブリ言語やPythonのトリビアからマシンの学習や統計に至るまですべてのカードをカバーしています。何が必要なのかはあまりにも大変です。

フラッシュカードについての注意: あなたが最初に答えを知っているときは、知らないようにしてください。あなたは あなたが本当にそれを知る前に、同じカードを数回正しく答えてください。繰り返しは、その知識を深く あなたの脳。

私のフラッシュカードサイトを使用する代わりにAnkiが何度も私に勧められています。繰り返しシステムを使用して覚えやすくなります。 ユーザーフレンドリーで、すべてのプラットフォームで利用でき、クラウドシンクシステムを備えています。 iOSでは25ドル、他のプラットフォームでは無料です。

Ankiフォーマットの私のフラッシュカードデータベース:https://ankiweb.net/shared/info/25173560(thanks @xiewenya)

3.レビュー、レビュー、評価

私は、ASCII、OSIスタック、Big-O表記などのチートシートを用意しています。私は余裕があるときに勉強します。

プログラミングの問題から30分ほど休み、フラッシュカードを通過してください。

4.フォーカス

貴重な時間を費やす可能性のある注意散漫がたくさんあります。集中と集中が難しい。

##カバーされていないもの

これらは一般的な技術ですが、この調査計画の一部ではありません:

  • SQL
  • Javascript
  • HTML、CSS、およびその他のフロントエンド技術

##日々の計画

一部の被験者は1日を要し、いくつかは複数日を要する。いくつかは、何も実装することなく学習しているだけです。

毎日私は以下のリストから1つのテーマを取り上げ、そのテーマに関するビデオを見て、以下の実装を書いています:

  • C - structと他のものをargsとする構造体と関数を使う。
  • C ++ - 組み込み型を使用しない
  • C + + - リンクリストのSTLのstd :: listのような組込み型の使用
  • Python - 組み込み型を使用する(Pythonの練習を続ける) 私は正しいことをするためのテストを書いています。単純なassert()文を使って
  • あなたはJavaや他の何かをするかもしれませんが、これは私のことです。

あなたはこれらのすべてを必要としません。あなたは[インタビューのための1つの言語]だけが必要です(インタビューのための1つの言語を選択します)。

なぜこれらすべてのコード?

  • 私はそれが病気になるまで、練習、練習、練習、そして何も問題なく行うことができます(いくつかは覚えておくべき多くのエッジケースと簿記の詳細があります)
  • 生の制約内で作業する(ガベージコレクションの助けを借りずにメモリを割り当てる/解放する(Pythonを除く))
  • 組み込み型を利用するので、組み込みのツールを実世界で使用する経験があります(実稼働環境で自分のリンクリストの実装を作成するつもりはありません)

私はすべてのテーマでこれらのすべてをやる時間がないかもしれませんが、私は試してみます。

あなたは私のコードをここに見ることができます:

あなたはすべてのアルゴリズムの勇気を暗記する必要はありません。

コンピューターではなく、ホワイトボードや紙にコードを書く。いくつかのサンプル入力でテストします。次に、コンピュータでテストします。

##前提知識

##アルゴリズムの複雑さ/ Big-O / Asymptotic解析

    講義の中には数学的にも余裕がある場合は、下にジャンプして     離散数学ビデオを見て、バックグラウンドの知識を得る。

データ構造

##その他の知識

##並べ替え

要約すると、15ソートアルゴリズムの視覚的表現です。 このテーマの詳細が必要な場合は、[いくつかの科目の追加の詳細]の[ソート]の項を参照してください(#additional-detail-on-some-subjects)

##グラフ

グラフはコンピュータサイエンスの多くの問題を表現するために使用することができるので、このセクションは木やソートのように長いです。

Skienaの本(下記の書籍の節を参照)とインタビューの書籍

##さらに多くの知識

    このテーマについてさらに詳しく知りたい場合は、[いくつかの科目の追加の詳細]の「文字列のマッチング」の項を参照してください(#additional-detail-on-some-subjects)

##システム設計、スケーラビリティ、データ処理


##最終レビュー

    このセクションでは、重要な概念のほとんどを見直すためにかなり短いビデオを見ることができます。     あなたが頻繁にリフレッシャーをしたいならいいですね。


##コーディングの質問練習

上のすべてのコンピュータ科学のトピックを知ったので、コーディングの問題に答える練習をしましょう。

コーディング質問の練習は、プログラミング問題への回答を記憶することではありません。

プログラミングの問題を練習する必要がある理由

  • 問題の認識、そして適切なデータ構造とアルゴリズムの適合
  • 問題のための要件を集める
  • インタビューであなたのように問題を話している
  • コンピュータではなく、ホワイトボードや紙でのコーディング
  • ソリューションの時間と空間の複雑さが増す
  • ソリューションのテスト

インタビューでは、体系的でコミュニケーション的な問題解決の素晴らしいイントロがあります。あなたはプログラミングからこれを得るでしょう インタビューの本もありましたが、私はこの優れた発見しました: アルゴリズム設計キャンバス

自宅にホワイトボードはありませんか?それは理にかなっている。私は変わった人で、大きなホワイトボードを持っています。ホワイトボードの代わりに、 アートストアからの大きな描画パッド。あなたはソファに座って練習することができます。これが私の「ソファホワイトボード」です。 私はスケールの写真にペンを追加しました。ペンを使うと、あなたは消すことができます。すぐに厄介になる。

私のソファホワイトボード

補足:

プログラミングの問題を読んでやる(この順番で):

上記のブックリストを参照してください

##コード演習/挑戦

あなたの脳を学んだら、脳を働かせてください。 できるだけ多く、毎日コーディングの課題に取り組んでください。

コーディングインタビュー質問ビデオ:

チャレンジサイト:

チャレンジレポ:

モックインタビュー:

##あなたが面接に近づいたら

あなたの履歴書

  • クラッキングでの準備項目の再開を参照してください。コーディングインタビューとプログラミングインタビューの公開

##インタビューが来る時を考えている

あなたが得る20の面接の質問と、以下の項目の行を考えてみましょう。それぞれ2-3の答えがあります。 あなたが達成したことについての物語だけでなく、データを持ってください。

  • なぜあなたはこの仕事をしたいです?
  • あなたが解決した厳しい問題は何ですか?
  • 最大の課題に直面した?
  • ベスト/最悪のデザインが見られる?
  • 既存の製品を改善するためのアイデア。
  • 個人として、そしてチームの一員として、どのようにベストを尽くしていますか?
  • あなたのスキルや経験のうち、その役割の資産とその理由は?
  • [job x / project y]で一番楽しかったことは何ですか?
  • [job x / project y]に直面した最大の課題は何ですか?
  • [job x / project y]で直面した最も難しいバグは何でしたか?
  • [job x / project y]で何を学びましたか?
  • あなたは[job x / project y]で何を良くしていますか?

##インタビュアーに質問があります

    私の中には(私は既に知っているかもしれませんが、彼らの意見やチームの視点が必要です):

あなたのチームはどれくらいですか?

  • あなたの開発サイクルはどのように見えるのですか?あなたは滝/スプリント/アジャイルをしますか?
  • 締め切りまでの時間は共通ですか?それとも柔軟性はありますか?
  • あなたのチームではどのように意思決定が行われますか?
  • 週に何回会議がありますか?
  • あなたの仕事環境が集中するのに役立つと思いますか?
  • 何をしているの?
  • それについて何が好きですか?
  • 仕事の生活はどうですか?

##一度あなたは仕事を得た

おめでとう!

学び続けます。

あなたは決して本当に終わらない。


    *************************************************** *************************************************** *     *************************************************** *************************************************** *

    この点以下のものはすべてオプションです。     これらを勉強することで、より多くのCSコンセプトにさらされることになります。     任意のソフトウェアエンジニアリングジョブ。あなたはもっと豊富なソフトウェアエンジニアになるでしょう。

    *************************************************** *************************************************** *     *************************************************** *************************************************** *


##その他の書籍

##その他の学習

これらの話題はインタビューでは出てこないかもしれませんが、 特定のテクノロジとアルゴリズムを認識するためには、より大きなツールボックスが必要になります。

-

##追加科目の詳細

    私は既に上記のいくつかのアイデアを強化するためにこれらを追加しましたが、それらを含めたくありませんでした     それはちょうどあまりにも多くのためです。それは被験者にそれを過ごすのは簡単です。     あなたは今世紀に雇われたかったですね。

##ビデオシリーズ

座って楽しんでください。 「ネットフリックスとスキル」:P

##コンピュータサイエンスコース