私はもともとこれをソフトウェアエンジニアになるための短いトピックリストとして作成しましたが、 今日それは大きなリストに成長しました。この学習計画を経て、私はAmazonで ソフトウェアエンジニアとして雇われました!! おそらく、あなたは私ほど勉強する必要はないでしょう。とにかく、必要なものはすべてここにあります。 私は数ヶ月間、1日約8〜12時間勉強しました。これが私のストーリーです: Google の面接のために8か月間フルタイムで勉強した理由 注意してください: あなたは私ほど勉強する必要はありません。私は、知る必要のないことに多くの時間を無駄にしました。詳細については、以下をご覧ください。貴重な時間を無駄にすることなく、必要なことを勉強するのを手伝います。 ここに掲載されている項目を学べば、Amazon、Facebook、Google、Microsoftなど 大手企業を含む、ほぼすべてのソフトウェア会社の面接に備えることができます。
あなたに最高の幸運がありますように!
翻訳:
翻訳中:
これは、大企業のソフトウェア エンジニアになるための私の数か月にわたる学習計画です。
必須:
これはソフトウェア エンジニアリングの学習計画であり、フロントエンド エンジニアリングやフルスタック開発ではないことに注意してください。 他の場所でのキャリア パスのスーパー ロードマップとコースワーク (詳細については https://roadmap.sh/ を参照)。
大学のコンピューター サイエンス プログラムでは学ぶべきことがたくさんありますが、面接には 75% 程度知っていれば十分なので、ここではそれについて説明します。 完全な CS 独学プログラムについては、私の学習計画のリソースがカムラン アーメッドのコンピューター サイエンス ロードマップに含まれています: https://roadmap.sh/computer-science
大企業でソフトウェア エンジニアとして働きたいのであれば、これらのことを知っておく必要があります。
私のようにコンピューター サイエンスの学位を取得できなかった場合は、これで人生の 4 年間取り戻すことができます。
このプロジェクトを始めたとき、私はヒープからのスタックのことも、Big-O のことも、木についても、何も知りませんでした。 グラフを横断します。もし私が並べ替えアルゴリズムをコーディングしなければならなかったとしたら、それは酷いことになるでしょう。 私がこれまで使用してきたデータ構造はすべて言語に組み込まれており、それがどのように機能するのかわかりませんでした。 ボンネットの下にはまったくありません。実行しているプロセスで「不足」が発生しない限り、メモリを管理する必要はありませんでした。 「memory」エラーが発生した場合は、回避策を見つける必要があります。私は人生でいくつかの多次元配列を使用しましたが、 何千もの連想配列を作成しましたが、データ構造を最初から作成したことはありません。
長い計画ですね。何か月もかかるかもしれません。しかし、すでにこの内容の多くに精通している場合は、時間ははるかに短くなります。
以下はすべて概要であり、順に項目に取り組む必要があります。
私は進捗状況を追跡するためのタスク リストを含む、GitHub 風マークダウン を使用しています。
このページで、上部近くの「Code」ボタンをクリックし、「Download ZIP」をクリックします。ファイルを解凍すると、テキスト ファイルを操作できるようになります。
マークダウンを理解できるコード エディターで開いている場合は、すべてが適切にフォーマットされていることを確認できます。
新しいブランチを作成して、次のような項目を確認できるようにします。括弧内に x を入力するだけです: [x]
https://github.com/jwasham/coding-interview-university
をフォーク ボタンをクリックしてフォークします。ローカル リポジトリにクローンを作成します。
git clone https://github.com/<YOUR_GITHUB_USERNAME>/coding-interview-university.git
cd coding-interview-university
git remote add upstream https://github.com/jwasham/coding-interview-university.git
git remote set-url --push upstream DISABLE # 個人の進捗を元のレポにプッシュバックしないようにするため
変更を完了したら、すべてのボックスに X を付けます。
git commit -am "Marked personal progress"
git pull upstream main # 元のレポからの変更でフォークを最新に保つ
git push # just pushes to your fork
一部のビデオは、Coursera、EdX、またはLynda.comクラスに登録することによってのみ利用できます。 これらはMOOCと呼ばれています。 時にはクラスがセッションに入っていないので、数ヶ月待つ必要があるため、アクセス権がありません。 Lynda.comコースは有料です。
オンラインコースビデオに付随するYouTubeビデオなど、無料で常時利用可能なパブリックソースを追加することに感謝します。 私は大学の講義を使うのが好きです。
面接のコーディングの部分に慣れ親しんだ言語を使用することはできますが、大企業にとってはこれらの選択肢が確実です。
これらを使用することもできますが、最初に読んでください。注意が必要な場合があります:
あなたは言語に非常に慣れて知識が必要です。
選択肢についてもっと読む:
私は学習しているので、以下に含まれるC、C ++、Pythonの学習を見ることができます。 いくつかの本があります、下を参照してください。
これは私が使ったものよりも短いリストです。これは時間を節約するために省略されています。
もし余分な時間があれば:
短期:
もっと時間があれば(私はこの本が欲しい):
面接の言語を選択する必要があります(上記参照)。 ここで私の推奨する言語です。私はすべての言語のためのリソースがありません。私は追加を歓迎する。
これらのうちの1つを読んだら、コーディングの問題を開始するために必要なすべてのデータ構造とアルゴリズムの知識が必要です。 あなたがレビューをしたくない場合は、このプロジェクトのビデオ講義をすべてスキップすることができます。
私はこれらの2つを読んだことはありませんが、Sedgewickによって高く評価され書かれています。彼は素晴らしいです。
C++の推奨事項がある場合は、私に知らせてください。包括的なリソースを探しています。
OR:
このリストは何ヶ月にもわたって成長しました。
ここで私が作ったいくつかの間違いがあります。 あなたはより良い経験をするでしょう。
私は数時間のビデオを見て、豊富なメモを取りました。 そして数ヶ月後に私は覚えていないほどでした。 私はメモを書き、フラッシュカードを作って見直すことができるように3日間過ごしました。
あなたが私と同じ間違いをしないように読んでください:
この問題を解決するために、私は2種類のフラッシュカード、一般とコードを追加できる小さなフラッシュカードサイトを作った。 各カードのフォーマットは異なります。
私はモバイル先のウェブサイトを作ったので、どこにいても電話とタブレットを見直すことができました。
あなた自身を無料で作る:
覚えておいてほしいのですが,私はやりすぎてしまい、アセンブリ言語,機械学習のためのPythonのトリビア,統計に至るまですべてのカードをカバーしています。 何が必要なのかはあまりにも大変です。
フラッシュカードについての注意: 最初に答えを知っているときは、それを既知のものとしてマークしないでください。 あなたは本当にそれを知る前に、同じカードを見て、それを正しく数回答えなければなりません。 繰り返すことで、その知識があなたの脳に深く浸透します。
私のフラッシュカードサイトを使用する代わりにAnkiが何度も私に勧められています。 繰り返しシステムを使用して覚えやすくなります。 ユーザーフレンドリーで、すべてのプラットフォームで利用でき、クラウド同期システムを備えています。 iOSでは25ドル、他のプラットフォームでは無料です。
Anki形式の私のフラッシュカードデータベース:https://ankiweb.net/shared/info/25173560(thanks @xiewenya)
私は、ASCII、OSI参照モデル、Big-O記法などのチートシートを用意しています。私は余裕があるときに勉強します。
プログラミングの問題から30分ほど休み、フラッシュカードを通過してください。
貴重な時間を費やす可能性のある注意散漫がたくさんあります。集中と集中が難しい。
これらは一般的な技術ですが、この調査計画の一部ではありません:
一部の科目は1日を要し、いくつかは複数日を要する。 いくつかは、何も実装することなく学習しているだけです。
毎日私は以下のリストから1つのテーマを取り上げ、そのテーマに関するビデオを見て、以下の実装を書いています:
あなたはこれらのすべてを必要としません。面接のために必要な言語は1つだけです。
なぜこれらすべてのコード?
私はすべてのテーマでこれらのすべてをやる時間がないかもしれませんが、私は試してみます。
あなたは私のコードをここに見ることができます:
あなたはすべてのアルゴリズムの内容を暗記する必要はありません。
コンピューターではなく、ホワイトボードや紙にコードを書く。いくつかのサンプル入力でテストします。次に、コンピュータでテストします。
[ ] Cを学ぶ
[ ] コンピュータがプログラムをどのように処理するか:
講義の中には数学的にも余裕がある場合は、下にジャンプして 離散数学ビデオを見て、背景知識を得る。
[ ] 動画:
[ ] オンラインコース:
[ ] 線形プロービングを使用して配列で実装する
[ ] note:
ヒープソートについては、上記のヒープデータ構造を参照してください。ヒープソートは素晴らしいですが、安定していません。
[ ] バブルソート(動画)
[ ] バブルソートの分析(動画)
[ ] 挿入ソート、マージソート(動画)
[ ] 挿入ソート(動画)
[ ] マージソート(動画)
[ ] クイックソート(動画)
[ ] 選択ソート(動画)
[ ] マージソートコード:
[ ] クイックソートコード:
[ ] 実装:
[ ] 必須ではありませんが、私はそれらをお勧めしました:
まとめとして、ここには15ソートアルゴリズムの視覚的表現があります。 このテーマの詳細が必要な場合は、[いくつかの科目の追加の詳細]の[ソート]の項を参照してください(#additional-detail-on-some-subjects)
グラフはコンピュータサイエンスの多くの問題を表現するために使用することができるので、このセクションは木やソートのように長いです。
メモ:
[ ] Skiena Lectures - 素晴らしいイントロ:
[ ] グラフ(レビューなど):
フルcourseraコース:
私は実装します:
Skienaの本(下記の書籍の節を参照)と面接の書籍
IS A
プリンシパルに従います
このテーマについてさらに詳しく知りたい場合は、[いくつかの科目の追加の詳細]の「文字列のマッチング」の項を参照してください(#additional-detail-on-some-subjects)
考慮事項:
[ ] ここをクリック:システム設計入門
[ ] アルゴリズム設計
[ ] システム設計の面接 - この中には多くのリソースがあります。記事や例を見てください。私はそれらのいくつかを下に置いた。
[ ] システム設計面接の方法
[ ] 誰もが知っておくべき数字
[ ] データセンター間の取引(動画)
[ ] CAP定理の簡単な英語入門
[ ] Paxosアルゴリズム:
[ ] コンシステントハッシュ法
[ ] スケーラビリティ:
[ ] スパナ
[ ] 現代のキャッシュのデザイン
[ ] [アーキテクチャ - 40Mビジター、200Mダイナミックページビュー、30TBデータ]()
[ ] サービスを結合する技術の情報については、以下の「メッセージング、シリアライゼーション、およびキューイングシステム」を参照してください。
[ ] Twitter:
さらに詳しくは、ビデオシリーズセクションの「Mining Massive Datasets」ビデオシリーズを参照してください。
[ ] システム設計プロセスの練習:紙で作業しようとするいくつかのアイデアがあります。実際にどのように処理されたかについてのいくつかの文書があります。
このセクションでは、重要な概念のほとんどを見直すためにかなり短いビデオを見ることができます。 あなたが頻繁に再学習をしたいならいいですね。
上のすべてのコンピュータサイエンスのトピックを知ったので、コーディングの問題に答える練習をしましょう。
コーディング質問の練習は、プログラミング問題への回答を記憶することではありません。
プログラミングの問題を練習する必要がある理由
面接では、体系的でコミュニケーション的な問題解決の素晴らしいイントロがあります。あなたはプログラミングの面接の本からもこれを手に入れるでしょうが、私はこの優れた発見しました: アルゴリズム設計キャンバス
自宅にホワイトボードはありませんか?それは理にかなっている。私は変わった人で、大きなホワイトボードを持っています。ホワイトボードの代わりに、 アートストアから大きなドローイングパッドを拾い上げます。あなたはソファに座って練習することができます。これが私の「ソファホワイトボード」です。 私はスケールの写真にペンを追加しました。ペンを使うと、あなたは消すことができます。すぐに厄介になる。
補足:
プログラミングの問題を読んでやる(この順番で):
上記のブックリストを参照してください
あなたの脳を学んだら、脳を働かせてください。 できるだけ多く、毎日コーディングの課題に取り組んでください。
コーディング面接質問ビデオ:
チャレンジサイト:
チャレンジレポ:
疑似面接:
あなたが得る20の面接の質問と、以下の項目の行を考えてみましょう。 それぞれ2-3の答えがあります。 あなたが達成したことについての物語だけでなく、データを持ってください。
私の中には(私は既に知っているかもしれませんが、彼らの意見やチームの視点が必要です):
あなたのチームはどれくらいの規模ですか?
おめでとう!
学び続けてください。
あなたは決して本当に終わらない。
*************************************************** *************************************************** * *************************************************** *************************************************** *
この点以下のものはすべてオプションです。 これらを勉強することで、より多くのCSコンセプトにさらされることになります。 任意のソフトウェアエンジニアリングジョブ。あなたはもっと豊富なソフトウェアエンジニアになるでしょう。
*************************************************** *************************************************** * *************************************************** *************************************************** *
これらの話題は面接では出てこないかもしれませんが、 特定のテクノロジとアルゴリズムを認識するためには、より大きなツールボックスが必要になります。
[ ] アルゴリズムイントロダクション
シェンの "アルゴリズムとプログラミング:問題と解決策"
[ ] 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ビデオ)