1

コーディング面接チートシート by John Washam

52 min read

私はもともとこれをソフトウェアエンジニアになるための短いトピックリストとして作成しましたが、 今日それは大きなリストに成長しました。この調査計画を経て、私はAmazonで ソフトウェアエンジニアとして雇われました!! おそらく、あなたは私ほど勉強する必要はないでしょう。とにかく、必要なものはすべてここにあります。

ここに掲載されている項目を学べば、Amazon、Facebook、Google、Microsoftなど 大手企業を含む、ほぼすべてのソフトウェア会社の面接に備えることができます。

あなたに最高の幸運がありますように!

これは何?

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

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

これは、 新人ソフトウェアエンジニア 、またはソフトウェア/ Webエンジニアからソフトウェアエンジニア(CSの知識が必要な場合)に転職する人を対象にしています。 長年のソフトウェアエ開発経験をお持ちの場合は、より面白い面接を期待してください。

あなたに何年ものソフトウェア/Web開発経験がある場合、Google、Amazon、Facebook、Microsoftなどの大規模なソフトウェア会社は、ソフトウェア/Web開発力ではなくソフトウェア工学に関して見ており、そのためにはCSに関する知識が必要となることをご了承ください。

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


なぜこれを使用するのか

私はこのプロジェクトを始めたとき、ヒープからスタックを知りませんでしたし、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/main

git push --force

Github風マークダウンの詳細

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


ビデオリソースについて

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

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

面接のプロセスと一般的な面接の準備

面接のための1つの言語を選ぶ

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

  • C ++
  • Java
  • Python

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

  • JavaScript
  • Ruby

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

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

言語リソースはこちら

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

ブックリスト

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

面接の準備

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

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

短期:

  • グレートコードの作成:第1巻:マシンの理解
  • 日本語版:Write Great Code〈Vol.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

始める前に

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

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

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つだけです

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

  • 私はそれが病気になるまで練習、練習、練習をし、何の問題もありません(忘れてはいけないことがいくつかあります)
  • 生の制約内で作業する(ガベージコレクションの助けを借りずにメモリを割り当てる/解放する(Pythonを除く))
  • 組み込みの型を利用して、実際の使用のために組み込みのツールを使用した経験を持ちます(本番環境で自分のリンクされたリストの実装を書くつもりはありません)

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

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

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

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

前提知識

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

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

