|
@@ -1,10 +1,11 @@
|
|
|
# コーディング面接の大学
|
|
|
|
|
|
>私はもともとこれをソフトウェアエンジニアになるための短いトピックリストとして作成しましたが、
|
|
|
->今日それは大きなリストに成長しました。この調査計画を経て、[私はAmazonで
|
|
|
+>今日それは大きなリストに成長しました。この学習計画を経て、[私はAmazonで
|
|
|
> ソフトウェアエンジニアとして雇われました!!](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)
|
|
|
>おそらく、あなたは私ほど勉強する必要はないでしょう。とにかく、必要なものはすべてここにあります。
|
|
|
->
|
|
|
+> 私は数ヶ月間、1日約8〜12時間勉強しました。これが私のストーリーです: [Google の面接のために8か月間フルタイムで勉強した理由](https://www.freecodecamp.org/news/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)
|
|
|
+>注意してください: あなたは私ほど勉強する必要はありません。私は、知る必要のないことに多くの時間を無駄にしました。詳細については、以下をご覧ください。貴重な時間を無駄にすることなく、必要なことを勉強するのを手伝います。
|
|
|
>ここに掲載されている項目を学べば、Amazon、Facebook、Google、Microsoftなど
|
|
|
>大手企業を含む、ほぼすべてのソフトウェア会社の面接に備えることができます。
|
|
|
>
|
|
@@ -52,9 +53,9 @@
|
|
|
</p>
|
|
|
</div>
|
|
|
<div>
|
|
|
- <sup>Created by ex-Google engineers, AlgoMonster will help you crush the technical interview in less time
|
|
|
- and with fewer sleepless nights grinding away random problems. You will learn the key patterns necessary to solve
|
|
|
- any interview question and gain the systematic knowledge you need to prove your expertise. Be more confident
|
|
|
+ <sup>Created by ex-Google engineers, AlgoMonster will help you crush the technical interview in less time
|
|
|
+ and with fewer sleepless nights grinding away random problems. You will learn the key patterns necessary to solve
|
|
|
+ any interview question and gain the systematic knowledge you need to prove your expertise. Be more confident
|
|
|
as you walk into that interview!</sup>
|
|
|
</div>
|
|
|
</a>
|
|
@@ -63,17 +64,19 @@
|
|
|
</div>
|
|
|
|
|
|
## これは何?
|
|
|
+
|
|
|
|
|
|
-これは、Webエンジニア(独学で、CS学位なし)から大企業のソフトウェアエンジニアを目指すための私の複数月の学習計画です。
|
|
|
+これは、大企業のソフトウェア エンジニアになるための私の数か月にわたる学習計画です。
|
|
|
|
|
|
-
|
|
|
+必須:
|
|
|
|
|
|
-これは、 **新人ソフトウェアエンジニア** 、またはソフトウェア/ Webエンジニアからソフトウェアエンジニア(CSの知識が必要な場合)に転職する人を対象にしています。
|
|
|
-長年のソフトウェアエ開発経験をお持ちの場合は、より面白い面接を期待してください。
|
|
|
+コーディングの経験 (変数、ループ、メソッド/関数など)
|
|
|
+忍耐
|
|
|
+時間
|
|
|
|
|
|
-あなたに何年ものソフトウェア/Web開発経験がある場合、Google、Amazon、Facebook、Microsoftなどの大規模なソフトウェア会社は、ソフトウェア/Web開発力ではなくソフトウェア工学に関して見ており、そのためにはCSに関する知識が必要となることをご了承ください。
|
|
|
+これは**ソフトウェアエンジニアリング**の学習計画であり、Web 開発の学習計画ではありません。 Google、Amazon、Facebook、Microsoft などの大手ソフトウェア企業は、ソフトウェアエンジニアリングを Web 開発とは異なるものと見なしています。 たとえば、Amazon にはフロントエンドエンジニア (FEE) とソフトウェア開発エンジニア (SDE) がいます。 これらは2つの別個の役割であり、それぞれに独自の能力があるため、面接は同じではありません。これらの企業は、ソフトウェア開発/エンジニアリングの役割のためにコンピューターサイエンスの知識を必要とします。
|
|
|
|
|
|
-SREまたはシステムエンジニアになりたい場合は、オプションのリスト(ネットワーク、セキュリティ)から詳細を調べてください。
|
|
|
+大学のコンピューターサイエンスプログラムで学ぶことはたくさんありますが、75%程度の知識があれば面接に十分なので、ここではそれについて説明します。 完全な CS 独学プログラムについては、私の学習計画のリソースがカムラン アーメドのコンピューターサイエンスロードマップに含まれています: https://roadmap.sh/computer-science
|
|
|
|
|
|
---
|
|
|
|
|
@@ -129,6 +132,10 @@ SREまたはシステムエンジニアになりたい場合は、オプショ
|
|
|
|
|
|
## なぜこれを使用するのか
|
|
|
|
|
|
+大企業でソフトウェアエンジニアとして働きたい場合は、次のことを知っておく必要があります。
|
|
|
+
|
|
|
+私のようにコンピューターサイエンスの学位を取得していない場合、これで追いつき、人生の4年間を救うことができます。
|
|
|
+
|
|
|
私はこのプロジェクトを始めたとき、ヒープからスタックを知りませんでしたし、Big-O とは何か、木構造に関すること、グラフをたどる方法を知らなかったのです。
|
|
|
ソートアルゴリズムをコーディングしなければならない場合は、あまりうまくいきませんでした。
|
|
|
これまで使用してきたすべてのデータ構造は言語に組み込まれていて、どのようにしてそれらがどのようにして動作するのか分かりませんでした。
|
|
@@ -180,10 +187,10 @@ SREまたはシステムエンジニアになりたい場合は、オプショ
|
|
|
|
|
|
一部のビデオは、Coursera、EdX、またはLynda.comクラスに登録することによってのみ利用できます。
|
|
|
これらはMOOCと呼ばれています。
|
|
|
-時にはクラスがセッションに入っていないので、数ヶ月待つ必要があるため、アクセス権がありません。
|
|
|
+時にはクラスがセッションに入っていないので、数ヶ月待つ必要があるため、アクセス権がありません。
|
|
|
Lynda.comコースは有料です。
|
|
|
|
|
|
-オンラインコースビデオに付随するYouTubeビデオなど、無料で常時利用可能なパブリックソースを追加することに感謝します。
|
|
|
+オンラインコースビデオに付随するYouTubeビデオなど、無料で常時利用可能なパブリックソースを追加することに感謝します。
|
|
|
私は大学の講義を使うのが好きです。
|
|
|
|
|
|
|
|
@@ -522,7 +529,7 @@ Anki形式の私のフラッシュカードデータベース:https://ankiweb.
|
|
|
|
|
|
- ### スタック
|
|
|
- [ ] [Stacks(video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks)
|
|
|
- - [ ] [スタックをの使用 Last-In First-Out(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html)
|
|
|
+ - [ ] [スタックの使用 Last-In First-Out(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html)
|
|
|
- [ ] 実装されません。配列で実装するのは簡単です。
|
|
|
|
|
|
- ### キュー
|
|
@@ -533,11 +540,11 @@ Anki形式の私のフラッシュカードデータベース:https://ankiweb.
|
|
|
- [ ] テールポインタ付き連結リストを使って実装する:
|
|
|
- enqueue(value) - テールの位置に値を追加する
|
|
|
- dequeue() - 値を返し、少なくとも最近追加された要素を削除する(前面)
|
|
|
- - empty()
|
|
|
+ - empty()
|
|
|
- [ ] 固定長配列を使って実装する:
|
|
|
- enqueue(value) - 利用可能なストレージの最後にアイテムを追加する
|
|
|
- dequeue() - 値を返し、最近追加された要素のうち最も古い要素を削除します
|
|
|
- - empty()
|
|
|
+ - empty()
|
|
|
- full()
|
|
|
- [ ] コスト:
|
|
|
- 最後の要素の次の要素が必要になるため、先頭にエンキューし、末尾をデキューするリンクリストを使用する悪い実装はO(n)になり、デキューごとに完全なトラバーサルが発生します
|
|
@@ -550,9 +557,11 @@ Anki形式の私のフラッシュカードデータベース:https://ankiweb.
|
|
|
- [ ] [連鎖によるハッシング(動画)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8)
|
|
|
- [ ] [ダブリング、ラビン-カープ(ビデオ)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
|
|
- [ ] [公開アドレス指定、暗号化ハッシング(動画)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
|
|
- - [ ] [PyCon 2010:The Mighty Dictionary(video)](https://www.youtube.com/watch?v=C4Kc8xzcA68)
|
|
|
+ - [ ] [PyCon 2010: The Mighty Dictionary(video)](https://www.youtube.com/watch?v=C4Kc8xzcA68)
|
|
|
+ - [ ] [PyCon 2017: The Dictionary Even Mightier(video)](https://www.youtube.com/watch?v=66P5FMkWoVU)
|
|
|
- [ ] [(上級)Randomization:ユニバーサル&完全 ハッシング(ビデオ)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11)
|
|
|
- [ ] [(高度)完全ハッシング(動画)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4)
|
|
|
+ - [ ] [[Review] Hash tables in 4 minutes (video)](https://www.youtube.com/watch?v=knV86FlSXJ8)
|
|
|
|
|
|
- [ ] オンラインコース:
|
|
|
- [ ] [ハッシュ関数について(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html)
|
|
@@ -619,19 +628,18 @@ Anki形式の私のフラッシュカードデータベース:https://ankiweb.
|
|
|
- 操作アルゴリズム
|
|
|
- BFS(幅優先検索)
|
|
|
- [MIT(動画)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13)
|
|
|
- - レベルオーダー(BFS、キューを使用)
|
|
|
- 時間複雑度:O(n)
|
|
|
- 空間の複雑さ:最適:O(1)、最悪:O(n / 2)= O(n)
|
|
|
+ - メモ:
|
|
|
+ - レベルオーダー(BFS、キューを使用)
|
|
|
+ - 時間複雑度:O(n)
|
|
|
+ - 空間の複雑さ:最適:O(1)、最悪:O(n / 2)= O(n)
|
|
|
- DFS(深さ優先探索)
|
|
|
- [MIT(動画)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14)
|
|
|
- - メモ:
|
|
|
- 時間複雑度:O(n)
|
|
|
- 空間の複雑さ:
|
|
|
- 最良:O(log n) - 平均。木の高さ
|
|
|
- 最悪:O(n)
|
|
|
- - inorder(DFS:left、self、right)
|
|
|
- - postorder(DFS:left、right、self)
|
|
|
- - preorder(DFS:自己、左、右)
|
|
|
+ - メモ:
|
|
|
+ - 時間複雑度:O(n)
|
|
|
+ - 空間の複雑さ:最良:O(log n) - 平均。木の高さ 最悪:O(n)
|
|
|
+ - inorder(DFS:left、self、right)
|
|
|
+ - postorder(DFS:left、right、self)
|
|
|
+ - preorder(DFS:自己、左、右)
|
|
|
|
|
|
- ### 二分探索木:BST
|
|
|
- [ ] [二分探索木レビュー(動画)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
|
|
@@ -654,7 +662,7 @@ Anki形式の私のフラッシュカードデータベース:https://ankiweb.
|
|
|
- [ ] insert //木に値を挿入する
|
|
|
- [ ] get_node_count //格納された値の数を取得する
|
|
|
- [ ] print_values //最小値から最大値まで木の値を出力します
|
|
|
- - [ ] delete_tree
|
|
|
+ - [ ] delete_tree
|
|
|
- [ ] is_in_tree //与えられた値が木に存在する場合はtrueを返します
|
|
|
- [ ] get_height //ノードの高さを返します(単一ノードの高さは1です)
|
|
|
- [ ] get_min //木に格納されている最小値を返します
|
|
@@ -687,7 +695,7 @@ Anki形式の私のフラッシュカードデータベース:https://ankiweb.
|
|
|
- [ ] is_empty() - ヒープに要素が含まれていない場合はtrueを返します。
|
|
|
- [ ] extract_max - 最大アイテムを返し、それを削除します。
|
|
|
- [ ] sift_down - extract_maxに必要です
|
|
|
- - [ ] remove(i) - インデックスxのアイテムを削除する
|
|
|
+ - [ ] remove(x) - インデックスxのアイテムを削除する
|
|
|
- [ ] heapify - heap_sortに必要な要素の配列からヒープを作成する
|
|
|
- [ ] heap_sort() - ソートされていない配列を取り出し、最大ヒープを使用してソート済みの配列に変換します
|
|
|
- 注意:代わりにminヒープを使用すると、操作が節約されますが、必要な領域が2倍になります([in-place](https://ja.wikipedia.org/wiki/In-place%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0)では実行できません)。
|
|
@@ -752,7 +760,7 @@ Anki形式の私のフラッシュカードデータベース:https://ankiweb.
|
|
|
|
|
|
グラフはコンピュータサイエンスの多くの問題を表現するために使用することができるので、このセクションは木やソートのように長いです。
|
|
|
|
|
|
-- note:
|
|
|
+- メモ:
|
|
|
- メモリにグラフを表示するには4つの基本的な方法があります:
|
|
|
- オブジェクトとポインタ
|
|
|
- 隣接行列
|
|
@@ -820,6 +828,7 @@ Skienaの本(下記の書籍の節を参照)と面接の書籍
|
|
|
- [ ] [テール再帰(ビデオ)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1)
|
|
|
|
|
|
- ### 動的プログラミング
|
|
|
+ - 面接で動的プログラミングの問題が見られることはおそらくないでしょうが、問題が動的プログラミングの候補であると認識できることは価値があります。
|
|
|
- この問題はかなり難しいかもしれません。なぜなら、それぞれのDP可溶性問題は再帰関係として定義されなければならず、それを思い付くのは難しいかもしれないからです。
|
|
|
- DPの問題の多くの例を見て、あなたが関連するパターンをしっかりと理解するまでお勧めします。
|
|
|
- [ ] 動画:
|
|
@@ -925,6 +934,13 @@ Skienaの本(下記の書籍の節を参照)と面接の書籍
|
|
|
- [JupyterNotebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb)
|
|
|
- あなたが持っているなら、CLRSの1048 - 1140ページ。
|
|
|
|
|
|
+- ### コンピューターはどのようにプログラムを実行するか
|
|
|
+ - [ ] [CPU がどのようにプログラムを実行するか (動画)](https://www.youtube.com/watch?v=XM4lGflQFvA)
|
|
|
+ - [ ] [コンピューターがどのように計算するか - ALU (動画)](https://youtu.be/1I5ZMmrOfnA)
|
|
|
+ - [ ] [レジスタと RAM (動画)](https://youtu.be/fpnE6UAfbtU)
|
|
|
+ - [ ] [中央処理装置 (CPU) (動画)](https://youtu.be/FZGugFqdr60)
|
|
|
+ - [ ] [命令とプログラム (動画)](https://youtu.be/zltgXvg6r3k)
|
|
|
+
|
|
|
- ### キャッシュ
|
|
|
- [ ] LRUキャッシュ:
|
|
|
- [ ] [LRUキャッシュの魔法(Google Devの100日間)(ビデオ)](https://www.youtube.com/watch?v=R5ON3iwx78M)
|
|
@@ -1171,16 +1187,16 @@ Skienaの本(下記の書籍の節を参照)と面接の書籍
|
|
|
- [ ] [AmazonのAWSで1,100万人以上のユーザーに拡大するための初心者向けガイド](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html)
|
|
|
- [ ] [Dockerの効果待ち時間の使用方法](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html)
|
|
|
- [ ] [AMPはGoogleに存在する脅威に対抗していますか?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html)
|
|
|
- - [ ] [全Netflixスタックの360度ビュー](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html)
|
|
|
+ - [ ] [全Netflixスタックの360度ビュー](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html)
|
|
|
- [ ] [レイテンシはどこにでもあり、それはあなたのセールスに費やされます - それを粉砕する方法](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it)
|
|
|
- [ ] [サーバーレス(非常に長い、要点が必要](http://martinfowler.com/articles/serverless.html)
|
|
|
- [ ] [Instagramを動かすもの:何百ものインスタンス、数十のテクノロジ](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances)
|
|
|
- [ ] [シンクキャストアーキテクチャ - 毎日1,500時間の音声を生成する](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html)
|
|
|
- [ ] [Justin.Tvのライブビデオブロードキャストアーキテクチャ](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html)
|
|
|
- - [ ] [Playfishのソーシャルゲームアーキテクチャ - 月間5000万人のユーザーと成長](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html)
|
|
|
+ - [ ] [Playfishのソーシャルゲームアーキテクチャ - 月間5000万人のユーザーと成長](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html)
|
|
|
- [ ] [アーキテクチャ - 40Mビジター、200Mダイナミックページビュー、30TBデータ]()
|
|
|
- [ ] [PlentyOfFishアーキテクチャ](http://highscalability.com/plentyoffish-architecture)
|
|
|
- - [ ] [Salesforceのアーキテクチャ - どのように130億回のトランザクションを処理するか](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html)
|
|
|
+ - [ ] [Salesforceのアーキテクチャ - どのように130億回のトランザクションを処理するか](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html)
|
|
|
- [ ] [ESPNの規模でのアーキテクチャ - 毎秒100,000のDuh Nuh Nuhsで動作](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html)
|
|
|
- [ ] サービスを結合する技術の情報については、以下の「メッセージング、シリアライゼーション、およびキューイングシステム」を参照してください。
|
|
|
- [ ] Twitter:
|
|
@@ -1349,12 +1365,13 @@ Skienaの本(下記の書籍の節を参照)と面接の書籍
|
|
|
- 何をしているの?
|
|
|
- それについて何が好きですか?
|
|
|
- 仕事の生活はどうですか?
|
|
|
+- ワークライフバランスはどうですか?
|
|
|
|
|
|
## 一度あなたは仕事を得た
|
|
|
|
|
|
おめでとう!
|
|
|
|
|
|
-学び続けます。
|
|
|
+学び続けてください。
|
|
|
|
|
|
あなたは決して本当に終わらない。
|
|
|
|