#コーディングインタビュー大学
私はもともとこれをソフトウェアエンジニアになるための短期的な研究テーマのリストとして作成しましたが、 しかし、それは今日あなたが見る大きなリストに成長しました。この調査計画を経て、私は雇われました Amazonのソフトウェア開発エンジニアとして! あなたは私のように勉強する必要はないでしょう。とにかく、必要なものはすべてここにあります。
ここに記載されている項目は、ほぼすべてのソフトウェア会社のインタビューの中で、 巨人を含む:Amazon、Facebook、GoogleまたはMicrosoft。
あなたに最高の運勢!
翻訳:
翻訳中:
これは、Web開発者(独学で、CS指導なし)から大企業のソフトウェアエンジニアに向かうための私の複数月の学習計画です。
これは、新しいソフトウェアエンジニアまたは ソフトウェア/ウェブ開発からソフトウェア工学(コンピュータサイエンスの知識が必要な場合)。あなたが持っている場合 長年の経験とソフトウェア工学の長年の経験を主張している、より面白いインタビューを期待しています。
何年ものソフトウェア/ウェブ開発経験がある場合は、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
##あなたは十分にスマートではないと感じないでください
##ビデオリソースについて
一部のビデオは、Coursera、EdX、またはLynda.comクラスに登録することによってのみ利用できます。これらはMOOCと呼ばれています。 時にはクラスがセッションに入っていないので、数ヶ月待つ必要があるため、アクセス権がありません。 Lynda.comコースは無料ではありません。
オンラインコースビデオに付随するYouTubeビデオなど、無料で常時利用可能なパブリックソースを追加することに感謝します。 私は大学の講義を使うのが好きです。
##インタビュープロセスと一般インタビュー準備
##インタビューのための1つの言語を選ぶ
インタビューのコーディングの部分に慣れ親しんだ言語を使用することはできますが、大企業にとってはこれらの選択肢が確実です。
これらを使用することもできますが、最初に読んでください。注意が必要な場合があります:
あなたは言語に非常に慣れて知識が必要です。
選択肢についてもっと読む:
私は学習しているので、以下に含まれるC、C ++、Pythonの学習を見ることができます。いくつかの本があります、下を参照してください。
これは私が使ったものよりも短いリストです。これは時間を節約するために省略されています。
もし余分な時間があれば:
短い時間:
もっと時間があれば(私はこの本が欲しい):
###言語固有
インタビューの言語を選択する必要があります(上記参照)。 私はすべての言語のためのリソースがありません。私は追加を歓迎する。
これらのうちの1つを読んだら、コーディングの問題を開始するために必要なすべてのデータ構造とアルゴリズムの知識が必要です。 あなたがレビューしたいと思わない限り、このプロジェクトのビデオ講義をすべてスキップすることができます**。
私はこれらの2つを読んだことはありませんが、Sedgewickによって高く評価され書かれています。彼は素晴らしいです。
C ++の推奨事項がある場合は、私に知らせてください。包括的なリソースを探しています。
OR:
###オプションの書籍
何人かはこれをお勧めしますが、何年ものソフトウェアエンジニアリング経験があり、より面白いインタビューを期待している場合を除いて、
[ ] アルゴリズム設計マニュアル(Skiena)
[ ] アルゴリズムの紹介
シェンの "アルゴリズムとプログラミング:問題と解決策"
##あなたが始める前に
このリストは何ヶ月にもわたって成長しました。
ここで私が作ったいくつかの間違いがあります。あなたはより良い経験をするでしょう。
私は数時間のビデオを見て、豊富なメモを取りました。そして数ヶ月後に私は覚えていないほどでした。私は3日間過ごした 私のメモとフラッシュカードを作って見直すことができました。
あなたが私の間違いをしないように読んでください:
この問題を解決するために、私は2種類のフラッシュカード、一般とコードを追加できる小さなフラッシュカードサイトを作った。 各カードのフォーマットは異なります。
私はモバイル先のウェブサイトを作ったので、どこにいても電話とタブレットを見直すことができました。
あなた自身を無料で作る:
私は船外に出て、アセンブリ言語やPythonのトリビアからマシンの学習や統計に至るまですべてのカードをカバーしています。何が必要なのかはあまりにも大変です。
フラッシュカードについての注意: あなたが最初に答えを知っているときは、知らないようにしてください。あなたは あなたが本当にそれを知る前に、同じカードを数回正しく答えてください。繰り返しは、その知識を深く あなたの脳。
私のフラッシュカードサイトを使用する代わりにAnkiが何度も私に勧められています。繰り返しシステムを使用して覚えやすくなります。 ユーザーフレンドリーで、すべてのプラットフォームで利用でき、クラウドシンクシステムを備えています。 iOSでは25ドル、他のプラットフォームでは無料です。
Ankiフォーマットの私のフラッシュカードデータベース:https://ankiweb.net/shared/info/25173560(thanks @xiewenya)
私は、ASCII、OSIスタック、Big-O表記などのチートシートを用意しています。私は余裕があるときに勉強します。
プログラミングの問題から30分ほど休み、フラッシュカードを通過してください。
貴重な時間を費やす可能性のある注意散漫がたくさんあります。集中と集中が難しい。
##カバーされていないもの
これらは一般的な技術ですが、この調査計画の一部ではありません:
##日々の計画
一部の被験者は1日を要し、いくつかは複数日を要する。いくつかは、何も実装することなく学習しているだけです。
毎日私は以下のリストから1つのテーマを取り上げ、そのテーマに関するビデオを見て、以下の実装を書いています:
あなたはこれらのすべてを必要としません。あなたは[インタビューのための1つの言語]だけが必要です(インタビューのための1つの言語を選択します)。
なぜこれらすべてのコード?
私はすべてのテーマでこれらのすべてをやる時間がないかもしれませんが、私は試してみます。
あなたは私のコードをここに見ることができます:
あなたはすべてのアルゴリズムの勇気を暗記する必要はありません。
コンピューターではなく、ホワイトボードや紙にコードを書く。いくつかのサンプル入力でテストします。次に、コンピュータでテストします。
##前提知識
[ ] Learn C
[ ] コンピュータがプログラムをどのように処理するか:
##アルゴリズムの複雑さ/ Big-O / Asymptotic解析
講義の中には数学的にも余裕がある場合は、下にジャンプして 離散数学ビデオを見て、バックグラウンドの知識を得る。
###配列
###リンクリスト
###キュー
[ ] 動画:
[ ] オンラインコース:
[ ] 線形プロービングを使用して配列で実装する
##その他の知識
###バイナリ検索
###ビット演算
###木 - ノートと背景
###バイナリ検索ツリー:BST
###ヒープ/プライオリティキュー/バイナリヒープ
##並べ替え
[ ] ノート:
ヒープソートについては、上記のヒープデータ構造を参照してください。ヒープソートは素晴らしいですが、安定していません。
[ ] UCバークレー:
[ ] バブルソート(動画)
[ ] バブルソートの分析(動画)
[ ] 挿入ソート、マージソート(動画)
[ ] 挿入順(動画)
[ ] マージソート(動画)
[ ] クイックソート(動画)
[ ] 選択ソート(動画)
[ ] マージソートコード:
[ ] クイックソートコード:
[ ] 実装:
[ ] 必須ではありませんが、私はそれらをお勧めしました:
要約すると、15ソートアルゴリズムの視覚的表現です。 このテーマの詳細が必要な場合は、[いくつかの科目の追加の詳細]の[ソート]の項を参照してください(#additional-detail-on-some-subjects)
##グラフ
グラフはコンピュータサイエンスの多くの問題を表現するために使用することができるので、このセクションは木やソートのように長いです。
ノート:
[ ] Skiena Lectures - 素晴らしいイントロ:
[ ] グラフ(レビューなど):
フルコースラコース:
私は実装します:
Skienaの本(下記の書籍の節を参照)とインタビューの書籍
##さらに多くの知識
###再帰
###動的プログラミング
IS A
プリンシパルに従います
###コンビナトリアル(nをkとする)と確率
###キャッシュ
###プロセスとスレッド
###論文
###テスト
###スケジューリング
###システムルーチンを実装する
###文字列の検索と操作
このテーマについてさらに詳しく知りたい場合は、[いくつかの科目の追加の詳細]の「文字列のマッチング」の項を参照してください(#additional-detail-on-some-subjects)
###試行
###浮動小数点数
###エンディアン
###ネットワーキング
##システム設計、スケーラビリティ、データ処理
考察:
[ ] ここをクリック:The System Design Primer
[ ] テクニカルインバビューで設計質問に答えるための準備方法
[ ] システムデザインインタビューの前に知っておくべき8つの事柄
[ ] アルゴリズム設計
[ ] System Design Interview - この中には多くのリソースがあります。記事や例を見てください。私はそれらのいくつかを下に置いた。
[ ] システム設計インタビューの方法
[ ] 誰もが知るべき数字
[ ] データセンター間の取引(動画)
[ ] CAP定理の簡単な英語入門
[ ] パクソス合意アルゴリズム:
[ ] スケーラビリティ:
[ ] スパナ
Egnyteアーキテクチャ:マルチペタバイト分散システムの構築とスケーリングの教訓
[ ] 機械学習型プログラミング:新しい世界のための新しいプログラミング
[ ] 1日あたり何百万ものリクエストを処理する画像最適化技術
[ ] Tinder:どのようにして最大のレコメンデーションエンジンの誰があなたが次に誰を見るか決定する?
[ ] 現代のキャッシュのデザイン
[ ] Facebookのスケールでライブビデオストリーミング AmazonのAWSで1,100万人以上のユーザーに拡大するための初心者向けガイド(http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million- users-on-amazons.html)
[ ] ドッカーの効果待ち時間の使用方法
[ ] 全Netflixスタックの360度ビュー )
シンクキャストアーキテクチャ - 毎日1,500時間の音声を生成する
[ ] [Playfishのソーシャルゲームアーキテクチャ - 50百万人の月間ユーザーと成長(http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) )
[ ] アーキテクチャ - 40Mビジター、200M動的ページビュー、30TBデータ
ESPNの規模でのアーキテクチャ - 毎秒100,000のDuh Nuh Nuhsで動作
[ ] 一緒にサービスを接着できる技術の情報については、下記の「メッセージング、シリアライゼーション、およびキューイングシステム」を参照してください。
[ ] Twitter:
さらに詳しくは、Video Seriesセクションの「Mining Massive Datasets」ビデオシリーズを参照してください。
[ ] システム設計プロセスの練習:紙で作業しようとするいくつかのアイデアがあります。実際にどのように扱われたのかについてのいくつかの文書があります。
##最終レビュー
このセクションでは、重要な概念のほとんどを見直すためにかなり短いビデオを見ることができます。 あなたが頻繁にリフレッシャーをしたいならいいですね。
##コーディングの質問練習
上のすべてのコンピュータ科学のトピックを知ったので、コーディングの問題に答える練習をしましょう。
コーディング質問の練習は、プログラミング問題への回答を記憶することではありません。
プログラミングの問題を練習する必要がある理由
インタビューでは、体系的でコミュニケーション的な問題解決の素晴らしいイントロがあります。あなたはプログラミングからこれを得るでしょう インタビューの本もありましたが、私はこの優れた発見しました: アルゴリズム設計キャンバス
自宅にホワイトボードはありませんか?それは理にかなっている。私は変わった人で、大きなホワイトボードを持っています。ホワイトボードの代わりに、 アートストアからの大きな描画パッド。あなたはソファに座って練習することができます。これが私の「ソファホワイトボード」です。 私はスケールの写真にペンを追加しました。ペンを使うと、あなたは消すことができます。すぐに厄介になる。
補足:
プログラミングの問題を読んでやる(この順番で):
上記のブックリストを参照してください
##コード演習/挑戦
あなたの脳を学んだら、脳を働かせてください。 できるだけ多く、毎日コーディングの課題に取り組んでください。
コーディングインタビュー質問ビデオ:
チャレンジサイト:
チャレンジレポ:
モックインタビュー:
##あなたが面接に近づいたら
##インタビューが来る時を考えている
あなたが得る20の面接の質問と、以下の項目の行を考えてみましょう。それぞれ2-3の答えがあります。 あなたが達成したことについての物語だけでなく、データを持ってください。
##インタビュアーに質問があります
私の中には(私は既に知っているかもしれませんが、彼らの意見やチームの視点が必要です):
あなたのチームはどれくらいですか?
##一度あなたは仕事を得た
おめでとう!
学び続けます。
あなたは決して本当に終わらない。
*************************************************** *************************************************** * *************************************************** *************************************************** *
この点以下のものはすべてオプションです。 これらを勉強することで、より多くのCSコンセプトにさらされることになります。 任意のソフトウェアエンジニアリングジョブ。あなたはもっと豊富なソフトウェアエンジニアになるでしょう。
*************************************************** *************************************************** * *************************************************** *************************************************** *
##その他の書籍
##その他の学習
これらの話題はインタビューでは出てこないかもしれませんが、 特定のテクノロジとアルゴリズムを認識するためには、より大きなツールボックスが必要になります。
###コンパイラ
###情報理論(ビデオ)
###パリティ&ハミングコード(ビデオ)
###エントロピー
###暗号化
###圧縮
###コンピュータセキュリティ
###ガベージコレクション
###パラレルプログラミング
###メッセージング、シリアライゼーション、およびキューイングシステム
###高速フーリエ変換
###ブルームフィルター
###局所性に敏感なハッシング
###ヴァンEmde Boasの木
###拡張データ構造
###バランスの取れた検索ツリー
[ ] ** AVLツリー** - 実際には: 私が言うことから、これらは実際にはあまり使われていませんが、どこになるか分かります。 AVLツリーは、O(log n)検索、挿入、および削除をサポートする別の構造です。より厳格に 赤黒の木よりもバランスがとれているため、挿入と取り出しが遅くなりますが、検索が速くなります。これにより 一度構築され、再構成なしでロードされる、例えば言語 辞書(または、アセンブラまたはインタプリタのオペコードなどのプログラム辞書)を含む。
[ ] スプレッドツリー - 実際には: スプレイ・ツリーは、キャッシュ、メモリ・アロケータ、ルータ、ガベージ・コレクタ、 データ圧縮、ロープ(長いテキスト文字列に使用される文字列の置換)、Windows NT(仮想メモリ、 ネットワークおよびファイルシステムコードなど)
[ ] レッド/ブラックの木
[ ] 2-3の検索ツリー
実際には: 2〜3本の木は、検索が遅くなるため(AVL木よりも高さが高いため)、挿入が速くなります。
[ ] 2-3-4木(別名2-4木) - 実際には: すべての2-4ツリーには、同じ順序でデータ要素を持つ対応する赤黒の木があります。挿入と削除 2-4木の操作は、赤黒の木の色の反転と回転にも相当します。これは2-4の木を 赤黒の木の背後にある論理を理解するための重要なツールです。そのため、多くの導入アルゴリズムのテキストでは、 2〜4本の木は実用的ではありません**。
[ ] N-ary(K-ary、M-ary)木
[ ] B-Tree
###リストをスキップする
###ネットワークの流れ
###分離集合と連合検索
###高速処理のための数学
###
###リニアプログラミング(ビデオ)
###幾何学、凸包(ビデオ)
###離散数学
###機械学習
-
##追加科目の詳細
私は既に上記のいくつかのアイデアを強化するためにこれらを追加しましたが、それらを含めたくありませんでした それはちょうどあまりにも多くのためです。それは被験者にそれを過ごすのは簡単です。 あなたは今世紀に雇われたかったですね。
[ ] 連合検索
[ ] もっとダイナミックなプログラミング(ビデオ)
[ ] 高度なグラフ処理(ビデオ)
[ ] MIT 確率(mathy、ゆっくりと進み、数学的なことに良い)(ビデオ):
[ ] 文字列マッチング
[ ] ソート
##ビデオシリーズ
座って楽しんでください。 「ネットフリックスとスキル」:P
[ ] CSE373 - アルゴリズムの分析(25ビデオ)
[ ] グラフ理論(Sarada Herke)(67ビデオ)(https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
##コンピュータサイエンスコース