データ構造

  • 配列

    • 自動的にサイズ変更ベクトルを実装する。
    • 説明:
    • ベクトルを実装する(自動サイズ変更可能な可変配列):
      • 配列とポインタを使用してコーディングを実践し、インデックスを使用する代わりにインデックスにジャンプするポインタ演算
      • 割り当てられたメモリを持つ新しい生データ配列
        • 内部で配列を割り当てることができますが、その機能は使用しません。
        • 16で開始するか、開始番号が大きい場合は、2 - 16,32,64,128の出力を使用します
      • size() - 項目数
      • capacity() - 保持できるアイテムの数
      • is_empty()
      • at(index) - 指定されたインデックスでitemを返し、インデックスが範囲外であれば吹き飛ばす
      • push(item)
      • insert(index,item) - itemをindexに挿入し、そのインデックスの値と末尾の要素を右側にシフトする
      • prepend(item) - インデックス0に上記の挿入を使用できます
      • pop() - 最後から削除し、値を返す
      • delete(index) - インデックスの項目を削除し、すべての末尾の要素を左にシフトする
      • remove(item) - 値を探し、それを保持するインデックスを削除します(複数の場所であっても)
      • find(item) - valueを検索し、その値を持つ最初のインデックスを返します。見つからなければ-1を返します。
      • resize(new_capacity)//プライベート関数
        • 容量に達すると、サイズを2倍に変更します
        • アイテムをポップするとき、サイズが容量の1/4である場合、サイズを半分に変更
    • 時間
      • 最後に追加/削除するO(1)(スペースを増やすために償却される)、索引、または更新
      • 他の場所に挿入/削除するO(n)

    - [ ] 空間 - メモリ内で連続しているため、プロキシミティはパフォーマンスに役立ちます - 必要なスペース=(配列の容量, > = n)*アイテムのサイズですが、2nでもO(n)

            ビデオ全体ではなく、ノード構造体とメモリ割り当てに関する部分だけです。 - [ ] 連結リスト Vs 配列: - コア連結リストs Vs 配列(ビデオ) - 実世界の連結リスト Vs 配列(ビデオ)アレー) - [ ] 連結リスト(ビデオ)を避けるべき理由 - [ ] 分かったぞ!:ポインタの知識へのポインタが必要です:         (そのポインタが指すアドレスを変更する可能性のある関数へのポインタを渡すとき)         このページはptrからptrまでを把握するためのものです。このリストトラバーサルスタイルはお勧めしません。読みやすさと保守性は巧みさのために苦しんでいます。 - ポインターへのポインター - [ ] 実装する(私はテールポインタ&なしで行った): - [ ] size() - リスト内のデータ要素の数を返す - [ ] empty() - 空の場合はboolを返します - [ ] value_at(index) - n番目の項目の値を返します(最初は0から始まります) - [ ] push_front(value) - リストの先頭に項目を追加します - [ ] pop_front() - 前面アイテムを削除してその値を返します - [ ] push_back(value) - 最後に項目を追加する - [ ] pop_back() - 終了アイテムを削除し、その値を返します - [ ] front() - フロントアイテムの値を取得する - [ ] back() - 終了項目の値を取得する - [ ] insert(index、value) - インデックスに値を挿入するので、そのインデックスの現在のアイテムはインデックスの新しいアイテムによってポイントされます - [ ] erase(index) - 指定したインデックスのノードを削除する - [ ] value_n_from_end(n) - リストの最後からn番目のノードの値を返します - [ ] reverse() - リストを反転する - [ ] remove_value(value) - この値を持つリストの最初の項目を削除します。 - [ ] 二重連結リスト - 説明(ビデオ) - 実装する必要はありません

        - empty() - [ ] 固定長配列を使って実装する: - enqueue(value) - 利用可能なストレージの最後にアイテムを追加する - dequeue() - 値を返し、最近追加された要素のうち最も古い要素を削除します         - empty() - full() - [ ] コスト: - 最後の要素の次の要素が必要になるため、先頭にエンキューし、末尾をデキューするリンクリストを使用する悪い実装はO(n)になり、デキューごとに完全なトラバーサルが発生します - enqueue:O(1)(償却、連結リストと配列[プロービング]) - dequeue:O(1)(連結リストと配列) - empty:O(1)(連結リストと配列)

その他の知識

    - [ ] 絶対値: - 絶対整数

            時間複雑度:O(n)             空間の複雑さ:最適:O(1)、最悪:O(n / 2)= O(n) - DFS(深さ優先探索) - MIT(動画)         - メモ:             時間複雑度:O(n)             空間の複雑さ:                 最良:O(log n) - 平均。木の高さ                 最悪:O(n) - inorder(DFS:left、self、right) - postorder(DFS:left、right、self) - preorder(DFS:自己、左、右)

ソート

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

グラフ

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

Skienaの本(下記の書籍の節を参照)と面接の書籍

さらに多くの知識

            動的プログラミング(動画) - [ ] イェール講義ノート: - [ ] 動的プログラミング - [ ] Coursera: - [ ] RNA二次構造の問題(ビデオ) - [ ] 動的プログラミングのアルゴリズム(ビデオ) - [ ] DPアルゴリズムの説明(ビデオ) - [ ] DPアルゴリズムの実行時間(ビデオ)         - [ ] [DP Vs 再帰的実装(ビデオ) - [ ] グローバル対配列アライメント(ビデオ) - [ ] ローカル対配列アライメント(ビデオ)

       そうすれば面接官がこれらについて偽装して尋ねるとき、それらを認識することができます。 - NP完全の意味を知る。 - [ ] 計算上の複雑さ(ビデオ) - [ ] Simonson: - [ ] 貪欲アルゴリズム。 II&NP完全性へのイントロ(ビデオ) - [ ] NP完全性II&リダクション(ビデオ) - [ ] NP完全性III(ビデオ) - [ ] NP完全性IV(ビデオ) - [ ] スキナ: - [ ] CSE373 2012 - 講義23 - NP完全性の紹介(ビデオ) - [ ] CSE373 2012 - 講義24 - NP完全性の証明(ビデオ) - [ ] CSE373 2012 - 講演25 - NP完全性への挑戦(ビデオ) - [ ] 複雑さ:P、NP、NP完全性、削減(ビデオ) - [ ] 複雑さ:近似アルゴリズム(ビデオ) - [ ] 複雑さ:固定パラメータアルゴリズム(ビデオ) - ピーター・ノヴィグ(Peter Norvig)は、セールスマンの問題を解決するための最適なソリューションについて説明しています。 - JupyterNotebook - あなたが持っているなら、CLRSの1048 - 1140ページ。

    あなたはそれらを実装できますか?

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

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

  • 4年以上の経験があれば、システム設計の質問を期待できます。
  • スケーラビリティとシステム設計は、多くのトピックとリソースを持つ非常に大きなトピックです。

      スケーラビリティ(拡張可能)なソフトウェア/ハードウェアシステムを設計する際には、考慮すべき点がたくさんあります。       これにかなりの時間を費やすことを期待してください。

    - [ ] AmazonのAWSで1,100万人以上のユーザーに拡大するための初心者向けガイド - [ ] Dockerの効果待ち時間の使用方法 - [ ] AMPはGoogleに存在する脅威に対抗していますか? - [ ] 全Netflixスタックの360度ビュー ) - [ ] レイテンシはどこにでもあり、それはあなたのセールスに費やされます - それを粉砕する方法 - [ ] サーバーレス(非常に長い、要点が必要) - [ ] Instagramを動かすもの:何百ものインスタンス、数十のテクノロジ - [ ] シンクキャストアーキテクチャ - 毎日1,500時間の音声を生成する - [ ] Justin.Tvのライブビデオブロードキャストアーキテクチャ - [ ] Playfishのソーシャルゲームアーキテクチャ - 月間5000万人のユーザーと成長 ) - [ ] アーキテクチャ - 40Mビジター、200Mダイナミックページビュー、30TBデータ - [ ] PlentyOfFishアーキテクチャ - [ ] Salesforceのアーキテクチャ - どのように130億回のトランザクションを処理するか ) - [ ] ESPNの規模でのアーキテクチャ - 毎秒100,000のDuh Nuh Nuhsで動作 - [ ] サービスを結合する技術の情報については、以下の「メッセージング、シリアライゼーション、およびキューイングシステム」を参照してください。 - [ ] Twitter: - O`Reilly MySQL CE 2011:Jeremy Cole、「@Twitterの大小データ」(ビデオ) - スケール時のタイムライン - さらに詳しくは、ビデオシリーズセクションの「Mining Massive Datasets」ビデオシリーズを参照してください。

            - 面接官の助けを借りてユースケースを定義する - 追加の機能を提案する - 面接官が範囲外とみなすアイテムを削除する - 高可用性が必要と仮定し、ユースケースとして追加する 2. 制約について考える: - 毎月のリクエスト数を尋ねる - 毎秒どれくらいのリクエストをするか(彼らはボランティアでもよいし、あなたに数学をさせるかもしれない) - 読み込みと書き込みの割合を見積もります - 推定時に80/20ルールを守って下さい - 1秒あたりに書き込まれるデータの量 - 5年間に必要な合計ストレージ - 毎秒読み取られるデータの量 3. 抽象的なデザイン: - レイヤー(サービス、データ、キャッシング) - インフラストラクチャ:負荷分散、メッセージング - サービスを駆動する主要なアルゴリズムの概要 - ボトルネックを考慮し、解決策を決定する - 演習: - CDNネットワークの設計:古い記事 - ランダムなID生成システムの設計 - オンラインマルチプレイヤーカードゲームのデザイン - Key-Valueデータベースの設計 - 画像共有システムの設計 - 推薦システムの設計 - URL短縮システムの設計:上からコピー - キャッシュシステムの設計


最終レビュー

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


コーディングの質問練習

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

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

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

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

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

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

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

補足:

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

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

コード演習/挑戦

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

コーディング面接質問ビデオ:

チャレンジサイト:

チャレンジレポ:

疑似面接:

面接に近づいたら

あなたの履歴書

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

面接が来たときに考えてください

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

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

面接官に質問があります

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

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

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

一度あなたは仕事を得た

おめでとう!

学び続けます。

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


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

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

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


その他の書籍

その他の学習

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

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

  • 日本語版:アルゴリズム設計マニュアル

    • レビューと問題認識として
    • アルゴリズムのカタログ部分は、面接で得られる難易度の範囲をはるかに超えています。
    • この本は2パートに分かれます:
      • データ構造とアルゴリズムに関する教科書
        • 長所:
          • アルゴリズムの教科書はどんなものでも良いレビューです
          • 業界および学界の問題を解決した経験から得た素敵な話
          • Cのコード例
        • 短所:
          • Introduction to Algorithms(CLRS)と同様に密集しているか、侵入不可能な場合があります。場合によっては、CLRSが一部の科目にとってより良い選択肢になる可能性があります
          • 7章、8章、9章では、いくつかの項目がうまく説明されていないか、私が持っているよりも多くの脳を必要とするため、追跡しようとすると痛いことがあります
          • 誤解しないで:私はSkiena、彼の教え方、そしてマナーを好きですが、Stony Brookの教材ではないかもしれません。
      • アルゴリズムカタログ:
        • これがあなたがこの本を買う本当の理由です。
        • この部分に近づきます。一度私がそれを通り抜けたら、ここで更新されます。
    • Kindleで読むことが出来ます
    • Half.comは教科書のための良いリソースです。
    • 回答:
    • 正誤表
  • アルゴリズムイントロダクション

  • 日本語版:アルゴリズムイントロダクション

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

    • プログラミング上の問題(データテープを使っているものもあります)への巧妙な解決策を示していますが、これは単なるイントロです。

      これはプログラムの設計とアーキテクチャに関するガイドブックです。 これはプログラムの設計とアーキテクチャに関するガイドブックです。Code Completeとよく似ていますが、はるかに短いものです。

        特に興味深い自己組織化データ構造は、スプレイ木であり、回転を使用します         アクセスされたキーをルートに移動する」 - Skiena     これらのうち、私はスプレイ木を実装することを選択しました。私が読んだことから、あなたは         あなたの面接でバランスの取れた検索木。しかし、私は1つのコーディングへの露出を望んでいた         そしてそれに直面しましょう、スプレーの木はミツバチの膝です。私は赤黒の木のコードをたくさん読んだ。 - スプレイ木:挿入、検索、削除機能         あなたが赤/黒の木の実装を終わらせるならば、これらを試してみてください: - 検索と挿入機能、削除をスキップする     B-Treeについては、非常に大規模なデータセットで非常に広く使用されているため、詳細を知りたい。 - [ ] Self-balancing binary search tree

- [ ]  ** AVL木**

        - 実際には:             私が言うことから、これらは実際にはあまり使われていませんが、どこになるか分かります。             AVL木は、O(log n)検索、挿入、および削除をサポートする別の構造です。より厳格に             赤黒の木よりもバランスがとれているため、挿入と取り出しが遅くなりますが、検索が速くなります。これにより             一度構築され、再構成なしでロードされる、例えば言語             辞書(または、アセンブラまたはインタプリタのオペコードなどのプログラム辞書)を含む。 - [ ] MIT AVL Trees / AVL Sort(ビデオ) - [ ] AVL木(ビデオ) - [ ] AVL木実装(ビデオ) - [ ] スプリットアンドマージ

- [ ]  **スプレッド木**

        - 実際には:             スプレイ・木は、キャッシュ、メモリ・アロケータ、ルータ、ガベージ・コレクタ、             データ圧縮、ロープ(長いテキスト文字列に使用される文字列の置換)、Windows NT(仮想メモリ、             ネットワークおよびファイルシステムコードなど) - [ ] CS 61B:Splay Trees(video) - [ ] MIT講義:Splay Trees: - 非常にマッシーになりますが、最後の10分を確かめてください。 - 動画

- [ ]  **レッド/ブラックの木**
	- これらは2-3木の翻訳です(下記参照)

        - 実際には:             赤黒の木は、挿入時間、削除時間、および検索時間に対して最悪の場合の保証を提供します。             これは、リアルタイムアプリケーションなどの時間に敏感なアプリケーションでは、これらを貴重なものにするだけでなく、             それは最悪の場合の保証を提供する他のデータ構造における貴重なビルディングブロックになります。             例えば、計算幾何学で使用される多くのデータ構造は赤黒の木に基づくことができ、             現在のLinuxカーネルで使用されている完全に公正なスケジューラは赤黒の木を使用します。 Javaのバージョン8では、             Collection HashMapが変更され、LinkedListを使用して同一の要素を貧弱に保存する代わりに             ハッシュコードでは、赤黒の木が使用されます。 - Aduni - アルゴリズム - 講義4(リンク先のジャンプ先)(ビデオ) - Aduni - アルゴリズム - 講義5(ビデオ) - [ ] 黒い木 - [ ] [バイナリサーチとレッドブラック木の紹介](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red -black-trees /)

  • 2-3の検索木
    • 実際には:

            2〜3本の木は、検索が遅くなるため(AVL木よりも高さが高いため)、挿入が速くなります。 - 2-3の木は非常にまれにしか使用しませんが、実装にはさまざまなタイプのノードが含まれるためです。代わりに、人々はレッドブラックの木を使用します。 - [ ] 23木の直感と定義(ビデオ) - [ ] 23-Treeのバイナリビュー - [ ] 2-3木(学生の暗唱)(ビデオ)

- [ ]  **2-3-4木(別名2-4木)**

        - 実際には:             すべての2-4木には、同じ順序でデータ要素を持つ対応する赤黒の木があります。挿入と削除             2-4木の操作は、赤黒の木の色の反転と回転にも相当します。これは2-4の木を             赤黒の木の背後にある論理を理解するための重要なツールです。そのため、多くの導入アルゴリズムのテキストでは、             2〜4本の木は実用的ではありません**。 - [ ] CS 61B講義26:バランスの取れた検索木(ビデオ) - [ ] ボトムアップ234-Trees(ビデオ) - [ ] トップダウン234木(動画)

- [ ]  **N-ary(K-ary、M-ary)木**
	- 注記:NまたはKは分岐因子(最大分岐)であり、
	- 2分木は2分木であり、分岐因子= 2
	- 2-3本の木は3本である
	- [ ]  [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree)

- [ ]  **B-Tree**
	- 楽しい事実:それは謎ですが、Bはボーイング、バランスの取れた、またはバイエル(共同発明家)のために立つことができます。

        - 実際には:             B木はデータベースで広く使用されています。最近のファイルシステムのほとんどは、B-tree(またはVariants)を使用しています。に加えて             B木はファイルシステムでも使用され、任意のデータベースへの迅速なランダムアクセスを可能にします             特定のファイル内のブロック基本的な問題は、ファイルブロックのiアドレスをディスクブロックに変換することです             (またはおそらくシリンダーヘッドセクターへの)アドレスである。 - [ ] B-Tree - [ ] B木(ビデオ)の紹介 - [ ] B木の定義と挿入(ビデオ) - [ ] B木削除(動画) - [ ] MIT 6.851 - メモリ階層モデル(ビデオ) - キャッシュに気付かないB木、非常に興味深いデータ構造 - 最初の37分は非常に技術的であり、スキップすることができます(Bはブロックサイズ、キャッシュラインサイズです)

   - 動画のみ    - 線形代数のレビューについてはビデオ12〜18を参照してください(14と15は重複しています) - 機械学習のためのニューラルネットワーク - GoogleのDeep Learning Nanodegree - Google / Kaggle Machine Learning Engineer Nanodegree - 自己運転車技術者Nanodegree - Metis Online Course(2ヶ月間99ドル) - リソース: - 書籍: - Python Machine Learning - ゼロからのデータ科学:Pythonの第一原理 - Pythonによる機械学習入門 - ソフトウェアエンジニア向け機械学習 - データスクール:http://www.dataschool.io/

追加科目の詳細

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

ビデオシリーズ

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

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

Discussion

コメントにはログインが必要です。