diff --git a/README.md b/README.md
index c54ce31d65..77adc82c0f 100644
--- a/README.md
+++ b/README.md
@@ -21,6 +21,11 @@
- [Português Brasileiro](translations/README-ptbr.md)
- [Polish](translations/README-pl.md)
- [繁體中文](translations/README-tw.md)
+- [Japanese (日本語)](translations/README-ja.md)
+- [Russian](translations/README-ru.md)
+- [German](translations/README-de.md)
+- [Bahasa Indonesia](translations/README-id.md)
+- [ខ្មែរ - Khmer](translations/README-kh.md)
@@ -29,20 +34,17 @@
- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81)
- [עברית](https://github.com/jwasham/coding-interview-university/issues/82)
-- [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101)
- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98)
- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90)
- [French](https://github.com/jwasham/coding-interview-university/issues/89)
-- [Russian](https://github.com/jwasham/coding-interview-university/issues/87)
- [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106)
- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118)
- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117)
-- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140)
+- [Urdu](https://github.com/jwasham/coding-interview-university/issues/519)
- [Thai](https://github.com/jwasham/coding-interview-university/issues/156)
- [Greek](https://github.com/jwasham/coding-interview-university/issues/166)
- [Italian](https://github.com/jwasham/coding-interview-university/issues/170)
- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239)
-- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257)
@@ -75,8 +77,8 @@ If you want to be a reliability engineer or operations engineer, study more from
- [Book List](#book-list)
- [Before you Get Started](#before-you-get-started)
- [What you Won't See Covered](#what-you-wont-see-covered)
-- [Prerequisite Knowledge](#prerequisite-knowledge)
- [The Daily Plan](#the-daily-plan)
+- [Prerequisite Knowledge](#prerequisite-knowledge)
- [Algorithmic complexity / Big-O / Asymptotic analysis](#algorithmic-complexity--big-o--asymptotic-analysis)
- [Data Structures](#data-structures)
- [Arrays](#arrays)
@@ -197,7 +199,7 @@ It's a long plan. It may take you months. If you are familiar with a lot of this
Everything below is an outline, and you should tackle the items in order from top to bottom.
-I'm using Github's special markdown flavor, including tasks lists to check progress.
+I'm using Github's special markdown flavor, including tasks lists to track progress.
**Create a new branch so you can check items like this, just put an x in the brackets: [x]**
@@ -221,7 +223,7 @@ Fork the GitHub repo https://github.com/jwasham/coding-interview-university by c
`git commit -m "Marked x"`
-`git rebase jwasham/master`
+`git rebase jwasham/main`
`git push --set-upstream origin progress`
@@ -247,15 +249,16 @@ Sometimes the classes are not in session so you have to wait a couple of months,
## Interview Process & General Interview Prep
-- [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
+- [ ] [How to Pass the Engineering Interview in 2021](https://davidbyttow.medium.com/how-to-pass-the-engineering-interview-in-2021-45f1b389a1)
- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs)
- [ ] How to Get a Job at the Big 4:
- [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
+ - [ ] [How to Get a Job at the Big 4.1 (Follow-up video)](https://www.youtube.com/watch?v=6790FVXWBw8&feature=youtu.be)
- [ ] Cracking The Coding Interview Set 1:
- [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
- [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
-- [ ] Cracking the Facebook Coding Interview
+- [ ] Cracking the Facebook Coding Interview:
- [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI)
- [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg)
- [ ] Prep Course:
@@ -267,6 +270,8 @@ Sometimes the classes are not in session so you have to wait a couple of months,
- A free Python centric data structures and algorithms course.
- [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256):
- Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios.
+ - [ ] [Grokking the Behavioral Interview (Educative free course)](https://www.educative.io/courses/grokking-the-behavioral-interview):
+ - Many times, it’s not your technical competency that holds you back from landing your dream job, it’s how you perform on the behavioral interview.
## Pick One Language for the Interview
@@ -281,7 +286,7 @@ You could also use these, but read around first. There may be caveats:
- JavaScript
- Ruby
-Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)
+Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/).
You need to be very comfortable in the language and be knowledgeable.
@@ -333,6 +338,9 @@ I haven't read these two, but they are highly rated and written by Sedgewick. He
- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
+- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf)
+ - Rich and detailed collection of Data Structures and Algorithms
+ - Great for first-timers
If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource.
@@ -348,16 +356,16 @@ OR:
- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
- by Goodrich, Tamassia, Goldwasser
- used as optional text for CS intro course at UC Berkeley
- - see my book report on the Python version below. This book covers the same topics.
+ - see my book report on the Python version below. This book covers the same topics
### Python
- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
- by Goodrich, Tamassia, Goldwasser
- - I loved this book. It covered everything and more.
+ - I loved this book. It covered everything and more
- Pythonic code
- my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/
-
+- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf)
## Before you Get Started
@@ -368,26 +376,26 @@ Here are some mistakes I made so you'll have a better experience.
### 1. You Won't Remember it All
I watched hours of videos and took copious notes, and months later there was much I didn't remember. I spent 3 days going
-through my notes and making flashcards so I could review.
+through my notes and making flashcards, so I could review.
-Read please so you won't make my mistakes:
+Please, read so you won't make my mistakes:
[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/).
-A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn)
+A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn).
### 2. Use Flashcards
To solve the problem, I made a little flashcards site where I could add flashcards of 2 types: general and code.
Each card has different formatting.
-I made a mobile-first website so I could review on my phone and tablet, wherever I am.
+I made a mobile-first website, so I could review on my phone and tablet, wherever I am.
Make your own for free:
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
-- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required.
@@ -398,16 +406,16 @@ your brain.
An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember.
It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms.
-My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya))
+My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)).
-### 3. Start doing coding interview questions while you're learning data structures and algorithms,
+### 3. Start doing coding interview questions while you're learning data structures and algorithms
-You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic,
-and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding
-linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem,
-or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge,
-but how you apply the knowledge. There are several books and sites I recommend.
-See here for more: [Coding Question Practice](#coding-question-practice)
+You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic,
+and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding
+linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem,
+or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge,
+but how you apply the knowledge. There are several books and sites I recommend.
+See here for more: [Coding Question Practice](#coding-question-practice).
### 4. Review, review, review
@@ -417,7 +425,7 @@ Take a break from programming problems for a half hour and go through your flash
### 5. Focus
-There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music
+There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music
without lyrics and you'll be able to focus pretty well.
## What you won't see covered
@@ -433,19 +441,19 @@ These are prevalent technologies but not part of this study plan:
Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement.
Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
-- C - using structs and functions that take a struct * and something else as args.
+- C - using structs and functions that take a struct * and something else as args
- C++ - without using built-in types
- C++ - using built-in types, like STL's std::list for a linked list
- Python - using built-in types (to keep practicing Python)
- and write tests to ensure I'm doing it right, sometimes just using simple assert() statements
-- You may do Java or something else, this is just my thing.
+- You may do Java or something else, this is just my thing
You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview).
Why code in all of these?
- Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember)
- Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python or Java))
-- Make use of built-in types so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production)
+- Make use of built-in types, so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production)
I may not have time to do all of these for every subject, but I'll try.
@@ -461,11 +469,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
## Prerequisite Knowledge
- [ ] **Learn C**
- - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying.
- - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
+ - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying
+ - [ ] [The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
- This is a short book, but it will give you a great handle on the C language and if you practice it a little
- you'll quickly get proficient. Understanding C helps you understand how programs and memory work.
- - [answers to questions](https://github.com/lekkas/c-algorithms)
+ you'll quickly get proficient. Understanding C helps you understand how programs and memory work
+ - [Answers to questions](https://github.com/lekkas/c-algorithms)
- [ ] **How computers process a program:**
- [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA)
@@ -477,14 +485,14 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
## Algorithmic complexity / Big-O / Asymptotic analysis
- Nothing to implement
-- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review.
-- If some of the lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge.
+- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review
+- If some lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge
- [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
- [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU)
- [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
- [ ] Skiena:
- [video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [slides](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf)
+ - [slides](https://archive.org/details/lecture2_202008)
- [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/)
- [ ] [Orders of Growth (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX)
- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM)
@@ -504,15 +512,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- [ ] Description:
- [Arrays (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF)
- [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s)
- - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4)
- - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4)
- [Dynamic Arrays (video)](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV)
- [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g)
- - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4)
- - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4)
- [ ] Implement a vector (mutable array with automatic resizing):
- [ ] Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
- - [ ] new raw data array with allocated memory
+ - [ ] New raw data array with allocated memory
- can allocate int array under the hood, just not use its features
- start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128
- [ ] size() - number of items
@@ -542,7 +546,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0)
- [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w)
- [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
- - not the whole video, just portions about Node struct and memory allocation.
+ - not the whole video, just portions about Node struct and memory allocation
- [ ] Linked List vs Arrays:
- [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9)
- [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd)
@@ -551,7 +555,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
(for when you pass a pointer to a function that may change the address where that pointer points)
This page is just to get a grasp on ptr to ptr. I don't recommend this list traversal style. Readability and maintainability suffer due to cleverness.
- [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html)
- - [ ] implement (I did with tail pointer & without):
+ - [ ] Implement (I did with tail pointer & without):
- [ ] size() - returns number of data elements in list
- [ ] empty() - bool returns true if empty
- [ ] value_at(index) - returns the value of the nth item (starting at 0 for first)
@@ -572,14 +576,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- ### Stack
- [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ)
- - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4)
- - [ ] Will not implement. Implementing with array is trivial.
+ - [ ] Will not implement. Implementing with array is trivial
- ### Queue
- - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4)
- [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq)
- [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer)
- - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4)
- [ ] Implement using linked-list, with tail pointer:
- enqueue(value) - adds value at position at tail
- dequeue() - returns value and removes least recently added element (front)
@@ -606,10 +607,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4)
- [ ] Online Courses:
- - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4)
- - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4)
- - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4)
- - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4)
- [ ] [Core Hash Tables (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-hash-tables-m7UuP)
- [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/4)
- [ ] [Phone Book Problem (video)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP)
@@ -617,7 +614,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/lecture/data-structures/instant-uploads-and-storage-optimization-in-dropbox-DvaIb)
- [Distributed Hash Tables (video)](https://www.coursera.org/lecture/data-structures/distributed-hash-tables-tvH8H)
- - [ ] implement with array using linear probing
+ - [ ] Implement with array using linear probing
- hash(k, m) - m is size of hash table
- add(key, value) - if key already exists, update value
- exists(key)
@@ -635,7 +632,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- binary search using recursion
- ### Bitwise operations
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
@@ -647,23 +644,23 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/)
- [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html)
- [ ] [Bit Hacks (video)](https://www.youtube.com/watch?v=ZusiKXcz_ac)
+ - [ ] [Practice Operations](https://pconrad.github.io/old_pconrad_cs16/topics/bitOps/)
- [ ] 2s and 1s complement
- [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4)
- [1s Complement](https://en.wikipedia.org/wiki/Ones%27_complement)
- [2s Complement](https://en.wikipedia.org/wiki/Two%27s_complement)
- - [ ] count set bits
+ - [ ] Count set bits
- [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc)
- [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan)
- [How To Count The Number Of Set Bits In a 32 Bit Integer](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer)
- - [ ] swap values:
+ - [ ] Swap values:
- [Swap](https://bits.stephan-brumme.com/swap.html)
- - [ ] absolute value:
+ - [ ] Absolute value:
- [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html)
## Trees
- ### Trees - Notes & Background
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-trees-ovovP)
- [ ] [Series: Trees (video)](https://www.coursera.org/lecture/data-structures/trees-95qda)
- basic tree construction
- traversal
@@ -683,9 +680,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- preorder (DFS: self, left, right)
- ### Binary search trees: BSTs
- - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [Series (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees)
- - starts with symbol table and goes through BST applications
+ - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction)
- [ ] [MIT (video)](https://www.youtube.com/watch?v=9Jry5-82I68)
- C/C++:
@@ -745,7 +740,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- [ ] Notes:
- Implement sorts & know best case/worst case, average complexity of each:
- no bubble sort - it's terrible - O(n^2), except when n <= 16
- - [ ] stability in sorting algorithms ("Is Quicksort stable?")
+ - [ ] Stability in sorting algorithms ("Is Quicksort stable?")
- [Sorting Algorithm Stability](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability)
- [Stability In Sorting Algorithms](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms)
- [Stability In Sorting Algorithms](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/)
@@ -754,7 +749,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- I wouldn't recommend sorting a linked list, but merge sort is doable.
- [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/)
-- For heapsort, see Heap data structure above. Heap sort is great, but not stable.
+- For heapsort, see Heap data structure above. Heap sort is great, but not stable
- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
- [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort)
@@ -796,7 +791,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- [ ] Mergesort: O(n log n) average and worst case
- [ ] Quicksort O(n log n) average case
- Selection sort and insertion sort are both O(n^2) average and worst case
- - For heapsort, see Heap data structure above.
+ - For heapsort, see Heap data structure above
- [ ] Not required, but I recommended them:
- [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3)
@@ -826,8 +821,8 @@ Graphs can be used to represent many problems in computer science, so this secti
- adjacency list
- adjacency map
- Familiarize yourself with each representation and its pros & cons
- - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
- - When asked a question, look for a graph-based solution first, then move on if none.
+ - BFS and DFS - know their computational complexity, their trade offs, and how to implement them in real code
+ - When asked a question, look for a graph-based solution first, then move on if none
- [ ] MIT(videos):
- [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13)
@@ -883,8 +878,8 @@ Graphs can be used to represent many problems in computer science, so this secti
- [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
- [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
- [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
- - when it is appropriate to use it
- - how is tail recursion better than not?
+ - When it is appropriate to use it?
+ - How is tail recursion better than not?
- [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
- [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc)
@@ -995,16 +990,16 @@ Graphs can be used to represent many problems in computer science, so this secti
- [What Is The Difference Between A Process And A Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread)
- Covers:
- Processes, Threads, Concurrency issues
- - difference between processes and threads
- - processes
- - threads
- - locks
- - mutexes
- - semaphores
- - monitors
- - how they work
- - deadlock
- - livelock
+ - Difference between processes and threads
+ - Processes
+ - Threads
+ - Locks
+ - Mutexes
+ - Semaphores
+ - Monitors
+ - How they work?
+ - Deadlock
+ - Livelock
- CPU activity, interrupts, context switching
- Modern concurrency constructs with multicore processors
- [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2)
@@ -1013,7 +1008,7 @@ Graphs can be used to represent many problems in computer science, so this secti
- Thread resource needs (shares above (minus stack) with other threads in the same process but each has its own pc, stack counter, registers, and stack)
- Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy.
- Context switching
- - How context switching is initiated by the operating system and underlying hardware
+ - How context switching is initiated by the operating system and underlying hardware?
- [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M)
- [ ] concurrency in Python (videos):
- [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1)
@@ -1040,8 +1035,8 @@ Graphs can be used to represent many problems in computer science, so this secti
- [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html)
- ### Scheduling
- - in an OS, how it works
- - can be gleaned from Operating System videos
+ - In an OS, how it works?
+ - Can be gleaned from Operating System videos
- ### String searching & manipulations
- [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
@@ -1053,12 +1048,12 @@ Graphs can be used to represent many problems in computer science, so this secti
- [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp)
- [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
- If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects)
+ If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects).
- ### Tries
- Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits
- to track the path.
- - I read through code, but will not implement.
+ to track the path
+ - I read through code, but will not implement
- [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
- [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries)
- [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries)
@@ -1090,7 +1085,7 @@ Graphs can be used to represent many problems in computer science, so this secti
- ### Networking
- **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions**
- - otherwise, this is just good to know
+ - Otherwise, this is just good to know
- [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org)
- [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8)
- [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0)
@@ -1111,13 +1106,13 @@ Graphs can be used to represent many problems in computer science, so this secti
- Scalability and System Design are very large topics with many topics and resources, since
there is a lot to consider when designing a software/hardware system that can scale.
- Expect to spend quite a bit of time on this.
+ Expect to spend quite a bit of time on this
- Considerations:
- - scalability
+ - Scalability
- Distill large data sets to single values
- Transform one data set to another
- Handling obscenely large amounts of data
- - system design
+ - System design
- features sets
- interfaces
- class hierarchies
@@ -1131,12 +1126,12 @@ Graphs can be used to represent many problems in computer science, so this secti
- [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/)
- [ ] [Algorithm design](http://www.hiredintech.com/algorithm-design/)
- [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
-- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below.
+- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below
- [ ] [How to ace a systems design interview](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
- [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/)
- [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
- [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk)
-- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
+- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem)
- [ ] Consensus Algorithms:
- [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM)
- [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE)
@@ -1198,30 +1193,30 @@ Graphs can be used to represent many problems in computer science, so this secti
- [ ] Twitter:
- [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI)
- [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
- - For even more, see "Mining Massive Datasets" video series in the [Video Series](#video-series) section.
+ - For even more, see "Mining Massive Datasets" video series in the [Video Series](#video-series) section
- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- review: [The System Design Primer](https://github.com/donnemartin/system-design-primer)
- [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- flow:
1. Understand the problem and scope:
- - define the use cases, with interviewer's help
- - suggest additional features
- - remove items that interviewer deems out of scope
- - assume high availability is required, add as a use case
+ - Define the use cases, with interviewer's help
+ - Suggest additional features
+ - Remove items that interviewer deems out of scope
+ - Assume high availability is required, add as a use case
2. Think about constraints:
- - ask how many requests per month
- - ask how many requests per second (they may volunteer it or make you do the math)
- - estimate reads vs. writes percentage
- - keep 80/20 rule in mind when estimating
- - how much data written per second
- - total storage required over 5 years
- - how much data read per second
+ - Ask how many requests per month
+ - Ask how many requests per second (they may volunteer it or make you do the math)
+ - Estimate reads vs. writes percentage
+ - Keep 80/20 rule in mind when estimating
+ - How much data written per second
+ - Total storage required over 5 years
+ - How much data read per second
3. Abstract design:
- - layers (service, data, caching)
- - infrastructure: load balancing, messaging
- - rough overview of any key algorithm that drives the service
- - consider bottlenecks and determine solutions
+ - Layers (service, data, caching)
+ - Infrastructure: load balancing, messaging
+ - Rough overview of any key algorithm that drives the service
+ - Consider bottlenecks and determine solutions
- Exercises:
- [Design a CDN network: old article](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972)
- [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake)
@@ -1255,12 +1250,12 @@ Now that you know all the computer science topics above, it's time to practice a
**Coding question practice is not about memorizing answers to programming problems.**
Why you need to practice doing programming problems:
-- problem recognition, and where the right data structures and algorithms fit in
-- gathering requirements for the problem
-- talking your way through the problem like you will in the interview
-- coding on a whiteboard or paper, not a computer
-- coming up with time and space complexity for your solutions
-- testing your solutions
+- Problem recognition, and where the right data structures and algorithms fit in
+- Gathering requirements for the problem
+- Talking your way through the problem like you will in the interview
+- Coding on a whiteboard or paper, not a computer
+- Coming up with time and space complexity for your solutions
+- Testing your solutions
There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming
interview books, too, but I found this outstanding:
@@ -1268,7 +1263,7 @@ interview books, too, but I found this outstanding:
No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a
large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard".
-I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil
+I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil
and eraser.
![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg)
@@ -1301,16 +1296,16 @@ Take coding challenges every day, as many as you can.
Coding Interview Question Videos:
- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
- - Super for walkthroughs of problem solutions.
+ - Super for walkthroughs of problem solutions
- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-)
- - Good explanations of solution and the code.
- - You can watch several in a short time.
+ - Good explanations of solution and the code
+ - You can watch several in a short time
- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder)
Challenge sites:
- [LeetCode](https://leetcode.com/)
- - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing.
- - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode)
+ - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing
+ - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode)
- See Nick White Videos above for short code-throughs
- [HackerRank](https://www.hackerrank.com/)
- [TopCoder](https://www.topcoder.com/)
@@ -1318,6 +1313,7 @@ Challenge sites:
- [Geeks for Geeks](http://www.geeksforgeeks.org/)
- [InterviewBit](https://www.interviewbit.com/invite/icjf)
- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems)
+- [Code Exercises](https://code-exercises.com)
Language-learning sites, with challenges:
- [Codewars](http://www.codewars.com)
@@ -1330,10 +1326,10 @@ Challenge repos:
- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges)
Mock Interviews:
-- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview.
+- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview
- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews
-- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies.
-- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously.
+- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies
+- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously.
## Once you're closer to the interview
@@ -1356,7 +1352,7 @@ Have a story, not just data, about something you accomplished.
- What's a tough problem you've solved?
- Biggest challenges faced?
- Best/worst designs seen?
-- Ideas for improving an existing product.
+- Ideas for improving an existing product
- How do you work best, as an individual and as part of a team?
- Which of your skills or experiences would be assets in the role and why?
- What did you most enjoy at [job x / project y]?
@@ -1407,40 +1403,40 @@ You're never really done.
These are here so you can dive into a topic you find interesting.
- [The Unix Programming Environment](https://www.amazon.com/dp/013937681X)
- - an oldie but a goodie
+ - An oldie but a goodie
- [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/)
- - a modern option
+ - A modern option
- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/)
- - a gentle introduction to design patterns
+ - A gentle introduction to design patterns
- [Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
- - aka the "Gang Of Four" book, or GOF
- - the canonical design patterns book
+ - AKA the "Gang Of Four" book, or GOF
+ - The canonical design patterns book
- [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/)
- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
- As a review and problem recognition
- - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview.
+ - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview
- This book has 2 parts:
- - class textbook on data structures and algorithms
- - pros:
- - is a good review as any algorithms textbook would be
- - nice stories from his experiences solving problems in industry and academia
- - code examples in C
- - cons:
- - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects
- - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have
- - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material.
- - algorithm catalog:
- - this is the real reason you buy this book.
- - about to get to this part. Will update here once I've made my way through it.
+ - Class textbook on data structures and algorithms
+ - Pros:
+ - Is a good review as any algorithms textbook would be
+ - Nice stories from his experiences solving problems in industry and academia
+ - Code examples in C
+ - Cons:
+ - Can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects
+ - Chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have
+ - Don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material
+ - Algorithm catalog:
+ - This is the real reason you buy this book
+ - About to get to this part. Will update here once I've made my way through it
- Can rent it on kindle
- Answers:
- [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
- [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
- [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
- - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief.
- - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like.
+ - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief
+ - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like
- These chapters are worth the read to give you a nice foundation:
- Chapter 2 - Numeric Representation
- Chapter 3 - Binary Arithmetic and Bit Operations
@@ -1452,19 +1448,19 @@ You're never really done.
- Chapter 10 - Instruction Set Architecture
- Chapter 11 - Memory Architecture and Organization
- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
- - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently.
- - aka CLR, sometimes CLRS, because Stein was late to the game
+ - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently
+ - AKA CLR, sometimes CLRS, because Stein was late to the game
- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055)
- For a richer, more up-to-date (2017), but longer treatment
- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
- The first couple of chapters present clever solutions to programming problems (some very old using data tape) but
- that is just an intro. This a guidebook on program design and architecture.
+ that is just an intro. This a guidebook on program design and architecture
## Additional Learning
-
- I added them to help you become a well-rounded software engineer, and to be aware of certain
+
+ I added them to help you become a well-rounded software engineer, and to be aware of certain
technologies and algorithms, so you'll have a bigger toolbox.
- ### Compilers
@@ -1510,11 +1506,11 @@ You're never really done.
- ### Information theory (videos)
- [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory)
- - more about Markov processes:
+ - More about Markov processes:
- [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
- [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
- [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
- - See more in MIT 6.050J Information and Entropy series below.
+ - See more in MIT 6.050J Information and Entropy series below
- ### Parity & Hamming Code (videos)
- [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE)
@@ -1525,19 +1521,19 @@ You're never really done.
- [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk)
- ### Entropy
- - also see videos below
- - make sure to watch information theory videos first
+ - Also see videos below
+ - Make sure to watch information theory videos first
- [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176)
- ### Cryptography
- - also see videos below
- - make sure to watch information theory videos first
+ - Also see videos below
+ - Make sure to watch information theory videos first
- [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
- [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
- [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- ### Compression
- - make sure to watch information theory videos first
+ - Make sure to watch information theory videos first
- Computerphile (videos):
- [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w)
- [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko)
@@ -1617,8 +1613,8 @@ You're never really done.
- [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html)
- ### Locality-Sensitive Hashing
- - used to determine the similarity of documents
- - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same.
+ - Used to determine the similarity of documents
+ - The opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same
- [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html)
- ### van Emde Boas Trees
@@ -1635,11 +1631,11 @@ You're never really done.
to move any accessed key to the root." - Skiena
- Of these, I chose to implement a splay tree. From what I've read, you won't implement a
balanced search tree in your interview. But I wanted exposure to coding one up
- and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code.
- - splay tree: insert, search, delete functions
+ and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code
+ - Splay tree: insert, search, delete functions
If you end up implementing red/black tree try just these:
- - search and insertion functions, skipping delete
- - I want to learn more about B-Tree since it's used so widely with very large data sets.
+ - Search and insertion functions, skipping delete
+ - I want to learn more about B-Tree since it's used so widely with very large data sets
- [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
- **AVL trees**
@@ -1648,7 +1644,7 @@ You're never really done.
The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly
balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it
attractive for data structures that may be built once and loaded without reconstruction, such as language
- dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter).
+ dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter)
- [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
- [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
- [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
@@ -1658,14 +1654,14 @@ You're never really done.
- In practice:
Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors,
data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory,
- networking and file system code) etc.
+ networking and file system code) etc
- [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY)
- MIT Lecture: Splay Trees:
- Gets very mathy, but watch the last 10 minutes for sure.
- [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
- **Red/black trees**
- - these are a translation of a 2-3 tree (see below)
+ - These are a translation of a 2-3 tree (see below).
- In practice:
Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time.
Not only does this make them valuable in time-sensitive applications such as real-time applications,
@@ -1673,7 +1669,7 @@ You're never really done.
for example, many data structures used in computational geometry can be based on red–black trees, and
the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java,
the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor
- hashcodes, a Red-Black tree is used.
+ hashcodes, a Red-Black tree is used
- [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
- [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
- [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
@@ -1704,12 +1700,12 @@ You're never really done.
- [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree)
- **B-Trees**
- - fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor)
+ - Fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor).
- In Practice:
B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to
its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary
block in a particular file. The basic problem is turning the file block i address into a disk block
- (or perhaps to a cylinder-head-sector) address.
+ (or perhaps to a cylinder-head-sector) address
- [B-Tree](https://en.wikipedia.org/wiki/B-tree)
- [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html)
- [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
@@ -1721,8 +1717,8 @@ You're never really done.
- ### k-D Trees
- - great for finding number of points in a rectangle or higher dimension object
- - a good fit for k-nearest neighbors
+ - Great for finding number of points in a rectangle or higher dimension object
+ - A good fit for k-nearest neighbors
- [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk)
- [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
@@ -1762,7 +1758,7 @@ You're never really done.
- [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
- ### Discrete math
- - see videos below
+ - See videos below
- ### Machine Learning
- Why ML?
@@ -1948,6 +1944,11 @@ Sit back and enjoy. "Netflix and skill" :P
- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science)
- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses)
+## Algorithms implementation
+
+- [Multiple Algorithms implementation by Princeton University)](https://algs4.cs.princeton.edu/code)
+
+
## Papers
- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
diff --git a/extras/cheat sheets/Coding Interview Python Language Essentials.pdf b/extras/cheat sheets/Coding Interview Python Language Essentials.pdf
new file mode 100644
index 0000000000..c8988b8519
Binary files /dev/null and b/extras/cheat sheets/Coding Interview Python Language Essentials.pdf differ
diff --git a/programming-language-resources.md b/programming-language-resources.md
index c4d93f87fe..633c3409b2 100644
--- a/programming-language-resources.md
+++ b/programming-language-resources.md
@@ -1,7 +1,7 @@
## Programming Language Resources
- C
- - [ANSI C Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/C%20Reference%20Card%20(ANSI)%202.2.pdf)
+ - [ANSI C Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/C%20Reference%20Card%20(ANSI)%202.2.pdf)
- K&R C book (ANSI C)
- [Make, Clang (video)](https://www.youtube.com/watch?v=U3zCxnj2w8M)
- GDB:
@@ -10,18 +10,19 @@
- [Valgrind (video)](https://www.youtube.com/watch?v=fvTsFjDuag8)
- [Let us C](https://books.google.co.in/books/about/Let_Us_C.html?id=7HrjAAAACAAJ)
- C++
- - [C++ Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/Cpp_reference.pdf)
- - [STL Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/STL%20Quick%20Reference%201.29.pdf)
- - basics
- - pointers
- - functions
- - references
- - templates
- - compilation
- - scope & linkage
- - namespaces
- - OOP
- - STL
+ - [C++ Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/Cpp_reference.pdf)
+ - [STL Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/STL%20Quick%20Reference%201.29.pdf)
+ - [basics](https://www.tutorialspoint.com/cplusplus/cpp_basic_syntax.htm)
+ - [pointers](https://www.cprogramming.com/tutorial/lesson6.html)
+ - [class and object](https://www.cprogramming.com/tutorial/lesson12.html)
+ - [functions](https://www.cprogramming.com/tutorial/lesson4.html)
+ - [references](https://www.geeksforgeeks.org/references-in-c/)
+ - [templates](https://www.cprogramming.com/tutorial/templates.html)
+ - [compilation](https://www.youtube.com/watch?v=ZTu0kf-7h08)
+ - [scope & linkage](https://www.learncpp.com/cpp-tutorial/scope-duration-and-linkage-summary/)
+ - [namespaces](https://www.tutorialspoint.com/cplusplus/cpp_namespaces.htm)
+ - [OOP](https://www.geeksforgeeks.org/object-oriented-programming-in-cpp/)
+ - [STL](https://www.hackerearth.com/practice/notes/standard-template-library/)
- [functors](http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html)
- [C++ at Google (video)](https://www.youtube.com/watch?v=NOCElcMcFik)
- [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html)
@@ -31,7 +32,7 @@
- [Let us C++](https://books.google.co.in/books/about/Let_Us_C++.html?id=6HrjAAAACAAJ)
- [C++ Primer](https://books.google.co.in/books/about/C++_Primer.html?id=J1HMLyxqJfgC&redir_esc=y)
- Python
- - [Python Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/python-cheat-sheet-v1.pdf)
+ - [Python Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/python-cheat-sheet-v1.pdf)
- [Python in One Video](https://www.youtube.com/watch?v=N4mEzFDjqtA)
- [Series on 3.4 (video)](https://www.youtube.com/playlist?list=PL6gx4Cwl9DGAcbMi1sH6oAMk4JHw91mC_)
- [Statistics for Hackers (video)](https://www.youtube.com/watch?v=Iq9DzN6mvYA)
@@ -40,12 +41,15 @@
- [10 Tips for Pythonic Code (video)](https://www.youtube.com/watch?v=_O23jIXsshs)
- [Beyond PEP 8 -- Best practices for beautiful intelligible code (video)](https://www.youtube.com/watch?v=wf-BqAjZb8M)
- [Automate the Boring Stuff with Python](https://automatetheboringstuff.com/)
+ - [Coding Interview Essentials](https://github.com/ajinkyal121/coding-interview-university/blob/master/extras/cheat%20sheets/Coding%20Interview%20Python%20Language%20Essentials.pdf)
+ - [Data Structures And Algorithms in Python](https://www.youtube.com/watch?v=kQDxmjfkIKY)
- Java
- [Stanford CS106A - Programming Methodology (video)](https://see.stanford.edu/Course/CS106A)
- [Software Construction In Java (video)](https://www.edx.org/course/software-construction-java-mitx-6-005-1x)
- [Introduction To Programming In Java](http://introcs.cs.princeton.edu/java/home/)
- [Algorithms 4th Ed - Algorithm Book In Java](http://algs4.cs.princeton.edu/home/)
- [Effective Java 3rd Edition](https://www.amazon.com/Effective-Java-Joshua-Bloch-ebook/dp/B078H61SCH)
+ - [Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer](https://www.youtube.com/watch?v=RBSGKlAvoiM&t=1744s)
- Go
- [The Go programming Language](https://golang.org/)
- [The Go programming Language (book)](http://www.gopl.io/)
@@ -58,12 +62,16 @@
- HTML
- [Quick HTML Tutorial for Beginners](https://www.youtube.com/playlist?list=PLr6-GrHUlVf_ZNmuQSXdS197Oyr1L9sPB)
- [HTML Crash Course for Beginners (1 hr)](https://www.youtube.com/watch?v=UB1O30fR-EE)
+ - [Basic HTML and HTML5](https://www.freecodecamp.org/learn/responsive-web-design/basic-html-and-html5/)
- CSS
- [Quick CSS Tutorial for Beginners](https://www.youtube.com/playlist?list=PLr6-GrHUlVf8JIgLcu3sHigvQjTw_aC9C)
- [CSS Crash Course for absolute Beginners](https://www.youtube.com/watch?v=yfoY53QXEnI)
+ - [Basic CSS](https://www.freecodecamp.org/learn/responsive-web-design/basic-css/)
- Javascript
- [Learn Javascript in 12 minutes](https://www.youtube.com/watch?v=Ukg_U3CnJWI)
- [Javascript Beginner Tutorials](https://www.youtube.com/playlist?list=PL41lfR-6DnOrwYi5d824q9-Y6z3JdSgQa)
+ - [Javascript Algorithms and Data Structures](https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/)
+ - [Javascript Algorithms With Explanations](https://github.com/trekhleb/javascript-algorithms)
- Other Language 1
- Other Language 2
- etc
diff --git a/translations/README-ar.md b/translations/README-ar.md
index d5c0ffbea3..ba05c7fbc2 100644
--- a/translations/README-ar.md
+++ b/translations/README-ar.md
@@ -1,37 +1,60 @@
-# الإعداد لجوجل
+# الإعداد لمقابلة البرمجة
-الترجمه:
-- [中文版本](README-cn.md)
-- الترجمات تحت الاعداد:
- - [Español](https://github.com/jwasham/coding-interview-university/issues/80)
- - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81)
- - [עברית](https://github.com/jwasham/coding-interview-university/issues/82)
- - [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101)
- - [Arabic](https://github.com/jwasham/coding-interview-university/issues/98)
- - [Vietnamese](https://github.com/jwasham/coding-interview-university/issues/92)
- - [Turkish](https://github.com/jwasham/coding-interview-university/issues/90)
- - [French](https://github.com/jwasham/coding-interview-university/issues/89)
- - [Russian](https://github.com/jwasham/coding-interview-university/issues/87)
- - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106)
- - [Brazilian Portuguese](https://github.com/jwasham/coding-interview-university/issues/113)
- - [Korean](https://github.com/jwasham/coding-interview-university/issues/118)
- - [Polish](https://github.com/jwasham/coding-interview-university/issues/122)
+> أنشأتها في المقام الأول كلائحة قصيرة من المواضيع الدراسية لكيف يصبح المرء مهندس برمجيات، ولكن سرعان ما كبرت هذه القائمة إلى ما تراه أمامك اليوم. بعد خوض هذه الخطة الدراسية,
+[تم توظيفي كمهندس تطوير برمجيات لدى أمازون](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! على الأغلب لن تحتاج إلى ان تدرس بالقدر الذي درسته أنا. لكن على كل حال كل ما تحتاج إليه موجود
+هنا
+>
+> درست لمدة ٨-١٢ ساعة في اليوم, لعدة أشهر. هذه هي قصتي: [لماذا درست دواما كاملا لمدة ثمانية أشهر من أجل مقابلة لدا قوقل](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)
+>
+> العناصر المذكورة في هذه اللائحة ستجهزك جيدا لمقابلة تقنية مع تقريبا أي شركة برمجية, حتى الشركات العملاقة: أمازون، فيسبوك، قوقل، وميكروسوفت
+>
+> بالتوفيق
-## ماهذا؟
-هي خطة من عدة أشهر من مطور تطبيقات ويب (قائمة على التعليم الذاتي، ومبدون درجة علمية في علوم الحاسب) لمنصب مهندس برمجيات بجوجل
+
+الترجمات:
+- [中文版本](translations/README-cn.md)
+- [Tiếng Việt - الفيتنامبة](translations/README-vi.md)
+- [الإسبانية](translations/README-es.md)
+- [(البرتغالية (البرازيلية](translations/README-ptbr.md)
+- [البولندية](translations/README-pl.md)
+- [繁體中文](translations/README-tw.md)
+- [اليابانية (日本語)](translations/README-ja.md)
+- [الروسية](translations/README-ru.md)
-![HBO كتابة الكود علي السبورة - من وادي السيليكون](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
+
-هذه القائمة الطويلة تم إعدادها من ملاحظات الإعداد لجوجل، لذلك هي الأشياء مطالب بمعرفتها.
-هناك أشياء إضافية أضفتها في آخر القائمة التي ربما تأتي في المقابلة الشخصية أو تساعد في حل المشاكل البرمجية. كتيرا من العناصر من: كتاب ستيف ياج "[احصل على وظيفة بجوجل](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" ومن حين لآخر ملاحظات الإعداد لجوجل.
-لقد قلصت ماستحتاجه من ملاحظات ياج. وقمت بتعديل متطلبات ياج.
-من معلومات تم الحصول عليها من معارفي بجوجل. هذا يعني أنه من **من مهندسين برمجيات جدد** أو من الذين غيروا مسار العمل من تطوير الويب والبرمجيات إلى مهندس برمجيات(حيث علوم الحساب أمر أساسي). لو لديك كتير من سنوات الخبرة في هندسة البرمجيات توقع المقابلة الشخصية الأصعب.
-[اقرأ المزيد](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/).
+
+ترجمات تحت الإعداد:
-إذا كان لديك العديد من سنوات الخبرة في بناء تطبيقات الويب أو البرمجيات، لاحظ أن رؤية جوجل لهندسة البرمجيات تختلف عن منظور تطوير التطبيقات أو البرمجيات وتطلب معرفة بعلوم الحاسب.
+- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81)
+- [עברית](https://github.com/jwasham/coding-interview-university/issues/82)
+- [الإندونيسية](https://github.com/jwasham/coding-interview-university/issues/101)
+- [العربية](https://github.com/jwasham/coding-interview-university/issues/98)
+- [التركية](https://github.com/jwasham/coding-interview-university/issues/90)
+- [الفرنسية](https://github.com/jwasham/coding-interview-university/issues/89)
+- [الأكرانية](https://github.com/jwasham/coding-interview-university/issues/106)
+- [الكورية(한국어)](https://github.com/jwasham/coding-interview-university/issues/118)
+- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117)
+- [أردو](https://github.com/jwasham/coding-interview-university/issues/140)
+- [التايلندية](https://github.com/jwasham/coding-interview-university/issues/156)
+- [اليونانية](https://github.com/jwasham/coding-interview-university/issues/166)
+- [الإيطالية](https://github.com/jwasham/coding-interview-university/issues/170)
+- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239)
-أذا كنت تريد أن تصبح مهندس أنظمة أو مهندس ++، اقرأ المزيد من القائمة الاختيارية عن(شبكات الحاسب، والحماية).
+
+
+## ما هذا؟
+هي خطتي متعددة الأشهر للوصول من مطور ويب (تعليم ذاتي، بدون درجة علمية في علوم الحاسب) لمنصب مهندس برمجيات لشركة عملاقة
+
+
+![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
+
+تم إعدادها لمهنسي البرمجيات الجدد أو أولئك المنتقلين من تطوير الويب إلى هندسة البرمجيات (حيث المعرفة بعلوم الحاسب ضرورية) إذا كان لديك العديد من سنوات الخبرة في بناء تطبيقات الويب أو البرمجيات، خذ في عين الإعتبار ان المقابلة ستكون اصعب
+
+إذا كانت لديك العديد من سنوات الخبرة في تطوير الويب, خذ في عين الإعتبار أن الشركات االبرمجية الضخمة مثل قوقل, فيسبوك, و ميكروسوفت ينظرون إلى هندسة البرمجيات بشكل مختلف عن تطوير البرمجيات/ويب, و تحتاج إلى معرفة علوم الحاسب
+
+إذا اردت ان تصبح مهندس موثوقية أو مهندس عمليات, ادرس اكثر من القائمة الإختيارية (شبكات, امن)
---
@@ -48,11 +71,11 @@
- [عن مصادر الفديو](#about-video-resources)
- [مراحل المقابلة الشخصية & الإستعداد العام للمقابلة](#interview-process--general-interview-prep)
- [اختر لغة برمجية واحدة للمقابلة البرمجية](#pick-one-language-for-the-interview)
-- [Book List](#book-list)
-- [Before you Get Started](#before-you-get-started)
-- [What you Won't See Covered](#what-you-wont-see-covered)
-- [Prerequisite Knowledge](#prerequisite-knowledge)
-- [The Daily Plan](#the-daily-plan)
+- [لائحة الكتب](#book-list)
+- [قبل أن تبدأ](#before-you-get-started)
+- [ما لن تجده هنا](#what-you-wont-see-covered)
+- [معرفة مسبقة](#prerequisite-knowledge)
+- [الخطة اليومية](#the-daily-plan)
- [Algorithmic complexity / Big-O / Asymptotic analysis](#algorithmic-complexity--big-o--asymptotic-analysis)
- [Data Structures](#data-structures)
- [Arrays](#arrays)
@@ -189,7 +212,7 @@
`git commit -m "Marked x" `
-`git rebase jwasham/master `
+`git rebase jwasham/main `
`git push --force `
@@ -197,9 +220,9 @@
## الدخول في مزاج جوجلي
-Print out a "[future Googler](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)" sign (or two) and keep your eyes on the prize.
+Print out a "[future Googler](https://github.com/jwasham/coding-interview-university/blob/main/extras/future-googler.pdf)" sign (or two) and keep your eyes on the prize.
-[![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)
+[![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/coding-interview-university/blob/main/extras/future-googler.pdf)
## هل حصلت على الوظيفة بجوجل؟
@@ -480,8 +503,8 @@ OR:
اصنع واحدا منها لك مجانا:
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
-- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required by Google.
@@ -717,7 +740,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- binary search using recursion
- ### Bitwise operations
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
@@ -746,7 +769,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
## Trees
- ### Trees - Notes & Background
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- basic tree construction
- traversal
@@ -1292,7 +1314,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- For even more, see "Mining Massive Datasets" video series in the Video Series section.
- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- flow:
1. Understand the problem and scope:
- define the use cases, with interviewer's help
diff --git a/translations/README-bn.md b/translations/README-bn.md
index 753a2cd059..1bd4d55666 100644
Binary files a/translations/README-bn.md and b/translations/README-bn.md differ
diff --git a/translations/README-cn.md b/translations/README-cn.md
index 13f304472a..0d1e0394d9 100644
--- a/translations/README-cn.md
+++ b/translations/README-cn.md
@@ -1,11 +1,12 @@
-# [译] Coding Interview University 一套完整的学习手册帮助自己准备 Google 的面试
+# Coding Interview University
-> * 原文地址:[Coding Interview University](https://github.com/jwasham/coding-interview-university)
-* 原文作者:[John Washam](https://github.com/jwasham)
-* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
-* 译者:[aleen42](https://github.com/aleen42),[Newton](https://github.com/Newt0n),[bobmayuze](https://github.com/bobmayuze),[Jaeger](https://github.com/laobie),[sqrthree](https://github.com/sqrthree)
+原先我为了成为一个软件工程师而建立这份简单的学习主题清单, 但这份清单随着时间而膨胀成今天这样。在做完这份清单上的每个目标后,[我成为了 Amazon 的软件开发工程师](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! 你或许不需要像我一样学习这么多。但是,让你成为一位称职工程师所需要的知识都在这里了。
-[![xitu](https://camo.githubusercontent.com/c9c9db0a39b56738a62332f0791d58b1522fdf82/68747470733a2f2f7261776769742e636f6d2f616c65656e34322f6261646765732f6d61737465722f7372632f786974752e737667)](https://github.com/xitu/gold-miner)
+我每天自学8~12小时,这样持续了好几个月。这是我的故事:[为什么我为了 Google 面试而自学了8个月](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)。
+
+在这份清单内的主题会让你拥有足够的知识去面对几乎每家软件公司的技术面试,包括科技巨头:Amazon、Facebook、Google,以及 Microsoft。
+
+祝你好运!
## 这是?
@@ -13,7 +14,11 @@
![白板上编程 ———— 来自 HBO 频道的剧集,“硅谷”](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
-这一长列表是从 **Google 的指导笔记** 中萃取出来并进行扩展。因此,有些事情你必须去了解一下。我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题。这些额外项大部分是来自于 Steve Yegge 的“[得到在 Google 工作的机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)”。而在 Google 指导笔记的逐字间,它们有时也会被反映出来。
+这份清单适用于 **新手软件工程师**,或者想从软件/网站开发转向软件工程(需要计算机科学知识)的人员。如果你有多年的经验,并且声称拥有多年的软件工程经验,并且期待一次更艰难的面试。
+
+如果你具有多年的软件/网页开发经验,请注意,大型软件公司(例如 Google,Amazon,Facebook 和 Microsoft)将软件工程视为不同于软件/网页开发,并且它们需要计算机科学知识。
+
+如果你想成为可靠性工程师或运维工程师,请从可选列表(网络,安全)中学习更多。
---
@@ -22,18 +27,15 @@
- [这是?](#这是)
- [为何要用到它?](#为何要用到它)
- [如何使用它](#如何使用它)
-- [拥有一名 Googler 的心态](#拥有一名-googler-的心态)
-- [我得到了工作吗?](#我得到了工作吗)
-- [跟着我的脚步](#跟着我的脚步)
-- [不要妄自菲薄](#不要妄自菲薄)
-- [关于 Google](#关于-google)
+- [不要觉得自己不够聪明](#不要觉得自己不够聪明)
- [相关视频资源](#相关视频资源)
- [面试过程 & 通用的面试准备](#面试过程--通用的面试准备)
- [为你的面试选择一种语言](#为你的面试选择一种语言)
+- [书单](#书单)
- [在你开始之前](#在你开始之前)
-- [你所看不到的](#你所看不到的)
-- [日常计划](#日常计划)
+- [没有包含的内容](#没有包含的内容)
- [必备知识](#必备知识)
+- [日常计划](#日常计划)
- [算法复杂度 / Big-O / 渐进分析法](#算法复杂度--big-o--渐进分析法)
- [数据结构](#数据结构)
- [数组(Arrays)](#数组arrays)
@@ -48,27 +50,41 @@
- [树 —— 笔记 & 背景](#树--笔记--背景)
- [二叉查找树(Binary search trees):BSTs](#二叉查找树binary-search-treesbsts)
- [堆(Heap) / 优先级队列(Priority Queue) / 二叉堆(Binary Heap)](#堆heap--优先级队列priority-queue--二叉堆binary-heap)
- - [字典树(Tries)](#字典树tries)
- - [平衡查找树(Balanced search trees)](#平衡查找树balanced-search-trees)
- - [N 叉树(K 叉树、M 叉树)](#n-叉树k-叉树m-叉树)
+ - [平衡查找树(Balanced search trees)(基本概念,非细节)](#平衡查找树balanced-search-trees)
+ - 遍历:前序、中序、后序、BFS、DFS
- [排序](#排序sorting)
+ - 选择排序(selection)
+ - 插入排序(insertion)
+ - 堆排序(heapsort)
+ - 快速排序(quicksort)
+ - 归并排序(merge sort)
- [图(Graphs)](#图graphs)
+ - 有向图(directed)
+ - 无向图(undirected)
+ - 邻接矩阵(adjacency matrix)
+ - 邻接表(adjacency list)
+ - 遍历:广度优先(BFS), 深度优先(DFS)
- [更多知识](#更多知识)
- [递归](#递归recursion)
- [动态规划](#动态规划dynamic-programming)
+ - [面向对象编程](#面向对象编程)
+ - [设计模式](#设计模式)
- [组合 & 概率](#组合combinatorics-n-中选-k-个--概率probability)
- [NP, NP-完全和近似算法](#np-np-完全和近似算法)
- [缓存](#缓存cache)
- [进程和线程](#进程processe和线程thread)
- - [系统设计、可伸缩性、数据处理](#系统设计可伸缩性数据处理)
- - [论文](#论文)
- [测试](#测试)
- [调度](#调度)
- - [实现系统例程](#实现系统例程)
- [字符串搜索和操作](#字符串搜索和操作)
+ - [字典树(Tries)](#字典树tries)
+ - [浮点数](#浮点数)
+ - [Unicode](#unicode)
+ - [字节顺序](#字节序Endianness)
+ - [网络](#网络视频)
+- [系统设计、可伸缩性、数据处理](#系统设计可伸缩性数据处理)(如果你有4+年经验)
- [终面](#终面)
-- [书籍](#书籍)
-- [编码练习和挑战](#编码练习和挑战)
+- [编程问题练习](#编程问题练习)
+- [编程练习和挑战](#编程练习和挑战)
- [当你临近面试时](#当你临近面试时)
- [你的简历](#你的简历)
- [当面试来临的时候](#当面试来临的时候)
@@ -77,199 +93,273 @@
---------------- 下面的内容是可选的 ----------------
-- [附加的学习](#附加的学习)
- - [Unicode](#unicode)
- - [字节顺序](#字节顺序)
+- [额外书籍](#额外书籍)
+- [附加学习](#附加学习)
+ - [编译器](#编译器)
- [Emacs and vi(m)](#emacs-and-vim)
- [Unix 命令行工具](#unix-命令行工具)
- - [信息资源 (视频)](#信息资源-视频)
+ - [信息论](#信息论-视频)
- [奇偶校验位 & 汉明码 (视频)](#奇偶校验位--汉明码-视频)
- - [系统熵值(系统复杂度)](#系统熵值系统复杂度)
+ - [系统熵值](#系统熵值Entropy)
- [密码学](#密码学)
- [压缩](#压缩)
- - [网络 (视频)](#网络-视频)
- [计算机安全](#计算机安全)
- - [释放缓存](#释放缓存)
- - [并行/并发编程](#并行并发编程)
- - [设计模式](#设计模式)
- - [信息传输, 序列化, 和队列化的系统](#信息传输-序列化和队列化的系统)
+ - [垃圾回收](#垃圾回收)
+ - [并行编程](#并行编程)
+ - [消息传递,序列化和队列化的系统](#消息传递序列化和队列系统)
+ - [A*搜索算法](#A搜索算法)
- [快速傅里叶变换](#快速傅里叶变换)
- [布隆过滤器](#布隆过滤器)
+ - [HyperLogLog](#HyperLogLog)
+ - [局部敏感哈希](#局部敏感哈希)
- [van Emde Boas 树](#van-emde-boas-树)
- - [更深入的数据结构](#更深入的数据结构)
+ - [增强数据结构](#增强数据结构)
+ - [平衡查找树](#平衡查找树balanced-search-trees)
+ - AVL 树
+ - 伸缩树(Splay tree)
+ - 红黑树
+ - 2-3 查找树
+ - 2-3-4 树(也称 2-4 树)
+ - N-ary (K-ary, M-ary)树
+ - B 树
+ - [k-D 树](#k-D树)
- [跳表](#跳表)
- [网络流](#网络流)
- [不相交集 & 联合查找](#不相交集--联合查找)
- - [快速处理数学](#math-for-fast-processing)
+ - [快速处理的数学](#快速处理的数学)
- [树堆 (Treap)](#树堆-treap)
- [线性规划](#线性规划linear-programming视频)
- [几何:凸包(Geometry, Convex hull)](#几何凸包geometry-convex-hull视频)
- [离散数学](#离散数学)
- [机器学习](#机器学习machine-learning)
- - [Go 语言](#go-语言)
- [一些主题的额外内容](#一些主题的额外内容)
- [视频系列](#视频系列)
- [计算机科学课程](#计算机科学课程)
+- [论文](#论文)
---
## 为何要用到它?
-我一直都是遵循该计划去准备 Google 的面试。自 1997 年以来,我一直从事于 web 程序的构建、服务器的构建及创业型公司的创办。对于只有着一个经济学学位,而不是计算机科学学位(CS degree)的我来说,在职业生涯中所取得的都非常成功。然而,我想在 Google 工作,并进入大型系统中,真正地去理解计算机系统、算法效率、数据结构性能、低级别编程语言及其工作原理。可一项都不了解的我,怎么会被 Google 所应聘呢?
-
-当我创建该项目时,我从一个堆栈到一个堆都不了解。那时的我,完全不了解 Big-O 、树,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的肯定是很糟糕。一直以来,我所用的任何数据结构都是内建于编程语言当中。至于它们在背后是如何运作,对此我一概不清楚。此外,以前的我并不需要对内存进行管理,最多就只是在一个正在执行的进程抛出了“内存不足”的错误后,采取一些权变措施。而在我的编程生活中,也甚少使用到多维数组,可关联数组却成千上万。而且,从一开始到现在,我都还未曾自己实现过数据结构。
+当我开始这个项目时,我不知道堆和栈的区别,不了解时间复杂度(Big-O)、树,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的肯定是很糟糕。一直以来,我所用的任何数据结构都是内建于编程语言当中。至于它们在背后是如何运作,对此我一概不清楚。此外,以前的我并不需要对内存进行管理,最多就只是在一个正在执行的进程抛出了“内存不足”的错误后,才会去找解决方法。在我的编程生涯中,虽然我有用过多维数组,也用过关联数组成千上万次,但我从来没有自己实现过数据结构。
-就是这样的我,在经过该学习计划后,已然对被 Google 所雇佣充满信心。这是一个漫长的计划,以至于花费了我数月的时间。若您早已熟悉大部分的知识,那么也许能节省大量的时间。
+这是一个漫长的计划,以至于花费了我数月的时间。若你早已熟悉大部分的知识,那么也许能节省大量的时间。
## 如何使用它
下面所有的东西都只是一个概述。因此,你需要由上而下逐一地去处理它。
-在学习过程中,我是使用 GitHub 特殊的语法特性 markdown flavor 去检查计划的进展,包括使用任务列表。
+在学习过程中,我使用 GitHub 特殊语法的 markdown 去检查计划的进展,包括使用包含任务进度的任务列表。
-- [x] 创建一个新的分支,以使得你可以像这样去检查计划的进展。直接往方括号中填写一个字符 x 即可:[x]
+**创建一个新的分支,以便你可以像这样去勾选计划的进展:直接往方括号中填写一个字符 x 即可:[x]**。
-[更多关于 Github-flavored markdown 的详情](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
+ Fork一个分支,并跟随以下的指令
-## 我得到了工作吗?
+通过单击 Fork 按钮来 fork GitHub 仓库:[jwasham/coding-interview-university](https://github.com/jwasham/coding-interview-university)
-我还没去应聘。
+ 克隆项目到本地
-因为我离完成学习(完成该疯狂的计划列表)还需要数天的时间,并打算在下周开始用一整天的时间,以编程的方式去解决问题。当然,这将会持续数周的时间。然后,我才通过使用在二月份所得到的一个介绍资格,去正式应聘 Google(没错,是二月份时就得到的)。
+`git checkout -b progress`
- 感谢 JP 的这次介绍。
+`git remote add jwasham https://github.com/jwasham/coding-interview-university`
-## 跟着我的脚步
+`git fetch --all`
-目前我仍在该计划的执行过程中,如果你想跟随我脚步去学习的话,可以登进我在 [GoogleyAsHeck.com](https://googleyasheck.com/) 上所写的博客。
+ 在你完成了一些修改后,在框框中打 x
-下面是我的联系方式:
+`git add .`
-- Twitter: [@googleyasheck](https://twitter.com/googleyasheck)
-- Twitter: [@StartupNextDoor](https://twitter.com/StartupNextDoor)
-- Google+: [+Googleyasheck](https://plus.google.com/+Googleyasheck)
-- LinkedIn: [johnawasham](https://www.linkedin.com/in/johnawasham)
+`git commit -m "Marked x"`
-![John Washam - Coding Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png)
+`git rebase jwasham/main`
-## 不要妄自菲薄
+`git push --set-upstream origin progress`
-- Google 的工程师都是才智过人的。但是,就算是工作在 Google 的他们,仍然会因为觉得自己不够聪明而感到一种不安。
-- [天才程序员的神话](https://www.youtube.com/watch?v=0SARbwvhupQ)
+`git push --force`
+
+[更多关于 Github-flavored markdown 的详情](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
-## 关于 Google
-
-- [ ] 面向学生 —— [Google 的职业生涯:技术开发指导](https://www.google.com/about/careers/students/guide-to-technical-development.html)
-- [ ] Google 检索的原理:
- - [ ] [Google 检索的发展史(视频)](https://www.youtube.com/watch?v=mTBShTwCnD4)
- - [ ] [Google 检索的原理 —— 故事篇](https://www.google.com/insidesearch/howsearchworks/thestory/)
- - [ ] [Google 检索的原理](https://www.google.com/insidesearch/howsearchworks/)
- - [ ] [Google 检索的原理 —— Matt Cutts(视频)](https://www.youtube.com/watch?v=BNHR6IQJGZs)
- - [ ] [Google 是如何改善其检索算法(视频)](https://www.youtube.com/watch?v=J5RZOU6vK4Q)
-- [ ] 系列文章:
- - [ ] [Google 检索是如何处理移动设备](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9)
- - [ ] [Google 为了寻找大众需求的秘密研究](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf)
- - [ ] [Google 检索将成为你的下一个大脑](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523)
- - [ ] [Demis Hassabis 的心灵直白](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a)
-- [ ] [书籍:Google 公司是如何运作的](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344)
-- [ ] [由 Google 通告所制作 —— 2016年10月(视频)](https://www.youtube.com/watch?v=q4y0KOeXViI)
+
+## 不要觉得自己不够聪明
+
+- 大多数成功的软件工程师都非常聪明,但他们都有一种觉得自己不够聪明的不安全感。
+- [天才程序员的神话](https://www.youtube.com/watch?v=0SARbwvhupQ)
+- [不要单打独斗:面对技术中的隐形怪物](https://www.youtube.com/watch?v=1i8ylq4j_EY)
## 相关视频资源
-部分视频只能通过在 Coursera、Edx 或 Lynda.com class 上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。即便是免费观看,部分课程可能会由于不在时间段内而无法获取。因此,你需要多等待几个月。
+部分视频只能通过在 Coursera 或者 Edx 课程上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。有时候某些课程需要等待好几个月才能获取,这期间你无法观看这些课程的影片。
- 很感谢您能帮我把网络公开课程的视频链接转换成公开的视频源,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。
+ 很感谢你能帮我把网络公开课程的视频链接转换成公开的,可持续访问的视频源,比如 YouTube 视频,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。
## 面试过程 & 通用的面试准备
-- [ ] 视频:
- - [ ] [如何在 Google 工作 —— 考生指导课程(视频)](https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be)
- - [ ] [Google 招聘者所分享的技术面试小窍门(视频)](https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be)
- - [ ] [如何在 Google 工作:技术型简历的准备(视频)](https://www.youtube.com/watch?v=8npJLXkcmu8)
-
-- [ ] 文章:
- - [ ] [三步成为 Googler](http://www.google.com/about/careers/lifeatgoogle/hiringprocess/)
- - [ ] [得到在 Google 的工作机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)
- - 所有他所提及的事情都列在了下面
- - [ ] _(早已过期)_ [如何得到 Google 的一份工作,面试题,应聘过程](http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html)
- - [ ] [电话面试的问题](http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions)
-
-- [ ] 附加的(虽然 Google 不建议,但我还是添加在此):
- - [ ] [ABC:永远都要去编程(Always Be Coding)](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
- - [ ] [四步成为 Google 里一名没有学位的员工](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx)
- - [ ] [共享白板(Whiteboarding)](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
- - [ ] [Google 是如何看待应聘、管理和公司文化](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture)
- - [ ] [程序开发面试中有效的白板(Whiteboarding)](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/)
- - [ ] 震撼开发类面试 第一集:
- - [ ] [Gayle L McDowell —— 震撼开发类面试(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
- - [ ] [震撼开发类面试 —— 作者 Gayle Laakmann McDowell(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
- - [ ] 如何在世界四强企业中获得一份工作:
- - [ ] [“如何在世界四强企业中获得一份工作 —— Amazon、Facebook、Google 和 Microsoft”(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
- - [ ] [面试 Google 失败](http://alexbowe.com/failing-at-google-interviews/)
+- [ ] [ABC:不要停止编程(Always Be Coding)](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
+- [ ] [白板编程(Whiteboarding)](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
+- [ ] [揭秘技术招聘](https://www.youtube.com/watch?v=N233T0epWTs)
+- [ ] 如何在科技四强企业中获得一份工作:
+ - [ ] [“如何在科技四强企业中获得一份工作 —— Amazon、Facebook、Google 和 Microsoft”(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
+- [ ] 解密开发类面试第一集:
+ - [ ] [Gayle L McDowell —— 解密开发类面试(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
+ - [ ] [解密开发类面试 —— 作者 Gayle Laakmann McDowell(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
+- [ ] 解密 Facebook 编码面试:
+ - [方法](https://www.youtube.com/watch?v=wCl9kvQGHPI)
+ - [问题演练](https://www.youtube.com/watch?v=4UWDyJq8jZg)
+- [ ] 准备课程:
+ - [ ] [软件工程师面试发布(收费课程)](https://www.udemy.com/software-engineer-interview-unleashed):
+ - 从前 Google 面试官身上学习如何准备自己,让自己能够应付软件工程师的面试。
+ - [ ] [Python 数据结构,算法和面试(收费课程)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/):
+ - Python 面试准备课程,内容涉及数据结构,算法,模拟面试等。
+ - [ ] [Python 的数据结构和算法简介(Udacity 免费课程)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513):
+ - 免费的 Python 数据结构和算法课程。
+ - [ ] [数据结构和算法纳米学位!(Udacity 收费纳米学位)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256):
+ - 获得超过100种数据结构和算法练习以及指导的动手练习,专门导师帮助你在面试和职场中做好准备。
+ - [ ] [探究行为面试(Educative 免费课程)](https://www.educative.io/courses/grokking-the-behavioral-interview):
+ - 很多时候,不是你的技术能力会阻碍你获得理想的工作,而是你在行为面试中的表现。
## 为你的面试选择一种语言
-在这,我就以下话题写一篇短文 —— [重点:为在 Google 的面试选择一种语言](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/)
-
-在大多数公司的面试当中,你可以在编程这一环节,使用一种自己用起来较为舒适的语言去完成编程。但在 Google,你只有三种固定的选择:
+你可以在编程这一环节,使用一种自己用起来较为舒适的语言去完成编程,但对于大公司,你只有三种固定的选择:
- C++
- Java
- Python
-有时你也可以使用下面两种,但需要事先查阅说明。因为,说明中会有警告:
+你也可以使用下面两种编程语言,但可能会有某些限制,你需要实现查明:
- JavaScript
- Ruby
+我之前写过一篇关于在面试时选择编程语言的文章:[为编程面试选择一种语言](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)。
+
你需要对你所选择的语言感到非常舒适且足够了解。
更多关于语言选择的阅读:
- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/
- http://blog.codingforinterviews.com/best-programming-language-jobs/
-- https://www.quora.com/What-is-the-best-language-to-program-in-for-an-in-person-Google-interview
[在此查看相关语言的资源](../programming-language-resources.md)
-由于,我正在学习C、C++ 和 Python。因此,在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。
+由于我正在学习C、C++ 和 Python,因此在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。
+
+## 书单
+
+为了节省你的时间,以下是比我使用过的更缩减的书单。
+
+### 面试准备
+
+- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/)
+ - 附有 C++ 和 Java 解答
+ - 这是在练习 Cracking the Coding Interview 之前一个很好的热身
+ - 不太困难,大多数问题可能比你在面试中看到的要容易(根据我的阅读)
+- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
+ - 附有 Java 答案
+
+### 如果你有额外的时间:
+
+选择以下之一:
+
+- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
+- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/)
+- [ ] Elements of Programming Interviews (Java version)
+ - [书](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
+ - [配套项目──书中每个问题的方法和测试用例](https://github.com/gardncl/elements-of-programming-interviews)
+
+### 编程语言精选
+
+**你需要选择面试语言(请参见上文)。**
+
+这是我按语言给出的建议。我没有所有语言的资源,欢迎贡献。
+
+如果你通读其中之一,你应该具备了开始解决编程问题所需的所有数据结构和算法知识。除非你需要复习,否则**你可以跳过此项目中的所有视频讲座**。
+
+[额外编程语言的精选资源](https://github.com/jwasham/coding-interview-university/blob/main/programming-language-resources.md)
+
+### C++
+
+我没有读过这两本书,但是它们颇受好评,作者是 Sedgewick,他非常厉害。
+
+- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
+- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
+- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf)
+ - 丰富而详细的数据结构和算法集合
+ - 非常适合初学者
+
+如果你有更好的 C++ 书籍,请告诉我。我正在搜集全面的资源。
+
+### Java
+
+- [ ] [算法(Sedgewick 和 Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
+ - 包含课程内容(和Sedgewick!)的视频
+ - [第一部分](https://www.coursera.org/learn/algorithms-part1)
+ - [第二部分](https://www.coursera.org/learn/algorithms-part2)
+
+或者:
+
+- [ ] [Java 数据结构和算法](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
+ - 作者:Goodrich、Tamassia、Goldwasser
+ - 用作 UC Berkeley 的 CS 入门课程的可选教材
+ - 请参阅下面有关 Python 版本的我的读书报告,这本书涵盖了相同的主题
+
+### Python
+
+- [ ] [Python数据结构和算法](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
+ - 作者:Goodrich、Tamassia、Goldwasser
+ - 我非常喜爱这本书,它包含了所有东西
+ - 很 Python 的代码
+ - 我的读书报告:[startupnextdoor.com/book-report-data-structures-and-algorithms-in-python](https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/)
+- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf)
## 在你开始之前
该列表已经持续更新了很长的一段时间,所以,我们的确很容易会对其失去控制。
-这里列出了一些我所犯过的错误,希望您不要重滔覆辙。
+这里列出了一些我所犯过的错误,希望你不要重滔覆辙。
### 1. 你不可能把所有的东西都记住
-就算我查看了数小时的视频,并记录了大量的笔记。几个月后的我,仍然会忘却其中大部分的东西。所以,我翻阅了我的笔记,并将可回顾的东西制作成抽认卡(flashcard)(请往下看)
+就算我观看了数小时的视频,并记录了大量的笔记,几个月后的我,仍然会忘却其中大部分的东西。所以,我花了3天翻阅我的笔记,并制作成抽认卡(flashcard)帮助我复习:
+
+请阅读以下的文章以免重蹈覆辙:
+
+[记住计算机科学知识](https://startupnextdoor.com/retaining-computer-science-knowledge/)。
+
+有人推荐给我的课程(但我还沒看过):[学习如何学习](https://www.coursera.org/learn/learning-how-to-learn)。
### 2. 使用抽认卡
-为了解决善忘的问题,我制作了一些关于抽认卡的页面,用于添加两种抽认卡:正常的及带有代码的。每种卡都会有不同的格式设计。
+为了解决善忘的问题,我制作了一个抽认卡的网页,用于添加两种抽认卡:一般的及带有代码的。每种卡都会有不同的格式设计。
-而且,我还以移动设备为先去设计这些网页,以使得在任何地方的我,都能通过我的手机及平板去回顾知识。
+而且,我还以移动设备为先去设计这些网页,以使得在任何地方,我都能通过我的手机及平板去回顾知识。
你也可以免费制作属于你自己的抽认卡网站:
- [抽认卡页面的代码仓库](https://github.com/jwasham/computer-science-flash-cards)
-- [我的抽认卡数据库](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):有一点需要记住的是,我做事有点过头,以至于把卡片都覆盖到所有的东西上。从汇编语言和 Python 的细枝末节,乃至到机器学习和统计都被覆盖到卡片上。而这种做法,对于 Google 的要求来说,却是多余。
+- [我的抽认卡数据库 ── 旧 1200 张](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db)
+- [我的抽认卡数据库 ── 新 1800 张](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db)
+
+有一点需要记住的是,我做事有点过头,以至于卡片都覆盖到所有的东西上,从汇编语言和 Python 的细枝末节,到机器学习和统计都被覆盖到卡片上。而这种做法,对于要求来说是多余的。
+
+**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已知”。反复复习这张抽认卡,直到每次都能答对后才是真正学会了这个问题。反复地问答可帮助你深刻记住该知识点。
+
+这里有个替代我抽认卡的网站 [Anki](http://ankisrs.net/),很多人向我推荐过它。这个网站用同一个字卡重复出现的方式让你牢牢地记住知识。这个网站非常容易使用,支持多平台,并且有云端同步功能。在 iOS 平台上收费25美金,其他平台免费。
-**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已懂”。你需要做的,是去查看一下是否有同样的抽认卡,并在你真正懂得如何解决问题之前,多问自己几次。重复地问答可帮助您深刻记住该知识点。
+这是我用 Anki 这个网站里的格式所储存的抽认卡资料库: ankiweb.net/shared/info/25173560 (感谢 [@xiewenya](https://github.com/xiewenya))
-### 3. 回顾,回顾,回顾
+### 3. 复习,复习,再复习
-我留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的小抄纸,以便在空余的时候可以学习。
+我留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的抽认卡,以便在空余的时候可以学习。
-每编程半个小时就要休息一下,并去回顾你的抽认卡。
+编程累了就休息半个小时,并去复习你的抽认卡。
### 4. 专注
-在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。因此,专注和集中注意力是非常困难的。
+在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。因此,专注和集中注意力是非常困难的。放点纯音乐能帮上一些忙。
-## 你所看不到的
+## 没有包含的内容
-由于,这个巨大的列表一开始是作为我个人从 Google 面试指导笔记所形成的一个事件处理列表。因此,有一些我熟悉且普遍的技术在此都未被谈及到:
+有一些熟悉且普遍的技术在此未被谈及到:
- SQL
- Javascript
@@ -277,28 +367,31 @@
## 日常计划
-部分问题可能会花费一天的时间去学习,而部分则会花费多天。当然,有些学习并不需要我们懂得如何实现。
+部分问题可能会花费一天的时间去学习,而有些则会花费多天。当然,有些学习并不需要我们懂得如何实现。
-因此,每一天我都会在下面所列出的列表中选择一项,并查看相关的视频。然后,使用以下的一种语言去实现:
+因此,每一天我都会在下面所列出的列表中选择一项,并观看相关的视频。然后,使用以下的一种语言去实现:
- C —— 使用结构体和函数,该函数会接受一个结构体指针 * 及其他数据作为参数。
- C++ —— 不使用内建的数据类型。
- C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来作为链表。
- Python —— 使用内建的数据类型(为了持续练习 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。
- 此外,你也可以使用 Java 或其他语言。以上只是我的个人偏好而已。
+- C —— 使用结构体和函数,该函数会接受一个结构体指针 * 及其他数据作为参数。
+- C++ —— 不使用内建的数据类型。
+- C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来作为链表。
+- Python —— 使用内建的数据类型(为了持续练习 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。
+- 此外,你也可以使用 Java 或其他语言。以上只是我的个人偏好而已。
+
+你不需要学会所有的编程语言,你只需要专注在[一种编程语言](##为你的面试选择一种语言)上。
为何要在这些语言上分别实现一次?
- 因为可以练习,练习,练习,直至我厌倦它,并完美地实现出来。(若有部分边缘条件没想到时,我会用书写的形式记录下来并去记忆)
- 因为可以在纯原生的条件下工作(不需垃圾回收机制的帮助下,分配/释放内存(除了 Python))
- 因为可以利用上内建的数据类型,以使得我拥有在现实中使用内建工具的经验(在生产环境中,我不会去实现自己的链表)
+- 练习,练习,练习,直至我厌倦它,并正确无误地实现出来。(若有部分边缘条件没想到时,我会用书写的形式记录下来并去记忆)
+- 在纯原生的条件下工作(不需垃圾回收机制的帮助下,手动分配/释放内存(除了 Python))
+- 利用语言内建的数据类型,之后在实际工作的时候才能得心应手(在生产环境中,我不会去实现自己的链表)
+
+就算我没有时间去每一项都这么做,但我也会尽我所能。
-就算我没有时间去每一项都这么做,但我也会尽我所能的。
+在这里你可以查看到我的代码:
-在这里,你可以查看到我的代码:
- - [C](https://github.com/jwasham/practice-c)
- - [C++](https://github.com/jwasham/practice-cpp)
- - [Python](https://github.com/jwasham/practice-python)
+- [C](https://github.com/jwasham/practice-c)
+- [C++](https://github.com/jwasham/practice-cpp)
+- [Python](https://github.com/jwasham/practice-python)
你不需要记住每一个算法的内部原理。
@@ -306,22 +399,24 @@
## 必备知识
-- [ ] **计算机是如何处理一段程序:**
- - [ ] [CPU 是如何执行代码(视频)](https://www.youtube.com/watch?v=42KTvGYQYnA)
- - [ ] [机器码指令(视频)](https://www.youtube.com/watch?v=Mv2XQgpbTNE)
-
-- [ ] **编译器**
- - [ ] [编译器是如何在 ~1 分钟内工作(视频)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
- - [ ] [Hardvard CS50 —— 编译器(视频)](https://www.youtube.com/watch?v=CSZLNYF4Klo)
- - [ ] [C++(视频)](https://www.youtube.com/watch?v=twodd1KFfGk)
- - [ ] [掌握编译器的优化(C++)(视频)](https://www.youtube.com/watch?v=FnGCDLhaxKU)
+- [ ] **学习C语言**
+ - C 语言无处不在。在学习的过程中,你会在书籍,讲座,视频等任何地方看到它的身影
+ - [ ] [C程序设计语言,第二版](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
+ - 这是一本简短的书,但是它将使你更好地使用 C 语言,并且如果你稍加练习,就会很快熟练。理解 C 可帮助你了解程序和内存的工作方式
+ - 问题答案
-- [ ] **浮点数是如何存储的:**
- - [ ] 简单的 8-bit:[浮点数的表达形式 —— 1(视频 —— 在计算上有一个错误 —— 详情请查看视频的介绍)](https://www.youtube.com/watch?v=ji3SfClm8TU)
- - [ ] 32 bit:[IEEE754 32-bit 浮点二进制(视频)](https://www.youtube.com/watch?v=50ZYcZebIec)
+- [ ] **计算机是如何处理一段程序:**
+ - [ ] [CPU 是如何执行代码(视频)](https://www.youtube.com/watch?v=XM4lGflQFvA)
+ - [ ] [计算机如何计算(视频)](https://youtu.be/1I5ZMmrOfnA)
+ - [ ] [寄存器和内存(视频)](https://youtu.be/fpnE6UAfbtU)
+ - [ ] [中央处理单元(视频)](https://youtu.be/FZGugFqdr60)
+ - [ ] [指令和程序(视频)](https://youtu.be/zltgXvg6r3k)
## 算法复杂度 / Big-O / 渐进分析法
+
- 并不需要实现
+- 这里有很多视频,看到你真正了解它为止。你随时可以回来复习。
+- 如果这些课程太过数学的话,你可以去看看最下面离散数学的视频,它能让你更了解这些数学背后的来源以及原理。
- [ ] [Harvard CS50 —— 渐进表示(视频)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
- [ ] [Big O 记号(通用快速教程)(视频)](https://www.youtube.com/watch?v=V6mKVRU1evU)
- [ ] [Big O 记号(以及 Omega 和 Theta)—— 最佳数学解释(视频)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
@@ -335,22 +430,22 @@
- [ ] [UC Berkeley Big Omega(视频)](https://youtu.be/ca3e7UVmeUc)
- [ ] [平摊分析法(Amortized Analysis)(视频)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
- [ ] [举证“Big O”(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/63)
-- [ ] 高级编程(包括递归关系和主定理):
+- [ ] TopCoder(包括递归关系和主定理):
- [计算性复杂度:第一部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/)
- [计算性复杂度:第二部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/)
- [ ] [速查表(Cheat sheet)](http://bigocheatsheet.com/)
- 如果部分课程过于学术性,你可直接跳到文章底部,去查看离散数学的视频以获取相关背景知识。
-
## 数据结构
- ### 数组(Arrays)
- 实现一个可自动调整大小的动态数组。
- [ ] 介绍:
- [数组(视频)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays)
+ - [UC Berkeley CS61B - 线性数组和多维数组(视频)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE)(从15分32秒开始)
- [数组的基础知识(视频)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4)
- [多维数组(视频)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4)
- [动态数组(视频)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays)
+ - [不规则数组(视频)](https://www.youtube.com/watch?v=1jtrQqYpt7g)
- [不规则数组(视频)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4)
- [调整数组的大小(视频)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4)
- [ ] 实现一个动态数组(可自动调整大小的可变数组):
@@ -382,12 +477,12 @@
- ### 链表(Linked Lists)
- [ ] 介绍:
- [ ] [单向链表(视频)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists)
- - [ ] [CS 61B —— 链表(视频)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5)
- - [ ] [C 代码(视频)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
- - 并非看完整个视频,只需要看关于节点结果和内存分配那一部分即可
+ - [ ] [CS 61B —— 链表(一)(视频)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0)
+ - [ ] [CS 61B —— 链表(二)(视频)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w)
+ - [ ] [C 代码(视频)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) ── 并非看完整个视频,只需要看关于节点结构和内存分配那一部分即可
- [ ] 链表 vs 数组:
- - [基本链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays)
- - [在现实中,链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays)
+ - [基本链表 Vs 数组(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9)
+ - [在现实中,链表 Vs 数组(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd)
- [ ] [为什么你需要避免使用链表(视频)](https://www.youtube.com/watch?v=YQs6IC-vgmo)
- [ ] 的确:你需要关于“指向指针的指针”的相关知识:(因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址)该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格。因为,这种风格的代码,其可读性和可维护性太低。
- [指向指针的指针](https://www.eskimo.com/~scs/cclass/int/sx8.html)
@@ -445,9 +540,9 @@
- [ ] [(进阶)完美哈希(Perfect hashing)(视频)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4)
- [ ] 在线课程:
- - [ ] [哈希函数的掌握(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4)
+ - [ ] [理解哈希函数(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4)
- [ ] [使用哈希表(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4)
- - [ ] [哈希表的支持(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4)
+ - [ ] [支持哈希(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4)
- [ ] [哈希表的语言支持(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4)
- [ ] [基本哈希表(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables)
- [ ] [数据结构(视频)](https://www.coursera.org/learn/data-structures/home/week/3)
@@ -474,8 +569,7 @@
- 迭代式二分查找
- ### 按位运算(Bitwise operations)
- - [ ] [Bits 速查表](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf)
- - 你需要知道大量2的幂数值(从2^1 到 2^16 及 2^32)
+ - [ ] [Bits 速查表](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) ── 你需要知道大量2的幂数值(从2^1 到 2^16 及 2^32)
- [ ] 好好理解位操作符的含义:&、|、^、~、>>、<<
- [ ] [字码(words)](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] 好的介绍:
@@ -486,6 +580,8 @@
- [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html)
- [ ] [位元抚弄者(The Bit Twiddler)](http://bits.stephan-brumme.com/)
- [ ] [交互式位元抚弄者(The Bit Twiddler Interactive)](http://bits.stephan-brumme.com/interactive.html)
+ - [ ] [位操作技巧(Bit Hacks)(视频)](https://www.youtube.com/watch?v=ZusiKXcz_ac)
+ - [ ] [练习位操作](https://pconrad.github.io/old_pconrad_cs16/topics/bitOps/)
- [ ] 一补数和补码
- [二进制:利 & 弊(为什么我们要使用补码)(视频)](https://www.youtube.com/watch?v=lKTsv6iVxV4)
- [一补数(1s Complement)](https://en.wikipedia.org/wiki/Ones%27_complement)
@@ -494,8 +590,6 @@
- [计算一个字节中置位(Set Bits)的四种方式(视频)](https://youtu.be/Hzuzo9NJrlc)
- [计算比特位](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan)
- [如何在一个 32 位的整型中计算置位(Set Bits)的数量](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer)
- - [ ] 四舍五入2的幂数:
- - [四舍五入到2的下一幂数](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html)
- [ ] 交换值:
- [交换(Swap)](http://bits.stephan-brumme.com/swap.html)
- [ ] 绝对值:
@@ -504,28 +598,25 @@
## 树(Trees)
- ### 树 —— 笔记 & 背景
- - [ ] [系列:基本树(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [系列:树(视频)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- 基本的树形结构
- 遍历
- 操作算法
- - BFS(广度优先检索,breadth-first search)
- - [MIT(视频)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13)
- - 层序遍历(使用队列的 BFS 算法)
+ - [ ] [BFS(广度优先检索,breadth-first search)和 DFS(深度优先检索,depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM)
+ - BFS 笔记
+ - 层序遍历(使用队列的 BFS 算法)
- 时间复杂度: O(n)
- 空间复杂度:
- - 最好情况: O(1)
+ - 最好情况:O(1)
- 最坏情况:O(n/2)=O(n)
- - DFS(深度优先检索,depth-first search)
- - [MIT(视频)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14)
- - 笔记:
+ - DFS 笔记:
- 时间复杂度:O(n)
- 空间复杂度:
- 最好情况:O(log n) - 树的平均高度
- 最坏情况:O(n)
- - 中序遍历(DFS:左、节点本身、右)
- - 后序遍历(DFS:左、右、节点本身)
- - 先序遍历(DFS:节点本身、左、右)
+ - 中序遍历(DFS:左、节点本身、右)
+ - 后序遍历(DFS:左、右、节点本身)
+ - 先序遍历(DFS:节点本身、左、右)
- ### 二叉查找树(Binary search trees):BSTs
- [ ] [二叉查找树概览(视频)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
@@ -561,7 +652,7 @@
- 可视化是一棵树,但通常是以线性的形式存储(数组、链表)
- [ ] [堆](https://en.wikipedia.org/wiki/Heap_(data_structure))
- [ ] [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction)
- - [ ] [无知的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations)
+ - [ ] [简单的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations)
- [ ] [二叉树(视频)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees)
- [ ] [关于树高的讨论(视频)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark)
- [ ] [基本操作(视频)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations)
@@ -583,91 +674,16 @@
- [ ] sift_down —— 用于获取最大值元素
- [ ] remove(i) —— 删除指定索引的元素
- [ ] heapify —— 构建堆,用于堆排序
- - [ ] heap_sort() —— 拿到一个未排序的数组,然后使用大顶堆进行就地排序
- - 注意:若用小顶堆可节省操作,但导致空间复杂度加倍。(无法做到就地)
-
-- ### 字典树(Tries)
- - 需要注意的是,字典树各式各样。有些有前缀,而有些则没有。有些使用字符串而不使用比特位来追踪路径。
- - 阅读代码,但不实现。
- - [ ] [数据结构笔记及编程技术](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries)
- - [ ] 短课程视频:
- - [ ] [对字典树的介绍(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries)
- - [ ] [字典树的性能(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries)
- - [ ] [实现一棵字典树(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie)
- - [ ] [字典树:一个被忽略的数据结构](https://www.toptal.com/java/the-trie-a-neglected-data-structure)
- - [ ] [高级编程 —— 使用字典树](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/)
- - [ ] [标准教程(现实中的用例)(视频)](https://www.youtube.com/watch?v=TJ8SkcUSdbU)
- - [ ] [MIT,高阶数据结构,使用字符串追踪路径(可事半功倍)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
-
-- ### 平衡查找树(Balanced search trees)
- - 掌握至少一种平衡查找树(并懂得如何实现):
- - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的 key。” —— Skiena
- - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在 Google 的面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。
- - 伸展树:插入、查找、删除函数的实现,而如果你最终实现了红黑树,那么请尝试一下:
- - 跳过删除函数,直接实现搜索和插入功能
- - 我希望能阅读到更多关于 B 树的资料,因为它也被广泛地应用到大型的数据库当中。
- - [ ] [自平衡二叉查找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
-
- - [ ] **AVL 树**
- - 实际中:我能告诉你的是,该种树并无太多的用途,但我能看到有用的地方在哪里:AVL 树是另一种平衡查找树结构。其可支持时间复杂度为 O(log n) 的查询、插入及删除。它比红黑树严格意义上更为平衡,从而导致插入和删除更慢,但遍历却更快。正因如此,才彰显其结构的魅力。只需要构建一次,就可以在不重新构造的情况下读取,适合于实现诸如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。
- - [ ] [MIT AVL 树 / AVL 树的排序(视频)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
- - [ ] [AVL 树(视频)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
- - [ ] [AVL 树的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
- - [ ] [分离与合并](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
-
- - [ ] **伸展树**
- - 实际中:伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes(字符串的一种替代品,用于存储长串的文本字符)、Windows NT(虚拟内存、网络及文件系统)等的实现。
- - [ ] [CS 61B:伸展树(Splay trees)(视频)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
- - [ ] MIT 教程:伸展树(Splay trees):
- - 该教程会过于学术,但请观看到最后的10分钟以确保掌握。
- - [视频](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
-
- - [ ] **2-3查找树**
- - 实际中:2-3树的元素插入非常快速,但却有着查询慢的代价(因为相比较 AVL 树来说,其高度更高)。
- - 你会很少用到2-3树。这是因为,其实现过程中涉及到不同类型的节点。因此,人们更多地会选择红黑树。
- - [ ] [2-3树的直感与定义(视频)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
- - [ ] [2-3树的二元观点](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [2-3树(学生叙述)(视频)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
-
- - [ ] **2-3-4树 (亦称2-4树)**
- - 实际中:对于每一棵2-4树,都有着对应的红黑树来存储同样顺序的数据元素。在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。这就是为什么许多算法引导文章都会在介绍红黑树之前,先介绍2-4树,尽管**2-4树在实际中并不经常使用**。
- - [ ] [CS 61B Lecture 26:平衡查找树(视频)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C)
- - [ ] [自底向上的2-4树(视频)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [自顶向下的2-4树(视频)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
-
- - [ ] **B 树**
- - 有趣的是:为啥叫 B 仍然是一个神秘。因为 B 可代表波音(Boeing)、平衡(Balanced)或 Bayer(联合创造者)
- - 实际中:B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中,B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。
- - [ ] [B 树](https://en.wikipedia.org/wiki/B-tree)
- - [ ] [B 树的介绍(视频)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
- - [ ] [B 树的定义及其插入操作(视频)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [B 树的删除操作(视频)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [MIT 6.851 —— 内存层次模块(Memory Hierarchy Models)(视频)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
- - 覆盖有高速缓存参数无关型(cache-oblivious)B 树和非常有趣的数据结构
- - 头37分钟讲述的很专业,或许可以跳过(B 指块的大小、即缓存行的大小)
-
- - [ ] **红黑树**
- - 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用,还对在其他数据结构中块的构建非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 系统所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。在 Java 8中,红黑树也被用于存储哈希列表集合中相同的数据,而不是使用链表及哈希码。
- - [ ] [Aduni —— 算法 —— 课程4(该链接直接跳到开始部分)(视频)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
- - [ ] [Aduni —— 算法 —— 课程5(视频)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
- - [ ] [黑树(Black Tree)](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
- - [ ] [二分查找及红黑树的介绍](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red-black-trees/)
-
-- ### N 叉树(K 叉树、M 叉树)
- - 注意:N 或 K 指的是分支系数(即树的最大分支数):
- - 二叉树是一种分支系数为2的树
- - 2-3树是一种分支系数为3的树
- - [ ] [K 叉树](https://en.wikipedia.org/wiki/K-ary_tree)
+ - [ ] heap_sort() —— 拿到一个未排序的数组,然后使用大顶堆或者小顶堆进行就地排序
## 排序(Sorting)
- [ ] 笔记:
- - 实现各种排序 & 知道每种排序的最坏、最好和平均的复杂度分别是什么场景:
- - 不要用冒泡排序 - 大多数情况下效率感人 - 时间复杂度 O(n^2), 除非 n <= 16
+ - 实现各种排序,知道每种排序的最坏、最好和平均的复杂度分别是什么场景:
+ - 不要用冒泡排序 - 效率太差 - 时间复杂度 O(n^2), 除非 n <= 16
- [ ] 排序算法的稳定性 ("快排是稳定的么?")
- [排序算法的稳定性](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability)
- [排序算法的稳定性](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms)
- - [排序算法的稳定性](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms)
- [排序算法的稳定性](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/)
- [排序算法 - 稳定性](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf)
- [ ] 哪种排序算法可以用链表?哪种用数组?哪种两者都可?
@@ -675,41 +691,33 @@
- [链表的归并排序](http://www.geeksforgeeks.org/merge-sort-for-linked-list/)
- 关于堆排序,请查看前文堆的数据结构部分。堆排序很强大,不过是非稳定排序。
-
-- [ ] [冒泡排序 (video)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB)
-- [ ] [冒泡排序分析 (video)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB)
-- [ ] [插入排序 & 归并排序 (video)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
-- [ ] [插入排序 (video)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB)
-- [ ] [归并排序 (video)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB)
-- [ ] [快排 (video)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB)
-- [ ] [选择排序 (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB)
-
-- [ ] 斯坦福大学关于排序算法的视频:
- - [ ] [课程 15 | 编程抽象 (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69)
- - [ ] [课程 16 | 编程抽象 (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69)
-
-- [ ] Shai Simonson 视频, [Aduni.org](http://www.aduni.org/):
- - [ ] [算法 - 排序 - 第二讲 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2)
- - [ ] [算法 - 排序2 - 第三讲 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3)
-
-- [ ] Steven Skiena 关于排序的视频:
- - [ ] [课程从 26:46 开始 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600)
- - [ ] [课程从 27:40 开始 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [课程从 35:00 开始 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [课程从 23:50 开始 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
-
-- [ ] 加州大学伯克利分校(UC Berkeley) 大学课程:
- - [ ] [CS 61B 课程 29: 排序 I (video)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29)
- - [ ] [CS 61B 课程 30: 排序 II (video)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30)
- - [ ] [CS 61B 课程 32: 排序 III (video)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C)
- - [ ] [CS 61B 课程 33: 排序 V (video)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C)
-
-- [ ] - 归并排序:
- - [ ] [使用外部数组](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c)
- - [ ] [对原数组直接排序](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc)
-- [ ] - 快速排序:
- - [ ] [实现](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c)
- - [ ] [实现](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c)
+- [ ] [Sedgewick ── 归并排序(5个视频)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
+ - [ ] 1. 归并排序
+ - [ ] 2. 自下而上的归并排序
+ - [ ] 3. 排序复杂度
+ - [ ] 4. 比较器
+ - [ ] 5. 稳定性
+- [ ] [Sedgewick ── 快速排序(4个视频)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
+ - [ ] 1. 快速排序
+ - [ ] 2. 选择
+ - [ ] 3. 重复键值
+ - [ ] 4. 系统排序
+- [ ] [冒泡排序(视频)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB)
+- [ ] [冒泡排序分析(视频)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB)
+- [ ] [插入排序 & 归并排序(视频)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+- [ ] [插入排序(视频)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB)
+- [ ] [归并排序(视频)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB)
+- [ ] [快排(视频)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB)
+- [ ] [选择排序(视频)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB)
+
+- [ ] 归并排序代码:
+ - [ ] [使用外部数组(C语言)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c)
+ - [ ] [使用外部数组(Python语言)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py)
+ - [ ] [对原数组直接排序(C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc)
+- [ ] 快速排序代码:
+ - [ ] [实现(C语言)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c)
+ - [ ] [实现(C语言)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c)
+ - [ ] [实现(Python语言)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py)
- [ ] 实现:
- [ ] 归并:平均和最差情况的时间复杂度为 O(n log n)。
@@ -717,58 +725,65 @@
- 选择排序和插入排序的最坏、平均时间复杂度都是 O(n^2)。
- 关于堆排序,请查看前文堆的数据结构部分。
-- [ ] 有兴趣的话,还有一些补充 - 但并不是必须的:
+- [ ] 有兴趣的话,还有一些补充,但并不是必须的:
+ - [Sedgewick──基数排序 (6个视频)](https://www.coursera.org/learn/algorithms-part2/home/week/3)
+ - [ ] [1. Java 中的字符串](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java)
+ - [ ] [2. 键值索引计数(Key Indexed Counting)](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting)
+ - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort)
+ - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort)
+ - [ ] [5. 3中基数快速排序](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort)
+ - [ ] [6. 后继数组(Suffix Arrays)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
- [ ] [基数排序](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort)
- - [ ] [基数排序 (video)](https://www.youtube.com/watch?v=xhr26ia4k38)
- - [ ] [基数排序, 计数排序 (线性时间内) (video)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [随机算法: 矩阵相乘, 快排, Freivalds' 算法 (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [线性时间内的排序 (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14)
+ - [ ] [基数排序(视频)](https://www.youtube.com/watch?v=xhr26ia4k38)
+ - [ ] [基数排序, 计数排序 (线性时间内)(视频)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [随机算法: 矩阵相乘, 快排, Freivalds' 算法(视频)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [线性时间内的排序(视频)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14)
+
+总结一下,这是[15种排序算法](https://www.youtube.com/watch?v=kPRA0W1kECg)的可视化表示。如果你需要有关此主题的更多详细信息,请参阅“[一些主题的额外内容](#一些主题的额外内容)”中的“排序”部分。
## 图(Graphs)
图论能解决计算机科学里的很多问题,所以这一节会比较长,像树和排序的部分一样。
-- Yegge 的笔记:
- - 有 3 种基本方式在内存里表示一个图:
+- 笔记:
+ - 有4种基本方式在内存里表示一个图:
- 对象和指针
- - 矩阵
+ - 邻接矩阵
- 邻接表
+ - 邻接图
- 熟悉以上每一种图的表示法,并了解各自的优缺点
- - 宽度优先搜索和深度优先搜索 - 知道它们的计算复杂度和设计上的权衡以及如何用代码实现它们
+ - 广度优先搜索和深度优先搜索:知道它们的计算复杂度和设计上的权衡以及如何用代码实现它们
- 遇到一个问题时,首先尝试基于图的解决方案,如果没有再去尝试其他的。
+- MIT(视频):
+ - [广度优先搜索](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13)
+ - [深度优先搜索](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14)
+
- [ ] Skiena 教授的课程 - 很不错的介绍:
- - [ ] [CSE373 2012 - 课程 11 - 图的数据结构 (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
- - [ ] [CSE373 2012 - 课程 12 - 广度优先搜索 (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
- - [ ] [CSE373 2012 - 课程 13 - 图的算法 (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13)
- - [ ] [CSE373 2012 - 课程 14 - 图的算法 (1) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [CSE373 2012 - 课程 15 - 图的算法 (2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [CSE373 2012 - 课程 16 - 图的算法 (3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - 课程 11 - 图的数据结构(视频)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
+ - [ ] [CSE373 2012 - 课程 12 - 广度优先搜索(视频)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
+ - [ ] [CSE373 2012 - 课程 13 - 图的算法(视频)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13)
+ - [ ] [CSE373 2012 - 课程 14 - 图的算法 (1)(视频)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - 课程 15 - 图的算法 (2)(视频)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - 课程 16 - 图的算法 (3)(视频)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- [ ] 图 (复习和其他):
- - [ ] [6.006 单源最短路径问题 (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [6.006 Dijkstra 算法 (video)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [6.006 Bellman-Ford 算法(video)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17)
- - [ ] [6.006 Dijkstra 效率优化 (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
- - [ ] [Aduni: 图的算法 I - 拓扑排序, 最小生成树, Prim 算法 - 第六课 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- - [ ] [Aduni: 图的算法 II - 深度优先搜索, 广度优先搜索, Kruskal 算法, 并查集数据结构 - 第七课 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
- - [ ] [Aduni: 图的算法 III: 最短路径 - 第八课 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
- - [ ] [Aduni: 图的算法. IV: 几何算法介绍 - 第九课 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
- - [ ] [CS 61B 2014 (从 58:09 开始) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)
- - [ ] [CS 61B 2014: 加权图 (video)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19)
- - [ ] [贪心算法: 最小生成树 (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [图的算法之强连通分量 Kosaraju 算法 (video)](https://www.youtube.com/watch?v=RpgcYiky7uw)
+ - [ ] [6.006 单源最短路径问题(视频)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.006 Dijkstra 算法(视频)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.006 Bellman-Ford 算法(视频)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17)
+ - [ ] [6.006 Dijkstra 效率优化(视频)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
+ - [ ] [Aduni: 图的算法 I - 拓扑排序,最小生成树,Prim 算法 - 第六课(视频)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Aduni: 图的算法 II - 深度优先搜索, 广度优先搜索, Kruskal 算法, 并查集数据结构 - 第七课(视频)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
+ - [ ] [Aduni: 图的算法 III: 最短路径 - 第八课(视频)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
+ - [ ] [Aduni: 图的算法. IV: 几何算法介绍 - 第九课(视频)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
+ - [ ] [CS 61B 2014 (从 58:09 开始)(视频)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)
+ - [ ] [CS 61B 2014: 加权图(视频)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19)
+ - [ ] [贪心算法: 最小生成树(视频)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [图的算法之强连通分量 Kosaraju 算法(视频)](https://www.youtube.com/watch?v=RpgcYiky7uw)
- 完整的 Coursera 课程:
- - [ ] [图的算法 (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
-
-- Yegge: 如果有机会,可以试试研究更酷炫的算法:
- - [ ] Dijkstra 算法 - 上文 - 6.006
- - [ ] A* 算法
- - [ ] [A* 算法](https://en.wikipedia.org/wiki/A*_search_algorithm)
- - [ ] [A* 寻路教程 (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
- - [ ] [A* 寻路 (E01: 算法解释) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
+ - [ ] [图的算法(视频)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
- 我会实现:
- [ ] DFS 邻接表 (递归)
@@ -792,86 +807,116 @@
- ### 递归(Recursion)
- [ ] Stanford 大学关于递归 & 回溯的课程:
- - [ ] [课程 8 | 抽象编程 (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
- - [ ] [课程 9 | 抽象编程 (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
- - [ ] [课程 10 | 抽象编程 (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
- - [ ] [课程 11 | 抽象编程 (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
+ - [ ] [课程 8 | 抽象编程(视频)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
+ - [ ] [课程 9 | 抽象编程(视频)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
+ - [ ] [课程 10 | 抽象编程(视频)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
+ - [ ] [课程 11 | 抽象编程(视频)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
- 什么时候适合使用
- 尾递归会更好么?
- [ ] [什么是尾递归以及为什么它如此糟糕?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
- - [ ] [尾递归 (video)](https://www.youtube.com/watch?v=L1jjXGfxozc)
+ - [ ] [尾递归(视频)](https://www.youtube.com/watch?v=L1jjXGfxozc)
- ### 动态规划(Dynamic Programming)
- - **注意** :动态规划是门极为重要的技术,尽管其并未被 Google 提供的准备手册提及,但你可能会对寻求最佳解的方式有点疑问,所以我将其列入这份表单。
+ - 在你的面试中或许没有任何动态规划的问题,但能够知道一个题目可以使用动态规划来解决是很重要的。
- 这一部分会有点困难,每个可以用动态规划解决的问题都必须先定义出递推关系,要推导出来可能会有点棘手。
- 我建议先阅读和学习足够多的动态规划的例子,以便对解决 DP 问题的一般模式有个扎实的理解。
-
- [ ] 视频:
- Skiena 的视频可能会有点难跟上,有时候他用白板写的字会比较小,难看清楚。
- - [ ] [Skiena: CSE373 2012 - 课程 19 - 动态规划介绍 (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718)
- - [ ] [Skiena: CSE373 2012 - 课程 20 - 编辑距离 (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749)
- - [ ] [Skiena: CSE373 2012 - 课程 21 - 动态规划举例 (video)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406)
- - [ ] [Skiena: CSE373 2012 - 课程 22 - 动态规划应用 (video)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22)
- - [ ] [Simonson: 动态规划 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558)
- - [ ] [Simonson: 动态规划 I - 课程 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- - [ ] [Simonson: 动态规划 II - 课程 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12)
- - [ ] 单独的 DP 问题 (每一个视频都很短):
- [动态规划 (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
- - [ ] Yale 课程笔记:
+ - [ ] [Skiena: CSE373 2012 - 课程 19 - 动态规划介绍(视频)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718)
+ - [ ] [Skiena: CSE373 2012 - 课程 20 - 编辑距离(视频)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749)
+ - [ ] [Skiena: CSE373 2012 - 课程 21 - 动态规划举例(视频)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406)
+ - [ ] [Skiena: CSE373 2012 - 课程 22 - 动态规划应用(视频)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22)
+ - [ ] [Simonson: 动态规划 0 (starts at 59:18)(视频)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558)
+ - [ ] [Simonson: 动态规划 I - 课程 11(视频)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Simonson: 动态规划 II - 课程 12(视频)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12)
+ - [ ] 单独的 DP 问题 (每一个视频都很短):[动态规划(视频)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+ - [ ] 耶鲁课程笔记:
- [ ] [动态规划](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming)
- [ ] Coursera 课程:
- - [ ] [RNA 二级结构问题 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem)
- - [ ] [动态规划算法 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm)
- - [ ] [DP 算法描述 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm)
- - [ ] [DP 算法的运行时间 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm)
- - [ ] [DP vs 递归实现 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation)
- - [ ] [全局成对序列排列 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
- - [ ] [本地成对序列排列 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
+ - [ ] [RNA 二级结构问题(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem)
+ - [ ] [动态规划算法(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm)
+ - [ ] [DP 算法描述(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm)
+ - [ ] [DP 算法的运行时间(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm)
+ - [ ] [DP vs 递归实现(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation)
+ - [ ] [全局成对序列排列(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
+ - [ ] [本地成对序列排列(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
+
+- ### 面向对象编程
+ - 可选:[UML 2.0系列(视频)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
+ - SOLID 面向对象编程原则:[SOLID 原则(视频)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
+
+- ### 设计模式
+ - [ ] [UML 统一建模语言概览 (视频)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
+ - [ ] 主要有如下的设计模式:
+ - [ ] 策略模式(strategy)
+ - [ ] 单例模式(singleton)
+ - [ ] 适配器模式(adapter)
+ - [ ] 原型模式(prototype)
+ - [ ] 装饰器模式(decorator)
+ - [ ] 访问者模式(visitor)
+ - [ ] 工厂模式,抽象工厂模式(factory, abstract factory)
+ - [ ] 外观模式(facade)
+ - [ ] 观察者模式(observer)
+ - [ ] 代理模式(proxy)
+ - [ ] 委托模式(delegate)
+ - [ ] 命令模式(command)
+ - [ ] 状态模式(state)
+ - [ ] 备忘录模式(memento)
+ - [ ] 迭代器模式(iterator)
+ - [ ] 组合模式(composite)
+ - [ ] 享元模式(flyweight)
+ - [ ] [第六章 (第 1 部分 ) - 设计模式 (视频)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
+ - [ ] [第六章 (第 2 部分 ) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (视频)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [第六章 (第 3 部分 ) - Adapter, Facade, Immutable, Read-Only Interface, Proxy(视频)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [系列视频(27个)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
+ - [ ] [Head First 设计模型](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
+ - 尽管《设计模式:可复用面向对象软件的基础》才是这方面的经典,但是我还是认为Head First对于新手更加友好。
+ - [ ] [实际操作:设计模式和对入门开发者的建议](https://sourcemaking.com/design-patterns-and-tips)
+ - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns)
- ### 组合(Combinatorics) (n 中选 k 个) & 概率(Probability)
- - [ ] [数据技巧: 如何找出阶乘、排列和组合(选择) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
- - [ ] [来点学校的东西: 概率 (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
- - [ ] [来点学校的东西: 概率和马尔可夫链 (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
+ - [ ] [数据技巧: 如何找出阶乘、排列和组合(选择)(视频)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
+ - [ ] [来点学校的东西: 概率(视频)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
+ - [ ] [来点学校的东西: 概率和马尔可夫链(视频)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
- [ ] 可汗学院:
- 课程设置:
- [ ] [概率理论基础](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic)
- - 视频 - 41 (每一个都短小精悍):
- - [ ] [概率解释 (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
+ - 只有视频 - 41 (每一个都短小精悍):
+ - [ ] [概率解释(视频)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
- ### NP, NP-完全和近似算法
- - 知道最经典的一些 NP 完全问题,比如旅行商问题和背包问题,
- 而且能在面试官试图忽悠你的时候识别出他们。
+ - 知道最经典的一些 NP 完全问题,比如旅行商问题和背包问题,而且能在面试官试图忽悠你的时候识别出他们。
- 知道 NP 完全是什么意思.
- - [ ] [计算复杂度 (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23)
+ - [ ] [计算复杂度(视频)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23)
- [ ] Simonson:
- - [ ] [贪心算法. II & 介绍 NP-完全性 (video)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939)
- - [ ] [NP-完全性 II & 归约 (video)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- - [ ] [NP-完全性 III (Video)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- - [ ] [NP-完全性 IV (video)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18)
+ - [ ] [贪心算法. II & 介绍 NP-完全性(视频)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939)
+ - [ ] [NP-完全性 II & 归约(视频)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [NP-完全性 III(视频)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [NP-完全性 IV(视频)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18)
- [ ] Skiena:
- - [ ] [CSE373 2012 - 课程 23 - 介绍 NP-完全性 IV (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508)
- - [ ] [CSE373 2012 - 课程 24 - NP-完全性证明 (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [CSE373 2012 - 课程 25 - NP-完全性挑战 (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [复杂度: P, NP, NP-完全性, 规约 (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22)
- - [ ] [复杂度: 近视算法 Algorithms (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24)
- - [ ] [复杂度: 固定参数算法 (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [CSE373 2012 - 课程 23 - 介绍 NP-完全性 IV(视频)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508)
+ - [ ] [CSE373 2012 - 课程 24 - NP-完全性证明(视频)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - 课程 25 - NP-完全性挑战(视频)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [复杂度: P, NP, NP-完全性, 规约(视频)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22)
+ - [ ] [复杂度: 近视算法 Algorithms(视频)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24)
+ - [ ] [复杂度: 固定参数算法(视频)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- Peter Norvik 讨论旅行商问题的近似最优解:
- [Jupyter 笔记本](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb)
- - 《算法导论》的第 1048 - 1140 页。
+ - 《算法导论》(CLRS)的第 1048 - 1140 页。
- ### 缓存(Cache)
- [ ] LRU 缓存:
- - [ ] [LRU 的魔力 (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M)
- - [ ] [实现 LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI)
- - [ ] [LeetCode - 146 LRU Cache (C++) (video)](https://www.youtube.com/watch?v=8-FZRAjR7qU)
+ - [ ] [LRU 的魔力 (100 Days of Google Dev)(视频)](https://www.youtube.com/watch?v=R5ON3iwx78M)
+ - [ ] [实现 LRU(视频)](https://www.youtube.com/watch?v=bq6N7Ym81iI)
+ - [ ] [LeetCode - 146 LRU Cache (C++)(视频)](https://www.youtube.com/watch?v=8-FZRAjR7qU)
- [ ] CPU 缓存:
- - [ ] [MIT 6.004 L15: 存储体系 (video)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24)
- - [ ] [MIT 6.004 L16: 缓存的问题 (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+ - [ ] [MIT 6.004 L15: 存储体系(视频)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24)
+ - [ ] [MIT 6.004 L16: 缓存的问题(视频)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
- ### 进程(Processe)和线程(Thread)
- [ ] 计算机科学 162 - 操作系统 (25 个视频):
- 视频 1-11 是关于进程和线程
- - [操作系统和系统编程 (video)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
+ - [操作系统和系统编程(视频)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
- [进程和线程的区别是什么?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread)
- 涵盖了:
- 进程、线程、协程
@@ -887,13 +932,15 @@
- 活锁
- CPU 活动, 中断, 上下文切换
- 现代多核处理器的并发式结构
+ - [分页(paging),分段(segmentation)和虚拟内存(视频)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2)
+ - [中断(视频)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3)
- 进程资源需要(内存:代码、静态存储器、栈、堆、文件描述符、I/O)
- - 线程资源需要(在同一个进程内和其他线程共享以上的资源,但是每个线程都有独立的程序计数器、栈计数器、寄存器和栈)
+ - 线程资源需要(在同一个进程内和其他线程共享以上(除了栈)的资源,但是每个线程都有独立的程序计数器、栈计数器、寄存器和栈)
- Fork 操作是真正的写时复制(只读),直到新的进程写到内存中,才会生成一份新的拷贝。
- 上下文切换
- - 操作系统和底层硬件是如何初始化上下文切换的。
+ - 操作系统和底层硬件是如何初始化上下文切换的?
- [ ] [C++ 的线程 (系列 - 10 个视频)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M)
- - [ ] Python 的协程 (视频):
+ - [ ] Python 的并发 (视频):
- [ ] [线程系列](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1)
- [ ] [Python 线程](https://www.youtube.com/watch?v=Bs7vPNbB9JM)
- [ ] [理解 Python 的 GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s)
@@ -902,189 +949,16 @@
- [ ] [Keynote David Beazley - 兴趣主题 (Python 异步 I/O)](https://www.youtube.com/watch?v=ZzfHjytDceU)
- [ ] [Python 中的互斥](https://www.youtube.com/watch?v=0zaPs8OtyKY)
-
- 系统设计以及可伸缩性,要把软硬件的伸缩性设计的足够好有很多的东西要考虑,所以这是个包含非常多内容和资源的大主题。需要花费相当多的时间在这个主题上。
-
-- ### 系统设计、可伸缩性、数据处理
- - Yegge 的注意事项:
- - 伸缩性
- - 把大数据集提取为单一值
- - 大数据集转换
- - 处理大量的数据集
- - 系统
- - 特征集
- - 接口
- - 类层次结构
- - 在特定的约束下设计系统
- - 轻量和健壮性
- - 权衡和折衷
- - 性能分析和优化
- - [ ] **从这里开始**: [HiredInTech:系统设计](http://www.hiredintech.com/system-design/)
- - [ ] [该如何为技术面试里设计方面的问题做准备?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023)
- - [ ] [在系统设计面试前必须知道的 8 件事](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/)
- - [ ] [算法设计](http://www.hiredintech.com/algorithm-design/)
- - [ ] [数据库范式 - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
- - [ ] [系统设计面试](https://github.com/checkcheckzz/system-design-interview) - 这一部分有很多的资源,浏览一下我放在下面的文章和例子。
- - [ ] [如何在系统设计面试中脱颖而出](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
- - [ ] [每个人都该知道的一些数字](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/)
- - [ ] [上下文切换操作会耗费多少时间?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
- - [ ] [跨数据中心的事务 (video)](https://www.youtube.com/watch?v=srOgpXECblk)
- - [ ] [简明 CAP 理论介绍](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
- - [ ] Paxos 一致性算法:
- - [时间很短](https://www.youtube.com/watch?v=s8JqcZtvnsM)
- - [用例 和 multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o)
- - [论文](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)
- - [ ] [一致性哈希](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
- - [ ] [NoSQL 模式](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
- - [ ] [OOSE: UML 2.0 系列 (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
- - [ ] OOSE: 使用 UML 和 Java 开发软件 (21 videos):
- - 如果你对 OO 都深刻的理解和实践,可以跳过这部分。
- - [OOSE: 使用 UML 和 Java 开发软件](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
- - [ ] 面向对象编程的 SOLID 原则:
- - [ ] [Bob Martin 面向对象的 SOLID 原则和敏捷设计 (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
- - [ ] [C# SOLID 设计模式 (video)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ)
- - [ ] [SOLID 原则 (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
- - [ ] S - [单一职责原则](http://www.oodesign.com/single-responsibility-principle.html) | [每个对象的单一职责](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
- - [更多](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
- - [ ] O - [开闭原则](http://www.oodesign.com/open-close-principle.html) | [生产环境里的对象应该为扩展做准备而不是为更改](https://en.wikipedia.org/wiki/Open/closed_principle)
- - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
- - [ ] L - [里氏代换原则](http://www.oodesign.com/liskov-s-substitution-principle.html) | [基类和继承类遵循 ‘IS A’ 原则](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
- - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
- - [ ] I - [接口隔离原则](http://www.oodesign.com/interface-segregation-principle.html) | 客户端被迫实现用不到的接口
- - [5 分钟讲解接口隔离原则 (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
- - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
- - [ ] D -[依赖反转原则](http://www.oodesign.com/dependency-inversion-principle.html) | 减少对象里的依赖。
- - [什么是依赖倒置以及它为什么重要](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
- - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
- - [ ] 可伸缩性:
- - [ ] [很棒的概述 (video)](https://www.youtube.com/watch?v=-W9F__D3oY4)
- - [ ] 简短系列:
- - [克隆](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
- - [数据库](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database)
- - [缓存](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache)
- - [异步](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism)
- - [ ] [可伸缩的 Web 架构和分布式系统](http://www.aosabook.org/en/distsys.html)
- - [ ] [错误的分布式系统解释](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf)
- - [ ] [实用编程技术](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html)
- - [extra: Google Pregel 图形处理](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html)
- - [ ] [Jeff Dean - 在 Goolge 构建软件系统 (video)](https://www.youtube.com/watch?v=modXC5IWTJI)
- - [ ] [可伸缩系统架构设计介绍](http://lethain.com/introduction-to-architecting-systems-for-scale/)
- - [ ] [使用 App Engine 和云存储扩展面向全球用户的手机游戏架构实践(video)](https://www.youtube.com/watch?v=9nWyWwY2Onc)
- - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0)
- - [ ] [算法的重要性](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/)
- - [ ] [分片](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html)
- - [ ] [Facebook 系统规模扩展实践 (2009)](https://www.infoq.com/presentations/Scale-at-Facebook)
- - [ ] [Facebook 系统规模扩展实践 (2012), "为 10 亿用户构建" (video)](https://www.youtube.com/watch?v=oodS71YtkGU)
- - [ ] [Long Game 工程实践 - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4)
- - [ ] [30 分钟看完 YouTuBe 7 年系统扩展经验](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html)
- - [video](https://www.youtube.com/watch?v=G-lGCC4KKok)
- - [ ] [PayPal 如何用 8 台虚拟机扛住 10 亿日交易量系统](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html)
- - [ ] [如何对大数据集去重](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/)
- - [ ] [Etsy 的扩展和工程文化探究 Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o)
- - [ ] [是什么造就了 Amazon 自己的微服务架构](http://thenewstack.io/led-amazon-microservices-architecture/)
- - [ ] [压缩还是不压缩,是 Uber 面临的问题](https://eng.uber.com/trip-data-squeeze/)
- - [ ] [异步 I/O Tarantool 队列](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html)
- - [ ] [什么时候应该用近视查询处理?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
- - [ ] [Google 从单数据中心到故障转移, 到本地多宿主架构的演变]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
- - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
- - [ ] [Egnyte: 构建和扩展 PB 级分布式系统架构的经验教训](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html)
- - [ ] [机器学习驱动的编程: 新世界的新编程方式](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
- - [ ] [日服务数百万请求的图像优化技术](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
- - [ ] [Patreon 架构](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
- - [ ] [Tinder: 推荐引擎是如何决定下一个你将会看到谁的?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html)
- - [ ] [现代缓存设计](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html)
- - [ ] [Facebook 实时视频流扩展](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
- - [ ] [在 Amazon AWS 上把服务扩展到 1100 万量级的新手教程](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(Accelerated Mobile Pages)的存在是对 Google 的威胁么?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html)
- - [ ] [360 度解读 Netflix 技术栈](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)
- - [ ] [Cinchcast 架构 - 每天处理 1500 小时的音频](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's 社交游戏架构 - 每月五千万用户增长](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html)
- - [ ] [猫途鹰架构 - 40 万访客, 200 万动态页面访问, 30TB 数据](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html)
- - [ ] [PlentyOfFish 架构](http://highscalability.com/plentyoffish-architecture)
- - [ ] [Salesforce 架构 - 如何扛住 13 亿日交易量](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html)
- - [ ] [ESPN's 架构扩展](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html)
- - [ ] 下面 『消息、序列化和消息系统』部分的内容会提到什么样的技术能把各种服务整合到一起
- - [ ] Twitter:
- - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI)
- - [时间线的扩展](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
- - 更多内容可以查看视频部分的『大规模数据挖掘』视频系列。
- - [ ] 系统设计问题练习:下面有一些指导原则,每一个都有相关文档以及在现实中该如何处理。
- - 复习: [HiredInTech 的系统设计](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
- - 流程:
- 1. 理解问题和范围:
- - 在面试官的帮助下定义用例
- - 提出附加功能的建议
- - 去掉面试官认定范围以外的内容
- - 假定高可用是必须的,而且要作为一个用例
- 2. 考虑约束:
- - 问一下每月请求量
- - 问一下每秒请求量 (他们可能会主动提到或者让你算一下)
- - 评估读写所占的百分比
- - 评估的时候牢记 2/8 原则
- - 每秒写多少数据
- - 总的数据存储量要考虑超过 5 年的情况
- - 每秒读多少数据
- 3. 抽象设计:
- - 分层 (服务, 数据, 缓存)
- - 基础设施: 负载均衡, 消息
- - 粗略的概括任何驱动整个服务的关键算法
- - 考虑瓶颈并指出解决方案
- - 练习:
- - [设计一个 CDN 网络](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci)
- - [设计一个随机唯一 ID 生成系统](https://blog.twitter.com/2010/announcing-snowflake)
- - [设计一个在线多人卡牌游戏](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html)
- - [设计一个 key-value 数据库](http://www.slideshare.net/dvirsky/introduction-to-redis)
- - [设计一个函数获取过去某个时间段内前 K 个最高频访问的请求]( https://icmi.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf)
- - [设计一个图片分享系统](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html)
- - [设计一个推荐系统](http://ijcai13.org/files/tutorial_slides/td3.pdf)
- - [设计一个短域名生成系统](http://www.hiredintech.com/system-design/the-system-design-process/)
- - [设计一个缓存系统](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/)
-
-- ### 论文
- - 有 Google 的论文和一些知名的论文.
- - 你很可能实在没时间一篇篇完整的读完他们。我建议可以有选择的读其中一些论文里的核心部分。
- - [ ] [1978: 通信顺序处理](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
- - [Go 实现](https://godoc.org/github.com/thomas11/csp)
- - [喜欢经典的论文?](https://www.cs.cmu.edu/~crary/819-f09/)
- - [ ] [2003: The Google 文件系统](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
- - 2012 年被 Colossus 取代了
- - [ ] [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
- - 大多被云数据流取代了?
- - [ ] [2007: 每个程序员都应该知道的内存知识 (非常长,作者建议跳过某些章节来阅读)](https://www.akkadia.org/drepper/cpumemory.pdf)
- - [ ] [2012: Google 的 Colossus](https://www.wired.com/2012/07/google-colossus/)
- - 没有论文
- - [ ] 2012: AddressSanitizer: 快速的内存访问检查器:
- - [论文](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
- - [视频](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
- - [ ] 2013: Spanner: Google 的分布式数据库:
- - [论文](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
- - [视频](https://www.usenix.org/node/170855)
- - [ ] [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
- - [ ] [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
- - [ ] [2015: 大规模高可用: 构建 Google Ads 的数据基础设施](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
- - [ ] [2015: TensorFlow: 异构分布式系统上的大规模机器学习](http://download.tensorflow.org/paper/whitepaper2015.pdf )
- - [ ] [2015: 开发者应该如何搜索代码:用例学习](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
- - [ ] [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
-
- ### 测试
- 涵盖了:
- 单元测试是如何工作的
- 什么是模拟对象
- 什么是集成测试
- 什么是依赖注入
- - [ ] [James Bach 讲敏捷软件测试 (video)](https://www.youtube.com/watch?v=SAhJf36_u5U)
- - [ ] [James Bach 软件测试公开课 (video)](https://www.youtube.com/watch?v=ILkT_HV9DVU)
- - [ ] [Steve Freeman - 测试驱动的开发 (video)](https://vimeo.com/83960706)
+ - [ ] [James Bach 讲敏捷软件测试(视频)](https://www.youtube.com/watch?v=SAhJf36_u5U)
+ - [ ] [James Bach 软件测试公开课(视频)](https://www.youtube.com/watch?v=ILkT_HV9DVU)
+ - [ ] [Steve Freeman - 测试驱动的开发(视频)](https://vimeo.com/83960706)
- [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf)
- - [ ] [测试驱动的开发已死。测试不朽。](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html)
- - [ ] [测试驱动的开发已死? (video)](https://www.youtube.com/watch?v=z9quxZsLcfo)
- - [ ] [视频系列 (152 个) - 并不都是必须 (video)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g)
- [ ] [Python:测试驱动的 Web 开发](http://www.obeythetestinggoat.com/pages/book.html#toc)
- [ ] 依赖注入:
- [ ] [视频](https://www.youtube.com/watch?v=IKD2-MAkXyQ)
@@ -1095,152 +969,321 @@
- 在操作系统中是如何运作的
- 在操作系统部分的视频里有很多资料
-- ### 实现系统例程
- - 理解你使用的系统 API 底层有什么
- - 你能自己实现它们么?
-
- ### 字符串搜索和操作
- - [ ] [文本的搜索模式 (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
- - [ ] Rabin-Karp (videos):
- - [Rabin Karps 算法](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm)
- - [预先计算的优化](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation)
- - [优化: 实现和分析](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis)
- - [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9)
- - [滚动哈希](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32)
- - [ ] Knuth-Morris-Pratt (KMP) 算法:
- - [Pratt 算法](https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm)
- - [教程: Knuth-Morris-Pratt (KMP) 字符串匹配算法](https://www.youtube.com/watch?v=2ogqPWJSftE)
- - [ ] Boyer–Moore 字符串搜索算法
- - [Boyer-Moore字符串搜索算法](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm)
- - [Boyer-Moore-Horspool 高级字符串搜索算法 (video)](https://www.youtube.com/watch?v=QDZpzctPf10)
- - [ ] [Coursera: 字符串的算法](https://www.coursera.org/learn/algorithms-on-strings/home/week/1)
-
----
+ - [ ] [Sedgewick──后缀数组(Suffix Arrays)(视频)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
+ - [ ] [Sedgewick──子字符串搜寻(视频)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
+ - [ ] [1. 子字符串搜寻导论](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search)
+ - [ ] [2. 子字符串搜寻──暴力法](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search)
+ - [ ] [3. KMP算法](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt)
+ - [ ] [4. Boyer-Moore算法](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore)
+ - [ ] [5. Rabin-Karp算法](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp)
+ - [ ] [文本的搜索模式(视频)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
-## 终面
-
- 这一部分有一些短视频,你可以快速的观看和复习大多数重要概念。
- 这对经常性的巩固很有帮助。
+如果你需要有关此主题的更多详细信息,请参阅“[一些主题的额外内容](#一些主题的额外内容)”中的“字符串匹配”部分。
-#### 综述:
+- ### 字典树(Tries)
-- [ ] 2-3 分钟的短视频系列 (23 个)
- - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22)
-- [ ] 2-5 分钟的短视频系列 - Michael Sambol (18 个):
- - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ)
+ - 需要注意的是,字典树各式各样。有些有前缀,而有些则没有。有些使用字符串而不使用比特位来追踪路径。
+ - 阅读代码,但不实现。
+ - [Sedgewick──字典树(3个视频)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
+ - [ ] [1. R Way字典树](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries)
+ - [ ] [2. 三元搜索树](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries)
+ - [ ] [3. 基于字符串的操作](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations)
+ - [ ] [数据结构笔记及编程技术](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries)
+ - [ ] 短课程视频:
+ - [ ] [对字典树的介绍(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries)
+ - [ ] [字典树的性能(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries)
+ - [ ] [实现一棵字典树(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie)
+ - [ ] [字典树:一个被忽略的数据结构](https://www.toptal.com/java/the-trie-a-neglected-data-structure)
+ - [ ] [TopCoder —— 使用字典树](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/)
+ - [ ] [标准教程(现实中的用例)(视频)](https://www.youtube.com/watch?v=TJ8SkcUSdbU)
+ - [ ] [MIT,高阶数据结构,字符串(视频中间有点困难)(视频)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
-#### 排序:
+- ### 浮点数
-- [ ] 归并排序: https://www.youtube.com/watch?v=GCae1WNvnZM
+ - [ ] 简单8位:[浮点数的表示形式-1(视频──计算中存在错误,请参见视频说明)](https://www.youtube.com/watch?v=ji3SfClm8TU)
+ - [ ] 32位:[IEEE754 32位浮点二进制(视频)](https://www.youtube.com/watch?v=50ZYcZebIec)
+- ### Unicode
+ - [ ] [每一个软件开发者的绝对最低限度,必须要知道的关于 Unicode 和字符集知识](http://www.joelonsoftware.com/articles/Unicode.html)
+ - [ ] [关于处理文本需要的编码和字符集,每个程序员绝对需要知道的知识](http://kunststube.net/encoding/)
+
+- ### 字节序(Endianness)
+ - [大/小端序](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html)
+ - [大端序 Vs 小端序(视频)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
+ - [由里入内的大端序与小端序(视频)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
+ - 对于内核开发非常具有技术性,如果大多数的内容听不懂也没关系。
+ - 前半部就已经足够了。
+
+- ### 网络(视频)
+ - **如果你具有网络经验或想成为可靠性工程师或运维工程师,期待你的问题**
+ - 知道这些有益无害,多多益善!
+ - [ ] [可汗学院](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org)
+ - [ ] [UDP 和 TCP:网络传输协议中的数据压缩(视频)](https://www.youtube.com/watch?v=Vdc8TCESIg8)
+ - [ ] [TCP/IP 和 OSI 模型解释!(视频)](https://www.youtube.com/watch?v=e5DEVa9eSN0)
+ - [ ] [互联网上的数据包传输。网络和 TCP/IP 教程。(视频)](https://www.youtube.com/watch?v=nomyRJehhnM)
+ - [ ] [HTTP(视频)](https://www.youtube.com/watch?v=WGJrLqtX7As)
+ - [ ] [SSL 和 HTTPS(视频)](https://www.youtube.com/watch?v=S2iBR2ZlZf0)
+ - [ ] [SSL/TLS(视频)](https://www.youtube.com/watch?v=Rp3iZUvXWlM)
+ - [ ] [HTTP 2.0(视频)](https://www.youtube.com/watch?v=E9FxNzv1Tr8)
+ - [ ] [视频系列(21个视频)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j)
+ - [ ] [子网络解密 - 第五部分 经典内部域名指向 CIDR 标记(视频)](https://www.youtube.com/watch?v=t5xYI0jzOf4)
+ - [ ] 套接字(Sockets):
+ - [Java──套接字──介绍(视频)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s)
+ - [套接字编程(视频)](https://www.youtube.com/watch?v=G75vN2mnJeQ)
+
+## 系统设计、可伸缩性、数据处理
+
+**如果你已经拥有了4年以上的编程经验,那你可以来看看有关系统设计的问题**
+
+- 系统设计以及可伸缩性,要把软硬件的伸缩性设计的足够好有很多的东西要考虑,所以这是个包含非常多内容和资源的大主题。要花费相当多的时间在这个主题上。
+- 考量:
+ - 伸缩性
+ - 把大数据集提取为单一值
+ - 大数据集转换
+ - 处理大量的数据集
+ - 系统
+ - 功能集
+ - 接口
+ - 类层次结构
+ - 在特定的约束下设计系统
+ - 轻量和健壮性
+ - 权衡和折衷
+ - 性能分析和优化
+- [ ] **从这里开始**:[系统设计入门](https://github.com/donnemartin/system-design-primer)
+- [ ] [HiredInTech:系统设计](http://www.hiredintech.com/system-design/)
+- [ ] [该如何为技术面试里设计方面的问题做准备?](https://www.quora.comHow-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023)
+- [ ] [在系统设计面试前必须知道的 8 件事](http://blog.gainlo.co/index.php/2015/10/228-things-you-need-to-know-before-system-design-interviews/)
+- [ ] [算法设计](http://www.hiredintech.com/algorithm-design/)
+- [ ] [数据库范式 - 1NF, 2NF, 3NF and 4NF(视频)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
+- [ ] [系统设计面试](https://github.com/checkcheckzz/system-design-interview) - 这一部分有很多的资源浏览一下我放在下面的文章和例子。
+- [ ] [如何在系统设计面试中脱颖而出](http://www.palantir.com/2011/10how-to-rock-a-systems-design-interview/)
+- [ ] [每个人都该知道的一些数字](http://everythingisdata.wordpress.com/2009/10/17numbers-everyone-should-know/)
+- [ ] [上下文切换操作会耗费多少时间?](http://blog.tsunanet.net/2010/11how-long-does-it-take-to-make-context.html)
+- [ ] [跨数据中心的事务(视频)](https://www.youtube.com/watch?v=srOgpXECblk)
+- [ ] [简明 CAP 理论介绍](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
+- [ ] 共识算法:
+ - [ ] Paxos:[Paxos协议──Computerphile(视频)](https://www.youtube.com/watch?v=s8JqcZtvnsM)
+ - [ ] Raft: [Raft 分布式共识算法简介(视频)](https://www.youtube.com/watch?v=P9Ydif5_qvE)
+ - [ ] [易于阅读的论文](https://raft.github.io/)
+ - [ ] [信息图]
+- [ ] [一致性哈希](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
+- [ ] [NoSQL 模式](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
+- [ ] 可伸缩性:
+ - 你不需要知道所有这些。只需挑选一些你感兴趣的东西即可。
+ - [ ] [很棒的概述(视频)](https://www.youtube.com/watch?v=-W9F__D3oY4)
+ - [ ] 简短系列:
+ - [克隆](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
+ - [数据库](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database)
+ - [缓存](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache)
+ - [异步](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism)
+ - [ ] [可伸缩的 Web 架构和分布式系统](http://www.aosabook.org/en/distsys.html)
+ - [ ] [错误的分布式系统解释](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf)
+ - [ ] [实用编程技术](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html)
+ - [extra: Google Pregel 图形处理](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html)
+ - [ ] [Jeff Dean - 在 Goolge 构建软件系统(视频)](https://www.youtube.com/watch?v=modXC5IWTJI)
+ - [ ] [可伸缩系统架构设计介绍](http://lethain.com/introduction-to-architecting-systems-for-scale/)
+ - [ ] [使用 App Engine 和云存储扩展面向全球用户的手机游戏架构实践(视频)](https://www.youtube.com/watch?v=9nWyWwY2Onc)
+ - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra(视频)](https://www.youtube.com/watch?v=H4vMcD7zKM0)
+ - [ ] [算法的重要性](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/)
+ - [ ] [分片(Sharding)](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html)
+ - [ ] [Facebook 系统规模扩展实践 (2012), "为 10 亿用户构建"(视频)](https://www.youtube.com/watch?v=oodS71YtkGU)
+ - [ ] [Long Game 工程实践 - Astrid Atkinson Keynote(视频)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4)
+ - [ ] [30 分钟看完 YouTuBe 7 年系统扩展经验](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html)
+ - [视频](https://www.youtube.com/watch?v=G-lGCC4KKok)
+ - [ ] [PayPal 如何用 8 台虚拟机扛住 10 亿日交易量系统](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html)
+ - [ ] [如何对大数据集去重](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/)
+ - [ ] [Etsy 的扩展和工程文化探究 Jon Cowie(视频)](https://www.youtube.com/watch?v=3vV4YiqKm1o)
+ - [ ] [是什么造就了 Amazon 自己的微服务架构](http://thenewstack.io/led-amazon-microservices-architecture/)
+ - [ ] [压缩还是不压缩,是 Uber 面临的问题](https://eng.uber.com/trip-data-squeeze/)
+ - [ ] [异步 I/O Tarantool 队列](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html)
+ - [ ] [什么时候应该用近似查询处理?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
+ - [ ] [Google 从单数据中心到故障转移, 到本地多宿主架构的演变](http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
+ - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
+ - [ ] [Egnyte: 构建和扩展 PB 级分布式系统架构的经验教训](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html)
+ - [ ] [机器学习驱动的编程: 新世界的新编程方式](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
+ - [ ] [日服务数百万请求的图像优化技术](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
+ - [ ] [Patreon 架构](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
+ - [ ] [Tinder: 推荐引擎是如何决定下一个你将会看到谁的?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html)
+ - [ ] [现代缓存设计](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html)
+ - [ ] [Facebook 实时视频流扩展](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
+ - [ ] [在 Amazon AWS 上把服务扩展到 1100 万量级的新手教程](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)
+ - [ ] [360 度解读 Netflix 技术栈](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)
+ - [ ] [Cinchcast 架构 - 每天处理 1500 小时的音频](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's 社交游戏架构 - 每月五千万用户增长](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html)
+ - [ ] [猫途鹰架构 - 40 万访客, 200 万动态页面访问, 30TB 数据](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html)
+ - [ ] [PlentyOfFish 架构](http://highscalability.com/plentyoffish-architecture)
+ - [ ] [Salesforce 架构 - 如何扛住 13 亿日交易量](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html)
+ - [ ] [ESPN's 架构扩展](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html)
+ - [ ] 下面“消息传递,序列化和队列系统”部分的内容会提到什么样的技术能把各种服务整合到一起
+ - [ ] Twitter:
+ - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter"(视频)](https://www.youtube.com/watch?v=5cKTP36HVgI)
+ - [时间线的扩展](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
+ - 更多内容可以查看[视频系列部分](#视频系列)的“大规模数据挖掘”视频系列。
+- [ ] 系统设计问题练习:下面有一些指导原则,每一个都有相关文档以及在现实中该如何处理。
+ - 复习: [系统设计入门](https://github.com/donnemartin/system-design-primer)
+ - [HiredInTech 的系统设计](http://www.hiredintech.com/system-design/)
+ - [备忘单](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
+ - 流程:
+ 1. 理解问题和范围:
+ - 在面试官的帮助下定义用例
+ - 提出附加功能的建议
+ - 去掉面试官认定范围以外的内容
+ - 假定高可用是必须的,而且要作为一个用例
+ 2. 考虑约束:
+ - 问一下每月请求量
+ - 问一下每秒请求量 (他们可能会主动提到或者让你算一下)
+ - 评估读写所占的百分比
+ - 评估的时候牢记 2/8 原则
+ - 每秒写多少数据
+ - 总的数据存储量要考虑超过 5 年的情况
+ - 每秒读多少数据
+ 3. 抽象设计:
+ - 分层 (服务, 数据, 缓存)
+ - 基础设施: 负载均衡, 消息
+ - 粗略的概括任何驱动整个服务的关键算法
+ - 考虑瓶颈并指出解决方案
+ - 练习:
+ - [设计一个 CDN 网络](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci)
+ - [设计一个随机唯一 ID 生成系统](https://blog.twitter.com/2010/announcing-snowflake)
+ - [设计一个在线多人卡牌游戏](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html)
+ - [设计一个键值数据库](http://www.slideshare.net/dvirsky/introduction-to-redis)
+ - [设计一个图片分享系统](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html)
+ - [设计一个推荐系统](http://ijcai13.org/files/tutorial_slides/td3.pdf)
+ - [设计一个短域名生成系统](http://www.hiredintech.com/system-design/the-system-design-process/)
+ - [设计一个缓存系统](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/)
-## 书籍
+---
-### Google Coaching 里提到的
+## 终面
-**阅读并做练习:**
+ 这一部分有一些短视频,你可以快速的观看和复习大多数重要概念。
+ 这对经常性的巩固很有帮助。
-- [ ] 算法设计手册 (Skiena)
- - 书 (Kindle 上可以租到):
- - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202)
- - Half.com 是一个资源丰富且性价比很高的在线书店.
- - 答案:
- - [解答](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
- - [解答](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
- - [勘误表](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
+- [ ] 2-3分钟的简短主题视频系列(23个视频)
+ - [视频](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22)
+- [ ] 2-5分钟的简短主题视频系列──Michael Sambol(18个视频):
+ - [视频](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ)
+- [ ] [Sedgewick 视频 ── 算法I](https://www.coursera.org/learn/algorithms-part1)
+- [ ] [Sedgewick 视频 ── 算法II](https://www.coursera.org/learn/algorithms-part2)
- read and do exercises from the books below. Then move to coding challenges (further down below)
- 一旦你理解了每日计划里的所有内容,就去读上面所列的书并完成练习,然后开始读下面所列的书并做练习,之后就可以开始实战写代码了(本文再往后的部分)
+## 编程问题练习
-**首先阅读:**
-- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
+现在你已经了解了上面所有的计算机科学主题,是时候练习回答编程问题了。
-**然后阅读 (这本获得了很多推荐, 但是不在 Google coaching 的文档里):**
-- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
- - 如果你看到有人在看 "The Google Resume", 实际上它和 "Cracking the Coding Interview" 是同一个作者写的,而且后者是升级版。
+**编程问题的实践并不是要记住编程问题的答案**。
-### 附加书单
+为什么需要练习编程问题:
-这些没有被 Google 推荐阅读,不过我因为需要这些背景知识所以也把它们列在了这里。
+- 快速识别问题,以及如何应用正确的数据结构及算法
+- 收集问题的要求
+- 像在面试中一样谈论问题
+- 在白板或纸上而非计算机上编码
+- 计算解决方案的时间和空间的复杂性
+- 测试你的解决方案
-- [ ] C Programming Language, Vol 2
- - [练习的答案](https://github.com/lekkas/c-algorithms)
+这里有个很棒的入门教学,内容是如何在面试中有条不紊,并且有互动沟通地解决问题。这种能力可以从面试书籍中获得,但我觉得这个也很棒:[算法设计画布](http://www.hiredintech.com/algorithm-design/)。
-- [ ] C++ Primer Plus, 6th Edition
+家里没有白板?那讲得通。我是一个怪人,有一个很大的白板。从白板商店买了一个大的绘图板,而不是白板。你可以坐在沙发上练习。这是我的“沙发白板”。我在照片中添加了笔以便进行缩放。如果你使用笔,则希望可以擦除。快速变得凌乱。我用铅笔和橡皮擦。
-- [ ] [《Unix 环境高级编程》 The Unix Programming Environment](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=info)
+![我的沙发白板](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg)
-- [ ] [《编程珠玑》 Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
+补充:
-- [ ] [Algorithms and Programming: Problems and Solutions](http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474)
+- [Topcoder的数学](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/)
+- [动态编程──从新手到高级](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/)
+- [MIT 面试材料](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php)
+- [练习以掌握特定语言](http://exercism.io/languages)
-### 如果你有时间
+**阅读并练习编程问题(按此顺序)**:
-- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
+- [ ] [编程面试公开:下一份工作的秘密,第二版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
+ - C,C ++ 和 Java 的答案
+- [ ] [破解编码面试,第六版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
+ - Java 答案
-- [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
- - 如果你希望在面试里用 C++ 写代码,这本书的代码全都是 C++ 写的
- - 通常情况下能找到解决方案的好书.
+请参阅上方的[书单](#书单)。
-## 编码练习和挑战
+## 编程练习和挑战
一旦你学会了理论基础,就应该把它们拿出来练练。
尽量坚持每天做编码练习,越多越好。
-编程问题预备:
+- [如何找到解决方案](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/)
+- [如何剖析 Topcoder 题目描述](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/)
-- [ ] [不错的介绍 (摘自 System Design 章节): 算法设计:](http://www.hiredintech.com/algorithm-design/)
-- [ ] [如何找到解决方案](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/)
-- [ ] [如何剖析 Topcoder 题目描述](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/)
-- [ ] [Topcoders 里用到的数学](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/)
-- [ ] [动态规划 – 从入门到精通](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/)
+编码面试问题视频:
-- [MIT 面试材料](https://courses.csail.mit.edu/iap/interview/materials.php)
-
-- [针对编程语言本身的练习](http://exercism.io/languages)
+- [IDeserve(88个视频)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
+- [Tushar Roy(5个播放列表)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
+ - 超级解决问题的方法
+- [Nick White──LeetCode 解题(187个视频)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-)
+ - 良好的解决方案和代码解释
+ - 你可以在短时间内看好几个
+- [FisherCoder──LeetCode 解题](https://youtube.com/FisherCoder)
编码练习平台:
- [LeetCode](https://leetcode.com/)
+ - 我最喜欢的编码问题网站,值得你准备的1-2个月的订阅费用
+ - [FisherCoder 的 LeetCode 解题](https://github.com/fishercoder1534/Leetcode)
+ - 请参阅上面的 Nick White 视频,以获得简短的代码
+- [HackerRank](https://www.hackerrank.com/)
- [TopCoder](https://www.topcoder.com/)
+- [InterviewCake](https://www.interviewcake.com/)
+- [http://www.geeksforgeeks.org/](http://www.geeksforgeeks.org/)
+- [InterviewBit](https://www.interviewbit.com/invite/icjf)
- [Project Euler (数学方向为主)](https://projecteuler.net/index.php?section=problems)
+- [Code Exercises](https://code-exercises.com/)
+
+语言学习网站,附带编码挑战:
+
- [Codewars](http://www.codewars.com)
-- [HackerRank](https://www.hackerrank.com/)
- [Codility](https://codility.com/programmers/)
-- [InterviewCake](https://www.interviewcake.com/)
-- [InterviewBit](https://www.interviewbit.com/invite/icjf)
+- [HackerEarth](https://www.hackerearth.com/)
+- [Sphere Online Judge (spoj)](http://www.spoj.com/)
+- [Codechef](https://www.codechef.com/)
+
+编码挑战项目:
+
+- [Python 交互式编码面试挑战](https://github.com/donnemartin/interactive-coding-challenges)
+
+模拟面试:
-- [模拟大公司的面试](http://www.gainlo.co/)
+- [Gainlo.co:来自大公司的模拟面试官](http://www.gainlo.co/)──我使用了它,它帮助我减轻了电话屏幕和现场面试的压力
+- [Pramp:模拟来自/与同行的面试](https://www.pramp.com/)──点对点方式练习面试
+- [Refdash:模拟面试和加急面试](https://refdash.com/)──跳过与科技公司的多次面试,帮助求职者快速追踪
+- [interviewing.io:与高级工程师进行模拟面试](https://interviewing.io/)──与来自 FAANG(译者注:Facebook, Amazon, Apple, Netflix and Google) 的高级工程师进行匿名算法/系统设计面试。
## 当你临近面试时
-- [ ] 搞定代码面试 (videos):
+- 搞定代码面试──第二集 (视频):
- [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo)
- [Cracking the Coding Interview - 全栈系列](https://www.youtube.com/watch?v=Eg5-tdAwclo)
- - [Ask Me Anything: Gayle Laakmann McDowell (Cracking the Coding Interview 的作者)](https://www.youtube.com/watch?v=1fqxMuPmGak)
## 你的简历
-- [10 条小贴士让你写出一份还算不错的简历](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html)
-- 这是搞定面试的第一个关键步骤
-
+- 请参阅“破解编码面试”和“编程面试的背面”中的建立准备项。
## 当面试来临的时候
- 随着下面列举的问题思考下你可能会遇到的 20 个面试问题
- 每个问题准备 2-3 种回答
- 准备点故事,不要只是摆一些你完成的事情的数据,相信我,人人都喜欢听故事
+随着下面列举的问题思考下你可能会遇到的 20 个面试问题,每个问题准备 2-3 种回答。准备点故事,不要只是摆一些你完成的事情的数据,相信我,人人都喜欢听故事。
- 你为什么想得到这份工作?
- 你解决过的最有难度的问题是什么?
- 面对过的最大挑战是什么?
- 见过的最好或者最坏的设计是怎么样的?
-- 对某项 Google 产品提出改进建议。
+- 对某个产品提出改进建议。
- 你作为一个个体同时也是团队的一员,如何达到最好的工作状态?
-- 你的什么技能或者经验是你的角色中不可或缺的?为什么?
+- 你的什么技能或者经验是你的角色中不可或缺的,为什么?
- 你在某份工作或某个项目中最享受的是什么?
- 你在某份工作或某个项目中面临过的最大挑战是什么?
-- 你在某份工作或某个项目中遇到过的最蛋疼的 Bug 是什么样的?
+- 你在某份工作或某个项目中遇到过的最硬的 Bug 是什么样的?
- 你在某份工作或某个项目中学到了什么?
- 你在某份工作或某个项目中哪些地方还可以做的更好?
@@ -1250,52 +1293,110 @@
- 团队多大规模?
- 开发周期是怎样的? 会使用瀑布流/极限编程/敏捷开发么?
-- 经常会为 deadline 加班么? 或者是有弹性的?
+- 经常会为截止日期(deadlines)加班么? 或者是有弹性的?
- 团队里怎么做技术选型?
- 每周平均开多少次会?
- 你觉得工作环境有助于员工集中精力吗?
- 目前正在做什么工作?
- 喜欢这些事情吗?
- 工作期限是怎么样的?
+- 工作生活怎么平衡?
## 当你获得了梦想的职位
-我还能说些什么呢,恭喜你!
-
-- [我希望在 Google 的第一天就知道的 10 件事](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw)
+恭喜你!
-坚持继续学习。
+继续学习。
-得到这份工作只是一个开始。
+活到老,学到老。
---
*****************************************************************************************************
*****************************************************************************************************
- 下面的内容都是可选的。这些是我的推荐,不是 Google 的。
- 通过学习这些内容,你将会得到更多的有关 CS 的概念,并将为所有的软件工程工作做更好的准备。
+ 下面的内容都是可选的。
+ 通过学习这些内容,你将会得到更多的有关 CS 的概念,并将为所有的软件工程工作做更好的准备。你将会成为一个更全面的软件工程师。
*****************************************************************************************************
*****************************************************************************************************
---
-## 附加的学习
+## 额外书籍
+
+ 你可以从以下的书单挑选你有兴趣的主题来研读。
+
+- [UNIX环境高级编程](https://www.amazon.com/dp/013937681X)
+ - 老,但却很棒
+- [Linux 命令行大全](https://www.amazon.com/dp/1593273894/)
+ - 现代选择
+- [TCP-IP详解系列](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
+- [Head First 设计模式](https://www.amazon.com/gp/product/0596007124/)
+ - 设计模式入门介绍
+- [设计模式:可复用面向对象软件的基础](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
+ - 也被称为“四人帮”(Gang of Four(GOF))
+ - 经典设计模式书籍
+- [Linux 和 UNIX 系统管理技术手册(第五版)](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/)
+- [算法设计手冊(Skiena)](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202)
+ - 作为复习以及问题辨别
+ - 这本书中算法的部分难度已经超过面试会出现的
+ - 本书分为两个部分:
+ - 数据结构和算法课本
+ - 优点:
+ - 跟其他算法课本一样是个很棒的复习素材
+ - 包含作者以往解决工业及学术上问题的经验的故事
+ - 含C语言代码示例
+ - 缺点:
+ - 某些地方跟《算法导论》(CLRS)一样艰深,但在某些主题,算法导论或许是更好的选择。
+ - 第7、8、9章有点难以消化,因为某些地方并没有解释得很清楚,或者根本上我就是个学渣
+ - 别会错意了,我很喜欢 Skiena 的教学方法以及他的风格。
+ - 算法目录:
+ - 这个部分是买这本书的最大原因
+ - 我即将着手进行这部分,一旦完成这部分我会再更新上来
+ - 可以在 kindle 上租
+ - 解答:
+ - [解答](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
+ - [解答](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
+ - [勘误表](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
-- ### Unicode
- - [ ] [每一个软件开发者的绝对最低限度,必须要知道的关于 Unicode 和字符集知识]( http://www.joelonsoftware.com/articles/Unicode.html)
- - [ ] [关于处理文本需要的编码和字符集, 每个程序员绝对需要知道的知识](http://kunststube.net/encoding/)
+- [编程卓越之道(第一卷):深入理解计算机](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
-- ### 字节顺序
- - [ ] [大、小端字节序](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html)
- - [ ] [大端字节 Vs 小端字节(视频)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
- - [ ] [大、小端字节序的里里外外(Big And Little Endian Inside/Out) (视频)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
- - 内核开发者的讨论非常技术性,如果大多数都超出了你的理解范围,不要太担心。
- - 前半段已经足够了。
+ - 该书于2004年出版,虽然有些过时,但是对于简单了解计算机而言,这是一个了不起的资源
+ - 作者发明了[高阶组合语言 HLA](https://en.wikipedia.org/wiki/High_Level_Assembly),所以提到,并且举了一些HLA的例子。里面没有用到很多,但都是很棒的组合语言的例子。
+ - 这些章节值得阅读,为你提供良好的基础:
+ - 第2章──数字表示
+ - 第3章──二进制算术和位运算
+ - 第4章──浮点表示
+ - 第5章──字符表示
+ - 第6章──内存组织和访问
+ - 第7章──组合数据类型和内存对象
+ - 第9章──CPU体系结构
+ - 第10章──指令集架构
+ - 第11章──内存体系结构和组织
+
+- [算法导论](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
+ - **重要提示**:读这本书的价值有限。本书很好地回顾了算法和数据结构,但不会教你如何编写良好的代码。你必须能够有效地编写一个不错的解决方案
+ - 又称 CLR,有时是 CLRS,因为 Stein 最后才加入
+
+- [计算机体系结构:量化研究方法(第6版)](https://www.amazon.com/dp/0128119055)
+ - 更丰富、更新(2017年),但篇幅较长
+- [编程珠矶](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
+ - 前几章介绍了解决编程问题(非常古老,甚至还用数据磁带)的巧妙解决方案,但这只是一个介绍。这是关于程序设计和体系结构的指南
+
+## 附加学习
+
+ 我把它们加进来是为了让你成为更全方位的软件工程师,并且留意一些技术以及算法,让你拥有更大的工具箱。
+
+- ### 编译器
+
+ - [编译器的工作方式,约1分钟(视频)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
+ - [Harvard CS50-编译器(视频)](https://www.youtube.com/watch?v=CSZLNYF4Klo)
+ - [C ++(视频)](https://www.youtube.com/watch?v=twodd1KFfGk)
+ - [了解编译器优化(C ++)(视频)](https://www.youtube.com/watch?v=FnGCDLhaxKU)
- ### Emacs and vi(m)
- - Yegge 的建议,从一个很早以前的亚马逊招聘信息中而来:熟悉基于 unix 的代码编辑器
+ - 熟悉基于 unix 的代码编辑器
- vi(m):
- [使用 vim 进行编辑 01 - 安装, 设置和模式 (视频)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr)
- [VIM 的冒险之旅](http://vim-adventures.com/)
@@ -1316,335 +1417,463 @@
- [(或许) 深度组织模式:管理结构 (视频)](https://www.youtube.com/watch?v=nsGYet02bEk)
- ### Unix 命令行工具
- - 下列内容中的优秀工具由的 Yegge 推荐,Yegge 目前致力于 Amazon 人事招聘处。
- - [ ] bash
- - [ ] cat
- - [ ] grep
- - [ ] sed
- - [ ] awk
- - [ ] curl or wget
- - [ ] sort
- - [ ] tr
- - [ ] uniq
- - [ ] [strace](https://en.wikipedia.org/wiki/Strace)
- - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/)
-
-- ### 信息资源 (视频)
- - [ ] [Khan Academy 可汗学院](https://www.khanacademy.org/computing/computer-science/informationtheory)
- - [ ] 更多有关马尔可夫的内容:
- - [ ] [Core Markov Text Generation马尔可夫内容生成](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
- - [ ] [Core Implementing Markov Text Generation马尔可夫内容生成补充](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
- - [ ] [Project = Markov Text Generation Walk Through一个马尔可夫内容生成器的项目](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
- - 关于更多信息,请参照下方 MIT 6.050J 信息和系统复杂度的内容.
+ - 下列内容包含优秀工具
+ - bash
+ - cat
+ - grep
+ - sed
+ - awk
+ - curl or wget
+ - sort
+ - tr
+ - uniq
+ - [strace](https://en.wikipedia.org/wiki/Strace)
+ - [tcpdump](https://danielmiessler.com/study/tcpdump/)
+
+- ### 信息论 (视频)
+ - [Khan Academy 可汗学院](https://www.khanacademy.org/computing/computer-science/informationtheory)
+ - 更多有关马尔可夫的内容:
+ - [马尔可夫内容生成(Core Markov Text Generation)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
+ - [Core Implementing Markov Text Generation马尔可夫内容生成实现](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
+ - [一个马尔可夫内容生成器的项目(Project = Markov Text Generation Walk Through)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
+ - 关于更多信息,请参照下方 MIT 6.050J 信息和系统复杂度的内容。
- ### 奇偶校验位 & 汉明码 (视频)
- - [ ] [入门](https://www.youtube.com/watch?v=q-3BctoUpHE)
- - [ ] [奇偶校验位](https://www.youtube.com/watch?v=DdMcAUlxh1M)
- - [ ] 汉明码(Hamming Code):
+ - [入门](https://www.youtube.com/watch?v=q-3BctoUpHE)
+ - [奇偶校验位](https://www.youtube.com/watch?v=DdMcAUlxh1M)
+ - 汉明码(Hamming Code):
- [发现错误](https://www.youtube.com/watch?v=1A_NcXxdoCc)
- [修正错误](https://www.youtube.com/watch?v=JAMLuxdHH8o)
- - [ ] [检查错误](https://www.youtube.com/watch?v=wbH2VxzmoZk)
+ - [检查错误](https://www.youtube.com/watch?v=wbH2VxzmoZk)
-- ### 系统熵值(系统复杂度)
+- ### 系统熵值(Entropy)
- 请参考下方视频
- 观看之前,请先确定观看了信息论的视频
- - [ ] [信息理论, 克劳德·香农, 熵值, 系统冗余, 数据比特压缩 (视频)](https://youtu.be/JnJq3Py0dyM?t=176)
+ - [信息理论, 克劳德·香农, 熵值, 系统冗余, 数据比特压缩 (视频)](https://youtu.be/JnJq3Py0dyM?t=176)
- ### 密码学
- 请参考下方视频
- 观看之前,请先确定观看了信息论的视频
- - [ ] [可汗学院](https://www.khanacademy.org/computing/computer-science/密码学)
- - [ ] [密码学: 哈希函数](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
- - [ ] [密码学: 加密](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [可汗学院](https://www.khanacademy.org/computing/computer-science/密码学)
+ - [密码学: 哈希函数](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
+ - [密码学: 加密](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- ### 压缩
- 观看之前,请先确定观看了信息论的视频
- - [ ] 压缩 (视频):
- - [ ] [压缩](https://www.youtube.com/watch?v=Lto-ajuqW3w)
- - [ ] [压缩熵值](https://www.youtube.com/watch?v=M5c_RFKVkko)
- - [ ] [由上而下的树 (霍夫曼编码树)](https://www.youtube.com/watch?v=umTbivyJoiI)
- - [ ] [额外比特 - 霍夫曼编码树](https://www.youtube.com/watch?v=DV8efuB3h2g)
- - [ ] [优雅的压缩数据 (无损数据压缩方法)](https://www.youtube.com/watch?v=goOa3DGezUA)
- - [ ] [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU)
- - [ ] [数据压缩的艺术](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
- - [ ] [(可选) 谷歌开发者: GZIP 还差远了呢!](https://www.youtube.com/watch?v=whGwm0Lky2s)
-
-- ### 网络 (视频)
- - [ ] [可汗学院](https://www.khanacademy.org/computing/computer-science/internet-intro)
- - [ ] [网络传输协议中的数据压缩](https://www.youtube.com/watch?v=Vdc8TCESIg8)
- - [ ] [TCP/IP 和 OSI 模型解析!](https://www.youtube.com/watch?v=e5DEVa9eSN0)
- - [ ] [TCP/IP 教程:传输数据包.](https://www.youtube.com/watch?v=nomyRJehhnM)
- - [ ] [HTTP](https://www.youtube.com/watch?v=WGJrLqtX7As)
- - [ ] [SSL 和 HTTPS](https://www.youtube.com/watch?v=S2iBR2ZlZf0)
- - [ ] [SSL/TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM)
- - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8)
- - [ ] [视频](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j)
- - [ ] [子网络解密 - 第五部分 经典内部域名指向 CIDR 标记](https://www.youtube.com/watch?v=t5xYI0jzOf4)
+ - Computerphile (视频):
+ - [压缩](https://www.youtube.com/watch?v=Lto-ajuqW3w)
+ - [压缩熵值](https://www.youtube.com/watch?v=M5c_RFKVkko)
+ - [由上而下的树 (霍夫曼编码树)](https://www.youtube.com/watch?v=umTbivyJoiI)
+ - [额外比特 - 霍夫曼编码树](https://www.youtube.com/watch?v=DV8efuB3h2g)
+ - [优雅的压缩数据 (无损数据压缩方法)](https://www.youtube.com/watch?v=goOa3DGezUA)
+ - [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU)
+ - [数据压缩的艺术](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
+ - [(可选) 谷歌开发者:GZIP 还差远了呢!](https://www.youtube.com/watch?v=whGwm0Lky2s)
- ### 计算机安全
- - [MIT](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [威胁模型:入门](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [控制攻击](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
- - [ ] [缓冲数据注入和防御](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3)
- - [ ] [优先权区分](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [能力](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [在沙盒中运行原生代码](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6)
- - [ ] [网络安全模型](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [网络安全应用](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [标志化执行](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [网络安全](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [网络协议](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [旁路攻击](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
-
-- ### 释放缓存
- - [ ] [Java 释放缓存; 片段化数据 (视频)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25)
- - [ ] [编译器 (视频)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff)
- - [ ] [Python 释放缓存 (视频)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
- - [ ] [深度解析:论释放缓存在 JAVA 中的重要性](https://www.infoq.com/presentations/garbage-collection-benefits)
- - [ ] [深度解析:论释放缓存在 Python 中的重要性(视频)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
-
-- ### 并行/并发编程
+ - [MIT(23个视频)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [威胁模型:入门](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [控制劫持攻击](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
+ - [缓冲区溢出漏洞攻击和防御](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3)
+ - [优先权区分](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [能力](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [在沙盒中运行原生代码](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6)
+ - [网络安全模型](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [网络安全应用](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [标志化执行](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [网络安全](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [网络协议](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [旁路攻击](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+
+- ### 垃圾回收
+ - [ ] [Python 中的垃圾回收 (视频)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
+ - [ ] [深度解析:论垃圾回收在 JAVA 中的重要性](https://www.infoq.com/presentations/garbage-collection-benefits)
+ - [ ] [深度解析:论垃圾回收在 Python 中的重要性(视频)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
+
+- ### 并行编程
- [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
- - [ ] [论并行/并发编程如何提高 Python 执行效率 (视频)](https://www.youtube.com/watch?v=uY85GkaYzBk)
+ - [ ] [用于高性能并行计算的高效Python(视频)](https://www.youtube.com/watch?v=uY85GkaYzBk)
-- ### 设计模式
- - [ ] [UML统一建模语言概览 (视频)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
- - [ ] 主要有如下的设计模式:
- - [ ] s(strategy)
- - [ ] singleton
- - [ ] adapter
- - [ ] prototype
- - [ ] decorator
- - [ ] visitor
- - [ ] factory, abstract factory
- - [ ] facade
- - [ ] observer
- - [ ] proxy
- - [ ] delegate
- - [ ] command
- - [ ] state
- - [ ] memento
- - [ ] iterator
- - [ ] composite
- - [ ] flyweight
- - [ ] [第六章 (第 1 部分 ) - 设计模式 (视频)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
- - [ ] [第六章 (第 2 部分 ) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (视频)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
- - [ ] [第六章 (第 3 部分 ) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
- - [ ] [视频](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
- - [ ] [Head First 设计模型](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
- - 尽管这本书叫做设计模式:重复使用模块,但是我还是认为Head First是对于新手来说很不错的书。
- - [ ] [基于实际操作对于入门开发者的建议](https://sourcemaking.com/design-patterns-and-tips)
-
-- ### 信息传输, 序列化,和队列化的系统
- - [ ] [Thrift](https://thrift.apache.org/)
+- ### 消息传递,序列化和队列系统
+ - [Thrift](https://thrift.apache.org/)
- [教程](http://thrift-tutorial.readthedocs.io/en/latest/intro.html)
- - [ ] [协议缓冲](https://developers.google.com/protocol-buffers/)
+ - [协议缓冲](https://developers.google.com/protocol-buffers/)
- [教程](https://developers.google.com/protocol-buffers/docs/tutorials)
- - [ ] [gRPC](http://www.grpc.io/)
+ - [gRPC](http://www.grpc.io/)
- [gRPC 对于JAVA开发者的入门教程(视频)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1)
- - [ ] [Redis](http://redis.io/)
+ - [Redis](http://redis.io/)
- [教程](http://try.redis.io/)
- - [ ] [Amazon的 SQS 系统 (队列)](https://aws.amazon.com/sqs/)
- - [ ] [Amazon的 SNS 系统 (pub-sub)](https://aws.amazon.com/sns/)
- - [ ] [RabbitMQ](https://www.rabbitmq.com/)
+ - [Amazon的 SQS 系统 (队列)](https://aws.amazon.com/sqs/)
+ - [Amazon的 SNS 系统 (pub-sub)](https://aws.amazon.com/sns/)
+ - [RabbitMQ](https://www.rabbitmq.com/)
- [入门教程](https://www.rabbitmq.com/getstarted.html)
- - [ ] [Celery](http://www.celeryproject.org/)
+ - [Celery](http://www.celeryproject.org/)
- [Celery入门](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)
- - [ ] [ZeroMQ](http://zeromq.org/)
+ - [ZeroMQ](http://zeromq.org/)
- [入门教程](http://zeromq.org/intro:read-the-manual)
- - [ ] [ActiveMQ](http://activemq.apache.org/)
- - [ ] [Kafka](http://kafka.apache.org/documentation.html#introduction)
- - [ ] [MessagePack](http://msgpack.org/index.html)
- - [ ] [Avro](https://avro.apache.org/)
+ - [ActiveMQ](http://activemq.apache.org/)
+ - [Kafka](http://kafka.apache.org/documentation.html#introduction)
+ - [MessagePack](http://msgpack.org/index.html)
+ - [Avro](https://avro.apache.org/)
+
+- ### A*搜索算法
+
+ - [A 搜索算法](https://en.wikipedia.org/wiki/A*_search_algorithm)
+ - [A* 路径搜索教程(教程)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
+ - [A* 路径搜索(E01:算法解释)(视频)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
- ### 快速傅里叶变换
- - [ ] [什么是傅立叶变换?论傅立叶变换的用途](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
- - [ ] [什么是傅立叶变换? (视频)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
- - [ ] [关于 FFT 的不同观点 (视频)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4)
- - [ ] [FTT 是什么](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
+ - [傅立叶变换的交互式指南](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
+ - [什么是傅立叶变换?论傅立叶变换的用途](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
+ - [什么是傅立叶变换? (视频)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
+ - [分而治之:FFT(视频)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4)
+ - [FTT 是什么](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
- ### 布隆过滤器
- - 给一个布隆过滤器m比特和k个哈希函数,所有的注入和相关测试都会是通过。
- - [布隆过滤器](https://www.youtube.com/watch?v=-SuTGoFYjZs)
- - [布隆过滤器 | 数据挖掘 | Stanford University](https://www.youtube.com/watch?v=qBTdukbzc78)
+ - 给定布隆过滤器m比特位和k个哈希函数,插入和成员检测都会是 O(k)。
+ - [布隆过滤器(视频)](https://www.youtube.com/watch?v=-SuTGoFYjZs)
+ - [布隆过滤器 | 数据挖掘 | Stanford University(视频)](https://www.youtube.com/watch?v=qBTdukbzc78)
- [教程](http://billmill.org/bloomfilter-tutorial/)
- [如何写一个布隆过滤器应用](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/)
+- ### HyperLogLog
+ - [如何仅使用1.5KB内存计算十亿个不同的对象](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html)
+
+- ### 局部敏感哈希
+ - 用于确定文件的相似性
+ - MD5 或 SHA 的反义词,用于确定2个文档/字符串是否完全相同
+ - [Simhashing(希望如此)变得简单](http://ferd.ca/simhashing-hopefully-made-simple.html)
+
- ### van Emde Boas 树
- - [ ] [争论: van Emde Boas 树 (视频)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
- - [ ] [MIT课堂笔记](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf)
+ - [分而治之:van Emde Boas 树 (视频)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
+ - [MIT课堂笔记](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf)
-- ### 更深入的数据结构
- - [ ] [CS 61B 第 39 课: 更深入的数据结构](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950)
+- ### 增强数据结构
+ - [CS 61B 第 39 课: 增强数据结构](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950)
+
+- ### 平衡查找树(Balanced search trees)
+ - 掌握至少一种平衡查找树(并懂得如何实现):
+ - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的键。” —— Skiena
+ - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。
+ - 伸展树:插入、查找、删除函数的实现,而如果你最终实现了红黑树,那么请尝试一下:
+ - 跳过删除函数,直接实现搜索和插入功能
+ - 我希望能阅读到更多关于 B 树的资料,因为它也被广泛地应用到大型的数据集当中。
+ - [自平衡二叉查找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
+
+ - **AVL 树**
+ - 实际中:我能告诉你的是,该种树并无太多的用途,但我能看到有用的地方在哪里:AVL 树是另一种平衡查找树结构。其可支持时间复杂度为 O(log n) 的查询、插入及删除。它比红黑树严格意义上更为平衡,从而导致插入和删除更慢,但遍历却更快。正因如此,才彰显其结构的魅力。只需要构建一次,就可以在不重新构造的情况下读取,适合于实现诸如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。
+ - [MIT AVL 树 / AVL 树的排序(视频)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
+ - [AVL 树(视频)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
+ - [AVL 树的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
+ - [分离与合并](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
+
+ - **伸展树**
+ - 实际中:伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes(字符串的一种替代品,用于存储长串的文本字符)、Windows NT(虚拟内存、网络及文件系统)等的实现。
+ - [CS 61B:伸展树(Splay trees)(视频)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
+ - MIT 教程:伸展树(Splay trees):
+ - 该教程会过于学术,但请观看到最后的10分钟以确保掌握。
+ - [视频](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
+
+ - **红黑树**
+ - 这些是2-3棵树的翻译(请参见下文)。
+ - 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用,还对在其他数据结构中块的构建非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 内核所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。在 Java 8中,Collection HashMap也从原本用Linked List实现,储存特定元素的哈希码,改为用红黑树实现。
+ - [Aduni —— 算法 —— 课程4(该链接直接跳到开始部分)(视频)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
+ - [Aduni —— 算法 —— 课程5(视频)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
+ - [黑树(Black Tree)](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
+ - [二分查找及红黑树的介绍](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树。这是因为,其实现过程中涉及到不同类型的节点。因此,人们更多地会选择红黑树。
+ - [2-3树的直感与定义(视频)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
+ - [2-3树的二元观点](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [2-3树(学生叙述)(视频)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+ - **2-3-4树 (亦称2-4树)**
+ - 实际中:对于每一棵2-4树,都有着对应的红黑树来存储同样顺序的数据元素。在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。这就是为什么许多算法引导文章都会在介绍红黑树之前,先介绍2-4树,尽管**2-4树在实际中并不经常使用**。
+ - [CS 61B Lecture 26:平衡查找树(视频)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C)
+ - [自底向上的2-4树(视频)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [自顶向下的2-4树(视频)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
+
+ - **N 叉树(K 叉树、M 叉树)**
+ - 注意:N 或 K 指的是分支系数(即树的最大分支数):
+ - 二叉树是一种分支系数为2的树
+ - 2-3树是一种分支系数为3的树
+ - [K 叉树](https://en.wikipedia.org/wiki/K-ary_tree)
+
+ - **B 树**
+ - 有趣的是:为啥叫 B 仍然是一个神秘。因为 B 可代表波音(Boeing)、平衡(Balanced)或 Bayer(联合创造者)
+ - 实际中:B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中,B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。
+ - [B 树](https://en.wikipedia.org/wiki/B-tree)
+ - [B 树数据结构](http://btechsmartclass.com/data_structures/b-trees.html)
+ - [B 树的介绍(视频)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
+ - [B 树的定义及其插入操作(视频)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [B 树的删除操作(视频)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [MIT 6.851 —— 内存层次模块(Memory Hierarchy Models)(视频)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+ - 覆盖有高速缓存参数无关型(cache-oblivious)B 树和非常有趣的数据结构
+ - 头37分钟讲述的很专业,或许可以跳过(B 指块的大小、即缓存行的大小)
+
+- ### k-D树
+ - 非常适合在矩形或更高维度的对象中查找点数
+ - 最适合k近邻
+ - [Kd树(视频)](https://www.youtube.com/watch?v=W94M9D_yXKk)
+ - [kNN K-d树算法(视频)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
- ### 跳表
- "有一种非常迷幻的数据类型" - Skiena
- - [ ] [随机化: 跳表 (视频)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [更生动详细的解释](https://en.wikipedia.org/wiki/Skip_list)
+ - [随机化: 跳表 (视频)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [更生动详细的解释](https://en.wikipedia.org/wiki/Skip_list)
- ### 网络流
- - [ ] [5分钟简析Ford-Fulkerson (视频)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
- - [ ] [Ford-Fulkerson 算法 (视频)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
- - [ ] [网络流 (视频)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
+ - [5分钟简析 Ford-Fulkerson──一步步示例 (视频)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
+ - [Ford-Fulkerson 算法 (视频)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
+ - [网络流 (视频)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
- ### 不相交集 & 联合查找
- - [ ] [不相交集](https://en.wikipedia.org/wiki/Disjoint-set_data_structure)
- - [ ] [UCB 61B - 不相交集; 排序 & 选择(视频)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21)
- - [ ] Coursera (not needed since the above video explains it great):
- - [ ] [概览](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
- - [ ] [初级实践](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
- - [ ] [树状结构](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
- - [ ] [合并树状结构](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank)
- - [ ] [路径压缩](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression)
- - [ ] [分析选项](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
-
-- ### 快速处理数学
- - [ ] [整数运算, Karatsuba 乘法 (视频)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [中国剩余定理 (在密码学中的使用) (视频)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
+ - [UCB 61B - 不相交集;排序 & 选择(视频)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21)
+ - [Sedgewick算法──Union-Find(6视频)](https://www.coursera.org/learn/algorithms-part1/home/week/1)
+
+- ### 快速处理的数学
+ - [整数运算, Karatsuba 乘法 (视频)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [中国剩余定理 (在密码学中的使用) (视频)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
- ### 树堆 (Treap)
- 一个二叉搜索树和一个堆的组合
- - [ ] [树堆](https://en.wikipedia.org/wiki/Treap)
- - [ ] [数据结构:树堆的讲解(video)](https://www.youtube.com/watch?v=6podLUYinH8)
- - [ ] [集合操作的应用(Applications in set operations)](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
+ - [树堆](https://en.wikipedia.org/wiki/Treap)
+ - [数据结构:树堆的讲解(视频)](https://www.youtube.com/watch?v=6podLUYinH8)
+ - [集合操作的应用(Applications in set operations)](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
- ### 线性规划(Linear Programming)(视频)
- - [ ] [线性规划](https://www.youtube.com/watch?v=M4K6HYLHREQ)
- - [ ] [寻找最小成本](https://www.youtube.com/watch?v=2ACJ9ewUC6U)
- - [ ] [寻找最大值](https://www.youtube.com/watch?v=8AA_81xI3ik)
+ - [线性规划](https://www.youtube.com/watch?v=M4K6HYLHREQ)
+ - [寻找最小成本](https://www.youtube.com/watch?v=2ACJ9ewUC6U)
+ - [寻找最大值](https://www.youtube.com/watch?v=8AA_81xI3ik)
+ - [用 Python 解决线性方程式──单纯形算法](https://www.youtube.com/watch?v=44pAWI7v5Zk)
- ### 几何:凸包(Geometry, Convex hull)(视频)
- - [ ] [Graph Alg. IV: 几何算法介绍 - 第 9 课](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
- - [ ] [Graham & Jarvis: 几何算法 - 第 10 课](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- - [ ] [Divide & Conquer: 凸包, 中值查找](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
+ - [Graph Alg. IV: 几何算法介绍 - 第 9 课](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
+ - [Graham & Jarvis: 几何算法 - 第 10 课](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [分而治之: 凸包, 中值查找](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
- ### 离散数学
- - 查看下面的视频:(这里没看到视频= =)
+ - 查看下面的视频
- ### 机器学习(Machine Learning)
- - [ ] 为什么学习机器学习?
- - [ ] [谷歌如何将自己改造成一家「机器学习优先」公司?](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70)
- - [ ] [智能计算机系统的大规模深度学习 (视频)](https://www.youtube.com/watch?v=QSaZGT4-6EY)
- - [ ] [Peter Norvig:深度学习和理解与软件工程和验证的对比](https://www.youtube.com/watch?v=X769cyzBNVw)
- - [ ] [谷歌云机器学习工具(视频)](https://www.youtube.com/watch?v=Ja2hxBAwG_0)
- - [ ] [谷歌开发者机器学习清单 (Scikit Learn 和 Tensorflow) (视频)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal)
- - [ ] [Tensorflow (视频)](https://www.youtube.com/watch?v=oZikw5k_2FM)
- - [ ] [Tensorflow 教程](https://www.tensorflow.org/versions/r0.11/tutorials/index.html)
- - [ ] [Python 实现神经网络实例教程(使用 Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)
+ - 为什么学习机器学习?
+ - [谷歌如何将自己改造成一家「机器学习优先」公司?](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70)
+ - [智能计算机系统的大规模深度学习 (视频)](https://www.youtube.com/watch?v=QSaZGT4-6EY)
+ - [Peter Norvig:深度学习和理解与软件工程和验证的对比](https://www.youtube.com/watch?v=X769cyzBNVw)
+ - [谷歌云机器学习工具(视频)](https://www.youtube.com/watch?v=Ja2hxBAwG_0)
+ - [谷歌开发者机器学习清单 (Scikit Learn 和 Tensorflow) (视频)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal)
+ - [Tensorflow (视频)](https://www.youtube.com/watch?v=oZikw5k_2FM)
+ - [Tensorflow 教程](https://www.tensorflow.org/versions/r0.11/tutorials/index.html)
+ - [Python 实现神经网络实例教程(使用 Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)
- 课程:
- - [ ] [很棒的初级课程:机器学习](https://www.coursera.org/learn/machine-learning)
- - [视频教程](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW)
- - 看第 12-18 集复习线性代数(第 14 集和第 15 集是重复的)
- - [ ] [机器学习中的神经网络](https://www.coursera.org/learn/neural-networks)
- - [ ] [Google 深度学习微学位](https://www.udacity.com/course/deep-learning--ud730)
- - [ ] [Google/Kaggle 机器学习工程师微学位](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009)
- - [ ] [无人驾驶工程师微学位](https://www.udacity.com/drive)
- - [ ] [Metis 在线课程 (两个月 99 美元)](http://www.thisismetis.com/explore-data-science)
+ - [很棒的初级课程:机器学习](https://www.coursera.org/learn/machine-learning)
+ - [视频教程](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW)
+ - 看第 12-18 集复习线性代数(第 14 集和第 15 集是重复的)
+ - [机器学习中的神经网络](https://www.coursera.org/learn/neural-networks)
+ - [Google 深度学习微学位](https://www.udacity.com/course/deep-learning--ud730)
+ - [Google/Kaggle 机器学习工程师微学位](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009)
+ - [无人驾驶工程师微学位](https://www.udacity.com/drive)
+ - [Metis 在线课程 (两个月 99 美元)](http://www.thisismetis.com/explore-data-science)
- 资源:
- - 书籍: Data Science from Scratch: First Principles with Python: https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X
- - 网站: Data School: http://www.dataschool.io/
-
-- ### Go 语言
- - [ ] 视频:
- - [ ] [为什么学习 Go 语言?](https://www.youtube.com/watch?v=FTl0tl9BGdc)
- - [ ] [Go 语言编程](https://www.youtube.com/watch?v=CF9S4QZuV30)
- - [ ] [Go 语言之旅](https://www.youtube.com/watch?v=ytEkHepK08c)
- - [ ] 书籍:
- - [ ] [Go 语言编程入门 (免费在线阅读)](https://www.golang-book.com/books/intro)
- - [ ] [Go 语言圣经 (Donovan & Kernighan)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440)
- - [ ] [Go 语言新手训练营](https://www.golang-book.com/guides/bootcamp)
+ - 书籍:
+ - [Python 机器学习](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/)
+ - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X)
+ - [Python 机器学习简介](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/)
+ - [软件工程师的机器学习](https://github.com/ZuzooVn/machine-learning-for-software-engineers)
+ - Data School:http://www.dataschool.io/
--
## 一些主题的额外内容
-
+
我为前面提到的某些主题增加了一些额外的内容,之所以没有直接添加到前面,是因为这样很容易导致某个主题内容过多。毕竟你想在本世纪找到一份工作,对吧?
-- [ ] **动态规划的更多内容** (视频)
- - [ ] [6.006: 动态规划 I: 斐波那契数列, 最短路径](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19)
- - [ ] [6.006: 动态规划 II: 文本匹配, 二十一点/黑杰克](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20)
- - [ ] [6.006: 动态规划 III: 最优加括号方式, 最小编辑距离, 背包问题](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21)
- - [ ] [6.006: 动态规划 IV: 吉他指法,拓扑,超级马里奥.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [6.046: 动态规划: 动态规划进阶](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [6.046: 动态规划: 所有点对最短路径](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15)
- - [ ] [6.046: 动态规划: 更多示例](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
-
-- [ ] **图形处理进阶** (视频)
- - [ ] [异步分布式算法: 对称性破缺,最小生成树](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
- - [ ] [异步分布式算法: 最小生成树](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
-
-- [ ] MIT **概率论** (mathy, and go slowly, which is good for mathy things) (视频):
- - [ ] [MIT 6.042J - 概率论概述](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - 条件概率 Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - 独立](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - 随机变量](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21)
- - [ ] [MIT 6.042J - 期望 I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - 期望 II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - 大偏差](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - 随机游走](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25)
-
-- [ ] [Simonson: 近似算法 (视频)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
+- SOLID
+
+ - [ ] [Bob Martin SOLID面向对象和敏捷设计的原理(视频)](https://www.youtube.com/watch?v=TMuno5RZNeE)
+ - [ ] S ── [单一责任原则](http://www.oodesign.com/single-responsibility-principle.html) | [对每个对象的单一责任](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
+ - [更多](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
+ - [ ] O ── [开放/封闭原则](http://www.oodesign.com/open-close-principle.html) | [在生产级别上,可以扩展对象,但不能修改对象](https://en.wikipedia.org/wiki/Open/closed_principle)
+ - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
+ - [ ] L ── [Liskov 替换原则](http://www.oodesign.com/liskov-s-substitution-principle.html) | [基本类别和派生类别遵循“IS A”原则](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
+ - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
+ - [ ] I ── [接口隔离原理](http://www.oodesign.com/interface-segregation-principle.html) | 不应强迫客户端实现不使用的接口
+ - [5分钟了解接口隔离原理(视频)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
+ - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
+ - [ ] D ── [依赖倒置原理](http://www.oodesign.com/dependency-inversion-principle.html) | 减少对象组合中的依赖性。
+ - [依赖倒置原理为何如此重要?](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
+ - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
+
+- Union-Find
+ - [概览](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
+ - [初级实践](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
+ - [树状结构](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
+ - [合并树状结构](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank)
+ - [路径压缩](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression)
+ - [分析选项](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
+
+- **动态规划的更多内容** (视频)
+ - [6.006: 动态规划 I: 斐波那契数列, 最短路径](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19)
+ - [6.006: 动态规划 II: 文本匹配, 二十一点/黑杰克](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20)
+ - [6.006: 动态规划 III: 最优加括号方式, 最小编辑距离, 背包问题](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21)
+ - [6.006: 动态规划 IV: 吉他指法,拓扑,超级马里奥.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [6.046: 动态规划: 动态规划进阶](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [6.046: 动态规划: 所有点对最短路径](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15)
+ - [6.046: 动态规划: 更多示例](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
+
+- **图形处理进阶** (视频)
+ - [异步分布式算法: 对称性破缺,最小生成树](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
+ - [异步分布式算法: 最小生成树](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
+
+- MIT **概率论** (过于数学,进度缓慢,但这对于数学的东西却是必要之恶) (视频):
+ - [MIT 6.042J - 概率论概述](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - 条件概率 Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - 独立](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - 随机变量](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21)
+ - [MIT 6.042J - 期望 I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - 期望 II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - 大偏差](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - 随机游走](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25)
+
+- [Simonson: 近似算法 (视频)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
+
+- **字符串匹配**
+
+ - Rabin-Karp(视频)
+ - [Rabin Karps 算法](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm)
+ - [预计算](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation)
+ - [优化:实施和分析](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis)
+ - [表翻倍,Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9)
+ - [滚动哈希,摊销分析](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32)
+ - Knuth-Morris-Pratt (KMP):
+ - [Knuth-Morris-Pratt(KMP)字符串匹配算法](https://www.youtube.com/watch?v=5i7oKodCRJo)
+ - Boyer–Moore 字符串搜索算法
+ - [Boyer–Moore 字符串搜索算法](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm)
+ - [高级字符串搜索Boyer-Moore-Horspool算法(视频)](https://www.youtube.com/watch?v=QDZpzctPf10)
+ - [Coursera:字符串算法](https://www.coursera.org/learn/algorithms-on-strings/home/week/1)
+ - 刚开始时很棒,但是当它超过 KMP 时,它变得比需要复杂得多
+ - 很好的字典树解释
+ - 可以跳过
+
+- **排序**
+
+ - 斯坦福大学关于排序算法的视频:
+ - [课程 15 | 编程抽象(视频)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69)
+ - [课程 16 | 编程抽象(视频)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69)
+
+ - Shai Simonson 视频,[Aduni.org](http://www.aduni.org/):
+ - [算法 - 排序 - 第二讲(视频)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2)
+ - [算法 - 排序2 - 第三讲(视频)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3)
+
+ - Steven Skiena 关于排序的视频:
+ - [课程从 26:46 开始(视频)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600)
+ - [课程从 27:40 开始(视频)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [课程从 35:00 开始(视频)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [课程从 23:50 开始(视频)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
## 视频系列
- 坐下来享受一下吧。"netflix and skill" :P
+ 坐下来享受一下吧。"netflix 和技能" :P
+
+- [个人的动态规划问题列表 (都是短视频)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
-- [ ] [个人的动态规划问题列表 (都是短视频哟)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+- [x86 架构,汇编,应用程序 (11 个视频)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0)
-- [ ] [x86 架构,汇编,应用程序 (11 个视频)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0)
+- [MIT 18.06 线性代数,2005 年春季 (35 个视频)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8)
-- [ ] [MIT 18.06 线性代数,2005 年春季 (35 个视频)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8)
+- [绝妙的 MIT 微积分:单变量微积分](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A)
-- [ ] [绝妙的 MIT 微积分:单变量微积分](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A)
+- [计算机科学 70, 001 - 2015 年春季 - 离散数学和概率理论](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy)
-- [ ] [计算机科学 70, 001 - 2015 年春季 - 离散数学和概率理论](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy)
+- [离散数学 (19 个视频)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG)
-- [ ] [离散数学 (19 个视频)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG)
+- [离散数学(第一部分),Sarada Herke (5个视频)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo)
-- [ ] CSE373 - 算法分析 (25 个视频)
+- CSE373 - 算法分析 (25 个视频)
- [Skiena 的算法设计手册讲座](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1)
-- [ ] [UC Berkeley 61B (2014 年春季): 数据结构 (25 个视频)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
+- [UC Berkeley 61B (2014 年春季): 数据结构 (25 个视频)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
-- [ ] [UC Berkeley 61B (2006 年秋季): 数据结构 (39 个视频)]( https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C)
+- [UC Berkeley 61B (2006 年秋季): 数据结构 (39 个视频)](https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C)
-- [ ] [UC Berkeley 61C: 计算机结构 (26 个视频)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_)
+- [UC Berkeley 61C:计算机结构 (26 个视频)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_)
-- [ ] [OOSE: 使用 UML 和 Java 进行软件开发 (21 个视频)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+- [OOSE:使用 UML 和 Java 进行软件开发 (21 个视频)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
-- [ ] [UC Berkeley CS 152: 计算机结构和工程 (20 个视频)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)
+- [UC Berkeley CS 152: 计算机结构和工程 (20 个视频)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)
-- [ ] [MIT 6.004: 计算结构 (49 视频)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+- [MIT 6.004: 计算结构 (49 视频)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
-- [ ] [卡內基梅隆大学 - 计算机架构讲座 (39 个视频)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq)
+- [卡內基梅隆大学 - 计算机架构讲座 (39 个视频)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq)
-- [ ] [MIT 6.006: 算法介绍 (47 个视频)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False)
+- [MIT 6.006:算法介绍 (47 个视频)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False)
-- [ ] [MIT 6.033: 计算机系统工程 (22 个视频)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484)
+- [MIT 6.033:计算机系统工程 (22 个视频)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484)
-- [ ] [MIT 6.034 人工智能, 2010 年秋季 (30 个视频)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi)
+- [MIT 6.034:人工智能,2010 年秋季 (30 个视频)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi)
-- [ ] [MIT 6.042J: 计算机科学数学, 2010 年秋季 (25 个视频)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B)
+- [MIT 6.042J:计算机科学数学, 2010 年秋季 (25 个视频)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B)
-- [ ] [MIT 6.046: 算法设计与分析 (34 个视频)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+- [MIT 6.046:算法设计与分析 (34 个视频)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
-- [ ] [MIT 6.050J: 信息和熵, 2008 年春季 (19 个视频)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7)
+- [MIT 6.050J:信息和熵, 2008 年春季 (19 个视频)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7)
-- [ ] [MIT 6.851: 高等数据结构 (22 个视频)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1)
+- [MIT 6.851:高等数据结构 (22 个视频)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1)
-- [ ] [MIT 6.854: 高等算法, 2016 年春季 (24 个视频)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c)
+- [MIT 6.854: 高等算法, 2016 年春季 (24 个视频)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c)
-- [ ] [MIT 6.858计算机系统安全, 2014 年秋季](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+- [Harvard COMPSCI 224:高级算法(25个视频)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf)
-- [ ] 斯坦福: 编程范例 (17 个视频)
- - [C 和 C++ 课程](https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False)
+- [MIT 6.858:计算机系统安全, 2014 年秋季](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
-- [ ] [密码学导论](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be)
- - [本系列更多内容 (不分先后顺序)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg)
+- [斯坦福: 编程范例 (27 个视频)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02)
-- [ ] [大数据 - 斯坦福大学 (94 个视频)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
+- [密码学导论,Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
+ - [课程网站以及幻灯片和问题集](http://www.crypto-textbook.com/)
+
+- [大数据 - 斯坦福大学 (94 个视频)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
+
+- [图论,Sarada Herke(67个视频)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
## 计算机科学课程
-- [ 在线 CS 课程目录 ](https://github.com/open-source-society/computer-science)
+- [在线 CS 课程目录](https://github.com/open-source-society/computer-science)
- [CS 课程目录 (一些是在线讲座)](https://github.com/prakhar1989/awesome-courses)
+
+## 论文
+
+- [喜欢经典的论文?](https://www.cs.cmu.edu/~crary/819-f09/)
+- [1978: 通信顺序处理](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
+ - [Go 实现](https://godoc.org/github.com/thomas11/csp)
+- [2003: The Google 文件系统](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
+ - 2012 年被 Colossus 取代了
+- [2004: MapReduce: Simplified Data Processing on Large Clusters](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
+ - 大多被云数据流取代了?
+- [2006年:Bigtable:结构化数据的分布式存储系统](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
+ - [深入了解Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf)
+- [2006年:针对松散耦合的分布式系统的Chubby Lock服务](https://research.google.com/archive/chubby-osdi06.pdf)
+- [2007年:Dynamo:亚马逊的高可用键值存储](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf)
+ - Dynamo论文启动了NoSQL革命
+- [2007: 每个程序员都应该知道的内存知识 (非常长,作者建议跳过某些章节来阅读)](https://www.akkadia.org/drepper/cpumemory.pdf)
+- [2010年:Dapper,一个大型分布式系统跟踪基础结构](https://research.google.com/pubs/archive/36356.pdf)
+- [2010年:Dremel:Web规模数据集的交互式分析](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf)
+- [2012: Google 的 Colossus](https://www.wired.com/2012/07/google-colossus/)
+ - 没有论文
+- 2012: AddressSanitizer: 快速的内存访问检查器:
+ - [论文](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
+ - [视频](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
+- 2013: Spanner: Google 的分布式数据库:
+ - [论文](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
+ - [视频](https://www.usenix.org/node/170855)
+- [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
+- [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
+- [2015: 大规模高可用: 构建 Google Ads 的数据基础设施](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
+- [2015: TensorFlow: 异构分布式系统上的大规模机器学习](http://download.tensorflow.org/paper/whitepaper2015.pdf )
+- [2015: 开发者应该如何搜索代码:用例学习](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
+- [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
+
+## LICENSE
+
+[CC-BY-SA-4.0](https://github.com/jwasham/coding-interview-university/blob/main/LICENSE.txt)
diff --git a/translations/README-de.md b/translations/README-de.md
index e5a91da11d..68594c8b6a 100644
--- a/translations/README-de.md
+++ b/translations/README-de.md
@@ -225,7 +225,7 @@ Ich benutze GitHub's spezielle Version von Markdown, das beinhält Aufgabenliste
`git commit -m "Marked x"`
-`git rebase jwasham/master`
+`git rebase jwasham/main`
`git push --force`
@@ -433,8 +433,8 @@ Ich habe eine mobile-first Webseite gemacht, damit ich auf meinen Smartphone ode
Erstell kostenlos deine eigenen Lernkarten:
- [Lernkarten-Webseiten Repo](https://github.com/jwasham/computer-science-flash-cards)
-- [Meine Lernkarten Databank (alt - 1200 Karten)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [Meine Lernkarten Databank (neu - 1800 Karten)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [Meine Lernkarten Databank (alt - 1200 Karten)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [Meine Lernkarten Databank (neu - 1800 Karten)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
Achtung, ich habe es übertrieben und Lernkarten über alles erstellt, von Assembly und Python Trivia bis hin zu Machine Learning und Statistik. Das ist viel mehr als eigentlich notwendig.
@@ -693,7 +693,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit
- Binärsuche mittels Rekursion
- ### Bitweise Operationen
- - [ ] [Bits Spickzettel](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - man sollte viele der Zweierpotenzen kennen (von 2^1 über 2^16 und 2^32)
+ - [ ] [Bits Spickzettel](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - man sollte viele der Zweierpotenzen kennen (von 2^1 über 2^16 und 2^32)
- [ ] Erhalte sehr gutes Verständnis Bits zu manipulieren mit: &, |, ^, ~, >>, <<
- [ ] [Wörter](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Gute Einführung:
@@ -727,7 +727,6 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit
Trees (Bäume)
- ### Trees - Notizen und Hintergrund
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- generell Baumerstellung
- Traversieren (Durchlaufen)
@@ -1309,7 +1308,7 @@ Graphen können genutzt werden, um damit viele verschiedene Probleme in der Info
- [ ] Übe den Prozess des Systementwurfs: Hier sind ein paar Ideen, die man auf Papier durchspielen kann, jede mit einer Dokumentation wie es in der echten Welt umgesetzt wurde:
- Review: [The System Design Primer](https://github.com/donnemartin/system-design-primer)
- [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [Spickzettel](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [Spickzettel](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- Ablauf:
1. Verstehe das Problem und den Umfang:
- definiere den Anwendungsfall, was dem Interviewer helfen wird
diff --git a/translations/README-es.md b/translations/README-es.md
index f3c244d05a..7952272134 100644
--- a/translations/README-es.md
+++ b/translations/README-es.md
@@ -1,6 +1,6 @@
# Coding Interview University
-- Versión original: [Inglés](README.md)
+- Versión original: [Inglés](../README.md)
> Originalmente creé esto como una lista corta de tópicos a estudiar para volverse un Ingeniero de Software, pero creció hasta ser la gran lista puede apreciar actualmente. Después de pasar por este plan de estudios ¡[fui contratado como Ingeniero de Desarrollo de Software en Amazon!(Art. Inglés)](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)
@@ -172,7 +172,7 @@ Si desea ser un Ingeniero de Escalabilidad/Seguridad o un Ingeniero de Sistemas,
Cuando comencé este proyecto, no sabía la diferencia entre un stack y un heap, no conocía la notación Big-O, nada acerca de árboles, ni cómo sacar la transversal de una gráfica. Si tenía que programar un algoritmo de clasificación, puedo decir que no hubiera sido muy bueno. Cada estructura de datos que había utilizado estaba incorporada al lenguaje, y yo no sabía cómo funcionaban realmente. Yo nunca tuve que manejar la memoria a menos que un proceso que yo estaba corriendo diera un error de “out of memory”, y tenía que encontrar una alternativa. He usado pocos arreglos de varias dimensiones en mi vida y miles de arreglos asociativos, pero nunca he creado estructuras de datos desde cero.
-Pero después de pasar por todo este plan de estudios tengo mucha confianza de que seré contratado. Me toará meses. Si mucho de esto te resulta familiar entonces te tomará mucho menos tiempo.
+Pero después de pasar por todo este plan de estudios tengo mucha confianza de que seré contratado. Me tomará meses. Si mucho de esto te resulta familiar entonces te tomará mucho menos tiempo.
Es un plan largo, puede tome unos meses; pero si le resulta familiar mucho de esto le tomara mucho menos tiempo.
@@ -199,7 +199,7 @@ Estoy usando el tema especial de markdown de Github, incluyendo listas de tareas
`git commit -m "Marked x" `
-`git rebase jwasham/master `
+`git rebase jwasham/main `
`git push --force `
@@ -406,8 +406,8 @@ Hice un sitio adaptado a moviles para revisarlo en mi celular y en mi Tablet, do
Haga el suyo gratis:
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
-- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
Tenga en cuenta que empecé desde abajo y hay tarjetas que cubren todo, desde el lenguaje ensamblador y la trivia Python al Machine Learning y estadísticas. Es demasiado para lo que se requiere.
@@ -415,7 +415,7 @@ Tenga en cuenta que empecé desde abajo y hay tarjetas que cubren todo, desde el
Una alternativa a usar mi sitio de tarjetas es [Anki](http://ankisrs.net/), que me ha sido recomendado muchas veces. Usa un sistema de repetición para ayudarle a recordar. Es amigable con el usuario y disponible para todas las plataformas y tiene un sistema de sincronización en la nube. Cuesta $25 en iOS pero es gratuito en las otras plataformas.
-Mis tarjetas en ek formato de Anki: https://ankiweb.net/shared/info/25173560 (Gracias[@xiewenya](https://github.com/xiewenya))
+Mis tarjetas en el formato de Anki: https://ankiweb.net/shared/info/25173560 (Gracias[@xiewenya](https://github.com/xiewenya))
### 3. Revise, revise, revise
@@ -636,7 +636,7 @@ Escriba código en un pizarrón o en papel no en la computadora. Pruebe con algu
- Búsqueda binaria usando recursión
- ### Operaciones bit a bit
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - Debería conocer varias de las potencias de 2 a partir de (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - Debería conocer varias de las potencias de 2 a partir de (2^1 to 2^16 and 2^32)
- [ ] Obtenga un buen entendimiento de la manipulación de bits con: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Buena introducción:
@@ -664,7 +664,6 @@ Escriba código en un pizarrón o en papel no en la computadora. Pruebe con algu
## Árboles
- ### Árboles - Notas & Antecedentes
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- Construcción básica de árboles
- Recorrido
@@ -1255,7 +1254,7 @@ Obtendrá más práctica de grafos en el libro de Skiena (vea Sección de libros
- [ ] Practicando el proceso de diseño del sistema: Aquí hay algunas ideas para tratar de trabajar en papel, cada una con cierta documentación sobre cómo se manejó en el mundo real:
- Revisión: [The System Design Primer](https://github.com/donnemartin/system-design-primer)
- [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- Flujo:
1. Comprender el problema y el alcance:
- Definir los casos de uso, con ayuda del entrevistador
diff --git a/translations/README-fr.md b/translations/README-fr.md
index c66547f939..b9791ec262 100644
--- a/translations/README-fr.md
+++ b/translations/README-fr.md
@@ -1,6 +1,6 @@
# Coding Interview University
-Translations:
+Traductions:
- [中文版本](README-cn.md)
- [Español (in progress)](README-es.md) [Issue #80](https://github.com/jwasham/coding-interview-university/issues/80)
- मानक हिन्दी (in progress) [Issue #81](https://github.com/jwasham/coding-interview-university/issues/81)
@@ -32,7 +32,7 @@ Si vous souhaitez devenir ingénieur de fiabilité, ou ingénieur systèmes, sui
- [Se mettre dans l'humeur Googley](#get-in-a-googley-mood)
- [J'ai décroché le Job?](#did-i-get-the-job)
- [Follow Along with Me](#follow-along-with-me)
-- [Don't feel you aren't smart enough](#dont-feel-you-arent-smart-enough)
+- [Ne vous sentez pas stupide](#ne-vous-sentez-pas-stupide)
- [A propos de Google](#about-google)
- [A propos des ressources vidéo](#about-video-resources)
- [Déroulement de l'entretien & préparations générales à l'entretien](#interview-process--general-interview-prep)
@@ -188,7 +188,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr
`git commit -m "Marked x" `
-`git rebase jwasham/master `
+`git rebase jwasham/main `
`git push --force `
@@ -196,9 +196,9 @@ I'm using Github's special markdown flavor, including tasks lists to check progr
## Get in a Googley Mood
-Print out a "[future Googler](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)" sign (or two) and keep your eyes on the prize.
+Print out a "[future Googler](https://github.com/jwasham/coding-interview-university/blob/main/extras/future-googler.pdf)" sign (or two) and keep your eyes on the prize.
-[![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)
+[![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/coding-interview-university/blob/main/extras/future-googler.pdf)
## Did I Get the Job?
@@ -220,35 +220,35 @@ I'm on the journey, too. Follow along:
![John Washam - Coding Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png)
-## Don't feel you aren't smart enough
-- Google engineers are smart, but many have an insecurity that they aren't smart enough, even though they work at Google.
-- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ)
-- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY)
+## Ne vous sentez pas stupide
+- Les ingénieurs de Google sont intelligents, mais beaucoup ont comme insécurité qu'ils ne sont pas suffisamment intelligents, même s'ils travaillent pour Google.
+- [Le mythe du programmeur génie](https://www.youtube.com/watch?v=0SARbwvhupQ)
+- [C'est dangereux de rester seul: Combattre les monstres invisibles dans la Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY)
-## About Google
+## À propos de Google
-- [ ] For students - [Google Careers: Technical Development Guide](https://www.google.com/about/careers/students/guide-to-technical-development.html)
-- [ ] How Search Works:
- - [ ] [The Evolution of Search (video)](https://www.youtube.com/watch?v=mTBShTwCnD4)
- - [ ] [How Search Works - the story](https://www.google.com/insidesearch/howsearchworks/thestory/)
- - [ ] [How Search Works](https://www.google.com/insidesearch/howsearchworks/)
- - [ ] [How Search Works - Matt Cutts (video)](https://www.youtube.com/watch?v=BNHR6IQJGZs)
- - [ ] [How Google makes improvements to its search algorithm (video)](https://www.youtube.com/watch?v=J5RZOU6vK4Q)
-- [ ] Series:
- - [ ] [How Google Search Dealt With Mobile](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9)
- - [ ] [Google's Secret Study To Find Out Our Needs](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf)
- - [ ] [Google Search Will Be Your Next Brain](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523)
- - [ ] [The Deep Mind Of Demis Hassabis](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a)
-- [ ] [Book: How Google Works](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344)
-- [ ] [Made by Google announcement - Oct 2016 (video)](https://www.youtube.com/watch?v=q4y0KOeXViI)
+- [ ] Pour les étudiants - [Carrières Google: Guide de développement technique](https://www.google.com/about/careers/students/guide-to-technical-development.html)
+- [ ] Comment marche la recherche:
+ - [ ] [L'évolution de la recherche (video)](https://www.youtube.com/watch?v=mTBShTwCnD4)
+ - [ ] [Comment la recherche fonctionne - l'histoire](https://www.google.com/insidesearch/howsearchworks/thestory/)
+ - [ ] [Comment la recherche fonctionne](https://www.google.com/insidesearch/howsearchworks/)
+ - [ ] [Comment la recherche fonctionne - Matt Cutts (video)](https://www.youtube.com/watch?v=BNHR6IQJGZs)
+ - [ ] [Comment Google améliore son algorithme de recherche (video)](https://www.youtube.com/watch?v=J5RZOU6vK4Q)
+- [ ] Séries:
+ - [ ] [Comment la recherche Google Search fonctionne sur mobile](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9)
+ - [ ] [L'étude secrète de Google pour découvrir nos besoins](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf)
+ - [ ] [La recherche Google Search sera votre prochain cerveau](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523)
+ - [ ] [L'esprit profond de Demis Hassabis](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a)
+- [ ] [Livre: Comment Google fonctionne](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344)
+- [ ] [Annonce faite par Google - Oct 2016 (video)](https://www.youtube.com/watch?v=q4y0KOeXViI)
-## About Video Resources
+## À propos des ressources vidéos
-Some videos are available only by enrolling in a Coursera, EdX, or Lynda.com class. These are called MOOCs.
-Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. Lynda.com courses are not free.
+Certaines vidéos sont disponibles uniquement en s'inscrivant à une classe Coursera, EdX ou Lynda.com. Ce sont des MOOC.
+Parfois, les cours ne sont pas en session, alors vous devez attendre quelques mois, donc vous n'y avez pas accès. Les cours sur Lynda.com ne sont pas gratuits.
- I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos.
- I like using university lectures.
+ J'apprécierais votre aide pour ajouter des sources publiques gratuites et toujours disponibles, telles que des vidéos YouTube pour accompagner les vidéos de cours en ligne.
+ J'aime utiliser les cours universitaires.
## Interview Process & General Interview Prep
@@ -469,7 +469,7 @@ I made a mobile-first website so I could review on my phone and tablet, wherever
Make your own for free:
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
-- [My flash cards database](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required by Google.
+- [My flash cards database](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db): Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required by Google.
**Note on flashcards:** The first time you recognize you know the answer, don't mark it as known. You have to see the
same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in
@@ -703,7 +703,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- binary search using recursion
- ### Bitwise operations
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
@@ -732,7 +732,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
## Trees
- ### Trees - Notes & Background
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- basic tree construction
- traversal
@@ -1248,7 +1247,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- For even more, see "Mining Massive Datasets" video series in the Video Series section.
- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- flow:
1. Understand the problem and scope:
- define the use cases, with interviewer's help
diff --git a/translations/README-he.md b/translations/README-he.md
index 250fc5b71b..435303f5d9 100644
--- a/translations/README-he.md
+++ b/translations/README-he.md
@@ -182,7 +182,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr
`git commit -m "Marked x" `
-`git rebase jwasham/master `
+`git rebase jwasham/main `
`git push --force `
@@ -190,9 +190,9 @@ I'm using Github's special markdown flavor, including tasks lists to check progr
## Get in a Googley Mood
-Print out a "[future Googler](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)" sign (or two) and keep your eyes on the prize.
+Print out a "[future Googler](https://github.com/jwasham/coding-interview-university/blob/main/extras/future-googler.pdf)" sign (or two) and keep your eyes on the prize.
-[![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)
+[![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/coding-interview-university/blob/main/extras/future-googler.pdf)
## האם קיבלתי את העבודה?
@@ -463,7 +463,7 @@ I made a mobile-first website so I could review on my phone and tablet, wherever
Make your own for free:
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
-- [My flash cards database](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required by Google.
+- [My flash cards database](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db): Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required by Google.
**Note on flashcards:** The first time you recognize you know the answer, don't mark it as known. You have to see the
same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in
@@ -697,7 +697,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- binary search using recursion
- ### Bitwise operations
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
@@ -726,7 +726,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
## Trees
- ### Trees - Notes & Background
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- basic tree construction
- traversal
@@ -1242,7 +1241,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- For even more, see "Mining Massive Datasets" video series in the Video Series section.
- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- flow:
1. Understand the problem and scope:
- define the use cases, with interviewer's help
diff --git a/translations/README-hi.md b/translations/README-hi.md
index 31da9798d7..3dc2ce8986 100644
--- a/translations/README-hi.md
+++ b/translations/README-hi.md
@@ -127,7 +127,7 @@ memory" का एरर न दे, और तब मुझे कोई वै
## कभी भी आप चालाक नहीं हो ऐसा ना सोचो
-- सफल सॉफ्टवेयर इंजीनियर चालाक होते हें, पर बहुत लोगो असुरक्षा होती है की वो चालाक नहीं हैं !
+- सफल सॉफ्टवेयर इंजीनियर चालाक होते हें, पर बहुत लोगो को असुरक्षा होती है किी वो चालाक नहीं हैं !
- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ)
## विडियो संसाधनों के बारे में
@@ -138,7 +138,7 @@ memory" का एरर न दे, और तब मुझे कोई वै
I'd appreciate your help converting the MOOC video links to public sources to replace the online course विडियो over time. I like using university lectures.
-## इंटरव्यू प्रकिया और साधारण इंटरव्यू तयारी
+## इंटरव्यू प्रकिया और साधारण इंटरव्यू तैयारी
[ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
[ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
@@ -151,7 +151,7 @@ memory" का एरर न दे, और तब मुझे कोई वै
## इंटरव्यू के लिए एक संगणक भाषा चुने
-इंटरव्यू मैं आप कोई भी एक भाषा जिसमे आप आरामदायक हो वो चुन सकते हैं, पर गूगल के लिए निम्नलिखित भाषाएँ अच्छी रहेगी:
+इंटरव्यू में आप कोई भी एक भाषा जिसमे आप आरामदायक हो वो चुन सकते हैं, पर गूगल के लिए निम्नलिखित भाषाएँ अच्छी रहेगी:
- C++
- Java
@@ -171,7 +171,7 @@ memory" का एरर न दे, और तब मुझे कोई वै
[भाषा संसाधनोंको यहाँ देखें](programming-language-resources.md)
-क्युकी में मैं पढ़ रहा हूँ, आपको कुछ C, C++, और Python शामिल दिखेगा. वहाँ कुछ शामिल किताबें, नीचे आखिर में देख ले.
+क्योकि में मैं पढ़ रहा हूँ, आपको कुछ C, C++, और Python शामिल दिखेगा. वहाँ कुछ शामिल किताबें, नीचे आखिर में देख ले.
## पुस्तक सूची
यह मैंने जो इस्तेमाल किया था उससे छोटी सूची है यह आपको समय बचाने के लिए संक्षिप्त है
@@ -312,8 +312,8 @@ memory" का एरर न दे, और तब मुझे कोई वै
अपना खुद का मुफ्त बनाएं:
- [फ़्लैशकार्ड साइट रेपो] (https://github.com/jwasham/computer-science-flash-cards)
- - [मेरे फ़्लैश कार्ड डेटाबेस (पुराने - 1200 कार्ड) :](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db)
- - [मेरा फ़्लैश कार्ड डेटाबेस (नया - 1800 कार्ड) :](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db)
+ - [मेरे फ़्लैश कार्ड डेटाबेस (पुराने - 1200 कार्ड) :](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db)
+ - [मेरा फ़्लैश कार्ड डेटाबेस (नया - 1800 कार्ड) :](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db)
ध्यान रखें मैं जहाज़ के ऊपर गया और विधानसभा भाषा और पायथन तुल्यता से लेकर मशीन सीखने और आंकड़ों तक सब कुछ कवर करने वाले कार्ड हैं। इसकी आवश्यकता के लिए यह बहुत अधिक है
@@ -337,7 +337,7 @@ memory" का एरर न दे, और तब मुझे कोई वै
## इसमे क्या समाविष्ट नहीं हे
-यह बड़ी सूचि गूगल इंटरव्यू टिप्पणियों से व्यक्तिगत कार्य सूचि से बनायीं गयी थी. निचे कुछ प्रचलित टेक्नोलॉजी हैं पर उन्हें टिप्पणियो में समविस्ट नहीं किया गया हैं.
+यह बड़ी सूचि गूगल इंटरव्यू टिप्पणियों से व्यक्तिगत कार्य सूचि से बनायीं गयी थी. निचे कुछ प्रचलित टेक्नोलॉजी हैं पर उन्हें टिप्पणियो में समाविस्ट नहीं किया गया हैं.
- SQL
- Javascript
@@ -345,9 +345,9 @@ memory" का एरर न दे, और तब मुझे कोई वै
## दैनिक योजना
-कुछ विषय एक दिन ले सकते हैं और कुछ ज्यादा.कुचो का सिर्फ पढाई हो सकती हैं पर अमल नहीं हो सकता.
+कुछ विषय एक दिन ले सकते हैं और कुछ ज्यादा. कुछो की सिर्फ पढाई हो सकती हैं पर अमल नहीं हो सकता.
-हर दिन मैं निचली सूचि से एक विषय लेता हु, उसका विडियो देखता हु, और उसका अमल निचे दिए तरह करता हूँ:
+हर दिन मैं निचली सूची से एक विषय लेता हूँ, उसका विडियो देखता हूँ, और उसका अमल नीचे दिए तरह करता हूँ:
- C - struct और function का उपयोग करके जो struct * या args का उपयोग करते हैं.
- C++ - built-in types का उपयोग न करके
- C++ - built-in types का उपयोग करके, जैसे STL की std::list, linked list के लिए
@@ -357,7 +357,7 @@ memory" का एरर न दे, और तब मुझे कोई वै
आपको इन सभी की ज़रूरत नहीं है साक्षात्कार के लिए आपको केवल एक ही भाषा की आवश्यकता है
इन सब में कोड क्यों?
-- अभ्यास, अभ्यास, अभ्यास, जब तक मैं इससे बीमार न हो, और यह कोई समस्या नहीं कर सकता (कुछ बहुत बढ़िया मामलों और याद रखने के लिए बहीखाता विवरण)
+- अभ्यास, अभ्यास, अभ्यास, जब तक मैं इससे बीमार न हो, और यह कोई समस्या नहीं कर सकता (कुछ बहुत बढ़िया मामलों और याद रखने के लिए बही-खाता विवरण)
- कच्ची बाधाओं के भीतर काम करना (कचरा संग्रहण की सहायता के बिना स्मृति को आवंटित करना / मुक्त करना (पायथन को छोड़कर))
- अंतर्निहित प्रकारों का उपयोग करें, इसलिए मुझे वास्तविक दुनिया के उपयोग के लिए निर्मित उपकरणों का उपयोग करने का अनुभव है (उत्पादन में अपनी स्वयं की लिंक्ड सूची कार्यान्वयन नहीं लिखना)
@@ -370,14 +370,14 @@ memory" का एरर न दे, और तब मुझे कोई वै
आपको हर एल्गोरिथम याद करने की आवश्यकता नहीं है।
-एक व्हाईटबोर्ड या कागज़ पर कोड लिखें, कंप्यूटर नहीं। कुछ नमूना इनपुट के साथ टेस्ट करें फिर इसे कंप्यूटर पर जांचें
+एक व्हाइटबोर्ड या कागज़ पर कोड लिखें, कंप्यूटर नहीं। कुछ नमूना इनपुट के साथ टेस्ट करें फिर इसे कंप्यूटर पर जांचें
## पूर्वाभ्यास ज्ञान
- [ ] **C जानें**
- सी हर जगह है आप पुस्तकों, व्याख्यान, वीडियो, हर जगह जब आप पढ़ रहे हैं, में उदाहरण देखेंगे।
- [ ] [सी प्रोग्रामिंग भाषा, खंड 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
- - यह एक छोटी पुस्तक है, लेकिन यह आपको सी भाषा पर एक महान संभाल देगा और यदि आप इसे थोड़ा अभ्यास करते हैं तो आपको जल्दी से कुशल मिलेगा। समझना सी आपको यह समझने में मदद करता है कि प्रोग्राम और मेमोरी कैसे काम करते हैं
+ - यह एक छोटी पुस्तक है, लेकिन यह आपको सी भाषा पर एक महान संभाल देगा और यदि आप इसे थोड़ा अभ्यास करते हैं तो आपको जल्दी से कुशल मिलेगा। सी आपको यह समझने में मदद करता है कि प्रोग्राम और मेमोरी कैसे काम करते हैं
- [सवालों के जवाब](https://github.com/lekkas/c-algorithms)
- [ ] **कंप्यूटर एक प्रोग्राम की प्रक्रिया कैसे करते हैं:**
@@ -548,7 +548,7 @@ memory" का एरर न दे, और तब मुझे कोई वै
- binary search using recursion
- ### Bitwise operations
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
@@ -577,7 +577,6 @@ memory" का एरर न दे, और तब मुझे कोई वै
## Trees
- ### Trees - Notes & Background
- - [ ] [Series: Core Trees (विडियो)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (विडियो)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- basic tree construction
- traversal
@@ -1121,7 +1120,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- For even more, see "Mining Massive Datasets" video series in the Video Series section.
- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- flow:
1. Understand the problem and scope:
- define the use cases, with interviewer's help
@@ -1363,21 +1362,21 @@ Take coding challenges every day, as many as you can.
- [ ] [Great intro (copied from System Design section): Algorithm design:](http://www.hiredintech.com/algorithm-design/)
- [ ] [How to Find a Solution](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/)
- [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/)
-- [ ] [टॉपकोड़ेर्स के लिए गणित](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/)
+- [ ] [टॉपकोडर्स के लिए गणित](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/)
- [ ] [डायनामिक प्रोग्रामिंग – नौसिखिया से उन्नत](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/)
- [MIT इंटरव्यू सामग्री](https://courses.csail.mit.edu/iap/interview/materials.php)
- - [लीतकोड](https://leetcode.com/)
+ - [लीटकोड](https://leetcode.com/)
- [टॉप कोडर](https://www.topcoder.com/)
- - [प्रोजेक्ट यूलेर (math-focused)](https://projecteuler.net/index.php?section=problems)
- - [कोदवार](http://www.codewars.com)
+ - [प्रोजेक्ट यूलर (math-focused)](https://projecteuler.net/index.php?section=problems)
+ - [कोडवॉर ](http://www.codewars.com)
- [हैकररैंक](https://www.hackerrank.com/)
- [कोदिलिटी](https://codility.com/programmers/)
- [इंटरव्यूकेक](https://www.interviewcake.com/)
- [इंटरव्यूबिट](https://www.interviewbit.com/invite/icjf)
- - [प्र्ग्रम्मिंग लैंग्वेज में सुधार करने के लिए](http://exercism.io/languages)
+ - [प्रोग्रामिंग लैंग्वेज में सुधार करने के लिए](http://exercism.io/languages)
## Once you're closer to the interview
@@ -1394,31 +1393,31 @@ Take coding challenges every day, as many as you can.
## इंटरव्यू की सोंच
- निचे दिए गए विषयो के साथ साथ, अपने २० इंटरव्यू प्रश्न तयार रखे. हर एक प्रश्न के २-३ जवाब तयार रखे. आपने जो हासिल किया हे उसकी कहानी रखे.
+ निचे दिए गए विषयो के साथ साथ, अपने २० इंटरव्यू प्रश्न तैयार रखे. हर एक प्रश्न के २-३ जवाब तैयार रखे. आपने जो हासिल किया हे उसकी कहानी रखे.
-- आपको ये नौकरी क्यू चाहिए?
+- आपको ये नौकरी क्यूँ चाहिए?
- आपने कौनसी एक कठिन समस्या हल की हैं?
-- आपकी सबसे बढ़ी चुनोतिया कोनसी थी?
-- आपने देखि हुए सर्वोतम और बुरी संरचनाये?
+- आपकी सबसे बड़ी चुनौतियां कोनसी थी?
+- आपने देखी हुई सर्वोतम और बुरी संरचनाये?
- किसी मौजूदा गूगल उत्पाद में सुधार के लिए विचार.
- आप अपना काम सर्वोत्तम कैसे कर सकते हो, टीम के साथ या एकेले?
-- आपकी कोनसी कुशलता या अनुभव आपके भूमिका में मदतगार होंगे?
+- आपकी कोनसी कुशलता या अनुभव आपके भूमिका में मददगार होंगे?
- आपने [जॉब क्ष / प्रोजेक्ट य] में सबसे ज्यादा किससे आनद मिला?
- आपकी सबसे बड़ी [जॉब क्ष/ प्रोजेक्ट य] की चुनोती जिसे आपको सामना करना पड़ा?
- [जॉब क्ष / प्रोजेक्ट य] में से सबसे बड़ा बग?
- आपने [जॉब क्ष / प्रोजेक्ट य] में क्या सिखा?
- [जॉब क्ष / प्रोजेक्ट य] में आप क्या सुधार कर सकते थे/ करना चाहते थे?
-## इन्तेर्विएवर के लिए प्रश्न रखे
+## इंटरव्यूअर के लिए प्रश्न रखे
- मेरे कुछ प्रश्न (मुजे पहिलेसेही कुछ जवाब बता हे पर मैं टीम की राय जानना चाहता हूँ):
+ मेरे कुछ प्रश्न (मुझे पहले से ही कुछ जवाब पता है पर मैं टीम की राय जानना चाहता हूँ):
- आपकी टीम कितनी बड़ी हैं?
- आपकी डेव साइकिल कैसी हैं? क्या आपको वॉटरफॉल/स्प्रिंट/एजाइल पता हैं?
- क्या काम के पीछे भागना पड़ता हैं? या लचीलापन हैं?
- आपकी टीम मैं निर्णय कैसे लिए जाते हैं?
- हर सप्ताह आपकी कितनी बैठके होती हैं?
-- क्या आपका काम का मौहोल काम करने मैं मदत करता हैं?
+- क्या आपका काम का माहौल काम करने मैं मदद करता हैं?
- आप किसपे काम करते हो?
- आपको उसमे क्या पसंद हैं?
- आपका काम जीवन कैसा हैं?
@@ -1620,7 +1619,7 @@ Take coding challenges every day, as many as you can.
- [ ] पुस्तके:
- [ ] [गो प्रोग्रामिंग का परिचय (ऑनलाइन मुफ्त पढ़े)](https://www.golang-book.com/books/intro)
- [ ] [गो प्रोग्रामिंग लैंग्वेज (दोनोवन & केर्निघन)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440)
- - [ ] [बूतकाम्प](https://www.golang-book.com/guides/bootcamp)
+ - [ ] [बूटकैंप ](https://www.golang-book.com/guides/bootcamp)
--
@@ -1710,7 +1709,7 @@ Sit back and enjoy. "netflix and skill" :P
- [ ] [क्रिप्टोग्राफ़ी का परिचय](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be)
- [श्रृंखला में अधिक (क्रम में नहीं)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg)
-- [ ] [विशाल डेटासेट खनन – स्तान्फोर्ड विश्वविद्यालय(९४ विडियो)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
+- [ ] [विशाल डेटासेट खनन – स्टैनफोर्ड विश्वविद्यालय(९४ विडियो)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
## शायद
@@ -1722,8 +1721,8 @@ http://www.gainlo.co/ - बड़ी कंपनी के मोक इंटर
बधाई हो!
-- [१० बाते काश मुज्हे गूगल के पाहिले दिन पता होती](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw)
+- [१० बाते काश मुझे गूगल के पहले दिन पता होती](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw)
सिखाते रहो.
-वास्तव में आपकी पढाई कभी ख़तम नहीं होती.
+वास्तव में आपकी पढाई कभी ख़त्म नहीं होती.
diff --git a/translations/README-id.md b/translations/README-id.md
index f12d3d640c..1b23877da7 100644
--- a/translations/README-id.md
+++ b/translations/README-id.md
@@ -1,24 +1,19 @@
# Coding Interview University
-Version original: [Bahasa Inggris](README.md)
+Versi asli: [Bahasa Inggris](../README.md)
## Ringkasan apa ini?
-Ini adalah ringkasan studi saya selama beberapa bulan dari web developer (otodidak, tanpa gelar sarjana informatika) hingga menjadi *software engineer Google*.
+Ini adalah rencana studi multi-bulan saya untuk beralih dari pengembang web (otodidak, tanpa gelar Ilmu Komputer) menjadi insinyur perangkat lunak untuk perusahaan besar.
![Menulis kode di papan tulis - dikutip dari serial TV Silicon Valley oleh HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
-Saya telah mengupas catatan **Google's Coaching Note** dan berikut adalah hal-hal penting dari catatan tersebut. Ada beberapa poin yang saya tambahkan pada bagian akhir yang mungkin muncul dalam wawancara atau dapat berguna dalam proses penyelesaian masalah.
-Banyak poin berasal dari artikel Steve Yegge "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" yang berisi poin-poin dari **Google's Coaching Note**.
+Ini dimaksudkan untuk **teknisi perangkat lunak baru** atau mereka yang beralih dari pengembangan perangkat lunak/web ke rekayasa perangkat lunak (yang memerlukan pengetahuan ilmu komputer).
+Jika Anda memiliki pengalaman bertahun-tahun dan mengklaim pengalaman rekayasa perangkat lunak bertahun-tahun, nantikan wawancara yang lebih sulit.
-Saya sudah meringkas poin-poin penting menurut saran dari Yegge. Saya juga mengubah beberapa rekomendasinya berdasarkan informasi yang saya dapatkan dari kontak saya di Google. Pedoman ini ditujukan untuk *software engineer* baru dan mereka yang ingin beralih profesi dari *web developer* menjadi *software engineer* (dimana ilmu komputer diperlukan).
+Jika Anda memiliki pengalaman pengembangan perangkat lunak/web selama bertahun-tahun, perhatikan bahwa perusahaan perangkat lunak besar seperti Google, Amazon, Facebook, dan Microsoft memandang rekayasa perangkat lunak berbeda dari pengembangan perangkat lunak/web, dan mereka memerlukan pengetahuan ilmu komputer.
-Jika Anda mengaku memiliki pengalaman bertahun-tahun dalam rekayasa perangkat lunak, bersiaplah untuk wawncara yang jauh lebih sulit.
-[Baca lebih lanjut](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/).
-
-Jika Anda memiliki pengalaman sebagai developer software/web, catat bahwa Google memandang *software engineer* berbeda dari *developer software/web* karena *software engineer* menggunakan ilmu komputer.
-
-Jika Anda ingin menjadi teknisi ketahanan sistem atau teknisi sistem, lebih banyak pelajari pada bagian tambahan (jaringan, keamanan).
+Jika Anda ingin menjadi insinyur keandalan atau insinyur operasi, pelajari lebih lanjut dari daftar opsional (jaringan, keamanan).
---
@@ -27,9 +22,7 @@ Jika Anda ingin menjadi teknisi ketahanan sistem atau teknisi sistem, lebih bany
- [Apa ini?](#ringkasan-apa-ini)
- [Mengapa menggunakan ini?](#mengapa-menggunakan-ini)
- [Bagaimana cara menggunakannya](#bagaimana-cara-menggunakannya)
-- [Masuk ke Mode Googley](#masuk-ke-mode-googley)
- [Jangan merasa anda kurang pintar](#jangan-merasa-anda-kurang-pintar)
-- [Tentang Google](#tentang-google)
- [Tentang Sumber Video](#tentang-sumber-video)
- [Proses Interview dan Preparasi Wawancara Secara Umum](#proses-interview-dan-preparasi-wawancara-secara-umum)
- [Pilih Satu Bahasa Pemrograman untuk Wawancara](#pilih-satu-bahasa-pemrograman-untuk-wawancara)
@@ -45,16 +38,14 @@ Jika Anda ingin menjadi teknisi ketahanan sistem atau teknisi sistem, lebih bany
- [Stack](#stack)
- [Queue](#queue)
- [Hash table](#hash-table)
-- [Pengetahauan Tambahan](#pengetahuan-tambahan)
- - [Binary search](#binary-search)
+- [Lebih Banyak Pengetahuan](#lebih-banyak-pengetahuan)
+ - [Pencarian Biner](#pencarian-biner)
- [Operasi Bitwise](#operasi-bitwise)
- [Trees](#trees)
- [Trees - Catatan & Latar Belakang](#trees---catatan--latar-belakang)
- [Binary search trees: BSTs](#binary-search-trees-bsts)
- - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap)
- - balanced search trees (konsep dasar, tidak mendalam)
- - traversals: preorder, inorder, postorder, BFS, DFS
-- [Sorting](#sorting)
+ - [Heap / Prioritas Antrian / Biner Heap](#heap-/-prioritas-antrian-/-biner-heap)
+- [Penyortiran](#penyortiran)
- selection
- insertion
- heapsort
@@ -66,51 +57,52 @@ Jika Anda ingin menjadi teknisi ketahanan sistem atau teknisi sistem, lebih bany
- adjacency matrix
- adjacency list
- traversals: BFS, DFS
-- [Pengetahuan Tambahan Lainnya](#pengetahuan-tambahan-lainnya)
- - [Rekursi](#rekursi)
- - [Pemrograman Berbasis Objek](#pemrograman-berbasis-objek)
- - [Pola Desain](#pola-desain)
- - [Kombinatorik (n pilih k) & Probabilitas](#kombinatorik-n-pilih-k--probabilitas)
- - [NP, NP-Lengkap dan Algoritma Aproksimasi](#np-np-lengkap-dan-algoritma-aproksimasi)
- - [Caches](#caches)
- - [Proses dan Threads](#proses-dan-threads)
- - [Tesis](#tesis)
+- [Bahkan Lebih Banyak Pengetahuan](#bahkan-lebih-banyak-pengetahuan)
+ - [Pengulangan (Recursion)](#pengulangan-(recursion))
+ - [Pemrograman Dinamis](#pemrograman-dinamis)
+ - [Pemrograman Berorientasi Objek](#pemrograman-berorientasi-objek)
+ - [Pola desain (Design patterns)](#pola-desain-(design-patterns))
+ - [Kombinatorik (n pilih k) & Probabilitas](#kombinatorik-(n-pilih-k)-&-probabilitas)
+ - [Algoritma NP, NP-Complete dan Approximation](#algoritma-np,-np-complete-dan-approximation)
+ - [Cache](#cache)
+ - [Proses dan Thread](#proses-dan-thread)
- [Testing](#testing)
- [Penjadwalan](#penjadwalan)
- - [Implementasi Rutinitas Sistem](#implementasi-rutinitas-sistem)
- - [Pencarian String & Manipulasi](#pencarian-string--manipulasi)
-- [Perancangan Sistem, Skalabilitas, Penganganan Data](#perancangan-sistem-skalabilitas-penanganan-data) (jika anda memiliki pengalaman 4 tahun lebih)
+ - [Pencarian & manipulasi string](#pencarian-&-manipulasi-string)
+ - [Tries](#tries)
+ - [Angka Floating Point](#angka-floating-point)
+ - [Unicode](#unicode)
+ - [Endianness](#endianness)
+ - [Jaringan](#jaringan)
+- [Perancangan Sistem, Skalabilitas, Penganganan Data](#Perancangan-Sistem,-Skalabilitas,-Penganganan-Data) (jika anda memiliki pengalaman 4 tahun lebih)
- [Ulasan Akhir](#ulasan-akhir)
- [Latihan Pertanyaan Pemrograman](#latihan-pertanyaan-pemrograman)
-- [Soal-soal Pemrograman](#soal-soal-pemrograman)
+- [Latihan / tantangan coding](#latihan--tantangan-coding)
- [Menjelang Proses Interview](#menjelang-proses-interview)
-- [CV Anda](#cv-anda)
-- [Perkirakan Pertanyaan Yang Akan Diajukan](#perkirakan-pertanyaan-yang-akan-diajukan)
+- [Resume Anda](#resume-anda)
+- [Pikirkan saat wawancara datang](#pikirkan-saat-wawancara-datang)
- [Bertanyalah Pada Pewawancara](#bertanyalah-pada-pewawancara)
- [Saat Anda Berhasil Mendapatkan Pekerjaannya](#saat-anda-berhasil-mendapatkan-pekerjaannya)
---------------- Semua dibawah ini bersifat opsional ----------------
- [Buku Tambahan](#buku-tambahan)
-- [Materi Tambahan](#materi-tambahan)
- - [Pemrograman Dinamis](#pemrograman-dinamis)
+- [Pembelajaran Tambahan](#pembelajaran-tambahan)
- [Kompilator](#kompilator)
- - [Bilangan Titik Mengambang](#bilangan-titik-mengambang)
- - [Unicode](#unicode)
- - [Endianness](#endianness)
- [Emacs and vi(m)](#emacs-and-vim)
- [Unix command line tools](#unix-command-line-tools)
- - [Teori Informasi](#teori-informasi)
+ - [Teori Informasi](#teori-informasi-video)
- [Pariti & Kode Hamming](#pariti--kode-hamming)
- [Entropi](#entropi)
- [Kriptografi](#kriptografi)
- [Kompresi](#kompresi)
- [Jaringan](#jaringan) (bersiaplah mendapatkan pertanyaan jaringan apabila anda ingin menjadi system engineer)
- - [Sekuritas Komputer](#sekuritas-komputer)
- - [Garbage collection](#garbage-collection)
+ - [Keamanan komputer](#keamanan-komputer)
+ - [Pengumpulan sampah (Garbage collection)](#pengumpulan-sampah)
- [Pemrograman Paralel](#pemrograman-paralel)
- [Pengiriman Pesan, Serialisasi, dan Sistem Queueing](#pengiriman-pesan-serialisasi-dan-sistem-queueing)
- - [Fast Fourier Transform](#fast-fourier-transform)
+ - [A*](#a)
+ - [Transformasi Fourier Cepat](#transformasi-fourier-cepat)
- [Bloom Filter](#bloom-filter)
- [HyperLogLog](#hyperloglog)
- [Locality-Sensitive Hashing](#locality-sensitive-hashing)
@@ -128,18 +120,19 @@ Jika Anda ingin menjadi teknisi ketahanan sistem atau teknisi sistem, lebih bany
- B-Trees
- [k-D Trees](#k-d-trees)
- [Skip lists](#skip-lists)
- - [Network Flows](#network-flows)
+ - [Aliran Jaringan](#aliran-jaringan)
- [Disjoint Sets & Union Find](#disjoint-sets--union-find)
- [Matematika untuk Pemrosesan Cepat](#matematika-untuk-pemrosesan-cepat)
- [Treap](#treap)
- - [Pemrograman Linear](#pemrograman-linear)
- - [Geometri, Convex hull](#geometri-convex-hull)
+ - [Pemrograman Linear](#pemrograman-linear-video)
+ - [Geometri, Convex hull](#geometri-convex-hull-video)
- [Matematika Diskrit](#matematika-diskrit)
- - [Pembelajaran Mesin](#pembelajaran-mesin)
- - [Go](#go)
-- [Detil Tambahan pada Beberapa Subjek](#detil-tambahan-pada-beberapa-subjek)
+ - [Pembelajaran Mesin](#pembelajaran-mesin-machine-learning)
+- [Detail Tambahan tentang Beberapa Subjek](#detail-tambahan-tentang-beberapa-subjek)
- [Seri Video](#seri-video)
- [Kursus Ilmu Komputer](#kursus-ilmu-komputer)
+- [Implementasi Algoritma](#implementasi-algoritma)
+- [Dokumen](#dokumen)
---
@@ -147,10 +140,7 @@ Jika Anda ingin menjadi teknisi ketahanan sistem atau teknisi sistem, lebih bany
Saya mengikuti rencana ini untuk mempersiapkan saya dalam menghadapi wawancara kerja Google. Sejak 1997, saya telah menciptakan berbagai situs, servis, dan mendirikan startup. Saya memiliki gelar ekonomi, bukan gelar ilmu komputer. Saya telah meraih kesuksesan dalam karir saya, tapi saya ingin bekerja di Google. Saya ingin masuk ke sistem yang lebih besar dan mempunyai pemahaman mendalam tentang sistem komputer, efesiensi algoritma, performa struktur data, bahasa tingkat rendah, dan bagaimana semuanya bekerja. Jika anda tidak mengetahui satu pun, Google tidak akan mempekerjakan anda.
-Ketika saya memulai proyek ini, saya tidak tahu tentang stack dari sebuah heap, tidak tahu tentang notasi Big-O apapun, begitupula dengan struktur data trees, atau bagaimana menyusuri sebuah graph. Jika saya harus menulis algoritma penyortiran, saya bisa katakan pada anda bahwa hasilnya tidak akan memuaskan.
-Setiap struktur data yang saya pernah pakai sudah tertanam dalam bahasa yang saya gunakan, dan saya tidak tahu bagaimana mereka bekerja secara riil. Saya tidak pernah diharuskan untuk mengatur penggunaan memori kecuali proses yang saya jalankan akan memberikan error 'memori tidak cukup', sehingga saya harus mencari jalan keluarnya. Saya pernah menggunakan beberapa array multidimensi dalam hidup saya dan ribuan array asosiatif, tapi saya tidak pernah menciptakan struktur data dari nol.
-
-Tetapi setelah menjalani rencana studi ini saya memiliki kepercayaan diri yang tinggi bahwa saya akan diterima. Ini adalah rencana yang panjang. Ini akan menyita waktu saya selama berbulan-bulan. Tetapi jika anda sudah tidak asing lagi dengan materi yang dibutuhkan, hal ini akan membutuhkan waktu jauh lebih sedikit.
+Itu rencana yang panjang. Mungkin butuh waktu berbulan-bulan. Jika Anda sudah terbiasa dengan hal ini, Anda akan membutuhkan lebih sedikit waktu.
## Bagaimana cara menggunakannya?
@@ -173,114 +163,82 @@ Saya menggunakan markdown spesial dari Github, termasuk daftar tugas untuk menge
`git add . `
-`git commit -m "Marked x" `
+`git commit -m "Tandai x" `
-`git rebase jwasham/master `
+`git rebase jwasham/main `
`git push --force `
[Lebih jauh tentang markdown Github](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
-## Masuk ke Mode Googley
-
-Print satu atau beberapa foto dari "[future Googler](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)" (untuk ditempel tentunya) sebagai reminder anda apa hasil usaha yang anda akan dapatkan.
-
-[![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)
-
## Jangan merasa anda kurang pintar
- Para engineers/programmer di google adalah orang-orang pintar, tapi banyak dari mereka berpikir bahwa mereka tidak cukup pintar, walaupun mereka bekerja di Google.
- [Mitos dari programmer yang jenius](https://www.youtube.com/watch?v=0SARbwvhupQ)
- [Hal yang berbahaya untuk pergi sendirian: Bertarung dengan monster yang tidak kelihatan di dunia teknologi](https://www.youtube.com/watch?v=1i8ylq4j_EY)
-## Tentang Google
-
-- [ ] Untuk pelajar - [Google Careers: Technical Development Guide](https://www.google.com/about/careers/students/guide-to-technical-development.html)
-- [ ] Bagaimana Pencari Bekerja:
- - [ ] [The Evolution of Search (video)](https://www.youtube.com/watch?v=mTBShTwCnD4)
- - [ ] [How Search Works - the story](https://www.google.com/insidesearch/howsearchworks/thestory/)
- - [ ] [How Search Works](https://www.google.com/insidesearch/howsearchworks/)
- - [ ] [How Search Works - Matt Cutts (video)](https://www.youtube.com/watch?v=BNHR6IQJGZs)
- - [ ] [How Google makes improvements to its search algorithm (video)](https://www.youtube.com/watch?v=J5RZOU6vK4Q)
-- [ ] Seri:
- - [ ] [How Google Search Dealt With Mobile](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9)
- - [ ] [Google's Secret Study To Find Out Our Needs](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf)
- - [ ] [Google Search Will Be Your Next Brain](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523)
- - [ ] [The Deep Mind Of Demis Hassabis](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a)
-- [ ] [Book: How Google Works](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344)
-- [ ] [Made by Google announcement - Oct 2016 (video)](https://www.youtube.com/watch?v=q4y0KOeXViI)
-
## Tentang Sumber Video
-Beberapa video hanya dapat diakses dengan mengikuti kelas di [Coursera](https://www.coursera.org/), [Edx](https://www.edx.org/), atau [Lynda.com](https://www.lynda.com/). Beberapa link tersebut biasa disebut MOOC (massive open online course) atau belajar online, seperti layaknya anda berkuliah biasa namun bedanya ini online dan diikuti oleh banyak orang dari seluruh dunia.
-Terkadang suatu saat kelas yang ada tidak dapat diikuti untuk sementara, dan harus menunggu beberapa bulan. Karena kelas tersebut ada waktunya dalam pembelajaran, dan ada waktunya untuk mendaftar, layaknya anda berkuliah. Khusus untuk Lynda.com merupakan situs yang berbayar untuk mengakses materinya.
-
- Selain saya membagikan ilmu kepada kalian semua, saya juga mengapresiasi bantuan anda untuk menambahkan sumber pembelajaran yang gratis dan selalu terbuka untuk umum, seperti video di youtube untuk sebagai selingan dari kuliah online dari website yang disebutkan diatas.
- Saya suka menggunakan media pembelajaran berbasiskan universitas.
+Beberapa video hanya tersedia dengan mendaftar di kelas Coursera atau EdX. Ini disebut MOOC.
+Terkadang kelas tidak dalam sesi jadi Anda harus menunggu beberapa bulan, jadi Anda tidak memiliki akses.
+
+ Saya menghargai bantuan Anda untuk menambahkan sumber publik yang gratis dan selalu tersedia, seperti video YouTube untuk menyertai video kursus online.
+ Saya suka menggunakan kuliah universitas.
## Proses Interview dan Preparasi Wawancara Secara Umum
-- [ ] Video:
- - [ ] [How to Work at Google: Prepare for an Engineering Interview (video)](https://www.youtube.com/watch?v=ko-KkSmp-Lk)
- - [ ] [How to Work at Google: Example Coding/Engineering Interview (video)](https://www.youtube.com/watch?v=XKu_SEDAykw)
- - [ ] [How to Work at Google - Candidate Coaching Session (video)](https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be)
- - [ ] [Google Recruiters Share Technical Interview Tips (video)](https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be)
- - [ ] [How to Work at Google: Tech Resume Preparation (video)](https://www.youtube.com/watch?v=8npJLXkcmu8)
-
-- [ ] Artikel:
- - [ ] [Becoming a Googler in Three Steps](http://www.google.com/about/careers/lifeatgoogle/hiringprocess/)
- - [ ] [Get That Job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)
- - semua hal-hal yang dia sebutkan itu sudah terdaftar dibawah dan kamu harus tahu
- - [ ] _(very dated)_ [How To Get A Job At Google, Interview Questions, Hiring Process](http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html)
- - [ ] [Phone Screen Questions](http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions)
-
-- [ ] Materi kelas untuk persiapan:
- - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed):
- - Learn how to make yourself ready for software engineer interviews from a former Google interviewer.
-
-- [ ] Tambahan (tidak disarankan oleh Google tapi saya tambahkan sendiri):
- - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
- - [ ] [Four Steps To Google Without A Degree](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx)
- - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
- - [ ] [How Google Thinks About Hiring, Management And Culture](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture)
- - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/)
- - [ ] Cracking The Coding Interview Set 1:
- - [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
- - [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
- - [ ] How to Get a Job at the Big 4:
- - [ ] ['How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft' (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
- - [ ] [Failing at Google Interviews](http://alexbowe.com/failing-at-google-interviews/)
+- [ ] [ABC: Selalu Menjadi Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
+- [ ] [Papan tulis (Whiteboarding)](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
+- [ ] [Memperlihatkan Perekrutan Teknologi](https://www.youtube.com/watch?v=N233T0epWTs)
+- [ ] Cara Mendapatkan Pekerjaan di Big 4:
+ - [ ] [Cara Mendapatkan Pekerjaan di Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
+- [ ] Memecahkan Set Wawancara Coding 1:
+ - [ ] [Gayle L McDowell - Memecahkan The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
+ - [ ] [Memecahkan Wawancara Coding dengan Penulis Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
+- [ ] Memecahkan Wawancara Coding Facebook:
+ - [ ] [Pendekatan](https://www.youtube.com/watch?v=wCl9kvQGHPI)
+ - [ ] [Panduan Masalah](https://www.youtube.com/watch?v=4UWDyJq8jZg)
+- [ ] Kursus Persiapan:
+ - [ ] [Wawancara Insinyur Perangkat Lunak Unleashed (kursus berbayar)](https://www.udemy.com/software-engineer-interview-unleashed):
+ - Pelajari cara mempersiapkan diri Anda untuk wawancara insinyur perangkat lunak dari mantan pewawancara Google.
+ - [ ] [Python untuk Struktur Data, Algoritma, dan Wawancara (kursus berbayar)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/):
+ - Kursus persiapan wawancara sentris Python yang mencakup struktur data, algoritma, wawancara tiruan, dan banyak lagi.
+ - [ ] [Pengantar Struktur Data dan Algoritma menggunakan Python (kursus gratis Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513):
+ - Kursus algoritme dan struktur data sentris Python gratis.
+ - [ ] [Struktur Data dan Algoritma Nanodegree! (Nanodegree berbayar Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256):
+ - Dapatkan praktik langsung dengan lebih dari 100 struktur data dan latihan algoritme serta panduan dari mentor yang berdedikasi untuk membantu mempersiapkan Anda untuk wawancara dan skenario di tempat kerja.
+ - [ ] [Grokking Interview Perilaku (Kursus gratis edukatif)](https://www.educative.io/courses/grokking-the-behavioral-interview):
+ - Sering kali, bukan kompetensi teknis Anda yang menahan Anda untuk mendapatkan pekerjaan impian Anda, melainkan bagaimana Anda melakukan wawancara perilaku.
## Pilih Satu Bahasa Pemrograman untuk Wawancara
-Saya menulis artikel pendek tentang topik hal tersebut: [Penting:Pilih Satu Bahasa Pemrograman untuk wawancara dengan Google](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/) (Penting: Pilih Satu Bahasa Pemrograman untuk wawancara dengan Google)
-
-Anda dapat menggunakan sebuah bahasa pemrograman yang nyaman bagi anda untuk melaksanakan salah satu bagian wawancara yaitu sesi mengkoding, tapi bagi Google, berikut adalah beberapa pilihan:
+Anda dapat menggunakan bahasa yang Anda sukai untuk melakukan bagian pengkodean dalam wawancara, tetapi untuk perusahaan besar, ini adalah pilihan yang tepat:
- C++
- Java
- Python
-Anda juga dapat menggunakan beberapa bahasa pemrograman berikut, tapi cari informasi dahulu tentang hal ini, karena mungkin ada kualifikasi khusus:
+Anda juga bisa menggunakan ini, tapi bacalah dulu. Mungkin ada peringatan:
- JavaScript
- Ruby
-Anda harus sangat nyaman dan memahami bahasa yang akan digunakan untuk wawancara tersebut.
+Berikut adalah artikel yang saya tulis tentang memilih bahasa untuk wawancara: [Pilih Satu Bahasa untuk Wawancara Coding](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/).
+
+Anda harus sangat nyaman dalam bahasa tersebut dan berpengetahuan luas.
-Baca lebih banyak tentang pilihan:
+Baca lebih lanjut tentang pilihan:
- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/
- http://blog.codingforinterviews.com/best-programming-language-jobs/
-- https://www.quora.com/What-is-the-best-language-to-program-in-for-an-in-person-Google-interview
-[Lihat beberapa sumber bahasa pemrograman disini](programming-language-resources.md)
+[Lihat sumber bahasa di sini](../programming-language-resources.md)
-Anda akan melihat beberapa C, C++, dan Python di cantumkan di link dibawah, karena saya juga sedang belajar. Ada beberapa buku juga diikutkan dalam list dibawah ini, lihat bagian bawah.
+Anda akan melihat beberapa pembelajaran C, C++, dan Python yang disertakan di bawah ini, karena saya sedang belajar. Ada beberapa buku yang terlibat, lihat bagian bawah.
## Daftar Buku
Ini adalah daftar pendek yang saya gunakan. Ini disingkat untuk menghemat waktu Anda.
-### Interview Prep
+### Persiapan Interview
- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
- jawaban di C++ and Java
@@ -289,46 +247,25 @@ Ini adalah daftar pendek yang saya gunakan. Ini disingkat untuk menghemat waktu
- tidak terlalu sulit, kebanyakan masalah mungkin lebih mudah daripada apa yang akan anda lihat dalam sebuah wawancara (dari apa yang saya baca)
- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
- jawaban in Java
- - direkomendasikan di the [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/)
- - Jika kamu melihat orang-orang mereferensikan "The Google Resume", itu adalah sebuah buku yang diganti oleh "Cracking the Coding Interview".
-
-Jika anda memiliki banyak waktu:
-
-- [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
- - semua kode adalah di C++, sangat bagus jika anda menggunakan C++ di wawancara anda.
- - sebuah buku yang bagus mengenai pemecahan masalah secara umum.
-
-### Computer Architecture
-Jika kekurangan waktu:
+### Jika anda memiliki banyak waktu:
-- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
- - Buku ini dirilis pada tahun 2004, dan agak ketinggalan jaman, tetapi dengan sumber daya yang hebat bisa untuk memahami komputer secara singkat.
- - Penulis menemukan HLA, sehingga menyebutkan dan memberi contoh di HLA dengan sebutir garam. Tidak banyak digunakan, tapi contoh yang baik seperti apa assembly itu.
- - Bab-bab ini patut dibaca untuk memberikan dasar yang baik:
- - Chapter 2 - Numeric Representation
- - Chapter 3 - Binary Arithmetic and Bit Operations
- - Chapter 4 - Floating-Point Representation
- - Chapter 5 - Character Representation
- - Chapter 6 - Memory Organization and Access
- - Chapter 7 - Composite Data Types and Memory Objects
- - Chapter 9 - CPU Architecture
- - Chapter 10 - Instruction Set Architecture
- - Chapter 11 - Memory Architecture and Organization
+- [ ] [Elements of Programming Interviews (versi C++)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
+- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/)
+- [ ] Elements of Programming Interviews (Java version)
+ - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
+ - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews)
-Jika anda punya banyak waktu (Saya ingin buku ini):
+### Bahasa Spesifik
-- [ ] [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/)
- - Untuk orang kaya, lebih up-to-date (2011), tapi dengan pemeliharaan jangka panjang
+**Anda harus memilih sebuah bahasa pemgrograman untuk wawancara (lihat diatas).**
-### Language Specific
-
-**Anda harus memilih sebuah bahasa pemgrograman untuk wawancara (lihat diatas).** Berikut adalah rekomendasi bahasa dari saya. Saya tidak memiliki sumber daya untuk semua bahasa. Saya menyambut penambahan.
+Berikut adalah rekomendasi bahasa dari saya. Saya tidak memiliki sumber daya untuk semua bahasa. Saya menyambut penambahan.
Jika meskipun anda membaca salah satu dari ini, anda harus memiliki semua pengetahuan struktur data dan algoritma, anda harus mulai melakukan pemecahan masalah koding.
**Anda dapat melewati semua video ceramah di proyek ini**, kecuali jika anda ingin sebuah review.
-[Additional language-specific resources here.](programming-language-resources.md)
+[Sumber daya khusus bahasa tambahan di sini.](../programming-language-resources.md)
### C++
@@ -336,86 +273,42 @@ Saya belum membaca keduanya. tapi mereka dinilai sangat bagus dan ditulis oleh S
- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
+- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf)
+ - Kumpulan Struktur dan Algoritma Data yang kaya dan terperinci
+ - Bagus untuk pemula
Jika anda memiliki rekomendasi yang lebih baik untuk C++, tolong beritahu saya. Mencari sumber daya yang komprehensif.
### Java
-- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
- - video dengan buku (dan Sedgewick!):
- - [Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2)
- - [Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd)
+- [ ] [Algoritma (Sedgewick dan Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
+ - video dengan konten buku (dan Sedgewick!) di coursera:
+ - [Algoritma I](https://www.coursera.org/learn/algorithms-part1)
+ - [Algoritma II](https://www.coursera.org/learn/algorithms-part2)
-OR:
+Atau:
-- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
+- [ ] [Struktur Data dan Algoritma di Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
- oleh Goodrich, Tamassia, Goldwasser
- digunakan sebagai teks opsional untuk kursus pengenalan CS di UC Berkeley
- lihat laporan buku saya pada versi Python dibawah. Buku ini mencakup topik-topik yang sama.
### Python
-- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
+- [ ] [Struktur Data dan Algoritma dengan Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
- oleh Goodrich, Tamassia, Goldwasser
- Saya mencintai buku ini. Mencakup segala hal dan lainnya.
- kode Pythonic
- laporan buku saya: https://googleyasheck.com/book-report-data-structures-and-algorithms-in-python/
-
-
-### Optional Books
-
-**Beberapa orang merekomendasikan ini, tapi saya pikir itu akan berlebihan, kecuali jika anda punya pengalaman di software engineering bertahun-tahun dan mengharapkan sebuah wawancara yang jauh lebih sulit**
-
-- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
- - Sebagai sebuah review dan pengenalan masalah
- - Bagian katalog algoritma adalah luar lingkup yang baik saat anda mendapatkan kesulitan di wawancara
- - Buku ini mempunyai 2 bagian:
- - class textbook on data structures and algorithms
- - pros:
- - adalah sebuah review yang bagus sebagai buku algoritma
- - cerita bagus dari pengalamannya memecahkan masalah dalam industri dan akademisi
- - contoh kode di C
- - cons:
- - dapat secara penuh dan tak tertembus sebagai CLRS, dan dalam beberapa kasus, CLRS mungkin menjadi alternatif yang lebih baik untuk beberapa mata pelajaran
- - bab 7, 8, 9 bisa menyakitkan untuk mencoba mengikutinya, karena beberapa item yang tidak dijelaskan dengan baik atau membutuhkan kinerja otak yang lebih daripada yang saya miliki
- - jangan salah paham: Saya suka Skiena, gaya mengajarnya, dan kelakuannya, tapi aku mungkin tidak akan seperti bahan Stony Brook.
- - algorithm catalog:
- - ini adalah alasan nyata kamu membeli buku ini
- - tentang untuk mendapatkan bagian ini. Akan diperbarui disini suatu waktu setelah saya membuat jalan melewati itu.
- - Mengutip Yegge: "More than any other book it helped me understand just how astonishingly commonplace
- (and important) graph problems are – they should be part of every working programmer's toolkit. The book also
- covers basic data structures and sorting algorithms, which is a nice bonus. But the gold mine is the second half
- of the book, which is a sort of encyclopedia of 1-pagers on zillions of useful problems and various ways to solve
- them, without too much detail. Almost every 1-pager has a simple picture, making it easy to remember. This is a
- great way to learn how to identify hundreds of problem types."
- - Dapat menyewa di kindle
- - Half.com adalah sumber daya yang besar untuk buku dengan harga yang baik.
- - Jawaban:
- - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)
- - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
- - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
-
-- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
- - **Penting:** Membaca buku ini hanya akan memiliki nilai yang terbatas. Buku ini adalah review besar algoritma dan struktur data, tetapi akan mengajarkan cara menulis kode yang baik. Anda harus dapat mengkode yang layak secara efisien.
- - Mengutip Yegge: "But if you want to come into your interviews *prepped*, then consider deferring your application until you've made your way through that book."
- - Half.com adalah sumber daya yang besar untuk buku dengan harga yang baik.
- - aka CLR, terkadang CLRS, karena Stein terlambat untuk permainan.
-
-- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
- - Pasangan pertama dari bab yang menyajikan solusi cerdas untuk masalah pemrogramman (beberapa sangat tua saat menggunakan tipe data) tapi itu hanya sebuah intro. Ini sebuah buku panduan tentang program desain dan arsitektur, seperti Code Complete, tapi jauh lebih pendek.
-
-- ~~"Algorithms and Programming: Problems and Solutions" oleh Shen~~
- - Sebuah buku yang baik, tapi setelah bekerja melalui masalah pada halaman, saya frustasi dengan Pascal, do while loops, 1-indexed arrays, dan hasil post-condition yang tidak jelas.
- - Lebih suka menghabiskan waktu di masalah coding dari buku lain atau masalah coding online.
-
+- [ ] [Struktur Data Terbuka di Python](https://opendatastructures.org/ods-python.pdf)
## Sebelum Anda Mulai
-Daftar ini tumbuh selama berbulan-bulan, dan ya, itu jenis keluaran dari tangan.
+Daftar ini tumbuh selama berbulan-bulan, dan ya, menjadi sulit untuk diatur.
Berikut adalah beberapa kesalahan yang saya buat sehingga anda akan memiliki pengalaman yang lebih baik.
-### 1. Kamu Tidak Akan Mengingat Semuanya
+### 1. Anda Tidak Akan Mengingat Semuanya
Saya menonton video berjam-jam dan mengambil catatan yang berlebihan, dan beberapa bulan kemudian disana ada banyak yang tidak saya ingat. Saya menghabiskan 3 hari melalui catatan saya dan membuat flashcards sehingga saya bisa meninjaunya dengan lebih cepat.
@@ -423,6 +316,8 @@ Tolong baca sehingga anda tidak akan membuat kesalahan seperti saya:
[Menguasai Pengetahuan Ilmu Komputer](https://googleyasheck.com/retaining-computer-science-knowledge/)
+Sebuah kursus yang direkomendasikan kepada saya (belum pernah saya ambil): [Belajar cara Belajar](https://www.coursera.org/learn/learning-how-to-learn).
+
### 2. Menggunakan Flashcards
Untuk mengatasi masalah tersebut, saya membuat situs flashcards kecil di mana saya bisa menambahkan flashcards dari 2 jenis: umum dan code. Setiap kartu memiliki format yang berbeda.
@@ -432,8 +327,8 @@ Saya membuat sebuah mobile-first website jadi saya bisa mereview di telepon dan
Membuat punya anda sendiri secara gratis:
- [Repo website flashcards](https://github.com/jwasham/computer-science-flash-cards)
-- [Database flashcards saya (lama - 1200 kartu)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [Database flashcards saya (baru - 1800 kartu)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [Database flashcards saya (lama - 1200 kartu)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [Database flashcards saya (baru - 1800 kartu)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
Perlu diingat aku pergi keluar kapal dan memiliki kartu meliputi segala sesuatu dari bahasa assembly dan Python trivia untuk pembelajaran machine learning dan statistik. Ini terlalu banyak untuk apa yang diminta oleh Google.
@@ -446,20 +341,27 @@ Ini user-friendly, yang tersedia di semua platform dan memiliki sebuah sistem cl
Database flashcard saya di format Anki: https://ankiweb.net/shared/info/25173560 (terimakasih [@xiewenya](https://github.com/xiewenya))
-### 3. Review, review, review
+### 3. Mulailah membuat pertanyaan wawancara coding saat Anda mempelajari struktur data dan algoritme
+
+Anda perlu menerapkan apa yang Anda pelajari untuk memecahkan masalah, atau Anda akan lupa. Saya melakukan kesalahan ini. Setelah Anda mempelajari suatu topik, dan merasa nyaman dengannya, seperti daftar tertaut, buka salah satu buku wawancara pengkodean dan lakukan beberapa pertanyaan tentang daftar tertaut.
+Kemudian lanjutkan ke topik pembelajaran berikutnya. Kemudian, kembali dan lakukan masalah daftar tertaut lainnya,
+atau masalah rekursi, atau apa pun. Tapi tetaplah mengerjakan soal sambil belajar.
+Anda tidak dipekerjakan karena pengetahuan, tetapi bagaimana Anda menerapkan pengetahuan itu.
+Ada beberapa buku dan situs yang saya rekomendasikan. Lihat di sini untuk lebih lanjut: [Latihan Pertanyaan Pemrograman](#latihan-pertanyaan-pemrograman).
-Aku menyimpan satu set cheat sheet pada ASCII, OSI stack, Big-O notasi, dan banyak lagi. Saya mempelajari mereka ketika saya memiliki beberapa waktu luang.
+### 4. Review, review, review
+
+Aku menyimpan satu set cheat sheet pada ASCII, OSI stack, Big-O notasi, dan banyak lagi. Saya mempelajarinya ketika saya memiliki waktu luang.
Mengambil istirahat dari masalah pemgrogramman selama setengah jam dan pergi melalui flashcards anda.
-### 4. Fokus
+### 5. Fokus
-Disana ada banyak gangguan yang dapat menyita waktu yang berharga. Fokus dan kosentrasi adalah hal yang sulit.
+Ada banyak gangguan yang dapat menghabiskan waktu yang berharga. Fokus dan konsentrasi sulit. Nyalakan musik tanpa lirik dan Anda akan dapat fokus dengan baik.
## Apa yang Tidak Akan Dibahas
-Daftar besar ini semua dimulai sebagai daftar to-do pribadi yang dibuat dari catatan Google interview coaching. Ini adalah
-teknologi lazim mereka tetapi tidak disebutkan dalam catatan itu:
+Ini adalah teknologi yang lazim tetapi bukan bagian dari rencana studi ini:
- SQL
- Javascript
@@ -487,9 +389,9 @@ Mengapa meng-kode di semua ini?
Saya mungkin tidak punya waktu untuk melakukan semua ini untuk setiap mata pelajaran, tapi saya akan mencobanya.
Anda dapat melihat kode saya di sini:
- - [C] (https://github.com/jwasham/practice-c)
- - [C++] (https://github.com/jwasham/practice-cpp)
- - [Python] (https://github.com/jwasham/practice-python)
+ - [C](https://github.com/jwasham/practice-c)
+ - [C++](https://github.com/jwasham/practice-cpp)
+ - [Python](https://github.com/jwasham/practice-python)
Anda tidak perlu susah payah menghafal setiap algoritma.
@@ -497,463 +399,462 @@ Menulis kode pada papan tulis atau kertas, bukan komputer. Uji dengan beberapa s
## Ilmu Prasyarat
-- [ ] **Belajar C**
- - C ada dimana-mana. Anda akan melihat contoh di buku, perkuliahan, video, *dimanapun* ketika kamu belajar.
- - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
- - Ini adalah sebuah buku yang pendek, tapi itu akan memberikanmu sebuah pegangan yang kuat di bahasa C dan Anda akan melakukan latihan kecil
- dengan secara singkat dan cakap. Memahami C akan membantu anda memahami bagaimana program dan memori itu bekerja.
- - [answers to questions](https://github.com/lekkas/c-algorithms)
+- [ ] **belajar C**
+ - C ada dimana-mana. Anda akan melihat contoh di buku, lecture, video, *di mana-mana* saat Anda belajar
+ - [ ] [Bahasa Pemrograman C, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
+ - Ini adalah buku singkat, tetapi akan memberi Anda pemahaman yang baik tentang bahasa C dan jika Anda mempraktikkannya sedikit, Anda akan segera menjadi mahir. Memahami C membantu Anda memahami bagaimana program dan memori bekerja
+ - [Jawaban atas pertanyaan](https://github.com/lekkas/c-algorithms)
-- [ ] **Bagaimana komputer memproses sebuah program:**
- - [ ] [How does CPU execute program (video)](https://www.youtube.com/watch?v=42KTvGYQYnA)
- - [ ] [Machine Code Instructions (video)](https://www.youtube.com/watch?v=Mv2XQgpbTNE)
+- [ ] **Bagaimana komputer memproses program:**
+ - [ ] [Bagaimana CPU menjalankan program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA)
+ - [ ] [Bagaimana komputer menghitung - ALU (video)](https://youtu.be/1I5ZMmrOfnA)
+ - [ ] [Registers dan RAM (video)](https://youtu.be/fpnE6UAfbtU)
+ - [ ] [Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60)
+ - [ ] [Instruksi dan Program (video)](https://youtu.be/zltgXvg6r3k)
## Kompleksitas Algoritma / Big-O / Analisis Asimptotik
-- tidak ada untuk dilaksanakan
-- [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
-- [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU)
-- [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
+
+- Tidak ada yang bisa diterapkan
+- Ada banyak video di sini. Cukup tonton sampai Anda memahaminya. Anda selalu dapat kembali dan mengulas
+- Jika beberapa kuliah terlalu matematis, Anda dapat melompat ke bawah dan menonton video matematika diskrit untuk mendapatkan pengetahuan latar belakang
+- [ ] [Harvard CS50 - Notasi Asimtotik (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
+- [ ] [Notasi Big O (tutorial singkat umum) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU)
+- [ ] [Notasi Big O (dan Omega dan Theta) - penjelasan matematika terbaik (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
- [ ] Skiena:
- [video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [slides](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf)
-- [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/)
-- [ ] [Orders of Growth (video)](https://class.coursera.org/algorithmicthink1-004/lecture/59)
-- [ ] [Asymptotics (video)](https://class.coursera.org/algorithmicthink1-004/lecture/61)
-- [ ] [UC Berkeley Big O (video)](https://youtu.be/VIS4YDpuP98)
-- [ ] [UC Berkeley Big Omega (video)](https://youtu.be/ca3e7UVmeUc)
-- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
-- [ ] [Illustrating "Big O" (video)](https://class.coursera.org/algorithmicthink1-004/lecture/63)
+ - [slide](https://archive.org/details/lecture2_202008)
+- [ ] [Pengantar Lembut untuk Analisis Kompleksitas Algoritma](http://discrete.gr/complexity/)
+- [ ] [Orders of Growth (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX)
+- [ ] [Asimtotik (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM)
+- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98)
+- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc)
+- [ ] [Analisis Amortisasi (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
+- [ ] [Mengilustrasikan "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv)
- [ ] TopCoder (includes recurrence relations and master theorem):
- - [Computational Complexity: Section 1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/)
- - [Computational Complexity: Section 2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/)
+ - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/)
+ - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/)
- [ ] [Cheat sheet](http://bigocheatsheet.com/)
-
- Jika beberapa ceramah terlalu membingunkan, anda dapat melompatinya kebawah dan
- tonton the discrete mathematics videos untuk mendapatkan latar belakang pengetahuan.
-
## Struktur Data
- ### Arrays
- - Implement an automatically resizing vector.
- - [ ] Description:
- - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays)
- - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s)
- - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4)
- - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4)
- - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays)
- - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g)
- - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4)
- - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4)
- - [ ] Implement a vector (mutable array with automatic resizing):
- - [ ] Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
- - [ ] new raw data array with allocated memory
- - can allocate int array under the hood, just not use its features
- - start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128
- - [ ] size() - number of items
- - [ ] capacity() - number of items it can hold
+ - Menerapkan vektor yang mengubah ukuran secara otomatis.
+ - [ ] Deskripsi:
+ - [Array (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF)
+ - [UC Berkeley CS61B - Array Linear dan Multi-Dim (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Mulailah menonton dari 15m 32s)
+ - [Array Dinamis (video)](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV)
+ - [Array Bergerigi (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g)
+ - [ ] Menerapkan vektor (array yang bisa berubah dengan ukuran otomatis):
+ - [ ] Berlatih coding menggunakan array dan pointer, dan matematika pointer untuk melompat ke indeks daripada menggunakan pengindeksan.
+ - [ ] Array data mentah baru dengan memori yang dialokasikan
+ - dapat mengalokasikan array int di bawah tenda, hanya saja tidak menggunakan fitur-fiturnya
+ - start dengan 16, atau jika angka awal lebih besar, gunakan pangkat 2 - 16, 32, 64, 128
+ - [ ] size() - jumlah item
+ - [ ] capacity() - jumlah barang yang bisa ditampungnya
- [ ] is_empty()
- - [ ] at(index) - returns item at given index, blows up if index out of bounds
+ - [ ] at(index) - mengembalikan item pada indeks tertentu, meledak jika indeks di luar batas
- [ ] push(item)
- - [ ] insert(index, item) - inserts item at index, shifts that index's value and trailing elements to the right
- - [ ] prepend(item) - can use insert above at index 0
- - [ ] pop() - remove from end, return value
- - [ ] delete(index) - delete item at index, shifting all trailing elements left
- - [ ] remove(item) - looks for value and removes index holding it (even if in multiple places)
- - [ ] find(item) - looks for value and returns first index with that value, -1 if not found
- - [ ] resize(new_capacity) // private function
- - when you reach capacity, resize to double the size
- - when popping an item, if size is 1/4 of capacity, resize to half
- - [ ] Time
- - O(1) to add/remove at end (amortized for allocations for more space), index, or update
- - O(n) to insert/remove elsewhere
- - [ ] Space
- - contiguous in memory, so proximity helps performance
- - space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n)
+ - [ ] insert(index, item) - menyisipkan item pada indeks, menggeser nilai indeks dan elemen tambahan ke kanan
+ - [ ] prepend(item) - dapat menggunakan sisipan di atas pada indeks 0
+ - [ ] pop() - hapus dari akhir, nilai kembali
+ - [ ] delete(index) - hapus item pada indeks, menggeser semua elemen tertinggal ke kiri
+ - [ ] remove(item) - mencari nilai dan menghapus indeks yang menahannya (meskipun di banyak tempat)
+ - [ ] find(item) - mencari nilai dan mengembalikan indeks pertama dengan nilai itu, -1 jika tidak ditemukan
+ - [ ] resize(new_capacity) // fungsi pribadi
+ - saat Anda mencapai kapasitas, ubah ukurannya menjadi dua kali lipat
+ - saat memunculkan item, jika ukurannya 1/4 dari kapasitas, ubah ukurannya menjadi setengah
+ - [ ] Waktu
+ - O(1) untuk menambah/menghapus di akhir (diamortisasi untuk alokasi untuk lebih banyak ruang), indeks, atau pembaruan
+ - O(n) untuk memasukkan/menghapus di tempat lain
+ - [ ] Ruang
+ - berdekatan dalam memori, jadi kedekatan membantu kinerja
+ - ruang yang dibutuhkan = (kapasitas array, yaitu >= n)*ukuran item, tetapi meskipun 2n, tetap O(n)
- ### Linked Lists
- - [ ] Description:
- - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists)
- - [ ] [CS 61B - Linked Lists (video)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5)
- - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
- - not the whole video, just portions about Node struct and memory allocation.
- - [ ] Linked List vs Arrays:
- - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays)
- - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays)
- - [ ] [why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo)
- - [ ] Gotcha: you need pointer to pointer knowledge:
- (for when you pass a pointer to a function that may change the address where that pointer points)
- This page is just to get a grasp on ptr to ptr. I don't recommend this list traversal style. Readability and maintainability suffer due to cleverness.
- - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html)
- - [ ] implement (I did with tail pointer & without):
- - [ ] size() - returns number of data elements in list
- - [ ] empty() - bool returns true if empty
- - [ ] value_at(index) - returns the value of the nth item (starting at 0 for first)
- - [ ] push_front(value) - adds an item to the front of the list
- - [ ] pop_front() - remove front item and return its value
- - [ ] push_back(value) - adds an item at the end
- - [ ] pop_back() - removes end item and returns its value
- - [ ] front() - get value of front item
- - [ ] back() - get value of end item
- - [ ] insert(index, value) - insert value at index, so current item at that index is pointed to by new item at index
- - [ ] erase(index) - removes node at given index
- - [ ] value_n_from_end(n) - returns the value of the node at nth position from the end of the list
- - [ ] reverse() - reverses the list
- - [ ] remove_value(value) - removes the first item in the list with this value
+ - [ ] Deskripsi:
+ - [ ] [Singly Linked Lists (video)](https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK)
+ - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0)
+ - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w)
+ - [ ] [Kode C (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
+ - bukan keseluruhan video, hanya bagian tentang struct Node dan alokasi memori
+ - [ ] Linked List vs Array:
+ - [Daftar Linked List Vs Array (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9)
+ - [Di Dunia Nyata Linked List Vs Array (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd)
+ - [ ] [mengapa Anda harus menghindari linked list (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo)
+ - [ ] Gotcha: Anda perlu pengetahuan pointer ke pointer:
+ (untuk saat Anda meneruskan pointer ke fungsi yang dapat mengubah alamat tempat pointer itu menunjuk)
+ Halaman ini hanya untuk memahami pointer ke pointer. Saya tidak merekomendasikan gaya traversal daftar ini. Keterbacaan dan pemeliharaan menderita karena kepintaran.
+ - [Pointer ke Pointer](https://www.eskimo.com/~scs/cclass/int/sx8.html)
+ - [ ] Implementasikan (saya lakukan dengan tail pointer & tanpa):
+ - [ ] size() - mengembalikan jumlah elemen data dalam daftar
+ - [ ] empty() - bool mengembalikan nilai true jika kosong
+ - [ ] value_at(index) - mengembalikan nilai item ke-n (mulai dari 0 untuk yang pertama)
+ - [ ] push_front(value) - menambahkan item ke depan daftar
+ - [ ] pop_front() - hapus item depan dan kembalikan nilainya
+ - [ ] push_back(value) - menambahkan item di akhir
+ - [ ] pop_back() - menghapus item akhir dan mengembalikan nilainya
+ - [ ] front() - dapatkan nilai barang depan
+ - [ ] back() - dapatkan nilai item akhir
+ - [ ] insert(index, value) - masukkan nilai pada indeks, maka item saat ini pada indeks tersebut ditunjuk oleh item baru pada indeks
+ - [ ] erase(index) - menghapus node pada indeks tertentu
+ - [ ] value_n_from_end(n) - mengembalikan nilai node pada posisi ke-n dari akhir daftar
+ - [ ] reverse() - membalikkan daftar
+ - [ ] remove_value(value) - menghapus item pertama dalam daftar dengan nilai ini
- [ ] Doubly-linked List
- - [Description (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists)
- - No need to implement
+ - [Deskripsi (video)](https://www.coursera.org/lecture/data-structures/doubly-linked-lists-jpGKD)
+ - Tidak perlu diimplementasikan
- ### Stack
- - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks)
- - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4)
- - [ ] Will not implement. Implementing with array is trivial.
+ - [ ] [Stack (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ)
+ - [ ] Tidak akan diterapkan. Implementasi dengan array itu sepele
- ### Queue
- - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4)
- - [ ] [Queue (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue)
+ - Queue (Antrean)
+ - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq)
- [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer)
- - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4)
- - [ ] Implement using linked-list, with tail pointer:
- - enqueue(value) - adds value at position at tail
- - dequeue() - returns value and removes least recently added element (front)
+ - [ ] Implementasikan menggunakan linked-list, dengan tail pointer:
+ - enqueue(value) - menambah nilai pada posisi di ekor
+ - dequeue() - mengembalikan nilai dan menghapus elemen yang paling baru ditambahkan (depan)
- empty()
- - [ ] Implement using fixed-sized array:
- - enqueue(value) - adds item at end of available storage
- - dequeue() - returns value and removes least recently added element
+ - [ ] Menerapkan menggunakan array berukuran tetap:
+ - enqueue(value) - menambahkan item di akhir penyimpanan yang tersedia
+ - dequeue() - mengembalikan nilai dan menghapus elemen yang paling baru ditambahkan
- empty()
- full()
- - [ ] Cost:
- - a bad implementation using linked list where you enqueue at head and dequeue at tail would be O(n)
- because you'd need the next to last element, causing a full traversal each dequeue
- - enqueue: O(1) (amortized, linked list and array [probing])
- - dequeue: O(1) (linked list and array)
- - empty: O(1) (linked list and array)
+ - [ ] Biaya:
+ - implementasi yang buruk menggunakan daftar tertaut di mana Anda mengantre di bagian depan
+ dan antrean di bagian ekor akan menjadi O(n) karena Anda memerlukan elemen di sebelah terakhir,
+ menyebabkan traversal penuh setiap dequeue
+ - enqueue: O(1) (diamortisasi, daftar tertaut dan larik [probing])
+ - dequeue: O(1) (daftar dan larik tertaut)
+ - empty: O(1) (daftar dan larik tertaut)
- ### Hash table
- - [ ] Videos:
- - [ ] [Hashing with Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8)
- - [ ] [Table Doubling, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [Open Addressing, Cryptographic Hashing (video)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] Video:
+ - [ ] [Hashing dengan Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8)
+ - [ ] [Penggandaan Table, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [Open Addressing, Hashing Kriptografi (video)](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)
- - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (video)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11)
- - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4)
-
- - [ ] Online Courses:
- - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4)
- - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4)
- - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4)
- - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4)
- - [ ] [Core Hash Tables (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables)
- - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/3)
- - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem)
- - [ ] distributed hash tables:
- - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox)
- - [Distributed Hash Tables (video)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables)
-
- - [ ] implement with array using linear probing
- - hash(k, m) - m is size of hash table
- - add(key, value) - if key already exists, update value
+ - [ ] [(Lanjutan) Pengacakan: Universal & Hashing Sempurna (video)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11)
+ - [ ] [(Lanjutan) Hash sempurna (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4)
+
+ - [ ] Kursus Online:
+ - [ ] [Tabel Hash Inti (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-hash-tables-m7UuP)
+ - [ ] [Struktur Data (video)](https://www.coursera.org/learn/data-structures/home/week/4)
+ - [ ] [Masalah Buku Telepon (video)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP)
+ - [ ] tabel hash terdistribusi:
+ - [Unggahan Instan dan Pengoptimalan Penyimpanan Di Dropbox (video)](https://www.coursera.org/lecture/data-structures/instant-uploads-and-storage-optimization-in-dropbox-DvaIb)
+ - [Tabel Hash Terdistribusi (video)](https://www.coursera.org/lecture/data-structures/distributed-hash-tables-tvH8H)
+
+ - [ ] Implementasikan dengan array menggunakan probing linier
+ - hash(k, m) - m adalah ukuran tabel hash
+ - add(key, value) - jika kunci sudah ada, perbarui nilai
- exists(key)
- get(key)
- remove(key)
-## More Knowledge
+## Lebih Banyak Pengetahuan
-- ### Binary search
- - [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno)
- - [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search)
- - [ ] [detail](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/)
- - [ ] Implement:
- - binary search (on sorted array of integers)
- - binary search using recursion
+- ### Pencarian Biner
+ - [ ] [Pencarian Biner (video)](https://www.youtube.com/watch?v=D5SrAga1pno)
+ - [ ] [Pencarian Biner (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search)
+ - [ ] [detail](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/)
+ - [ ] Implementkan:
+ - pencarian biner (pada susunan bilangan bulat yang diurutkan)
+ - pencarian biner menggunakan rekursi
-- ### Bitwise operations
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- - [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
+- ### Operasi Bitwise
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - Anda harus mengetahui banyak pangkat 2 dari (2^1 hingga 2^16 dan 2^32)
+ - [ ] Dapatkan pemahaman yang sangat baik tentang memanipulasi bit dengan: &, |, ^, ~, >>, <<
+ - [ ] [kata-kata](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
[Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I)
- - [ ] [C Programming Tutorial 2-10: Bitwise Operators (video)](https://www.youtube.com/watch?v=d0AwjSpNXR0)
- - [ ] [Bit Manipulation](https://en.wikipedia.org/wiki/Bit_manipulation)
- - [ ] [Bitwise Operation](https://en.wikipedia.org/wiki/Bitwise_operation)
- - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html)
- - [ ] [The Bit Twiddler](http://bits.stephan-brumme.com/)
- - [ ] [The Bit Twiddler Interactive](http://bits.stephan-brumme.com/interactive.html)
- - [ ] 2s and 1s complement
- - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4)
- - [1s Complement](https://en.wikipedia.org/wiki/Ones%27_complement)
- - [2s Complement](https://en.wikipedia.org/wiki/Two%27s_complement)
- - [ ] count set bits
- - [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc)
- - [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan)
- - [How To Count The Number Of Set Bits In a 32 Bit Integer](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer)
- - [ ] round to next power of 2:
- - [Round Up To Next Power Of Two](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html)
- - [ ] swap values:
- - [Swap](http://bits.stephan-brumme.com/swap.html)
- - [ ] absolute value:
- - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html)
+ - [ ] [C Tutorial Pemrograman 2-10: Operator Bitwise (video)](https://www.youtube.com/watch?v=d0AwjSpNXR0)
+ - [ ] [Manipulasi Bit](https://en.wikipedia.org/wiki/Bit_manipulation)
+ - [ ] [Operasi Bitwise](https://en.wikipedia.org/wiki/Bitwise_operation)
+ - [ ] [Bithack](https://graphics.stanford.edu/~seander/bithacks.html)
+ - [ ] [Bit Twiddler](https://bits.stephan-brumme.com/)
+ - [ ] [Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html)
+ - [ ] [Bit Hacks (video)](https://www.youtube.com/watch?v=ZusiKXcz_ac)
+ - [ ] [Operasi Praktek](https://pconrad.github.io/old_pconrad_cs16/topics/bitOps/)
+ - [ ] Pelengkap 2s dan 1s
+ - [Biner: Plus & Minus (Mengapa Kami Menggunakan Pelengkap Dua) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4)
+ - [Pelengkap 1s](https://en.wikipedia.org/wiki/Ones%27_complement)
+ - [Pelengkap 2s](https://en.wikipedia.org/wiki/Two%27s_complement)
+ - [ ] Hitung bit set
+ - [4 cara untuk menghitung bit dalam satu byte (video)](https://youtu.be/Hzuzo9NJrlc)
+ - [Hitung Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan)
+ - [Bagaimana Menghitung Jumlah Set Bits Dalam Integer 32 Bit](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer)
+ - [ ] Tukar nilai:
+ - [Tukar](https://bits.stephan-brumme.com/swap.html)
+ - [ ] Nilai mutlak:
+ - [Integer Mutlak](https://bits.stephan-brumme.com/absInteger.html)
## Trees
-- ### Trees - Notes & Background
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- - [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- - basic tree construction
+- ### Trees - Catatan & Latar Belakang
+ - [ ] [Seri: Trees (video)](https://www.coursera.org/lecture/data-structures/trees-95qda)
+ - konstruksi pohon dasar
- traversal
- - manipulation algorithms
- - BFS (breadth-first search)
- - [MIT (video)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13)
- - level order (BFS, using queue)
- time complexity: O(n)
- space complexity: best: O(1), worst: O(n/2)=O(n)
- - DFS (depth-first search)
- - [MIT (video)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14)
- - notes:
- time complexity: O(n)
- space complexity:
- best: O(log n) - avg. height of tree
- worst: O(n)
- - inorder (DFS: left, self, right)
- - postorder (DFS: left, right, self)
- - preorder (DFS: self, left, right)
+ - algoritma manipulasi
+ - [ ] [BFS(breadth-first search) dan DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM)
+ - Catatan BFS:
+ - level order (BFS, menggunakan queue)
+ - kompleksitas waktu: O(n)
+ - kompleksitas ruang:
+ terbaik: O(1)
+ terburuk: O(n/2)=O(n)
+ - Catatan DFS:
+ - kompleksitas waktu: O(n)
+ - kompleksitas ruang:
+ terbaik: O(log n) - rata-rata. ketinggian tree
+ terburuk: O(n)
+ - dalam urutan (DFS: kiri, sendiri/self, kanan)
+ - pasca urutan (DFS: kiri, kanan, sendiri/self)
+ - pra urutan (DFS: sendiri/self, kiri, kanan)
- ### Binary search trees: BSTs
- - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [Series (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees)
+ - [ ] [Ulasan Binary Search Tree (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [Serial (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees)
- starts with symbol table and goes through BST applications
- - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction)
+ - [ ] [Pendahuluan (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction)
- [ ] [MIT (video)](https://www.youtube.com/watch?v=9Jry5-82I68)
- C/C++:
- - [ ] [Binary search tree - Implementation in C/C++ (video)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28)
- - [ ] [BST implementation - memory allocation in stack and heap (video)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29)
- - [ ] [Find min and max element in a binary search tree (video)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
- - [ ] [Find height of a binary tree (video)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31)
- - [ ] [Binary tree traversal - breadth-first and depth-first strategies (video)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32)
- - [ ] [Binary tree: Level Order Traversal (video)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [Binary search tree - Implementasi di C/C++ (video)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28)
+ - [ ] [Implementasi BST - alokasi memori di stack dan heap (video)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29)
+ - [ ] [Temukan min dan max elemen dalam binary search tree (video)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [Temukan ketinggian pohon biner (video)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31)
+ - [ ] [Binary tree traversal - strategi luas-pertama dan mendalam-pertama (video)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32)
+ - [ ] [Pohon biner: Level Order Traversal (video)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
- [ ] [Binary tree traversal: Preorder, Inorder, Postorder (video)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
- - [ ] [Check if a binary tree is binary search tree or not (video)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
- - [ ] [Delete a node from Binary Search Tree (video)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36)
- - [ ] [Inorder Successor in a binary search tree (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
- - [ ] Implement:
- - [ ] insert // insert value into tree
- - [ ] get_node_count // get count of values stored
- - [ ] print_values // prints the values in the tree, from min to max
+ - [ ] [Periksa apakah pohon biner adalah binary search tree atau bukan (video)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [Hapus node dari Binary Search Tree (video)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36)
+ - [ ] [Penerus Berurutan di binary search tree (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] Implementasikan:
+ - [ ] insert // masukkan nilai ke dalam pohon
+ - [ ] get_node_count // dapatkan hitungan nilai yang disimpan
+ - [ ] print_values // mencetak nilai di pohon, dari min hingga maks
- [ ] delete_tree
- - [ ] is_in_tree // returns true if given value exists in the tree
- - [ ] get_height // returns the height in nodes (single node's height is 1)
- - [ ] get_min // returns the minimum value stored in the tree
- - [ ] get_max // returns the maximum value stored in the tree
+ - [ ] is_in_tree // mengembalikan nilai true jika nilai yang diberikan ada di pohon
+ - [ ] get_height // mengembalikan tinggi dalam node (tinggi node tunggal adalah 1)
+ - [ ] get_min // mengembalikan nilai minimum yang disimpan di pohon
+ - [ ] get_max // mengembalikan nilai maksimum yang disimpan di pohon
- [ ] is_binary_search_tree
- [ ] delete_value
- - [ ] get_successor // returns next-highest value in tree after given value, -1 if none
+ - [ ] get_successor // mengembalikan nilai tertinggi berikutnya di pohon setelah nilai yang diberikan, -1 jika none
-- ### Heap / Priority Queue / Binary Heap
- - visualized as a tree, but is usually linear in storage (array, linked list)
+- ### Heap / Prioritas Antrian / Biner Heap
+ - Heap (tumpukan)
+ - Priority Queue (Prioritas Antrian)
+ - Binary Heap (Biner Heap)
+ - divisualisasikan sebagai pohon, tetapi biasanya linier dalam penyimpanan (array, linked list)
- [ ] [Heap](https://en.wikipedia.org/wiki/Heap_(data_structure))
- - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction)
- - [ ] [Naive Implementations (video)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations)
- - [ ] [Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees)
- - [ ] [Tree Height Remark (video)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark)
- - [ ] [Basic Operations (video)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations)
- - [ ] [Complete Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees)
+ - [ ] [Pendahuluan (video)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction)
+ - [ ] [Penerapan Naif (video)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations)
+ - [ ] [Pohon Biner (video)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees)
+ - [ ] [Keterangan Tinggi Pohon (video)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark)
+ - [ ] [Operasi Dasar (video)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations)
+ - [ ] [Pohon Biner Lengkap (video)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees)
- [ ] [Pseudocode (video)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode)
- - [ ] [Heap Sort - jumps to start (video)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291)
- - [ ] [Heap Sort (video)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort)
- - [ ] [Building a heap (video)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap)
- - [ ] [MIT: Heaps and Heap Sort (video)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [CS 61B Lecture 24: Priority Queues (video)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C)
+ - [ ] [Urutan Heap - lompat untuk memulai (video)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291)
+ - [ ] [Urutan Heap (video)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort)
+ - [ ] [Membangun heap (video)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap)
+ - [ ] [MIT: Heaps dan Heap Sort (video)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [CS 61B Kuliah 24: Antrian Prioritas (video)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE)
- [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw)
- - [ ] Implement a max-heap:
+ - [ ] Menerapkan sebuah max-heap:
- [ ] insert
- - [ ] sift_up - needed for insert
- - [ ] get_max - returns the max item, without removing it
- - [ ] get_size() - return number of elements stored
- - [ ] is_empty() - returns true if heap contains no elements
- - [ ] extract_max - returns the max item, removing it
- - [ ] sift_down - needed for extract_max
- - [ ] remove(i) - removes item at index x
- - [ ] heapify - create a heap from an array of elements, needed for heap_sort
- - [ ] heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap
- - note: using a min heap instead would save operations, but double the space needed (cannot do in-place).
-
-## Sorting
-
-- [ ] Notes:
- - Implement sorts & know best case/worst case, average complexity of each:
- - no bubble sort - it's terrible - O(n^2), except when n <= 16
- - [ ] stability in sorting algorithms ("Is Quicksort stable?")
- - [Sorting Algorithm Stability](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability)
- - [Stability In Sorting Algorithms](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms)
- - [Stability In Sorting Algorithms](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/)
- - [Sorting Algorithms - Stability](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf)
- - [ ] Which algorithms can be used on linked lists? Which on arrays? Which on both?
- - I wouldn't recommend sorting a linked list, but merge sort is doable.
- - [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/)
-
-- For heapsort, see Heap data structure above. Heap sort is great, but not stable.
-
-- [ ] [Sedgewick - Mergesort (5 videos)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
- - [ ] [1. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1)
- - [ ] [2. Bottom up Mergesort](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2)
- - [ ] [3. Sorting Complexity](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
- - [ ] [4. Comparators](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
- - [ ] [5. Stability](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
-
-- [ ] [Sedgewick - Quicksort (4 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
- - [ ] [1. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
- - [ ] [2. Selection](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
- - [ ] [3. Duplicate Keys](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
- - [ ] [4. System Sorts](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] sift_up - dibutuhkan untuk memasukkan
+ - [ ] get_max - mengembalikan item maksimal, tanpa menghapusnya
+ - [ ] get_size() - mengembalikan jumlah elemen yang disimpan
+ - [ ] is_empty() - mengembalikan nilai true jika heap tidak berisi elemen
+ - [ ] extract_max - mengembalikan item maksimal, menghapusnya
+ - [ ] sift_down - dibutuhkan untuk extract_max
+ - [ ] remove(i) - menghapus item pada indeks i
+ - [ ] heapify - membuat heap dari larik elemen, dibutuhkan untuk heap_sort
+ - [ ] heap_sort() - mengambil array yang tidak disortir dan mengubahnya menjadi array yang diurutkan di tempat menggunakan heap maks atau heap min
+
+## Penyortiran
+
+- [ ] Catatan:
+ - Terapkan sort & ketahui kasus terbaik / kasus terburuk, kompleksitas rata-rata masing-masing:
+ - tidak ada bubble sort - ini mengerikan - O(n^2), kecuali jika n<=16
+ - [ ] Stabilitas dalam algoritme pengurutan ("Apakah Quicksort stabil?")
+ - [Stabilitas Algoritma Penyortiran](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability)
+ - [Stabilitas Dalam Mengurutkan Algoritma](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms)
+ - [Stabilitas Dalam Mengurutkan Algoritma](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/)
+ - [Algoritma Pengurutan - Stabilitas](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf)
+ - [ ] Algoritme mana yang dapat digunakan pada linked lists? Yang mana pada array? Yang mana pada keduanya?
+ - Saya tidak akan merekomendasikan pengurutan linked lists, tetapi penggabungan semacam bisa dilakukan.
+ - [Merge Sort Untuk Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/)
+
+- Untuk heapsort, lihat struktur data Heap di atas. Jenis heap bagus, tapi tidak stabil
+
+- [ ] [Sedgewick - Mergesort (5 video)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
+ - [ ] [1. Penggabungan](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort)
+ - [ ] [2. Mergesort dari bawah ke atas](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort)
+ - [ ] [3. Kompleksitas Sortir](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity)
+ - [ ] [4. Pembanding](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators)
+ - [ ] [5. Stabilitas](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability)
+
+- [ ] [Sedgewick - Quicksort (4 video)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
+ - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort)
+ - [ ] [2. Seleksi](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection)
+ - [ ] [3. Kunci Duplikat](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys)
+ - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts)
- [ ] UC Berkeley:
- - [ ] [CS 61B Lecture 29: Sorting I (video)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29)
- - [ ] [CS 61B Lecture 30: Sorting II (video)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30)
- - [ ] [CS 61B Lecture 32: Sorting III (video)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C)
- - [ ] [CS 61B Lecture 33: Sorting V (video)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C)
+ - [ ] [CS 61B Kuliah 29: Penyortiran I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I)
+ - [ ] [CS 61B Kuliah 30: Penyortiran II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk)
+ - [ ] [CS 61B Kuliah 32: Penyortiran III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc)
+ - [ ] [CS 61B Kuliah 33: Penyortiran V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4)
- [ ] [Bubble Sort (video)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB)
-- [ ] [Analyzing Bubble Sort (video)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB)
-- [ ] [Insertion Sort, Merge Sort (video)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
-- [ ] [Insertion Sort (video)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB)
+- [ ] [Menganalisis Bubble Sort (video)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB)
+- [ ] [Sortir Penyisipan, Sortir Gabung (video)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+- [ ] [Sortir Penyisipan (video)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB)
- [ ] [Merge Sort (video)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB)
- [ ] [Quicksort (video)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB)
-- [ ] [Selection Sort (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB)
-
-- [ ] Merge sort code:
- - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c)
- - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py)
- - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc)
-- [ ] Quick sort code:
- - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c)
- - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c)
- - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py)
-
-- [ ] Implement:
- - [ ] Mergesort: O(n log n) average and worst case
- - [ ] Quicksort O(n log n) average case
- - Selection sort and insertion sort are both O(n^2) average and worst case
- - For heapsort, see Heap data structure above.
-
-- [ ] Not required, but I recommended them:
- - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
- - [ ] [1. Strings in Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6)
- - [ ] [2. Key Indexed Counting](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5)
- - [ ] [3. Least Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4)
- - [ ] [4. Most Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
- - [ ] [5. 3 Way Radix Quicksort](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
- - [ ] [6. Suffix Arrays](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1)
- - [ ] [Radix Sort](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort)
- - [ ] [Radix Sort (video)](https://www.youtube.com/watch?v=xhr26ia4k38)
- - [ ] [Radix Sort, Counting Sort (linear time given constraints) (video)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [Sorting in Linear Time (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14)
-
-If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects)
+- [ ] [Sortir Pilihan (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB)
+
+- [ ] Kode Merge sort:
+ - [ ] [Menggunakan keluaran array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c)
+ - [ ] [Menggunakan keluaran array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py)
+ - [ ] [Di tempat (C ++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc)
+- [ ] Kode Quick sort:
+ - [ ] [Implementasi (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c)
+ - [ ] [Implementasi (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c)
+ - [ ] [Implementasi (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py)
+
+- [ ] Implementasi:
+ - [ ] Mergesort: O(n log n) rata-rata dan kasus terburuk
+ - [ ] Quicksort: O(n log n) kasus rata-rata
+ - Sortir seleksi dan sortir penyisipan keduanya merupakan kasus rata-rata O (n ^ 2) dan terburuk
+ - Untuk heapsort, lihat struktur data Heap di atas
+
+- [ ] Tidak wajib, tetapi saya merekomendasikan mereka:
+ - [ ] [Sedgewick - Radix Sorts (6 video)](https://www.coursera.org/learn/algorithms-part2/home/week/3)
+ - [ ] [1. String di Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java)
+ - [ ] [2. Penghitungan Indeks Kunci](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting)
+ - [ ] [3. Urutan Radix String Pertama Digit Signifikan Terkecil](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort)
+ - [ ] [4. Urutan Radix String Pertama Digit Paling Signifikan](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort)
+ - [ ] [5. Radix Quicksort 3 Arah](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort)
+ - [ ] [6. Array Suffix](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
+ - [ ] [Sortir Radix](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort)
+ - [ ] [Sortir Radix (video)](https://www.youtube.com/watch?v=xhr26ia4k38)
+ - [ ] [Sortir Radix, Sortir Counting (waktu linier diberikan batasan) (video)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [Pengacakan: Penggandaan Matriks, Quicksort, Algoritma Freivalds (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [Menyortir dalam Waktu Linear (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14)
+
+Sebagai ringkasan, berikut adalah representasi visual dari [15 algoritma pengurutan](https://www.youtube.com/watch?v=kPRA0W1kECg).
+Jika Anda membutuhkan detail lebih lanjut tentang subjek ini, lihat bagian "Menyortir" di [Detail Tambahan tentang Beberapa Subjek](#detail-tambahan-tentang-beberapa-subjek)
## Graphs
-Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were.
+Graf (Graphs) dapat digunakan untuk merepresentasikan banyak masalah dalam ilmu komputer, jadi bagian ini panjang, seperti pohon dan penyortiran.
+
+- Catatan:
+ - Ada 4 cara dasar untuk merepresentasikan Graf dalam memori:
+ - objek dan pointer
+ - matriks kedekatan (adjacency matrix)
+ - daftar kedekatan (adjacency list)
+ - peta kedekatan (adjacency map)
+ - Biasakan diri Anda dengan setiap representasi beserta pro & kontranya
+ - BFS dan DFS - mengetahui kompleksitas komputasi mereka, trade off mereka, dan bagaimana menerapkannya dalam kode nyata
+ - Saat ditanya pertanyaan, cari solusi berbasis Graf terlebih dahulu, lalu lanjutkan jika tidak ada
-- Notes from Yegge:
- - There are three basic ways to represent a graph in memory:
- - objects and pointers
- - matrix
- - adjacency list
- - Familiarize yourself with each representation and its pros & cons
- - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
- - When asked a question, look for a graph-based solution first, then move on if none.
+- [ ] MIT (video):
+ - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13)
+ - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14)
-- [ ] Skiena Lectures - great intro:
- - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
+- [ ] Kuliah Skiena - pengantar yang bagus:
+ - [ ] [CSE373 2012 - Lecture 11 - Graphs Struktur Data (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
- [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
- - [ ] [CSE373 2012 - Lecture 13 - Graph Algorithms (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13)
- - [ ] [CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - Lecture 13 - Algoritma Graph (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13)
+ - [ ] [CSE373 2012 - Lecture 14 - Algoritma Graph (con't) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - Lecture 15 - Algoritma Graph (con't 2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - Lecture 16 - Algoritma Graph (con't 3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
-- [ ] Graphs (review and more):
+- [ ] Graphs (ulasan dan lainnya):
- - [ ] [6.006 Single-Source Shortest Paths Problem (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.006 Masalah Jalur Terpendek Sumber Tunggal (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17)
- - [ ] [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
- - [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- - [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
- - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
- - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
- - [ ] [CS 61B 2014 (starting at 58:09) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)
- - [ ] [CS 61B 2014: Weighted graphs (video)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19)
- - [ ] [Greedy Algorithms: Minimum Spanning Tree (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (video)](https://www.youtube.com/watch?v=RpgcYiky7uw)
-
-- Full Coursera Course:
- - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
-
-- Yegge: If you get a chance, try to study up on fancier algorithms:
- - [ ] Dijkstra's algorithm - see above - 6.006
- - [ ] A*
- - [ ] [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm)
- - [ ] [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
- - [ ] [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
-
-- I'll implement:
- - [ ] DFS with adjacency list (recursive)
- - [ ] DFS with adjacency list (iterative with stack)
- - [ ] DFS with adjacency matrix (recursive)
- - [ ] DFS with adjacency matrix (iterative with stack)
- - [ ] BFS with adjacency list
- - [ ] BFS with adjacency matrix
- - [ ] single-source shortest path (Dijkstra)
- - [ ] minimum spanning tree
- - DFS-based algorithms (see Aduni videos above):
- - [ ] check for cycle (needed for topological sort, since we'll check for cycle before starting)
- - [ ] topological sort
- - [ ] count connected components in a graph
- - [ ] list strongly connected components
- - [ ] check for bipartite graph
-
-You'll get more graph practice in Skiena's book (see Books section below) and the interview books
-
-## Even More Knowledge
-
-- ### Recursion
- - [ ] Stanford lectures on recursion & backtracking:
- - [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
- - [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
- - [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
- - [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
- - when it is appropriate to use it
- - how is tail recursion better than not?
- - [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
- - [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc)
-
-- ### Object-Oriented Programming
- - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
- - [ ] Object-Oriented Software Engineering: Software Dev Using UML and Java (21 videos):
- - Can skip this if you have a great grasp of OO and OO design practices.
- - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
- - [ ] SOLID OOP Principles:
- - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
- - [ ] [SOLID Design Patterns in C# (video)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ)
- - [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
- - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
- - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
- - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension for not for modification](https://en.wikipedia.org/wiki/Open/closed_principle)
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
- - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
- - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use
- - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
- - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects.
- - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
-
-- ### Design patterns
- - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
- - [ ] Learn these patterns:
+ - [ ] [6.006 Mempercepat Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
+ - [ ] [Aduni: Algoritma Graphs I - Sortasi Topologi, Pohon Rentang Minimum, Algoritma Prim - Kuliah 6 (video)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Aduni: Algoritma Graphs II - DFS, BFS, Algoritma Kruskal, Struktur Data Union Find - Kuliah 7 (video)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
+ - [ ] [Aduni: Algoritma Graphs III: Jalur Terpendek - Kuliah 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
+ - [ ] [Aduni: Algoritma Graphs IV: Pengantar algoritma geometris - Kuliah 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
+ - [ ] ~~[CS 61B 2014 (mulai dari 58:09) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)~~
+ - [ ] [CS 61B 2014: Graphs berbobot (video)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k)
+ - [ ] [Algoritma Serakah: Minimum Spanning Tree (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [Komponen yang Sangat Terhubung Algoritma Graphs Algoritma Kosaraju (video)](https://www.youtube.com/watch?v=RpgcYiky7uw)
+
+- Kursus Coursera Penuh:
+ - [ ] [Algoritma pada Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
+
+- Saya akan menerapkan:
+ - [ ] DFS dengan daftar kedekatan (rekursif)
+ - [ ] DFS dengan daftar adjacency (iteratif dengan stack)
+ - [ ] DFS dengan matriks adjacency (rekursif)
+ - [ ] DFS dengan matriks adjacency (iteratif dengan stack)
+ - [ ] BFS dengan daftar kedekatan
+ - [ ] BFS dengan matriks adjacency
+ - [ ] jalur terpendek sumber tunggal (Dijkstra)
+ - [ ] pohon rentang minimum
+ - Algoritme berbasis DFS (lihat video Aduni di atas):
+ - [ ] periksa siklus (diperlukan untuk pengurutan topologi, karena kami akan memeriksa siklus sebelum memulai)
+ - [ ] sortir topologi
+ - [ ] menghitung komponen yang terhubung dalam graf
+ - [ ] daftar komponen yang sangat terhubung
+ - [ ] periksa graf bipartit
+
+## Bahkan Lebih Banyak Pengetahuan
+
+- ### Pengulangan (Recursion)
+ - [ ] Kuliah Stanford tentang rekursi dan backtracking:
+ - [ ] [Kuliah 8 | Abstraksi Pemrograman (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
+ - [ ] [Kuliah 9 | Abstraksi Pemrograman (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
+ - [ ] [Kuliah 10 | Abstraksi Pemrograman (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
+ - [ ] [Kuliah 11 | Abstraksi Pemrograman (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
+ - Kapan saat yang tepat untuk menggunakannya?
+ - Bagaimana rekursi ekor lebih baik daripada tidak?
+ - [ ] [Apa Itu Rekursi Ekor Mengapa Sangat Buruk?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
+ - [ ] [Rekursi Ekor (video)](https://www.youtube.com/watch?v=L1jjXGfxozc)
+
+- ### Pemrograman Dinamis
+ - Anda mungkin tidak akan melihat masalah pemrograman dinamis dalam wawancara Anda, tetapi ada baiknya mengenali masalah sebagai kandidat untuk pemrograman dinamis (Dynamic Programming).
+ - Subjek ini bisa sangat sulit, karena setiap masalah pemecahan masalah pemrograman dinamis harus didefinisikan sebagai relasi rekursi, dan menyelesaikannya bisa rumit.
+ - Saya sarankan untuk melihat banyak contoh masalah pemrograman dinamis sampai Anda memiliki pemahaman yang kuat tentang pola yang terlibat.
+ - [ ] Video:
+ - video Skiena mungkin sulit untuk diikuti karena terkadang dia menggunakan papan tulis, yang terlalu kecil untuk dilihat
+ - [ ] [Skiena: CSE373 2012 - Kuliah 19 - Pengantar Pemrograman Dinamis (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718)
+ - [ ] [Skiena: CSE373 2012 - Kuliah 20 - Edit Jarak (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749)
+ - [ ] [Skiena: CSE373 2012 - Kuliah 21 - Contoh Pemrograman Dinamis (video)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406)
+ - [ ] [Skiena: CSE373 2012 - Kuliah 22 - Aplikasi Pemrograman Dinamis (video)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22)
+ - [ ] [Simonson: Pemrograman Dinamis 0 (dimulai pada 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558)
+ - [ ] [Simonson: Pemrograman Dinamis I - Kuliah 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Simonson: Pemrograman dinamis II - Kuliah 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12)
+ - [ ] Daftar masalah individu Pemrograman Dinamis (masing-masing pendek):
+ [Pemrograman Dinamis (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+ - [ ] Catatan Kuliah Yale:
+ - [ ] [Pemrograman Dinamis](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming)
+ - [ ] Coursera:
+ - [ ] [Masalah struktur sekunder RNA (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem)
+ - [ ] [Algoritma pemrograman dinamis (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm)
+ - [ ] [Mengilustrasikan algoritma DP (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm)
+ - [ ] [Waktu berjalan dari algoritma DP (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm)
+ - [ ] [DP vs. implementasi rekursif (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation)
+ - [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
+ - [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
+
+- ### Pemrograman Berorientasi Objek
+ - [ ] [Optional: UML 2.0 seri (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
+ - [ ] Prinsip SOLID OOP: [Prinsip SOLID (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
+
+- ### Pola desain (Design patterns)
+ - [ ] [Ulasan UML cepat(video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
+ - [ ] Pelajari pola-pola ini:
- [ ] strategy
- [ ] singleton
- [ ] adapter
@@ -971,1013 +872,1049 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- [ ] iterator
- [ ] composite
- [ ] flyweight
- - [ ] [Chapter 6 (Part 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
- - [ ] [Chapter 6 (Part 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
- - [ ] [Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
- - [ ] [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
+ - [ ] [Bab 6 (Bagian 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
+ - [ ] [Bab 6 (Bagian 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [Bab 6 (Bagian 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [Serial video (27 video)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
- [ ] [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
- - I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO.
- - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips)
+ - Saya tahu buku kanoniknya adalah "Design Patterns: Elements of Reusable Object-Oriented Software", tapi Head First sangat bagus untuk pemula hingga OO.
+ - [ ] [Referensi praktis: 101 Pola Desain & Tip untuk Pengembang](https://sourcemaking.com/design-patterns-and-tips)
-- ### Combinatorics (n choose k) & Probability
- - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
- - [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
- - [ ] [Make School: More Probability and Markov Chains (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
+
+- ### Kombinatorik (n pilih k) & Probabilitas
+ - [ ] [Keterampilan Matematika: Bagaimana menemukan Faktorial, Permutasi dan Kombinasi (Pilih) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
+ - [ ] [Jadikan Sekolah: Probabilitas (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
+ - [ ] [Jadikan Sekolah: Lebih Banyak Kemungkinan dan Rantai Markov (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
- [ ] Khan Academy:
- - Course layout:
- - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic)
- - Just the videos - 41 (each are simple and each are short):
- - [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
-
-- ### NP, NP-Complete and Approximation Algorithms
- - Know about the most famous classes of NP-complete problems, such as traveling salesman and the knapsack problem,
- and be able to recognize them when an interviewer asks you them in disguise.
- - Know what NP-complete means.
- - [ ] [Computational Complexity (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23)
+ - Tata letak kursus:
+ - [ ] [Probabilitas Teoritis Dasar](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic)
+ - Hanya videonya - 41 (masing-masing sederhana dan masing-masing pendek):
+ - [ ] [Probabilitas Dijelaskan (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
+
+- ### Algoritma NP, NP-Complete dan Approximation
+ - Ketahui tentang kelas paling terkenal dari masalah NP-complete, seperti travelling salesman dan knapsack problem,
+ dan kenali mereka saat pewawancara meminta Anda secara tidak langsung.
+ - Ketahui arti NP-complete.
+ - [ ] [Kompleksitas Komputasi (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23)
- [ ] Simonson:
- - [ ] [Greedy Algs. II & Intro to NP Completeness (video)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939)
+ - [ ] [Algoritme Serakah. II & Pengantar tentang NP-Completeness (video)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939)
- [ ] [NP Completeness II & Reductions (video)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- [ ] [NP Completeness III (Video)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- [ ] [NP Completeness IV (video)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18)
- [ ] Skiena:
- - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-Completeness (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508)
- - [ ] [CSE373 2012 - Lecture 24 - NP-Completeness Proofs (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [CSE373 2012 - Lecture 25 - NP-Completeness Challenge (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [Complexity: P, NP, NP-completeness, Reductions (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22)
- - [ ] [Complexity: Approximation Algorithms (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24)
- - [ ] [Complexity: Fixed-Parameter Algorithms (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - Peter Norvig discusses near-optimal solutions to traveling salesman problem:
+ - [ ] [CSE373 2012 - Kuliah 23 - Pengantar NP-Completeness (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508)
+ - [ ] [CSE373 2012 - Kuliah 24 - Bukti NP-Completeness (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - Kuliah 25 - Tantangan NP-Completeness (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [Kompleksitas: P, NP, NP-completeness, Reductions (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22)
+ - [ ] [Kompleksitas: Algoritma Perkiraan (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24)
+ - [ ] [Kompleksitas: Algoritma Parameter Tetap (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - Ppeter Norvig membahas solusi yang hampir optimal untuk masalah penjual keliling:
- [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb)
- - Pages 1048 - 1140 in CLRS if you have it.
+ - Halaman 1048 - 1140 di CLRS jika Anda memilikinya.
-- ### Caches
+- ### Cache
- [ ] LRU cache:
- - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M)
- - [ ] [Implementing LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI)
+ - [ ] [Keajaiban Cache LRU (100 Hari Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M)
+ - [ ] [Menerapkan LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI)
- [ ] [LeetCode - 146 LRU Cache (C++) (video)](https://www.youtube.com/watch?v=8-FZRAjR7qU)
- [ ] CPU cache:
- - [ ] [MIT 6.004 L15: The Memory Hierarchy (video)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24)
- - [ ] [MIT 6.004 L16: Cache Issues (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
-
-- ### Processes and Threads
- - [ ] Computer Science 162 - Operating Systems (25 videos):
- - for processes and threads see videos 1-11
- - [Operating Systems and System Programming (video)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
- - [What Is The Difference Between A Process And A Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread)
- - Covers:
- - Processes, Threads, Concurrency issues
- - difference between processes and threads
- - processes
- - threads
- - locks
- - mutexes
- - semaphores
- - monitors
- - how they work
- - deadlock
- - livelock
- - CPU activity, interrupts, context switching
- - Modern concurrency constructs with multicore processors
- - Process resource needs (memory: code, static storage, stack, heap, and also file descriptors, i/o)
- - Thread resource needs (shares above (minus stack) with other threads in the same process but each has its own pc, stack counter, registers, and stack)
- - Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy.
- - Context switching
- - How context switching is initiated by the operating system and underlying hardware
- - [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M)
- - [ ] concurrency in Python (videos):
- - [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1)
- - [ ] [Python Threads](https://www.youtube.com/watch?v=Bs7vPNbB9JM)
- - [ ] [Understanding the Python GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s)
- - [reference](http://www.dabeaz.com/GIL)
- - [ ] [David Beazley - Python Concurrency From the Ground Up: LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4)
- - [ ] [Keynote David Beazley - Topics of Interest (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU)
- - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY)
-
-- ### Papers
- - These are Google papers and well-known papers.
- - Reading all from end to end with full comprehension will likely take more time than you have. I recommend being selective on papers and their sections.
- - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
- - [implemented in Go](https://godoc.org/github.com/thomas11/csp)
- - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
- - [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
- - replaced by Colossus in 2012
- - [ ] [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
- - mostly replaced by Cloud Dataflow?
- - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
- - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf)
- - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf)
- - [ ] [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf)
- - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf)
- - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf)
- - [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/)
- - paper not available
- - [ ] 2012: AddressSanitizer: A Fast Address Sanity Checker:
- - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
- - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
- - [ ] 2013: Spanner: Google’s Globally-Distributed Database:
- - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
- - [video](https://www.usenix.org/node/170855)
- - [ ] [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
- - [ ] [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
- - [ ] [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
- - [ ] [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf )
- - [ ] [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
- - [ ] [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
+ - [ ] [MIT 6.004 L15: Hirarki Memori (video)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24)
+ - [ ] [MIT 6.004 L16: Masalah Cache (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+
+- ### Proses dan Thread
+ - [ ] Ilmu Komputer 162 - Sistem Operasi (25 video):
+ - untuk proses dan thread lihat video 1-11
+ - [Sistem Operasi dan Pemrograman Sistem (video)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
+ - [Apa Perbedaan Antara Proses dan Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread)
+ - Meliputi:
+ - Masalah Processes, Threads, Concurrency
+ - Perbedaan antara proses dan thread
+ - Processes
+ - Threads
+ - Locks
+ - Mutexes
+ - Semaphores
+ - Monitors
+ - Bagaimana cara kerjanya?
+ - Deadlock
+ - Livelock
+ - Aktivitas CPU, interupsi, pengalihan konteks
+ - Konstruksi konkurensi modern dengan prosesor multi inti
+ - [Paging, segmentasi, dan memori virtual (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2)
+ - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3)
+ - Kebutuhan resource proses (memori: kode, penyimpanan statis, stack, heap, dan juga deskriptor file, i /o)
+ - Kebutuhan sumber daya thread (berbagi di atas (dikurangi stack) dengan thread lain dalam proses yang sama tetapi masing-masing memiliki pc, penghitung stack, register, dan stacknya sendiri)
+ - Forking benar-benar menyalin saat menulis (hanya baca) hingga proses baru menulis ke memori, lalu menyalin penuh.
+ - Peralihan konteks
+ - Bagaimana peralihan konteks dimulai oleh sistem operasi dan perangkat keras yang mendasarinya?
+ - [ ] [thread di C ++ (seri - 10 video)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M)
+ - [ ] Konkurensi (Concurrency) dengan Python (video):
+ - [ ] [Serial pendek tentang thread](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1)
+ - [ ] [Thread Python](https://www.youtube.com/watch?v=Bs7vPNbB9JM)
+ - [ ] [Memahami Python GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s)
+ - [referensi](http://www.dabeaz.com/GIL)
+ - [ ] [David Beazley - Python Concurrency Dari Dasar Ke Atas: LANGSUNG! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4)
+ - [ ] [Keynote David Beazley - Topik Menarik (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU)
+ - [ ] [Mutex dengan Python](https://www.youtube.com/watch?v=0zaPs8OtyKY)
- ### Testing
- - To cover:
- - how unit testing works
- - what are mock objects
- - what is integration testing
- - what is dependency injection
- - [ ] [Agile Software Testing with James Bach (video)](https://www.youtube.com/watch?v=SAhJf36_u5U)
- - [ ] [Open Lecture by James Bach on Software Testing (video)](https://www.youtube.com/watch?v=ILkT_HV9DVU)
- - [ ] [Steve Freeman - Test-Driven Development (that’s not what we meant) (video)](https://vimeo.com/83960706)
+ - Meliputi:
+ - bagaimana unit testing bekerja
+ - apa itu objek tiruan (mock objects)
+ - apa itu pengujian integrasi (integration testing)
+ - apa itu dependency injection
+ - [ ] [Pengujian Perangkat Lunak Agile dengan James Bach (video)](https://www.youtube.com/watch?v=SAhJf36_u5U)
+ - [ ] [Kuliah Terbuka oleh James Bach tentang Pengujian Perangkat Lunak (video)](https://www.youtube.com/watch?v=ILkT_HV9DVU)
+ - [ ] [Steve Freeman - Pengembangan Berbasis Test (bukan itu yang kami maksudkan) (video)](https://vimeo.com/83960706)
- [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf)
- - [ ] [TDD is dead. Long live testing.](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html)
- - [ ] [Is TDD dead? (video)](https://www.youtube.com/watch?v=z9quxZsLcfo)
- - [ ] [Video series (152 videos) - not all are needed (video)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g)
- - [ ] [Test-Driven Web Development with Python](http://www.obeythetestinggoat.com/pages/book.html#toc)
- [ ] Dependency injection:
- [ ] [video](https://www.youtube.com/watch?v=IKD2-MAkXyQ)
- - [ ] [Tao Of Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html)
- - [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html)
+ - [ ] [Tao dari Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html)
+ - [ ] [Bagaimana menulis tes](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html)
+
+- ### Penjadwalan
+ - Di OS, bagaimana cara kerjanya?
+ - Dapat diperoleh dari video Sistem Operasi
-- ### Scheduling
- - in an OS, how it works
- - can be gleaned from Operating System videos
+- ### Pencarian & manipulasi string
+ - [ ] [Sedgewick - Suffix Array (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
+ - [ ] [Sedgewick - Pencarian Substring (video)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
+ - [ ] [1. Pengantar Pencarian Substring](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search)
+ - [ ] [2. Pencarian Substring Brute-Force](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search)
+ - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt)
+ - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore)
+ - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp)
+ - [ ] [Pola pencarian dalam teks (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
-- ### Implement system routines
- - understand what lies beneath the programming APIs you use
- - can you implement them?
+ Jika Anda membutuhkan detail lebih lanjut tentang subjek ini, lihat bagian "String Matching" di [Detail Tambahan tentang Beberapa Subjek](#detail-tambahan-tentang-beberapa-subjek).
-- ### String searching & manipulations
- - [ ] [Sedgewick - Suffix Arrays (video)](https://www.youtube.com/watch?v=HKPrVm5FWvg)
- - [ ] [Sedgewick - Substring Search (videos)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5)
- - [ ] [1. Introduction to Substring Search](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5)
- - [ ] [2. Brute-Force Substring Search](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4)
- - [ ] [3. Knuth-Morris Pratt](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
- - [ ] [4. Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2)
- - [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
- - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
+- ### Tries
+ - Perhatikan bahwa ada berbagai jenis percobaan. Beberapa memiliki prefiks, beberapa tidak, dan beberapa menggunakan bit untuk melacak jalur
+ - Saya membaca kode, tetapi tidak akan menerapkan
+ - [ ] [Sedgewick - Tries (3 video)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
+ - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries)
+ - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries)
+ - [ ] [3. Operasi Berbasis Karakter](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations)
+ - [ ] [Catatan tentang Struktur Data dan Teknik Pemrograman](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries)
+ - [ ] Video kursus singkat:
+ - [ ] [Pengantar Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries)
+ - [ ] [Performance Of Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries)
+ - [ ] [Menerapkan A Trie (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie)
+ - [ ] [Trie: Sebuah Struktur Data Terabaikan](https://www.toptal.com/java/the-trie-a-neglected-data-structure)
+ - [ ] [TopCoder - Menggunakan Tries](https://www.topcoder.com/community/competitive-programming/tutorials/using-tries/)
+ - [ ] [Kuliah Stanford (kasus penggunaan dunia nyata) (video)](https://www.youtube.com/watch?v=TJ8SkcUSdbU)
+ - [ ] [MIT, Advanced Data Structures, Strings (bisa sangat tidak jelas sekitar setengahnya) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
- If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects)
+- ### Angka Floating Point
+ - [ ] simple 8-bit: [Representasi Angka Floating Point - 1 (video - ada kesalahan dalam penghitungan - lihat deskripsi video)](https://www.youtube.com/watch?v=ji3SfClm8TU)
+ - [ ] 32 bit: [IEEE754 32-bit floating point biner (video)](https://www.youtube.com/watch?v=50ZYcZebIec)
----
+- ### Unicode
+ - [ ] [Minimum Mutlak Setiap Pengembang Perangkat Lunak Sepenuhnya, Secara Positif Harus Tahu Tentang Unicode dan Kumpulan Karakter](http://www.joelonsoftware.com/articles/Unicode.html)
+ - [ ] [Apa Yang Setiap Programmer Benar-benar, Secara Positif Perlu Diketahui Tentang Unicode Dan Kumpulan Karakter Untuk Bekerja Dengan Teks](http://kunststube.net/encoding/)
-## System Design, Scalability, Data Handling
-- **You can expect system design questions if you have 4+ years of experience.**
-- Scalability and System Design are very large topics with many topics and resources, since
- there is a lot to consider when designing a software/hardware system that can scale.
- Expect to spend quite a bit of time on this.
-- Considerations from Yegge:
- - scalability
- - Distill large data sets to single values
- - Transform one data set to another
- - Handling obscenely large amounts of data
- - system design
- - features sets
- - interfaces
- - class hierarchies
- - designing a system under certain constraints
- - simplicity and robustness
- - tradeoffs
- - performance analysis and optimization
-- [ ] **START HERE**: [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
-- [ ] [How Do I Prepare To Answer Design Questions In A Technical Inverview?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023)
-- [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/)
-- [ ] [Algorithm design](http://www.hiredintech.com/algorithm-design/)
-- [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
-- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below.
-- [ ] [How to ace a systems design interview](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
-- [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/)
-- [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
-- [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk)
-- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
-- [ ] Paxos Consensus algorithm:
- - [short video](https://www.youtube.com/watch?v=s8JqcZtvnsM)
- - [extended video with use case and multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o)
- - [paper](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)
-- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
-- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
-- [ ] Scalability:
- - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4)
- - [ ] Short series:
- - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
- - [Database](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database)
- - [Cache](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache)
- - [Asynchronism](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism)
- - [ ] [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html)
- - [ ] [Fallacies of Distributed Computing Explained](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf)
- - [ ] [Pragmatic Programming Techniques](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html)
- - [extra: Google Pregel Graph Processing](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html)
- - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (video)](https://www.youtube.com/watch?v=modXC5IWTJI)
- - [ ] [Introduction to Architecting Systems for Scale](http://lethain.com/introduction-to-architecting-systems-for-scale/)
- - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (video)](https://www.youtube.com/watch?v=9nWyWwY2Onc)
- - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0)
- - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/)
+- ### Endianness
+ - [ ] [Endian Besar Dan Kecil](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html)
+ - [ ] [Endian Besar Vs Endian Kecil (video)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
+ - [ ] [Endian Big And Kecil Dalam/Luar (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
+ - Pembicaraan yang sangat teknis untuk pengembang kernel. Jangan khawatir jika sebagian besar di atas kepala Anda.
+ - Paruh pertama sudah cukup.
+
+- ### Jaringan
+ - **jika Anda memiliki pengalaman jaringan atau ingin menjadi insinyur keandalan (reliability engineer) atau insinyur operasi (operations engineer), tunggu pertanyaan**
+ - Jika tidak, ini bagus untuk diketahui
+ - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org)
+ - [ ] [UDP dan TCP: Perbandingan Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8)
+ - [ ] [TCP / IP dan Model OSI Dijelaskan! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0)
+ - [ ] [Transmisi Paket melalui Internet. Tutorial Jaringan & TCP / IP. (video)](https://www.youtube.com/watch?v=nomyRJehhnM)
+ - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As)
+ - [ ] [SSL dan HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0)
+ - [ ] [SSL / TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM)
+ - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8)
+ - [ ] [Seri Video (21 video) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j)
+ - [ ] [Subnetting Demystified - Bagian 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4)
+ - [ ] Socket:
+ - [ ] [Java - Sockets - Pengenalan (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s)
+ - [ ] [Pemrograman Socket (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ)
+
+## Perancangan Sistem, Skalabilitas, Penganganan Data
+
+**Anda dapat mengharapkan pertanyaan desain sistem jika Anda memiliki pengalaman 4+ tahun.**
+
+- Skalabilitas dan Desain Sistem adalah topik yang sangat besar dengan banyak topik dan sumber daya,
+ karena ada banyak hal yang perlu dipertimbangkan saat merancang sistem perangkat lunak / perangkat keras yang dapat diskalakan.
+ Berharap untuk meluangkan sedikit waktu untuk ini
+- Pertimbangan:
+ - Skalabilitas (Scalability)
+ - Saring kumpulan data besar menjadi nilai tunggal
+ - Ubah satu kumpulan data ke kumpulan lainnya
+ - Menangani data dalam jumlah yang sangat besar
+ - Desain sistem (System design)
+ - set fitur (features sets)
+ - antarmuka (interfaces)
+ - hierarki kelas (class hierarchies)
+ - merancang sistem di bawah batasan tertentu
+ - kesederhanaan dan ketahanan (simplicity and robustness)
+ - pengorbanan (tradeoffs)
+ - analisis dan pengoptimalan kinerja
+- [ ] **MULAI DI SINI**: [Primer Desain Sistem](https://github.com/donnemartin/system-design-primer)
+- [ ] [Desain Sistem dari HiredInTech](http://www.hiredintech.com/system-design/)
+- [ ] [Bagaimana Saya Mempersiapkan Untuk Menjawab Pertanyaan Desain Secara Teknis?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023)
+- [ ] [8 Hal Yang Perlu Diketahui Sebelum Wawancara Desain Sistem](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/)
+- [ ] [Desain algoritme](http://www.hiredintech.com/algorithm-design/)
+- [ ] [Normalisasi Basis Data - 1NF, 2NF, 3NF dan 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
+- [ ] [Wawancara Desain Sistem](https://github.com/checkcheckzz/system-design-interview) - Ada banyak sumber daya yang satu ini. Lihat artikel dan contoh. Saya taruh beberapa di bawah ini
+- [ ] [Bagaimana menjadi ace wawancara desain sistem](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
+- [ ] [Nomor yang Harus Diketahui Setiap Orang](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/)
+- [ ] [Berapa lama waktu yang dibutuhkan untuk membuat pengalih konteks?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
+- [ ] [Transaksi di Seluruh Pusat Data (video)](https://www.youtube.com/watch?v=srOgpXECblk)
+- [ ] [Pengantar bahasa Inggris sederhana untuk Teorema CAP](http://ksat.me/a-plain-english-introduction-to-cap-theorem)
+- [ ] Algoritma Konsensus:
+ - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM)
+ - [ ] Raft - [Pengantar Algoritma Konsensus Terdistribusi Rakit (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE)
+ - [ ] [Kertas yang mudah dibaca](https://raft.github.io/)
+ - [ ] [Infografis](http://thesecretlivesofdata.com/raft/)
+- [ ] [Hashing yang Konsisten](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
+- [ ] [Pola NoSQL](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
+- [ ] Skalabilitas:
+ - Anda tidak membutuhkan semua ini. Pilih saja beberapa yang menarik bagi Anda.
+ - [ ] [Tinjauan bagus (video)](https://www.youtube.com/watch?v=-W9F__D3oY4)
+ - [ ] Seri pendek:
+ - [Klon (Clones)](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
+ - [Database (Database)](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database)
+ - [Cache (Cache)](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache)
+ - [Asinkronisme (Asynchronism)](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism)
+ - [ ] [Arsitektur Web yang Skalabel dan Sistem Terdistribusi](http://www.aosabook.org/en/distsys.html)
+ - [ ] [Kekeliruan Komputasi Terdistribusi Dijelaskan](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf)
+ - [ ] [Teknik Pemrograman Pragmatis](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html)
+ - [ekstra: Pemrosesan Graph Google Pregel](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html)
+ - [ ] [Jeff Dean - Membangun Sistem Perangkat Lunak di Google dan Pelajaran yang Dipetik (video)](https://www.youtube.com/watch?v=modXC5IWTJI)
+ - [ ] [Pengantar Sistem Arsitek untuk Skala](http://lethain.com/introduction-to-architecting-systems-for-scale/)
+ - [ ] [Menskalakan game seluler ke audiens global menggunakan App Engine dan Cloud Datastore (video)](https://www.youtube.com/watch?v=9nWyWwY2Onc)
+ - [ ] [Bagaimana Google Melakukan Rekayasa Skala Planet untuk Infra Skala Planet (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0)
+ - [ ] [Pentingnya Algoritma](https://www.topcoder.com/community/competitive-programming/tutorials/the-importance-of-algorithms/)
- [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html)
- - [ ] [Scale at Facebook (2009)](https://www.infoq.com/presentations/Scale-at-Facebook)
- - [ ] [Scale at Facebook (2012), "Building for a Billion Users" (video)](https://www.youtube.com/watch?v=oodS71YtkGU)
- - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4)
- - [ ] [7 Years Of YouTube Scalability Lessons In 30 Minutes](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html)
+ - [ ] [Scale at Facebook (2012), "Building for a Million Users" (video)](https://www.youtube.com/watch?v=oodS71YtkGU)
+ - [ ] [Teknik untuk Permainan Panjang - Astrid Atkinson Keynote (video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4)
+ - [ ] [7 Tahun Pelajaran Skalabilitas YouTube Dalam 30 Menit](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html)
- [video](https://www.youtube.com/watch?v=G-lGCC4KKok)
- - [ ] [How PayPal Scaled To Billions Of Transactions Daily Using Just 8VMs](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html)
- - [ ] [How to Remove Duplicates in Large Datasets](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/)
- - [ ] [A look inside Etsy's scale and engineering culture with Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o)
- - [ ] [What Led Amazon to its Own Microservices Architecture](http://thenewstack.io/led-amazon-microservices-architecture/)
- - [ ] [To Compress Or Not To Compress, That Was Uber's Question](https://eng.uber.com/trip-data-squeeze/)
- - [ ] [Asyncio Tarantool Queue, Get In The Queue](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html)
- - [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
- - [ ] [Google's Transition From Single Datacenter, To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
- - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
- - [ ] [Egnyte Architecture: Lessons Learned In Building And Scaling A Multi Petabyte Distributed System](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html)
- - [ ] [Machine Learning Driven Programming: A New Programming For A New World](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
- - [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
+ - [ ] [Bagaimana PayPal Mengukur Miliaran Transaksi Setiap Hari Hanya Dengan Menggunakan 8VM](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html)
+ - [ ] [Cara Menghapus Duplikat dalam Kumpulan Data Besar](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/)
+ - [ ] [Sekilas tentang skala dan budaya teknik Etsy dengan Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o)
+ - [ ] [Apa yang Membawa Amazon ke Arsitektur Layanan Mikro Sendiri](http://thenewstack.io/led-amazon-microservices-architecture/)
+ - [ ] [Untuk Mengompresi Atau Tidak Mengompresi, Itu Pertanyaan Uber](https://eng.uber.com/trip-data-squeeze/)
+ - [ ] [Asyncio Tarantool Queue, Masuk Antrian](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html)
+ - [ ] [Kapan Perkiraan Pemrosesan Kueri Digunakan?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
+ - [ ] [Transisi Google Dari Pusat Data Tunggal, Ke Failover, Ke Arsitektur Native Multihomed](http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
+ - [ ] [Kunci pas](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
+ - [ ] [Pemrograman Didorong Pembelajaran Mesin: Pemrograman Baru Untuk Dunia Baru](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
+ - [ ] [Teknologi Pengoptimalan Gambar Yang Melayani Jutaan Permintaan Per Hari](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
- [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
- - [ ] [Tinder: How Does One Of The Largest Recommendation Engines Decide Who You'll See Next?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html)
- - [ ] [Design Of A Modern Cache](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html)
- - [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
- - [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html)
- - [ ] [How Does The Use Of Docker Effect Latency?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html)
- - [ ] [Does AMP Counter An Existential Threat To Google?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html)
- - [ ] [A 360 Degree View Of The Entire Netflix Stack](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html)
- - [ ] [Latency Is Everywhere And It Costs You Sales - How To Crush It](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it)
- - [ ] [Serverless (very long, just need the gist)](http://martinfowler.com/articles/serverless.html)
- - [ ] [What Powers Instagram: Hundreds of Instances, Dozens of Technologies](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances)
- - [ ] [Cinchcast Architecture - Producing 1,500 Hours Of Audio Every Day](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html)
- - [ ] [Justin.Tv's Live Video Broadcasting Architecture](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html)
- - [ ] [Playfish's Social Gaming Architecture - 50 Million Monthly Users And Growing](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html)
- - [ ] [TripAdvisor Architecture - 40M Visitors, 200M Dynamic Page Views, 30TB Data](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html)
- - [ ] [PlentyOfFish Architecture](http://highscalability.com/plentyoffish-architecture)
- - [ ] [Salesforce Architecture - How They Handle 1.3 Billion Transactions A Day](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html)
- - [ ] [ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html)
- - [ ] See "Messaging, Serialization, and Queueing Systems" way below for info on some of the technologies that can glue services together
+ - [ ] [Tinder: Bagaimana Salah Satu Mesin Rekomendasi Terbesar Memutuskan Siapa yang Akan Anda Lihat Selanjutnya?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html)
+ - [ ] [Desain Cache Modern](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html)
+ - [ ] [Streaming Video Langsung Pada Skala Facebook](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
+ - [ ] [Panduan Pemula Untuk Menskalakan Lebih dari 11 Juta Pengguna di Amazon AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html)
+ - [ ] [Bagaimana Penggunaan Latensi Efek Docker?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html)
+ - [ ] [Tampilan 360 Derajat Dari Seluruh Tumpukan Netflix](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html)
+ - [ ] [Latensi Ada Di Mana-Mana Dan Itu Membebani Penjualan Anda - Cara Menghancurkannya](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it)
+ - [ ] [Serverless (sangat lama, hanya perlu intinya)](http://martinfowler.com/articles/serverless.html)
+ - [ ] [What Powers Instagram: Ratusan Instans, Lusinan Teknologi](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances)
+ - [ ] [Arsitektur Cinchcast - Menghasilkan 1.500 Jam Audio Setiap Hari](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html)
+ - [ ] [Arsitektur Penyiaran Video Langsung Justin.Tv](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html)
+ - [ ] [Arsitektur Permainan Sosial Playfish - 50 Juta Pengguna Bulanan Dan Berkembang](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html)
+ - [ ] [Arsitektur TripAdvisor - 40 Juta Pengunjung, 200 Juta Tampilan Halaman Dinamis, 30 TB Data](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html)
+ - [ ] [Arsitektur PlentyOfFish](http://highscalability.com/plentyoffish-architecture)
+ - [ ] [Arsitektur Salesforce - Bagaimana Mereka Menangani 1,3 Miliar Transaksi Sehari](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html)
+ - [ ] [Arsitektur ESPN Dalam Skala - Beroperasi pada 100.000 Duh Nuh Nuhs Per Detik](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html)
+ - [ ] Lihat cara "Sistem Perpesanan, Serialisasi, dan Antrean" di bawah ini untuk info tentang beberapa teknologi yang dapat merekatkan layanan
- [ ] Twitter:
- - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI)
- - [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
- - For even more, see "Mining Massive Datasets" video series in the Video Series section.
-- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- - review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
- - flow:
- 1. Understand the problem and scope:
- - define the use cases, with interviewer's help
- - suggest additional features
- - remove items that interviewer deems out of scope
- - assume high availability is required, add as a use case
- 2. Think about constraints:
- - ask how many requests per month
- - ask how many requests per second (they may volunteer it or make you do the math)
- - estimate reads vs. writes percentage
- - keep 80/20 rule in mind when estimating
- - how much data written per second
- - total storage required over 5 years
- - how much data read per second
- 3. Abstract design:
- - layers (service, data, caching)
- - infrastructure: load balancing, messaging
- - rough overview of any key algorithm that drives the service
- - consider bottlenecks and determine solutions
- - Exercises:
- - [Design a CDN network: old article](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci)
- - [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake)
- - [Design an online multiplayer card game](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html)
- - [Design a key-value database](http://www.slideshare.net/dvirsky/introduction-to-redis)
- - [Design a picture sharing system](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html)
- - [Design a recommendation system](http://ijcai13.org/files/tutorial_slides/td3.pdf)
- - [Design a URL-shortener system: copied from above](http://www.hiredintech.com/system-design/the-system-design-process/)
- - [Design a cache system](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/)
+ - [O'Reilly MySQL CE 2011: Jeremy Cole, "Data Besar dan Kecil di @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI)
+ - [Garis Waktu dalam Skala](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
+ - Untuk informasi lebih lanjut, lihat serial video "Menambang Kumpulan Data Besar-besaran" di bagian [Seri Video](#seri-video)
+- [ ] Mempraktikkan proses desain sistem: Berikut adalah beberapa ide untuk dicoba di atas kertas, masing-masing dengan beberapa dokumentasi tentang bagaimana hal itu ditangani di dunia nyata:
+ - review: [Primer Desain Sistem](https://github.com/donnemartin/system-design-primer)
+ - [Desain Sistem dari HiredInTech](http://www.hiredintech.com/system-design/)
+ - [contekan (cheat sheet)](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
+ - aliran:
+ 1. Pahami masalah dan cakupannya:
+ - Tentukan kasus penggunaan, dengan bantuan pewawancara
+ - Sarankan fitur tambahan
+ - Hapus item yang dianggap pewawancara di luar jangkauan
+ - Asumsikan ketersediaan tinggi diperlukan, tambahkan sebagai kasus penggunaan
+ 2. Pikirkan tentang kendala:
+ - Tanyakan berapa banyak permintaan per bulan
+ - Tanyakan berapa banyak permintaan per detik (mereka mungkin menawarkannya secara sukarela atau meminta Anda menghitungnya)
+ - Perkirakan persentase membaca vs. menulis
+ - Ingat aturan 80/20 saat memperkirakan
+ - Berapa banyak data yang ditulis per detik
+ - Total penyimpanan yang dibutuhkan selama 5 tahun
+ - Berapa banyak data yang dibaca per detik
+ 3. Desain abstrak:
+ - Lapisan (layanan, data, caching)
+ - Infrastruktur: load balancing, perpesanan
+ - Gambaran kasar tentang algoritme kunci apa pun yang menggerakkan layanan
+ - Pertimbangkan kemacetan dan tentukan solusinya
+ - Latihan:
+ - [Desain jaringan CDN: artikel lama](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972)
+ - [Rancang sistem pembuatan ID unik secara acak](https://blog.twitter.com/2010/announcing-snowflake)
+ - [Rancang permainan kartu multipemain daring](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html)
+ - [Mendesain database nilai kunci](http://www.slideshare.net/dvirsky/introduction-to-redis)
+ - [Rancang sistem berbagi gambar](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html)
+ - [Rancang sistem rekomendasi](http://ijcai13.org/files/tutorial_slides/td3.pdf)
+ - [Rancang sistem penyingkat URL: disalin dari atas](http://www.hiredintech.com/system-design/the-system-design-process/)
+ - [Rancang sistem cache](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/)
---
-## Final Review
-
- This section will have shorter videos that can you watch pretty quickly to review most of the important concepts.
- It's nice if you want a refresher often.
-
-- [ ] Series of 2-3 minutes short subject videos (23 videos)
- - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22)
-- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (18 videos):
- - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ)
-- [ ] [Sedgewick Videos - Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd)
- - [ ] [01. Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t)
- - [ ] [02. Analysis of Algorithms](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0)
- - [ ] [03. Stacks and Queues](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh)
- - [ ] [04. Elementary Sorts](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd)
- - [ ] [05. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
- - [ ] [06. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
- - [ ] [07. Priority Queues](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5)
- - [ ] [08. Elementary Symbol Tables](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG)
- - [ ] [09. Balanced Search Trees](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu)
- - [ ] [10. Geometric Applications of BST](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx)
- - [ ] [11. Hash Tables](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11)
-- [ ] [Sedgewick Videos - Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50)
- - [ ] [01. Undirected Graphs](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM)
- - [ ] [02. Directed Graphs](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K)
- - [ ] [03. Minimum Spanning Trees](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj)
- - [ ] [04. Shortest Paths](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD)
- - [ ] [05. Maximum Flow](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma)
- - [ ] [06. Radix Sorts](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
- - [ ] [07. Tries](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- - [ ] [08. Substring Search](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
- - [ ] [09. Regular Expressions](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh)
- - [ ] [10. Data Compression](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ)
- - [ ] [11. Reductions](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF)
- - [ ] [12. Linear Programming](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1)
- - [ ] [13. Intractability](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S)
+## Ulasan Akhir
+
+ Bagian ini akan memiliki video pendek yang dapat Anda tonton dengan cukup cepat untuk meninjau sebagian besar konsep penting.
+ Sangat menyenangkan jika Anda sering ingin penyegaran.
+
+- [ ] Seri video subjek pendek berdurasi 2-3 menit (23 video)
+ - [Video](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22)
+- [ ] Seri video subjek pendek berdurasi 2-5 menit - Michael Sambol (18 video):
+ - [Video](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ)
+- [ ] [Video Sedgewick - Algoritma I](https://www.coursera.org/learn/algorithms-part1)
+- [ ] [Video Sedgewick - Algoritma II](https://www.coursera.org/learn/algorithms-part2)
---
-## Coding Question Practice
+## Latihan Pertanyaan Pemrograman
-Now that you know all the computer science topics above, it's time to practice answering coding problems.
+Sekarang setelah kamu mengetahui semua topik ilmu komputer di atas, sekarang saatnya berlatih menjawab soal coding.
-**Coding question practice is not about memorizing answers to programming problems.**
+**Latihan pertanyaan coding bukan tentang menghafal jawaban atas masalah pemrograman.**
-Why you need to practice doing programming problems:
-- problem recognition, and where the right data structures and algorithms fit in
-- gathering requirements for the problem
-- talking your way through the problem like you will in the interview
-- coding on a whiteboard or paper, not a computer
-- coming up with time and space complexity for your solutions
-- testing your solutions
+Mengapa Anda perlu berlatih mengerjakan soal pemrograman:
+- Pengenalan masalah, dan di mana struktur data dan algoritme yang tepat cocok
+- Mengumpulkan persyaratan untuk masalah tersebut
+- Berbicara tentang masalah seperti yang akan Anda lakukan dalam wawancara
+- Coding di papan tulis atau kertas, bukan di komputer
+- Hadir dengan kerumitan ruang dan waktu untuk solusi Anda
+- Menguji solusi Anda
-There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming
-interview books, too, but I found this outstanding:
-[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/)
+Ada pengantar yang bagus untuk pemecahan masalah metodis dan komunikatif dalam sebuah wawancara.
+Anda juga akan mendapatkan ini dari buku wawancara pemrograman, tetapi menurut saya ini luar biasa:
+[Kanvas desain algoritme](http://www.hiredintech.com/algorithm-design/)
-[My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/)
+Tidak ada papan tulis di rumah? Itu masuk akal. Saya orang aneh dan memiliki papan tulis besar. Alih-alih papan tulis, belilah papan gambar besar dari toko seni. Anda bisa duduk di sofa dan berlatih. Ini adalah "papan tulis sofa" saya.
+Saya menambahkan pena di foto untuk skala. Jika Anda menggunakan pena, Anda pasti berharap dapat menghapusnya. Cepat berantakan. Saya menggunakan pensil dan penghapus.
-No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a
-large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard".
-I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick.
+![papan tulis sofa saya](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg)
-![my sofa whiteboard](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg)
+Tambahan:
-Supplemental:
+- [Matematika untuk Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/)
+- [Pemrograman Dinamis - Dari Pemula hingga Mahir](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/)
+- [Materi Wawancara MIT](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php)
+- [Latihan untuk menjadi lebih baik pada bahasa tertentu](http://exercism.io/languages)
-- [Mathematics for Topcoders](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/)
-- [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/)
-- [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php)
-- [Exercises for getting better at a given language](http://exercism.io/languages)
+**Baca dan Lakukan Masalah Pemrograman (dalam urutan ini):**
-**Read and Do Programming Problems (in this order):**
+- [ ] [Wawancara Pemrograman Terkena: Rahasia Mendaratkan Pekerjaan Berikutnya Anda, Edisi ke-2](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
+ - jawaban di C, C++ dan Java
+- [ ] [Cracking the Coding Interview, Edisi ke-6](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
+ - jawaban di Java
-- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
- - answers in C, C++ and Java
-- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
- - answers in Java
+Lihat [Daftar Buku di atas](#daftar-buku)
-See [Book List above](#book-list)
+## Latihan / tantangan coding
-## Coding exercises/challenges
+Setelah Anda mempelajari otak Anda, gunakan otak itu untuk bekerja.
+Ambil tantangan pengkodean setiap hari, sebanyak yang Anda bisa.
-Once you've learned your brains out, put those brains to work.
-Take coding challenges every day, as many as you can.
+- [Bagaimana Menemukan Solusi](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/)
+- [Cara Membedah Pernyataan Masalah Topcoder](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/)
-- [ ] [How to Find a Solution](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/)
-- [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/)
+Video Pertanyaan Wawancara Coding:
+- [IDeserve (88 video)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
+- [Tushar Roy (5 playlist)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
+ - Super for walkthroughs of problem solutions
+- [Nick White - LeetCode Solutions (187 Video)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-)
+ - Good explanations of solution and the code
+ - You can watch several in a short time
+- [FisherCoder - Solusi LeetCode](https://youtube.com/FisherCoder)
-Challenge sites:
+Situs tantangan:
- [LeetCode](https://leetcode.com/)
-- [TopCoder](https://www.topcoder.com/)
-- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems)
-- [Codewars](http://www.codewars.com)
+ - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing
+ - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode)
+ - See Nick White Videos above for short code-throughs
- [HackerRank](https://www.hackerrank.com/)
-- [Codility](https://codility.com/programmers/)
+- [TopCoder](https://www.topcoder.com/)
- [InterviewCake](https://www.interviewcake.com/)
- [Geeks for Geeks](http://www.geeksforgeeks.org/)
- [InterviewBit](https://www.interviewbit.com/invite/icjf)
+- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems)
+- [Code Exercises](https://code-exercises.com)
-Maybe:
-- [Mock interviewers from big companies](http://www.gainlo.co/)
+Situs pembelajaran bahasa, dengan tantangan:
+- [Codewars](http://www.codewars.com)
+- [Codility](https://codility.com/programmers/)
+- [HackerEarth](https://www.hackerearth.com/)
+- [Sphere Online Judge (spoj)](http://www.spoj.com/)
+- [Codechef](https://www.codechef.com/)
-## Once you're closer to the interview
+Repo tantangan:
+- [Tantangan Interview Coding Interaktif dengan Python](https://github.com/donnemartin/interactive-coding-challenges)
-- [ ] Cracking The Coding Interview Set 2 (videos):
- - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo)
- - [Cracking the Coding Interview - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo)
- - [Ask Me Anything: Gayle Laakmann McDowell (author of Cracking the Coding Interview)](https://www.youtube.com/watch?v=1fqxMuPmGak)
+Wawancara Mock:
+- [Gainlo.co: Mock pewawancara dari perusahaan besar](http://www.gainlo.co/) - Saya menggunakan ini dan itu membantu saya bersantai untuk layar ponsel dan wawancara di tempat
+- [Pramp: Wawancara mengejek dari / dengan teman sebaya](https://www.pramp.com/) - model wawancara praktik peer-to-peer
+- [Refdash: Wawancara tiruan dan wawancara yang dipercepat](https://refdash.com/) - juga membantu kandidat mempercepat dengan melewatkan beberapa wawancara dengan perusahaan teknologi
+- [interviewing.io: Berlatih wawancara tiruan dengan insinyur senior](https://interviewing.io) - wawancara desain algoritme / sistem tanpa nama dengan insinyur senior dari FAANG secara anonim.
-## Your Resume
+## Menjelang Proses Interview
-- [Ten Tips for a (Slightly) Less Awful Resume](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html)
-- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed
+- Memecahkan Wawancara Coding 2 Set (video):
+ - [Memecahkan Wawancara Coding](https://www.youtube.com/watch?v=4NIb9l3imAo)
+ - [Memecahkan Wawancara Coding - Seri Speaker Fullstack](https://www.youtube.com/watch?v=Eg5-tdAwclo)
+## Resume Anda
-## Be thinking of for when the interview comes
+- Lihat Lanjutkan item persiapan di Cracking The Coding Interview dan bagian belakang Wawancara Pemrograman Terkena
-Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each.
-Have a story, not just data, about something you accomplished.
+## Pikirkan saat wawancara datang
-- Why do you want this job?
-- What's a tough problem you've solved?
-- Biggest challenges faced?
-- Best/worst designs seen?
-- Ideas for improving an existing Google product.
-- How do you work best, as an individual and as part of a team?
-- Which of your skills or experiences would be assets in the role and why?
-- What did you most enjoy at [job x / project y]?
-- What was the biggest challenge you faced at [job x / project y]?
-- What was the hardest bug you faced at [job x / project y]?
-- What did you learn at [job x / project y]?
-- What would you have done better at [job x / project y]?
+Pikirkan sekitar 20 pertanyaan wawancara yang akan Anda dapatkan, bersama dengan baris item di bawah ini. Miliki 2-3 jawaban untuk masing-masing.
+Memiliki cerita, bukan hanya data, tentang sesuatu yang Anda capai.
-## Have questions for the interviewer
+- Mengapa Anda menginginkan pekerjaan ini?
+- Apa masalah sulit yang telah Anda selesaikan?
+- Tantangan terbesar yang dihadapi?
+- Desain terbaik / terburuk terlihat?
+- Ide untuk meningkatkan produk Google yang sudah ada.
+- Bagaimana Anda bekerja dengan baik, sebagai individu dan sebagai bagian dari tim?
+- Keterampilan atau pengalaman mana yang akan menjadi aset dalam peran tersebut dan mengapa?
+- Apa yang paling Anda nikmati di [job x / project y]?
+- Apa tantangan terbesar yang Anda hadapi di [pekerjaan x / proyek y]?
+- Bug tersulit apa yang Anda hadapi di [pekerjaan x / proyek y]?
+- Apa yang Anda pelajari di [pekerjaan x / proyek y]?
+- Apa yang akan Anda lakukan lebih baik di [pekerjaan x / proyek y]?
- Some of mine (I already may know answer to but want their opinion or team perspective):
+## Bertanyalah Pada Pewawancara
-- How large is your team?
-- What does your dev cycle look like? Do you do waterfall/sprints/agile?
-- Are rushes to deadlines common? Or is there flexibility?
-- How are decisions made in your team?
-- How many meetings do you have per week?
-- Do you feel your work environment helps you concentrate?
-- What are you working on?
-- What do you like about it?
-- What is the work life like?
+ Beberapa milik saya (saya mungkin sudah tahu jawaban tetapi ingin pendapat atau perspektif tim mereka):
-## Once You've Got The Job
+- Seberapa besar tim Anda?
+- Seperti apa siklus pengembang Anda? Apakah Anda melakukan waterfall / sprint / agile?
+- Apakah terburu-buru ke tenggat waktu biasa terjadi? Atau apakah ada fleksibilitas?
+- Bagaimana keputusan dibuat dalam tim Anda?
+- Berapa banyak pertemuan yang Anda lakukan per minggu?
+- Apakah Anda merasa lingkungan kerja membantu Anda berkonsentrasi?
+- Apa yang sedang kamu kerjakan?
+- Apa yang Anda suka tentang itu?
+- Seperti apa kehidupan kerja?
-Congratulations!
+## Saat Anda Berhasil Mendapatkan Pekerjaannya
-- [10 things I wish I knew on my first day at Google](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw)
+Selamat!
-Keep learning.
+Terus belajar.
-You're never really done.
+Anda tidak pernah benar-benar selesai.
---
*****************************************************************************************************
*****************************************************************************************************
- Everything below this point is optional. These are my recommendations, not Google's.
- By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for
- any software engineering job. You'll be a much more well-rounded software engineer.
+ Segala sesuatu di bawah poin ini bersifat opsional. Ini adalah rekomendasi saya, bukan Google.
+ Dengan mempelajari ini, Anda akan mendapatkan eksposur yang lebih besar ke lebih banyak konsep CS,
+ dan akan lebih siap untuk pekerjaan rekayasa perangkat lunak apa pun.
+ Anda akan menjadi insinyur perangkat lunak yang jauh lebih berpengalaman.
*****************************************************************************************************
*****************************************************************************************************
---
-## Additional Books
-
-- [ ] [The Unix Programming Environment](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=info)
- - an oldie but a goodie
-- [ ] [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/)
- - a modern option
-- [ ] [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
-- [ ] [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/)
- - a gentle introduction to design patterns
-- [ ] [Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
- - aka the "Gang Of Four" book, or GOF
- - the canonical design patterns book
-- [ ] [Site Reliability Engineering](https://landing.google.com/sre/book.html)
- - [Site Reliability Engineering: How Google Runs Production Systems](https://landing.google.com/sre/)
-- [ ] [UNIX and Linux System Administration Handbook, 4th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/)
-
-## Additional Learning
-
-- ### Dynamic Programming
- - This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky.
- - I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved.
- - [ ] Videos:
- - the Skiena videos can be hard to follow since he sometimes uses the whiteboard, which is too small to see
- - [ ] [Skiena: CSE373 2012 - Lecture 19 - Introduction to Dynamic Programming (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718)
- - [ ] [Skiena: CSE373 2012 - Lecture 20 - Edit Distance (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749)
- - [ ] [Skiena: CSE373 2012 - Lecture 21 - Dynamic Programming Examples (video)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406)
- - [ ] [Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (video)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22)
- - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558)
- - [ ] [Simonson: Dynamic Programming I - Lecture 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- - [ ] [Simonson: Dynamic programming II - Lecture 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12)
- - [ ] List of individual DP problems (each is short):
- [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
- - [ ] Yale Lecture notes:
- - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming)
- - [ ] Coursera:
- - [ ] [The RNA secondary structure problem (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem)
- - [ ] [A dynamic programming algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm)
- - [ ] [Illustrating the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm)
- - [ ] [Running time of the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm)
- - [ ] [DP vs. recursive implementation (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation)
- - [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
- - [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
-
-- ### Compilers
- - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
- - [ ] [Harvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo)
- - [ ] [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk)
- - [ ] [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU)
-
-- ### Floating Point Numbers
- - [ ] simple 8-bit: [Representation of Floating Point Numbers - 1 (video - there is an error in calculations - see video description)](https://www.youtube.com/watch?v=ji3SfClm8TU)
- - [ ] 32 bit: [IEEE754 32-bit floating point binary (video)](https://www.youtube.com/watch?v=50ZYcZebIec)
-
-- ### Unicode
- - [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html)
- - [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/)
+## Buku Tambahan
+
+ Ini ada di sini sehingga Anda dapat menyelami topik yang menurut Anda menarik.
+
+- [Lingkungan Pemrograman Unix](https://www.amazon.com/dp/013937681X)
+ - Tua tapi bagus
+- [Baris Perintah Linux: Pengantar Lengkap](https://www.amazon.com/dp/1593273894/)
+ - Pilihan modern
+- [Seri Ilustrasi TCP / IP](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
+- [Pola Desain Kepala Pertama](https://www.amazon.com/gp/product/0596007124/)
+ - Pengenalan lembut untuk pola desain
+- [Pola Desain: Elemen Perangkat Lunak Object-Oriente yang Dapat Digunakan Kembali](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
+ - Alias buku "Gang Of Four", atau GOF
+ - Buku pola desain kanonik
+- [Buku Pegangan Administrasi Sistem UNIX dan Linux, Edisi ke-5](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/)
+- [Manual Desain Algoritma](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
+ - Sebagai review dan pengenalan masalah
+ - Porsi katalog algoritme jauh di luar cakupan kesulitan yang akan Anda dapatkan dalam wawancara
+ - Buku ini memiliki 2 bagian:
+ - Kelas buku teks tentang struktur data dan algoritma
+ - Kelebihan:
+ - Merupakan review yang bagus seperti buku teks algoritma apapun
+ - Cerita bagus dari pengalamannya memecahkan masalah di industri dan akademisi
+ - Contoh kode di C
+ - Kekurangan:
+ - Bisa padat atau tidak bisa ditembus seperti CLRS, dan dalam beberapa kasus, CLRS mungkin menjadi alternatif yang lebih baik untuk beberapa mata pelajaran
+ - Bab 7, 8, 9 bisa menyakitkan untuk dicoba diikuti, karena beberapa item tidak dijelaskan dengan baik atau membutuhkan lebih banyak otak daripada yang saya miliki
+ - Jangan salah paham: Saya suka Skiena, gaya mengajarnya, dan tingkah lakunya, tapi saya mungkin bukan materi Stony Brook
+ - Katalog algoritma:
+ - Inilah alasan sebenarnya Anda membeli buku ini
+ - Akan sampai ke bagian ini. Akan memperbarui di sini setelah saya berhasil melewatinya
+ - Bisa menyewanya di kindle
+ - jawaban:
+ - [Solusi](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
+ - [Solusi](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
+ - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
+- [Tulis Kode Hebat: Volume 1: Memahami Mesin](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
+ - Buku itu diterbitkan pada tahun 2004, dan agak ketinggalan jaman, tetapi merupakan sumber yang hebat untuk memahami komputer secara singkat
+ - Penulis menemukan [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), jadi ambillah sebutan dan contoh di HLA dengan sedikit garam. Tidak banyak digunakan, tetapi contoh yang layak tentang seperti apa perakitan itu
+ - Bab-bab ini layak dibaca untuk memberi Anda dasar yang bagus:
+ - Bab 2 - Representasi Numerik
+ - Bab 3 - Aritmatika Biner dan Operasi Bit
+ - Bab 4 - Representasi Titik Mengambang
+ - Bab 5 - Representasi Karakter
+ - Bab 6 - Organisasi Memori dan Akses
+ - Bab 7 - Tipe Data Komposit dan Objek Memori
+ - Bab 9 - Arsitektur CPU
+ - Bab 10 - Arsitektur Set Instruksi
+ - Bab 11 - Arsitektur dan Organisasi Memori
+- [Pengantar Algoritma](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
+ - **Penting:** Membaca buku ini hanya akan memiliki nilai yang terbatas. Buku ini adalah ulasan yang bagus tentang algoritme dan struktur data, tetapi tidak akan mengajari Anda cara menulis kode yang baik. Anda harus dapat membuat kode solusi yang layak secara efisien
+ - Alias CLR, terkadang CLRS, karena Stein terlambat ke permainan
+
+- [Arsitektur Komputer, Edisi Keenam: Pendekatan Kuantitatif](https://www.amazon.com/dp/0128119055)
+ - For a richer, more up-to-date (2017), but longer treatment
+
+- [Pemrograman Mutiara](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
+ - Beberapa bab pertama menyajikan solusi cerdas untuk masalah pemrograman (beberapa sangat lama menggunakan pita data)
+ tetapi itu hanya intro. Ini adalah buku panduan tentang desain dan arsitektur program
+
+## Pembelajaran Tambahan
+
+ Saya menambahkannya untuk membantu Anda menjadi insinyur perangkat lunak yang berpengetahuan luas,
+ dan untuk mengetahui teknologi dan algoritme tertentu, sehingga Anda akan memiliki kotak peralatan yang lebih besar.
-- ### Endianness
- - [ ] [Big And Little Endian](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html)
- - [ ] [Big Endian Vs Little Endian (video)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
- - [ ] [Big And Little Endian Inside/Out (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
- - Very technical talk for kernel devs. Don't worry if most is over your head.
- - The first half is enough.
+- ### Kompilator
+ - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
+ - [Harvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo)
+ - [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk)
+ - [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU)
- ### Emacs and vi(m)
- - suggested by Yegge, from an old Amazon recruiting post: Familiarize yourself with a unix-based code editor
+ - Biasakan diri Anda dengan editor kode berbasis unix
- vi(m):
- - [Editing With vim 01 - Installation, Setup, and The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr)
- - [VIM Adventures](http://vim-adventures.com/)
+ - [Mengedit Dengan vim 01 - Instalasi, Setup, dan The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr)
+ - [Petualangan VIM](http://vim-adventures.com/)
- set of 4 videos:
- - [The vi/vim editor - Lesson 1](https://www.youtube.com/watch?v=SI8TeVMX8pk)
- - [The vi/vim editor - Lesson 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE)
- - [The vi/vim editor - Lesson 3](https://www.youtube.com/watch?v=ZYEccA_nMaI)
- - [The vi/vim editor - Lesson 4](https://www.youtube.com/watch?v=1lYD5gwgZIA)
- - [Using Vi Instead of Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs)
+ - [Editor vi / vim - Pelajaran 1](https://www.youtube.com/watch?v=SI8TeVMX8pk)
+ - [Editor vi / vim - Pelajaran 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE)
+ - [Editor vi / vim - Pelajaran 3](https://www.youtube.com/watch?v=ZYEccA_nMaI)
+ - [Editor vi / vim - Pelajaran 4](https://www.youtube.com/watch?v=1lYD5gwgZIA)
+ - [Menggunakan Vi, bukan Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs)
- emacs:
- - [Basics Emacs Tutorial (video)](https://www.youtube.com/watch?v=hbmV1bnQ-i0)
+ - [Tutorial Dasar Emacs (video)](https://www.youtube.com/watch?v=hbmV1bnQ-i0)
- set of 3 (videos):
- - [Emacs Tutorial (Beginners) -Part 1- File commands, cut/copy/paste, cursor commands](https://www.youtube.com/watch?v=ujODL7MD04Q)
- - [Emacs Tutorial (Beginners) -Part 2- Buffer management, search, M-x grep and rgrep modes](https://www.youtube.com/watch?v=XWpsRupJ4II)
- - [Emacs Tutorial (Beginners) -Part 3- Expressions, Statements, ~/.emacs file and packages](https://www.youtube.com/watch?v=paSgzPso-yc)
- - [Evil Mode: Or, How I Learned to Stop Worrying and Love Emacs (video)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc)
- - [Writing C Programs With Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs)
- - [(maybe) Org Mode In Depth: Managing Structure (video)](https://www.youtube.com/watch?v=nsGYet02bEk)
+ - [Tutorial Emacs (Pemula) -Bagian 1- Perintah file, potong / salin / tempel, perintah kursor](https://www.youtube.com/watch?v=ujODL7MD04Q)
+ - [Tutorial Emacs (Pemula) -Bagian 2- Manajemen buffer, pencarian, mode M-x grep dan rgrep](https://www.youtube.com/watch?v=XWpsRupJ4II)
+ - [Tutorial Emacs (Pemula) -Bagian 3- Ekspresi, Pernyataan, ~ / .emacs file dan paket](https://www.youtube.com/watch?v=paSgzPso-yc)
+ - [Mode Jahat: Atau, Bagaimana Saya Belajar untuk Berhenti Khawatir dan Cinta Emacs (video)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc)
+ - [Menulis Program C Dengan Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs)
+ - [(mungkin) Mode Organisasi Secara Mendalam: Mengelola Struktur (video)](https://www.youtube.com/watch?v=nsGYet02bEk)
- ### Unix command line tools
- - suggested by Yegge, from an old Amazon recruiting post. I filled in the list below from good tools.
- - [ ] bash
- - [ ] cat
- - [ ] grep
- - [ ] sed
- - [ ] awk
- - [ ] curl or wget
- - [ ] sort
- - [ ] tr
- - [ ] uniq
- - [ ] [strace](https://en.wikipedia.org/wiki/Strace)
- - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/)
-
-- ### Information theory (videos)
- - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory)
- - [ ] more about Markov processes:
- - [ ] [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
- - [ ] [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
- - [ ] [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
- - See more in MIT 6.050J Information and Entropy series below.
-
-- ### Parity & Hamming Code (videos)
- - [ ] [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE)
- - [ ] [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M)
- - [ ] Hamming Code:
- - [Error detection](https://www.youtube.com/watch?v=1A_NcXxdoCc)
- - [Error correction](https://www.youtube.com/watch?v=JAMLuxdHH8o)
- - [ ] [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk)
+ - Saya mengisi daftar di bawah ini dari alat yang bagus.
+ - bash
+ - cat
+ - grep
+ - sed
+ - awk
+ - curl or wget
+ - sort
+ - tr
+ - uniq
+ - [strace](https://en.wikipedia.org/wiki/Strace)
+ - [tcpdump](https://danielmiessler.com/study/tcpdump/)
+
+- ### Teori Informasi (video)
+ - [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory)
+ - Lebih lanjut tentang proses Markov:
+ - [Pembuatan Teks Markov Inti](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
+ - [Inti Penerapan Pembuatan Teks Markov](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
+ - [Proyek = Panduan Pembuatan Teks Markov](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
+ - Lihat lebih lanjut dalam seri Informasi dan Entropi MIT 6.050J di bawah ini
+
+- ### Pariti & Kode Hamming
+ - [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE)
+ - [Keseimbangan (Parity)](https://www.youtube.com/watch?v=DdMcAUlxh1M)
+ - Hamming Code:
+ - [Deteksi kesalahan](https://www.youtube.com/watch?v=1A_NcXxdoCc)
+ - [Koreksi kesalahan](https://www.youtube.com/watch?v=JAMLuxdHH8o)
+ - [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk)
- ### Entropy
- - also see videos below
- - make sure to watch information theory videos first
- - [ ] [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176)
-
-- ### Cryptography
- - also see videos below
- - make sure to watch information theory videos first
- - [ ] [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
- - [ ] [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
- - [ ] [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
-
-- ### Compression
- - make sure to watch information theory videos first
- - [ ] Computerphile (videos):
- - [ ] [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w)
- - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko)
- - [ ] [Upside Down Trees (Huffman Trees)](https://www.youtube.com/watch?v=umTbivyJoiI)
- - [ ] [EXTRA BITS/TRITS - Huffman Trees](https://www.youtube.com/watch?v=DV8efuB3h2g)
- - [ ] [Elegant Compression in Text (The LZ 77 Method)](https://www.youtube.com/watch?v=goOa3DGezUA)
- - [ ] [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU)
- - [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
- - [ ] [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s)
-
-- ### Networking
- - **if you have networking experience or want to be a systems engineer, expect questions**
- - otherwise, this is just good to know
- - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro)
- - [ ] [UDP and TCP: Comparison of Transport Protocols](https://www.youtube.com/watch?v=Vdc8TCESIg8)
- - [ ] [TCP/IP and the OSI Model Explained!](https://www.youtube.com/watch?v=e5DEVa9eSN0)
- - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial.](https://www.youtube.com/watch?v=nomyRJehhnM)
- - [ ] [HTTP](https://www.youtube.com/watch?v=WGJrLqtX7As)
- - [ ] [SSL and HTTPS](https://www.youtube.com/watch?v=S2iBR2ZlZf0)
- - [ ] [SSL/TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM)
- - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8)
- - [ ] [Video Series (21 videos)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j)
- - [ ] [Subnetting Demystified - Part 5 CIDR Notation](https://www.youtube.com/watch?v=t5xYI0jzOf4)
-
-- ### Computer Security
- - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
- - [ ] [Buffer Overflow Exploits and Defenses](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3)
- - [ ] [Privilege Separation](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Capabilities](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Sandboxing Native Code](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6)
- - [ ] [Web Security Model](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Securing Web Applications](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Symbolic Execution](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Network Security](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Network Protocols](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
-
-- ### Garbage collection
- - [ ] [Compilers (video)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff)
- - [ ] [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
- - [ ] [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits)
- - [ ] [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
-
-- ### Parallel Programming
- - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
- - [ ] [Efficient Python for High Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk)
-
-- ### Messaging, Serialization, and Queueing Systems
- - [ ] [Thrift](https://thrift.apache.org/)
+ - Lihat juga video di bawah ini
+ - Pastikan untuk menonton video teori informasi terlebih dahulu
+ - [Teori Informasi, Claude Shannon, Entropi, Redundansi, Kompresi Data & Bit (video)](https://youtu.be/JnJq3Py0dyM?t=176)
+
+- ### Kriptografi
+ - Lihat juga video di bawah ini
+ - Pastikan untuk menonton video teori informasi terlebih dahulu
+ - [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
+ - [Kriptografi: Funsgi Hash](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
+ - [Kriptografi: Enkripsi](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+- ### Kompresi
+ - Pastikan untuk menonton video teori informasi terlebih dahulu
+ - Computerphile (video):
+ - [Kompresi](https://www.youtube.com/watch?v=Lto-ajuqW3w)
+ - [Entropi dalam Kompresi](https://www.youtube.com/watch?v=M5c_RFKVkko)
+ - [Pohon Terbalik (Pohon Huffman)](https://www.youtube.com/watch?v=umTbivyJoiI)
+ - [EXTRA BITS / TRITS - Pohon Huffman](https://www.youtube.com/watch?v=DV8efuB3h2g)
+ - [Kompresi Elegan dalam Teks (Metode LZ 77)](https://www.youtube.com/watch?v=goOa3DGezUA)
+ - [Kompresi Teks Memenuhi Probabilitas](https://www.youtube.com/watch?v=cCDCfoHTsaU)
+ - [Video Kepala Kompresor](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
+ - [(opsional) Google Developers Live: GZIP saja tidak cukup!](https://www.youtube.com/watch?v=whGwm0Lky2s)
+
+- ### Keamanan komputer
+ - [MIT (23 video)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
+ - [Buffer Overflow Exploits and Defenses](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3)
+ - [Privilege Separation](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Capabilities](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Sandboxing Native Code](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6)
+ - [Web Security Model](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Securing Web Applications](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Symbolic Execution](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Network Security](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Network Protocols](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+
+- ### Pengumpulan sampah
+ - [GC dalam Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
+ - [Deep Dive Java: Pengumpulan Sampah itu Baik!](https://www.infoq.com/presentations/garbage-collection-benefits)
+ - [Deep Dive Python: Pengumpulan Sampah di CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
+
+- ### Pemrograman Paralel
+ - [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
+ - [Python Efisien untuk Komputasi Paralel Berkinerja Tinggi (video)](https://www.youtube.com/watch?v=uY85GkaYzBk)
+
+- ### Pengiriman Pesan, Serialisasi, dan Sistem Queueing
+ - [Thrift](https://thrift.apache.org/)
- [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html)
- - [ ] [Protocol Buffers](https://developers.google.com/protocol-buffers/)
+ - [Protocol Buffers](https://developers.google.com/protocol-buffers/)
- [Tutorials](https://developers.google.com/protocol-buffers/docs/tutorials)
- - [ ] [gRPC](http://www.grpc.io/)
- - [gRPC 101 for Java Developers (video)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1)
- - [ ] [Redis](http://redis.io/)
+ - [gRPC](http://www.grpc.io/)
+ - [gRPC 101 untuk Pengembang Java (video)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1)
+ - [Redis](http://redis.io/)
- [Tutorial](http://try.redis.io/)
- - [ ] [Amazon SQS (queue)](https://aws.amazon.com/sqs/)
- - [ ] [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/)
- - [ ] [RabbitMQ](https://www.rabbitmq.com/)
- - [Get Started](https://www.rabbitmq.com/getstarted.html)
- - [ ] [Celery](http://www.celeryproject.org/)
- - [First Steps With Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)
- - [ ] [ZeroMQ](http://zeromq.org/)
- - [Intro - Read The Manual](http://zeromq.org/intro:read-the-manual)
- - [ ] [ActiveMQ](http://activemq.apache.org/)
- - [ ] [Kafka](http://kafka.apache.org/documentation.html#introduction)
- - [ ] [MessagePack](http://msgpack.org/index.html)
- - [ ] [Avro](https://avro.apache.org/)
-
-- ### Fast Fourier Transform
- - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
- - [ ] [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
- - [ ] [What is the Fourier Transform? (video)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
- - [ ] [Divide & Conquer: FFT (video)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4)
- - [ ] [Understanding The FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
+ - [Amazon SQS (queue)](https://aws.amazon.com/sqs/)
+ - [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/)
+ - [RabbitMQ](https://www.rabbitmq.com/)
+ - [Memulai](https://www.rabbitmq.com/getstarted.html)
+ - [Celery](http://www.celeryproject.org/)
+ - [Langkah Awal dengan Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)
+ - [ZeroMQ](http://zeromq.org/)
+ - [Intro - Baca Manual](http://zeromq.org/intro:read-the-manual)
+ - [ActiveMQ](http://activemq.apache.org/)
+ - [Kafka](http://kafka.apache.org/documentation.html#introduction)
+ - [MessagePack](http://msgpack.org/index.html)
+ - [Avro](https://avro.apache.org/)
+
+- ### A*
+ - [Algoritma Pencarian](https://en.wikipedia.org/wiki/A*_search_algorithm)
+ - [A * Tutorial Pathfinding (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
+ - [A * Pathfinding (E01: penjelasan algoritma) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
+
+- ### Transformasi Fourier Cepat
+ - [Panduan Interaktif Untuk Transformasi Fourier](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
+ - [Apa itu Transformasi Fourier? Untuk apa itu digunakan?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
+ - [Apa itu Transformasi Fourier? (video)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
+ - [Bagilah & Taklukkan: FFT (video)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4)
+ - [Memahami FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
- ### Bloom Filter
- Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k)
- - [Bloom Filters](https://www.youtube.com/watch?v=-SuTGoFYjZs)
- - [Bloom Filters | Mining of Massive Datasets | Stanford University](https://www.youtube.com/watch?v=qBTdukbzc78)
+ - [Filter Bloom (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs)
+ - [Filter Bloom | Penambangan Kumpulan Data Besar-besaran | Universitas Stanford (video)](https://www.youtube.com/watch?v=qBTdukbzc78)
- [Tutorial](http://billmill.org/bloomfilter-tutorial/)
- - [How To Write A Bloom Filter App](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/)
+ - [Cara Menulis Aplikasi Bloom Filter](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/)
- ### HyperLogLog
- - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html)
+ - [Cara Menghitung Miliaran Objek Berbeda Hanya Menggunakan Memori 1.5KB](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html)
- ### Locality-Sensitive Hashing
- - used to determine the similarity of documents
- - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same.
- - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html)
+ - Digunakan untuk menentukan kesamaan dokumen
+ - Kebalikan dari MD5 atau SHA yang digunakan untuk menentukan apakah 2 dokumen / string sama persis
+ - [Simhashing (semoga) menjadi sederhana](http://ferd.ca/simhashing-hopefully-made-simple.html)
- ### van Emde Boas Trees
- - [ ] [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
- - [ ] [MIT Lecture Notes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf)
+ - [Bagilah & Taklukkan: Pohon van Emde Boas (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
+ - [Catatan Kuliah MIT](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf)
- ### Augmented Data Structures
- - [ ] [CS 61B Lecture 39: Augmenting Data Structures](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950)
-
-- ### Tries
- - Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits
- to track the path.
- - I read through code, but will not implement.
- - [ ] [Sedgewick - Tries (3 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- - [ ] [1. R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- - [ ] [2. Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
- - [ ] [3. Character Based Operations](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1)
- - [ ] [Notes on Data Structures and Programming Techniques](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries)
- - [ ] Short course videos:
- - [ ] [Introduction To Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries)
- - [ ] [Performance Of Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries)
- - [ ] [Implementing A Trie (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie)
- - [ ] [The Trie: A Neglected Data Structure](https://www.toptal.com/java/the-trie-a-neglected-data-structure)
- - [ ] [TopCoder - Using Tries](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/)
- - [ ] [Stanford Lecture (real world use case) (video)](https://www.youtube.com/watch?v=TJ8SkcUSdbU)
- - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+ - [CS 61B Kuliah 39: Augmented Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc)
- ### Balanced search trees
- - Know least one type of balanced binary tree (and know how it's implemented):
- - "Among balanced search trees, AVL and 2/3 trees are now passé, and red-black trees seem to be more popular.
- A particularly interesting self-organizing data structure is the splay tree, which uses rotations
- to move any accessed key to the root." - Skiena
- - Of these, I chose to implement a splay tree. From what I've read, you won't implement a
- balanced search tree in your interview. But I wanted exposure to coding one up
- and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code.
- - splay tree: insert, search, delete functions
- If you end up implementing red/black tree try just these:
- - search and insertion functions, skipping delete
- - I want to learn more about B-Tree since it's used so widely with very large data sets.
- - [ ] [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
-
- - [ ] **AVL trees**
- - In practice:
- From what I can tell, these aren't used much in practice, but I could see where they would be:
- The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly
- balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it
- attractive for data structures that may be built once and loaded without reconstruction, such as language
- dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter).
- - [ ] [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
- - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
- - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
- - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
-
- - [ ] **Splay trees**
- - In practice:
- Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors,
- data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory,
- networking and file system code) etc.
- - [ ] [CS 61B: Splay Trees (video)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
- - [ ] MIT Lecture: Splay Trees:
- - Gets very mathy, but watch the last 10 minutes for sure.
+ - Ketahui setidaknya satu jenis pohon biner yang seimbang (dan ketahui bagaimana implementasinya):
+ - "Di antara pohon pencarian seimbang, AVL dan 2/3 trees sekarang sudah ketinggalan zaman, dan red-black trees tampaknya lebih populer. Struktur data pengorganisasian mandiri yang sangat menarik adalah splay trees, yang menggunakan rotasi untuk memindahkan kunci apa pun yang diakses ke root." - Skiena
+ - Dari jumlah tersebut, saya memilih untuk menerapkan splay tree.
+ Dari apa yang saya baca, Anda tidak akan menerapkan pohon pencarian seimbang (balanced search tree) dalam wawancara Anda.
+ Tapi saya ingin eksposur ke pengkodean satu dan hadapi saja, splay trees adalah lutut lebah.
+ Saya memang membaca banyak kode red-black tree code
+ - Splay tree: menyisipkan, mencari, menghapus fungsi
+ Jika Anda akhirnya menerapkan pohon merah / hitam coba ini saja:
+ - Fungsi pencarian dan penyisipan, melewatkan penghapusan
+ - Saya ingin mempelajari lebih lanjut tentang B-Tree karena digunakan secara luas dengan kumpulan data yang sangat besar
+ - [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
+
+ - **AVL trees**
+ - Dalam praktek:
+ Dari apa yang saya tahu, ini tidak banyak digunakan dalam praktiknya, tetapi saya bisa melihat di mana mereka akan berada:
+ AVL trees (Pohon AVL) adalah struktur lain yang mendukung pencarian, penyisipan, dan penghapusan O(log n).
+ Ini lebih seimbang daripada red-black trees, menyebabkan penyisipan dan pemindahan lebih lambat tetapi pengambilan lebih cepat.
+ Ini membuatnya menarik untuk struktur data yang dapat dibangun sekali dan dimuat tanpa rekonstruksi, seperti kamus bahasa (atau kamus program, seperti opcode assembler atau interpreter)
+ - [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
+ - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
+ - [Implementasi AVL Tree (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
+ - [Split Dan Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
+
+ - **Splay trees**
+ - Dalam praktek:
+ Splay trees (pohon bentang) biasanya digunakan dalam implementasi cache, pengalokasi memori, router, pengumpul sampah, kompresi data, tali (pengganti string yang digunakan untuk string teks panjang), di Windows NT (dalam memori virtual, jaringan, dan kode sistem file) dll.
+ - [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY)
+ - Kuliah MIT: Splay Trees:
+ - Menjadi sangat matematis, tetapi perhatikan 10 menit terakhir dengan pasti.
- [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
- - [ ] **Red/black trees**
- - these are a translation of a 2-3 tree (see below)
- - In practice:
- Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time.
- Not only does this make them valuable in time-sensitive applications such as real-time applications,
- but it makes them valuable building blocks in other data structures which provide worst-case guarantees;
- for example, many data structures used in computational geometry can be based on red–black trees, and
- the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java,
- the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor
- hashcodes, a Red-Black tree is used.
- - [ ] [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
- - [ ] [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
- - [ ] [Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
- - [ ] [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red-black-trees/)
-
- - [ ] **2-3 search trees**
- - In practice:
- 2-3 trees have faster inserts at the expense of slower searches (since height is more compared to AVL trees).
- - You would use 2-3 tree very rarely because its implementation involves different types of nodes. Instead, people use Red Black trees.
- - [ ] [23-Tree Intuition and Definition (video)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
- - [ ] [Binary View of 23-Tree](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [2-3 Trees (student recitation) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
-
- - [ ] **2-3-4 Trees (aka 2-4 trees)**
- - In practice:
- For every 2-4 tree, there are corresponding red–black trees with data elements in the same order. The insertion and deletion
- operations on 2-4 trees are also equivalent to color-flipping and rotations in red–black trees. This makes 2-4 trees an
- important tool for understanding the logic behind red–black trees, and this is why many introductory algorithm texts introduce
- 2-4 trees just before red–black trees, even though **2-4 trees are not often used in practice**.
- - [ ] [CS 61B Lecture 26: Balanced Search Trees (video)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C)
- - [ ] [Bottom Up 234-Trees (video)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [Top Down 234-Trees (video)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
-
- - [ ] **N-ary (K-ary, M-ary) trees**
- - note: the N or K is the branching factor (max branches)
- - binary trees are a 2-ary tree, with branching factor = 2
- - 2-3 trees are 3-ary
- - [ ] [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree)
-
- - [ ] **B-Trees**
- - fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor)
- - In Practice:
- B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to
- its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary
- block in a particular file. The basic problem is turning the file block i address into a disk block
- (or perhaps to a cylinder-head-sector) address.
- - [ ] [B-Tree](https://en.wikipedia.org/wiki/B-tree)
- - [ ] [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
- - [ ] [B-Tree Definition and Insertion (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [B-Tree Deletion (video)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [MIT 6.851 - Memory Hierarchy Models (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+ - **Red/black trees**
+ - Ini adalah terjemahan dari sebuah 2-3 tree (lihat dibawah).
+ - Dalam praktek:
+ Red/black trees (Pohon merah / hitam) menawarkan jaminan kasus terburuk untuk waktu penyisipan, waktu penghapusan, dan waktu pencarian.
+ Hal ini tidak hanya membuatnya berharga dalam aplikasi yang sensitif terhadap waktu seperti aplikasi waktu nyata, tetapi juga menjadikannya sebagai blok bangunan yang berharga dalam struktur data lain yang memberikan jaminan kasus terburuk;
+ sebagai contoh, banyak struktur data yang digunakan dalam geometri komputasi dapat didasarkan pada red/black trees, dan Penjadwal yang Benar-Benar Adil yang digunakan dalam kernel Linux saat ini menggunakan red/black trees.
+ Di Java versi 8, Collection HashMap telah dimodifikasi sedemikian rupa sehingga alih-alih menggunakan LinkedList untuk menyimpan elemen identik dengan kode hash yang buruk, red/black trees digunakan
+ - [Aduni - Algoritma - Kuliah 4 (link lompat ke titik awal) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
+ - [Aduni - Algoritma - Kuliah 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
+ - [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
+ - [Pengantar Pencarian Biner Dan Red-Black Tree](https://www.topcoder.com/community/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/)
+
+ - **2-3 search trees**
+ - Dalam praktek:
+ 2-3 trees memiliki penyisipan yang lebih cepat dengan mengorbankan pencarian yang lebih lambat (karena ketinggian lebih banyak dibandingkan dengan AVL trees).
+ - Anda akan sangat jarang menggunakan 2-3 trees karena implementasinya melibatkan berbagai jenis node. Sebaliknya, orang menggunakan red–black trees.
+ - [Intuisi dan Definisi 23-Trees (video)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
+ - [Tampilan Biner dari 23-Trees](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [2-3 Trees (pengajian siswa) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+ - **2-3-4 Trees (aka 2-4 trees)**
+ - Dalam praktek:
+ Untuk setiap 2-4 trees, ada red–black trees yang sesuai dengan elemen data dalam urutan yang sama.
+ Operasi penyisipan dan penghapusan pada 2-4 trees juga setara dengan pembalikan warna dan rotasi pada red–black trees.
+ Hal ini membuat 2-4 trees menjadi alat penting untuk memahami logika di balik red–black trees, dan inilah mengapa banyak teks algoritme pengantar memperkenalkan 2-4 trees tepat sebelum red–black trees, meskipun **2-4 trees tidak sering digunakan dalam praktik**.
+ - [CS 61B Kuliah 26: Pohon Pencarian Seimbang (video)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q)
+ - [Bawah Atas 234-Trees (video)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [Atas Bawah 234-Trees (video)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
+
+ - **N-ary (K-ary, M-ary) trees**
+ - catatan: N atau K adalah faktor percabangan (cabang maks)
+ - pohon biner adalah pohon 2-ary, dengan faktor percabangan = 2
+ - 2-3 pohon adalah 3-ary
+ - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree)
+
+ - **B-Trees**
+ - Fakta menyenangkan: ini adalah misteri, tetapi B bisa berarti Boeing, Balanced, atau Bayer (co-inventor).
+ - Dalam praktek:
+ B-Trees banyak digunakan dalam database. Kebanyakan filesystem modern menggunakan B-tree (atau Variants). Sebagai tambahannya
+ penggunaannya dalam database, B-tree juga digunakan dalam sistem file untuk memungkinkan akses acak cepat ke sembarang
+ blokir di file tertentu. Masalah dasarnya adalah mengubah alamat file blok i menjadi blok disk
+ (atau mungkin ke alamat sektor kepala silinder)
+ - [B-Tree](https://en.wikipedia.org/wiki/B-tree)
+ - [Struktur Data B-Tree](http://btechsmartclass.com/data_structures/b-trees.html)
+ - [Pengantar B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
+ - [Definisi dan Penyisipan B-Tree (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [Penghapusan B-Tree (video)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [MIT 6.851 - Model Hirarki Memori (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
- covers cache-oblivious B-Trees, very interesting data structures
- the first 37 minutes are very technical, may be skipped (B is block size, cache line size)
- ### k-D Trees
- - great for finding number of points in a rectangle or higher dimension object
- - a good fit for k-nearest neighbors
- - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk)
- - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
+ - Bagus untuk menemukan jumlah titik dalam persegi panjang atau objek berdimensi lebih tinggi
+ - Cocok untuk tetangga terdekat
+ - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk)
+ - [Algoritma kNN K-d tree (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
- ### Skip lists
- - "These are somewhat of a cult data structure" - Skiena
- - [ ] [Randomization: Skip Lists (video)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [For animations and a little more detail](https://en.wikipedia.org/wiki/Skip_list)
+ -"Ini adalah semacam struktur data kultus" - Skiena
+ - [Pengacakan: Skip lists (video)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [Untuk animasi dan sedikit lebih detail](https://en.wikipedia.org/wiki/Skip_list)
-- ### Network Flows
- - [ ] [Ford-Fulkerson in 5 minutes (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
- - [ ] [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
- - [ ] [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
+- ### Aliran Jaringan
+ - [Ford-Fulkerson dalam 5 menit - Contoh langkah demi langkah (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs)
+ - [Algoritma Ford-Fulkerson (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
+ - [Aliran Jaringan (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
- ### Disjoint Sets & Union Find
- - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21)
- - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t)
+ - [UCB 61B - Set Pemutusan; Penyortiran & pemilihan (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI)
+ - [Algoritma Sedgewick - Union-Find (6 video)](https://www.coursera.org/learn/algorithms-part1/home/week/1)
-- ### Math for Fast Processing
- - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
+- ### Matematika untuk Pemrosesan Cepat
+ - [Aritmatika Integer, Perkalian Karatsuba (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [Teorema Sisa Cina (digunakan dalam kriptografi) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
- ### Treap
- Combination of a binary search tree and a heap
- - [ ] [Treap](https://en.wikipedia.org/wiki/Treap)
- - [ ] [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8)
- - [ ] [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
-
-- ### Linear Programming (videos)
- - [ ] [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ)
- - [ ] [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U)
- - [ ] [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik)
- - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk)
-
-- ### Geometry, Convex hull (videos)
- - [ ] [Graph Alg. IV: Intro to geometric algorithms - Lecture 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
- - [ ] [Geometric Algorithms: Graham & Jarvis - Lecture 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- - [ ] [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
-
-- ### Discrete math
- - see videos below
-
-- ### Machine Learning
- - [ ] Why ML?
- - [ ] [How Google Is Remaking Itself As A Machine Learning First Company](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70)
- - [ ] [Large-Scale Deep Learning for Intelligent Computer Systems (video)](https://www.youtube.com/watch?v=QSaZGT4-6EY)
- - [ ] [Deep Learning and Understandability versus Software Engineering and Verification by Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw)
- - [ ] [Google's Cloud Machine learning tools (video)](https://www.youtube.com/watch?v=Ja2hxBAwG_0)
- - [ ] [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (video)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal)
- - [ ] [Tensorflow (video)](https://www.youtube.com/watch?v=oZikw5k_2FM)
- - [ ] [Tensorflow Tutorials](https://www.tensorflow.org/versions/r0.11/tutorials/index.html)
- - [ ] [Practical Guide to implementing Neural Networks in Python (using Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)
- - Courses:
- - [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning)
- - [videos only](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW)
- - see videos 12-18 for a review of linear algebra (14 and 15 are duplicates)
- - [Neural Networks for Machine Learning](https://www.coursera.org/learn/neural-networks)
- - [Google's Deep Learning Nanodegree](https://www.udacity.com/course/deep-learning--ud730)
- - [Google/Kaggle Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009)
- - [Self-Driving Car Engineer Nanodegree](https://www.udacity.com/drive)
- - [Metis Online Course ($99 for 2 months)](http://www.thisismetis.com/explore-data-science)
- - Resources:
- - Books:
- - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/)
- - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X)
- - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/)
- - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers)
+ - [Treap](https://en.wikipedia.org/wiki/Treap)
+ - [Struktur Data: Penjelasan hierarki (video)](https://www.youtube.com/watch?v=6podLUYinH8)
+ - [Aplikasi dalam operasi set](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
+
+- ### Pemrograman Linear (video)
+ - [Pemrograman Linear](https://www.youtube.com/watch?v=M4K6HYLHREQ)
+ - [Menemukan biaya minimum](https://www.youtube.com/watch?v=2ACJ9ewUC6U)
+ - [Menemukan nilai maksimum](https://www.youtube.com/watch?v=8AA_81xI3ik)
+ - [Memecahkan Persamaan Linear dengan Python - Algoritma Simpleks](https://www.youtube.com/watch?v=44pAWI7v5Zk)
+
+- ### Geometry, Convex hull (video)
+ - [Grafik Alg. IV: Pengantar algoritma geometris - Kuliah 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
+ - [Algoritma Geometris: Graham & Jarvis - Kuliah 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [Bagilah & Taklukkan: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
+
+- ### Matematika diskrit
+ - lihat video di bawah ini
+
+- ### Pembelajaran Mesin (Machine Learning)
+ - Kenapa ML?
+ - [Bagaimana Google Mengubah Dirinya Sebagai Perusahaan Machine Learning First](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70)
+ - [Pembelajaran Mendalam Skala Besar untuk Sistem Komputer Cerdas (video)](https://www.youtube.com/watch?v=QSaZGT4-6EY)
+ - [Pembelajaran Mendalam dan Dapat Dipahami versus Rekayasa Perangkat Lunak dan Verifikasi oleh Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw)
+ - [Alat pembelajaran Mesin Cloud Google (video)](https://www.youtube.com/watch?v=Ja2hxBAwG_0)
+ - [Resep Pembelajaran Mesin Google Developers (Scikit Learn & Tensorflow) (video)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal)
+ - [Tensorflow (video)](https://www.youtube.com/watch?v=oZikw5k_2FM)
+ - [Tutorial Tensorflow](https://www.tensorflow.org/versions/r0.11/tutorials/index.html)
+ - [Panduan Praktis untuk mengimplementasikan Jaringan Neural dengan Python (menggunakan Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)
+ - Kursus:
+ - [Kursus pemula yang bagus: Pembelajaran Mesin](https://www.coursera.org/learn/machine-learning)
+ - [video saja](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW)
+ - lihat video 12-18 untuk review aljabar linier (14 dan 15 adalah duplikat)
+ - [Jaringan Neural untuk Pembelajaran Mesin](https://www.coursera.org/learn/neural-networks)
+ - [Nanodegree Deep Learning Google](https://www.udacity.com/course/deep-learning--ud730)
+ - [Nanodegree Machine Learning Engineer Google / Kaggle](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009)
+ - [Nanodegree, Insinyur Mobil Mengemudi Mandiri](https://www.udacity.com/drive)
+ - [Kursus Online Metis ($99 selama 2 bulan)](http://www.thisismetis.com/explore-data-science)
+ - Sumber:
+ - Buku:
+ - [Pembelajaran Mesin Python](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/)
+ - [Ilmu Data dari Awal: Prinsip Pertama dengan Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X)
+ - [Pengantar Machine Learning dengan Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/)
+ - [Pembelajaran Mesin untuk Insinyur Perangkat Lunak](https://github.com/ZuzooVn/machine-learning-for-software-engineers)
- Data School: http://www.dataschool.io/
-- ### Go
- - [ ] Videos:
- - [ ] [Why Learn Go?](https://www.youtube.com/watch?v=FTl0tl9BGdc)
- - [ ] [Go Programming](https://www.youtube.com/watch?v=CF9S4QZuV30)
- - [ ] [A Tour of Go](https://www.youtube.com/watch?v=ytEkHepK08c)
- - [ ] Books:
- - [ ] [An Introduction to Programming in Go (read free online)](https://www.golang-book.com/books/intro)
- - [ ] [The Go Programming Language (Donovan & Kernighan)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440)
- - [ ] [Bootcamp](https://www.golang-book.com/guides/bootcamp)
-
--
-## Additional Detail on Some Subjects
+## Detail Tambahan tentang Beberapa Subjek
+
+ Saya menambahkan ini untuk memperkuat beberapa ide yang sudah disajikan di atas, tetapi tidak ingin memasukkannya di atas karena terlalu banyak. Sangat mudah untuk melakukannya secara berlebihan pada suatu subjek.
+ Anda ingin dipekerjakan di abad ini, bukan?
+
+- **SOLID**
+ - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
+ - [ ] S - [Single Responsibility Principle (Prinsip Tanggung Jawab Tunggal)](http://www.oodesign.com/single-responsibility-principle.html) | [Tanggung jawab tunggal untuk setiap Objek](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
+ - [lebih banyak rasa](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
+ - [ ] O - [Open/Closed Principle (Prinsip Terbuka / Tertutup)](http://www.oodesign.com/open-close-principle.html) | [Pada tingkat produksi, Objek siap untuk ekstensi tetapi tidak untuk modifikasi](https://en.wikipedia.org/wiki/Open/closed_principle)
+ - [lebih banyak rasa](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
+ - [ ] L - [Liskov Substitution Principle (Prinsip Substitusi Liskov)](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Class Dasar dan Class Turunan mengikuti prinsip 'IS A'](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
+ - [lebih banyak rasa](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
+ - [ ] I - [Interface segregation principle (Prinsip pemisahan antarmuka)](http://www.oodesign.com/interface-segregation-principle.html) | klien tidak boleh dipaksa untuk mengimplementasikan antarmuka yang tidak mereka gunakan
+ - [Prinsip Pemisahan Antarmuka dalam 5 menit (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
+ - [lebih banyak rasa](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
+ - [ ] D - [Dependency Inversion principle (Prinsip Ketergantungan Inversi)](http://www.oodesign.com/dependency-inversion-principle.html) | Kurangi dependency dalam komposisi objek.
+ - [Mengapa Prinsip Pembalikan Ketergantungan Dan Mengapa Itu Penting](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
+ - [lebih banyak rasa](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
+
+
+- **Union-Find**
+ - [Gambaran](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
+ - [Implementasi yang Naif](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
+ - [Pohon](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
+ - [Union Berdasarkan Pangkat](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank)
+ - [Kompresi Jalur](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression)
+ - [Opsi Analisis](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
+
+- **Lebih banyak Pemrograman Dinamis** (videos)
+ - [6.006: Pemrograman Dinamis I: Fibonacci, Jalur Terpendek](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19)
+ - [6.006: Pemrograman Dinamis II: Justifikasi Teks, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20)
+ - [6.006: DP III: Tanda kurung, Edit Jarak, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21)
+ - [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [6.046: Pemrograman Dinamis & DP Lanjutan](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [6.046: Pemrograman Dinamis: Jalur Terpendek Semua Pasangan](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15)
+ - [6.046: Pemrograman Dinamis (pengkajian siswa)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
+
+- **Pemrosesan Graph Lanjutan** (video)
+ - [Algoritma Terdistribusi Sinkron: Pemutusan Simetri. Jalur Terpendek yang Merentangkan Pohon](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
+ - [Algoritma Terdistribusi Asynchronous: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
+
+- MIT **Probabilitas** (matematika, dan lakukan perlahan, yang bagus untuk hal-hal matematika) (video):
+ - [MIT 6.042J - Pengenalan Probabilitas](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Probabilitas Bersyarat](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
+ - [DENGAN 6.042J - Kemerdekaan](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Variabel Acak](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21)
+ - [MIT 6.042J - Harapan I.](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Harapan II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Penyimpangan Besar](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Jalan Acak](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25)
+
+- [Simonson: Algoritma Perkiraan (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
+
+- **Pencocokan String**
+ - Rabin-Karp (videos):
+ - [Algoritma Rabin Karps](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm)
+ - [Prekomputasi](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation)
+ - [Optimasi: Implementasi dan Analisis](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis)
+ - [Penggandaan Meja, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9)
+ - [Rolling Hashes, Analisis Amortisasi](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32)
+ - Knuth-Morris-Pratt (KMP):
+ - [Algoritma Pencocokan String Knuth-Morris-Pratt (KMP)](https://www.youtube.com/watch?v=5i7oKodCRJo)
+ - Algoritma pencarian string Boyer – Moore
+ - [Algoritma Pencarian String Boyer-Moore](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm)
+ - [Algoritma Boyer-Moore-Horspool Pencarian String Lanjutan (video)](https://www.youtube.com/watch?v=QDZpzctPf10)
+ - [Coursera: Algoritma pada String](https://www.coursera.org/learn/algorithms-on-strings/home/week/1)
+ - dimulai dengan baik, tetapi pada saat melewati KMP, hal itu menjadi lebih rumit dari yang seharusnya
+ - penjelasan yang bagus tentang percobaan
+ - bisa dilewati
+
+- **Penyortiran**
- I added these to reinforce some ideas already presented above, but didn't want to include them
- above because it's just too much. It's easy to overdo it on a subject.
- You want to get hired in this century, right?
+ - Kuliah Stanford tentang penyortiran:
+ - [Kuliah 15 | Abstraksi Pemrograman (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69)
+ - [Kuliah 16 | Abstraksi Pemrograman (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69)
+ - Shai Simonson, [Aduni.org](http://www.aduni.org/):
+ - [Algoritma - Sortasi - Kuliah 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2)
+ - [Algoritma - Sorting II - Kuliah 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3)
+ - Steven Skiena memberi kuliah tentang penyortiran:
+ - [kuliah dimulai pada 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600)
+ - [kuliah dimulai pada 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [kuliah dimulai pada 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [kuliah dimulai pada 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
-- [ ] **Union-Find**
- - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
- - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
- - [ ] [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
- - [ ] [Union By Rank](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank)
- - [ ] [Path Compression](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression)
- - [ ] [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
+## Seri Video
-- [ ] **More Dynamic Programming** (videos)
- - [ ] [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19)
- - [ ] [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20)
- - [ ] [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21)
- - [ ] [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15)
- - [ ] [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
+Duduk dan nikmati. "Netflix dan keterampilan": P
-- [ ] **Advanced Graph Processing** (videos)
- - [ ] [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
- - [ ] [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
+- [Daftar masalah Pemrograman Dinamis individu (masing-masing pendek)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
-- [ ] MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos):
- - [ ] [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Random Variables](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21)
- - [ ] [MIT 6.042J - Expectation I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Large Deviations](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Random Walks](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25)
+- [x86 Arsitektur, Perakitan, Aplikasi (11 video)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0)
-- [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
+- [MIT 18.06 Linear Aljabar, Musim Semi 2005 (35 video)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8)
-- [ ] **String Matching**
- - [ ] Rabin-Karp (videos):
- - [Rabin Karps Algorithm](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm)
- - [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation)
- - [Optimization: Implementation and Analysis](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis)
- - [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9)
- - [Rolling Hashes, Amortized Analysis](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32)
- - [ ] Knuth-Morris-Pratt (KMP):
- - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo)
- - [ ] Boyer–Moore string search algorithm
- - [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm)
- - [Advanced String Searching Boyer-Moore-Horspool Algorithms (video)](https://www.youtube.com/watch?v=QDZpzctPf10)
- - [ ] [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1)
- - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be
- - nice explanation of tries
- - can be skipped
+- [Luar Biasa - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A)
-- [ ] **Sorting**
+- [Ilmu Komputer 70, 001 - Musim Semi 2015 - Matematika Diskrit dan Teori Probabilitas](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html)
- - [ ] Stanford lectures on sorting:
- - [ ] [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69)
- - [ ] [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69)
- - [ ] Shai Simonson, [Aduni.org](http://www.aduni.org/):
- - [ ] [Algorithms - Sorting - Lecture 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2)
- - [ ] [Algorithms - Sorting II - Lecture 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3)
- - [ ] Steven Skiena lectures on sorting:
- - [ ] [lecture begins at 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600)
- - [ ] [lecture begins at 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [lecture begins at 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [lecture begins at 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
+- [Matematika Diskrit oleh Shai Simonson (19 video)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG)
-## Video Series
+- [Matematika Diskrit Bagian 1 oleh Sarada Herke (5 video)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo)
-Sit back and enjoy. "Netflix and skill" :P
+- CSE373 - Analysis of Algorithms (25 videos)
+ - [Kuliah Skiena dari Algoritma Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1)
-- [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+- [UC Berkeley 61B (Musim Semi 2014): Struktur Data (25 video)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
-- [ ] [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0)
+- [UC Berkeley 61B (Musim Gugur 2006): Struktur Data (39 video)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C)
-- [ ] [MIT 18.06 Linear Algebra, Spring 2005 (35 videos)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8)
+- [UC Berkeley 61C: Struktur Mesin (26 video)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_)
-- [ ] [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A)
+- [OOSE: Software Dev Menggunakan UML dan Java (21 video)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
-- [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy)
+- ~~ [UC Berkeley CS 152: Arsitektur dan Teknik Komputer (20 video)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)~~
-- [ ] [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG)
+- [MIT 6.004: Struktur Komputasi (49 video)](https://www.youtube.com/playlist?list=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu)
-- [ ] [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo)
+- [Carnegie Mellon - Kuliah Arsitektur Komputer (39 video)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq)
-- [ ] CSE373 - Analysis of Algorithms (25 videos)
- - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1)
+- [MIT 6.006: Pengantar Algoritma (47 video)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False)
-- [ ] [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
+- [MIT 6.033: Teknik Sistem Komputer (22 video)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484)
-- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C)
+- [MIT 6.034 Artificial Intelligence, Fall 2010 (30 video)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi)
-- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_)
+- [MIT 6.042J: Matematika untuk Ilmu Komputer, Musim Gugur 2010 (25 video)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B)
-- [ ] [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+- [MIT 6.046: Desain dan Analisis Algoritma (34 video)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
-- [ ] [UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)
+- [MIT 6.050J: Information and Entropy, Spring 2008 (19 video)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7)
-- [ ] [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+- [MIT 6.851: Struktur Data Lanjutan (22 video)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1)
-- [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq)
+- [MIT 6.854: Algoritma Lanjutan, Musim Semi 2016 (24 video)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c)
-- [ ] [MIT 6.006: Intro to Algorithms (47 videos)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False)
+- [Harvard COMPSCI 224: Algoritma Lanjutan (25 video)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf)
-- [ ] [MIT 6.033: Computer System Engineering (22 videos)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484)
+- [MIT 6.858 Computer Systems Security, Musim Gugur 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
-- [ ] [MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi)
+- [Stanford: Paradigma Pemrograman (27 video)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02)
-- [ ] [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B)
+- [Pengantar Kriptografi oleh Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
+ - [Situs Kursus bersama dengan Slide dan Kumpulan Soal](http://www.crypto-textbook.com/)
-- [ ] [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+- [Menambang Kumpulan Data Besar-besaran - Universitas Stanford (94 video)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
-- [ ] [MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7)
+- [Teori Grafik oleh Sarada Herke (67 video)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
-- [ ] [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1)
+## Kursus Ilmu Komputer
-- [ ] [MIT 6.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c)
+- [Direktori Kursus CS Online](https://github.com/open-source-society/computer-science)
+- [Direktori Kursus CS (banyak dengan kuliah online)](https://github.com/prakhar1989/awesome-courses)
-- [ ] [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf)
+## Implementasi Algoritma
-- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+- [Implementasi Berbagai Algoritma oleh Princeton University)](https://algs4.cs.princeton.edu/code)
-- [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02)
+## Dokumen
-- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
- - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/)
+- [Suka makalah klasik?](https://www.cs.cmu.edu/~crary/819-f09/)
+- [1978: Mengkomunikasikan Proses Berurutan](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
+ - [implementasi di Go](https://godoc.org/github.com/thomas11/csp)
+- [2003: Sistem Berkas Google](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
+ - digantikan oleh Colossus pada tahun 2012
+- [2004: MapReduce: Pemrosesan Data yang Disederhanakan pada Kluster Besar](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
+ - kebanyakan digantikan oleh Cloud Dataflow?
+- [2006: Bigtable: Sistem Penyimpanan Terdistribusi untuk Data Terstruktur](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
+ - [Melihat ke dalam Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf)
+- [2006: Layanan Chubby Lock untuk Sistem Terdistribusi yang Dirangkai Secara Longgar](https://research.google.com/archive/chubby-osdi06.pdf)
+- [2007: Dynamo: Toko Nilai Kunci Amazon yang Sangat Tersedia](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf)
+ - Makalah Dynamo memulai revolusi NoSQL
+- [2007: Yang Harus Diketahui Setiap Programmer Tentang Memori (sangat panjang, dan penulis mendorong untuk melewatkan beberapa bagian)](https://www.akkadia.org/drepper/cpumemory.pdf)
+- [2010: Dapper, Infrastruktur Pelacakan Sistem Terdistribusi Skala Besar](https://research.google.com/pubs/archive/36356.pdf)
+- [2010: Dremel: Analisis Interaktif Kumpulan Data Skala Web](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf)
+- [2012: Colossus Google](https://www.wired.com/2012/07/google-colossus/)
+ - kertas tidak tersedia
+- 2012: AddressSanitizer: A Fast Address Sanity Checker:
+ - [kertas](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
+ - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
+- 2013: Spanner: Google’s Globally-Distributed Database:
+ - [kertas](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
+ - [video](https://www.usenix.org/node/170855)
+- [2014: Pembelajaran Mesin: Kartu Kredit Berbunga Tinggi dari Hutang Teknis](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
+- [2015: Continuous Pipelines di Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
+- [2015: Ketersediaan Tinggi dalam Skala Besar: Membangun Infrastruktur Data Google untuk Iklan](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
+- [2015: TensorFlow: Machine Learning Skala Besar pada Sistem Terdistribusi Heterogen](http://download.tensorflow.org/paper/whitepaper2015.pdf )
+- [2015: Bagaimana Pengembang Menelusuri Kode: Studi Kasus](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
+- [2016: Borg, Omega, dan Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
-- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
+## LISENSI
-- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
+[CC-BY-SA-4.0](../LICENSE.txt)
-## Computer Science Courses
+Terjemahan Bahasa Indonesia dipersembahkan oleh
-- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science)
-- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses)
+- @[hexatester](https://github.com/hexatester)
+- @[santosomichael](https://github.com/santosomichael)
+- @[dikiaap](https://github.com/dikiaap)
+- @[rvlewerissa](https://github.com/rvlewerissa)
+- @[ziishaned](https://github.com/ziishaned)
+- @[rimonmostafiz](https://github.com/rimonmostafiz)
+- @[hwhung0111](https://github.com/hwhung0111)
+- @[fahminlb33](https://github.com/fahminlb33)
+- @[davidsetyanugraha](https://github.com/davidsetyanugraha)
diff --git a/translations/README-ja.md b/translations/README-ja.md
new file mode 100644
index 0000000000..1cfb0fa269
--- /dev/null
+++ b/translations/README-ja.md
@@ -0,0 +1,1984 @@
+# コーディング面接の大学
+
+>私はもともとこれをソフトウェアエンジニアになるための短いトピックリストとして作成しましたが、
+>今日それは大きなリストに成長しました。この調査計画を経て、[私はAmazonで
+> ソフトウェアエンジニアとして雇われました!!](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)
+>おそらく、あなたは私ほど勉強する必要はないでしょう。とにかく、必要なものはすべてここにあります。
+>
+>ここに掲載されている項目を学べば、Amazon、Facebook、Google、Microsoftなど
+>大手企業を含む、ほぼすべてのソフトウェア会社の面接に備えることができます。
+>
+> *あなたに最高の幸運がありますように!*
+
+翻訳:
+- [中文版本](translations/README-cn.md)
+- [TiếngViệt - ベトナム語](translations/README-vi.md)
+- [Español](translations/README-es.md)
+
+翻訳中:
+- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81)
+- [עברית](https://github.com/jwasham/coding-interview-university/issues/82)
+- [インドネシア語](https://github.com/jwasham/coding-interview-university/issues/101)
+- [アラビア語](https://github.com/jwasham/coding-interview-university/issues/98)
+- [トルコ語](https://github.com/jwasham/coding-interview-university/issues/90)
+- [French](https://github.com/jwasham/coding-interview-university/issues/89)
+- [ロシア語](https://github.com/jwasham/coding-interview-university/issues/87)
+- [ウクライナ](https://github.com/jwasham/coding-interview-university/issues/106)
+- [ブラジルのポルトガル語](https://github.com/jwasham/coding-interview-university/issues/113)
+- [韓国語](https://github.com/jwasham/coding-interview-university/issues/118)
+- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117)
+- [Polish](https://github.com/jwasham/coding-interview-university/issues/122)
+- [ドイツ語](https://github.com/jwasham/coding-interview-university/issues/135)
+- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140)
+- [タイ語](https://github.com/jwasham/coding-interview-university/issues/156)
+- [ギリシャ語](https://github.com/jwasham/coding-interview-university/issues/166)
+- [Italian](https://github.com/jwasham/coding-interview-university/issues/170)
+
+## これは何?
+
+これは、Webエンジニア(独学で、CS学位なし)から大企業のソフトウェアエンジニアを目指すための私の複数月の学習計画です。
+
+![ホワイトボードでのコーディング - HBOのシリコンバレーから](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
+
+これは、 **新人ソフトウェアエンジニア** 、またはソフトウェア/ Webエンジニアからソフトウェアエンジニア(CSの知識が必要な場合)に転職する人を対象にしています。
+長年のソフトウェアエ開発経験をお持ちの場合は、より面白い面接を期待してください。
+
+あなたに何年ものソフトウェア/Web開発経験がある場合、Google、Amazon、Facebook、Microsoftなどの大規模なソフトウェア会社は、ソフトウェア/Web開発力ではなくソフトウェア工学に関して見ており、そのためにはCSに関する知識が必要となることをご了承ください。
+
+SREまたはシステムエンジニアになりたい場合は、オプションのリスト(ネットワーク、セキュリティ)から詳細を調べてください。
+
+---
+
+## 目次
+
+- [これは何?](#これは何?)
+- [なぜこれを使うの?](#why-use-it)
+- [使い方](#使い方)
+- [あなたは十分にスマートではないと感じないでください](十分にスマートではありません)
+- [ビデオリソースについて](#about-video-resources)
+- [面接のプロセスと一般的な面接の準備](#面接プロセス--一般面接--準備)
+- [面接のための1つの言語を選ぶ](面接のために1つの言語を選択する)
+- [ブックリスト](#ブックリスト)
+- [始める前に](始める前に#)
+- あなたがカバーしていないもの(何があなたには見えません)
+- [前提知識](#前提条件知識)
+- [日々の計画](日々の計画)
+- [アルゴリズムの複雑さ/ Big-O / Asymptotic分析](#アルゴリズム--複雑--big-o--漸近分析)
+- [データ構造](#データ構造)
+ - [配列](#配列)
+ - [連結リスト](#連結リスト)
+ - [スタック](#スタック)
+ - [キュー](#キュー)
+ - [ハッシュテーブル](#ハッシュテーブル)
+- [その他の知識](#more-knowledge)
+ - [二分探索](#二分探索)
+ - [ビット演算](#ビット演算)
+- [木構造](#木)
+ - [木構造 - ノートと背景](#木---ノート--背景)
+ - [二分探索木:BST](#binary-search-trees-bsts)
+ - [ヒープ/優先度つきキュー/二分ヒープ](#ヒープ--優先度キュー--バイナリヒープ)
+ - 平衡探索木(詳細ではなく一般概念)
+ - 木の走査(traversal):行きがけ順(pre-order)、通りがかり順(in-order)、帰りがけ順(postorder)、深さ優先探索(BFS)、幅優先探索(DFS)
+- [ソート](#ソート)
+ - 選択ソート
+ - 挿入ソート
+ - ヒープソート
+ - クイックソート
+ - マージソート
+- [グラフ](#グラフ)
+ - 有向グラフ
+ - 無向グラフ
+ - 隣接行列
+ - 隣接リスト
+ - トラバーサル:BFS、DFS
+- [さらに多くの知識](#偶数知識)
+ - [再帰](#再帰)
+ - [動的プログラミング](#動的プログラミング)
+ - [オブジェクト指向プログラミング](#オブジェクト指向プログラミング)
+ - [デザインパターン](#デザインパターン)
+ - [組み合わせと確率](#combinatorics-n-choose-k--確率)
+ - [NP、NP完全/近似アルゴリズム](#np-np-complete-and-approximation-algorithms)
+ - [キャッシュ](#キャッシュ)
+ - [プロセスとスレッド](#processes-and-threads)
+ - [論文](#論文)
+ - [テスト](#テスト)
+ - [スケジューリング](#スケジューリング)
+ - [システムルーチンを実装する](#implement-system-routines)
+ - [文字列検索と操作](#文字列検索--操作)
+ - [試行](#試行)
+ - [浮動小数点数](浮動小数点数)
+ - [ユニコード](#ユニコード)
+ - [バイト順(エンディアン)](#エンディアン)
+- [ネットワーキング](#ネットワーキング)
+- [システム設計、スケーラビリティ、データ処理](#システム設計--スケーラビリティなデータ処理)(4年以上の経験がある場合)
+- [最終審査](#最終審査)
+- [コーディング質問練習](#コーディング質問練習)
+- [コーディング練習問題/挑戦](#コーディング演習問題)
+- [面接に近づいたら](面接に一度近づいて)
+- [履歴書](あなたの履歴書)
+- [面接が来たときに考える](面接のときに考えている)
+- [面接官に質問があります](#面接のための質問があります)
+- [一度あなたは仕事を得た](一度あなたが仕事をしたこと)
+
+----------------この時点より下のものはすべてオプションです----------------
+
+- [追加の書籍](追加の書籍数)
+- [追加の学習](追加学習)
+ - [コンパイラ](#コンパイラ)
+ - [Emacsとvi(m)](#emacs-and-vim)
+ - [Unixコマンドラインツール](#unix-command-line-tools)
+ - [情報理論](#情報理論)
+ - [パリティとハミング符号](#パリティ--ハミングコード)
+ - [情報量(エントロピー)](#エントロピー)
+ - [暗号化](#暗号化)
+ - [圧縮](#圧縮)
+ - [コンピュータセキュリティ](#コンピュータセキュリティ)
+ - [ガベージコレクション](#ガベージコレクション)
+ - [並列計算](#パラレルプログラミング)
+ - [メッセージング、シリアライゼーション・キューイングシステム](#メッセージングシリアライゼーションとキューイングシステム)
+ - [A *](#a)
+ - [高速フーリエ変換](#高速フーリエ変換)
+ - [ブルームフィルタ](#ブルームフィルタ)
+ - [HyperLogLog](#hyperloglog)
+ - [局所性鋭敏型ハッシュ](#ローカリティセンシティブハッシング)
+ - [van Emde Boas Trees(バン エンデ ボース)](ヴァン・エムード・ボア・木)
+ - [拡張データ構造](#拡張データ構造)
+ - [N-ary(k-ary、M-ary)木](#n-ary-k-ary-m-ary-trees)
+ - [平衡探索木](#バランス検索木)
+ - AVL木
+ - スプレー木
+ - 赤黒木
+ - 2-3木
+ - 2-3-4木(別名2-4木)
+ - 多分木(N-ary,K-ary,M-ary木)
+ - B木
+ - [kd木](#k-d-trees)
+ - [スキップリスト](#スキップリスト)
+ - [ネットワークのフロー](#ネットワークフロー)
+ - [素集合データ構造とUnion-Findアルゴリズム](#disjoint-sets--union-find)
+ - [高速処理のための数学](#数学のための高速処理)
+ - [Treap](#treap)
+ - [線形計画法](#線形計画法)
+ - [ジオメトリ、凸包](#ジオメトリ--凸包)
+ - [離散数学](離散数学)
+ - [機械学習](機械学習)
+- [いくつかの科目の追加の詳細](#追加の詳細--いくつかの科目)
+- [ビデオシリーズ](#ビデオシリーズ)
+- [コンピュータサイエンスコース](#コンピュータサイエンスコース)
+
+## なぜそれを使用するのですか?
+
+私はこのプロジェクトを始めたとき、ヒープからスタックを知りませんでしたし、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風マークダウンの詳細](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
+
+## あなたは十分にスマートではないと感じないでください
+- 成功したソフトウェアエンジニアはスマートですが、多くの人はスマートではないという不安があります。
+- [Geniusプログラマーの神話](https://www.youtube.com/watch?v=0SARbwvhupQ)
+- [一人で行くのは危険だ:テクノロジーの見えない魔物と戦う](https://www.youtube.com/watch?v=1i8ylq4j_EY)
+
+---
+
+## ビデオリソースについて
+
+一部のビデオは、Coursera、EdX、またはLynda.comクラスに登録することによってのみ利用できます。
+これらはMOOCと呼ばれています。
+時にはクラスがセッションに入っていないので、数ヶ月待つ必要があるため、アクセス権がありません。
+Lynda.comコースは無料ではありません。
+
+ オンラインコースビデオに付随するYouTubeビデオなど、無料で常時利用可能なパブリックソースを追加することに感謝します。
+ 私は大学の講義を使うのが好きです。
+
+
+## 面接のプロセスと一般的な面接の準備
+
+- [ ] [ABC:常にコーディングする](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
+- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
+- [ ] [プログラミング面接中の効果的なホワイトボード](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/)
+- [ ] [技術職募集での謎解き](https://www.youtube.com/watch?v=N233T0epWTs)
+- [ ] クラッキングコーディング面接セット1:
+ - [ ] [Gayle L McDowell - コーディング面接(ビデオ)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
+ - [ ] [Gayle Laakmann McDowell(ビデオ)](https://www.youtube.com/watch?v=aClxtDcdpsQ)とのコーディング面接をクラッキング
+- [ ] ビッグ4で仕事を得る方法:
+ - [ ] [Amazon、Facebook、Google、Microsoftで仕事を手に入れる方法(ビデオ)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
+- [ ] 準備コース:
+ - [ ] [Software Engineer Interview Unleashed(有料コース)](https://www.udemy.com/software-engineer-interview-unleashed):
+ - 以前のGoogle面接官からソフトウェアエンジニアの面接準備をする方法を学びます。
+ - [ ] [データ構造、アルゴリズム、面接のためのPython! (有料コース)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/):
+ - データ構造、アルゴリズム、模擬面接などを扱うPython中心の面接の準備コース。
+
+## 面接のための1つの言語を選ぶ
+
+面接のコーディングの部分に慣れ親しんだ言語を使用することはできますが、大企業にとってはこれらの選択肢が確実です。
+
+- C ++
+- Java
+- Python
+
+これらを使用することもできますが、最初に読んでください。注意が必要な場合があります:
+
+- JavaScript
+- Ruby
+
+あなたは言語に非常に慣れて知識が必要です。
+
+選択肢についてもっと読む:
+- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/
+- http://blog.codingforinterviews.com/best-programming-language-jobs/
+
+[言語リソースはこちら](programming-language-resources.md)
+
+私は学習しているので、以下に含まれるC、C ++、Pythonの学習を見ることができます。
+いくつかの本があります、下を参照してください。
+
+## ブックリスト
+
+これは私が使ったものよりも短いリストです。これは時間を節約するために省略されています。
+
+### 面接の準備
+
+- [ ] [プログラミング面接の公開:あなたの次の仕事への秘密、第2版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
+ - C ++とJavaの回答
+ - コーディング面接をクラッキングするためのウォームアップが良い
+ - あまりにも難しくない、ほとんどの問題はあなたが面接で(私が読んだことから)見ることよりも簡単かもしれない
+- [ ] [Cracking the Coding Interview、第6版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
+ - Javaでの回答
+
+もし余分な時間があれば:
+
+- [ ] [プログラミング面接の要素(C ++版)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
+- [ ] プログラミング面接の要素(Java版)
+ - [本](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
+ - [コンパニオンプロジェクト - 本のすべての問題のメソッドスタブとテストケース](https://github.com/gardncl/elements-of-programming-interviews)
+
+### コンピュータアーキテクチャ
+
+短い時間:
+
+- [ ] [グレートコードの作成:第1巻:マシンの理解](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
+ - この本は2004年に出版され、幾分古いですが、コンピュータを簡単に理解するには素晴らしいリソースです。
+ - 作者はHLAを発明したので、塩の穀物でHLAの言及と例を取り上げます。広く使われているわけではありませんが、どのようなアセンブリのように見えますか?
+ - これらの章はあなたに素敵な基礎を与えるために読む価値があります:
+ - 第2章 - 数値表現
+ - 第3章 - 2進算術とビット演算
+ - 第4章 - 浮動小数点表現
+ - 第5章 - キャラクター表現
+ - 第6章 - メモリ構成とアクセス
+ - 第7章 - 複合データ型とメモリオブジェクト
+ - 第9章 - CPUアーキテクチャ
+ - 第10章 - 命令セットのアーキテクチャ
+ - 第11章 - メモリのアーキテクチャと構成
+
+もっと時間があれば(私はこの本が欲しい):
+
+- [ ] [Computer Architecture、第5版:定量的アプローチ](https://www.amazon.com/dp/012383872X/)
+ - より豊かで最新の(2011年)、より長い治療のために
+
+### 言語固有
+
+**面接の言語を選択する必要があります(上記参照)。** ここで私の推奨する言語です。私はすべての言語のためのリソースがありません。私は追加を歓迎する。
+
+これらのうちの1つを読んだら、コーディングの問題を開始するために必要なすべてのデータ構造とアルゴリズムの知識が必要です。
+**あなたがレビューをしたくない場合は、このプロジェクト**のビデオ講義をすべてスキップすることができます。
+
+[ここに言語固有の追加リソースがあります](programming-language-resources.md)
+
+### C++
+
+私はこれらの2つを読んだことはありませんが、Sedgewickによって高く評価され書かれています。彼は素晴らしいです。
+
+- [ ] [C++でのアルゴリズム、パート1-4:基礎、データ構造、ソート、検索](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
+- [ ] [C++でのアルゴリズム第5部:グラフアルゴリズム](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
+
+C++の推奨事項がある場合は、私に知らせてください。包括的なリソースを探しています。
+
+### Java
+
+- [ ] [アルゴリズム(Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
+ - 書籍コンテンツの動画(とSedgewick!):
+ - [アルゴリズム1](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2)
+ - [アルゴリズムII](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd)
+
+OR:
+
+- [ ] [Javaにおけるデータ構造とアルゴリズム](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
+ - Goodrich、Tamassia、Goldwasserによる
+ - UCバークレーのCSイントロコースのオプションテキストとして使用
+ - 下のPython版の私の本のレポートを見てください。この本は同じトピックを扱っています。
+
+### Python
+
+- [ ] [Pythonのデータ構造とアルゴリズム](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
+ - Goodrich、Tamassia、Goldwasserによる
+ - 私はこの本が好きだった。それはすべてをカバーしました。
+ - Pythonコード
+ - 私の輝く本のレポート:https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/
+
+
+### オプションの書籍
+
+**ソフトウェア工学の長年の経験があり、もっと面白い面接を期待しない限り、これらのことをお勧めする人もいます。**
+
+- [ ] [アルゴリズム設計マニュアル](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202)(Skiena)
+ - レビューと問題認識として
+ - アルゴリズムのカタログ部分は、面接で得られる難易度の範囲をはるかに超えています。
+ - この本は2つの部分を持っています:
+ - データ構造とアルゴリズムに関する教科書
+ - 長所:
+ - アルゴリズムの教科書はどんなものでも良いレビューです
+ - 業界および学界の問題を解決した経験から得た素敵な話
+ - Cのコード例
+ - 短所:
+ - Introduction to Algorithms(CLRS)と同様に密集しているか、侵入不可能な場合があります。場合によっては、CLRSが一部の科目にとってより良い選択肢になる可能性があります
+ - 7章、8章、9章では、いくつかの項目がうまく説明されていないか、私が持っているよりも多くの脳を必要とするため、追跡しようとすると痛いことがあります
+ - 誤解しないで:私はSkiena、彼の教え方、そしてマナーを好きですが、Stony Brookの教材ではないかもしれません。
+ - アルゴリズムカタログ:
+ - これがあなたがこの本を買う本当の理由です。
+ - この部分に近づきます。一度私がそれを通り抜けたら、ここで更新されます。
+ - Kindleで読むことが出来ます
+ - Half.comは教科書のための良いリソースです。
+ - 回答:
+ - [ソリューション](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
+ - [ソリューション](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
+ - [正誤表](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
+
+- [ ] [アルゴリズムの紹介](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
+ - **重要:** この本を読む価値は限られています。この本はアルゴリズムとデータ構造の素晴らしいレビューですが、良いコードを書く方法を教えてくれません。まともなソリューションを効率的にコーディングすることができなければなりません。
+ - Half.comは、良い価格で教科書のための素晴らしいリソースです。
+ - スタインはゲームに遅れていたので、別名CLR、ときにはCLRS
+
+- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
+ - プログラミング上の問題(データテープを使っているものもあります)への巧妙な解決策を示していますが、これは単なるイントロです。
+ これはプログラムの設計とアーキテクチャに関するガイドブックです。
+ これはプログラムの設計とアーキテクチャに関するガイドブックです。Code Completeとよく似ていますが、はるかに短いものです。
+
+- ~~シェンの "アルゴリズムとプログラミング:問題と解決策"~~
+ - 良い本ですが、いくつかのページで問題を解決した後、私はPascalに悩まされ、whileループ、1つのインデックス付き配列、不確実な事後条件の満足度結果を得ました。
+ - むしろ別の本やオンラインのコーディングの問題からコーディングの問題に時間を費やすだろう
+
+
+## 始める前に
+
+このリストは何ヶ月にもわたって成長しました。
+
+ここで私が作ったいくつかの間違いがあります。
+あなたはより良い経験をするでしょう。
+
+### 1.あなたはそれをすべて覚えていない
+
+私は数時間のビデオを見て、豊富なメモを取りました。
+そして数ヶ月後に私は覚えていないほどでした。
+私はメモを書き、フラッシュカードを作って見直すことができるように3日間過ごしました。
+
+あなたが私と同じ間違いをしないように読んでください:
+
+[コンピュータ科学知識の保持](https://startupnextdoor.com/retaining-computer-science-knowledge/)
+
+### 2.フラッシュカードを使用する
+
+この問題を解決するために、私は2種類のフラッシュカード、一般とコードを追加できる小さなフラッシュカードサイトを作った。
+各カードのフォーマットは異なります。
+
+私はモバイル先のウェブサイトを作ったので、どこにいても電話とタブレットを見直すことができました。
+
+あなた自身を無料で作る:
+
+- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
+- [マイフラッシュカードデータベース(旧1200カード)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [マイフラッシュカードデータベース(新1800カード)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
+
+覚えておいてほしいのですが,私はやりすぎてしまい、アセンブリ言語,機械学習のためのPythonのトリビア,統計に至るまですべてのカードをカバーしています。
+何が必要なのかはあまりにも大変です。
+
+**フラッシュカードについての注意:** 最初に答えを知っているときは、それを既知のものとしてマークしないでください。
+あなたは本当にそれを知る前に、同じカードを見て、それを正しく数回答えなければなりません。
+繰り返すことで、その知識があなたの脳に深く浸透します。
+
+
+私のフラッシュカードサイトを使用する代わりに[Anki](http://ankisrs.net/)が何度も私に勧められています。
+繰り返しシステムを使用して覚えやすくなります。
+ユーザーフレンドリーで、すべてのプラットフォームで利用でき、クラウド同期システムを備えています。
+iOSでは25ドル、他のプラットフォームでは無料です。
+
+Anki形式の私のフラッシュカードデータベース:https://ankiweb.net/shared/info/25173560(thanks [@xiewenya](https://github.com/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を除く))
+- 組み込みの型を利用して、実際の使用のために組み込みのツールを使用した経験を持ちます(本番環境で自分のリンクされたリストの実装を書くつもりはありません)
+
+私はすべてのテーマでこれらのすべてをやる時間がないかもしれませんが、私は試してみます。
+
+あなたは私のコードをここに見ることができます:
+- [C](https://github.com/jwasham/practice-c)
+- [C ++](https://github.com/jwasham/practice-cpp)
+- [Python](https://github.com/jwasham/practice-python)
+
+あなたはすべてのアルゴリズムの内容を暗記する必要はありません。
+
+コンピューターではなく、ホワイトボードや紙にコードを書く。いくつかのサンプル入力でテストします。次に、コンピュータでテストします。
+
+## 前提知識
+
+- [ ] **Cを学ぶ**
+ - Cはどこにでもあります。あなたは勉強している間、書籍、講義、ビデオ、*どこにでも*見ることができます。
+ - [ ] [Cプログラミング言語、Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
+ - これは短い本ですが、それはC言語の優れた処理方法を提供します。
+ 少しでも練習すれば、すばやく習得できます。 Cを理解すると、プログラムやメモリの仕組みを理解するのに役立ちます。
+ - [質問への回答](https://github.com/lekkas/c-algorithms)
+
+- [ ] **コンピュータがプログラムをどのように処理するか:**
+ - [ ] [CPUがプログラム(ビデオ)をどのように実行するか](https://www.youtube.com/watch?v=42KTvGYQYnA)
+ - [ ] [マシンコード命令(ビデオ)](https://www.youtube.com/watch?v=Mv2XQgpbTNE)
+
+## アルゴリズムの複雑さ/ Big-O / Asymptotic解析
+- 実装するものは何もない
+- [ ] [Harvard CS50 - 漸近表記(video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
+- [ ] [BigO記法(一般的なクイックチュートリアル)(ビデオ)](https://www.youtube.com/watch?v=V6mKVRU1evU)
+- [ ] BigO表記(とオメガとシータ) - 最良の数学的説明(ビデオ)(https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
+- [ ] Skiena:
+ - [動画](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [スライド](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf)
+- [ ] [アルゴリズム複雑さ分析への穏やかな紹介](http://discrete.gr/complexity/)
+- [ ] [成長の命令(ビデオ)](https://class.coursera.org/algorithmicthink1-004/lecture/59)
+- [ ] [漸近線(Asymptotics)(video)](https://class.coursera.org/algorithmicthink1-004/lecture/61)
+- [ ] [UCバークレー BigO(ビデオ)](https://youtu.be/VIS4YDpuP98)
+- [ ] [UCバークレー Big オメガ(ビデオ)](https://youtu.be/ca3e7UVmeUc)
+- [ ] [償却分析(ビデオ)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
+- [ ] [「Big Oを描く」(ビデオ)](https://class.coursera.org/algorithmicthink1-004/lecture/63)
+- [ ] TopCoder(漸化関係とマスター定理を含む):
+ - [計算の複雑さ:セクション1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/)
+ - [計算の複雑さ:セクション2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/)
+- [ ] [チートシート](http://bigocheatsheet.com/)
+
+
+ 講義の中には数学的にも余裕がある場合は、下にジャンプして
+ 離散数学ビデオを見て、背景知識を得る。
+
+## データ構造
+
+- ### 配列
+ - 自動的にサイズ変更ベクトルを実装する。
+ - [ ] 説明:
+ - [配列(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays)
+ - [UCBerkley CS61B - 線形および多次元配列(ビデオ)](https://youtu.be/Wp8oiO_CZZE?t=15m32s)
+ - [基本的な配列(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html)
+ - [多次元(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html)
+ - [動的配列(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays)
+ - [ジャグ配列(動画)](https://www.youtube.com/watch?v=1jtrQqYpt7g)
+ - [ジャグ配列(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html)
+ - [配列のサイズ変更(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html)
+ - [ ] ベクトルを実装する(自動サイズ変更可能な可変配列):
+ - [ ] 配列とポインタを使用してコーディングを実践し、インデックスを使用する代わりにインデックスにジャンプするポインタ演算
+ - [ ] 割り当てられたメモリを持つ新しい生データ配列
+ - 内部で配列を割り当てることができますが、その機能は使用しません。
+ - 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)
+
+- ### 連結リスト
+ - [ ] 説明:
+ - [ ] [単独連結されたリスト(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists)
+ - [ ] [CS 61B - 連結リスト1(動画)](https://www.youtube.com/watch?v=htzJdKoEmO0&list=PL4BBB74C7D2A1049C&index=7)
+ - [ ] [CS 61B - 連結リスト2(動画)](https://www.youtube.com/watch?v=-c4I3gFYe3w&index=8&list=PL4BBB74C7D2A1049C)
+ - [ ] [Cコード(動画)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
+ ビデオ全体ではなく、ノード構造体とメモリ割り当てに関する部分だけです。
+ - [ ] 連結リスト Vs 配列:
+ - [コア連結リストs Vs 配列(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays)
+ - [実世界の連結リスト Vs 配列(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/quaUd/in-the-real-world-lists-vs)アレー)
+ - [ ] [連結リスト(ビデオ)を避けるべき理由](https://www.youtube.com/watch?v=YQs6IC-vgmo)
+ - [ ] 分かったぞ!:ポインタの知識へのポインタが必要です:
+ (そのポインタが指すアドレスを変更する可能性のある関数へのポインタを渡すとき)
+ このページはptrからptrまでを把握するためのものです。このリストトラバーサルスタイルはお勧めしません。読みやすさと保守性は巧みさのために苦しんでいます。
+ - [ポインターへのポインター](https://www.eskimo.com/~scs/cclass/int/sx8.html)
+ - [ ] 実装する(私はテールポインタ&なしで行った):
+ - [ ] 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) - この値を持つリストの最初の項目を削除します。
+ - [ ] 二重連結リスト
+ - [説明(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists)
+ - 実装する必要はありません
+
+- ### スタック
+ - [ ] [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)
+ - [ ] 実装されません。配列で実装するのは簡単です。
+
+- ### キュー
+ - [ ] [キューの使用 First-In First-Out(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4 .html)
+ - [ ] [キュー(video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue)
+ - [ ] [環状バッファ/ FIFO](https://en.wikipedia.org/wiki/Circular_buffer)
+ - [ ] [優先度つきキュー(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html)
+ - [ ] テールポインタ付き連結リストを使って実装する:
+ - enqueue(value) - テールの位置に値を追加する
+ - dequeue() - 値を返し、少なくとも最近追加された要素を削除する(前面)
+ - empty()
+ - [ ] 固定長配列を使って実装する:
+ - enqueue(value) - 利用可能なストレージの最後にアイテムを追加する
+ - dequeue() - 値を返し、最近追加された要素のうち最も古い要素を削除します
+ - empty()
+ - full()
+ - [ ] コスト:
+ - 最後の要素の次の要素が必要になるため、先頭にエンキューし、末尾をデキューするリンクリストを使用する悪い実装はO(n)になり、デキューごとに完全なトラバーサルが発生します
+ - enqueue:O(1)(償却、連結リストと配列[プロービング])
+ - dequeue:O(1)(連結リストと配列)
+ - empty:O(1)(連結リストと配列)
+
+- ### ハッシュテーブル
+ - [ ] 動画:
+ - [ ] [連鎖によるハッシング(動画)](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)
+ - [ ] [(上級)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)
+
+ - [ ] オンラインコース:
+ - [ ] [ハッシュ関数について(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html)
+ - [ ] [ハッシュテーブルの使用(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html)
+ - [ ] [ハッシングをサポートする(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html)
+ - [ ] [言語サポートハッシュテーブル(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html)
+ - [ ] [コアハッシュテーブル(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables)
+ - [ ] [データ構造(ビデオ)](https://www.coursera.org/learn/data-structures/home/week/3)
+ - [ ] [電話帳の問題(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem)
+ - [ ] 分散ハッシュテーブル:
+ - [Dropbox(ビデオ)でインスタントアップロードとストレージの最適化](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox)
+ - [分散ハッシュテーブル(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables)
+
+ - [ ] 線形プロービングを使用して配列で実装する
+ - hash(k、m) - mはハッシュテーブルのサイズです
+ - add(key、value) - キーがすでに存在する場合は、値を更新します。
+ - exists(キー)
+ - get(key)
+ - remove(キー)
+
+## その他の知識
+
+- ### 二分探索
+ - [ ] [二分探索(動画)](https://www.youtube.com/watch?v=D5SrAga1pno)
+ - [ ] [二分探索(ビデオ)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search)
+ - [ ] [詳細](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/)
+ - [ ] 実装:
+ - 二分探索(ソートされた整数の配列)
+ - 再帰を利用した二分探索
+
+- ### ビット演算
+ - [ ] [ビットチートシート- 2 ^ 1から2 ^ 16および2 ^ 32までの2の累乗の多くを知るべきです](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-cheet.pdf)
+ - [ ] &、|、^、〜、>>、<<を使ってビットを操作することについての本当の理解を得る
+ - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
+ - [ ] [良いイントロ:ビット操作(動画)](https://www.youtube.com/watch?v=7jkIUgLC29I)
+ - [ ] [Cプログラミングチュートリアル2-10:ビット演算子(ビデオ)](https://www.youtube.com/watch?v=d0AwjSpNXR0)
+ - [ ] [ビット操作](https://en.wikipedia.org/wiki/Bit_manipulation)
+ - [ ] [ビット演算](https://en.wikipedia.org/wiki/Bitwise_operation)
+ - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html)
+ - [ ] [The Bit Twiddler](http://bits.stephan-brumme.com/)
+ - [ ] [インタラクティブなBit Twiddler](http://bits.stephan-brumme.com/interactive.html)
+ - [ ] 2と1の補数
+ - [バイナリ:Plusses&Minuses(なぜ2の補数を使うのか)(ビデオ)](https://www.youtube.com/watch?v=lKTsv6iVxV4)
+ - [1の補数](https://en.wikipedia.org/wiki/Ones%27_complement)
+ - [2の補数](https://en.wikipedia.org/wiki/Two%27s_complement)
+ - [ ] カウントセットビット
+ - [1バイトのビットを数える4つの方法(ビデオ)](https://youtu.be/Hzuzo9NJrlc)
+ - [カウントビット](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan)
+ - [セットビットの数を32ビット整数で数える方法](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32ビット整数)
+ - [ ] 2の次の累乗に丸めます:
+ - [2つの次のパワーに回す](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html)
+ - [ ] スワップ値:
+ - [スワップ](http://bits.stephan-brumme.com/swap.html)
+ - [ ] 絶対値:
+ - [絶対整数](http://bits.stephan-brumme.com/absInteger.html)
+
+## 木
+
+- ### 木 - メモと背景
+ - [ ] [シリーズ:Core Trees(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
+ - [ ] [シリーズ:木々(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
+ - 基本的な木の構築
+ - トラバーサル
+ - 操作アルゴリズム
+ - 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)
+ - 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:自己、左、右)
+
+- ### 二分探索木:BST
+ - [ ] [二分探索木レビュー(動画)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [シリーズ(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees)
+ - シンボルテーブルから始まり、BSTアプリケーションを経由します
+ - [ ] [はじめに(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction)
+ - [ ] [MIT(動画)](https://www.youtube.com/watch?v=9Jry5-82I68)
+ - C / C ++:
+ - [ ] [二分探索木 - C / C ++での実装(ビデオ)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28)
+ - [ ] [BSTの実装 - スタックとヒープのメモリ割り当て(ビデオ)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29)
+ - [ ] [二分探索木(ビデオ)の最小要素と最大要素を検索](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [二分木の高さを見つける(ビデオ)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31)
+ - [ ] [二分木トラバース - 幅優先戦略(ビデオ)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32)
+ - [ ] [二分木:レベルオーダートラバーサル(動画)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [二分木トラバーサル:Preorder、Inorder、Postorder(video)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [二分木が二分探索木かどうかを確認する(ビデオ)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [二分探索木(ビデオ)からノードを削除](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36)
+ - [ ] [二分探索木(ビデオ)のInorder Successor](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] 実装:
+ - [ ] insert //木に値を挿入する
+ - [ ] get_node_count //格納された値の数を取得する
+ - [ ] print_values //最小値から最大値まで木の値を出力します
+ - [ ] delete_tree
+ - [ ] is_in_tree //与えられた値が木に存在する場合はtrueを返します
+ - [ ] get_height //ノードの高さを返します(単一ノードの高さは1です)
+ - [ ] get_min //木に格納されている最小値を返します
+ - [ ] get_max //木に格納されている最大値を返します
+ - [ ] is_binary_search_tree
+ - [ ] delete_value
+ - [ ] get_successor //指定された値の後に木の次に高い値を返し、存在しなければ-1を返します
+
+- ### ヒープ/優先度つきキュー/二分ヒープ
+ - 木として可視化されますが、通常はストレージ内で線形です(配列、連結リスト)
+ - [ ] [ヒープ](https://en.wikipedia.org/wiki/Heap_(data_structure))
+ - [ ] [はじめに(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction)
+ - [ ] [ナイーブな実装(video)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations)
+ - [ ] [二分木(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees)
+ - [ ] [木の高さ備考(ビデオ)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark)
+ - [ ] [基本的な操作(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations)
+ - [ ] [完全な二分木(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees)
+ - [ ] [疑似コード(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode)
+ - [ ] [ヒープソート - ジャンプして開始(ビデオ)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291)
+ - [ ] [ヒープソート(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort)
+ - [ ] [ヒープを作る(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap)
+ - [ ] [MIT:ヒープとヒープソート(ビデオ)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [CS 61B講義24:優先度つきキュー(ビデオ)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C)
+ - [ ] [線形時間BuildHeap(max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw)
+ - [ ] 最大ヒープを実装する:
+ - [ ] insert
+ - [ ] sift_up - 挿入に必要
+ - [ ] get_max - 最大項目を削除せずに返します
+ - [ ] get_size() - 格納された要素の数を返す
+ - [ ] is_empty() - ヒープに要素が含まれていない場合はtrueを返します。
+ - [ ] extract_max - 最大アイテムを返し、それを削除します。
+ - [ ] sift_down - extract_maxに必要です
+ - [ ] remove(i) - インデックス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)では実行できません)。
+
+## ソート
+
+- [ ] note:
+ - ソートを実装し、最良のケース/最悪のケース、それぞれの平均的な複雑さを知る:
+ - バブルソートなし - ひどい - O(n ^ 2)、ただしn <= 16の場合を除く
+ - ソートアルゴリズムの安定性( "Quicksortは安定していますか?")
+ - [ソートアルゴリズムの安定性](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability)
+ - [ソートアルゴリズムの安定性](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms)
+ - [ソートアルゴリズムの安定性](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/)
+ - [ソートアルゴリズム - 安定性](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf)
+ - [ ] 連結リストで使用できるアルゴリズムはどれですか?どの配列ですか?両方でどちら?
+ - 連結リストのソートはお勧めしませんが、マージソートは実行可能です。
+ - [連結リストのマージソート](http://www.geeksforgeeks.org/merge-sort-for-linked-list/)
+
+- ヒープソートについては、上記のヒープデータ構造を参照してください。ヒープソートは素晴らしいですが、安定していません。
+
+- [ ] [Sedgewick - Mergesort(5ビデオ)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+ - [ ] [1。 マージソート](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1)
+ - [ ] [2。 マージソート・ボトムアップ](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2)
+ - [ ] [3。複雑さの並べ替え](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+ - [ ] [4。コンパレータ](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+ - [ ] [5。安定性](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+
+- [ ] [Sedgewick - Quicksort(4ビデオ)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [1. クイックソート](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [2. 選択](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [3. 重複キー](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [4. システムソート](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+
+- [ ] UCバークレー:
+ - [ ] [CS 61B講義29:ソートI(ビデオ)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29)
+ - [ ] [CS 61B講義30:ソートII(ビデオ)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30)
+ - [ ] [CS 61B講義32:ソートIII(ビデオ)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C)
+ - [ ] [CS 61B講義33:ソートV(ビデオ)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C)
+
+- [ ] [バブルソート(動画)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB)
+- [ ] [バブルソートの分析(動画)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB)
+- [ ] [挿入ソート、マージソート(動画)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+- [ ] [挿入ソート(動画)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB)
+- [ ] [マージソート(動画)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB)
+- [ ] [クイックソート(動画)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB)
+- [ ] [選択ソート(動画)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB)
+
+- [ ] マージソートコード:
+ - [ ] [出力配列(C)の使用](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c)
+ - [ ] [出力配列(Python)の使用](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py)
+ - [ ] [インプレース(C ++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc)
+- [ ] クイックソートコード:
+ - [ ] [Implementation(C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c)
+ - [ ] [実装(C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c)
+ - [ ] [実装(Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py)
+
+- [ ] 実装:
+ - [ ] Mergesort:O(n log n)平均と最悪の場合
+ - [ ] Quicksort O(n log n)平均の場合
+ - 選択ソートと挿入ソートは両方ともO(n ^ 2)の平均と最悪の場合です
+ - ヒープソートについては、上記のヒープデータ構造を参照してください。
+
+- [ ] 必須ではありませんが、私はそれらをお勧めしました:
+ - [ ] [Sedgewick - 基数ソート(6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
+ - [ ] [1. Javaの文字列](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6)
+ - [ ] [2. キーインデックスのカウント](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5)
+ - [ ] [3. 最下位桁の最初の文字列の基数ソート](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4)
+ - [ ] [4. 最も重要な数字の最初の文字列の基数ソート](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
+ - [ ] [5. 基数ソートの3つの方法](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
+ - [ ] [6。接尾辞配列](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1)
+ - [ ] [基数ソート](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort)
+ - [ ] [基数ソート(動画)](https://www.youtube.com/watch?v=xhr26ia4k38)
+ - [ ] [基数ソート、ソート(線形時間指定の制約)(ビデオ)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [ランダム化:行列乗算、クイックソート、Freivaldsのアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [線形時間で並べ替える(ビデオ)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14)
+
+まとめとして、ここには[15ソートアルゴリズム](https://www.youtube.com/watch?v=kPRA0W1kECg)の視覚的表現があります。
+このテーマの詳細が必要な場合は、[いくつかの科目の追加の詳細]の[ソート]の項を参照してください(#additional-detail-on-some-subjects)
+
+## グラフ
+
+グラフはコンピュータサイエンスの多くの問題を表現するために使用することができるので、このセクションは木やソートのように長いです。
+
+- note:
+ - メモリにグラフを表示するには4つの基本的な方法があります:
+ - オブジェクトとポインタ
+ - 隣接行列
+ - 隣接リスト
+ - 隣接マップ
+ - それぞれの表現とその長所と短所を熟知してください
+ - BFSとDFS - 計算の複雑さとそのトレードオフ、そしてそれらを実際のコードに実装する方法を知っている
+ - 質問が表示されたら、まずグラフベースのソリューションを探し、それがなければ進んでください。
+
+- [ ] Skiena Lectures - 素晴らしいイントロ:
+ - [ ] [CSE373 2012 - 講義11 - グラフデータ構造(ビデオ)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
+ - [ ] [CSE373 2012 - 講義12 - 幅優先検索(ビデオ)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
+ - [ ] [CSE373 2012 - 講義13 - グラフアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13)
+ - [ ] [CSE373 2012 - 講義14 - グラフアルゴリズム(1)(ビデオ)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - 講義15 - グラフアルゴリズム(2)(動画)(ビデオ)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - 講義16 - グラフアルゴリズム(3)(ビデオ)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+
+- [ ] グラフ(レビューなど):
+
+ - [ ] [6.006単一始点最短経路問題(ビデオ)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.006 ダイクストラ(ビデオ)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.006 ベルマン-フォード法(ビデオ)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17)
+ - [ ] [6.006 ダイクストラ法のスピードアップ(ビデオ)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
+ - [ ] [Aduni:グラフアルゴリズムI - トポロジカルソート、最小スパニング木、プリムのアルゴリズム - 講演6(ビデオ)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [Aduni:グラフアルゴリズムII - DFS、BFS、クラスカル法のアルゴリズム、連合探索データ構造 - 講義7(ビデオ)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7 )
+ - [Aduni:グラフアルゴリズムIII:最短経路 - レクチャー8(ビデオ)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
+ - [ ] [Aduni:グラフアルゴリズムIV:幾何学アルゴリズムの紹介 - 第9講(ビデオ)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
+ - [ ] [CS 61B 2014(58:09から開始)(ビデオ)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)
+ - [ ] [CS 61B 2014:加重グラフ(ビデオ)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19)
+ - [ ] [欲張りアルゴリズム:最小スパニング木(ビデオ)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [強固に接続されたコサラジュのアルゴリズムグラフアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=RpgcYiky7uw)
+
+- フルcourseraコース:
+ - [ ] [グラフのアルゴリズム(ビデオ)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
+
+- 私は実装します:
+ - [ ] 隣接リストを持つDFS(再帰的)
+ - [ ] 隣接リストを持つDFS(スタックで反復)
+ - [ ] 隣接行列を持つDFS(再帰的)
+ - [ ] 隣接行列を持つDFS(スタックで反復)
+ - [ ] 隣接リストを持つBFS
+ - [ ] 隣接行列を持つBFS
+ - [ ] 単一始点の最短経路(ダイクストラ)
+ - [ ] 最小スパニング木
+ - DFSベースのアルゴリズム(上記のAduniの動画を参照):
+ - [ ] サイクルをチェックする(トポロジカルソートに必要.開始前にサイクルをチェックする)
+ - [ ] トポロジカルソート
+ - [ ] グラフ内の接続されたコンポーネントをカウントする
+ - [ ] 強く接続されたコンポーネントを一覧表示する
+ - [ ] 二部グラフをチェックする
+
+Skienaの本(下記の書籍の節を参照)と面接の書籍
+
+## さらに多くの知識
+
+- ### 再帰
+ - [ ] 再帰とバックトラックに関するスタンフォードの講義:
+ - [ ] [講義8 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
+ - [ ] [講義9 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
+ - [ ] [講義10 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
+ - [ ] [講義11 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
+ - それを使用するのが適切なとき
+ - 尾の再帰はどのように優れていないのですか?
+ - [ ] [テール再帰とは何かなぜそれが悪いのですか?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
+ - [ ] [テール再帰(ビデオ)](https://www.youtube.com/watch?v=L1jjXGfxozc)
+
+- ### 動的プログラミング
+ - この問題はかなり難しいかもしれません。なぜなら、それぞれのDP可溶性問題は再帰関係として定義されなければならず、それを思い付くのは難しいかもしれないからです。
+ - DPの問題の多くの例を見て、あなたが関連するパターンをしっかりと理解するまでお勧めします。
+ - [ ] 動画:
+ - Skienaのビデオは、時には見ることができないほど小さすぎるホワイトボードを使用することがあるため、フォローするのが難しい場合があります
+ - [ ] [Skiena:CSE373 2012 - 講義19 - 動的プログラミング入門(ビデオ)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718)
+ - [ ] [Skiena:CSE373 2012 - 講義20 - 編集距離(ビデオ)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749)
+ - [ ] [Skiena:CSE373 2012 - 講義21 - 動的プログラミング例(ビデオ)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406)
+ - [ ] [Skiena:CSE373 2012 - 講義22 - 動的プログラミングのアプリケーション(ビデオ)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22)
+ - [ ] [Simonson:動的プログラミング0(59:18から開始)(ビデオ)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558)
+ - [ ] [Simonson:動的プログラミングI - 講義11(ビデオ)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Simonson:動的プログラミングII - 講演12(ビデオ)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12)
+ - [ ] 個々のDP問題のリスト(それぞれ短い):
+ [動的プログラミング(動画)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+ - [ ] イェール講義ノート:
+ - [ ] [動的プログラミング](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicプログラミング)
+ - [ ] Coursera:
+ - [ ] [RNA二次構造の問題(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem)
+ - [ ] [動的プログラミングのアルゴリズム(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm)
+ - [ ] [DPアルゴリズムの説明(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm)
+ - [ ] [DPアルゴリズムの実行時間(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm)
+ - [ ] [[DP Vs 再帰的実装(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation)
+ - [ ] [グローバル対配列アライメント(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
+ - [ ] [ローカル対配列アライメント(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
+
+- ### オブジェクト指向プログラミング
+ - [ ] [オプション:UML 2.0シリーズ(動画)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
+ - [ ] オブジェクト指向ソフトウェアエンジニアリング:UMLとJavaを使ったソフトウェア開発(21ビデオ):
+ - OOとOOの設計方法を十分に理解している場合は、これをスキップできます。
+ - [OOSE:UMLとJavaを使用したソフトウェア開発](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] SOLID OOP原則:
+ - [ ] [Bob Martin SOLIDオブジェクト指向とアジャイルデザインの原則(ビデオ)](https://www.youtube.com/watch?v=TMuno5RZNeE)
+ - [ ] [SOLID原則(ビデオ)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
+ - [ ] S - [単一責任の原則](http://www.oodesign.com/single-responsibility-principle.html)| [各オブジェクトへの単一責任](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
+ - [もっと味](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
+ - [ ] O - [オープン/クローズの原則l](http://www.oodesign.com/open-close-principle.html)| [プロダクションレベルではオブジェクトは拡張の準備ができていますが、変更はできません](https://en.wikipedia.org/wiki/Open/closed_principle)
+ - [もっと風味](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
+ - [ ] L - [リスコフの置換原則](http://www.oodesign.com/liskov-s-substitution-principle.html)| [基本クラスと派生クラスは `IS A`プリンシパルに従います](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
+ - [もっと風味](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=ja)
+ - [ ] I - [インタフェース分離の原則](http://www.oodesign.com/interface-segregation-principle.html)|クライアントは、使用しないインタフェースを強制的に実装するべきではありません
+ - [インタフェース分離の原則5分(ビデオ)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
+ - [もっと味](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=ja)
+ - [ ] D - [依存性逆転の原則(http://www.oodesign.com/dependency-inversion-principle.html)|オブジェクトの構成における依存関係を減らす。
+ - なぜ依存関係の逆転の原則とそれが重要なのか(http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
+ - [もっと味](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=ja)
+
+- ### デザインパターン
+ - [ ] [クイックUMLレビュー(ビデオ)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
+ - [ ] これらのパターンを学ぶ:
+ - [ ] Strategy(戦略)
+ - [ ] Singleton(単一要素)
+ - [ ] Adapter(アダプタ)
+ - [ ] Prototype(原型)
+ - [ ] Decorator(装飾者)
+ - [ ] Visitor(訪問者)
+ - [ ] Factory,AbstractFactory(工場、抽象工場)
+ - [ ] Facade(外見)
+ - [ ] Observer(観察者)
+ - [ ] Proxy(代理)
+ - [ ] Delegate(委任)
+ - [ ] Command(命令)
+ - [ ] State(状態)
+ - [ ] Memento(記念品)
+ - [ ] Iterator(イテレータ)
+ - [ ] Composite(合成)
+ - [ ] Flyweight(フライ級)
+ - [ ] [第6章(パート1) - パターン(ビデオ)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
+ - [ ] [第6章(パート2) - 抽象化 - 発生、一般階層、プレーヤーロール、シングルトン、オブザーバー、代表団(ビデオ)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [第6章(パート3) - アダプタ、ファサード、変更不可、読み取り専用インターフェイス、プロキシ(ビデオ)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [ビデオシリーズ(27ビデオ)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
+ - [ ] [ヘッドファーストデザインパターン](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
+ - 正式な本は「デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素」であることは分かっていますが、ヘッドファーストはOOの初心者には最適です。
+ - [ ] [参考:開発者のための101のデザインパターンとヒント](https://sourcemaking.com/design-patterns-and-tips)
+ - [ ] [人間のデザインパターン](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns)
+
+
+- ### 組み合わせ(nCk)と確率
+ - [ ] [数学のスキル:階乗、順列、組み合わせの見つけ方(選択)(ビデオ)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
+ - [ ] [学校を作る:確率(ビデオ)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
+ - [ ] [学校を作る:確率とマルコフ連鎖(ビデオ)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
+ - [ ] Khan Academy:
+ - コースのレイアウト:
+ - [ ] [基本理論的確率](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic)
+ - ちょうどビデオ - 41(それぞれ単純で、それぞれ短いです):
+ - [ ] [確率の説明(ビデオ)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
+- ### NP、NP-完全/近似アルゴリズム
+ - 巡回セールスマン問題やナップザック問題など、NP完全問題の最も有名なクラスについて知りましょう。
+ そうすれば面接官がこれらについて偽装して尋ねるとき、それらを認識することができます。
+ - NP完全の意味を知る。
+ - [ ] [計算上の複雑さ(ビデオ)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23)
+ - [ ] Simonson:
+ - [ ] [貪欲アルゴリズム。 II&NP完全性へのイントロ(ビデオ)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939)
+ - [ ] [NP完全性II&リダクション(ビデオ)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [NP完全性III(ビデオ)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [NP完全性IV(ビデオ)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18)
+ - [ ] スキナ:
+ - [ ] [CSE373 2012 - 講義23 - NP完全性の紹介(ビデオ)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508)
+ - [ ] [CSE373 2012 - 講義24 - NP完全性の証明(ビデオ)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - 講演25 - NP完全性への挑戦(ビデオ)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [複雑さ:P、NP、NP完全性、削減(ビデオ)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22)
+ - [ ] [複雑さ:近似アルゴリズム(ビデオ)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24)
+ - [ ] [複雑さ:固定パラメータアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - ピーター・ノヴィグ(Peter Norvig)は、セールスマンの問題を解決するための最適なソリューションについて説明しています。
+ - [JupyterNotebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb)
+ - あなたが持っているなら、CLRSの1048 - 1140ページ。
+
+- ### キャッシュ
+ - [ ] LRUキャッシュ:
+ - [ ] [LRUキャッシュの魔法(Google Devの100日間)(ビデオ)](https://www.youtube.com/watch?v=R5ON3iwx78M)
+ - [ ] [LRU(ビデオ)の実装](https://www.youtube.com/watch?v=bq6N7Ym81iI)
+ - [ ] [LeetCode - 146 LRU Cache(C ++)(video)](https://www.youtube.com/watch?v=8-FZRAjR7qU)
+ - [ ] CPUキャッシュ:
+ - [ ] [MIT 6.004 L15:メモリ階層(ビデオ)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24)
+ - [ ] [MIT 6.004 L16:キャッシュの問題(動画)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+
+- ### プロセスとスレッド
+ - [ ] コンピュータサイエンス162 - オペレーティングシステム(25ビデオ):
+ - プロセスとスレッドのためのビデオ表示1-11
+ - [オペレーティングシステムとシステムプログラミング(ビデオ)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
+ - [プロセスとスレッドの違いは何ですか?](https://www.quora.com/What-is-the-difference-between-a-process-and-thread)
+ - カバー:
+ - プロセス、スレッド、並行性の問題
+ - プロセスとスレッドの違い
+ - プロセス
+ - スレッド
+ - ロック
+ - ミューテックス
+ - セマフォ
+ - モニタ(同期)
+ - 彼らの動作の仕方
+ - デッドロック
+ - ライブロック
+ - CPUの動作、割り込み、コンテキストの切り替え
+ - マルチコアプロセッサを使用した最新の並行構成
+ - [ページング、セグメンテーション、仮想メモリ(動画)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2)
+ - [割り込み(動画)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3)
+ - [スケジューリング(動画)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8)
+ - プロセスリソースのニーズ(メモリ:コード、静的ストレージ、スタック、ヒープ、ファイル記述子、I/O)
+ - スレッドリソースの必要性(同じプロセス内の他のスレッドとの上の(マイナススタック)の共有、それぞれが独自のpc、スタックカウンタ、レジスタ、およびスタックを持つ)
+ - フォークは、新しいプロセスがメモリに書き込むまで、実際には書き込み時にコピー(読み取り専用)され、次に完全なコピーを行います。
+ - コンテキストスイッチ
+ - オペレーティングシステムとその基盤となるハードウェアによってコンテキスト切り替えが開始される仕組み
+ - [ ] [C++のスレッド(シリーズ - 10ビデオ)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M)
+ - [ ] Pythonでの並行性(ビデオ):
+ - [ ] [スレッドに関する短いシリーズ](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1)
+ - [ ] [Pythonスレッド](https://www.youtube.com/watch?v=Bs7vPNbB9JM)
+ - [ ] [Python GIL(2010)について理解する](https://www.youtube.com/watch?v=Obt-vMVdM8s)
+ - [参考文献](http://www.dabeaz.com/GIL)
+ - [ ] [David Beazley - 地上からのPython並行処理:LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4)
+ - [ ] [基調講演David Beazley - 興味のあるトピック(Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU)
+ - [ ] [Pythonのミューテックス](https://www.youtube.com/watch?v=0zaPs8OtyKY)
+
+- ### 論文
+ - 完全に理解した上ですべてを読むことは、あなたが持っているより多くの時間がかかるでしょう。私は論文とそのセクションを選択することをお勧めします。
+ - [古典的な論文を愛する?](https://www.cs.cmu.edu/~crary/819-f09/)
+ - [ ] [1978:順次プロセスの通信](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
+ - [Goで実装](https://godoc.org/github.com/thomas11/csp)
+ - [ ] [2003:The Googleファイルシステム](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
+ - 2012年に巨像に置き換えられました
+ - [ ] [2004:MapReduce:大規模クラスタでのデータ処理の簡略化](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
+ - 主にCloud Dataflowに置き換えられましたか?
+ - [ ] [2006:Bigtable:構造化データ用分散ストレージシステム](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
+ - [Google BigQueryの内部を見る](https://cloud.google.com/files/BigQueryTechnicalWP.pdf)
+ - [ ] [2006:疎結合分散システムのChubby Lockサービス](https://research.google.com/archive/chubby-osdi06.pdf)
+ - [ ] [2007:Dynamo:Amazonの高可用性 key valueストア](https://www.akkadia.org/drepper/cpumemory.pdf)
+ - Dynamo紙がNoSQL革命を開始
+ - すべてのプログラマーがメモリについて知っておくべきこと(非常に長く、著者はいくつかのセクションのスキップを奨励する)](https://www.akkadia.org/drepper/cpumemory.pdf)
+ - [ ] [2010:Dapper、大規模分散システム追跡基盤](https://research.google.com/pubs/archive/36356.pdf)
+ - [ ] [2010:Dremel:Web-Scaleデータセットのインタラクティブ解析](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf)
+ - [ ] [2012:Googleの巨像](https://www.wired.com/2012/07/google-colossus/)
+ - 論文がありません
+ - [ ] 2012:AddressSanitizer:高速アドレス整合性チェッカー:
+ - [論文](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
+ - [ビデオ](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
+ - [ ] 2013:スパナ:Googleのグローバル分散データベース:
+ - [論文](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
+ - [ビデオ](https://www.usenix.org/node/170855)
+ - [ ] [2014年:機械学習:技術的負債の高利貸しクレジットカード](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
+ - [ ] [2015:Googleの継続的なパイプライン](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
+ - [ ] [2015年:大規模な高可用性:Googleの広告用データ基盤の構築](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
+ - [ ] [2015:TensorFlow:異種分散システムの大規模機械学習](http://download.tensorflow.org/paper/whitepaper2015.pdf)
+ - [ ] [2015年:開発者がコードを検索する方法:ケーススタディ](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
+ - [ ] [2016:Borg、Omega、Kubernetes](http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/44843.pdf)
+
+- ### テスト
+ - カバーするために:
+ - ユニット(単体)テストの仕組み
+ - モックオブジェクトとは何ですか?
+ - 統合テストとは
+ - 依存性注入とは
+ - [ ] [James Bachによるアジャイルソフトウェアテスト(ビデオ)](https://www.youtube.com/watch?v=SAhJf36_u5U)
+ - [ ] [ジェイムス・バッハによるソフトウェアテストの公開講座(ビデオ)](https://www.youtube.com/watch?v=ILkT_HV9DVU)
+ - [ ] [Steve Freeman - テスト駆動開発(これは私たちが意味するものではありません)(ビデオ)](https://vimeo.com/83960706)
+ - [スライド](http://goocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf)
+ - [ ] [TDDは死んでいます。長いライブテスト。](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html)
+ - [ ] [TDDは死んでいますか? (ビデオ)](https://www.youtube.com/watch?v=z9quxZsLcfo)
+ - [ ] [ビデオシリーズ(152ビデオ) - すべてではない(ビデオ)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g)
+ - [ ] [Pythonでテスト駆動型Web開発](http://www.obeythetestinggoat.com/pages/book.html#toc)
+ - [ ] 依存性注入:
+ - [ ] [動画](https://www.youtube.com/watch?v=IKD2-MAkXyQ)
+ - [ ] [テストのタオ](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html)
+ - [ ] [テストの書き方](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html)
+
+- ### スケジューリング
+ - OSで、どのように動作するか
+ - オペレーティングシステムのビデオから収集できます
+
+- ### システムルーチンを実装する
+ - 使用するプログラミングAPIの下にあるものを理解する
+ あなたはそれらを実装できますか?
+
+- ### 文字列の検索と操作
+ - [ ] [Sedgewick - 接尾辞配列(ビデオ)](https://www.youtube.com/watch?v=HKPrVm5FWvg)
+ - [ ] [Sedgewick - サブストリング(文字列の一部)検索(動画)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5)
+ - [ ] [1. サブストリング検索の紹介](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5)
+ - [ ] [2. ブルートフォースサブストリング検索](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4)
+ - [ ] [3. クヌース・モーリス・プラット法](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
+ - [ ] [4. ボイヤー-ムーア文字列検索アルゴリズム](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2)
+ - [ ] [5. ラビン-カープ文字列検索アルゴリズム](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
+ - [ ] [テキストの検索パターン(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
+
+ このテーマについてさらに詳しく知りたい場合は、[いくつかの科目の追加の詳細]の「文字列のマッチング」の項を参照してください(#additional-detail-on-some-subjects)
+
+- ### トライ木
+ - さまざまなトライ木があることに注意してください。いくつかは接頭辞を持ち、あるものはパスを追跡するビットの代わりに文字列を使用します。
+ - 私はコードを読んだが、実装しないだろう。
+ - [ ] [Sedgewick - 試してみる(3ビデオ)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
+ - [ ] [1. R Way トライ木](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
+ - [ ] [2. 3分探索木](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
+ - [ ] [3. キャラクターベースの操作](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1)
+ - [ ] [データ構造とプログラミング手法に関する注記](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries)
+ - [ ] 短期コースビデオ:
+ - [ ] [トライ木の紹介(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries)
+ - [ ] [トライ木のパフォーマンス(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries)
+ - [ ] [トライ木の実装ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie)
+ - [ ] [Trie:無視されたデータ構造](https://www.toptal.com/java/the-trie-a-neglected-data-structure)
+ - [ ] [TopCoder - トライ木の使用](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/)
+ - [ ] [スタンフォード講演(現実世界のユースケース)(ビデオ)](https://www.youtube.com/watch?v=TJ8SkcUSdbU)
+ - [ ] [MIT、高度なデータ構造、文字列(途中でかなり不明瞭になることがあります)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+
+- ### 浮動小数点数
+ - [ ] 単純な8ビット:[浮動小数点数の表現 - 1(ビデオ - 計算にエラーがあります - ビデオの説明を参照)](https://www.youtube.com/watch?v=ji3SfClm8TU)
+ - [ ] 32ビット:[IEEE754 32ビット浮動小数点バイナリ(ビデオ)](https://www.youtube.com/watch?v=50ZYcZebIec)
+
+- ### Unicode
+ - [ ] [すべてのソフトウェア開発者が絶対に最低限必要とする、絶対にUnicodeと文字セットについて熟知していること](http://www.joelonsoftware.com/articles/Unicode.html)
+ - [ ] [すべてのプログラマーが、エンコーディングと文字セットについて知る必要があることは間違いない](http://kunststube.net/encoding/)
+
+- ### バイト順(エンディアン)
+ - [ ] [ビッグエンディアンとリトルエンディアン](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html)
+ - [ ] [ビッグエンディアン Vs リトルエンディアン(ビデオ)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
+ - [ ] [ビッグエンディアンとリトルエンディアンの イン/アウト(ビデオ)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
+ - カーネル開発者のための非常に技術的な話。ほとんどがあなたの頭の上にある場合は心配しないでください。
+ - 前半で十分です。
+
+- ### ネットワーキング
+ - **ネットワーク経験がある、またはシステムエンジニアになりたい場合は、質問を期待してください**
+ - そうでなければ、これは知っているだけでいいです
+ - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro)
+ - [ ] [UDPとTCP:トランスポートプロトコルの比較](https://www.youtube.com/watch?v=Vdc8TCESIg8)
+ - [[TCP / IPとOSIモデルの説明!](https://www.youtube.com/watch?v=e5DEVa9eSN0)
+ - [ ] [インターネット経由のパケット伝送。ネットワーク&TCP / IPチュートリアル](https://www.youtube.com/watch?v=nomyRJehhnM)
+ - [ ] [HTTP](https://www.youtube.com/watch?v=WGJrLqtX7As)
+ - [ ] [SSLとHTTPS](https://www.youtube.com/watch?v=S2iBR2ZlZf0)
+ - [ ] [SSL / TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM)
+ - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8)
+ - [ ] [ビデオシリーズ(21ビデオ)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IggfoqO4iPnPYQui46QqT0j)
+ - [ ] [詳解サブネット化 - 第5部CIDR表記](https://www.youtube.com/watch?v=t5xYI0jzOf4)
+ - [ ] ソケット:
+ - [ ] [Java - Sockets - Introduction(video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s)
+ - [ ] [ソケットプログラミング(ビデオ)](https://www.youtube.com/watch?v=G75vN2mnJeQ)
+
+## システム設計、スケーラビリティ、データ処理
+- **4年以上の経験があれば、システム設計の質問を期待できます。**
+- スケーラビリティとシステム設計は、多くのトピックとリソースを持つ非常に大きなトピックです。
+ スケーラビリティ(拡張可能)なソフトウェア/ハードウェアシステムを設計する際には、考慮すべき点がたくさんあります。
+ これにかなりの時間を費やすことを期待してください。
+- 考慮事項:
+ - スケーラビリティ
+ - 大きなデータセットを単一の値に変換する
+ - あるデータセットを別のデータセットに変換する
+ - 莫大な量のデータを扱う
+ - システム設計
+ - 機能セット
+ - インターフェース
+ - クラス階層
+ - 一定の制約の下でシステムを設計する
+ - シンプルさと丈夫さ
+ - トレードオフ
+ - パフォーマンス分析と最適化
+
+- [ ] **ここをクリック**:[システム設計入門](https://github.com/donnemartin/system-design-primer)
+- [ ] [HiredInTechのシステム設計](http://www.hiredintech.com/system-design/)
+- [ ] [技術面接で設計質問に答えるための準備方法](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023)
+- [ ] [システムデザイン面接の前に知っておくべき8つの事柄](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/)
+- [ ] [アルゴリズム設計](http://www.hiredintech.com/algorithm-design/)
+- [ ] [データベースの正規化 - 1NF、2NF、3NF、4NF(ビデオ)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
+- [ ] [システム設計の面接](https://github.com/checkcheckzz/system-design-interview) - この中には多くのリソースがあります。記事や例を見てください。私はそれらのいくつかを下に置いた。
+- [ ] [システム設計面接の方法](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
+- [ ] [誰もが知っておくべき数字](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/)
+- [ ] [コンテキストスイッチを作るのにどれくらい時間がかかりますか?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
+- [ ] [データセンター間の取引(動画)](https://www.youtube.com/watch?v=srOgpXECblk)
+- [ ] [CAP定理の簡単な英語入門](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
+- [ ] Paxosアルゴリズム:
+ - [短い動画](https://www.youtube.com/watch?v=s8JqcZtvnsM)
+ - [ユースケースとマルチパクソスによる拡張動画](https://www.youtube.com/watch?v=JEpsBg0AO6o)
+ - [論文](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)
+- [ ] [コンシステントハッシュ法](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
+- [NoSQLパターン](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
+
+- [ ] スケーラビリティ:
+ - [ ] [概要(動画)](https://www.youtube.com/watch?v=-W9F__D3oY4)
+ - [ ] 短いシリーズ:
+ - [クローン](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
+ - [データベース](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database)
+ - [キャッシュ](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache)
+ - [非同期](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism)
+ - [ ] [スケーラブルなWebアーキテクチャと分散システム](http://www.aosabook.org/ja/distsys.html)
+ - [ ] [分散コンピューティングの説明の誤り](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf)
+ - [ ] [実用的なプログラミングテクニック](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html)
+ - [extra:Google Pregel グラフ処理](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html)
+ - [ ] [Jeff Dean - Googleのソフトウェアシステム構築と教訓(ビデオ)](https://www.youtube.com/watch?v=modXC5IWTJI)
+ - [ ] [スケールのための設計システムの紹介](http://lethain.com/introduction-to-architecting-systems-for-scale/)
+ - [ ] [App EngineとCloud Datastoreを使用してモバイルゲームを世界中の視聴者に拡大(ビデオ)](https://www.youtube.com/watch?v=9nWyWwY2Onc)
+ - [ ] [Googleがプラネットスケールのインフラのプラネットスケールエンジニアリングを行う仕組み](https://www.youtube.com/watch?v=H4vMcD7zKM0)
+ - [ ] [アルゴリズムの重要性](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/)
+ - [ ] [シャーディング](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html)
+ - [ ] [Facebook(2009)でスケール](https://www.infoq.com/presentations/Scale-at-Facebook)
+ - [ ] [Facebook(2012年)、「10億ユーザー向けビルド(ビデオ)」](https://www.youtube.com/watch?v=oodS71YtkGU)
+ - [ ] [ロングゲームのためのエンジニアリング - Astrid Atkinson Keynote(ビデオ)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4)
+ - [ ] [7年間のYouTubeスケーラビリティレッスン30分](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html )
+ - [動画](https://www.youtube.com/watch?v=G-lGCC4KKok)
+ - [ ] [ペイパルが毎日何十億ものトランザクションにスケーリングされる方法(8VMだけを使用)](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html)
+ - [ ] [大きなデータセットで重複を削除する方法](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/)
+ - [ ] [Jon CowieによるEtsyのスケールとエンジニアリング文化の中の一見(ビデオ)](https://www.youtube.com/watch?v=3vV4YiqKm1o)
+ - [ ] [Amazonは独自のマイクロサービスアーキテクチャをどのように導いたか](http://thenewstack.io/led-amazon-microservices-architecture/)
+ - [ ] [圧縮するか圧縮しないか、それはUberの質問でした](https://eng.uber.com/trip-data-squeeze/)
+ - [ ] [Tarantoolの非同期キュー、キューに入れる](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html)
+ - [ ] [おおよそのクエリ処理を使用するタイミング](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
+
+ - [ ] [単一のデータセンターからフェイルオーバーするための、Googleのネイティブマルチホームアーキテクチャへの移行](http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
+ - [ ] [スパナ](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
+ - [ ] [Egnyteアーキテクチャ:マルチペタバイト分散システムの構築とスケーリングの教訓](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html)
+ - [ ] [機械学習駆動プログラミング:新しい世界のための新しいプログラミング](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
+ - [ ] [1日あたり何百万ものリクエストを処理する画像最適化技術](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
+ - [ ] [Patreonのアーキテクチャの概要](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
+ - [ ] [Tinder:どのようにして最大のレコメンデーションエンジンの誰があなたが次に誰を見るか決定する?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html)
+ - [ ] [現代のキャッシュのデザイン](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html)
+ - [ ] [Facebookのスケールでライブビデオストリーミング](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
+ - [ ] [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) )
+ - [ ] [レイテンシはどこにでもあり、それはあなたのセールスに費やされます - それを粉砕する方法](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) )
+ - [ ] [アーキテクチャ - 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) )
+ - [ ] [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:
+ - [O`Reilly MySQL CE 2011:Jeremy Cole、「@Twitterの大小データ」(ビデオ)](https://www.youtube.com/watch?v=5cKTP36HVgI)
+ - [スケール時のタイムライン](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
+ - さらに詳しくは、[ビデオシリーズ](ビデオシリーズ)セクションの「Mining Massive Datasets」ビデオシリーズを参照してください。
+
+- [ ] システム設計プロセスの練習:紙で作業しようとするいくつかのアイデアがあります。実際にどのように処理されたかについてのいくつかの文書があります。
+ - レビュー:[システム設計入門](https://github.com/donnemartin/system-design-primer)
+ - [HiredInTechのシステム設計](http://www.hiredintech.com/system-design/)
+ - [チートシート](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
+ - 流れ:
+ 1. 問題と範囲を理解する:
+ - 面接官の助けを借りてユースケースを定義する
+ - 追加の機能を提案する
+ - 面接官が範囲外とみなすアイテムを削除する
+ - 高可用性が必要と仮定し、ユースケースとして追加する
+ 2. 制約について考える:
+ - 毎月のリクエスト数を尋ねる
+ - 毎秒どれくらいのリクエストをするか(彼らはボランティアでもよいし、あなたに数学をさせるかもしれない)
+ - 読み込みと書き込みの割合を見積もります
+ - 推定時に80/20ルールを守って下さい
+ - 1秒あたりに書き込まれるデータの量
+ - 5年間に必要な合計ストレージ
+ - 毎秒読み取られるデータの量
+ 3. 抽象的なデザイン:
+ - レイヤー(サービス、データ、キャッシング)
+ - インフラストラクチャ:負荷分散、メッセージング
+ - サービスを駆動する主要なアルゴリズムの概要
+ - ボトルネックを考慮し、解決策を決定する
+ - 演習:
+ - [CDNネットワークの設計:古い記事](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci)
+ - [ランダムなID生成システムの設計](https://blog.twitter.com/2010/announcing-snowflake)
+ - [オンラインマルチプレイヤーカードゲームのデザイン](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html)
+ - [Key-Valueデータベースの設計](http://www.slideshare.net/dvirsky/introduction-to-redis)
+ - [画像共有システムの設計](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html)
+ - [推薦システムの設計](http://ijcai13.org/files/tutorial_slides/td3.pdf)
+ - [URL短縮システムの設計:上からコピー](http://www.hiredintech.com/system-design/the-system-design-process/)
+ - [キャッシュシステムの設計](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/)
+
+---
+
+## 最終レビュー
+
+ このセクションでは、重要な概念のほとんどを見直すためにかなり短いビデオを見ることができます。
+ あなたが頻繁に再学習をしたいならいいですね。
+
+- [ ] 2〜3分短編ビデオシリーズ(23ビデオ)
+ - [動画](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22)
+- [ ] 2〜5分の短編シリーズビデオ - Michael Sambol(18ビデオ)
+ - [動画](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ)
+- [ ] [Sedgewick Videos - アルゴリズムI](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd)
+ - [ ] [01.Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t)
+ - [ ] [02.アルゴリズムの分析](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0)
+ - [ ] [03.スタックとキュー](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh)
+ - [ ] [04.初級ソート](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd)
+ - [ ] [05. マージソート](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+ - [ ] [06. クイックソート](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [07.優先度つきキュー](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5)
+ - [ ] [08. 基本記号表](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG)
+ - [ ] [09. 平衡探索木](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu)
+ - [ ] [10. BSTの幾何学的応用](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx)
+ - [ ] [11.ハッシュテーブル](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11)
+- [ ] [Sedgewick Videos - アルゴリズムII](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50)
+ - [ ] [01.無向グラフ](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM)
+ - [ ] [02. 有向グラフ](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K)
+ - [ ] [03.最小スパニング木](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj)
+ - [ ] [04.最短経路](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD)
+ - [ ] [05.最大フロー](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma)
+ - [ ] [06.基数ソート](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
+ - [ ] [07.トライ木](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
+ - [ ] [08.部分文字列検索](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
+ - [ ] [09.正規表現](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh)
+ - [ ] [10.データ圧縮](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ)
+ - [ ] [11.リダクション](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF)
+ - [ ] [12.線形プログラミング](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1)
+ - [ ] [13.難易度](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S)
+
+---
+
+## コーディングの質問練習
+
+上のすべてのコンピュータサイエンスのトピックを知ったので、コーディングの問題に答える練習をしましょう。
+
+**コーディング質問の練習は、プログラミング問題への回答を記憶することではありません。**
+
+プログラミングの問題を練習する必要がある理由
+- 問題の認識、そして適切なデータ構造とアルゴリズムの適合
+- 問題のための要件を集める
+- 面接であなたのように問題をあなたの方法で話している
+- コンピュータではなく、ホワイトボードや紙でのコーディング
+- ソリューションの時間と空間の複雑さが増す
+- ソリューションのテスト
+
+面接では、体系的でコミュニケーション的な問題解決の素晴らしいイントロがあります。あなたはプログラミングの面接の本からもこれを手に入れるでしょうが、私はこの優れた発見しました:
+[アルゴリズム設計キャンバス](http://www.hiredintech.com/algorithm-design/)
+
+自宅にホワイトボードはありませんか?それは理にかなっている。私は変わった人で、大きなホワイトボードを持っています。ホワイトボードの代わりに、
+アートストアから大きなドローイングパッドを拾い上げます。あなたはソファに座って練習することができます。これが私の「ソファホワイトボード」です。
+私はスケールの写真にペンを追加しました。ペンを使うと、あなたは消すことができます。すぐに厄介になる。
+
+![私のソファホワイトボード](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg)
+
+補足:
+
+- [Topcodersの数学](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/)
+- [動的プログラミング - 初心者から上級者まで](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/)
+- [MIT面接資料](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php)
+- [特定の言語でより良くなるための練習](http://exercism.io/languages)
+
+**プログラミングの問題を読んでやる(この順番で):**
+
+- [ ] [プログラミング面接公開:あなたが次の仕事に着任する秘訣、第2版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
+ - C、C ++、Javaの回答
+- [ ] [コーディング面接をクラッキング、第6版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
+ - Javaでの回答
+
+[上記のブックリスト](#ブックリスト)を参照してください
+
+## コード演習/挑戦
+
+あなたの脳を学んだら、脳を働かせてください。
+できるだけ多く、毎日コーディングの課題に取り組んでください。
+
+- [ ] [解決策を見つける方法](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/)
+- [ ] [Topcoderの問題を解読する方法](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/)
+
+コーディング面接質問ビデオ:
+- [IDeserve(88ビデオ)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
+- [Tushar Roy(5プレイリスト)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
+
+チャレンジサイト:
+- [LeetCode](https://leetcode.com/)
+- [TopCoder](https://www.topcoder.com/)
+- [プロジェクトオイラー(Math-focused)](https://projecteuler.net/index.php?section=problems)
+- [コードワード](http://www.codewars.com)
+- [HackerEarth](https://www.hackerearth.com/)
+- [HackerRank](https://www.hackerrank.com/)
+- [Codility](https://codility.com/programmers/)
+- [InterviewCake](https://www.interviewcake.com/)
+- [Geeks for Geeks](http://www.geeksforgeeks.org/)
+- [InterviewBit](https://www.interviewbit.com/invite/icjf)
+- [Sphere(Sphere)](http://www.spoj.com/)
+
+チャレンジレポ:
+- [Pythonでインタラクティブなコーディング面接の課題](https://github.com/donnemartin/interactive-coding-challenges)
+
+疑似面接:
+- [Gainlo.co:大企業の疑似面接官](http://www.gainlo.co/)
+- [Pramp:仲間との面接](https://www.pramp.com/)
+- [Refdash:疑似面接](https://refdash.com/)
+
+## 面接に近づいたら
+
+- [ ] クラッキングコーディング面接セット2(ビデオ):
+ - [コード面接をクラッキングする](https://www.youtube.com/watch?v=4NIb9l3imAo)
+ - [コード面接をクラックする - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo)
+
+## あなたの履歴書
+
+- クラッキングでの準備項目の再開を参照してください。コーディング面接とプログラミング面接の公開
+
+
+## 面接が来たときに考えてください
+
+あなたが得る20の面接の質問と、以下の項目の行を考えてみましょう。
+それぞれ2-3の答えがあります。
+あなたが達成したことについての物語だけでなく、データを持ってください。
+
+- なぜあなたはこの仕事をしたいです?
+- あなたが解決した厳しい問題は何ですか?
+- 最大の課題に直面した?
+- ベスト/最悪のデザインが見られる?
+- 既存の製品を改善するためのアイデア。
+- 個人として、そしてチームの一員として、どのようにベストを尽くしていますか?
+- あなたのスキルや経験のうち、その役割の資産とその理由は?
+- [job x / project y]で一番楽しかったことは何ですか?
+- [job x / project y]に直面した最大の課題は何ですか?
+- [job x / project y]で直面した最も難しいバグは何でしたか?
+- [job x / project y]で何を学びましたか?
+- あなたは[job x / project y]で何を良くしていますか?
+
+## 面接官に質問があります
+
+ 私の中には(私は既に知っているかもしれませんが、彼らの意見やチームの視点が必要です):
+
+あなたのチームはどれくらいの規模ですか?
+- あなたの開発サイクルはどのように見えるのですか?あなたはウォーターフォール/スプリント/アジャイルをしますか?
+- 締め切りまでのフローは共通ですか?それとも柔軟性はありますか?
+- あなたのチームではどのように意思決定が行われますか?
+- 週に何回会議がありますか?
+- あなたの仕事環境が集中するのに役立つと思いますか?
+- 何をしているの?
+- それについて何が好きですか?
+- 仕事の生活はどうですか?
+
+## 一度あなたは仕事を得た
+
+おめでとう!
+
+学び続けます。
+
+あなたは決して本当に終わらない。
+
+---
+
+ *************************************************** *************************************************** *
+ *************************************************** *************************************************** *
+
+ この点以下のものはすべてオプションです。
+ これらを勉強することで、より多くのCSコンセプトにさらされることになります。
+ 任意のソフトウェアエンジニアリングジョブ。あなたはもっと豊富なソフトウェアエンジニアになるでしょう。
+
+ *************************************************** *************************************************** *
+ *************************************************** *************************************************** *
+
+---
+
+
+## その他の書籍
+
+- [ ] [Unixプログラミング環境](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=情報)
+ - 古き良き時代
+- [ ] [Linuxコマンドライン:完全な紹介](https://www.amazon.com/dp/1593273894/)
+ - 現代的な選択肢
+- [ ] [TCP / IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
+- [ ] [ヘッドファーストデザインパターン](https://www.amazon.com/gp/product/0596007124/)
+ - デザインパターンへの穏やかな紹介
+- [ ] [デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
+ - 別名「Gang Of Four」の本、またはGOF
+ - 正式なデザインパターンの本
+- [ ] [UNIXおよびLinuxシステム管理ハンドブック、第4版](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/)
+
+## その他の学習
+
+これらの話題は面接では出てこないかもしれませんが、
+特定のテクノロジとアルゴリズムを認識するためには、より大きなツールボックスが必要になります。
+
+- ### コンパイラ
+ - [ ] [1分でコンパイラがどのように動作するか(ビデオ)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
+ - [ ] [Harvard CS50 - コンパイラ(ビデオ)](https://www.youtube.com/watch?v=CSZLNYF4Klo)
+ - [ ] [C ++(video)](https://www.youtube.com/watch?v=twodd1KFfGk)
+ - [ ] [コンパイラの最適化について(C ++)(ビデオ)](https://www.youtube.com/watch?v=FnGCDLhaxKU)
+
+- ### Emacsとvi(m)
+ - UNIXベースのコードエディタに慣れましょう
+ - vi(m):
+ - [vim 01での編集 - インストール、設定、およびモード(ビデオ)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr)
+ - [VIM Adventures](http://vim-adventures.com/)
+ - 4ビデオのセット:
+ - [vi / vimエディタ - レッスン1](https://www.youtube.com/watch?v=SI8TeVMX8pk)
+ - [vi / vimエディタ - レッスン2](https://www.youtube.com/watch?v=F3OO7ZIOaJE)
+ - [vi / vimエディター - レッスン3](https://www.youtube.com/watch?v=ZYEccA_nMaI)
+ - [vi / vimエディタ - レッスン4](https://www.youtube.com/watch?v=1lYD5gwgZIA)
+ - [Emacsの代わりにViを使う](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs)
+ - emacs:
+ - [基本Emacsチュートリアル(ビデオ)](https://www.youtube.com/watch?v=hbmV1bnQ-i0)
+ - 3つのセット(ビデオ):
+ - [Emacsチュートリアル(初心者向け) - 第1部 - ファイルコマンド、カット/コピー/ペースト、カーソルコマンド](https://www.youtube.com/watch?v=ujODL7MD04Q)
+ - [Emacsチュートリアル(初心者向け) - パート2 - バッファ管理、検索、M-grep、rgrepモード](https://www.youtube.com/watch?v=XWpsRupJ4II)
+ - [Emacsチュートリアル(初心者) - 第3章式、ステートメント、〜/ .emacsファイルとパッケージ](https://www.youtube.com/watch?v=paSgzPso-yc)
+ - [邪悪なモード:または、私がEmacsを気絶させ、愛する方法(動画)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc)
+ - [EmacsでCプログラムを書く](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs)
+ - [(多分)組織モードの詳細:構造の管理(ビデオ)](https://www.youtube.com/watch?v=nsGYet02bEk)
+
+- ### Unixコマンドラインツール
+ - 私は良いツールから下のリストに記入しました。
+ - [ ] bash
+ - [ ] cat
+ - [ ] grep
+ - [ ] sed
+ - [ ] awk
+ - [ ] カールまたはwget
+ - [ ] ソート
+ - [ ] tr
+ - [ ] uniq
+ - [ ] [strace](https://en.wikipedia.org/wiki/Strace)
+ - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/)
+
+- ### 情報理論(ビデオ)
+ - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory)
+ - [ ] Markovプロセスの詳細:
+ - [ ] [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
+ - [ ] [Markov Text Generationを実装するコア](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
+ - [ ] [プロジェクト=マルコフテキスト生成ウォークスルー](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walkthroughs)
+ - 下記のMIT 6.050J Information and Entropyシリーズを参照してください。
+
+- ### パリティ&ハミングコード(ビデオ)
+ - [ ] [イントロ](https://www.youtube.com/watch?v=q-3BctoUpHE)
+ - [ ] [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M)
+ - [ ] ハミングコード:
+ - [エラー検出](https://www.youtube.com/watch?v=1A_NcXxdoCc)
+ - [エラー修正](https://www.youtube.com/watch?v=JAMLuxdHH8o)
+ - [ ] [エラーチェック](https://www.youtube.com/watch?v=wbH2VxzmoZk)
+
+- ## #エントロピー
+ - 下記の動画もご覧ください
+ - 最初に情報理論ビデオを見てください
+ - [情報理論、Claude Shannon、エントロピー、冗長性、データ圧縮およびビット(ビデオ)](https://youtu.be/JnJq3Py0dyM?t=176)
+
+- ### 暗号化
+ - 下記の動画もご覧ください
+ - 最初に情報理論ビデオを見てください
+ - [ ] [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
+ - [ ] [暗号化:ハッシュ関数](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
+ - [ ] [暗号化:暗号化](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+- ### 圧縮
+ - 最初に情報理論ビデオを見てください
+ - [ ] Computerphile(ビデオ):
+ - [ ] [圧縮](https://www.youtube.com/watch?v=Lto-ajuqW3w)
+ - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko)
+ - [ ] [上向きの木(ハフマン木)](https://www.youtube.com/watch?v=umTbivyJoiI)
+ - [ ] [エキストラビット/ TRITS - ハフマン木](https://www.youtube.com/watch?v=DV8efuB3h2g)
+ - [ ] [テキストのエレガントな圧縮(LZ 77方式)](https://www.youtube.com/watch?v=goOa3DGezUA)
+ - [ ] [テキスト圧縮が確率を満たす](https://www.youtube.com/watch?v=cCDCfoHTsaU)
+ - [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
+ - [ ] [(オプション)Google Developers Live:GZIPでは不十分です!](https://www.youtube.com/watch?v=whGwm0Lky2s)
+
+- ### コンピュータセキュリティ
+ - [MIT(23ビデオ)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [はじめに、脅威モデル](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [ハイジャック攻撃の制御](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
+ - [ ] [バッファオーバーフローの悪用と防御](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3)
+ - [ ] [特権の分離](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [機能](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [サンドボックス化ネイティブコード](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6)
+ - [ ] [ウェブセキュリティモデル](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Webアプリケーションの保護](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [シンボリック実行](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [ネットワークセキュリティ](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [ネットワークプロトコル](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [サイドチャネル攻撃](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+
+- ### ガベージコレクション
+ - [ ] [ガベージコレクション(Java);データの拡張(動画)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25)
+ - [ ] [コンパイラ(ビデオ)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff)
+ - [ ] [GC in Python(video)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
+ - [ ] [ディープダイブJava:ガーベッジコレクションは良いです!](https://www.infoq.com/presentations/garbage-collection-benefits)
+ - [ ] [Deep Dive Python:CPythonでのガベージコレクション(ビデオ)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
+
+- ### パラレルプログラミング
+ - [ ] [Coursera(Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
+ - [ ] [高性能並列計算のための効率的なPython(ビデオ)](https://www.youtube.com/watch?v=uY85GkaYzBk)
+
+- ### メッセージング、シリアライゼーション、およびキューイングシステム
+ - [ ] [Thrift](https://thrift.apache.org/)
+ - [チュートリアル](http://thrift-tutorial.readthedocs.io/ja/latest/intro.html)
+ - [ ] [プロトコルバッファ](https://developers.google.com/protocol-buffers/)
+ - [チュートリアル](https://developers.google.com/protocol-buffers/docs/tutorials)
+ - [ ] [gRPC](http://www.grpc.io/)
+ - [gRPC 101 for Java Developers(video)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1)
+ - [ ] [Redis](http://redis.io/)
+ - [チュートリアル](http://try.redis.io/)
+ - [ ] [Amazon SQS(キュー)](https://aws.amazon.com/sqs/)
+ - [ ] [Amazon SNS(pub-sub)](https://aws.amazon.com/sns/)
+ - [ ] [RabbitMQ](https://www.rabbitmq.com/)
+ - [はじめに](https://www.rabbitmq.com/getstarted.html)
+ - [ ] [Celery](http://www.celeryproject.org/)
+ - [セロリの最初のステップ](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)
+ - [ ] [ZeroMQ](http://zeromq.org/)
+ - [イントロ - マニュアルを読む](http://zeromq.org/intro:read-the-manual)
+ - [ ] [ActiveMQ](http://activemq.apache.org/)
+ - [ ] [Kafka](http://kafka.apache.org/documentation.html#introduction)
+ - [ ] [MessagePack](http://msgpack.org/index.html)
+ - [ ] [Avro](https://avro.apache.org/)
+
+- ### A *
+ - [ ] [検索アルゴリズム](https://en.wikipedia.org/wiki/A*_search_algorithm)
+ - [ ] [A * Pathfinding Tutorial(video)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
+ - [ ] [A *経路探索(E01:アルゴリズムの説明)(ビデオ)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
+
+- ### 高速フーリエ変換
+ - [ ] [フーリエ変換のインタラクティブガイド](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
+ - [ ] [フーリエ変換とは何ですか?それは何のために使われますか?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
+ - [ ] [フーリエ変換とは何ですか? (ビデオ)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
+ - [ ] [Divide&Conquer:FFT(ビデオ)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4)
+ - [ ] [FFTの理解](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
+
+- ### ブルームフィルター
+ - mビットとkハッシュ関数を持つBloomフィルタが与えられた場合、挿入とメンバーシップの両方のテストはO(k)
+ - [Bloom Filters](https://www.youtube.com/watch?v=-SuTGoFYjZs)
+ - [ブルームフィルター|大規模なデータセットのマイニング|スタンフォード大学](https://www.youtube.com/watch?v=qBTdukbzc78)
+ - [チュートリアル](http://billmill.org/bloomfilter-tutorial/)
+ - [Bloom Filter Appを書く方法](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/)
+
+- ### HyperLogLog
+ - [わずか1.5KBのメモリを使用して10億の異なるオブジェクトを数える方法](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct -objects-us.html)
+
+- ### 局所性に敏感なハッシング
+ - ドキュメントの類似性を判断するために使用されます。
+ - 2つの文書/文字列がまったく同じかどうかを判断するために使用されるMD5またはSHAの反対。
+ - [Simhashing(うまくいけば)シンプルに](http://ferd.ca/simhashing-hopefully-made-simple.html)
+
+- ### ヴァンEmde Boasの木
+ - [Divide&Conquer:van Emde Boas Trees(ビデオ)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
+ - [ ] [MIT講義ノート](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture -notes / MIT6_046JS12_lec15.pdf)
+
+- ### 拡張データ構造
+ - [ ] [CS 61B講義39:データ構造の拡張](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950)
+
+- ### バランスの取れた検索木
+ - 少なくとも1つのタイプの平衡二分木を知っている(そしてそれがどのように実装されているか知っている):
+ - "バランスの取れた探索木の中で、AVLと2/3の樹木が通過し、赤黒の木がより人気があるようです。
+ 特に興味深い自己組織化データ構造は、スプレイ木であり、回転を使用します
+ アクセスされたキーをルートに移動する」 - Skiena
+ これらのうち、私はスプレイ木を実装することを選択しました。私が読んだことから、あなたは
+ あなたの面接でバランスの取れた検索木。しかし、私は1つのコーディングへの露出を望んでいた
+ そしてそれに直面しましょう、スプレーの木はミツバチの膝です。私は赤黒の木のコードをたくさん読んだ。
+ - スプレイ木:挿入、検索、削除機能
+ あなたが赤/黒の木の実装を終わらせるならば、これらを試してみてください:
+ - 検索と挿入機能、削除をスキップする
+ B-Treeについては、非常に大規模なデータセットで非常に広く使用されているため、詳細を知りたい。
+ - [ ] [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
+
+ - [ ] ** AVL木**
+ - 実際には:
+ 私が言うことから、これらは実際にはあまり使われていませんが、どこになるか分かります。
+ AVL木は、O(log n)検索、挿入、および削除をサポートする別の構造です。より厳格に
+ 赤黒の木よりもバランスがとれているため、挿入と取り出しが遅くなりますが、検索が速くなります。これにより
+ 一度構築され、再構成なしでロードされる、例えば言語
+ 辞書(または、アセンブラまたはインタプリタのオペコードなどのプログラム辞書)を含む。
+ - [ ] [MIT AVL Trees / AVL Sort(ビデオ)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
+ - [ ] [AVL木(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
+ - [ ] [AVL木実装(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
+ - [ ] [スプリットアンドマージ](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
+
+ - [ ] **スプレッド木**
+ - 実際には:
+ スプレイ・木は、キャッシュ、メモリ・アロケータ、ルータ、ガベージ・コレクタ、
+ データ圧縮、ロープ(長いテキスト文字列に使用される文字列の置換)、Windows NT(仮想メモリ、
+ ネットワークおよびファイルシステムコードなど)
+ - [ ] [CS 61B:Splay Trees(video)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
+ - [ ] MIT講義:Splay Trees:
+ - 非常にマッシーになりますが、最後の10分を確かめてください。
+ - [動画](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
+
+ - [ ] **レッド/ブラックの木**
+ - これらは2-3木の翻訳です(下記参照)
+ - 実際には:
+ 赤黒の木は、挿入時間、削除時間、および検索時間に対して最悪の場合の保証を提供します。
+ これは、リアルタイムアプリケーションなどの時間に敏感なアプリケーションでは、これらを貴重なものにするだけでなく、
+ それは最悪の場合の保証を提供する他のデータ構造における貴重なビルディングブロックになります。
+ 例えば、計算幾何学で使用される多くのデータ構造は赤黒の木に基づくことができ、
+ 現在のLinuxカーネルで使用されている完全に公正なスケジューラは赤黒の木を使用します。 Javaのバージョン8では、
+ Collection HashMapが変更され、LinkedListを使用して同一の要素を貧弱に保存する代わりに
+ ハッシュコードでは、赤黒の木が使用されます。
+ - [Aduni - アルゴリズム - 講義4(リンク先のジャンプ先)(ビデオ)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
+ - [Aduni - アルゴリズム - 講義5(ビデオ)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
+ - [ ] [黒い木](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
+ - [ ] [バイナリサーチとレッドブラック木の紹介](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木の直感と定義(ビデオ)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
+ - [ ] [23-Treeのバイナリビュー](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [2-3木(学生の暗唱)(ビデオ)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+ - [ ] **2-3-4木(別名2-4木)**
+ - 実際には:
+ すべての2-4木には、同じ順序でデータ要素を持つ対応する赤黒の木があります。挿入と削除
+ 2-4木の操作は、赤黒の木の色の反転と回転にも相当します。これは2-4の木を
+ 赤黒の木の背後にある論理を理解するための重要なツールです。そのため、多くの導入アルゴリズムのテキストでは、
+ 2〜4本の木は実用的ではありません**。
+ - [ ] [CS 61B講義26:バランスの取れた検索木(ビデオ)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C)
+ - [ ] [ボトムアップ234-Trees(ビデオ)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [トップダウン234木(動画)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
+
+ - [ ] **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](https://en.wikipedia.org/wiki/B-tree)
+ - [ ] [B木(ビデオ)の紹介](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
+ - [ ] [B木の定義と挿入(ビデオ)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [B木削除(動画)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [MIT 6.851 - メモリ階層モデル(ビデオ)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+ - キャッシュに気付かないB木、非常に興味深いデータ構造
+ - 最初の37分は非常に技術的であり、スキップすることができます(Bはブロックサイズ、キャッシュラインサイズです)
+
+
+- ### k-D木
+ - 矩形または高次元のオブジェクトの点数を見つけるのに最適
+ - k最近接の隣人に適している
+ - [ ] [Kd Trees(ビデオ)](https://www.youtube.com/watch?v=W94M9D_yXKk)
+ - [ ] [kNN K-d木アルゴリズム(ビデオ)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
+
+- ### リストをスキップする
+ - 「これは多少のカルトデータ構造です」 - Skiena
+ - [ ] [ランダム化:リストをスキップ(ビデオ)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [アニメーションともう少し詳しく](https://en.wikipedia.org/wiki/Skip_list)
+
+- ### ネットワークの流れ
+ - [ ] [Ford-Fulkerson(ビデオ)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
+ - [ ] [Ford-Fulkersonアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
+ - [ ] [ネットワークフロー(動画)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
+
+- ### 分離集合と連合検索
+ - [ ] [UCB 61B - ばらばらのセット;並べ替えと選択(動画)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21)
+ - [ ] [Sedgewickアルゴリズム - Union-Find(6ビデオ)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t)
+
+- ### 高速処理のための数学
+ - [ ] [整数演算、Karatsuba倍数(ビデオ)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [中国の剰余定理(暗号で使用)(ビデオ)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
+
+- ### Treap
+ - 二分探索木とヒープの組み合わせ
+ - [ ] [Treap](https://en.wikipedia.org/wiki/Treap)
+ - [ ] [データ構造:Treaps説明(動画)](https://www.youtube.com/watch?v=6podLUYinH8)
+ - [ ] [セット操作のアプリケーション](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
+
+- ### リニアプログラミング(ビデオ)
+ - [ ] [線形計画法](https://www.youtube.com/watch?v=M4K6HYLHREQ)
+ - [ ] [最小費用の見積もり](https://www.youtube.com/watch?v=2ACJ9EWUC6U)
+ - [ ] [最大値の検索](https://www.youtube.com/watch?v=8AA_81xI3ik)
+ - [ ] [Pythonで線形方程式を解く - シンプレックスアルゴリズム](https://www.youtube.com/watch?v=44pAWI7v5Zk)
+
+- ### 幾何学、凸包(ビデオ)
+ - [ ] [Graph Alg。 IV:幾何学アルゴリズムの紹介 - 講義9(https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
+ - [ ] [Geometric Algorithms:Graham&Jarvis - 講義10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [Divide&Conquer:Convex Hull、Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
+
+- ### 離散数学
+ - 下のビデオを見る
+
+- ### 機械学習
+ - [ ] なぜMLですか?
+ - [ ] [Googleがどのように最初の企業を学習するマシンとして自分自身を作り直すか](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70)
+ - [ ] [知的コンピュータシステムのための大規模な深い学習(ビデオ)](https://www.youtube.com/watch?v=QSaZGT4-6EY)
+ - [ ] [深い学習と理解度対ソフトウェア工学と検証、Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw)
+ - [ ] [Googleのクラウドマシン学習ツール(動画)](https://www.youtube.com/watch?v=Ja2hxBAwG_0)
+ - [ ] [Google Developers `Machine Learning Recipes(Scikit Learn&Tensorflow)(ビデオ)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal)
+ - [ ] [Tensorflow(video)](https://www.youtube.com/watch?v=oZikw5k_2FM)
+ - [ ] [Tensorflowチュートリアル](https://www.tensorflow.org/versions/r0.11/tutorials/index.html)
+ - [ ] [Pythonでニューラルネットワークを実装する実践ガイド(Theanoを使用)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)
+ - コース:
+ - [グレートスターターコース:機械学習](https://www.coursera.org/learn/machine-learning)
+ - [動画のみ](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW)
+ - 線形代数のレビューについてはビデオ12〜18を参照してください(14と15は重複しています)
+ - [機械学習のためのニューラルネットワーク](https://www.coursera.org/learn/neural-networks)
+ - [GoogleのDeep Learning Nanodegree](https://www.udacity.com/course/deep-learning--ud730)
+ - [Google / Kaggle Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009)
+ - [自己運転車技術者Nanodegree](https://www.udacity.com/drive)
+ - [Metis Online Course(2ヶ月間99ドル)](http://www.thisismetis.com/explore-data-science)
+ - リソース:
+ - 書籍:
+ - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/)
+ - [ゼロからのデータ科学:Pythonの第一原理](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X)
+ - [Pythonによる機械学習入門](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/)
+ - [ソフトウェアエンジニア向け機械学習](https://github.com/ZuzooVn/machine-learning-for-software-engineers)
+ - データスクール:http://www.dataschool.io/
+
+-
+
+## 追加科目の詳細
+
+ 私は既に上記のいくつかのアイデアを強化するためにこれらを追加しましたが、それらを含めたくありませんでした
+ それはちょうどあまりにも多くのためです。それは科目にそれを過ごすのは簡単です。
+ あなたは今世紀に雇われたかったですね。
+
+- [ ] **連合検索**
+ - [ ] [概要](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
+ - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
+ - [ ] [木](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
+ - [ ] [ランキングによる連合](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank)
+ - [ ] [パス圧縮](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression)
+ - [ ] [分析オプション](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
+
+- [ ] **もっとダイナミックなプログラミング**(ビデオ)
+ - [ ] [6.006:動的プログラミングI:フィボナッチ、最短経路](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19)
+ - [ ] [6.006:ダイナミックプログラミングII:テキストジャスティフィケーション、ブラックジャック](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20)
+ - [ ] [6.006:DP III:かっこ、編集距離、ナップザック](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21)
+ - [6.006:DP IV:Guitar Fingering、Tetris、Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.046:Dynamic Programming&Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [6.046:ダイナミックプログラミング:オールペア最短パス](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15)
+ - [ ] [6.046:ダイナミックプログラミング(学生の暗唱)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
+
+- [ ] **高度なグラフ処理**(ビデオ)
+ - [ ] [同期分散アルゴリズム:対称性を破る。木にまたがる最短パス](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
+ - [ ] [非同期分散アルゴリズム:木にまたがる最短パス](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
+
+- [ ] MIT **確率**(mathy、ゆっくりと進み、数学的なことに良い)(ビデオ):
+ - [ ] [MIT 6.042J - 確率の紹介](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - 条件付き確率](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - 独立性](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - ランダム変数](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21)
+ - [ ] [MIT 6.042J - 期待値I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - 大きな偏差](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - ランダムウォーク](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25)
+
+- [ ] [Simonson:Approximation Algorithms(video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
+
+- [ ] **文字列マッチング**
+ - [ ] Rabin-Karp(ビデオ):
+ - [Rabin Karps Algorithm](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm)
+ - [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation)
+ - [最適化:実装と分析](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis)
+ - [表倍増、Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9)
+ - [ローリングハッシュ、償却分析](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32)
+ - [ ] クヌース・モリス・プラット(KMP):
+ - [Knuth-Morris-Pratt(KMP)文字列マッチングアルゴリズム](https://www.youtube.com/watch?v=5i7oKodCRJo)
+ - [ ] Boyer-Moore文字列検索アルゴリズム
+ - [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm)
+ - [高度な文字列検索Boyer-Moore-Horspoolアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=QDZpzctPf10)
+ - [ ] [Coursera:文字列のアルゴリズム](https://www.coursera.org/learn/algorithms-on-strings/home/week/1)
+ - すごく始まりますが、KMPを過ぎるまでには、必要以上に複雑になります
+ - 試行の良い説明
+ - スキップすることができます
+
+- [ ] **ソート**
+
+ - [ ] スタンフォードのソーティングに関する講義:
+ - [ ] [講義15 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69)
+ - [ ] [講義16 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69)
+ - [ ] Shai Simonson、[Aduni.org](http://www.aduni.org/):
+ - [ ] [アルゴリズム - ソート - 講義2(ビデオ)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2)
+ - [ ] [アルゴリズム - ソートII - レクチャー3(ビデオ)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3)
+ - [ ] Steven Skienaのソーティングに関する講義:
+ - [ ] [講義は26:46に始まります(ビデオ)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600)
+ - [ ] [講義は27:40(ビデオ)から開始](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [講演は35:00(ビデオ)から開始](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [講演は23:50から始まります(ビデオ)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
+
+
+## ビデオシリーズ
+
+座って楽しんでください。 「ネットフリックスとスキル」:P
+
+- [ ] [個々の動的プログラミングの問題のリスト(それぞれ短いです)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+
+- [ ] [x86アーキテクチャ、アセンブリ、アプリケーション(11ビデオ)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0)
+
+- [ ] [MIT 18.06線形代数、2005年春(35ビデオ)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8)
+
+- [ ] [優秀 - MIT Calculus Revisited:単一変数計算](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A)
+
+- [ ] [コンピュータサイエンス70,001 - 春2015 - 離散数学と確率論](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy)
+
+- [ ] [Shai Simonsonによる離散数学(19ビデオ)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG)
+
+- [ ] [離散数学第1部:Sarada Herke(5ビデオ)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo)
+
+- [ ] CSE373 - アルゴリズムの分析(25ビデオ)
+ - [アルゴリズム設計マニュアルのSkiena講義](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1)
+
+- [UCバークレー61B(Spring 2014):データ構造(25ビデオ)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
+
+- [UC Berkeley 61B(2006年秋):データ構造(39ビデオ)](https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C)
+
+- [UC Berkeley 61C:機械構造物(26ビデオ)](https://www.youtube.com/watch?v=gJJUUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_)
+
+- [ ] [OOSE:UMLとJavaを使用したソフトウェア開発(21ビデオ)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+
+- [ ] [UC Berkeley CS 152:コンピュータアーキテクチャとエンジニアリング(20ビデオ)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)
+
+- [ ] [MIT 6.004:計算構造(49ビデオ)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+
+- [Carnegie Mellon - Computer Architecture Lectures(39ビデオ)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq)
+
+- [ ] [MIT 6.006:アルゴリズム紹介(47ビデオ)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False)
+
+- [ ] [MIT 6.033:コンピュータシステムエンジニアリング(22ビデオ)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484)
+
+- [ ] [MIT 6.034人工知能、2010年秋(30ビデオ)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi)
+
+- [ ] [MIT 6.042J:コンピュータサイエンスの数学、2010年秋(25ビデオ)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B)
+
+- [ ] [MIT 6.046:アルゴリズムの設計と分析(34ビデオ)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+- [ ] [MIT 6.050J:情報とエントロピー、2008年春(19ビデオ)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7)
+
+- [ ] [MIT 6.851:高度なデータ構造(22ビデオ)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1)
+
+- [ ] [MIT 6.854:Advanced Algorithms、Spring 2016(24ビデオ)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c)
+
+- [ ] [Harvard COMPSCI 224:Advanced Algorithms(25ビデオ)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf)
+
+- [ ] [MIT 6.858コンピュータシステムセキュリティ、2014年秋](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+
+- [ ] [Stanford:Programming Paradigms(27ビデオ)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02)
+
+- [ ] [Christof Paarによる暗号の概要](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
+ - [スライドと問題セットと一緒のコースウェブサイト](http://www.crypto-textbook.com/)
+
+- [ ] [Mining Massive Datasets - スタンフォード大学(94ビデオ)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
+
+- [ ] グラフ理論(Sarada Herke)(67ビデオ)(https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
+
+## コンピュータサイエンスコース
+
+- [オンラインCSコースのディレクトリ](https://github.com/open-source-society/computer-science)
+- [CSコースのディレクトリ(多くはオンライン講義あり)](https://github.com/prakhar1989/awesome-courses)
\ No newline at end of file
diff --git a/translations/README-kh.md b/translations/README-kh.md
new file mode 100644
index 0000000000..31c32f90e5
--- /dev/null
+++ b/translations/README-kh.md
@@ -0,0 +1,1992 @@
+# មហាវិទ្យាល័យការសរសេរកូដសំរាប់ការសម្ភាសន៍ (Coding Interview University)
+
+
+### បង្កើតដោយ: [@John Washam](https://github.com/jwasham)
+### បកប្រែជាភាសារខ្មែរដោយ: [@Vortana Say](https://github.com/vsay01)
+
+> ពីដំបូងខ្ញុំបង្កើតនេះជាបញ្ជីប្រធានបទត្រូវធ្វើខ្លីដើម្បីក្លាយជាវិស្វករអភិវឌ្ឍន៍កម្មវិធី ប៉ុន្តែវាបានកើនឡើងដល់បញ្ជីធំដែលអ្នកបានឃើញសព្វថ្ងៃនេះ។ បន្ទាប់ពីឆ្លងកាត់គំរោងសិក្សានេះ [ ខ្ញុំបានក្លាយ ជាវិស្វករអភិវឌ្ឍន៍កម្មវិធីនៅអាមាហ្សូន (Amazon)](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)
+> អ្នកប្រហែលជាមិនចាំបាច់សិក្សាច្រេីនដូចខ្ញុំទេ។ ទោះយ៉ាងណាក៏ដោយអ្វីគ្រប់យ៉ាងដែលអ្នកត្រូវការគឺនៅទីនេះ។
+>
+> ខ្ញុំបានសិក្សាប្រហែលជា ៨ ទៅ ១២ ម៉ោងក្នុងមួយថ្ងៃអស់រយៈពេលជាច្រើនខែ។ អ្នកអាចអានារឿងរបស់ខ្ញុំ៖ [ហេតុអ្វីខ្ញុំសិក្សាពេញម៉ោងរយៈពេល ៨ ខែសំរាប់ការសំភាសន៍ហ្គូហ្គល](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)
+>
+> ចំណុចដែលបានរាយនៅទីនេះនឹងជួយអ្នករៀបចំការសំភាសន៍បច្ចេកទេសនៅក្រុមហ៊ុនកម្មវិធីណាមួយ។
+> រាប់បញ្ចូលទាំងក្រុមហ៊ុនធំៗដូចជា Amazon, Facebook, Google និង Microsoft ។
+>
+> សូមសំណាងល្អដល់អ្នក!
+
+
+ការបកប្រែ៖
+
+- [ភាសារចិន - 中文版本](translations/README-cn.md)
+- [ភាសារវៀតណាម - Tiếng Việt - Vietnamese](translations/README-vi.md)
+- [ភាសារអេស្ប៉ាញ - Español](translations/README-es.md)
+- [ភាសារព័រទុយហ្កាល់ - Português Brasileiro](translations/README-ptbr.md)
+- [ភាសារប៉ូឡូញ - Polish](translations/README-pl.md)
+
+
+
+
+ភាសារដែលកំពុងបកប្រែ:
+
+- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81)
+- [עברית](https://github.com/jwasham/coding-interview-university/issues/82)
+- [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101)
+- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98)
+- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90)
+- [French](https://github.com/jwasham/coding-interview-university/issues/89)
+- [Russian](https://github.com/jwasham/coding-interview-university/issues/87)
+- [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106)
+- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118)
+- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117)
+- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140)
+- [Thai](https://github.com/jwasham/coding-interview-university/issues/156)
+- [Greek](https://github.com/jwasham/coding-interview-university/issues/166)
+- [Italian](https://github.com/jwasham/coding-interview-university/issues/170)
+- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239)
+- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257)
+
+
+
+---
+
+## តារាងមាតិកា
+
+- [តើវាគឺជាអ្វី?](#what-is-it)
+- [ហេតុអ្វីប្រើវា?](#why-use-it)
+- [របៀបប្រើវា](#how-to-use-it)
+- [កុំមានអារម្មណ៍ថាអ្នកមិនឆ្លាតគ្រប់គ្រាន់](#dont-feel-you-arent-smart-enough)
+- [ធនធានវីដេអូ](#about-video-resources)
+- [ដំណើរការសម្ភាសន៍ និង ការត្រៀមសម្ភាសន៍ទូទៅ](#interview-process--general-interview-prep)
+- [ជ្រើសរើសភាសាមួយសម្រាប់ការសម្ភាសន៍](#pick-one-language-for-the-interview)
+- [បញ្ជីសៀវភៅ](#book-list)
+- [មុនពេលអ្នកចាប់ផ្តើម](#before-you-get-started)
+- [អ្វីដែលអ្នកនឹងមិនឃើញ](#what-you-wont-see-covered)
+- [ចំណេះដឹងជាមុនដែលគួរមាន](#prerequisite-knowledge)
+- [ផែនការប្រចាំថ្ងៃ](#the-daily-plan)
+- [ភាពស្មុគស្មាញនៃក្បួនដោះស្រាយ / Big-O / ការវិភាគ អាសុីមតុតិច (Asymptotic analysis)](#algorithmic-complexity--big-o--asymptotic-analysis)
+- [Data Structures](#data-structures)
+ - [Arrays](#arrays)
+ - [Linked Lists](#linked-lists)
+ - [Stack](#stack)
+ - [Queue](#queue)
+ - [Hash table](#hash-table)
+- [ចំណេះដឹងបន្ថែម](#more-knowledge)
+ - [Binary search](#binary-search)
+ - [Bitwise operations](#bitwise-operations)
+- [Trees](#trees)
+ - [Trees - កំណត់សំគាល់ និង ប្រវត្តិ](#trees---notes--background)
+ - [Binary search trees: BSTs](#binary-search-trees-bsts)
+ - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap)
+ - balanced search trees (គំនិតទូទៅ តែពុំមែនព័ត៌មានលម្អិតទេ)
+ - traversals: preorder, inorder, postorder, BFS, DFS
+- [Sorting](#sorting)
+ - selection
+ - insertion
+ - heapsort
+ - quicksort
+ - merge sort
+- [Graphs](#graphs)
+ - directed
+ - undirected
+ - adjacency matrix
+ - adjacency list
+ - traversals: BFS, DFS
+- [ចំណេះដឹងបន្ថែមទៀត](#even-more-knowledge)
+ - [Recursion](#recursion)
+ - [Dynamic Programming](#dynamic-programming)
+ - [Object-Oriented Programming](#object-oriented-programming)
+ - [Design Patterns](#design-patterns)
+ - [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability)
+ - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms)
+ - [Caches](#caches)
+ - [Processes and Threads](#processes-and-threads)
+ - [Testing](#testing)
+ - [Scheduling](#scheduling)
+ - [String searching & manipulations](#string-searching--manipulations)
+ - [Tries](#tries)
+ - [Floating Point Numbers](#floating-point-numbers)
+ - [Unicode](#unicode)
+ - [Endianness](#endianness)
+ - [Networking](#networking)
+- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience)
+- [ពិនិត្យចុងក្រោយ](#final-review)
+- [អនុវត្តសំណួរសរសេរកូដ](#coding-question-practice)
+- [លំហាត់សរសេរកូដ / បញ្ហា](#coding-exerciseschallenges)
+- [នៅពេលអ្នកជិតដល់ការសំភាសន៍](#once-youre-closer-to-the-interview)
+- [ប្រវត្តិរូបសង្ខេបរបស់អ្នក](#your-resume)
+- [ត្រូវគិតអំពីពេលសម្ភាសន៍មកដល់](#be-thinking-of-for-when-the-interview-comes)
+- [មានសំណួរសម្រាប់អ្នកសម្ភាសន៍យេីង](#have-questions-for-the-interviewer)
+- [នៅពេលដែលទទួលបានការងារធ្វើ](#once-youve-got-the-job)
+
+---
+
+## What is it?
+## តើវាគឺជាអ្វី?
+
+នេះគឺជាគំរោងសិក្សារបស់ខ្ញុំដែលមានរយៈពេលជាច្រើនខែសំរាប់ការរៀនក្លាយពីអ្នកបង្កើតគេហទំព័រ (បង្រៀនដោយខ្លួនឯង និង មិនមានសញ្ញាប័ត្រ
+វិទ្យាសាស្ត្រកុំព្យូទ័រ) រហូតដល់ក្លាយជាវិស្វករអភិវឌ្ឍន៍កម្មវិធីសំរាប់ក្រុមហ៊ុនធំ។!
+
+![ការសរសេរកូដនៅលើក្ដារខៀន - ពីតំបន់ Silicon Valley របស់ HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
+
+នេះមានន័យថាសម្រាប់ "វិស្វករអភិវឌ្ឍន៍កម្មវិធីថ្មី" ឬអ្នកដែលប្តូរពី
+ការអភិវឌ្ឍន៍កម្មវិធី / អ្នកបង្កេីតវេបសាយ (ដែលត្រូវការចំណេះដឹងផ្នែកវិទ្យាសាស្ត្រកុំព្យូទ័រ) ។ ប្រសិនបើអ្នកមាន
+បទពិសោធជាច្រើនឆ្នាំក្នុងការអភិវឌ្ឍន៍កម្មវិធី នោះអ្នកអាចនឹងរំពឹងថាមានបទសម្ភាសន៍ពិបាក។
+
+ប្រសិនបើអ្នកមានបទពិសោធន៍អភិវឌ្ឍន៍កម្មវិធី ឬ វេបសាយច្រើនឆ្នាំ សូមកត់សម្គាល់ថាក្រុមហ៊ុនធំ ៗ ដូចជាហ្គូហ្គោល(Google) អាម៉ាហ្សូន (Amazon)
+ហ្វេសប៊ុក (Facebook) និង ម៉ៃក្រូសូហ្វ (Microsoft) មានទស្សនៈថាវិស្វករអភិវឌ្ឍន៍កម្មវិធី ខុសគ្នាពីអ្នកបង្កេីតកម្មវិធី ឬ ការអភិវឌ្ឍន៍គេហទំព័រវេបសាយ ហើយពួកគេត្រូវការចំណេះដឹងផ្នែកវិទ្យាសាស្ត្រកុំព្យូទ័រ។
+
+ប្រសិនបើអ្នកចង់ក្លាយជាវិស្វករដែលអាចទុកចិត្តបានឬវិស្វករប្រតិបត្តិការសូមសិក្សាបន្ថែមពីបញ្ជីជម្រើស (បណ្តាញ និង សុវត្ថិភាព) ។
+
+---
+
+### Why use it?
+## ហេតុអ្វីប្រើវា?
+
+នៅពេលដែលខ្ញុំចាប់ផ្តើមគំរោងនេះ ខ្ញុំមិនដឹងពី stack, heap, Big-O, trees និង មិនដឹងរបៀបឆ្លងកាត់ក្រាហ្វ។ ប្រសិនបើខ្ញុំត្រូវសរសេរកូដដោះស្រាយ Sort ខ្ញុំអាចប្រាប់អ្នកថាវានឹងមិនល្អទេ។
+
+Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់បានប្រើត្រូវបានបង្កើតឡើងមកជាមួយភាសា ហើយខ្ញុំមិនដឹងពីរបៀប និង ដំណេីរការដែល Data Structure។ ខ្ញុំមិនដែលត្រូវគ្រប់គ្រង Programming Memory ទេលុះត្រាតែកម្មវិធីខ្ញុំសរសេរមានបញ្ហា "អស់ Memory" ហើយបន្ទាប់មកខ្ញុំត្រូវរកដំណោះស្រាយបណ្តោះអាសន្ន។ ខ្ញុំបានប្រើ Multidiemsional arrays ពីរបីនៅក្នុងជីវិតរបស់ខ្ញុំ និង រាប់ពាន់នៃ Associate arrays ប៉ុន្តែខ្ញុំមិនដែលបង្កើត Data Structure ពីដំបូងឡើយ។
+
+វាជាផែនការវែង។ វាអាចចំណាយពេលច្រើនខែ។ ប្រសិនបើអ្នកធ្លាប់ស្គាល់រឿងនេះរួចហើយវានឹងនាំអ្នកចំណាយពេលតិចជាងមុន។
+
+---
+
+### How to use it?
+## របៀបប្រើវា
+
+
+អ្វីគ្រប់យ៉ាងខាងក្រោមគឺជាគ្រោង អ្នកគួរតែដោះស្រាយតាមលំដាប់ពីលើចុះក្រោម។
+
+ខ្ញុំកំពុងប្រើសញ្ញាសម្គាល់ពិសេសរបស់ 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 "Marked x"`
+
+`git rebase jwasham/main`
+
+`git push --force`
+
+[ព័ត៌មានបន្ថែមអំពីសញ្ញាសម្គាល់ Github]](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
+
+---
+
+### Don't feel you aren't smart enough
+## កុំមានអារម្មណ៍ថាអ្នកមិនឆ្លាតគ្រប់គ្រាន់
+
+- វិស្វករអភិវឌ្ឍន៍កម្មវិធីដែលទទួលបានជោគជ័យគឺឆ្លាត ប៉ុន្តែមនុស្សជាច្រើនមានអារម្មណ៍ដែលពួកគេមិនឆ្លាតគ្រប់គ្រាន់។
+- [រឿងរបស់អ្នកសរសេរកម្មវិធីដែលមានទេពកោសល្យ](https://www.youtube.com/watch?v=0SARbwvhupQ)
+- [វាមានគ្រោះថ្នាក់ក្នុងការទៅតែម្នាក់ឯង: ការប្រយុទ្ធនឹងសត្វចម្លែកដែលចេះបំបាំងកាយនៅក្នុងបច្ចេកវិទ្យា](https://www.youtube.com/watch?v=1i8ylq4j_EY)
+
+---
+
+### About Video Resources
+## ធនធានវីដេអូ
+
+វីដេអូខ្លះអាចប្រើបានតែតាមរយៈការចុះឈ្មោះចូលរៀនវគ្គ Coursera ឬ EdX ប៉ុណ្ណោះ។ ទាំងនេះត្រូវបានគេហៅថា MOOCs ។
+ពេលខ្លះថ្នាក់រៀនមិននៅក្នុងវគ្គដូច្នេះអ្នកត្រូវរង់ចាំពីរបីខែសិន។
+
+ខ្ញុំសូមកោតសរសើរចំពោះជំនួយរបស់អ្នកក្នុងការបន្ថែមប្រភពសាធារណៈដែលអាចរកបានដោយឥតគិតថ្លៃជានិច្ចដូចជាវីដេអូយូធ្យូប (YouTube) ដើម្បីភ្ជាប់វីដេអូវគ្គសិក្សាតាមអ៊ីនធឺណិត។
+
+ខ្ញុំចូលចិត្តប្រើការបង្រៀនសាកលវិទ្យាល័យ។
+
+---
+
+### Interview Process & General Interview Prep
+## ដំណើរការសំភាសន៍និងកម្មវិធីសម្ភាសន៍ទូទៅ
+
+- [ ] [ABC: តែងតែសរសេរកូដ](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
+- [ ] [ការប្រេីប្រាស់ក្តារខៀន](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
+- [ ] [ការប្រេីប្រាស់ក្តារខៀនមានប្រសិទ្ធិភាពក្នុងពេលសម្ភាសន៍កម្មវិធី](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/)
+- [ ] [ជ្រើសរើសបុគ្គលិកជំនាញបច្ចេកវិទ្យា](https://www.youtube.com/watch?v=N233T0epWTs)
+- [ ] វិធីរកការងារនៅក្រុមហ៊ុនធំ ៤៖
+ - [ ] [របៀបរកការងារធ្វើនៅក្រុមហ៊ុនធំ ៤ - Amazon, Facebook, Google និង Microsoft (មានវីដេអូ)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
+- [បំបែកការសម្ភាសន៍ការសរសេរកូដ ១៖
+ - [ ] [ហ្គេលឡេអិលម៉ាកឌូវែល (Gayle L McDowell) - បំបែកការសម្ភាសន៍ការសរសេរកូដ (វីដេអូ)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
+ - [ ] [បំបែកបទសម្ភាសន៍នៃការសរសេរកូដជាមួយអ្នកនិពន្ធហ្គេលឡាឡាក់មែនម៉ាកម៉ាកឌូវែល (Gayle Laakmann McDowell) (វីដេអូ)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
+- [ ] បំបែកបទសម្ភាសន៍កូដហ្វេសប៊ុក
+ - [ ] [វិធីសាស្រ្ត](https://www.youtube.com/watch?v=wCl9kvQGHPI)
+ - [ ] [ពន្យល់ពីបញ្ហា](https://www.youtube.com/watch?v=4UWDyJq8jZg)
+- [ ] វគ្គសិក្សាត្រៀម:
+ - [ ] [សំភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធី (មិនបានបង់ប្រាក់)](https://www.udemy.com/software-engineer-interview-unleashed)៖
+ - រៀនពីរបៀបដើម្បីត្រៀមខ្លួនសម្រាប់ការសម្ភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធីពីអ្នកសំភាសន៍របស់ហ្គូហ្គោល (Google) ។
+ - [ ] [Python សម្រាប់រចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយនិងសំភាសន៍ (វគ្គសិក្សាបង់លុយ)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/)៖
+ - វគ្គសិក្សាសំភាសន៍ Python ដែលផ្តោតលើរចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយ ការសំភាសន៍សាកល្បងនិងច្រើនទៀត។
+ - [ ] [ការណែនាំអំពីរចនាសម្ព័ន្ធទិន្នន័យនិងក្បួនដោះស្រាយដោយប្រើ Python (វគ្គសិក្សាឥតគិតថ្លៃរបស់ Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513)៖
+ - រចនាសម្ព័នធ័រណេតនិងអ័រហ្គ្រែនដោយឥតគិតថ្លៃ។
+ - [ ] [រចនាសម្ព័នទិន្នន័យនិងក្បួនដោះស្រាយ! (Udacity បង់ Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256)៖
+ - ទទួលបានការអនុវត្តជាក់ស្តែងជាមួយនឹងរចនាសម្ព័ន្ធទិន្នន័យជាង ១០០ លំហាត់ និងការណែនាំពីអ្នកបងៀនដើម្បីជួយរៀបចំអ្នកសម្រាប់ការសម្ភាសន៍ និង ដាក់ការងារ។
+
+---
+
+### Pick One Language for the Interview
+## ជ្រើសរើសភាសាមួយសម្រាប់ការសម្ភាសន៍
+
+អ្នកអាចប្រើភាសាដែលអ្នកមានភាពងាយស្រួលក្នុងការសរសេរកូដសំភាសន៍ប៉ុន្តែសម្រាប់ក្រុមហ៊ុនធំ ៗ ទាំងនេះគឺជាជំរើសដ៏រឹងមាំ៖
+
+- C ++
+- Java
+- Python
+
+អ្នកក៏អាចប្រើរបស់ទាំងនេះដែរប៉ុន្តែត្រូវអានជាមុនសិន។ វាអាចមានការនិយាយតៗគ្នា៖
+
+- JavaScript
+- Ruby
+
+នេះគឺជាអត្ថបទមួយដែលខ្ញុំបានសរសេរអំពីការជ្រើសរើសភាសាសម្រាប់ការសម្ភាសន៍៖ [ជ្រើសរើសយកភាសាមួយសម្រាប់ការសម្ភាសន៍សរសេរកូដ](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)
+
+អ្នកគួររេីសភាសាដែលអ្នកទំលាប់ជាមួយ និង មានចំណេះដឹង។
+
+សូមអានបន្ថែមអំពីជំរើស៖
+- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/
+- http://blog.codingforinterviews.com/best-programming-language-jobs/
+
+[មើលធនធានភាសានៅទីនេះ](programming-language-resources.md)
+
+អ្នកនឹងឃើញការរៀន C, C ++ និង Python ខាងក្រោមព្រោះខ្ញុំកំពុងរៀន។ មានសៀវភៅពីរបីដែលពាក់ព័ន្ធសូមមើលនៅខាងក្រោម។
+
+---
+
+### Book List
+## បញ្ជីសៀវភៅ
+
+នេះគឺជាបញ្ជីខ្លីជាងអ្វីដែលខ្ញុំបានប្រើ។ នេះត្រូវបានសង្ខេបដើម្បីជួយសន្សំសំចៃពេលវេលារបស់អ្នក។
+
+---
+
+### Interview Prep
+## ត្រៀមការសម្ភាសន៍
+
+- [ ] [សំភាសន៍ការសរសេរកម្មវិធីបង្ហាញ: ការសរសេរកូដវិធីរបស់អ្នកតាមរយៈការសំភាសន៍, បោះពុម្ពលើកទី ៤](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/)
+ - ចម្លើយសរសេរ C++ និង Java
+ - នេះគឺជាសមដ៏ល្អសម្រាប់ការបំបែកសំភាសន៍កូដ
+ - មិនពិបាកពេកទេ បញ្ហាភាគច្រើនប្រហែលជាងាយស្រួលជាងអ្វីដែលអ្នកបានឃើញក្នុងបទសម្ភាសន៍ (ពីអ្វីដែលខ្ញុំបានអាន)
+- [ ] [ការសំភាសន៍ការសរសេរកូដការបោះពុម្ពលើកទី ៦](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
+ - ចម្លើយនសរសេរជា Java
+
+---
+
+### If you have tons of extra time:
+## ប្រសិនបើអ្នកមានពេលវេលាបន្ថែមច្រេីន
+
+ជ្រើសរើសមួយ:
+
+- [ ] [ធាតុផ្សំនៃបទសម្ភាសន៍សរសេរកម្មវិធី (កំណែ C ++)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
+- [ ] [ធាតុផ្សំនៃការសំភាសន៍សរសេរកម្មវិធីក្នុង Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/)
+- [ ] ធាតុនៃការសំភាសន៍សរសេរកម្មវិធី (កំណែ Java)
+ - [សៀវភៅ](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
+ - [គម្រោង - វិធីសាស្រ្ត Stub និងករណីតេស្តិ៍សម្រាប់រាល់បញ្ហាក្នុងសៀវភៅ](https://github.com/gardncl/elements-of-programming-interviews)
+
+---
+
+### Language Specific
+## ភាសាជាក់លាក់
+
+**អ្នកត្រូវជ្រើសរើសភាសាសំរាប់សំភាសន៍ (សូមមើលខាងលើ) ។**
+
+នេះជាអ្នីដែលខ្ញុំគិតថាអ្នកគួរមេីល។ ខ្ញុំមិនមានធនធានសម្រាប់ភាសាទាំងអស់ទេ។ ខ្ញុំស្វាគមន៍ការដាក់បន្ថែមពីអ្នក។
+
+ប្រសិនបើអ្នកអានចំណុចមួយក្នុងចំណោមចំណុចទាំងនេះអ្នកគួរតែមានចំនេះដឹង Data Structure និងចំណេះដឹងអំពីក្បួនដោះស្រាយ (Algorithm) ដែលអ្នកត្រូវចាប់ផ្តើមធ្វើបញ្ហាសរសេរកូដ។
+
+**អ្នកអាចរំលងការបង្រៀនវីដេអូទាំងអស់នៅក្នុងគម្រោងនេះ** លើកលែងតែអ្នកចង់ពិនិត្យឡើងវិញ។
+
+[ធនធានភាសាជាក់លាក់នៅទីនេះ។](programming-language-resources.md)
+
+---
+
+## C++
+
+ខ្ញុំមិនបានអានទាំងពីរនេះទេ ប៉ុន្តែវាត្រូវបានវាយតម្លៃនិងសរសេរយ៉ាងខ្ពស់ដោយ Sedgewick ។ គាត់អស្ចារ្យណាស់។
+
+- [ ] [វិធីដោះស្រាយក្នុង C++, ផ្នែក ១-៤៖ មូលដ្ឋានគ្រឹះរចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) តម្រៀប (Sort) ស្វែងរក (Searching)](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
+- [ ] [វិធីដោះស្រាយក្នុង C++ ភាគ ៥៖ ក្បួនដោះស្រាយក្រាហ្វិច](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
+
+ប្រសិនបើអ្នកមានអនុសាសន៍ល្អប្រសើរសម្រាប់ C++ សូមប្រាប់ខ្ញុំឱ្យដឹង។ រកមើលធនធានទូលំទូលាយ។
+
+---
+
+## Java
+
+- [ ] [វិធីដោះស្រាយ (Sedgewick និង Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
+ - វីដេអូដែលមានមាតិកាសៀវភៅ (និង Sedgewick!) លើវគ្គសិក្សា៖
+ - [ក្បួនដោះស្រាយ I](https://www.coursera.org/learn/algorithms-part1)
+ - [ក្បួនដោះស្រាយទី ២](https://www.coursera.org/learn/algorithms-part2)
+
+រឺ៖
+
+- [ ] [រចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និងក្បួនដោះស្រាយ Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
+ - ដោយហ្គ្រីដល (Goodrich), តាតសាសៀ (Tamassia), ហ្គោវីស (Goldwasser)
+ - អត្ថបទសម្រាប់វគ្គសិក្សាសំរាប់ថ្នាក់ដំបូងរបស់វិទ្យាសាស្ត្រកុំព្យូទ័រនៅឯ UC Berkeley
+ - សូមមើលរបាយការណ៍សៀវភៅរបស់ខ្ញុំស្តីពីកំណែ Python ខាងក្រោម។ សៀវភៅនេះមានប្រធានបទដូចគ្នា។
+
+---
+
+## Python
+- [ ] [រចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និងក្បួនដោះស្រាយ (Algorithm) ក្នុង Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
+ - ដោយហ្គ្រីដល (Goodrich), តាតសាសៀ (Tamassia), ហ្គោវីស (Goldwasser)
+ - ខ្ញុំចូលចិត្តសៀវភៅនេះ។ វាគ្របដណ្តប់អ្វីៗគ្រប់យ៉ាងនិងច្រើនទៀត។
+ - លេខកូដព្យញ្ជនៈ
+ - របាយការណ៍សៀវភៅរបស់ខ្ញុំ៖ https://startupnextdoor.com/book-report-data-structures-and-al algorithms-in-python/
+
+---
+
+### Before you Get Started
+## មុនពេលអ្នកចាប់ផ្តើម
+
+បញ្ជីនេះបានកើនឡើងអស់រយៈពេលជាច្រើនខែហើយ ។
+
+នេះគឺជាកំហុសមួយចំនួនដែលខ្ញុំបានធ្វើដូច្នេះអ្នកនឹងមានបទពិសោធប្រសើរជាងមុន។
+
+### 1. អ្នកនឹងមិនចងចាំវាទាំងអស់
+
+ខ្ញុំបានមើលវីដេអូជាច្រើនម៉ោងនិងកត់ចំណាំគួរអោយចង់សើច ហើយប៉ុន្មានខែក្រោយមកមានរឿងជាច្រើនដែលខ្ញុំមិនចាំ។ ខ្ញុំចំណាយពេល ៣ ថ្ងៃទៀត
+តាមរយៈកំណត់ចំណាំរបស់ខ្ញុំនិងធ្វើប័ណ្ណបញ្ជាក់ដូច្នេះខ្ញុំអាចពិនិត្យមើលឡើងវិញ។
+
+សូមមេត្តាអានដូច្នេះអ្នកនឹងមិនធ្វើឱ្យខ្ញុំខុសទេ។
+
+[រក្សាចំណេះដឹងវិទ្យាសាស្ត្រកុំព្យូទ័រ](https://startupnextdoor.com/retaining-computer-science-knowledge/) ។
+
+វគ្គសិក្សាដែលបានណែនាំដល់ខ្ញុំ (មិនបានសិក្សាវាទេ)៖ [ការរៀនពីរបៀបរៀន](https://www.coursera.org/learn/learning-how-to-learn)
+
+### 2. ប្រើកាតបង្ហាញ
+
+ដើម្បីដោះស្រាយបញ្ហា ខ្ញុំបានបង្កើតវេបសាយកាតតូចមួយដែលខ្ញុំអាចបន្ថែមកាតចំនួន ២ ប្រភេទគឺទូទៅនិងលេខកូដ។
+កាតនីមួយៗមានទ្រង់ទ្រាយខុសៗគ្នា។
+
+ខ្ញុំបានបង្កើតវេបសាយសំរាប់ទូរស័ព្ទដំបូងមួយ ដូច្នេះខ្ញុំអាចពិនិត្យមើលឡើងវិញនៅលើទូរស័ព្ទ និង ថេប្លេតរបស់ខ្ញុំទោះបីខ្ញុំនៅទីណាក៏ដោយ។
+
+អ្នកអាចបង្កេីតដោយឥតគិតថ្លៃ៖
+
+- [បណ្តាញឃ្លាំងផ្ទុកកាតឡើងវិញ](https://github.com/jwasham/computer-science-flash-cards)
+- [មូលដ្ឋានទិន្នន័យកាតរបស់ខ្ញុំ (កាតចាស់ - ១២០០ កាត)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db)៖
+- [ប្រព័ន្ធទិន្នន័យកាតរបស់ខ្ញុំ (កាតថ្មី - ១៨០០)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db)៖
+
+សូមចងចាំថាខ្ញុំបានឡើងលើក្តារហើយមានកាតគ្របដណ្តប់លើអ្វីៗទាំងអស់ចាប់ពីភាសាការជួបប្រជុំគ្នា និង សំនួរទាក់ទងនឹង Python រហូតដល់ការរៀនម៉ាស៊ីននិងស្ថិតិ។ វាជាវិធីច្រើនពេកសម្រាប់អ្វីដែលត្រូវការ។
+
+**កំណត់ចំណាំនៅលើបណ្ណបង្ហាញ៖** ជាលើកដំបូងដែលអ្នកទទួលស្គាល់អ្នកដឹងពីចម្លើយ សូមកុំសម្គាល់វាថាត្រូវបានគេស្គាល់។ អ្នកត្រូវតែមើល
+កាតដូចគ្នានិងឆ្លើយវាច្រើនដងឱ្យបានត្រឹមត្រូវមុនពេលដែលអ្នកពិតជាដឹង។ ពាក្យដដែលៗនឹងធ្វើឱ្យចំណេះដឹងនោះកាន់តែស៊ីជម្រៅ
+ខួរក្បាលរបស់អ្នក។
+
+ជំរើសមួយផ្សេងទៀតក្នុងការប្រើប្រាស់បណ្តាញកាតរបស់ខ្ញុំគឺ [Anki](http://ankisrs.net/) ដែលត្រូវបានណែនាំអោយខ្ញុំច្រើនដង។ វាប្រើប្រព័ន្ធពាក្យដដែលៗដើម្បីជួយអ្នកចងចាំ។
+វាមានភាពងាយស្រួលសម្រាប់អ្នកប្រើដែលមាននៅលើគ្រប់វេទិកាទាំងអស់និងមានប្រព័ន្ធធ្វើសមកាលកម្មពពក។ វាមានតម្លៃ ២៥ ដុល្លារលើប្រព័ន្ធប្រតិបត្តិការ iOS ប៉ុន្តែមិនគិតថ្លៃនៅលើវេទិកាផ្សេងទៀតទេ។
+
+មូលដ្ឋានទិន្នន័យបណ្ណបង្ហាញរបស់ខ្ញុំក្នុងទំរង់អាគី (Anki) ៖ https://ankiweb.net/shared/info/25173560 (សូមអរគុណ [@xiewenya](https://github.com/xiewenya)
+
+### ៣. ចាប់ផ្តើមធ្វើសំណួរសម្ភាសន៍សរសេរកូដខណៈពេលដែលអ្នកកំពុងរៀនរចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និង ក្បួនដោះស្រាយ (Algorithm)
+
+អ្នកត្រូវអនុវត្តអ្វីដែលអ្នកកំពុងរៀនដើម្បីដោះស្រាយបញ្ហាឬអ្នកនឹងភ្លេច។ ខ្ញុំបានធ្វើកំហុសនេះ។ នៅពេលដែលអ្នកបានរៀនប្រធានបទមួយ
+ហើយមានអារម្មណ៍ស្រួលជាមួយវាដូចជាបញ្ជីភ្ជាប់បើកសៀវភៅសម្ភាសន៍កូដសរសេរមួយហើយធ្វើសំណួរពីរបីទាក់ទងនឹង
+បញ្ជីដែលបានភ្ជាប់។ បន្ទាប់មកបន្តទៅប្រធានបទសិក្សាបន្ទាប់។ បន្ទាប់មកពេលក្រោយ ត្រលប់ក្រោយហើយធ្វើបញ្ហាបញ្ជីដែលបានភ្ជាប់ផ្សេងទៀត
+ឬបញ្ហាការហៅឡើងវិញឬអ្វីផ្សេងទៀត។ ប៉ុន្តែនៅតែធ្វើបញ្ហានៅពេលអ្នកកំពុងរៀន។ អ្នកមិនត្រូវបានគេជួលដើម្បីចំណេះដឹងទេ
+ប៉ុន្តែរបៀបដែលអ្នកអនុវត្តចំណេះដឹង។ មានសៀវភៅនិងគេហទំព័រជាច្រើនដែលខ្ញុំសូមណែនាំ។
+សូមមើលនៅទីនេះសម្រាប់ព័ត៌មានបន្ថែម: [ការអនុវត្តសំណួរសំណួរសរសេរកូដ](#coding-question-practice)
+
+### 4. ពិនិត្យឡើងវិញ ពិនិត្យឡើងវិញ ពិនិត្យឡើងវិញ
+
+ខ្ញុំរក្សាទុកសន្លឹកបន្លំមួយសន្លឹកនៅលើ ASCII, OSI stack, សញ្ញាណសំគាល់ធំ ៗ (Big-O) និងច្រើនទៀត។ ខ្ញុំសិក្សាវានៅពេលខ្ញុំមានពេលទំនេរខ្លះ។
+
+សម្រាកពីបញ្ហាសរសេរកម្មវិធីរយៈពេលកន្លះម៉ោង ហើយអានកាតរបស់អ្នក។
+
+### 5. ផ្តោតអារម្មណ៍
+
+មានការរំខានជាច្រើនដែលអាចចំណាយពេលដ៏មានតម្លៃ។ ការផ្តោតអារម្មណ៍គឺពិបាក។ បើកតន្ត្រីមួយចំនួនដែលគ្មានទំនុកច្រៀងទេអ្នកនឹងអាចផ្តោតអារម្មណ៍បានល្អ។
+
+---
+
+### What you won't see covered
+## អ្វីដែលអ្នកនឹងមិនឃើញគ្របដណ្តប់
+
+ទាំងនេះជាបច្ចេកវិទ្យាដែលមានជាទូទៅប៉ុន្តែមិនមែនជាផ្នែកនៃផែនការសិក្សានេះទេ៖
+
+- SQL
+- Javascript
+- HTML, CSS និងបច្ចេកវិទ្យាផ្នែក front-end
+
+---
+
+### The Daily Plan
+## ផែនការប្រចាំថ្ងៃ
+
+មុខវិជ្ជាខ្លះចំណាយពេលមួយថ្ងៃហើយ មុខវិជ្ជាខ្លះនឹងចំណាយពេលច្រើនថ្ងៃ។ អ្នកខ្លះរៀនតែគ្មានអ្វីអនុវត្ត។
+
+ជារៀងរាល់ថ្ងៃខ្ញុំយកប្រធានបទមួយចេញពីបញ្ជីខាងក្រោមមើលវីដេអូអំពីប្រធានបទនោះហើយសរសេរកូតនៅក្នុង៖
+- C - ប្រើរចនាសម្ព័ន្ធ និង មុខងារដែលយករចនាសម្ព័ន្ធ * និង អ្វីផ្សេងទៀតជា Arguments។
+- C++ - ដោយមិនប្រើមុខងារដែលភ្ជាប់មកជាមួយនឹង ភាសា
+- C++ - ប្រើប្រភេទដែលមានស្រាប់ដូចជា STL's::list សម្រាប់បញ្ជីភ្ជាប់ (Linked list)
+- Python - ប្រើប្រភេទដែលមានស្រាប់ (ដើម្បីរំលឹក Python)
+- និងសរសេរការធ្វើតេស្តដើម្បីធានាថាខ្ញុំធ្វើវាបានត្រឹមត្រូវពេលខ្លះគ្រាន់តែប្រើសេចក្តីថ្លែងអះអាងសាមញ្ញ assert()
+- អ្នកអាចធ្វើ Jav ឬ អ្វីផ្សេងទៀតនេះគ្រាន់តែជារឿងរបស់ខ្ញុំប៉ុណ្ណោះ។
+
+អ្នកមិនត្រូវការរបស់ទាំងអស់នេះទេ។ អ្នកត្រូវការតែ [ភាសាមួយសម្រាប់ការសម្ភាសន៍](#pick-one-language-for-the-interview) ។
+
+ហេតុអ្វីត្រូវកូដទាំងអស់នេះ?
+- អនុវត្ត អនុវត្ត អនុវត្តរហូតដល់ខ្ញុំច្បាស់ហើយអាចធ្វើវាដោយគ្មានបញ្ហា (អ្នកខ្លះមានករណីកំរច្រើន និង ព័ត៌មានលំអិតនៃការរក្សាទុកសៀវភៅដើម្បីចងចាំ)
+- ធ្វើការនៅក្នុងឧបសគ្គ (បែងចែក / លុបចេញអង្គចងចាំ (Memory) ដោយគ្មានជំនួយពីការប្រមូលសំរាម (Gabage Collection) (លើកលែងតែ Python ឬ Java))
+- ប្រើប្រភេទដែលមានស្រាប់ដូច្នេះខ្ញុំមានបទពិសោធន៍ប្រើឧបករណ៍ដែលមានស្រាប់សម្រាប់ការប្រើប្រាស់ដូចពេលធ្វេីការ (មិនមែនថាសរសេរការអនុវត្តន៍បញ្ជី (Linked List) របស់ខ្ញុំផ្ទាល់ក្នុងពេលធ្វេីការ)
+
+ខ្ញុំប្រហែលជាមិនមានពេលវេលាដើម្បីធ្វើការទាំងអស់សម្រាប់មុខវិជ្ជាទាំងអស់នោះទេប៉ុន្តែខ្ញុំនឹងព្យាយាម។
+
+អ្នកអាចឃើញកូដរបស់ខ្ញុំនៅទីនេះ៖
+
+- [C](https://github.com/jwasham/practice-c)
+- [C++](https://github.com/jwasham/practice-cpp)
+- [Python](https://github.com/jwasham/practice-python)
+
+អ្នកមិនចាំបាច់ទន្ទេញចាំគ្រប់ក្បួនដោះស្រាយទាំងអស់។
+
+សរសេរកូដនៅលើក្ដារខៀនឬក្រដាស មិនមែនកុំព្យូទ័រទេ។ សាកល្បងជាមួយធាតុចូលគំរូមួយចំនួន។ បន្ទាប់មកសាកល្បងវានៅលើកុំព្យូទ័រ។
+
+## ចំណេះដឹងចាំបាច់
+
+- [ ] **រៀន C**
+ - C គឺនៅគ្រប់ទីកន្លែង។ អ្នកនឹងឃើញឧទាហរណ៍នៅក្នុងសៀវភៅការបង្រៀនវីដេអូ *នៅគ្រប់ទីកន្លែង* ពេលអ្នកកំពុងសិក្សា។
+
+ - [ ] [ភាសាសរសេរកម្មវិធី C, ភាគ ២](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
+
+ - នេះគឺជាសៀវភៅខ្លីមួយប៉ុន្តែវានឹងផ្តល់ឱ្យអ្នកនូវភាសា C យ៉ាងល្អហើយប្រសិនបើអ្នកអនុវត្តវាបន្តិច អ្នកនឹងឆាប់ស្ទាត់ជំនាញ។ ការយល់ដឹង C ជួយអ្នកឱ្យយល់ពីរបៀបដែលកម្មវិធីនិងការចងចាំដំណើរការ។
+
+ - [ចម្លើយចំពោះសំណួរ](https://github.com/lekkas/c-algorithms)
+
+- [ ] **របៀបដែលកុំព្យូទ័រដំណើរការកម្មវិធី:**
+ - [ ] [តើស៊ីភីយូប្រតិបត្តិកម្មវិធីមួយយ៉ាងដូចម្តេច? (វីដេអូ)](https://www.youtube.com/watch?v=XM4lGflQFvA)
+ - [ ] [របៀបគណនាកុំព្យូទ័រ - ALU (វីដេអូ)](https://youtu.be/1I5ZMmrOfnA)
+ - [ ] [ចុះបញ្ជី (Registers) និង រ៉េម (RAM) (វីដេអូ)](https://youtu.be/fpnE6UAfbtU)
+ - [ ] [អង្គភាពកែច្នៃកណ្តាល (ស៊ីភីយូ) (The Central Processing Unit) (វីដេអូ)](https://youtu.be/FZGugFqdr60)
+ - [ ] [សេចក្តីណែនាំនិងកម្មវិធី (វីដេអូ)](https://youtu.be/zltgXvg6r3k)
+
+---
+
+### Algorithmic complexity / Big-O / Asymptotic analysis
+## ភាពស្មុគស្មាញនៃក្បួនដោះស្រាយ / ការវិភាគ Big-O
+
+- គ្មានអ្វីត្រូវអនុវត្តទេ
+- មានវីដេអូជាច្រើននៅទីនេះ។ គ្រាន់តែមើលឱ្យបានគ្រប់គ្រាន់រហូតដល់អ្នកយល់។ អ្នកអាចត្រលប់មកពិនិត្យឡើងវិញជានិច្ច។
+- ប្រសិនបើការបង្រៀនមួយចំនួនមានភាពស្រងូតស្រងាត់អ្នកអាចរំលងដល់ក្រោមហើយមើលវីដេអូគណិតវិទ្យាដែលដាច់ពីគ្នាដើម្បីទទួលបានចំណេះដឹងជាមូលដ្ឋាន។
+- [ ] [Harvard CS50 - Asymptotic Notation (វីដេអូ)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
+- [ ] [កំណត់ចំណាំ Big-O (ការបង្រៀនរហ័សទូទៅ) (វីដេអូ)](https://www.youtube.com/watch?v=V6mKVRU1evU)
+- [ ] [Big O Notation (និង Omega និង Theta) - ការពន្យល់គណិតវិទ្យាល្អបំផុត (វីដេអូ)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
+- [ ] Skiena៖
+ - [វីដេអូ](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ស្លាយ](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf)
+- [ ] [ការណែនាំមួយចំពោះការវិភាគស្មុគស្មាញនៃគណិតវិទ្យា](http://discrete.gr/complexity/)
+- [ ] [លំដាប់នៃការលូតលាស់ (វីដេអូ)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX)
+- [ ] [ការវិភាគអាមីស្តូតូទិក (Amortized) (វីដេអូ)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM)
+- [ ] [UC Berkeley Big O (មានវីដេអូ)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98)
+- [ ] [UC Berkeley Big Omega (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc)
+- [ ] [ការវិភាគរំលោះ (Amortized) (វីដេអូ)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
+- [ ] [បង្ហាញរូបភាព "Big-O" (វីដេអូ)](https://www.coursera.org/lecture/alacticmic-thinking-1/illustrating-big-o-YVqzv)
+- [ ] TopCoder (រួមបញ្ចូលទាំងទំនាក់ទំនងកើតឡើងវិញនិងទ្រឹស្តីបទមេ)៖
+ - [ភាពស្មុគស្មាញនៃការគណនា៖ ផ្នែកទី ១](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/)
+ - [ភាពស្មុគស្មាញនៃការគណនា៖ ផ្នែកទី ២](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/)
+- [ ] [សន្លឹកជំនួយ](http://bigocheatsheet.com/)
+
+---
+
+### Data Structures
+## រចនាសម្ព័ន្ធទិន្នន័យ
+
+- ### Arrays
+ - អនុវត្តវ៉ិចទ័រប្តូរទំហំដោយស្វ័យប្រវត្តិ។
+ - [ ] ការពិពណ៌នា៖
+ - [Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays)
+ -[UC Berkeley CS61B - អារេ លីនែអ៊ែរ និង ពហុវិមាត្រ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (ចាប់ផ្តើមមើលចាប់ពី ១៥នាទី ៣២វិនាទី)
+ - [Arrays មូលដ្ឋាន (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4)
+ - [ពហុវិមាត្រ (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4)
+ - [Arrays ឌីណាមិចេ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays)
+ - [Jagged Arrays (វីដេអូ)](https://www.youtube.com/watch?v=1jtrQqYpt7g)
+ - [Jagged Arrays (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4)
+ - [ការប្តូរទំហំ Arrays (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4)
+ - [ ] អនុវត្តវ៉ិចទ័រ (បំលែង Arrays ដោយប្តូរទំហំស្វ័យប្រវត្តិ)៖
+ - [ ] អនុវត្តការសរសេរកូដដោយប្រើArrays និង ទ្រនិចចង្អុល និង គណិតទ្រនិចដើម្បីលោតទៅសន្ទស្សន៍មួយ។
+ - [ ] Arrays ទិន្នន័យថ្មីដែលមានអង្គចងចាំបម្រុងទុក
+ - អាចបែងចែកArraysនៅក្រោមក្រណាត់ដោយគ្រាន់តែមិនប្រើលក្ខណៈពិសេសរបស់វា
+ - ចាប់ផ្តើមជាមួយលេខ ១៦ ឬបើលេខចាប់ផ្តើមធំជាងប្រើថាមពល ២ - ១៦, ៣២, ៦៤, ១២៨
+ - [ ] size() - ចំនួនធាតុ
+ - [ ] capacity() - ចំនួនធាតុដែលវាអាចផ្ទុកបាន
+ - [ ] is_empty()
+ - [ ] at(index) - ត្រឡប់ធាតុនៅទីតាំងដែលបានផ្តល់ឱ្យ បេីទីតាំងនៅក្រៅព្រំដែន វានឹង មានកុំហស
+ - [ ] push(item)
+ - [ ] insert(index, item) - បញ្ចូលធាតុនៅទីតាំង ប្តូរតម្លៃទីតាំង និងធាតុនៅខាងក្រោមទៅខាងស្តាំ
+ - [ ] prepend (item) - អាចប្រើបញ្ចូលខាងលើនៅទីតាំង ០
+ - [ ] pop() - ដកចេញពីចុងបញ្ចប់តម្លៃត្រឡប់មកវិញ
+ - [ ] delete(index) - លុបធាតុនៅទីតាំងដែលអោយ ផ្លាស់ប្តូរធាតុនៅពីក្រោយទាំងអស់
+ - [ ] remove(item) - រកមើលតម្លៃនិងយកទីតាំងចេញដែលផ្ទុកវាចេញ (ទោះបីជានៅកន្លែងច្រើនក៏ដោយ)
+ - [ ] find(item) - រកមើលតម្លៃហើយត្រឡប់វិញនៅទីតាំងដំបូងជាមួយតម្លៃនោះ បើរកមិនឃើញត្រលប់វិញ -1
+ - [ ] resize(new_capacity) // មុខងារឯកជន
+ - ពេលទំហំ Array ដល់កំណត់, ផ្លាស់ប្តូរទំហំទ្វេដងទំហំ
+ - នៅពេលដែលចាប់យកវត្ថុមួយ ប្រសិនបើទំហំគឺ 1/4 នៃទំហំសរុប, ផ្លាស់ប្តូរទំហំដល់ពាក់កណ្តាល
+ - [ ] ពេលវេលា
+ - O(១) ត្រូវបន្ថែម / ដកចេញនៅចុងបញ្ចប់ (សងវិញសម្រាប់ការបែងចែកសម្រាប់ទំហំបន្ថែម) ទីតាំង
+ - O(n) ដើម្បីបញ្ចូល / ដកចេញនៅកន្លែងផ្សេងទៀត
+ - [ ] លំហ
+ - ជាប់ទាក់ទងនឹងការចងចាំដូច្នេះភាពជិតស្និទ្ធជួយដល់ការអនុវត្ត
+ - ទំហំត្រូវការ = (ទំហំ Array, ដែល >= n) * ទំហំនៃធាតុ, ប៉ុន្តែបើទោះបីជា 2n, នៅតែ O (n)
+
+---
+
+- ### Linked Lists
+ - [ ] ការពិពណ៌នា៖
+ - [ ] [Singly Linked Lists (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists)
+ - [ ] [CS 61B - Linked Lists ១ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0)
+ - [ ] [CS 61B - Linked Lists ២ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w)
+ - [ ] [កូដ C (វីដេអូ)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
+ - មិនមែនវីដេអូទាំងមូលទេគឺគ្រាន់តែជាផ្នែកអំពីរចនាសម្ព័ន្ធ (Data Structure) និងការបែងចែក Memory ។
+ - [ ] Linked List vs Arrays:
+ - [Core Linked Lists Vs Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays)
+ - [នៅក្នុងពិភពពិត Linked Lists Vs Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays)
+ - [ ] [ហេតុអ្វីអ្នកគួរចៀសវាង linked lists (វីដេអូ)](https://www.youtube.com/watch?v=YQs6IC-vgmo)
+ - [ ] Gotcha: you need pointer to pointer knowledge:
+ (សម្រាប់ពេលអ្នកហុច pointer ទៅមុខងារមួយដែលអាចផ្លាស់ប្តូរអាស័យដ្ឋានដែលព្រួញចង្អុល)
+ ទំព័រនេះគ្រាន់តែដើម្បីស្វែងយល់ពី pointer ទៅ pointer ។ ខ្ញុំមិនណែនាំបញ្ជីឈ្មោះបែបត្រាប់តាមនេះទេ។ ភាពងាយស្រួលក្នុងការអាននិងរក្សាបាននូវភាពលំបាកដោយសារតែភាពឆ្លាតវៃ។
+ - [Pointer ទៅ pointer](https://www.eskimo.com/~scs/cclass/int/sx8.html)
+ - [ ] អនុវត្ត (ខ្ញុំបានធ្វើដោយប្រើទ្រនិចកន្ទុយនិងដោយគ្មាន)៖
+ - [ ] size() - ត្រឡប់ចំនួនធាតុទិន្នន័យក្នុងបញ្ជី
+ - [ ] empty() - bool ត្រឡប់ពិតបើទទេ
+ - [ ] value_at(index) - ត្រឡប់តម្លៃនៃធាតុទី (ចាប់ផ្តើមពីលេខ ០ ដំបូង)
+ - [ ] push_front(តម្លៃ) - បន្ថែមធាតុនៅខាងមុខបញ្ជី
+ - [ ] pop_front() - យកធាតុខាងមុខចេញហើយប្រគល់តម្លៃរបស់វាមកវិញ
+ - [ ] push_back(តម្លៃ) - បន្ថែមធាតុនៅចុងបញ្ចប់
+ - [ ] pop_back() - យកធាតុបញ្ចប់ហើយត្រឡប់តម្លៃរបស់វា
+ - [ ] front() - ទទួលបានតម្លៃនៃធាតុខាងមុខ
+ - [ ] back() - ទទួលបានតម្លៃនៃធាតុបញ្ចប់
+ - [ ] insert(index, តម្លៃ) - បញ្ចូលតម្លៃនៅindex ដូច្នេះធាតុបច្ចុប្បន្ននៅindexនោះត្រូវបានចង្អុលទៅធាតុថ្មីនៅindex។
+ - [ ] erase(index) - យក Node ចេញនៅ index ដែលបានផ្តល់ឱ្យ
+ - [ ] value_n_from_end(n) - ត្រឡប់តម្លៃ Node ទីពីខាងចុងបញ្ជី
+ - [ ] reverse() - បញ្ច្រាស់បញ្ជី
+ - [ ] remove_value(តម្លៃ) - លុបធាតុដំបូងក្នុងបញ្ជីជាមួយតម្លៃនេះ
+ - [ ] Doubly-linked List
+ - [ការពិពណ៌នា (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists)
+ - មិនចាំបាច់អនុវត្តទេ
+
+---
+
+- ### Stack
+ - [ ] [Stack (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks)
+ - [ ] [ការប្រើ Stack ចូលមុនចេញក្រោយ (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4)
+ - [ ] នឹងមិនអនុវត្តទេ។ ការអនុវត្តជាមួយ Array គឺមិនសំខាន់។
+
+- ### Queue
+ - [ ] [ការប្រើ Queue ចូលមុនចេញមុន(វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4)
+ - [ ] [Queue (វីដេអូ)](https://www.coursera.org/lecture/data-structures/queues-EShpq)
+ - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer)
+ - [ ] [Queue អាទិភាព (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4)
+ - [ ] ប្រើ linked-list ដែលមានភ្ជាប់ជាមួយទ្រនិចនៅកន្ទុយ៖
+ - enqueue(តម្លៃ) - បន្ថែមតម្លៃនៅទីតាំងនៅកន្ទុយ
+ - dequeue() - ត្រឡប់តម្លៃនិងយកធាតុដែលបានបន្ថែមថ្មីៗចេញ (ផ្នែកខាងមុខ)
+ - empty()
+ - [ ] អនុវត្តដោយប្រើអារេ Array ទំហំថេរ៖
+ - enqueue(តម្លៃ) - បន្ថែមធាតុនៅចុងបញ្ចប់នៃការផ្ទុកដែលមាន
+ - dequeue() - ត្រឡប់តម្លៃនិងយកធាតុដែលបានបន្ថែមថ្មីៗចេញ
+ - empty()
+ - full()
+ - [ ] ថ្លៃ៖
+ - ការអនុវត្តមិនល្អដោយប្រើlinked listដែលអ្នករៀបជាជួរនៅនឹងក្បាលនិងដេស្កាយនៅកន្ទុយប្រហែលជា O(n)
+ ដោយសារតែអ្នកត្រូវការនៅជាប់នឹងធាតុចុងក្រោយ, បណ្តាលឱ្យ dequeue គ្នាឆ្លងកាត់ពេញលេញ
+ - enqueue: O(1) (amortized, linked list and array [probing])
+ - dequeue: O(1) (linked list and array)
+ - empty: O(1) (linked list and array)
+
+- ### តារាងហាស (Hash table)
+ - [ ] វីដេអូ៖
+ - [ ] [Hashing with Chaining (វីដេអូ)](https://www.youtube.com/watch?v=0M_kIqwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8)
+ - [ ] [Table Doubling, Karp-Rabin (វីដេអូ)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [Open Addressing, Cryptographic Hashing (វីដេអូ)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [PyCon 2010: វចនានុក្រមដ៏អស្ចារ្យ (វីដេអូ)](https://www.youtube.com/watch?v=C4Kc8xzcA68)
+ - [ ] [(កម្រិតខ្ពស់) Randomization: Universal & Perfect Hashing (វីដេអូ)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11)
+ - [ ] [(ជឿនលឿន) Perfect hashing (វីដេអូ)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4)
+
+ - [ ] វគ្គសិក្សាអនឡាញ៖
+ - [ ] [ស្វែងយល់អំពីមុខងារ Hash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4)
+ - [ ] [ការប្រើតារាងHash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4)
+ - [ ] [គាំទ្រ Hash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_04- ឧបត្ថម្ភគាំទ្រហាន់ឌ្រី)
+ - [ ] [តារាងជំនួយភាសា Hash(វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4)
+ - [ ] [Core Hash Tables (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables)
+ - [ ] [រចនាសម្ព័ន្ធទិន្នន័យ (វីដេអូ)](https://www.coursera.org/learn/data-structures/home/week/4)
+ - [ ] [បញ្ហាសៀវភៅទូរស័ព្ទ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem)
+ - [តារាងចែកចាយ]
+ - [ការផ្ទុកឡើងភ្លាមៗនិងការបង្កើនប្រសិទ្ធភាពផ្ទុកនៅក្នុងប្រអប់ឯកសារ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox)
+ - [តារាងហាសចែកចាយ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables)
+
+ - [ ] អនុវត្តជាមួយអារេដោយប្រើការស៊ើបអង្កេតលីនេអ៊ែរ
+ - hash(k, m) - m គឺជាទំហំនៃតារាង hash
+ - add(key, value) - ប្រសិនបើមានកូនសោររួចហើយ, ធ្វើបច្ចុប្បន្នភាពតម្លៃ
+ - exists(key)
+ - get(key)
+ - remove(key)
+
+---
+
+### More Knowledge
+## ចំណេះដឹងបន្ថែម
+
+- ### Binary search
+ - [ ] [Binary search (វីដេអូ)](https://www.youtube.com/watch?v=D5SrAga1pno)
+ - [ ] [Binary search (វីដេអូ)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search)
+ - [ ] [លម្អិត](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/)
+ - [ ] អនុវត្ត៖
+ - Binary search (នៅលើជួរអារេនៃចំនួនគត់)
+ - Binary search ដោយប្រើការហៅខ្លួនឯង
+
+- ### ប្រតិបតិ្តការ Bitwise
+ - [ ] [សន្លឹកជំនួយ Bits](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf)
+ - អ្នកគួរតែស្គាល់ អំណាច ២ ពី (២ ^ ១ ដល់ ២ ^ ១៦ និង ២ ^ ៣២)
+ - [ ] ទទួលបានការយល់ដឹងដ៏ល្អអំពីការរៀបចំBitsជាមួយ៖ &, |, ^, ~, >>, <<
+ - [ ] [ពាក្យ](https://en.wikipedia.org/wiki/Word_ (computer_architecture))
+ - [ ] ការណែនាំល្អ៖
+ ការធ្វើចលនាBits (វីដេអូ)](https://www.youtube.com/watch?v=7jkIUgLC29I)
+ - [ ] [C ការបង្រៀនសរសេរកម្មវិធី ២-១០: ប្រតិបត្តិការ Bitwise (វីដេអូ)](https://www.youtube.com/watch?v=d0AwjSpNXR0)
+ - [ ] [ការរៀបចំBits](https://en.wikipedia.org/wiki/Bit_manipulation)
+ - [ ] [ប្រតិបតិ្តការ Bitwise](https://en.wikipedia.org/wiki/Bitwise_operation)
+ - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html)
+ - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/)
+ - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html)
+ - [ ] [Bit Hacks (វីដេអូ)](https://www.youtube.com/watch?v=ZusiKXcz_ac)
+ - [ ] 2s និង 1s បំពេញបន្ថែម
+ - [Binary: Plusses & Minuses (ហេតុអ្វីយើងប្រើសមពីរ) (វីដេអូ)](https://www.youtube.com/watch?v=lKTsv6iVxV4)
+ - [១s បំពេញ](https://en.wikipedia.org/wiki/Ones%27_complement)
+ - [២ វិនាទីបំពេញ](https://en.wikipedia.org/wiki/Two%27s_complement)
+ - [ ] រាប់សំណុំ bits
+ - [វិធី ៤ យ៉ាងដើម្បីរាប់ប៊ីតជាសាមសិបប៊ីត (វីដេអូ)](https://youtu.be/Hzuzo9NJrlc)
+ - [រាប់ប៊ីត](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan)
+ - [របៀបរាប់ចំនួនសំណុំប៊ីតក្នុងចំនួនគត់ ៣២ ប៊ីត](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit- ចំនួនគត់)
+ - [ ] ប្តូរតម្លៃ
+ - [ប្តូរ](https://bits.stephan-brumme.com/swap.html)
+ - [ ] តម្លៃដាច់ខាត:
+ - [អាំងតេក្រាលពេញលេញ](https://bits.stephan-brumme.com/absInteger.html)
+
+---
+
+## Trees
+
+- ### Trees - កំណត់ត្រា និង ព័ត៌មាន
+ - [ ] [ស៊េរី៖ ចំនុចសំខាន់ Trees (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
+ - [ ] [ស៊េរី៖ Trees (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
+ - ការសាងសង់ tree
+ - ការឆ្លងកាត់ tree
+ - ក្បួនដោះស្រាយ
+ - [ ] [BFS(breadth-first search) និង DFS(depth-first search) (វីដេអូ)](https://www.youtube.com/watch?v=uWL6FJhq5fM)
+ - កំណត់សំគាល់របស់ BFS:
+ - level order (BFS, ដោយប្រេី queue)
+ - ភាពស្មុគស្មាញពេលវេលា: O(n)
+ - ភាពស្មុគស្មាញនៃលំហ: ល្អបំផុត៖ O(1), អាក្រក់បំផុត៖ O(n/2)=O(n)
+ - DFS notes:
+ - ភាពស្មុគស្មាញពេលវេលា: O(n)
+ - ភាពស្មុគស្មាញនៃលំហ:
+ ល្អបំផុត៖ O(log n) - មធ្យមកម្ពស់ tree
+ អាក្រក់បំផុត៖ O(n)
+ - inorder (DFS: ឆ្វេង, ខ្លួនឯង, ស្តាំ)
+ - postorder (DFS: ឆ្វេង, ស្តាំ, ខ្លួនឯង)
+ - preorder (DFS: self, left, right)
+
+- ### Binary search trees: BSTs
+ - [ ] [ការពិនិត្យឡើងវិញ Binary Search Tree (វីដេអូ)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [ស៊េរី (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees)
+ - ចាប់ផ្តើមជាមួយតារាងនិមិត្តសញ្ញាហើយឆ្លងកាត់ការអនុវត្ត BST
+ - [ ] [សេចក្តីផ្តើម (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction)
+ - [ ] [MIT (វីដេអូ)](https://www.youtube.com/watch?v=9Jry5-82I68)
+ - C/C++:
+ - [ ] [Binary search tree - ការអនុវត្តក្នុង C/C++ (វីដេអូ)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28)
+ - [ ] [BST ការអនុវត្តក្នុង - ការបែងចែក memory ក្នុង stack និង heap (វីដេអូ)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29)
+ - [ ] [ស្វែងរកធាតុតូចបំផុត និង ធំបំផុតនៅក្នុង binary search tree (វីដេអូ)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [រកកំពស់ binary tree (វីដេអូ)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31)
+ - [ ] [Binary tree traversal - យុទ្ធសាស្ត្រ breadth-first និង depth-first (វីដេអូ)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32)
+ - [ ] [Binary tree: Level Order Traversal (វីដេអូ)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [Binary tree traversal: Preorder, Inorder, Postorder (វីដេអូ)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [ពិនិត្យមើលថាតើ binary tree គឺ binary search tree រឺទេ (វីដេអូ)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [លុបធាតុពី Binary Search Tree (វីដេអូ)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36)
+ - [ ] [Inorder Successor ក្នុង binary search tree មួយ (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] ការអនុវត្ត:
+ - [ ] insert // ដាក់ធាតុក្នុង tree
+ - [ ] get_node_count // ទទួលចំនួនធាតុដែលផ្ទុក
+ - [ ] print_values // បង្ហាញតម្លៃក្នុង tree, ពី តូច ទៅ ធំ
+ - [ ] delete_tree
+ - [ ] is_in_tree // ត្រឡប់វិញ ពិត ប្រសិនបេីតម្លៃក្នុង tree
+ - [ ] get_height // ត្រឡប់វិញ កំពស់ក្នុង nodes (កំពស់ single node គឺ 1)
+ - [ ] get_min // ត្រឡប់វិញ ធាតុតូចជាងគេ
+ - [ ] get_max // ត្រឡប់វិញ ធាតុធំជាងគេ
+ - [ ] is_binary_search_tree
+ - [ ] delete_value
+ - [ ] get_successor // ត្រឡប់តម្លៃខ្ពស់បំផុតបន្ទាប់នៅក្នុងtreeបន្ទាប់ពីតម្លៃដែលបានផ្ដល់ ៕ បើគ្មានត្រឡប់ -1
+
+- ### Heap / Priority Queue / Binary Heap
+ - visualized as a tree, but is usually linear in storage (array, linked list)
+ - [ ] [Heap](https://en.wikipedia.org/wiki/Heap_(data_structure))
+ - [ ] [សេចក្តីផ្តើម (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction)
+ - [ ] [ការអនុវត្តដំបូង (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations)
+ - [ ] [Binary Trees (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees)
+ - [ ] [កំពស់ Tree (វីដេអូ)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark)
+ - [ ] [ប្រតិបត្តិការមូលដ្ឋាន (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations)
+ - [ ] [Binary Trees ពេញលេញ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees)
+ - [ ] [Pseudocode (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode)
+ - [ ] [Heap Sort - លោតដើម្បីចាប់ផ្ដើម (វីដេអូ)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291)
+ - [ ] [Heap Sort (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort)
+ - [ ] [ការកសាង heap (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap)
+ - [ ] [MIT: Heaps និង Heap Sort (វីដេអូ)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [CS 61B មេរៀន 24: Priority Queues (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE)
+ - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw)
+ - [ ] ការអនុវត្ត max-heap:
+ - [ ] insert
+ - [ ] sift_up - ត្រូវការសំរាប់បញ្ចូល
+ - [ ] get_max - ត្រឡប់ធាតុអតិបរិមាដោយមិនយកវាចេញ
+ - [ ] get_size() - ត្រឡប់ចំនួននៃធាតុដែលបានរក្សាទុក
+ - [ ] is_empty() - ត្រឡប់ពិតប្រសិនបើ heap មិនមានធាតុ
+ - [ ] extract_max - ត្រឡប់ធាតុអតិបរិមាយកវាចេញ
+ - [ ] sift_down - ត្រូវការសំរាប់ extract_max
+ - [ ] remove(i) - យកធាតុចេញនៅ index x
+ - [ ] heapify - បង្កើតheap ពីធាតុជាច្រើនដែលត្រូវការសម្រាប់ heap_sort
+ - [ ] heap_sort() - យកarray ដែលមិនបានតម្រៀបហើយប្រែក្លាយវាទៅជាកន្លែងដែលបានតម្រៀបតាមកន្លែងដោយប្រើheapអតិបរមា។ t
+ - ចំណាំ៖ ការប្រើ heap តូច ជំនួសនឹងជួយសន្សំប្រតិបត្តិការ ប៉ុន្តែត្រូវការទំហំទ្វេដង (មិនអាចធ្វើនៅនឹងកន្លែង) ។
+
+---
+
+## Sorting
+
+- [ ] កំណត់សំគាល់:
+ - អនុវត្ត sorts និងដឹងពីករណីដែលល្អ និង ដែលអាក្រក់, ភាពស្មុគស្មាញជាមធ្យមនីមួយៗ:
+ - កុំប្រេី bubble sort - វាមិនល្អ - O(n^2), លុះត្រាតែ n <= 16
+ - [ ] ស្ថេរភាពក្នុងក្បួនដោះស្រាយ sorting ("តើ Quicksort មានស្ថេរភាពឬ?")
+ - [ស្ថេរភាពក្នុងក្បួនដោះស្រាយ Sorting](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability)
+ - [ស្ថេរភាពក្នុងក្បួនដោះស្រាយ Sorting](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms)
+ - [ស្ថេរភាពក្នុងក្បួនដោះស្រាយ Sorting](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/)
+ - [ស្ថេរភាពក្នុងក្បួនដោះស្រាយ Sorting](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf)
+ - [ ] តើក្បួនដោះស្រាយអ្វីខ្លះអាចត្រូវបានប្រើ linked lists? អាចត្រូវបានប្រើ arrays? អាចត្រូវបានប្រើទាំងពីរ?
+ - ខ្ញុំនឹងមិនណែនាំឱ្យ Sort ជាមួយ linked list ប៉ុន្តែអាចប្រេី Merge Sort។
+ - [Merge Sort សំរាប់ Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/)
+
+- សំរាប់ heapsort, សូមមេីល Heap data structure ខាងលេី. Heap sort គឺល្អ, ប៉ុន្តែមិនមានស្ថេរភាពទេ.
+
+- [ ] [Sedgewick - Mergesort (5 វីដេអូ)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
+ - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort)
+ - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort)
+ - [ ] [3. ភាពស្មុគស្មាញ Sorting](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity)
+ - [ ] [4. ប្រៀបធៀប](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators)
+ - [ ] [5. ស្ថេរភាព](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability)
+
+- [ ] [Sedgewick - Quicksort (4 វីដេអូរ)](https://www.coursera.org/learn/algorithms-part1/home/week/3)
+ - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort)
+ - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection)
+ - [ ] [3. Keys ស្ទួន](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys)
+ - [ ] [4. Sorts ជាប្រព័ន្ធ](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts)
+
+- [ ] UC Berkeley:
+ - [ ] [CS 61B មេរៀនទី 29: Sorting I (វីដេអូរ)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I)
+ - [ ] [CS 61B មេរៀនទី 30: Sorting II (វីដេអូរ)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk)
+ - [ ] [CS 61B មេរៀនទី 32: Sorting III (វីដេអូរ)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc)
+ - [ ] [CS 61B មេរៀនទី 33: Sorting V (វីដេអូរ)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4)
+
+- [ ] [Bubble Sort (វីដេអូរ)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB)
+- [ ] [វិភាគ Bubble Sort (វីដេអូរ)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB)
+- [ ] [Insertion Sort, Merge Sort (វីដេអូរ)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+- [ ] [Insertion Sort (វីដេអូរ)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB)
+- [ ] [Merge Sort (វីដេអូរ)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB)
+- [ ] [Quicksort (វីដេអូរ)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB)
+- [ ] [Selection Sort (វីដេអូរ)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB)
+
+- [ ] កូដ Merge sort:
+ - [ ] [ការប្រើប្រាស់ output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c)
+ - [ ] [ការប្រើប្រាស់ output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py)
+ - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc)
+- [ ] កូដ Quick sort:
+ - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c)
+ - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c)
+ - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py)
+
+- [ ] អនុវត្ត:
+ - [ ] Mergesort: O(n log n) ករណីមធ្យម និង អាក្រក់បំផុត
+ - [ ] Quicksort O(n log n) ករណីមធ្យម
+ - Selection sort និង insertion sort ទាំងពីរគឺ O(n^2) សំរាប់ករណីមធ្យម និង អាក្រក់បំផុត
+ - ចំពោះ heapsort, សូមមេីល Heap data structure ខាងលេី.
+
+- [ ] មិនចាំបាច់ទេ ប៉ុន្តែខ្ញុំសូមណែនាំពួកគេ:
+ - [ ] [Sedgewick - Radix Sorts (6 វីដេអូរ)](https://www.coursera.org/learn/algorithms-part2/home/week/3)
+ - [ ] [1. Strings ក្នុង Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java)
+ - [ ] [2. ការរាប់ Key Indexed](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting)
+ - [ ] [3. តម្រៀបខ្ទង់អក្សរដំបូងដែលមានខ្ទង់តិចបំផុត Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort)
+ - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort)
+ - [ ] [5. វិធី ៣ Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort)
+ - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
+ - [ ] [Radix Sort](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort)
+ - [ ] [Radix Sort (វីដេអូរ)](https://www.youtube.com/watch?v=xhr26ia4k38)
+ - [ ] [Radix Sort, Counting Sort (linear time given constraints) (វីដេអូរ)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (វីដេអូរ)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [Sorting in Linear Time (វីដេអូរ)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14)
+
+ជាការសង្ខេបនេះគឺជាការបង្ហាញជាក់ស្តែងនៃ [១៥ វិធីដោះស្រាយ Sorting](https://www.youtube.com/watch?v=kPRA0W1kECg) ។
+ប្រសិនបើអ្នកត្រូវការព័ត៌មានលម្អិតបន្ថែមលើប្រធានបទនេះសូមមើលផ្នែក "Sorting" នៅក្នុង [ព័ត៌មានលំអិតលើប្រធានបទមួយចំនួន](#additional-detail-on-some-subjects)
+
+---
+
+## Graphs
+
+Graphs អាចត្រូវបានប្រើដើម្បីបង្ហាញពីបញ្ហាជាច្រើននៅក្នុងវិទ្យាសាស្ត្រកុំព្យូទ័រ ដូចជា Trees និង Sorting។
+
+- កំណត់ចំណាំ:
+ - មានវិធីជាមូលដ្ឋានចំនួន ៤ ដើម្បីតំណាង graph ក្នុង memory:
+ - objects និង pointers
+ - adjacency matrix
+ - adjacency list
+ - adjacency map
+ - ស្គាល់ខ្លួនឯងជាមួយនឹង Graphs និង គុណសម្បត្តិនិងគុណវិបត្តិរបស់វា
+ - BFS និង DFS - ដឹងពីភាពស្មុគស្មាញក្នុងការគណនាការជួញដូររបស់ពួកគេ និង វិធីអនុវត្តកូដពិតប្រាកដ
+ - នៅពេលសួរសំណួរសូមស្វែងរកដំណោះស្រាយដែលមានមូលដ្ឋានលើ Graphs ជាមុនសិនបន្ទាប់មកបន្តទៅមុខទៀតប្រសិនបើគ្មាន។
+
+- [ ] MIT(វីដេអូ):
+ - [ ] [ការស្វែងរក Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13)
+ - [ ] [ការស្វែងរក Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14)
+
+- [ ] ការបង្រៀន Skiena - ការណែនាំ:
+ - [ ] [CSE373 2012 - មេរៀនទី 11 - Graph Data Structures (វីដេអូ)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
+ - [ ] [CSE373 2012 - មេរៀនទី 12 - Breadth-First Search (វីដេអូ)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
+ - [ ] [CSE373 2012 - មេរៀនទី 13 - Graph Algorithms (វីដេអូ)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13)
+ - [ ] [CSE373 2012 - មេរៀនទី 14 - Graph Algorithms (បន្ត) (វីដេអូ)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - មេរៀនទី 15 - Graph Algorithms (បន្ត 2) (វីដេអូ)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - មេរៀនទី 16 - Graph Algorithms (បន្ត 3) (វីដេអូ)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+
+- [ ] Graphs (ពិនិត្យឡើងវិញ និង ច្រើនទៀត):
+
+ - [ ] [6.006 Single-Source Shortest Paths Problem (វីដេអូ)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.006 Dijkstra (វីដេអូ)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.006 Bellman-Ford (វីដេអូ)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17)
+ - [ ] [6.006 Speeding Up Dijkstra (វីដេអូ)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
+ - [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - មេរៀនទី 6 (វីដេអូ)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - មេរៀនទី 7 (វីដេអូ)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
+ - [ ] [Aduni: Graph Algorithms III: Shortest Path - មេរៀនទី 8 (វីដេអូ)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
+ - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - មេរៀនទី 9 (វីដេអូ)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
+ - [ ] ~~[CS 61B 2014 (starting at 58:09) (វីដេអូ)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)~~
+ - [ ] [CS 61B 2014: Weighted graphs (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k)
+ - [ ] [Greedy Algorithms: Minimum Spanning Tree (វីដេអូ)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (វីដេអូ)](https://www.youtube.com/watch?v=RpgcYiky7uw)
+
+- វគ្គសិក្សា Coursera:
+ - [ ] [Algorithms on Graphs (វីដេអូ)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
+
+- ខ្ញុំនឹងអនុវត្ត:
+ - [ ] DFS ជាមួយ adjacency list (recursive)
+ - [ ] DFS ជាមួយ adjacency list (iterative with stack)
+ - [ ] DFS ជាមួយ adjacency matrix (recursive)
+ - [ ] DFS ជាមួយ adjacency matrix (iterative with stack)
+ - [ ] BFS ជាមួយ adjacency list
+ - [ ] BFS ជាមួយ adjacency matrix
+ - [ ] single-source shortest path (Dijkstra)
+ - [ ] minimum spanning tree
+ - DFS-based algorithms (សូមមេីល Aduni វីដេអូ ខាងលេី):
+ - [ ] ពិនិត្យ cycle (ត្រូវការសំរាប់ topological sort ព្រោះយើងនឹងពិនិត្យមើលវដ្តមុនពេលចាប់ផ្តើម)
+ - [ ] topological sort
+ - [ ] រាប់សមាសធាតុដែលបានភ្ជាប់នៅក្នុងក្រាហ្វ
+ - [ ] រាយសមាសធាតុដែលភ្ជាប់គ្នាយ៉ាងខ្លាំង
+ - [ ] ពិនិត្យក្រាហ្វិច bipartite
+
+---
+
+## Even More Knowledge
+## ចំណេះដឹងបន្ធែម
+
+- ### Recursion
+ - [ ] ការបង្រៀនរបស់ Stanford លេី recursion និង backtracking:
+ - [ ] [មេរៀនទី 8 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
+ - [ ] [មេរៀនទី 9 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
+ - [ ] [មេរៀនទី 10 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
+ - [ ] [មេរៀនទី 11 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
+ - នៅពេលដែលសមរម្យដើម្បីប្រើវា
+ - តេី tail recursion ប្រសើរជាងអត់?
+ - [ ] [អ្វីជា Tail Recursion និង ហេតុអ្វីបានជាវាអាក្រក់?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
+ - [ ] [Tail Recursion (វីដេអូ)](https://www.youtube.com/watch?v=L1jjXGfxozc)
+
+- ### Dynamic Programming
+ - អ្នកប្រហែលជាមិនឃើញមានបញ្ហានៃការសរសេរកម្មវិធី dynamic programming នៅក្នុងបទសម្ភាសន៍របស់អ្នកទេ ប៉ុន្តែវាសមនឹងទទួលបានការទទួលស្គាល់នូវបញ្ហាមួយក្នុងនាមជាបេក្ខជនសម្រាប់ការសរសេរកម្មវិធី dynamic programming។
+ - ប្រធានបទនេះអាចជាការពិបាកណាស់, ព្រោះថាបញ្ហារបស់ DP នីមួយៗត្រូវបានកំណត់ថាជាការទាក់ទងគ្នា
+ - ខ្ញុំស្នើឱ្យក្រឡេកមើលឧទាហរណ៍ជាច្រើននៃបញ្ហា DP រហូតទាល់តែអ្នកមានការយល់ដឹងច្បាស់អំពីគំរូដែលពាក់ព័ន្ធ។
+ - [ ] វីដេអូ:
+ - វីដេអូ Skiena អាចពិបាកធ្វើតាមព្រោះពេលខ្លះគាត់ប្រើក្តារខៀនដែលវាមើលមិនឃើញ
+ - [ ] [Skiena: CSE373 2012 - មេរៀនទី 19 - ការណែនាំអំពី Dynamic Programming (វីដេអូ)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718)
+ - [ ] [Skiena: CSE373 2012 - មេរៀនទី 20 - Edit Distance (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749)
+ - [ ] [Skiena: CSE373 2012 - មេរៀនទី 21 - ឧទាហរណ៍ Dynamic Programming (វីដេអូ)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406)
+ - [ ] [Skiena: CSE373 2012 - មេរៀនទី 22 - ការអនុវត្តកម្មវិធី Dynamic Programming (វីដេអូ)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22)
+ - [ ] [Simonson: Dynamic Programming 0 (ចាប់ផ្តេីមពី 59:18) (វីដេអូ)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558)
+ - [ ] [Simonson: Dynamic Programming I - មេរៀនទី 11 (វីដេអូ)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Simonson: Dynamic programming II - មេរៀនទី 12 (វីដេអូ)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12)
+ - [ ] បញ្ជីបញ្ហារបស់ DP (នីមួយៗខ្លី):
+ [Dynamic Programming (វីដេអូ)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+ - [ ] Yale Lecture notes:
+ - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming)
+ - [ ] Coursera:
+ - [ ] [បញ្ហា RNA secondary structure (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem)
+ - [ ] [A dynamic programming algorithm (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm)
+ - [ ] [បង្ហាញរូបភាពពីវិធីដោះស្រាយ DP (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm)
+ - [ ] [ពេលវេលាដំណើរការនៃ DP algorithm (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm)
+ - [ ] [DP vs. recursive implementation (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation)
+ - [ ] [Global pairwise sequence alignment (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
+ - [ ] [Local pairwise sequence alignment (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
+
+- ### Object-Oriented Programming
+ - [ ] [Optional: UML 2.0 Series (វីដេអូ)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
+ - [ ] គោលការណ៍ SOLID OOP: [គោលការណ៍ SOLID (វីដេអូ)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
+
+- ### Design patterns
+ - [ ] [ការពិនិត្យ Quick UML (វីដេអូ)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
+ - [ ] រៀនគំរូទាំងនេះ:
+ - [ ] strategy
+ - [ ] singleton
+ - [ ] adapter
+ - [ ] prototype
+ - [ ] decorator
+ - [ ] visitor
+ - [ ] factory, abstract factory
+ - [ ] facade
+ - [ ] observer
+ - [ ] proxy
+ - [ ] delegate
+ - [ ] command
+ - [ ] state
+ - [ ] memento
+ - [ ] iterator
+ - [ ] composite
+ - [ ] flyweight
+ - [ ] [ជំពូកទី ៦ (ភាគ ១) - Patterns (វីដេអូ)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
+ - [ ] [ជំពូកទី ៦ (ភាគ ២) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (វីដេអូ)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [ជំពូកទី ៦ (ភាគ ៣) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [ស៊េរីវីដេអូ (២៧ វីដេអូ)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
+ - [ ] [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
+ - ខ្ញុំដឹងថាសៀវភៅបទបញ្ញត្តិគឺ“ លំនាំរចនា៖ ធាតុផ្សំនៃកម្មវិធីដែលអាចប្រើឡើងវិញបាន” ប៉ុន្តែក្បាលទីមួយគឺល្អសម្រាប់អ្នកចាប់ផ្តើមដំបូង Object-Oriented ។
+ - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips)
+ - [ ] [Design patterns សម្រាប់មនុស្ស](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns)
+
+- ### Combinatorics (n choose k) & Probability
+ - [ ] [ជំនាញគណិតវិទ្យា៖ វិធីស្វែងរក Factorial, Permutation និង Combination (ជ្រើសរើស) (វីដេអូ)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
+ - [ ] [Make School: Probability (វីដេអូ)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
+ - [ ] [Make School: បន្ថែមលេី Probability និង Markov Chains (វីដេអូ)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
+ - [ ] Khan Academy:
+ - ប្លង់វគ្គសិក្សា:
+ - [ ] [ទ្រឹស្តីប្រូបាបដំបូង](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic)
+ - គ្រាន់តែវីដេអូ - ៤១ (វីដេអូនីមួយៗមានលក្ខណៈសាមញ្ញហើយវីដេអូនីមួយៗខ្លី)៖
+ - [ ] [ពន្យល់អំពីប្រូបាប (វីដេអូ)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
+
+- ### NP, NP-Complete និង Approximation Algorithms
+ - ដឹងពីបញ្ហាល្បីរបស់ NP-complete, ដូចជាអ្នកលក់ធ្វើដំណើរ និង បញ្ហា knapsack, ហើយអាចស្គាល់ពួកគេនៅពេលអ្នកសម្ភាសសួរអ្នកដោយក្លែងបន្លំ។.
+ - ដឹងថាអ្វីជា NP-complete.
+ - [ ] [Computational Complexity (វីដេអូ)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23)
+ - [ ] Simonson:
+ - [ ] [Greedy Algs. II & Intro to NP Completeness (វីដេអូ)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939)
+ - [ ] [NP Completeness II & Reductions (វីដេអូ)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [NP Completeness III (វីដេអូ)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [NP Completeness IV (វីដេអូ)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18)
+ - [ ] Skiena:
+ - [ ] [CSE373 2012 - មេរៀនទី 23 - Introduction to NP-Completeness (វីដេអូ)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508)
+ - [ ] [CSE373 2012 - មេរៀនទី 24 - NP-Completeness Proofs (វីដេអូ)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - មេរៀនទី 25 - NP-Completeness Challenge (វីដេអូ)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [Complexity: P, NP, NP-completeness, Reductions (វីដេអូ)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22)
+ - [ ] [Complexity: Approximation Algorithms (វីដេអូ)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24)
+ - [ ] [Complexity: Fixed-Parameter Algorithms (វីដេអូ)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - Peter Norvig ពិភាក្សាអំពីដំណោះស្រាយដែលល្អប្រសើរបំផុតចំពោះបញ្ហាអ្នកលក់ធ្វើដំណើរ៖
+ - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb)
+ - ទំព័រ 1048 - 1140 ក្នុង CLRS ប្រសិនបើអ្នកមានវា.
+
+- ### Caches
+ - [ ] LRU cache:
+ - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (វីដេអូ)](https://www.youtube.com/watch?v=R5ON3iwx78M)
+ - [ ] [Implementing LRU (វីដេអូ)](https://www.youtube.com/watch?v=bq6N7Ym81iI)
+ - [ ] [LeetCode - 146 LRU Cache (C++) (វីដេអូ)](https://www.youtube.com/watch?v=8-FZRAjR7qU)
+ - [ ] CPU cache:
+ - [ ] [MIT 6.004 L15: The Memory Hierarchy (វីដេអូ)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24)
+ - [ ] [MIT 6.004 L16: Cache Issues (វីដេអូ)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+
+- ### Processes and Threads
+ - [ ] Computer Science 162 - Operating Systems (25 វីដេអូ):
+ - សំរាប់ processes និង threads សូមមេីល វីដេអូ 1-11
+ - [Operating Systems and System Programming (វីដេអូ)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
+ - [តេី Process និង Thread ខុសគ្នាដូចម្តេច?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread)
+ - មាន:
+ - Processes, Threads, Concurrency issues
+ - តេី Process និង Thread ខុសគ្នាដូចម្តេច
+ - Processes
+ - Threads
+ - Locks
+ - Mutexes
+ - Semaphores
+ - Monitors
+ - តើពួកគេធ្វើការយ៉ាងដូចម្តេច?
+ - Deadlock
+ - Livelock
+ - CPU activity, interrupts, context switching
+ - Modern concurrency constructs with multicore processors
+ - [Paging, segmentation and virtual memory (វីដេអូ)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2)
+ - [Interrupts (វីដេអូ)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3)
+ - Process resource needs (memory: code, static storage, stack, heap, and also file descriptors, i/o)
+ - Thread resource needs (shares above (minus stack) with other threads in the same process but each has its own pc, stack counter, registers, and stack)
+ - Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy.
+ - Context switching
+ - How context switching is initiated by the operating system and underlying hardware?
+ - [ ] [threads in C++ (series - 10 វីដេអូ)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M)
+ - [ ] concurrency ក្នុង Python (វីដេអូ):
+ - [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1)
+ - [ ] [Python Threads](https://www.youtube.com/watch?v=Bs7vPNbB9JM)
+ - [ ] [Understanding the Python GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s)
+ - [reference](http://www.dabeaz.com/GIL)
+ - [ ] [David Beazley - Python Concurrency From the Ground Up: LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4)
+ - [ ] [Keynote David Beazley - Topics of Interest (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU)
+ - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY)
+
+- ### Testing
+ - To cover:
+ - តេី unit testing ដំណេីរការយ៉ាងដូចម្តេច ?
+ - អ្វីជា mock objects ?
+ - អ្វីជា integration testing ?
+ - អ្វីជា dependency injection ?
+ - [ ] [Agile Software Testing with James Bach (វីដេអូ)](https://www.youtube.com/watch?v=SAhJf36_u5U)
+ - [ ] [Open Lecture by James Bach on Software Testing (វីដេអូ)](https://www.youtube.com/watch?v=ILkT_HV9DVU)
+ - [ ] [Steve Freeman - Test-Driven Development (that’s not what we meant) (វីដេអូ)](https://vimeo.com/83960706)
+ - [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf)
+ - [ ] Dependency injection:
+ - [ ] [slides](https://www.youtube.com/watch?v=IKD2-MAkXyQ)
+ - [ ] [Tao Of Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html)
+ - [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html)
+
+- ### Scheduling (ការរៀបចំកាលវិភាគ)
+ - នៅក្នុង OS, តេីវាដំណេីរការយ៉ាងដូចម្តេច ?
+ - អាចប្រមូលបាន Operating System videos
+
+- ### String searching & manipulations
+ - [ ] [Sedgewick - Suffix Arrays (វីដេអូ)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
+ - [ ] [Sedgewick - Substring Search (វីដេអូ)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
+ - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search)
+ - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search)
+ - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt)
+ - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore)
+ - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp)
+ - [ ] [Search pattern in text (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
+
+ ប្រសិនបើអ្នកត្រូវការព័ត៌មានលម្អិតបន្ថែមលើប្រធានបទនេះសូមមើលផ្នែក [Additional Detail on Some Subjects](#additional-detail-on-some-subjects).
+
+- ### Tries
+ - ចំណាំ មានការ Tries ផ្សេងៗគ្នា។ អ្នកខ្លះមានprefixes អ្នកខ្លះមិនមាន ហើយអ្នកខ្លះប្រើstring ជំនួសឱ្យbits ដើម្បីតាមដានផ្លូវ
+ - ខ្ញុំបានអានកូដប៉ុន្តែនឹងមិនអនុវត្តឡើយ
+ - [ ] [Sedgewick - Tries (3 វីដេអូ)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
+ - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries)
+ - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries)
+ - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations)
+ - [ ] [Notes on Data Structures and Programming Techniques](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries)
+ - [ ] វីដេអូខ្លីៗ:
+ - [ ] [Introduction To Tries (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries)
+ - [ ] [Performance Of Tries (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries)
+ - [ ] [Implementing A Trie (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie)
+ - [ ] [The Trie: A Neglected Data Structure](https://www.toptal.com/java/the-trie-a-neglected-data-structure)
+ - [ ] [TopCoder - Using Tries](https://www.topcoder.com/community/competitive-programming/tutorials/using-tries/)
+ - [ ] [Stanford Lecture (real world use case) (វីដេអូ)](https://www.youtube.com/watch?v=TJ8SkcUSdbU)
+ - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (វីដេអូ)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+
+- ### Floating Point Numbers
+ - [ ] simple 8-bit: [Representation of Floating Point Numbers - 1 (វីដេអូ - មានកំហុសក្នុងការគណនា - សូមមើលការពិពណ៌នាជាវីដេអូ)](https://www.youtube.com/watch?v=ji3SfClm8TU)
+ - [ ] 32 bit: [IEEE754 32-bit floating point binary (វីដេអូ)](https://www.youtube.com/watch?v=50ZYcZebIec)
+
+- ### Unicode
+ - [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html)
+ - [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/)
+
+- ### Endianness
+ - [ ] [Big And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html)
+ - [ ] [Big Endian Vs Little Endian (វីដេអូ)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
+ - [ ] [Big And Little Endian Inside/Out (វីដេអូ)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
+ - និយាយបច្ចេកទេសខ្លាំងណាស់សម្រាប់ kernel devs. កុំបារម្ភប្រសិនបេីមិនយល់ទាំងស្រុង
+ - ពាក់កណ្តាលទីមួយគឺគ្រប់គ្រាន់ហើយ
+
+- ### Networking (បណ្តាញ)
+ - ** ប្រសិនបើអ្នកមានបទពិសោធបណ្តាញឬចង់ក្លាយជាវិស្វករដែលអាចជឿជាក់បានឬវិស្វករប្រតិបត្តិការរំពឹងថានឹងមានសំណួរ **
+ - បើមិនដូច្នោះទេនេះគ្រាន់តែជាការល្អដើម្បីដឹង
+ - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org)
+ - [ ] [UDP and TCP: Comparison of Transport Protocols (វីដេអូ)](https://www.youtube.com/watch?v=Vdc8TCESIg8)
+ - [ ] [TCP/IP and the OSI Model Explained! (វីដេអូ)](https://www.youtube.com/watch?v=e5DEVa9eSN0)
+ - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (វីដេអូ)](https://www.youtube.com/watch?v=nomyRJehhnM)
+ - [ ] [HTTP (វីដេអូ)](https://www.youtube.com/watch?v=WGJrLqtX7As)
+ - [ ] [SSL and HTTPS (វីដេអូ)](https://www.youtube.com/watch?v=S2iBR2ZlZf0)
+ - [ ] [SSL/TLS (វីដេអូ)](https://www.youtube.com/watch?v=Rp3iZUvXWlM)
+ - [ ] [HTTP 2.0 (វីដេអូ)](https://www.youtube.com/watch?v=E9FxNzv1Tr8)
+ - [ ] [Video Series (21 វីដេអូ) (វីដេអូ)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j)
+ - [ ] [Subnetting Demystified - Part 5 CIDR Notation (វីដេអូ)](https://www.youtube.com/watch?v=t5xYI0jzOf4)
+ - [ ] Sockets:
+ - [ ] [Java - Sockets - Introduction (វីដេអូ)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s)
+ - [ ] [Socket Programming (វីដេអូ)](https://www.youtube.com/watch?v=G75vN2mnJeQ)
+
+## System Design, Scalability, Data Handling
+
+** អ្នកអាចរំពឹងថានឹងមានសំណួររចនាប្រព័ន្ធប្រសិនបើអ្នកមានបទពិសោធ 4+ ឆ្នាំ។ **
+
+- Scalability និង System Designគឺជាប្រធានបទដែលមានប្រធានបទជាច្រេីន និង ធនធានជាច្រើន ដោយសារវាត្រូវការគិតច្រេីនពេលបង្កេីតប្រព័ន្ធដែលល្អ
+ រំពឹងថានឹងចំណាយពេលបន្តិចលើរឿងនេះ
+- ការពិចារណា:
+ - Scalability
+ - Distill large data sets to single values
+ - Transform one data set to another
+ - Handling obscenely large amounts of data
+ - System design
+ - features sets
+ - interfaces
+ - class hierarchies
+ - designing a system under certain constraints
+ - simplicity and robustness
+ - tradeoffs
+ - performance analysis and optimization
+- [ ] **ចាប់ផ្តើមនៅទីនេះ**: [The System Design Primer](https://github.com/donnemartin/system-design-primer)
+- [ ] [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
+- [ ] [How Do I Prepare To Answer Design Questions In A Technical Inverview?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023)
+- [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/)
+- [ ] [Algorithm design](http://www.hiredintech.com/algorithm-design/)
+- [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (វីដេអូ)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
+- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below
+- [ ] [How to ace a systems design interview](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
+- [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/)
+- [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
+- [ ] [Transactions Across Datacenters (វីដេអូ)](https://www.youtube.com/watch?v=srOgpXECblk)
+- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
+- [ ] Consensus Algorithms:
+ - [ ] Paxos - [Paxos Agreement - Computerphile (វីដេអូ)](https://www.youtube.com/watch?v=s8JqcZtvnsM)
+ - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (វីដេអូ)](https://www.youtube.com/watch?v=P9Ydif5_qvE)
+ - [ ] [Easy-to-read paper](https://raft.github.io/)
+ - [ ] [Infographic](http://thesecretlivesofdata.com/raft/)
+- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
+- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
+- [ ] Scalability:
+ - អ្នកមិនត្រូវការរបស់ទាំងអស់នេះទេ។ គ្រាន់តែជ្រើសរើសយកចំណាប់អារម្មណ៍មួយចំនួនដែលអ្នកចាប់អារម្មណ៍។
+ - [ ] [Great overview (វីដេអូ)](https://www.youtube.com/watch?v=-W9F__D3oY4)
+ - [ ] ស៊េរីខ្លីៗ:
+ - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
+ - [Database](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database)
+ - [Cache](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache)
+ - [Asynchronism](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism)
+ - [ ] [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html)
+ - [ ] [Fallacies of Distributed Computing Explained](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf)
+ - [ ] [Pragmatic Programming Techniques](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html)
+ - [extra: Google Pregel Graph Processing](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html)
+ - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (វីដេអូ)](https://www.youtube.com/watch?v=modXC5IWTJI)
+ - [ ] [Introduction to Architecting Systems for Scale](http://lethain.com/introduction-to-architecting-systems-for-scale/)
+ - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (វីដេអូ)](https://www.youtube.com/watch?v=9nWyWwY2Onc)
+ - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (វីដេអូ)](https://www.youtube.com/watch?v=H4vMcD7zKM0)
+ - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/competitive-programming/tutorials/the-importance-of-algorithms/)
+ - [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html)
+ - [ ] [Scale at Facebook (2012), "Building for a Billion Users" (វីដេអូ)](https://www.youtube.com/watch?v=oodS71YtkGU)
+ - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(វីដេអូ)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4)
+ - [ ] [7 Years Of YouTube Scalability Lessons In 30 Minutes](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html)
+ - [វីដេអូ](https://www.youtube.com/watch?v=G-lGCC4KKok)
+ - [ ] [How PayPal Scaled To Billions Of Transactions Daily Using Just 8VMs](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html)
+ - [ ] [How to Remove Duplicates in Large Datasets](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/)
+ - [ ] [A look inside Etsy's scale and engineering culture with Jon Cowie (វីដេអូ)](https://www.youtube.com/watch?v=3vV4YiqKm1o)
+ - [ ] [What Led Amazon to its Own Microservices Architecture](http://thenewstack.io/led-amazon-microservices-architecture/)
+ - [ ] [To Compress Or Not To Compress, That Was Uber's Question](https://eng.uber.com/trip-data-squeeze/)
+ - [ ] [Asyncio Tarantool Queue, Get In The Queue](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html)
+ - [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
+ - [ ] [Google's Transition From Single Datacenter, To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
+ - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
+ - [ ] [Machine Learning Driven Programming: A New Programming For A New World](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
+ - [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
+ - [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
+ - [ ] [Tinder: How Does One Of The Largest Recommendation Engines Decide Who You'll See Next?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html)
+ - [ ] [Design Of A Modern Cache](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html)
+ - [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
+ - [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html)
+ - [ ] [How Does The Use Of Docker Effect Latency?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html)
+ - [ ] [A 360 Degree View Of The Entire Netflix Stack](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html)
+ - [ ] [Latency Is Everywhere And It Costs You Sales - How To Crush It](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it)
+ - [ ] [Serverless (very long, just need the gist)](http://martinfowler.com/articles/serverless.html)
+ - [ ] [What Powers Instagram: Hundreds of Instances, Dozens of Technologies](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances)
+ - [ ] [Cinchcast Architecture - Producing 1,500 Hours Of Audio Every Day](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html)
+ - [ ] [Justin.Tv's Live Video Broadcasting Architecture](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html)
+ - [ ] [Playfish's Social Gaming Architecture - 50 Million Monthly Users And Growing](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html)
+ - [ ] [TripAdvisor Architecture - 40M Visitors, 200M Dynamic Page Views, 30TB Data](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html)
+ - [ ] [PlentyOfFish Architecture](http://highscalability.com/plentyoffish-architecture)
+ - [ ] [Salesforce Architecture - How They Handle 1.3 Billion Transactions A Day](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html)
+ - [ ] [ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html)
+ - [ ] See "Messaging, Serialization, and Queueing Systems" way below for info on some of the technologies that can glue services together
+ - [ ] Twitter:
+ - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (វីដេអូ)](https://www.youtube.com/watch?v=5cKTP36HVgI)
+ - [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
+ - មេីលបន្ធែម "Mining Massive Datasets" video series in the [វីដេអូ](#video-series) section
+- [ ] ការអនុវត្តដំណើរការរចនាប្រព័ន្ធ៖ នេះគឺជាគំនិតមួយចំនួនដើម្បីព្យាយាមធ្វើការលើក្រដាសនីមួយៗដោយមានឯកសារមួយចំនួនស្តីពីវិធីដែលត្រូវបានដោះស្រាយនៅក្នុងពិភពពិត៖
+ - ពិនិត្យឡើងវិញ: [The System Design Primer](https://github.com/donnemartin/system-design-primer)
+ - [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
+ - flow:
+ 1. ស្វែងយល់ពីបញ្ហានិងវិសាលភាព
+ - កំណត់ករណីប្រើប្រាស់ដោយមានជំនួយពីអ្នកសម្ភាសន៍
+ - ស្នើលក្ខណៈបន្ថែម
+ - ដកចេញលក្ខណៈដែលអ្នកសម្ភាសន៍គិតថាលើស
+ - សន្មតថាភាពអាចរកបានខ្ពស់ត្រូវបានទាមទារបន្ថែមជាករណីប្រើប្រាស់
+ 2. គិតអំពីឧបសគ្គ៖
+ - សួរថាតើមានប៉ុន្មានសំណើរប៉ុន្មានក្នុងមួយខែ
+ - សួរថាតើមានសំណូមពរប៉ុន្មានក្នុងមួយវិនាទី (ពួកគេអាចស្ម័គ្រចិត្តឬធ្វើឱ្យអ្នកធ្វើគណនា)
+ - ប៉ាន់ស្មានអាននឹងសរសេរជាភាគរយ
+ - ចងចាំបទបញ្ជា ៨០/២០ ក្នុងពេលធ្វើការប៉ាន់ស្មាន
+ - តើទិន្នន័យប៉ុន្មានត្រូវបានសរសេរក្នុងមួយវិនាទី
+ - ការផ្ទុកសរុបត្រូវការក្នុងរយៈពេល ៥ ឆ្នាំ
+ - តើទិន្នន័យត្រូវអានប៉ុន្មានដងក្នុងមួយវិនាទី
+ 3. ការរចនាអរូបី៖
+ - ស្រទាប់ (សេវាកម្ម ទិន្នន័យ ឃ្លាំងសម្ងាត់ (cache) )
+ - ហេដ្ឋារចនាសម្ព័ន្ធ៖ ផ្ទុកតុល្យភាព(load balacing), សារ
+ - ទិដ្ឋភាពទូទៅរដុបនៃក្បួនដោះស្រាយគន្លឹះណាមួយដែលជំរុញសេវាកម្ម
+ - ពិចារណាការរាំងស្ទះនិងកំណត់ដំណោះស្រាយ
+ - លំហាត់:
+ - [Design a CDN network: old article](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972)
+ - [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake)
+ - [Design an online multiplayer card game](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html)
+ - [Design a key-value database](http://www.slideshare.net/dvirsky/introduction-to-redis)
+ - [Design a picture sharing system](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html)
+ - [Design a recommendation system](http://ijcai13.org/files/tutorial_slides/td3.pdf)
+ - [Design a URL-shortener system: copied from above](http://www.hiredintech.com/system-design/the-system-design-process/)
+ - [Design a cache system](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/)
+
+---
+
+## Final Review (ការពិនិត្យចុងក្រោយ)
+
+ ផ្នែកនេះនឹងមានវីដេអូខ្លីៗដែលអ្នកអាចមើលបានយ៉ាងរហ័សដើម្បីពិនិត្យឡើងវិញនូវគោលគំនិតសំខាន់ៗ។ វាល្អណាស់ប្រសិនបើអ្នកចង់ធ្វើឱ្យស្រស់ជាងមុន។
+
+- [ ] Series of 2-3 minutes short subject videos (23 វីដេអូ)
+ - [វីដេអូ](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22)
+- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (18 វីដេអូ):
+ - [វីដេអូ](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ)
+- [ ] [វីដេអូ Sedgewick - Algorithms I](https://www.coursera.org/learn/algorithms-part1)
+- [ ] [វីដេអូ Sedgewick - Algorithms II](https://www.coursera.org/learn/algorithms-part2)
+
+---
+
+## Coding Question Practice (ការអនុវត្តសំណួរសរសេរកូដ)
+
+ឥឡូវអ្នកដឹងពីប្រធានបទវិទ្យាសាស្ត្រកុំព្យូទ័រទាំងអស់ខាងលើ វាដល់ពេលត្រូវអនុវត្តការឆ្លើយសំនួរបញ្ហា។
+
+**ការអនុវត្តសំណួរសរសេរកូដមិនមែនអំពីការទន្ទេញចម្លើយចំពោះបញ្ហាសរសេរកម្មវិធីទេ។**
+
+មូលហេតុដែលអ្នកត្រូវអនុវត្តធ្វើបញ្ហាសរសេរកម្មវិធី៖
+- ការទទួលស្គាល់បញ្ហានិងកន្លែងដែលរចនាសម្ព័ន្ធទិន្នន័យត្រឹមត្រូវនិងក្បួនដោះស្រាយត្រូវគ្នា
+- ការប្រមូលផ្តុំតម្រូវការសម្រាប់បញ្ហា
+- និយាយពីបញ្ហាដូចជាអ្នកនឹងជួបអ្នកសម្ភាសន៍ដែរ
+- សរសេរកូដនៅលើក្តារខៀនឬក្រដាសមិនមែនកុំព្យូទ័រទេ
+- មានពេលវេលានិងចន្លោះស្មុគស្មាញសម្រាប់ដំណោះស្រាយរបស់អ្នក
+- សាកល្បងតេសដំណោះស្រាយរបស់អ្នក
+
+មានការណែនាំដ៏ល្អសំរាប់វិធីសាស្រ្តដោះស្រាយបញ្ហាដែលមានលក្ខណៈជាបញ្ហាក្នុងការសំភាសន៍។ អ្នកនឹងទទួលបានពីកម្មវិធីសៀវភៅសំភាសន៍ផងដែរប៉ុន្តែខ្ញុំបានរកឃើញថាលេចធ្លោនេះ៖
+[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/)
+
+គ្មានក្តារខៀននៅផ្ទះទេ? ខ្ញុំជាមនុស្សចំលែកនិងមានក្តារខៀនធំ។ ជំនួសឱ្យក្តារខៀន សូមរើសយកផ្ទាំងគំនូរធំ ៗ ពីហាងសិល្បៈ។ អ្នកអាចអង្គុយលើសាឡុងនិងអនុវត្តបាន។ នេះគឺជា "សាឡុងក្តារចុច" របស់ខ្ញុំ។
+ខ្ញុំបានបន្ថែមប៊ិចនៅក្នុងរូបថតសម្រាប់ខ្នាត។ ប្រសិនបើអ្នកប្រើប៊ិចអ្នកនឹងចង់លុបចោល។ ឆាប់រញ៉េរញ៉ៃ។ ខ្ញុំប្រើខ្មៅដៃនិងជ័រលុប។
+
+![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg)
+
+បន្ថែម:
+
+- [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/)
+- [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/)
+- [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php)
+- [Exercises for getting better at a given language](http://exercism.io/languages)
+
+**អាននិងធ្វើបញ្ហាកម្មវិធី (តាមលំដាប់លំដោយ):**
+
+- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
+ - ចម្លើយជា C, C++ និង Java
+- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
+ - ចម្លើយជា Java
+
+មេីលសៀភៅ [Book List above](#book-list)
+
+
+## Coding exercises/challenges
+
+នៅពេលដែលអ្នកបានរៀនខួរក្បាលរបស់អ្នកហើយ សូមដាក់ខួរក្បាលទាំងនោះឱ្យដំណើរការ។
+យកបញ្ហាប្រឈមនៃការសរសេរកូដជារៀងរាល់ថ្ងៃតាមដែលអ្នកអាចធ្វើបាន។
+
+- [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/)
+- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/)
+
+វីឌីអូសំភាសន៍ការសរសេរកូដ:
+- [IDeserve (88 វីដេអូ)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
+- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
+ - Super for walkthroughs of problem solutions
+- [Nick White - LeetCode Solutions (187 វីដេអូ)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-)
+ - ការពន្យល់ល្អអំពីដំណោះស្រាយនិងលេខកូដ
+ - អ្នកអាចមើលបានច្រើនក្នុងរយៈពេលដ៏ខ្លី
+- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder)
+
+គេហទំព័រប្រកួតប្រជែង:
+- [LeetCode](https://leetcode.com/)
+ - គេហទំព័របញ្ហាសរសេរកូដដែលខ្ញុំចូលចិត្តបំផុត។ វាមានតម្លៃសម្រាប់ការជាវប្រាក់សម្រាប់រយៈពេល 1-2 ខែដែលអ្នកទំនងជានឹងរៀបចំ
+ - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode)
+ - សូមមើលវីដេអូស Nick ខាងលើសម្រាប់លេខកូដខ្លី
+- [HackerRank](https://www.hackerrank.com/)
+- [TopCoder](https://www.topcoder.com/)
+- [InterviewCake](https://www.interviewcake.com/)
+- [Geeks for Geeks](http://www.geeksforgeeks.org/)
+- [InterviewBit](https://www.interviewbit.com/invite/icjf)
+- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems)
+- [Code Exercises](https://code-exercises.com)
+
+គេហទំព័រសិក្សាភាសាដែលមានបញ្ហាប្រឈម៖
+- [Codewars](http://www.codewars.com)
+- [Codility](https://codility.com/programmers/)
+- [HackerEarth](https://www.hackerearth.com/)
+- [Sphere Online Judge (spoj)](http://www.spoj.com/)
+- [Codechef](https://www.codechef.com/)
+
+Challenge repos:
+- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges)
+
+Mock Interviews:
+- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview
+- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews
+- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies
+- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously.
+
+
+## នៅពេលអ្នកជិតដល់ការសម្ភាសន៍
+
+- Cracking The Coding Interview Set 2 (វីដេអូ):
+ - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo)
+ - [Cracking the Coding Interview - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo)
+
+## ប្រវត្តិរូបសង្ខេបរបស់អ្នក
+
+- មើលបន្តការរៀបចំរបស់នៅក្នុង Cracking The Coding Interview និង back of Programming Interviews Exposed
+
+
+## ត្រូវគិតអំពីពេលសម្ភាសន៍មកដល់
+
+គិតអំពីសំណួរសំភាសន៍ចំនួន 20 ដែលអ្នកនឹងទទួលបានរួមជាមួយធាតុខាងក្រោម។ មានចម្លើយ ២-៣ សម្រាប់ចម្លើយនីមួយៗ។
+មានរឿងរ៉ាវមិនមែនគ្រាន់តែទិន្នន័យអំពីអ្វីដែលអ្នកបានសំរេចនោះទេ។
+
+- ហេតុអ្វីបានជាអ្នកចង់បានការងារនេះ?
+- តើអ្វីជាបញ្ហាដ៏លំបាកដែលអ្នកបានដោះស្រាយ?
+- បញ្ហាធំ ៗ ដែលប្រឈមមុខ?
+- ការរចនាម៉ូដណាដែលល្អបំផុត / អាក្រក់បំផុត?
+- គំនិតសម្រាប់កែលម្អផលិតផលដែលមានស្រាប់
+- តើអ្នកធ្វើការបានល្អបំផុតដោយរបៀបណាក្នុងនាមជាបុគ្គលនិងជាក្រុម?
+- ជំនាញឬបទពិសោធន៍ណាមួយរបស់អ្នកដែលជាទ្រព្យសម្បត្តិនៅក្នុងតួនាទីហើយហេតុអ្វី?
+- តើអ្វីដែលអ្នកពេញចិត្តបំផុតនៅ [ការងារ x / គម្រោង y]?
+- តើអ្វីជាបញ្ហាប្រឈមដ៏ធំបំផុតដែលអ្នកបានប្រឈមនៅ [ការងារ x / គម្រោង y]?
+- តើអ្វីទៅជាកំហុសដ៏លំបាកបំផុតដែលអ្នកបានជួបប្រទះនៅ [ការងារ x / គម្រោង y]?
+- តើអ្នកបានរៀនអ្វីខ្លះនៅ [ការងារ x / គំរោង y]?
+តើអ្នកនឹងធ្វើអ្វីបានល្អជាងនៅ [ការងារ x / គំរោង y]?
+
+## Have questions for the interviewer (មានសំណួរសម្រាប់អ្នកសម្ភាសន៍)
+
+ សំនួរខ្លះរបស់ខ្ញុំ (ខ្ញុំប្រហែលជាដឹងចម្លើយរួចហើយប៉ុន្តែចង់បានយោបល់ឬទស្សនៈក្រុមរបស់ពួកគេ)
+
+- តើក្រុមរបស់អ្នកមានទំហំប៉ុនណា?
+- តើវដ្ដ dev របស់អ្នកមើលទៅដូចអ្វី? តើអ្នកធ្វើទឹកជ្រោះទឹកពន្លក / ឆាប់រហ័សទេ?
+- តើប្រញាប់ប្រញាល់ដល់ពេលវេលាកំណត់ទេ? ឬមានភាពបត់បែន?
+- តើការសម្រេចចិត្តត្រូវបានធ្វើឡើងនៅក្នុងក្រុមរបស់អ្នកយ៉ាងដូចម្តេច?
+- តើអ្នកមានការប្រជុំប៉ុន្មានដងក្នុងមួយសប្តាហ៍?
+- តើអ្នកមានអារម្មណ៍ថាបរិយាកាសការងាររបស់អ្នកជួយអ្នកក្នុងការផ្តោតអារម្មណ៍ទេ?
+- តើអ្នកកំពុងធ្វើអ្វី?
+- តើអ្នកចូលចិត្តអ្វី?
+- ជីវិតការងារដូចជាអ្វី?
+- តើការងារ / ជីវិតមានតុល្យភាពយ៉ាងដូចម្តេច?
+
+## Once You've Got The Job (នៅពេលដែលអ្នកមានការងារធ្វើ)
+
+សូមអបអរសាទរ!
+
+បន្តរៀន។
+
+រៀនមិនចេះចប់។
+
+---
+
+ *****************************************************************************************************
+ *****************************************************************************************************
+
+ អ្វីគ្រប់យ៉ាងនៅខាងក្រោមចំណុចនេះគឺស្រេចចិត្តបេីចង់មេីល។
+ តាមរយៈការសិក្សាទាំងនេះ អ្នកនឹងទទួលបានការយល់ដឹងកាន់តែច្រើនពីគំនិតវិទ្យាសាស្ត្រកុំព្យូទ័រ ហើយអ្នកនឹងត្រូវបានរៀបចំខ្លួនឱ្យកាន់តែប្រសើរ
+ ការងារវិស្វកម្មផ្នែកទន់ណាមួយ។ អ្នកនឹងក្លាយជាវិស្វករផ្នែកទន់ដែលមានចំេនះពេញលេញ។
+
+ *****************************************************************************************************
+ *****************************************************************************************************
+
+---
+
+## Additional Books (សៀវភៅបន្ថែម)
+
+ ទាំងនេះគឺនៅទីនេះដូច្នេះអ្នកអាចចូលទៅក្នុងប្រធានបទដែលអ្នកចាប់អារម្មណ៍។
+
+- [The Unix Programming Environment](https://www.amazon.com/dp/013937681X)
+ - ចាស់តែល្អ
+- [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/)
+ - ជម្រើសទំនើប
+- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
+- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/)
+ - ការណែនាំ design patterns
+- [Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
+ - AKA the "Gang Of Four" book, or GOF
+ - The canonical design patterns book
+- [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/)
+- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
+ - ជាការពិនិត្យឡើងវិញនិងការទទួលស្គាល់បញ្ហា
+ - ផ្នែកកាតាឡុកក្បួនដោះស្រាយគឺហួសពីវិសាលភាពនៃការពិបាកដែលអ្នកនឹងជួបសម្ភាសន៍
+ - សៀវភៅនេះមានពីរផ្នែក៖
+ - សៀវភៅសិក្សាថ្នាក់ស្តីពីរចនាសម្ព័ន្ធទិន្នន័យនិងក្បួនដោះស្រាយ
+ - គុណសម្បត្តិ:
+ - គឺជាការពិនិត្យឡើងវិញដ៏ល្អមួយដែលជាសៀវភៅក្បួនដោះស្រាយណាមួយ
+ - រឿងល្អ ៗ ពីបទពិសោធន៍របស់គាត់ដោះស្រាយបញ្ហានៅក្នុងឧស្សាហកម្មនិងបណ្ឌិតសភា
+ - ឧទាហរណ៍កូដនៅក្នុង C
+ - គុណវិបត្តិ:
+ - Can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects
+ - Chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have
+ - Don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material
+ - Algorithm catalog:
+ - នេះជាហេតុផលពិតប្រាកដដែលអ្នកទិញសៀវភៅនេះ
+ - ហៀបនឹងចូលដល់ផ្នែកនេះ។ នឹងធ្វើបច្ចុប្បន្នភាពនៅទីនេះនៅពេលដែលខ្ញុំបានឆ្លងកាត់វា
+ - អាចជួលវានៅលើ Kindle
+ - ចម្លើយ:
+ - [ដំណោះស្រាយ](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
+ - [ដំណោះស្រាយ](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
+ - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
+- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
+ - សៀវភៅនេះត្រូវបានបោះពុម្ពផ្សាយក្នុងឆ្នាំ ២០០៤ ហើយវាហួសសម័យបន្តិចប៉ុន្តែវាជាធនធានដ៏អស្ចារ្យសម្រាប់ការស្វែងយល់អំពីកុំព្យូទ័រដោយសង្ខេប
+ - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like
+ - ជំពូកទាំងនេះពិតជាមានប្រយោជន៍ក្នុងការអានដើម្បីផ្តល់ឱ្យអ្នកនូវគ្រឹះដ៏ល្អមួយ:
+ - Chapter 2 - Numeric Representation
+ - Chapter 3 - Binary Arithmetic and Bit Operations
+ - Chapter 4 - Floating-Point Representation
+ - Chapter 5 - Character Representation
+ - Chapter 6 - Memory Organization and Access
+ - Chapter 7 - Composite Data Types and Memory Objects
+ - Chapter 9 - CPU Architecture
+ - Chapter 10 - Instruction Set Architecture
+ - Chapter 11 - Memory Architecture and Organization
+- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
+ - **សំខាន់ៈ** ការអានសៀវភៅនេះនឹងមានតម្លៃតែប៉ុណ្ណោះ។ សៀវភៅនេះគឺជាការពិនិត្យឡើងវិញដ៏អស្ចារ្យនៃក្បួនដោះស្រាយនិងរចនាសម្ព័ន្ធទិន្នន័យប៉ុន្តែនឹងមិនបង្រៀនអ្នកពីរបៀបសរសេរកូដល្អទេ។ អ្នកត្រូវតែចេះសរសេរកូដដំណោះស្រាយប្រកបដោយប្រសិទ្ធភាព
+ - AKA CLR, sometimes CLRS, because Stein was late to the game
+
+- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055)
+ - For a richer, more up-to-date (2017), but longer treatment
+
+- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
+ - ជំពូកដំបូង បង្ហាញនូវដំណោះស្រាយដ៏ឆ្លាតវៃចំពោះបញ្ហាសរសេរកម្មវិធី (ខ្លះចាស់ដោយប្រើខ្សែអាត់ទិន្នន័យ) ប៉ុន្តែនោះគ្រាន់តែជាការណែនាំប៉ុណ្ណោះ។ សៀវភៅណែនាំស្តីពីការរចនាកម្មវិធីនិងស្ថាបត្យកម្ម
+
+## Additional Learning
+
+ ខ្ញុំបានបន្ថែមពួកគេដើម្បីជួយអ្នកឱ្យក្លាយជាវិស្វករផ្នែកទន់ដែលមានមានចំេណះពេញលេញហើយត្រូវដឹងច្បាស់បច្ចេកវិទ្យានិងក្បួនដោះស្រាយដូច្នេះអ្នកនឹងមានប្រអប់ឧបករណ៍ធំជាងមុន។
+
+- ### Compilers
+ - [How a Compiler Works in ~1 minute (វីដេអូ)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
+ - [Harvard CS50 - Compilers (វីដេអូ)](https://www.youtube.com/watch?v=CSZLNYF4Klo)
+ - [C++ (វីដេអូ)](https://www.youtube.com/watch?v=twodd1KFfGk)
+ - [Understanding Compiler Optimization (C++) (វីដេអូ)](https://www.youtube.com/watch?v=FnGCDLhaxKU)
+
+- ### Emacs and vi(m)
+ - រៀនពី unix-based code editor
+ - vi(m):
+ - [Editing With vim 01 - Installation, Setup, and The Modes (វីដេអូ)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr)
+ - [VIM Adventures](http://vim-adventures.com/)
+ - ឈុត ៤ (វីដេអូ):
+ - [The vi/vim editor - មេរៀន 1](https://www.youtube.com/watch?v=SI8TeVMX8pk)
+ - [The vi/vim editor - មេរៀន 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE)
+ - [The vi/vim editor - មេរៀន 3](https://www.youtube.com/watch?v=ZYEccA_nMaI)
+ - [The vi/vim editor - មេរៀន 4](https://www.youtube.com/watch?v=1lYD5gwgZIA)
+ - [Using Vi Instead of Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs)
+ - emacs:
+ - [Basics Emacs Tutorial (វីដេអូ)](https://www.youtube.com/watch?v=hbmV1bnQ-i0)
+ - ឈុត ៣ (វីដេអូ):
+ - [Emacs Tutorial (Beginners) -Part 1- File commands, cut/copy/paste, cursor commands](https://www.youtube.com/watch?v=ujODL7MD04Q)
+ - [Emacs Tutorial (Beginners) -Part 2- Buffer management, search, M-x grep and rgrep modes](https://www.youtube.com/watch?v=XWpsRupJ4II)
+ - [Emacs Tutorial (Beginners) -Part 3- Expressions, Statements, ~/.emacs file and packages](https://www.youtube.com/watch?v=paSgzPso-yc)
+ - [Evil Mode: Or, How I Learned to Stop Worrying and Love Emacs (វីដេអូ)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc)
+ - [Writing C Programs With Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs)
+ - [(maybe) Org Mode In Depth: Managing Structure (វីដេអូ)](https://www.youtube.com/watch?v=nsGYet02bEk)
+
+- ### Unix command line tools
+ - ខ្ញុំបានបំពេញក្នុងបញ្ជីខាងក្រោមពីឧបករណ៍ល្អ ៗ.
+ - bash
+ - cat
+ - grep
+ - sed
+ - awk
+ - curl or wget
+ - sort
+ - tr
+ - uniq
+ - [strace](https://en.wikipedia.org/wiki/Strace)
+ - [tcpdump](https://danielmiessler.com/study/tcpdump/)
+
+- ### Information theory (វីដេអូ)
+ - [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory)
+ - បន្ថែមទៀតអំពី Markov processes:
+ - [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
+ - [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
+ - [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
+ - សូមមើលបន្ថែមនៅ MIT 6.050J Information និង Entropy series
+
+- ### Parity & Hamming Code (វីដេអូ)
+ - [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE)
+ - [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M)
+ - Hamming Code:
+ - [Error detection](https://www.youtube.com/watch?v=1A_NcXxdoCc)
+ - [Error correction](https://www.youtube.com/watch?v=JAMLuxdHH8o)
+ - [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk)
+
+- ### Entropy
+ - សូមមើលវីដេអូខាងក្រោមផង
+ - ត្រូវប្រាកដថាមើលវីដេអូទ្រឹស្តីព័ត៌មានជាមុន
+ - [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (វីដេអូ)](https://youtu.be/JnJq3Py0dyM?t=176)
+
+- ### Cryptography
+ - សូមមើលវីដេអូខាងក្រោមផង
+ - ត្រូវប្រាកដថាមើលវីដេអូទ្រឹស្តីព័ត៌មានជាមុន
+ - [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
+ - [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
+ - [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+- ### Compression
+ - ត្រូវប្រាកដថាមើលវីដេអូទ្រឹស្តីព័ត៌មានជាមុន
+ - Computerphile (វីដេអូ):
+ - [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w)
+ - [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko)
+ - [Upside Down Trees (Huffman Trees)](https://www.youtube.com/watch?v=umTbivyJoiI)
+ - [EXTRA BITS/TRITS - Huffman Trees](https://www.youtube.com/watch?v=DV8efuB3h2g)
+ - [Elegant Compression in Text (The LZ 77 Method)](https://www.youtube.com/watch?v=goOa3DGezUA)
+ - [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU)
+ - [វីដេអូ Compressor Head](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
+ - [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s)
+
+- ### Computer Security
+ - [MIT (23 វីដេអូ)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
+ - [Buffer Overflow Exploits and Defenses](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3)
+ - [Privilege Separation](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Capabilities](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Sandboxing Native Code](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6)
+ - [Web Security Model](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Securing Web Applications](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Symbolic Execution](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Network Security](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Network Protocols](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+
+- ### Garbage collection
+ - [GC in Python (វីដេអូ)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
+ - [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits)
+ - [Deep Dive Python: Garbage Collection in CPython (វីដេអូ)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
+
+- ### Parallel Programming
+ - [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
+ - [Efficient Python for High Performance Parallel Computing (វីដេអូ)](https://www.youtube.com/watch?v=uY85GkaYzBk)
+
+- ### Messaging, Serialization, and Queueing Systems
+ - [Thrift](https://thrift.apache.org/)
+ - [ការបង្រៀន](http://thrift-tutorial.readthedocs.io/en/latest/intro.html)
+ - [Protocol Buffers](https://developers.google.com/protocol-buffers/)
+ - [ការបង្រៀន](https://developers.google.com/protocol-buffers/docs/tutorials)
+ - [gRPC](http://www.grpc.io/)
+ - [gRPC 101 for Java Developers (វីដេអូ)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1)
+ - [Redis](http://redis.io/)
+ - [ការបង្រៀន](http://try.redis.io/)
+ - [Amazon SQS (queue)](https://aws.amazon.com/sqs/)
+ - [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/)
+ - [RabbitMQ](https://www.rabbitmq.com/)
+ - [ចាប់ផ្តើម](https://www.rabbitmq.com/getstarted.html)
+ - [Celery](http://www.celeryproject.org/)
+ - [ជំហានដំបូងជាមួយ Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)
+ - [ZeroMQ](http://zeromq.org/)
+ - [Intro - Read The Manual](http://zeromq.org/intro:read-the-manual)
+ - [ActiveMQ](http://activemq.apache.org/)
+ - [Kafka](http://kafka.apache.org/documentation.html#introduction)
+ - [MessagePack](http://msgpack.org/index.html)
+ - [Avro](https://avro.apache.org/)
+
+- ### A*
+ - [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm)
+ - [A* Pathfinding Tutorial (វីដេអូ)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
+ - [A* Pathfinding (E01: algorithm explanation) (វីដេអូ)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
+
+- ### Fast Fourier Transform
+ - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
+ - [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
+ - [What is the Fourier Transform? (វីដេអូ)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
+ - [Divide & Conquer: FFT (វីដេអូ)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4)
+ - [Understanding The FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
+
+- ### Bloom Filter
+ - ចំពោះBloom filterមួយដែលមាន m bits និង មុខងារhasing k, ទាំងការបញ្ចូលនិងការធ្វើតេស្តសមាជិកភាពគឺO(k)
+ - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs)
+ - [Bloom Filters | Mining of Massive Datasets | Stanford University (វីដេអូ)](https://www.youtube.com/watch?v=qBTdukbzc78)
+ - [Tutorial](http://billmill.org/bloomfilter-tutorial/)
+ - [How To Write A Bloom Filter App](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/)
+
+- ### HyperLogLog
+ - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html)
+
+- ### Locality-Sensitive Hashing
+ - ប្រើដើម្បីកំណត់ភាពស្រដៀងគ្នានៃឯកសារ
+ - ការផ្ទុយមកពី MD5 ឬ SHA ដែលត្រូវបានប្រើដើម្បីកំណត់ថាតើឯកសារ ឬ ខ្សែអក្សរចំនួន ២ ពិតជាដូចគ្នា
+ - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html)
+
+- ### van Emde Boas Trees
+ - [Divide & Conquer: van Emde Boas Trees (វីដេអូ)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
+ - [MIT Lecture Notes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf)
+
+- ### Augmented Data Structures
+ - [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc)
+
+- ### Balanced search trees
+ - ស្គាល់យ៉ាងហោចណាស់មែកធាងគោលពីរដែលមានតុល្យភាព (balanced binary tree) (និងដឹងពីរបៀបដែលវាត្រូវបានអនុវត្ត)៖
+ - “ ក្នុងចំណោមដើមឈើស្វែងរកដែលមានតុល្យភាពដើម (balanced binary tree) AVL និងដើមឈើ ២/៣មិនពេញនិយមទេ៕ red-black trees ហាក់ដូចជាមានប្រជាប្រិយភាពជាង។
+ រចនាសម្ពន្ធ័ទិន្នន័យរៀបចំដោយខ្លួនឯងដែលគួរឱ្យចាប់អារម្មណ៍ជាពិសេសគឺមែកឈើsplay tree ដែលប្រើការបង្វិល
+ ដើម្បីផ្លាស់ទីកូនសោណាដែលបានចូលទៅកាន់ឬស។ "- ស្គីណា (Skiena)
+ - ក្នុងចំណោមទាំងនេះខ្ញុំបានជ្រើសរើសអនុវត្តមែកឈើ splay tree ។ ពីអ្វីដែលខ្ញុំបានអានអ្នកនឹងមិនអនុវត្តទេនៅមែកធាងស្វែងរកមានតុល្យភាពនៅក្នុងបទសម្ភាសន៍របស់អ្នក។ ប៉ុន្តែខ្ញុំចង់បង្ហាញលេខកូដ
+ ហើយប្រឈមមុខនឹងវា ។ ខ្ញុំបានអានលេខកូដred-black treeច្រើន
+ - Splay tree: បញ្ចូល, ស្វែងរក, លុប
+ ប្រសិនបើអ្នកអនុវត្តដើមឈើក្រហម / ខ្មៅសាកល្បងទាំងនេះ៖
+ - មុខងារស្វែងរក និង ការបញ្ចូល ការរំលងលុប
+ - ខ្ញុំចង់រៀនបន្ថែមទៀតអំពី B-Tree ចាប់តាំងពីវាត្រូវបានគេប្រើយ៉ាងទូលំទូលាយជាមួយសំណុំទិន្នន័យធំ ៗ
+ - [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
+
+ - **AVL trees**
+ - ក្នុងការអនុវត្ត ៖
+ តាមអ្វីដែលខ្ញុំអាចប្រាប់បាន អ្វីៗទាំងនេះមិនត្រូវបានគេប្រើច្រើនទេនៅក្នុងការអនុវត្តប៉ុន្តែខ្ញុំអាចមើលឃើញកន្លែងដែលពួកគេប្រីវា៖
+ AVL Tree គឺជារចនាសម្ព័នមួយផ្សេងទៀតដែលគាំទ្រដល់ការស្វែងរក (បញ្ចូល n) ការបញ្ចូល និង ការដកយកចេញ។ វាកាន់តែម៉ឺងម៉ាត់
+ មានតុល្យភាពជាងដើមឈើខ្មៅក្រហម (red-black tree) ដែលមានការបញ្ចូលយឺត និង ដកចេញយឺត ប៉ុន្តែការទាញមកវិញលឿនជាងមុន។ នេះធ្វើឱ្យវា
+ មានភាពទាក់ទាញសម្រាប់រចនាសម្ព័ន្ធទិន្នន័យដែលអាចត្រូវបានសាងសង់ម្តងហើយផ្ទុកដោយមិនមានការកសាងឡើងវិញដូចជាភាសា
+ វចនានុក្រម (ឬវចនានុក្រមកម្មវិធីដូចជា opcodes របស់ assembler ឬ interpreter)
+
+ - [MIT AVL Trees / AVL Sort (វីដេអូ)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
+ - [AVL Trees (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
+ - [AVL Tree Implementation (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
+ - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
+
+ - **Splay trees**
+ - ក្នុងការអនុវត្ត ៖
+ Splay trees ត្រូវបានប្រើជាធម្មតាក្នុងការអនុវត្ត caches, memory allocators, routers, garbage collectors,
+ data compression, ropes (ការជំនួស string ដែលប្រើសម្រាប់ long text strings), ក្នុង Windows NT (ក្នុង virtual memory,
+ networking និង file system code) ជាដេីម
+ - [CS 61B: Splay Trees (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY)
+ - MIT Lecture: Splay Trees:
+ - វាមានគណិតច្រេីន តែអាចមេីល១០ នាទីចុងក្រោយបាន
+ - [វីដេអូ](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
+
+ - **Red/black trees**
+ - នេះជាការពិពណ៌នាអំពីដេីមឈេី 2-3 (មើលខាងក្រោម).
+ - ក្នុងការអនុវត្ត ៖
+ Red–black trees ផ្តល់ជូនការធានាករណីអាក្រក់បំផុតសម្រាប់ពេលវេលាបញ្ចូល ពេលវេលាលុប និង ពេលវេលាស្វែងរក។
+ វាមិនត្រឹមតែធ្វើឱ្យពួកគេល្អនៅក្នុងកម្មវិធីដែលត្រូវការពេលវេលាប៉ុណ្ណោះទេ ដូចជាកម្មវិធីជាក់ស្តែង
+ ប៉ុន្តែវាធ្វើឱ្យពួកគេប្លុកមានតម្លៃនៅក្នុងរចនាសម្ព័ន្ធទិន្នន័យផ្សេងទៀតដែលផ្តល់នូវការធានាករណីអាក្រក់បំផុត។
+ ឧទាហរណ៍រចនាសម្ព័ន្ធទិន្នន័យជាច្រើនដែលត្រូវបានប្រើក្នុងធរណីមាត្រគណនាអាចផ្អែកលើដើមឈើ red–black និង Completely Fair Scheduler ដែលប្រើនៅក្នុងខឺណែលលីនុចបច្ចុប្បន្នប្រើដើមឈើred–black ។
+ នៅក្នុងកំណែ ៨ នៃចាវ៉ា ការប្រមូលHashMapត្រូវបានកែប្រែហើយដើមឈើ Red-Black ត្រូវបានប្រើ ជំនួសឱ្យការប្រើLinkedListដើម្បីផ្ទុកធាតុដូចគ្នាបេះបិទទៅនឹងhashcodes មិនល្អ
+ - [Aduni - Algorithms - Lecture 4 (តំណភ្ជាប់លោតទៅចំណុចចាប់ផ្តើម) (វីដេអូ)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
+ - [Aduni - Algorithms - Lecture 5 (វីដេអូ)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
+ - [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
+ - [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/community/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/)
+
+ - **2-3 search trees**
+ - ក្នុងការអនុវត្ត ៖
+ 2-3 trees មានការបញ្ចូលលឿនជាងមុននៅក្នុងការចំណាយនៃការស្វែងរកយឺត (ដោយសារកំពស់ខ្ពស់ជាងបេីប្រៀបទៅ AVL trees).
+ - អ្នកអាចនឹងកំរប្រេី 2-3 tree ដោយសារតែការអនុវត្តរបស់វាទាក់ទងនឹងប្រភេទផ្សេងៗគ្នានៃថ្នាំង. ជំនួសវិញយេីងប្រេី Red Black trees.
+ - [23-Tree Intuition និង និយមន័យ (វីដេអូ)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
+ - [Binary View of 23-Tree](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [2-3 Trees (student recitation) (វីដេអូ)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+ - **2-3-4 Trees (aka 2-4 trees)**
+ - ក្នុងការអនុវត្ត៖
+ សម្រាប់រាល់ 2-4 tree, វាមាន red–black trees ជាមួយ data elements ដែលមានលំដាប់ដូចគ្នា. ការបញ្ចូលនិងការលុប
+ ប្រតិបត្ដិការនៅលើដើមឈើ 2-4 គឺស្មើទៅនឹងត្រឡប់ពណ៌និងការបង្វិលនៅក្នុងដើមឈើខ្មៅក្រហម. នេះធ្វើឱ្យដើមឈើ 2-4 ដើម
+ ឧបករណ៍សំខាន់សម្រាប់ការស្វែងយល់ពីតក្កវិជ្ជានៅពីក្រោយដើមឈើក្រហម - ក្រហមហើយនេះជាមូលហេតុដែលអត្ថបទណែនាំជាច្រើននៃក្បួនដោះស្រាយណែនាំ
+ ដើមឈើ ២-៤ ដើមមុនដើមឈើក្រហម - ក្រហមទោះបី ** ដើមឈើ ២-៤ ក៏មិនត្រូវបានប្រើក្នុងការអនុវត្តជាក់ស្តែងដែរ ** ។
+ - [CS 61B មេរៀនទី 26: Balanced Search Trees (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q)
+ - [Bottom Up 234-Trees (វីដេអូ)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [Top Down 234-Trees (វីដេអូ)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
+
+ - **N-ary (K-ary, M-ary) trees**
+ - ចំណាំ: the N ឬ K ជា branching factor (max branches)
+ - binary trees គឺជា 2-ary tree មួយ, ដែលមាន branching factor = 2
+ - 2-3 trees គឺជា 3-ary
+ - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree)
+
+ - **B-Trees**
+ - ការពិត: វាជាអាថ៌កំបាំង, តែ B អាចជា Boeing, Balanced, ឬ Bayer (co-inventor).
+ - ក្នុងការអនុវត្ត:
+ B-Trees ត្រូវបានប្រើយ៉ាងទូលំទូលាយនៅក្នុង databases. filesystems ទំនើបបំផុតភាគច្រេីនប្រេី B-trees (ឬ Variants). បន្ថែមពីលើ
+ ការប្រើប្រាស់របស់វានៅក្នុង databases, B-tree ក៏ត្រូវបានប្រើនៅក្នុង filesystems ដើម្បីអនុញ្ញាតឱ្យចូលទៅកាន់ quick random access ទៅ arbitrary
+ block មួយ ក្នុងឯកសារជាក់លាក់មួយ. បញ្ហាមូលដ្ឋានគឺការប្រែក្លាយបណ្តុំឯកសារអាយទៅជាប្លុកឌីស (ឬ ប្រហែលជាអាសយដ្ឋាន cylinder-head-sector)
+ - [B-Tree](https://en.wikipedia.org/wiki/B-tree)
+ - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html)
+ - [សេចក្តីផ្តើមទៅ B-Trees (វីដេអូ)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
+ - [និយមន័យ B-Tree និង Insertion (វីដេអូ)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ការលុប B-Tree (វីដេអូ)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [MIT 6.851 - Memory Hierarchy Models (វីដេអូ)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+ - រៀនពី cache-oblivious B-Trees, data structures
+ - ៣៧ នាទីដំបូងគឺបច្ចេកទេសហើយប្រហែលជាអាចរំលងចោល (B is block size, cache line size)
+
+
+- ### k-D Trees
+ - ល្អសម្រាប់ការស្វែងរកចំនួនចំនុចក្នុងចតុកោណកែងឬវត្ថុវិមាត្រខ្ពស់
+ - ល្អសំរាប់ k-nearest neighbors
+ - [Kd Trees (វីដេអូ)](https://www.youtube.com/watch?v=W94M9D_yXKk)
+ - [kNN K-d tree algorithm (វីដេអូ)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
+
+- ### Skip lists
+ - "These are somewhat of a cult data structure" - Skiena
+ - [Randomization: Skip Lists (វីដេអូ)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [សម្រាប់ចលនានិងលម្អិតបន្ថែមទៀត](https://en.wikipedia.org/wiki/Skip_list)
+
+- ### Network Flows
+ - [Ford-Fulkerson in 5 minutes — Step by step example (វីដេអូ)](https://www.youtube.com/watch?v=Tl90tNtKvxs)
+ - [Ford-Fulkerson Algorithm (វីដេអូ)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
+ - [Network Flows (វីដេអូ)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
+
+- ### Disjoint Sets & Union Find
+ - [UCB 61B - Disjoint Sets; Sorting & selection (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI)
+ - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1)
+
+- ### Math for Fast Processing
+ - [Integer Arithmetic, Karatsuba Multiplication (វីដេអូ)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [The Chinese Remainder Theorem (ប្រេីក្នុង cryptography) (វីដេអូ)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
+
+- ### Treap
+ - ការរួមបញ្ចូលគ្នានៃ binary search tree និង a heap
+ - [Treap](https://en.wikipedia.org/wiki/Treap)
+ - [Data Structures: Treaps explained (វីដេអូ)](https://www.youtube.com/watch?v=6podLUYinH8)
+ - [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
+
+- ### Linear Programming (វីដេអូ)
+ - [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ)
+ - [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U)
+ - [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik)
+ - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk)
+
+- ### Geometry, Convex hull (វីដេអូ)
+ - [Graph Alg. IV: Intro to geometric algorithms - មេរៀនទី 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
+ - [Geometric Algorithms: Graham & Jarvis - មេរៀនទី 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
+
+- ### Discrete math
+ - សូមមើលវីដេអូខាងក្រោម
+
+- ### Machine Learning
+ - ហេតុអ្វី ML?
+ - [Google ធ្វេីខ្លួនជាក្រុមហ៊ុន Machine Learning ](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70)
+ - [Large-Scale Deep Learning for Intelligent Computer Systems (វីដេអូ)](https://www.youtube.com/watch?v=QSaZGT4-6EY)
+ - [Deep Learning and Understandability versus Software Engineering and Verification ដោយ Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw)
+ - [Google's Cloud Machine learning tools (វីដេអូ)](https://www.youtube.com/watch?v=Ja2hxBAwG_0)
+ - [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (វីដេអូ)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal)
+ - [Tensorflow (វីដេអូ)](https://www.youtube.com/watch?v=oZikw5k_2FM)
+ - [Tensorflow Tutorials](https://www.tensorflow.org/versions/r0.11/tutorials/index.html)
+ - [Practical Guide to implementing Neural Networks in Python (using Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)
+ - វគ្គសិក្សា:
+ - [វគ្គចាប់ផ្តើមដ៏អស្ចារ្យ: Machine Learning](https://www.coursera.org/learn/machine-learning)
+ - [វីដេអូ](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW)
+ - មេីលវីដេអូ 12-18 សំរាប់ linear algebra (14 និង 15 ដូចគ្នា)
+ - [Neural Networks for Machine Learning](https://www.coursera.org/learn/neural-networks)
+ - [Google's Deep Learning Nanodegree](https://www.udacity.com/course/deep-learning--ud730)
+ - [Google/Kaggle Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009)
+ - [Self-Driving Car Engineer Nanodegree](https://www.udacity.com/drive)
+ - [Metis Online Course ($99 សំរាប់ 2 ខែ)](http://www.thisismetis.com/explore-data-science)
+ - ធនធាន:
+ - សៀវភៅ:
+ - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/)
+ - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X)
+ - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/)
+ - [Machine Learning សម្រាប់វិស្វករ Software](https://github.com/ZuzooVn/machine-learning-for-software-engineers)
+ - Data School: http://www.dataschool.io/
+
+---
+
+## Additional Detail on Some Subjects
+## ពត៌មានលំអិតបន្ថែមលើមុខវិជ្ជាមួយចំនួន
+
+ ខ្ញុំបានបន្ថែមគំនិតទាំងនេះដើម្បីពង្រឹងគំនិតមួយចំនួនដែលបានបង្ហាញខាងលើប៉ុន្តែខ្ញុំមិនចង់បញ្ចូលវាខាងលើព្រោះវាច្រើនពេក។ វាងាយស្រួលក្នុងការធ្វើឱ្យវាហួសប្រមាណលើប្រធានបទ។
+ អ្នកចង់ទទួលបានការងារនៅសតវត្សនេះមែនទេ?
+
+- **SOLID**
+ - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (វីដេអូ)](https://www.youtube.com/watch?v=TMuno5RZNeE)
+ - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
+ - [ប្រភេទផ្សេងទៀត](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
+ - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension but not for modification](https://en.wikipedia.org/wiki/Open/closed_principle)
+ - [ប្រភេទផ្សេងទៀត](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
+ - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
+ - [ប្រភេទផ្សេងទៀត](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
+ - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use
+ - [គោលការណ៍នៃ Interface Segregation ក្នុងរយៈពេល 5 នាទី (វីដេអូ)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
+ - [ប្រភេទផ្សេងទៀត](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
+ - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects.
+ - [ហេតុអ្វីបានជា The Dependency Inversion Principle និងហេតុអ្វីវាសំខាន់](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
+ - [ប្រភេទផ្សេងទៀត](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
+
+- **Union-Find**
+ - [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
+ - [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
+ - [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
+ - [Union By Rank](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank)
+ - [Path Compression](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression)
+ - [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
+
+- **More Dynamic Programming** (វីដេអូ)
+ - [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19)
+ - [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20)
+ - [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21)
+ - [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15)
+ - [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
+
+- **Advanced Graph Processing** (វីដេអូ)
+ - [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
+ - [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
+
+- MIT **Probability** ប្រូបាប (គណិតវិទ្យា បងៀនយឹតល្អ) (វីដេអូ):
+ - [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Random Variables](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21)
+ - [MIT 6.042J - Expectation I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Large Deviations](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Random Walks](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25)
+
+- [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
+
+- **String Matching**
+ - Rabin-Karp (វីដេអូ):
+ - [Rabin Karps Algorithm](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm)
+ - [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation)
+ - [Optimization: Implementation and Analysis](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis)
+ - [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9)
+ - [Rolling Hashes, Amortized Analysis](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32)
+ - Knuth-Morris-Pratt (KMP):
+ - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo)
+ - Boyer–Moore string search algorithm
+ - [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm)
+ - [Advanced String Searching Boyer-Moore-Horspool Algorithms (វីដេអូ)](https://www.youtube.com/watch?v=QDZpzctPf10)
+ - [Coursera: Algorithms អំពី Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1)
+ - ចាប់ផ្តើមល្អ ប៉ុន្តែដល់ពេលហួស KMP វាកាន់តែស្មុគស្មាញ
+ - ការពន្យល់ដ៏ល្អនៃការព្យាយាម
+ - អាចរំលងបាន
+
+- **Sorting**
+
+ - Stanford lectures on sorting:
+ - [មេរៀនទី 15 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69)
+ - [មេរៀនទី 16 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69)
+ - Shai Simonson, [Aduni.org](http://www.aduni.org/):
+ - [Algorithms - Sorting - មេរៀនទី 2 (វីដេអូ)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2)
+ - [Algorithms - Sorting II - មេរៀនទី 3 (វីដេអូ)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3)
+ - ការបង្រៀនរបស់ Steven Skiena អំពី sorting:
+ - [មេរៀនចាប់ផ្តេីមពី 26:46 (វីដេអូ)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600)
+ - [មេរៀនចាប់ផ្តេីមពី 27:40 (វីដេអូ)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [មេរៀនចាប់ផ្តេីមពី 35:00 (វីដេអូ)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [មេរៀនចាប់ផ្តេីមពី 23:50 (វីដេអូ)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
+
+## Video Series
+## ស៊េរីវីដេអូ
+
+រីករាយជាមួយវិដេអូរខាងក្រោម
+
+- [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+
+- [x86 Architecture, Assembly, Applications (11 វីដេអូ)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0)
+
+- [MIT 18.06 Linear Algebra, Spring 2005 (35 វីដេអូ)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8)
+
+- [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A)
+
+- [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html)
+
+- [Discrete Mathematics ដោយ Shai Simonson (19 វីដេអូ)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG)
+
+- [Discrete Mathematics Part 1 by Sarada Herke (5 វីដេអូ)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo)
+
+- CSE373 - Analysis of Algorithms (25 វីដេអូ)
+ - [ការបង្រៀនរបស់ Skiena ពី Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1)
+
+- [UC Berkeley 61B (Spring 2014): Data Structures (25 វីដេអូ)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
+
+- [UC Berkeley 61B (Fall 2006): Data Structures (39 វីដេអូ)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C)
+
+- [UC Berkeley 61C: Machine Structures (26 វីដេអូ)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_)
+
+- [OOSE: Software Dev Using UML and Java (21 វីដេអូ)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+
+- ~~[UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)~~
+
+- [MIT 6.004: Computation Structures (49 វីដេអូ)](https://www.youtube.com/playlist?list=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu)
+
+- [Carnegie Mellon - Computer Architecture Lectures (39 វីដេអូ)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq)
+
+- [MIT 6.006: Intro to Algorithms (47 វីដេអូ)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False)
+
+- [MIT 6.033: Computer System Engineering (22 វីដេអូ)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484)
+
+- [MIT 6.034 Artificial Intelligence, Fall 2010 (30 វីដេអូ)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi)
+
+- [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 វីដេអូ)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B)
+
+- [MIT 6.046: Design and Analysis of Algorithms (34 វីដេអូ)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+- [MIT 6.050J: Information and Entropy, Spring 2008 (19 វីដេអូ)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7)
+
+- [MIT 6.851: Advanced Data Structures (22 វីដេអូ)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1)
+
+- [MIT 6.854: Advanced Algorithms, Spring 2016 (24 វីដេអូ)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c)
+
+- [Harvard COMPSCI 224: Advanced Algorithms (25 វីដេអូ)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf)
+
+- [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+
+- [Stanford: Programming Paradigms (27 វីដេអូ)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02)
+
+- [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
+ - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/)
+
+- [Mining Massive Datasets - Stanford University (94 វីដេអូ)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
+
+- [Graph Theory by Sarada Herke (67 វីដេអូ)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
+
+## Computer Science Courses
+## វគ្គសិក្សាវិទ្យាសាស្ត្រកុំព្យូទ័រ
+
+- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science)
+- [Directory of CS Courses (ភាគច្រើនជាមួយការបង្រៀនតាមអ៊ិនធរណេត)](https://github.com/prakhar1989/awesome-courses)
+
+## Papers
+## អត្ថបទ
+
+- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
+- [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
+ - [implemented in Go](https://godoc.org/github.com/thomas11/csp)
+- [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
+ - ជំនួសដោយ Colossus ក្នុងឆ្នាំ 2012
+- [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
+ - ជំនួសដោយ Cloud Dataflow?
+- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
+ - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf)
+- [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf)
+- [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf)
+ - អត្ថបទ Dynamo ចាប់ផ្តេីមអោយមាន NoSQL
+- [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf)
+- [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf)
+- [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf)
+- [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/)
+ - មិនមាន អត្ថបទ
+- 2012: AddressSanitizer: A Fast Address Sanity Checker:
+ - [អត្ថបទ](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
+ - [វីដេអូ](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
+- 2013: Spanner: Google’s Globally-Distributed Database:
+ - [អត្ថបទ](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
+ - [វីដេអូ](https://www.usenix.org/node/170855)
+- [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
+- [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
+- [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
+- [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf )
+- [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
+- [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
+
+
+## LICENSE
+## សាលាកប័រត
+
+[CC-BY-SA-4.0](./LICENSE.txt)
diff --git a/translations/README-ko.md b/translations/README-ko.md
index 42c8854334..20555b8ee0 100644
--- a/translations/README-ko.md
+++ b/translations/README-ko.md
@@ -5,6 +5,8 @@
> [나는 아마존에 소프트웨어 엔지니어로 채용됐다](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)!
> 당신은 아마 내가 한 것처럼 많이 공부할 필요는 없을 것이다. 어쨌든 당신이 필요로 하는 모든 것은 여기에 있다.
>
+> 몇 달 동안 하루에 8-12 시간 정도 공부했습니다. 이것이 제 이야기입니다. [Google 인터뷰를 위해 8 개월 동안 풀 타임으로 공부 한 이유](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)
+>
> 여기에 나열된 목록들은 아마존, 페이스북, 구글, 마이크로소프트 같은 거대 기업을 포함한 거의 모든 소프트웨어 회사의 인터뷰를 준비하는데에 도움이 될것이다.
>
>
@@ -14,32 +16,34 @@
번역:
+- [중국어](translations/README-cn.md)
- [베트남어](translations/README-vi.md)
-- [브라질 포르투갈어](translations/README-ptbr.md)
- [스페인어](translations/README-es.md)
-- [중국어](translations/README-cn.md)
+- [브라질 포르투갈어](translations/README-ptbr.md)
+- [폴란드어](translations/README-pl.md)
+- [타이완어](translations/README-tw.md)
진행 중인 번역:
-- [그리스어](https://github.com/jwasham/coding-interview-university/issues/166)
-- [러시아어](https://github.com/jwasham/coding-interview-university/issues/87)
-- [말라얄람어](https://github.com/jwasham/coding-interview-university/issues/239)
+- [힌디어](https://github.com/jwasham/coding-interview-university/issues/81)
+- [히브리어](https://github.com/jwasham/coding-interview-university/issues/82)
- [바하사 인도네시아어](https://github.com/jwasham/coding-interview-university/issues/101)
- [아랍어](https://github.com/jwasham/coding-interview-university/issues/98)
-- [우르두어](https://github.com/jwasham/coding-interview-university/issues/140)
-- [우크라이나어](https://github.com/jwasham/coding-interview-university/issues/106)
-- [이탈리아어](https://github.com/jwasham/coding-interview-university/issues/170)
-- [일본어](https://github.com/jwasham/coding-interview-university/issues/257)
-- [태국어](https://github.com/jwasham/coding-interview-university/issues/156)
- [터키어](https://github.com/jwasham/coding-interview-university/issues/90)
-- [텔루구어](https://github.com/jwasham/coding-interview-university/issues/117)
-- [폴란드어](https://github.com/jwasham/coding-interview-university/issues/122)
- [프랑스어](https://github.com/jwasham/coding-interview-university/issues/89)
+- [러시아어](https://github.com/jwasham/coding-interview-university/issues/87)
+- [우크라이나어](https://github.com/jwasham/coding-interview-university/issues/106)
- [한국어](https://github.com/jwasham/coding-interview-university/issues/118)
-- [히브리어](https://github.com/jwasham/coding-interview-university/issues/82)
-- [힌디어](https://github.com/jwasham/coding-interview-university/issues/81)
+- [텔루구어](https://github.com/jwasham/coding-interview-university/issues/117)
+- [우르두어](https://github.com/jwasham/coding-interview-university/issues/140)
+- [태국어](https://github.com/jwasham/coding-interview-university/issues/156)
+- [그리스어](https://github.com/jwasham/coding-interview-university/issues/166)
+- [이탈리아어](https://github.com/jwasham/coding-interview-university/issues/170)
+- [말라얄람어](https://github.com/jwasham/coding-interview-university/issues/239)
+- [일본어](https://github.com/jwasham/coding-interview-university/issues/257)
+
## 코딩 인터뷰 대학이란?
@@ -107,7 +111,6 @@
- [NP와 NP-완전, 그리고 근사 알고리즘](#np-np-complete-and-approximation-algorithms)
- [캐시](#caches)
- [프로세스와 쓰레드](#processes-and-threads)
- - [논문](#papers)
- [테스트](#테스트)
- [스케줄링](#scheduling)
- [시스템 루틴의 구현](#implement-system-routines)
@@ -116,7 +119,7 @@
- [부동 소수점](#floating-point-numbers)
- [유니코드](#unicode)
- [엔디언(Endianness)](#endianness)
-- [네트워크](#networking)
+ - [네트워크](#networking)
- [시스템 디자인, 확장성, 데이터 핸들링](#시스템-디자인-확장성-데이터-핸들링) (4년 이상 경력자를 위한 주제)
- [최종 검토](#최종-검토)
- [코딩 문제 연습](#코딩-문제-연습)
@@ -132,9 +135,6 @@
- [추가 도서](#additional-books)
- [추가 주제](#additional-learning)
- [컴파일러](#compilers)
- - [부동 소수점 수](#floating-point-numbers)
- - [유니코드](#unicode)
- - [엔디언](#endianness)
- [Emacs 와 vi(m)](#emacs-and-vim)
- [유닉스 명령어 도구](#unix-command-line-tools)
- [정보 이론](#information-theory-videos)
@@ -142,7 +142,6 @@
- [엔트로피](#entropy)
- [암호기법](#cryptography)
- [압축](#compression)
- - [네트워크](#networking) (만약 당신이 네트워크에 대한 경험이 있거나 시스템 엔지이너가 되고 싶다면 받을 수 있는 질문들)
- [컴퓨터 보안](#computer-security)
- [가비지 콜렉션](#garbage-collection)
- [병렬 프로그래밍](#parallel-programming)
@@ -154,8 +153,6 @@
- [Locality-Sensitive Hashing](#locality-sensitive-hashing)
- [van Emde Boas 트리](#van-emde-boas-trees)
- [Augmented Data Structures](#augmented-data-structures)
- - [트라이(Tries)](#tries)
- - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees)
- [균형 탐색 트리](#balanced-search-trees)
- AVL 트리
- Splay 트리
@@ -177,7 +174,7 @@
- [몇몇 주제에 대한 세부사항](#몇몇-주제에-대한-세부사항)
- [영상 자료](#video-series)
- [컴퓨터 과학 강의들](#컴퓨터-과학-강의들)
-- [라이센스](#라이센스)
+- [논문들](#논문들)
---
@@ -194,8 +191,7 @@
## 어떻게 사용하면 되나요?
-
-How to use it?
+
아래의 모든 것은 대략적인 개요이며 당신은 위에서 아래 순서대로 진행해야 한다.
@@ -205,6 +201,12 @@
브랜치를 포크하고 아래의 명령을 따라라
+포크 버튼을 눌러 Github https://github.com/jwasham/coding-interview-university 레포지토리를 포크하라.
+
+ 로컬 레포지토리에 클론하라.
+
+`git clone git@github.com:/coding-interview-university.git`
+
`git checkout -b progress`
`git remote add jwasham https://github.com/jwasham/coding-interview-university`
@@ -217,50 +219,49 @@
`git commit -m "Marked x" `
-`git rebase jwasham/master `
+`git rebase jwasham/main `
-`git push --force `
+`git push --set-upstream origin progress`
-[Github식 마크다운에 대하여](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
+`git push --force`
-
+[Github식 마크다운에 대하여](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
## 당신은 충분히 똑똑합니다
- 성공한 소프트웨어 엔지니어들은 똑똑합니다. 하지만 그들 조차도 자신들의 지적 능력면에 대해서 불안감을 갖기 일쑤입니다.
- [천재 프로그래머에 대한 미신(迷信)](https://www.youtube.com/watch?v=0SARbwvhupQ)
- [위험한 홀로서기: 테크 산업의 보이지 않는 괴물들의 전쟁](https://www.youtube.com/watch?v=1i8ylq4j_EY)
-- [Believe you can change](http://www.aaronsw.com/weblog/dweck)
## 영상 자료에 관하여
-몇몇 영상들은 Cousera, Edx, Lynda.com 클래스에 등록하여야만 시청이 가능합니다. 이것들은 MOOCs라고 불리는데요.
-강의가 없는 경우에는 몇 달 동안 기다려야 할 수도 있습니다. Lynda.com 강좌들은 무료가 아닙니다.
+몇몇 영상들은 Cousera, Edx에 등록을 해야만 접근할 수 있습니다. 이것들은 MOOCs라고 불리는데요.
+강의가 없는 경우에는 몇 달 동안 기다려야 할 수도 있습니다.
여러분이 YouTube 온라인 강의 동영상과 같이 무료이고 항상 접근 가능한 동영상 소스들을 추가해주면 정말 감사하겠습니다.
저는 대학 강의 듣는 것을 좋아합니다.
## 인터뷰 과정 & 전반적인 인터뷰 준비 과정
-
-인터뷰 과정 & 전반적인 인터뷰 준비 과정
-
- [ ] [ABC: 항상 코딩 하라](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
- [ ] [화이트 보드 쓰기](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
-- [ ] [코딩 인터뷰에서 화이트 보드 효율적으로 쓰기](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/)
- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs)
+- [ ] Big 4에 취업하는 방법:
+ - [ ] ['Big 4에 취업하는 방법 - Amazon, Facebook, Google & Microsoft' (영상)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
- [ ] 코딩 인터뷰 정복 Set 1:
- [ ] [Gayle L McDowell - 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
- [ ] [저자와 함께하는 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
-- [ ] Big 4에 취업하는 방법:
- - [ ] ['Big 4에 취업하는 방법 - Amazon, Facebook, Google & Microsoft' (영상)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
-
+- [ ] 페이스북 코딩 인터뷰 정복
+ - [ ] [접근법](https://www.youtube.com/watch?v=wCl9kvQGHPI)
+ - [ ] [문제 풀이](https://www.youtube.com/watch?v=4UWDyJq8jZg)
- [ ] 준비 코스:
- [ ] [소프트웨어 엔지니어 인터뷰 대공개 (유료 강좌)](https://www.udemy.com/software-engineer-interview-unleashed):
- 전직 구글 면접관이 당신이 어떻게 소프트웨어 엔지니어 인터뷰를 준비해야 하는지 알려줍니다.
- [ ] [자료 구조, 알고리즘 그리고 면접을 위한 파이썬! (유료 강좌)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/):
- 자료 구조와 알고리즘, 모의 면접 등을 다루는 파이썬 중점 면접의 준비 강좌입니다.
-
-
+ - [ ] [Intro to Data Structures and Algorithms using Python (Udacity 무료 강좌))](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513):
+ - 파이썬 중심적 자료구조와 알고리즘 강좌.
+ - [ ] [자료구조와 알고리즘 나노학위! (Udacity 유료 나노학위)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256):
+ - 100개 이상의 자료구조, 알고리즘 실습과 당신의 인터뷰, 취업을 도울 섬세한 멘토의 가이드
## 인터뷰를 위한 언어 고르기
@@ -275,9 +276,11 @@
- JavaScript
- Ruby
+코딩 인터뷰를 위한 언어를 선택하는 것과 관련하여 제가 쓴 글입니다: [코딩 인터뷰를 위한 언어 선택하기](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)
+
당신은 당신의 언어에 매우 익숙하고 그 언어에 대해 잘 알아야 합니다.
-언어 선택을 도움이 될 만한 읽을 거리들
+언어 선택에 도움이 될 만한 읽을 거리들
- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/
- http://blog.codingforinterviews.com/best-programming-language-jobs/
@@ -298,47 +301,16 @@
- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
- JAVA 문제의 답변을 위해서
-
-만일 당신이 많은 여유 시간이 있다면:
+### 만일 당신이 많은 여유 시간이 있다면:
+
+하나를 선택:
- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
- - 모든 코드가 C++로 되어있다, 만일 당신의 인터뷰에서 C++를 사용하길 고려한다면 정말 좋은 책이다.
- - 일반적인 문제들을 해결하기 위해 좋은 책이다.
+- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/)
- [ ] Elements of Programming Interviews (Java version)
- [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/)
- [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews)
-
-
-### 컴퓨터 구조
-
-- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
- - 이 책은 2004년에 출판된 다소 구식의 책이지만, 간략히 컴퓨터를 이해하는 데에 훌륭한 자료입니다.
- - 이 책의 저자는 HLA를 발명했습니다. 그래서 회의적인 시선으로 HLA에 대해 언급하고 예로 듭니다. 널리 읽히지는 않지만, 어셈블리가 어떻게 생겼는 지를 보여주는 좋은 예입니다.
- - 이 장들은 당신에게 탄탄한 기초를 세워줄 것입니다:
-
- ......
-
- - Chapter 2 - Numeric Representation
- - Chapter 3 - Binary Arithmetic and Bit Operations
- - Chapter 4 - Floating-Point Representation
- - Chapter 5 - Character Representation
- - Chapter 6 - Memory Organization and Access
- - Chapter 7 - Composite Data Types and Memory Objects
- - Chapter 9 - CPU Architecture
- - Chapter 10 - Instruction Set Architecture
- - Chapter 11 - Memory Architecture and Organization
-
-
-
-
-만약에 시간적 여유가 좀 더 있다면 아래 서적을 읽어보는 것을 권유합니다.
-
-- [ ] [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/)
- - For a richer, more up-to-date (2011), but longer treatment
-
-
-
### 특정 언어 관련
**인터뷰를 위해 당신의 언어를 선택하여야 합니다 (윗글 참조)** 아래는 제가 추천하는 언어들입니다. 이 언어들중에 부연설명이나 부가 자료들이 있다면 나눠 주세요.
@@ -351,23 +323,18 @@
### C++
-
-C++
-
나는 아래의 두 책들을 읽지 않았습니다. 하지만 Sedgewick이 높게 평가한 책들입니다. 그는 정말 대단한 사람입니다.
- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
+- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf)
+ - 자세하고 많은 자료구조와 알고리즘.
+ - 처음 시도 하는 사람에게 좋은 선택.
C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적인 자료를 찾고 있습니다.
-
-
### Java
-
-Java
-
- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
- videos with book content (and Sedgewick!) on coursera:
- [Algorithms I](https://www.coursera.org/learn/algorithms-part1)
@@ -380,63 +347,14 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적
- UC버클리 대학의 CS입문 과정의 선택 텍스트로 사용됨
- 아래에서 Python 버전에 대한 나의 책 보고서를 참조하십시오. 이 책은 동일한 주제를 다루고 있습니다.
-
-
### Python
-
-Python
-
- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
- by Goodrich, Tamassia, Goldwasser
- 나는 이 책을 사랑한다. 이 책은 모든 것을 다룬다.
- Pythonic code
- 나의 열렬한 서적 보고서: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/
-
-
-
-### 선택 도서
-
-**어떤 사람들은 이 책들을 추천한다. 하지만 만약 당신이 소프트웨어 엔지니어링 분야에 오랜 경험이 있고, 그로 인해 훨씬 더 어려운 인터뷰를 볼 것이라 생각하지 않는다면, 나는 이 책들을 공부하는 것이 너무 과하다고 생각한다:**
-
-
-Optional Books
-
-- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
- - As a review and problem recognition
- - 알고리즘 카탈로그 부분은 면접에서 다루는 난이도의 범주를 훨씬 넘깁니다.
- - 이 책은 2개의 파트가 있습니다:
- - class textbook on data structures and algorithms
- - 장점:
- - is a good review as any algorithms textbook would be
- - 산학과 연구에서 문제들을 해결한 그의 경험을 이야기하는 것이 좋음
- - 예제 코드가 C언어
- - 단점:
- - CLRS처럼 너무 함축되어 있어서 헤아리기 힘들 수 있다. 그래서 어떤 주제는 CLRS를 읽는 게 더 나을 수도 있다.
- - 7, 8, 9장은 따라가기 힘들 수 있다. 어떤 항목들은 설명이 잘 안되어있거나 더 많은 배경 지식이 필요하기 때문이다.
- - (오해하지 마세요) 전 Skiena씨와 그 분의 교육 스타일과 매너리즘은 좋아합니다만, 스토니브룩 대학의 자료는 그렇지 않더군요.
- - 알고리즘 카탈로그:
- - 이게 이 책을 사는 진짜 이유
- - about to get to this part. Will update here once I've made my way through it.
- - 아마존 킨들에서 도서 대여 가능
- - Answers:
- - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
- - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
- - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
-
-- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
- - **중요:** 이 책을 읽으면 특별한 가치를 얻을 수 있습니다. 이 책은 알고리즘과 자료구조를 훌륭하게 살피고 있지만, 좋은 코드를 작성하는 법을 알려주지는 않습니다. 괜찮은 솔루션을 코드로 효율적으로 옮겨적을 줄 알아야합니다.
- - CLR 또는 CLRS로 알려져있습니다. (역: 저자들 이름의 첫글자를 따서 CLRS라고 불리지만, 초판에는 Stein이 없었습니다.)
-
-- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
- - 처음 두 장은 (데이터 테이프를 사용한 아주 오래된) 문제를 프로그래밍하는 기발한 솔루션을 보여줍니다. 하지만,
- that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter.
-
-- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~
- - 좋은 책. 하지만 몇 페이지 넘기면서 문제를 해결한 후에 파스칼, do while 반복문, 1-indexed 배열, unclear post-condition satisfaction results를 보고 좌절했다.
- - 다른 책이나 온라인 코딩 문제에 있는 코딩 문제를 보는 게 나을 것 같다.
-
-
+- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf)
## 시작하기 전에
@@ -452,6 +370,8 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적
[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/)
+내가 추천받은 강좌 (아직 수업을 들어보지는 않았다): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn)
+
### 2. Flashcard를 사용하자.
이 문제를 해결하기 위해 나는 2가지 종류(일반적인 내용, 코드)의 flashcard를 보관하고 추가할 수 있는 작은 사이트를 만들었다.
@@ -462,8 +382,8 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적
당신만의 카드를 무료로 만들어보자:
- [Flashcard 사이트 repo](https://github.com/jwasham/computer-science-flash-cards)
-- [내 flashcard 데이터베이스 (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [내 flashcard 데이터베이스 (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [내 flashcard 데이터베이스 (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [내 flashcard 데이터베이스 (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
앞에서도 언급했듯이 나는 불필요하게 많은 것을 공부하려고 했고, 내 카드의 내용들은 어셈블리 언어와 Python의 자잘한 지식들부터 기계 학습과 통계학까지 넘나들게 되었다. 결국 기업이 요구하는 것보다 훨씬 멀리 가버리고 말았다.
@@ -476,13 +396,20 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적
Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya))
-### 3. 검토, 검토, 검토
+### 3. 자료구조와 알고리즘을 배우면서 코딩 인터뷰를 시작하라
+
+문제를 풀기 위해 배웠던 무언가를 적용하는 것이 필요합니다., 그렇지 않으면 까먹을 겁니다. 내가 이 실수를 했습니다. 한 주제를 익혔다면 ,
+ 링크드 리스트와 같이 그 주제에 좀 익숙해졌다면, 코딩 인터뷰 책 한권을 펴서 링크드 리스트와 관련된 문제를 몇개 풀어보십시오. 그리고 나서 다시 돌아가 다른 링크드리스트 문제를 해결하던, 회귀 문제나 다른 것을 하십시오. 하지만 배우면서 문제를 계속해서 푸십시오. 당신은 지식 자체의 소유가 아니라 그 지식을 적용할 수 있기에 고용되는 것입니다.
+다음은 제가 추천하는 책과 사이트들입니다..
+좀 더 알아보고 싶다면: [Coding Question Practice](#coding-question-practice)
+
+### 4. 검토, 검토, 검토
나는 ASCII, OSI 구조, Big-O 표기법 등에 관한 일련의 치트시트를 만들어 놓고, 여유 시간이 날 때마다 공부한다.
30분 동안 프로그래밍 문제를 해결하고, flashcard를 살펴보자.
-### 4. 집중
+### 5. 집중
주의를 산만하게 만드는 많은 것이 있으며, 이것들은 우리의 귀중한 시간을 뺏어간다. 주의를 집중하는 것은 힘든 일이다.
@@ -517,9 +444,9 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
모든 주제에 대한 모든 것을 할 수 없지만 나는 노력했다.
나의 코드를 여기서 확인하세요:
- - [C] (https://github.com/jwasham/practice-c)
- - [C++] (https://github.com/jwasham/practice-cpp)
- - [Python] (https://github.com/jwasham/practice-python)
+ - [C](https://github.com/jwasham/practice-c)
+ - [C++](https://github.com/jwasham/practice-cpp)
+ - [Python](https://github.com/jwasham/practice-python)
당신은 모든 알고리즘에 대해서 기억할 필요는 없다.
@@ -527,9 +454,6 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
## 먼저 알아야 할 지식
-
-Prerequisite Knowledge
-
- [ ] **C언어 배우기**
- C 는 어디에나 있다. 당신은 책이나 강의, 비디오 등 공부하는 동안 모든 곳에서 예제를 볼 것이다.
- [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
@@ -543,14 +467,11 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
- [ ] [중앙처리장치(CPU) (영상)](https://youtu.be/FZGugFqdr60)
- [ ] [명렁어와 프로그램 (영상)](https://youtu.be/zltgXvg6r3k)
-
-
## 알고리즘 복잡도 / Big-O / 점근적 분석
-
-Algorithmic complexity / Big-O / Asymptotic analysis
-
- 구현할 것은 없다.
+- 여기에는 다양한 영상들이 있다. 이해할 때까지 충분히 보고 언제든지 다시 돌아와서 복습할 수 있다.
+- 일부 강의가 너무 수학적이라면, 아래로 가서 이산 수학에 대한 동영상을 보며 배경 지식을 쌓아보세요.
- [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
- [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU)
- [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
@@ -569,16 +490,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
- [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/)
- [ ] [Cheat sheet](http://bigocheatsheet.com/)
-
- 일부 강의가 너무 수학적이라면, 아래로 가서 이산 수학에 대한 동영상을 보며 배경 지식을 쌓아보세요.
-
-
-
## 자료구조
-
-Data Structures
-
- ### 배열
- 자동 리사이징 벡터 구현하기
- [ ] 설명:
@@ -704,13 +617,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
- get(key)
- remove(key)
-
-
## 추가 지식
-
-More Knowledge
-
- ### Binary search
- [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno)
- [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search)
@@ -720,7 +628,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
- 재귀를 사용한 이진 탐색
- ### Bitwise operations
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] 비트 연산자(&, |, ^, ~, >>, <<) 제대로 이해하기
- [ ] [워드](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] 시작하기 좋은 곳:
@@ -731,30 +639,23 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
- [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html)
- [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/)
- [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html)
+ - [ ] [Bit Hacks (video)](https://www.youtube.com/watch?v=ZusiKXcz_ac)
- [ ] 2의 보수와 1의 보수
- [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4)
- [1의 보수](https://ko.wikipedia.org/wiki/1의_보수)
- [2의 보수](https://ko.wikipedia.org/wiki/2의_보수)
- - [ ] count set bits
+ - [ ] Count set bits
- [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc)
- [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan)
- [How To Count The Number Of Set Bits In a 32 Bit Integer](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer)
- - [ ] round to next power of 2:
- - [Round Up To Next Power Of Two](https://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html)
- - [ ] swap values:
+ - [ ] Swap values:
- [Swap](https://bits.stephan-brumme.com/swap.html)
- - [ ] absolute value:
+ - [ ] Absolute value:
- [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html)
-
-
## 트리
-
-Trees
-
- ### Trees - Notes & Background
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- 트리 기초 형태 만들기
- 순회
@@ -834,13 +735,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
- [ ] heap_sort() - 정렬되지 않은 배열을 받아서 정렬된 배열로 만든다. 추가 메모리 없이 제자리에서 max-heap을 사용한다.
- 노트: min-heap을 사용하면 연산을 줄일 수 있지만, 공간이 두 배로 필요합니다. (제자리에서 못 하기 때문에)
-
-
## 정렬
-
-Sorting
-
- [ ] Notes:
- 정렬들 구현 & 각 정렬의 최적의 경우/최악의 경우, 평균적인 복잡도를 알기:
- 버블 소트 쓰지 마세요 - 끔찍하니까요 - n이 16이하 제외하고 O(n^2)
@@ -914,20 +810,16 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
개략적으로 보자면, 여기에 시각적으로 나타낸 [15가지 정렬 알고리즘들](https://www.youtube.com/watch?v=kPRA0W1kECg)을 보세요.
이 주제에 대해서 더 자세히 알고 싶다면, [몇몇 주제에 대한 세부사항](#몇몇-주제에-대한-세부사항)에서 "정렬" 섹션를 보세요.
-
-
## 그래프
-
-Graphs
-
그래프는 컴퓨터 과학의 여러 문제들을 표현하는 데 사용할 수 있다. 때문에 이 섹션은 트리나 정렬 섹션처럼 길다.
- 노트:
- - 메모리에 그래프를 표시하는 세 가지 기본 방법이 있다:
+ - 메모리에 그래프를 표시하는 네 가지 기본 방법이 있다:
- 오브젝트와 포인터
- 행렬
- 인접 리스트
+ - 인접 맵
- 각각의 표현과 장단점을 숙지하라.
- 넓이 우선 탐색(BFS)와 깊이 우선 탐색(DFS) - 계산상의 복잡성, 장단점, 실제 코드로 구현하는 방법을 알아야 한다.
- 질문을 받을 시 먼저 그래프 기반 솔루션을 찾고, 없을 경우에 다른 솔루션으로 넘어가라.
@@ -980,13 +872,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그래프 실습을 할 수 있습니다.
-
-
## Even More Knowledge
-
-더 많은 지식
-
- ### Recursion
- [ ] 재귀와 백트래킹에 대한 스탠포드 대학 강의:
- [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
@@ -1000,6 +887,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- ### Dynamic Programming
+ - 인터뷰에서 DP 문제를 접하지 않을 수도 있습니다. 하지만 알고 있는게 미뤄두는 것 보다 낫습니다.
- 이 주제는 아주 어렵습니다. DP로 풀리는 각 문제마다 어떤 점화식을 정의해야 하는데 그게 까다롭습니다.
- 얽혀있는 패턴들을 확실히 이해할 때까지, 많은 DP 예시 문제들을 찾아보기를 권합니다.
- [ ] Videos:
@@ -1026,24 +914,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- ### Object-Oriented Programming
- [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
- - [ ] 객체 지향 소프트웨어 공학: UML과 JAVA를 사용한 소프트웨어 개발 (21개의 영상):
- - Can skip this if you have a great grasp of OO and OO design practices.
- - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
- [ ] SOLID OOP Principles:
- - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
- [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
- - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
- - [더 알아보기](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
- - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension for not for modification](https://en.wikipedia.org/wiki/Open/closed_principle)
- - [더 알아보기](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
- - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
- - [더 알아보기](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
- - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use
- - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
- - [더 알아보기](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
- - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects.
- - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
- - [더 알아보기](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
- ### Design patterns
- [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
@@ -1136,7 +1008,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- Modern concurrency constructs with multicore processors
- [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2)
- [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3)
- - [Scheduling (video)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8)
- Process resource needs (memory: code, static storage, stack, heap, and also file descriptors, i/o)
- Thread resource needs (shares above (minus stack) with other threads in the same process but each has its own pc, stack counter, registers, and stack)
- Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy.
@@ -1152,38 +1023,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [Keynote David Beazley - Topics of Interest (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU)
- [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY)
-- ### Papers
- - Reading all from end to end with full comprehension will likely take more time than you have. I recommend being selective on papers and their sections.
- - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
- - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
- - [implemented in Go](https://godoc.org/github.com/thomas11/csp)
- - [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
- - replaced by Colossus in 2012
- - [ ] [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
- - mostly replaced by Cloud Dataflow?
- - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
- - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf)
- - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf)
- - [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf)
- - The Dynamo paper kicked off the NoSQL revolution
- - [ ] [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf)
- - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf)
- - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf)
- - [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/)
- - paper not available
- - [ ] 2012: AddressSanitizer: A Fast Address Sanity Checker:
- - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
- - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
- - [ ] 2013: Spanner: Google’s Globally-Distributed Database:
- - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
- - [video](https://www.usenix.org/node/170855)
- - [ ] [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
- - [ ] [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
- - [ ] [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
- - [ ] [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf )
- - [ ] [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
- - [ ] [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
-
- ### 테스트
- 알아 두어야 할 것:
- 유닛 테스트는 어떻게 작동하는지
@@ -1194,10 +1033,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [소프트웨어 테스트에 대한 James Bach의 무료 강의 (비디오)](https://www.youtube.com/watch?v=ILkT_HV9DVU)
- [ ] [Steve Freeman - Test-Driven 개발 (이것은 우리가 의미하는 것은 아니다) (비디오)](https://vimeo.com/83960706)
- [참고자료](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf)
- - [ ] [TDD는 끝났다. 오래 사는 테스팅.](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html)
- - [ ] [TDD는 정말 끝났는가? (비디오)](https://www.youtube.com/watch?v=z9quxZsLcfo)
- - [ ] [비디오 시리즈 (152 개) - 다 볼 필요 없음 (비디오)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g)
- - [ ] [파이턴과 함께하는 Test-Driven 웹 개발](http://www.obeythetestinggoat.com/pages/book.html#toc)
- [ ] 의존성 주입:
- [ ] [비디오](https://www.youtube.com/watch?v=IKD2-MAkXyQ)
- [ ] [Tao Of Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html)
@@ -1207,10 +1042,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- 운영체제(OS)에서 어떻게 동작하는지
- 운영 체제 관련 영상들에서 알아보실 수 있습니다.
-- ### Implement system routines
- - 당신이 사용하는 프로그래밍 API들이 어떤 이점을 가져오는지 이해하기
- - 그리고 그것들을 구현할 수 있는가?
-
- ### String searching & manipulations
- [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays)
- [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4)
@@ -1272,13 +1103,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s)
- [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ)
-
-
## 시스템 디자인, 확장성, 데이터 핸들링
-
-System Design, Scalability, Data Handling
-
- **4년 이상의 경력자라면 이런 시스템 디자인 질문들을 받을 수 있다.**
- Scalability and System Design are very large topics with many topics and resources, since
there is a lot to consider when designing a software/hardware system that can scale.
@@ -1308,10 +1134,11 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
- [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk)
- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
-- [ ] Paxos Consensus algorithm:
- - [short video](https://www.youtube.com/watch?v=s8JqcZtvnsM)
- - [extended video with use case and multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o)
- - [paper](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)
+- [ ] Consensus Algorithms:
+ - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM)
+ - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE)
+ - [ ] [Easy-to-read paper](https://raft.github.io/)
+ - [ ] [Infographic](http://thesecretlivesofdata.com/raft/)
- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
- [ ] Scalability:
@@ -1345,7 +1172,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
- [ ] [Google's Transition From Single Datacenter, To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
- [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
- - [ ] [Egnyte Architecture: Lessons Learned In Building And Scaling A Multi Petabyte Distributed System](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html)
- [ ] [Machine Learning Driven Programming: A New Programming For A New World](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
- [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
- [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
@@ -1354,7 +1180,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
- [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html)
- [ ] [How Does The Use Of Docker Effect Latency?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html)
- - [ ] [Does AMP Counter An Existential Threat To Google?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html)
- [ ] [A 360 Degree View Of The Entire Netflix Stack](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html)
- [ ] [Latency Is Everywhere And It Costs You Sales - How To Crush It](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it)
- [ ] [Serverless (very long, just need the gist)](http://martinfowler.com/articles/serverless.html)
@@ -1374,7 +1199,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- review: [The System Design Primer](https://github.com/donnemartin/system-design-primer)
- [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- flow:
1. Understand the problem and scope:
- define the use cases, with interviewer's help
@@ -1404,15 +1229,10 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [Design a URL-shortener system: copied from above](http://www.hiredintech.com/system-design/the-system-design-process/)
- [Design a cache system](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/)
-
-
---
## 최종 검토
-
-Final Review
-
이 섹션에는 중요한 개념들을 빠르게 검토할 수 있는 짧은 영상들이 포함되어 있다.
복습을 하고자 한다면, 이 영상들이 도움이 될 것이다.
@@ -1423,15 +1243,10 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1)
- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2)
-
-
---
## 코딩 문제 연습
-
-Coding Question Practice
-
이제 당신은 위의 컴퓨터 과학 주제들을 모두 알고 있으므로, 코딩 문제에 답하는 것을 연습할 차례이다.
**코딩 문제 연습은 프로그래밍 문제에 대한 답을 외우는 것이 아니다.**
@@ -1450,7 +1265,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
소파에 앉아서 연습할 수 있다. 이 것은 내 "소파 화이트보드"이다.
크기 비교를 위해 사진에 펜을 추가하였다. 펜을 쓰면, 곧 지우고 싶어질 것이다. 금방 지저분해 진다.
-![my sofa whiteboard](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg)
+![my sofa whiteboard](https://camo.githubusercontent.com/880d361d19c21cf62d49846283c2742890b53905/68747470733a2f2f64336a32706b6d6a74696e366f752e636c6f756466726f6e742e6e65742f6172745f626f6172645f736d5f322e6a7067)
보충:
@@ -1468,13 +1283,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
[위의 도서 목록](#도서-목록)을 보세요.
-
-
## 코딩 연습/도전
-
-Coding Question Practice
-
공부하는 게 머리에 잘 안 들어올 때, 한번 해보세요.
가능한 한 매일 코딩 챌린지를 하는겁니다.
@@ -1484,18 +1294,28 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
코딩 인터뷰 질문들 영상:
- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI)
- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd)
+- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-)
+ - Good explanations of solution and the code.
+ - You can watch several in a short time.
+- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder)
Challenge sites:
- [LeetCode](https://leetcode.com/)
-- [TopCoder](https://www.topcoder.com/)
-- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems)
-- [Codewars](http://www.codewars.com)
-- [HackerEarth](https://www.hackerearth.com/)
+ - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing.
+ - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode)
+ - See Nick White Videos above for short code-throughs
- [HackerRank](https://www.hackerrank.com/)
-- [Codility](https://codility.com/programmers/)
+- [TopCoder](https://www.topcoder.com/)
- [InterviewCake](https://www.interviewcake.com/)
- [Geeks for Geeks](http://www.geeksforgeeks.org/)
- [InterviewBit](https://www.interviewbit.com/invite/icjf)
+- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems)
+- [Code Exercises](https://code-exercises.com)
+
+Language-learning sites, with challenges:
+- [Codewars](http://www.codewars.com)
+- [Codility](https://codility.com/programmers/)
+- [HackerEarth](https://www.hackerearth.com/)
- [Sphere Online Judge (spoj)](http://www.spoj.com/)
- [Codechef](https://www.codechef.com/)
@@ -1506,8 +1326,7 @@ Challenge repos:
- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview.
- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews
- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies.
-
-
+- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously.
## 인터뷰가 얼마 남지 않았을 때
@@ -1551,6 +1370,7 @@ Challenge repos:
- 지금은 어떤 일을 하고 계신가요?
- What do you like about it?
- 어떤 Work life를 생각하시나요?
+- 워라밸은 어떤게 좋나요?
## 취직했다면
@@ -1576,8 +1396,7 @@ Challenge repos:
## Additional Books
-
-Additional Books
+ 아래는 당신이 흥미로워하는 주제에 대해 공부할 수 있는 자료들입니다.
- [ ] [The Unix Programming Environment](https://www.amazon.com/dp/013937681X)
- an oldie but a goodie
@@ -1590,16 +1409,55 @@ Challenge repos:
- aka the "Gang Of Four" book, or GOF
- the canonical design patterns book
- [ ] [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/)
+- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
+ - As a review and problem recognition
+ - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview.
+ - This book has 2 parts:
+ - class textbook on data structures and algorithms
+ - pros:
+ - is a good review as any algorithms textbook would be
+ - nice stories from his experiences solving problems in industry and academia
+ - code examples in C
+ - cons:
+ - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects
+ - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have
+ - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material.
+ - algorithm catalog:
+ - this is the real reason you buy this book.
+ - about to get to this part. Will update here once I've made my way through it.
+ - Can rent it on kindle
+ - Answers:
+ - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
+ - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
+ - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
+- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
+ - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief.
+ - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like.
+ - These chapters are worth the read to give you a nice foundation:
+ - Chapter 2 - Numeric Representation
+ - Chapter 3 - Binary Arithmetic and Bit Operations
+ - Chapter 4 - Floating-Point Representation
+ - Chapter 5 - Character Representation
+ - Chapter 6 - Memory Organization and Access
+ - Chapter 7 - Composite Data Types and Memory Objects
+ - Chapter 9 - CPU Architecture
+ - Chapter 10 - Instruction Set Architecture
+ - Chapter 11 - Memory Architecture and Organization
+- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
+ - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently.
+ - aka CLR, sometimes CLRS, because Stein was late to the game
-
+- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055)
+ - For a richer, more up-to-date (2017), but longer treatment
+
+- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
+ - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but
+ that is just an intro. This a guidebook on program design and architecture.
## Additional Learning
-
-Additional Learning
-These topics will likely not come up in an interview, but I added them to help you become a well-rounded
-software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox.
+ 두루 갖춘 소프트웨어 엔지니어가 되는데 도움이 될만한 것들을 추가했습니다. 이를 통해 더 큰 도구들을 다루실 수 있게 되실 겁니다.
- ### Compilers
- [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
@@ -1630,116 +1488,115 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
- ### Unix command line tools
- I filled in the list below from good tools.
- - [ ] bash
- - [ ] cat
- - [ ] grep
- - [ ] sed
- - [ ] awk
- - [ ] curl or wget
- - [ ] sort
- - [ ] tr
- - [ ] uniq
- - [ ] [strace](https://en.wikipedia.org/wiki/Strace)
- - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/)
+ - bash
+ - cat
+ - grep
+ - sed
+ - awk
+ - curl or wget
+ - sort
+ - tr
+ - uniq
+ - [strace](https://en.wikipedia.org/wiki/Strace)
+ - [tcpdump](https://danielmiessler.com/study/tcpdump/)
- ### Information theory (videos)
- - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory)
- - [ ] more about Markov processes:
- - [ ] [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
- - [ ] [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
- - [ ] [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
+ - [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory)
+ - More about Markov processes:
+ - [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
+ - [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
+ - [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
- See more in MIT 6.050J Information and Entropy series below.
- ### Parity & Hamming Code (videos)
- - [ ] [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE)
- - [ ] [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M)
- - [ ] Hamming Code:
+ - [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE)
+ - [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M)
+ - Hamming Code:
- [Error detection](https://www.youtube.com/watch?v=1A_NcXxdoCc)
- [Error correction](https://www.youtube.com/watch?v=JAMLuxdHH8o)
- - [ ] [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk)
+ - [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk)
- ### Entropy
- also see videos below
- make sure to watch information theory videos first
- - [ ] [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176)
+ - [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176)
- ### Cryptography
- also see videos below
- make sure to watch information theory videos first
- - [ ] [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
- - [ ] [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
- - [ ] [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
+ - [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
+ - [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- ### Compression
- make sure to watch information theory videos first
- - [ ] Computerphile (videos):
- - [ ] [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w)
- - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko)
- - [ ] [Upside Down Trees (Huffman Trees)](https://www.youtube.com/watch?v=umTbivyJoiI)
- - [ ] [EXTRA BITS/TRITS - Huffman Trees](https://www.youtube.com/watch?v=DV8efuB3h2g)
- - [ ] [Elegant Compression in Text (The LZ 77 Method)](https://www.youtube.com/watch?v=goOa3DGezUA)
- - [ ] [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU)
- - [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
- - [ ] [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s)
+ - Computerphile (videos):
+ - [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w)
+ - [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko)
+ - [Upside Down Trees (Huffman Trees)](https://www.youtube.com/watch?v=umTbivyJoiI)
+ - [EXTRA BITS/TRITS - Huffman Trees](https://www.youtube.com/watch?v=DV8efuB3h2g)
+ - [Elegant Compression in Text (The LZ 77 Method)](https://www.youtube.com/watch?v=goOa3DGezUA)
+ - [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU)
+ - [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
+ - [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s)
- ### Computer Security
- [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
- - [ ] [Buffer Overflow Exploits and Defenses](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3)
- - [ ] [Privilege Separation](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Capabilities](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Sandboxing Native Code](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6)
- - [ ] [Web Security Model](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Securing Web Applications](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Symbolic Execution](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Network Security](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Network Protocols](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- - [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
+ - [Buffer Overflow Exploits and Defenses](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3)
+ - [Privilege Separation](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Capabilities](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Sandboxing Native Code](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6)
+ - [Web Security Model](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Securing Web Applications](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Symbolic Execution](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Network Security](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Network Protocols](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
- ### Garbage collection
- - [ ] [Compilers (video)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff)
- - [ ] [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
- - [ ] [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits)
- - [ ] [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
+ - [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
+ - [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits)
+ - [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
- ### Parallel Programming
- - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
- - [ ] [Efficient Python for High Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk)
+ - [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
+ - [Efficient Python for High Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk)
- ### Messaging, Serialization, and Queueing Systems
- - [ ] [Thrift](https://thrift.apache.org/)
+ - [Thrift](https://thrift.apache.org/)
- [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html)
- - [ ] [Protocol Buffers](https://developers.google.com/protocol-buffers/)
+ - [Protocol Buffers](https://developers.google.com/protocol-buffers/)
- [Tutorials](https://developers.google.com/protocol-buffers/docs/tutorials)
- - [ ] [gRPC](http://www.grpc.io/)
+ - [gRPC](http://www.grpc.io/)
- [gRPC 101 for Java Developers (video)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1)
- - [ ] [Redis](http://redis.io/)
+ - [Redis](http://redis.io/)
- [Tutorial](http://try.redis.io/)
- - [ ] [Amazon SQS (queue)](https://aws.amazon.com/sqs/)
- - [ ] [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/)
- - [ ] [RabbitMQ](https://www.rabbitmq.com/)
+ - [Amazon SQS (queue)](https://aws.amazon.com/sqs/)
+ - [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/)
+ - [RabbitMQ](https://www.rabbitmq.com/)
- [Get Started](https://www.rabbitmq.com/getstarted.html)
- - [ ] [Celery](http://www.celeryproject.org/)
+ - [Celery](http://www.celeryproject.org/)
- [First Steps With Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)
- - [ ] [ZeroMQ](http://zeromq.org/)
+ - [ZeroMQ](http://zeromq.org/)
- [Intro - Read The Manual](http://zeromq.org/intro:read-the-manual)
- - [ ] [ActiveMQ](http://activemq.apache.org/)
- - [ ] [Kafka](http://kafka.apache.org/documentation.html#introduction)
- - [ ] [MessagePack](http://msgpack.org/index.html)
- - [ ] [Avro](https://avro.apache.org/)
+ - [ActiveMQ](http://activemq.apache.org/)
+ - [Kafka](http://kafka.apache.org/documentation.html#introduction)
+ - [MessagePack](http://msgpack.org/index.html)
+ - [Avro](https://avro.apache.org/)
- ### A*
- - [ ] [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm)
- - [ ] [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
- - [ ] [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
+ - [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm)
+ - [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
+ - [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
- ### Fast Fourier Transform
- - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
- - [ ] [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
- - [ ] [What is the Fourier Transform? (video)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
- - [ ] [Divide & Conquer: FFT (video)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4)
- - [ ] [Understanding The FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
+ - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
+ - [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
+ - [What is the Fourier Transform? (video)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
+ - [Divide & Conquer: FFT (video)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4)
+ - [Understanding The FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
- ### Bloom Filter
- Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k)
@@ -1757,11 +1614,11 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
- [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html)
- ### van Emde Boas Trees
- - [ ] [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
- - [ ] [MIT Lecture Notes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf)
+ - [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
+ - [MIT Lecture Notes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf)
- ### Augmented Data Structures
- - [ ] [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc)
+ - [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc)
- ### Balanced search trees
- Know at least one type of balanced binary tree (and know how it's implemented):
@@ -1775,31 +1632,31 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
If you end up implementing red/black tree try just these:
- search and insertion functions, skipping delete
- I want to learn more about B-Tree since it's used so widely with very large data sets.
- - [ ] [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
+ - [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
- - [ ] **AVL trees**
+ - **AVL trees**
- In practice:
From what I can tell, these aren't used much in practice, but I could see where they would be:
The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly
balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it
attractive for data structures that may be built once and loaded without reconstruction, such as language
dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter).
- - [ ] [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
- - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
- - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
- - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
+ - [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
+ - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
+ - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
+ - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
- - [ ] **Splay trees**
+ - **Splay trees**
- In practice:
Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors,
data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory,
networking and file system code) etc.
- - [ ] [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY)
- - [ ] MIT Lecture: Splay Trees:
+ - [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY)
+ - MIT Lecture: Splay Trees:
- Gets very mathy, but watch the last 10 minutes for sure.
- [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
- - [ ] **Red/black trees**
+ - **Red/black trees**
- these are a translation of a 2-3 tree (see below)
- In practice:
Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time.
@@ -1809,47 +1666,47 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java,
the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor
hashcodes, a Red-Black tree is used.
- - [ ] [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
- - [ ] [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
- - [ ] [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
- - [ ] [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/community/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/)
+ - [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
+ - [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
+ - [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
+ - [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/community/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/)
- - [ ] **2-3 search trees**
+ - **2-3 search trees**
- In practice:
2-3 trees have faster inserts at the expense of slower searches (since height is more compared to AVL trees).
- You would use 2-3 tree very rarely because its implementation involves different types of nodes. Instead, people use Red Black trees.
- - [ ] [23-Tree Intuition and Definition (video)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
- - [ ] [Binary View of 23-Tree](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [2-3 Trees (student recitation) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [23-Tree Intuition and Definition (video)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
+ - [Binary View of 23-Tree](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [2-3 Trees (student recitation) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] **2-3-4 Trees (aka 2-4 trees)**
+ - **2-3-4 Trees (aka 2-4 trees)**
- In practice:
For every 2-4 tree, there are corresponding red–black trees with data elements in the same order. The insertion and deletion
operations on 2-4 trees are also equivalent to color-flipping and rotations in red–black trees. This makes 2-4 trees an
important tool for understanding the logic behind red–black trees, and this is why many introductory algorithm texts introduce
2-4 trees just before red–black trees, even though **2-4 trees are not often used in practice**.
- - [ ] [CS 61B Lecture 26: Balanced Search Trees (video)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q)
- - [ ] [Bottom Up 234-Trees (video)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [Top Down 234-Trees (video)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
+ - [CS 61B Lecture 26: Balanced Search Trees (video)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q)
+ - [Bottom Up 234-Trees (video)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [Top Down 234-Trees (video)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
- - [ ] **N-ary (K-ary, M-ary) trees**
+ - **N-ary (K-ary, M-ary) trees**
- note: the N or K is the branching factor (max branches)
- binary trees are a 2-ary tree, with branching factor = 2
- 2-3 trees are 3-ary
- - [ ] [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree)
+ - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree)
- - [ ] **B-Trees**
+ - **B-Trees**
- fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor)
- In Practice:
B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to
its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary
block in a particular file. The basic problem is turning the file block i address into a disk block
(or perhaps to a cylinder-head-sector) address.
- - [ ] [B-Tree](https://en.wikipedia.org/wiki/B-tree)
- - [ ] [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
- - [ ] [B-Tree Definition and Insertion (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [B-Tree Deletion (video)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
- - [ ] [MIT 6.851 - Memory Hierarchy Models (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+ - [B-Tree](https://en.wikipedia.org/wiki/B-tree)
+ - [B-Tree Definition and Insertion (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
+ - [B-Tree Deletion (video)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [MIT 6.851 - Memory Hierarchy Models (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
- covers cache-oblivious B-Trees, very interesting data structures
- the first 37 minutes are very technical, may be skipped (B is block size, cache line size)
@@ -1857,57 +1714,57 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
- ### k-D Trees
- great for finding number of points in a rectangle or higher dimension object
- a good fit for k-nearest neighbors
- - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk)
- - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
+ - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk)
+ - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
- ### Skip lists
- "These are somewhat of a cult data structure" - Skiena
- - [ ] [Randomization: Skip Lists (video)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [For animations and a little more detail](https://en.wikipedia.org/wiki/Skip_list)
+ - [Randomization: Skip Lists (video)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [For animations and a little more detail](https://en.wikipedia.org/wiki/Skip_list)
- ### Network Flows
- - [ ] [Ford-Fulkerson in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs)
- - [ ] [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
- - [ ] [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
+ - [Ford-Fulkerson in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs)
+ - [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
+ - [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
- ### Disjoint Sets & Union Find
- - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI)
- - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1)
+ - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI)
+ - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1)
- ### Math for Fast Processing
- - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
+ - [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
- ### Treap
- Combination of a binary search tree and a heap
- - [ ] [Treap](https://en.wikipedia.org/wiki/Treap)
- - [ ] [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8)
- - [ ] [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
+ - [Treap](https://en.wikipedia.org/wiki/Treap)
+ - [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8)
+ - [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
- ### Linear Programming (videos)
- - [ ] [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ)
- - [ ] [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U)
- - [ ] [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik)
- - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk)
+ - [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ)
+ - [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U)
+ - [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik)
+ - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk)
- ### Geometry, Convex hull (videos)
- - [ ] [Graph Alg. IV: Intro to geometric algorithms - Lecture 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
- - [ ] [Geometric Algorithms: Graham & Jarvis - Lecture 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
- - [ ] [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
+ - [Graph Alg. IV: Intro to geometric algorithms - Lecture 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
+ - [Geometric Algorithms: Graham & Jarvis - Lecture 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
- ### Discrete math
- 아래에 있는 영상을 확인하세요.
- ### Machine Learning
- - [ ] Why ML?
- - [ ] [How Google Is Remaking Itself As A Machine Learning First Company](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70)
- - [ ] [Large-Scale Deep Learning for Intelligent Computer Systems (video)](https://www.youtube.com/watch?v=QSaZGT4-6EY)
- - [ ] [Deep Learning and Understandability versus Software Engineering and Verification by Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw)
- - [ ] [Google's Cloud Machine learning tools (video)](https://www.youtube.com/watch?v=Ja2hxBAwG_0)
- - [ ] [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (video)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal)
- - [ ] [Tensorflow (video)](https://www.youtube.com/watch?v=oZikw5k_2FM)
- - [ ] [Tensorflow Tutorials](https://www.tensorflow.org/versions/r0.11/tutorials/index.html)
- - [ ] [Practical Guide to implementing Neural Networks in Python (using Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)
+ - Why ML?
+ - [How Google Is Remaking Itself As A Machine Learning First Company](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70)
+ - [Large-Scale Deep Learning for Intelligent Computer Systems (video)](https://www.youtube.com/watch?v=QSaZGT4-6EY)
+ - [Deep Learning and Understandability versus Software Engineering and Verification by Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw)
+ - [Google's Cloud Machine learning tools (video)](https://www.youtube.com/watch?v=Ja2hxBAwG_0)
+ - [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (video)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal)
+ - [Tensorflow (video)](https://www.youtube.com/watch?v=oZikw5k_2FM)
+ - [Tensorflow Tutorials](https://www.tensorflow.org/versions/r0.11/tutorials/index.html)
+ - [Practical Guide to implementing Neural Networks in Python (using Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)
- Courses:
- [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning)
- [videos only](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW)
@@ -1925,163 +1782,198 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
- [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers)
- Data School: http://www.dataschool.io/
-
-
---
## 몇몇 주제에 대한 세부사항
-
-Additional Detail on Some Subjects
-
I added these to reinforce some ideas already presented above, but didn't want to include them
above because it's just too much. It's easy to overdo it on a subject.
You want to get hired in this century, right?
-- [ ] **Union-Find**
- - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
- - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
- - [ ] [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
- - [ ] [Union By Rank](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank)
- - [ ] [Path Compression](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression)
- - [ ] [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
-
-- [ ] **More Dynamic Programming** (videos)
- - [ ] [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19)
- - [ ] [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20)
- - [ ] [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21)
- - [ ] [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- - [ ] [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
- - [ ] [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15)
- - [ ] [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
-
-- [ ] **Advanced Graph Processing** (videos)
- - [ ] [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
- - [ ] [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
-
-- [ ] MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos):
- - [ ] [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Random Variables](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21)
- - [ ] [MIT 6.042J - Expectation I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Large Deviations](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B)
- - [ ] [MIT 6.042J - Random Walks](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25)
-
-- [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
-
-- [ ] **문자열 매칭
- - [ ] 라빈-카프(Rabin-Karp) (동영상):
+- **SOLID**
+ - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
+ - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
+ - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
+ - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension but not for modification](https://en.wikipedia.org/wiki/Open/closed_principle)
+ - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
+ - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
+ - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
+ - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use
+ - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
+ - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
+ - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects.
+ - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
+ - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
+
+
+- **Union-Find**
+ - [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
+ - [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
+ - [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
+ - [Union By Rank](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank)
+ - [Path Compression](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression)
+ - [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
+
+- **More Dynamic Programming** (videos)
+ - [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19)
+ - [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20)
+ - [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21)
+ - [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15)
+ - [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
+
+- **Advanced Graph Processing** (videos)
+ - [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
+ - [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
+
+- MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos):
+ - [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Random Variables](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21)
+ - [MIT 6.042J - Expectation I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Large Deviations](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B)
+ - [MIT 6.042J - Random Walks](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25)
+
+- [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
+
+- **문자열 매칭
+ - 라빈-카프(Rabin-Karp) (동영상):
- [라빈 카프 알고리즘](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm)
- [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation)
- [최적화: 구현과 분석](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis)
- [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9)
- [Rolling Hashes, Amortized Analysis](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32)
- - [ ] Knuth-Morris-Pratt (KMP):
+ - Knuth-Morris-Pratt (KMP):
- [The Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo)
- - [ ] 보이어-무어(Boyer–Moore) 문자열 검색 알고리즘
+ - 보이어-무어(Boyer–Moore) 문자열 검색 알고리즘
- [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm)
- [Advanced String Searching Boyer-Moore-Horspool Algorithms (video)](https://www.youtube.com/watch?v=QDZpzctPf10)
- - [ ] [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1)
+ - [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1)
- starts off great, but by the time it gets past KMP it gets more complicated than it needs to be
- 트라이(tries)에 대해서 잘 설명하고 있다.
- 이건 생략 가능
-- [ ] **정렬**
+- **정렬**
- - [ ] 스탠포드 대학의 정렬 강의들:
- - [ ] [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69)
- - [ ] [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69)
- - [ ] Shai Simonson, [Aduni.org](http://www.aduni.org/):
- - [ ] [Algorithms - Sorting - Lecture 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2)
- - [ ] [Algorithms - Sorting II - Lecture 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3)
- - [ ] Steven Skiena lectures on sorting:
- - [ ] [lecture begins at 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600)
- - [ ] [lecture begins at 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [lecture begins at 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
- - [ ] [lecture begins at 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
-
-
+ - 스탠포드 대학의 정렬 강의들:
+ - [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69)
+ - [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69)
+ - Shai Simonson, [Aduni.org](http://www.aduni.org/):
+ - [Algorithms - Sorting - Lecture 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2)
+ - [Algorithms - Sorting II - Lecture 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3)
+ - Steven Skiena lectures on sorting:
+ - [lecture begins at 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600)
+ - [lecture begins at 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [lecture begins at 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [lecture begins at 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
## Video Series
편하게 보세요. "Netflix and skill"이라니까요 :P
-
-비디오 시리즈
-
-- [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+- [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
-- [ ] [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0)
+- [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0)
-- [ ] [MIT 18.06 Linear Algebra, Spring 2005 (35 videos)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8)
+- [MIT 18.06 Linear Algebra, Spring 2005 (35 videos)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8)
-- [ ] [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A)
+- [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A)
-- [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html)
+- [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html)
-- [ ] [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG)
+- [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG)
-- [ ] [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo)
+- [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo)
-- [ ] CSE373 - Analysis of Algorithms (25 videos)
+- CSE373 - Analysis of Algorithms (25 videos)
- [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1)
-- [ ] [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
+- [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
-- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C)
+- [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C)
-- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_)
+- [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_)
-- [ ] [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+- [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
-- [ ] ~~[UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)~~
+- ~~[UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)~~
-- [ ] [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+- [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
-- [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq)
+- [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq)
-- [ ] [MIT 6.006: Intro to Algorithms (47 videos)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False)
+- [MIT 6.006: Intro to Algorithms (47 videos)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False)
-- [ ] [MIT 6.033: Computer System Engineering (22 videos)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484)
+- [MIT 6.033: Computer System Engineering (22 videos)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484)
-- [ ] [MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi)
+- [MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi)
-- [ ] [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B)
+- [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B)
-- [ ] [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+- [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
-- [ ] [MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7)
+- [MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7)
-- [ ] [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1)
+- [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1)
-- [ ] [MIT 6.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c)
+- [MIT 6.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c)
-- [ ] [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf)
+- [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf)
-- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+- [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
-- [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02)
+- [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02)
-- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
+- [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
- [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/)
-- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
-
-- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
+- [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
-
+- [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
## 컴퓨터 과학 강의들
-
-Computer Science Courses
-
- [컴퓨터 과학 온라인 강의들](https://github.com/open-source-society/computer-science)
- [(많은 온라인 강의가 있는) 컴퓨터 과학 강의들](https://github.com/prakhar1989/awesome-courses)
-
+## Computer Science Courses
+
+- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science)
+- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses)
+
+## Papers
+- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/)
+- [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
+ - [implemented in Go](https://godoc.org/github.com/thomas11/csp)
+- [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
+ - replaced by Colossus in 2012
+- [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
+ - mostly replaced by Cloud Dataflow?
+- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf)
+ - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf)
+- [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf)
+- [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf)
+ - The Dynamo paper kicked off the NoSQL revolution
+- [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf)
+- [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf)
+- [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf)
+- [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/)
+ - paper not available
+- 2012: AddressSanitizer: A Fast Address Sanity Checker:
+ - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
+ - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
+- 2013: Spanner: Google’s Globally-Distributed Database:
+ - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
+ - [video](https://www.usenix.org/node/170855)
+- [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
+- [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
+- [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
+- [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf )
+- [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
+- [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
## 라이센스
diff --git a/translations/README-pl.md b/translations/README-pl.md
index 58128dfe3a..62d578254d 100644
--- a/translations/README-pl.md
+++ b/translations/README-pl.md
@@ -208,7 +208,7 @@ Używam specjalnej odmiany Markdown GitHub, w tym list zadań do sprawdzania pos
`git commit -m "Marked x"`
-`git rebase jwasham/master`
+`git rebase jwasham/main`
`git push --force`
@@ -372,8 +372,8 @@ Stworzyłem witrynę mobilną, aby móc przeglądać na moim telefonie i tableci
Stwórz własną za darmo:
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
-- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
Pamiętaj, że poszedłem ostro i mam karty obejmujące wszystko, od języka asemblera i ciekawostek Python po uczenie maszynowe i statystyki. To o wiele za dużo na to, w stosunku do tego co jest wymagane.
@@ -617,7 +617,7 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr
- binary search using recursion
- ### Operacje bitowe
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] Dobrze zrozum manipulowanie bitami korzystając z: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
@@ -644,7 +644,6 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr
## Drzewa
- ### Drzewa - uwagi & zarys
- - [ ] [Series: Core Trees (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (wideo)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- podstawy budowy drzewa
- traversal (ścieżki)
@@ -1187,7 +1186,7 @@ Trie to drzewo węzłów, które obsługuje operacje Znajdź i Wstaw [etc (...)]
- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- review: [The System Design Primer](https://github.com/donnemartin/system-design-primer)
- [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- flow:
1. Zrozumienie problemu i zakresu:
- zdefiniowanie przypadków użycia, z pomocą rekrutera
diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md
index c015eccef2..8e9ac04587 100644
--- a/translations/README-ptbr.md
+++ b/translations/README-ptbr.md
@@ -1,16 +1,16 @@
# Universidade de Entrevista de Programação
-> Originalmente eu criei isso como uma pequena lista to-do de tópicos de estudo para se tornar um engenheiro de software,
-> mas isso cresceu para a grande lista que você vê hoje. Após passar por esse plano de estudo, [Eu fui contratado
+> Originalmente eu criei isso como uma pequena lista to-do (a fazer) de tópicos de estudo para se tornar um engenheiro de software,
+> mas isso cresceu para este imenso acervo que você consulta hoje. Após passar por todo esse plano de estudo, [Eu fui contratado
> como Engenheiro de Desenvolvimento de Software na Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)!
> Você provavelmente não vai precisar estudar tanto quanto eu. De qualquer maneira, tudo que você precisa está aqui.
>
> Os itens listados aqui irão preparar você muito bem para uma entrevista em praticamente qualquer empresa de software,
-> incluindo as gigantes: Amazon, Facebook, Google ou Microsoft.
+> incluindo as gigantes como: Amazon, Facebook, Google ou Microsoft.
>
> *Boa sorte para todos vocês!*
-**Original**: [Inglês](https://github.com/jwasham/coding-interview-university/blob/master/README.md)
+**Original**: [Inglês](https://github.com/jwasham/coding-interview-university/blob/main/README.md)
- [Acompanhe o progresso da tradução aqui!](https://github.com/jwasham/coding-interview-university/pull/115)
@@ -42,14 +42,14 @@ Traduções em progresso:
## O que é isso?
-Esse é o meu plano de estudo mensal para ir de desenvolvedor web (autodidata, sem formação em Ciência da Computação) à engenheiro de software para uma grande empresa.
+Esse é o meu plano de estudo mensal para ir de desenvolvedor web (autodidata, sem formação em Ciência da Computação) à engenheiro de software em uma grande empresa.
![Programando no quadro branco - do Vale do Silício da HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
Essa longa lista foi extraída e expandida a partir das **anotações de treinamento da Google**, então essas são as coisas que você precisa saber.
Eu adicionei alguns itens extras no final que podem aparecer na entrevista ou serem úteis para resolver um problema. Muitos itens são da obra “[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)” (Consiga aquele trabalho na Google) de Steve Yegge's e às vezes são expressados palavra-por-palavra nas anotações de treinamento da Google.
-Isso é direcionado à **engenheiros de software novos** ou àqueles que estão migrando de desenvolvimento de software/web para engenharia de software (onde conhecimento de ciência da computação é necessário). Se você tem vários anos de experiência e está alegando muitos anos de experiência com engenharia de software, pode esperar por uma entrevista mais difícil.
+Isso é direcionado à **novos engenheiros de software**, ou àqueles que estão migrando de desenvolvimento de software/web para engenharia de software, onde conhecimento sobre ciência da computação é necessário. Se você tem vários anos de experiência e está alegando muitos anos de experiência com engenharia de software, pode esperar por uma entrevista mais difícil.
Se você tem vários anos de experiência com desenvolvimento de software/web, observe que grandes empresas como Google, Amazon, Facebook e Microsoft consideram engenharia de software como algo distinto de desenvolvimento de software/web e elas requerem conhecimento de ciência da computação.
@@ -73,13 +73,13 @@ Se você quer ser um engenheiro de confiabilidade ou engenheiro de sistemas, est
- [Conhecimento Prévio](#conhecimento-prévio)
- [Complexidade Algorítmica / Big-O / Análise assintótica](#complexidade-algorítmica--big-o--análise-assintótica)
- [Estrutura de Dados](#estrutura-de-dados)
- - [Arrays](#arrays)
- - [Listas Ligadas](#listas-ligadas)
- - [Stack](#stack)
- - [Queue (Fila)](#queue-fila)
- - [Tabela hash](#tabela-hash)
+ - [Vetores (Arrays)](#arrays)
+ - [Listas Ligadas (Linked List)](#listas-ligadas)
+ - [Pilha (Stack)](#stack)
+ - [Fila (Queue)](#queue-fila)
+ - [Tabela hash (Hash Table)](#tabela-hash)
- [Mais Conhecimento](#mais-conhecimento)
- - [Busca binária](#busca-binária)
+ - [Busca binária ( Binary Search)](#busca-binária)
- [Lógica binária](#lógica-binária)
- [Árvores](#Árvores)
- [Árvores - Anotações e Fundamentos](#Árvores---anotações-e-fundamentos)
@@ -88,17 +88,17 @@ Se você quer ser um engenheiro de confiabilidade ou engenheiro de sistemas, est
- árvores de busca balanceadas (conceito geral, não detalhes)
- transversais: pré-ordem, em-ordem (ordem simétrica), pós-ordem, busca em largura, busca em profundidade
- [Ordenação](#ordenação)
- - seleção
- - inserção
- - heapsort
- - quicksort
- - ordenação por mistura (merge sort)
+ - Seleção
+ - Inserção
+ - Heapsort
+ - Quicksort
+ - Merge sort
- [Grafos](#grafos)
- - directed
- - undirected
- - matriz de adjacência
- - lista de adjacência
- - traversals: BFS, DFS
+ - Diretos
+ - Indiretos
+ - Matriz de Adjacência
+ - Lista de Adjacência
+ - Traversals: BFS, DFS
- [Ainda Mais Conhecimento](#ainda-mais-conhecimento)
- [Recursão](#recursão)
- [Programação Dinâmica](#programação-dinâmica)
@@ -113,7 +113,7 @@ Se você quer ser um engenheiro de confiabilidade ou engenheiro de sistemas, est
- [Agendamento](#agendamento)
- [Implementar rotinas de sistema](#implementar-rotinas-de-sistema)
- [Busca de string e manipulações](#busca-de-string-e-manipulações)
- - [Tries (ou Árvore de Prefixos)](#tries-ou-Árvore-de-prefixos)
+ - [Árvore de Prefixos (Tries)](#tries-ou-Árvore-de-prefixos)
- [Números de Ponto Flutuantes ("Floating Point Numbers")](#números-de-ponto-flutuantes-floating-point-numbers)
- [Unicode](#unicode)
- [Extremidade (ordenação) (ou "endianness" em Inglês)](#extremidade-ordenação-ou-endianness-em-inglês)
@@ -178,13 +178,13 @@ Se você quer ser um engenheiro de confiabilidade ou engenheiro de sistemas, est
## Por que usar?
Quando eu comecei esse projeto, eu não sabia diferenciar memória dinâmica de memória estática, não sabia notação Big-O, árvores, ou como percorrer um grafo. Se eu tivesse que escrever um algoritmo de ordenação, eu posso te dizer que ele não seria muito bom.
-Todas as estruturas de dados que eu já usei eram construídas dentro da linguagem, e eu não sabia como elas funcionavam por debaixo dos panos. Eu nunca tive que gerenciar memória a não ser que um processo que eu estava rodando desse um erro de "memória insuficiente", nesse caso eu teria que dar um jeito. Eu já usei alguns arrays multidimensionais na minha vida e milhares de arrays associativos, mas eu nunca criei estruturas de dados do zero.
+Todas as estruturas de dados que eu já usei eram construídas dentro da linguagem, e eu não sabia como elas funcionavam por debaixo dos panos. Eu nunca tive que gerenciar memória a não ser que um processo que eu estava rodando desse um erro de "memória insuficiente", nesse caso eu teria que dar um jeito. Eu já usei alguns vetores multidimensionais na minha vida e milhares de vetores associativos, mas eu nunca criei estruturas de dados do zero.
É um longo plano. Você vai levar meses. Se você já é familiarizado com muitas dessas coisas, você vai precisar de muito menos tempo.
## Como usar
-Tudo abaixo é um esboço, e você deve abordar os itens em ordem de cima para baixo.
+**Tudo abaixo é um esboço**, e você deve abordar os itens em ordem de cima para baixo.
Eu estou usando a sintaxe de markdown especial do Github, incluindo listas de tarefas para verificar o progresso.
@@ -205,7 +205,7 @@ Eu estou usando a sintaxe de markdown especial do Github, incluindo listas de ta
`git commit -m "Marked x" `
-`git rebase jwasham/master `
+`git rebase jwasham/main `
`git push --force `
@@ -316,7 +316,7 @@ Se você tem mais tempo (eu quero esse livro):
Se você ler um desses, você deverá ter todo conhecimento de estrutura de dados e algoritmos que precisará para começar a resolver problemas de programação.
**Você pode pular todas as aulas em vídeo nesse projeto**, a não ser que você queira uma revisão.
-[Recursos adicionais específicos a cada linguagem aqui.](programming-language-resources.md)
+[Recursos adicionais específicos a cada linguagem aqui.](../programming-language-resources.md)
### C++
@@ -393,9 +393,9 @@ OU:
## Antes de começar
-Essa lista cresceu por longos meses, e sim, ela meio que saiu do controle.
+Essa lista cresceu por longos meses, e sim, ela meio que saiu do controle!
-Aqui estão alguns erros que eu cometi para que você tenha uma experiência melhor.
+**Aqui estão alguns erros que eu cometi para que você tenha uma experiência melhor**.
### 1. Você não se lembrará de tudo
@@ -415,8 +415,8 @@ Eu fiz um website focado em mobile para que eu pudesse rever no meu celular, tab
Faça o seu próprio, grátis:
- [Repositório de flashcards](https://github.com/jwasham/computer-science-flash-cards)
-- [Minha base de dados de flashcards (antigo - 1200 cartões)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [Minha base de dados de flashcards (novo - 1800 cartões)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [Minha base de dados de flashcards (antigo - 1200 cartões)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [Minha base de dados de flashcards (novo - 1800 cartões)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
Tenha em mente que eu exagerei e tenho cartões abrangendo desde linguagem assembly e trivialidades de Python até aprendizado de máquina e estatísticas. É demais para o que é requerido.
@@ -467,9 +467,9 @@ Por que programar em todas essas linguagens?
Talvez eu não tenha tempo para fazer tudo isso para cada tema, mas eu vou tentar.
Você pode ver meu código aqui:
- - [C] (https://github.com/jwasham/practice-c)
- - [C++] (https://github.com/jwasham/practice-cpp)
- - [Python] (https://github.com/jwasham/practice-python)
+ - [C](https://github.com/jwasham/practice-c)
+ - [C++](https://github.com/jwasham/practice-cpp)
+ - [Python](https://github.com/jwasham/practice-python)
Você não precisa memorizar os detalhes intrínsecos de cada algoritmo.
@@ -650,7 +650,7 @@ Escreva código em um quadro branco ou papel, não em um computador. Teste com u
- busca binária usando recursividade
- ### Lógica binária
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) (Folha de consultas sobre Bits) - você deve conhecer várias das potências de 2 de (2^1 até 2^16 e 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) (Folha de consultas sobre Bits) - você deve conhecer várias das potências de 2 de (2^1 até 2^16 e 2^32)
- [ ] Consiga um bom entendimento sobre manipulação de bits com: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) (palavras)
- [ ] Boa introdução:
@@ -679,7 +679,6 @@ Escreva código em um quadro branco ou papel, não em um computador. Teste com u
## Árvores
- ### Árvores - Anotações e Fundamentos
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) (Série: Fundamentos de Árvores - vídeo)
- [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) (Série: Árvores - vídeo)
- contrução básica de árvore
- transversal
@@ -1275,7 +1274,7 @@ Você ganhará mais prática com grafos no livro do Skiena (veja a seção de li
- [ ] Praticando o processo de design de sistema: Aqui estão algumas ideias para tentar trabalhar no papel, cada uma com documentação sobre como ela foi tratada no mundo real:
- revisão: [The System Design Primer](https://github.com/donnemartin/system-design-primer) (A Base de Design de Sistema)
- [System Design from HiredInTech](http://www.hiredintech.com/system-design/) (Design de Sistema, por HiredInTech)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) (folha de consultas)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf) (folha de consultas)
- fluxo:
1. Compreenda o problema e seu escopo:
- defina os casos de uso, com a ajuda do entrevistador
diff --git a/translations/README-ru.md b/translations/README-ru.md
new file mode 100644
index 0000000000..0a1a95f62c
--- /dev/null
+++ b/translations/README-ru.md
@@ -0,0 +1,2001 @@
+# Google Interview University
+
+Оригинальная версия: [Английский](../README.md)
+
+## Для кого это?
+
+Это мой учебный план, рассчитанный на несколько месяцев для веб-разработчиков, не имеющих образования в Computer Science (CS)
+и планирующих работать инженерами-программистами (software engineer) в компании Google.
+
+![Кодирование на доске - из телесериала канала HBO Кремниевая Долина](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg)
+
+За основу учебного плана я взял список вопросов **Google's coaching notes** и значительно расширил его. Тут вы найдёте
+много полезных вещей, которые необходимо знать. Дополнительные вопросы я добавил в конец списка: их могут задавать на
+интервью, a также они могут быть полезны в решении повседневных задач. Некоторые пункты я взял из поста Стива Йеги (Steve Yegge)
+"[Получить работу в Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)", а некоторые слово в слово
+соответствуют вопросам, разбираемых Google в их постах о подготовке.
+
+Я сократил тот объем знаний, который необходим, по сравнению с рекомендациями Йеги. Я изменил требования Йеги исходя
+из той информации, которую мне предоставил мой знакомый из Google. Это важно для тех, кто сейчас еще **новички в
+разработке программного обеспечения** или являются веб-разработчиками и планируют стать инженерами-программистами
+(это та профессия где требуются знания в области CS). Если вы опытный разработчик, ожидайте что собеседование будет сложным.
+[Подробнее](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/).
+
+Если вы обладаете многолетним опытом разработки ПО, помните, что Google разделяет понятия инженер-программист и
+разработчик ПО/веб-разработчик. Первое требует знаний в области CS.
+
+Если вы хотите быть инженерами обеспечивающими надежность ПО или системными инженерами, то уделите внимание вопросам из
+опционального списка (разделы Сеть, Безопасность).
+
+---
+
+## Содержание
+
+- [Для кого это?](#Для-кого-это)
+- [Чем это полезно?](#Чем-это-полезно)
+- [Как пользоваться](#Как-пользоваться)
+- [Получи гугловское настроение](#Получи-гугловское-настроение)
+- [Получил ли я работу?](#Получил-ли-я-работу)
+- [Двигайся вместе со мной](#Двигайся-вместе-со-мной)
+- [Не переживайте о том, что вы недостаточно умны](#Не-переживайте-о-том,-что-вы-недостаточно-умны)
+- [О Google](#О-google)
+- [О видео ресурсах](#О-видео-ресурсах)
+- [Процесс собеседования & Основное в подготовке к интервью](#Процесс-собеседования-Основное-в-подготовке-к-интервью)
+- [Выберите один язык для собеседования](#Выберите-один-язык-для-собеседования)
+- [Список книг](#Список-книг)
+- [Перед тем как вы начнете](#Перед-тем-как-вы-начнете)
+- [Что еще не охвачено](#То,-что-не-охватывает-этот-учебный-план)
+- [Необходимые знания](#Необходимые-знания)
+- [План на день](#План-на-день)
+- [Сложность алгоритмов / Big-O / Асимптотический анализ](#Сложность-алгоритмов,-Big-O,-Асимптотический-анализ)
+- [Структуры данных](#Структуры-данных)
+ - [Массивы](#Массивы)
+ - [Связные списки](#Связные-списки-(Linked-Lists))
+ - [Стек](#Стек)
+ - [Очередь](#Очередь)
+ - [Хеш-таблицы](#Хеш-таблица)
+- [Дополнительно](#Дополнительно)
+ - [Двоичный поиск](#Бинарный-поиск)
+ - [Битовые операции](#Побитовые-операции)
+- [Деревья](#Деревья)
+ - [Деревья](#Деревья,-Заметки-и-Основные-понятия)
+ - [Двоичное дерево поиска: BSTs](#Бинарное-дерево-поиска-(BST:-Binary-search-trees))
+ - [Куча / Очередь с приоритетом / Двоичная куча](#Куча,-Приоритетная-очередь,-Бинарная-куча)
+ - Сбалансированные деревья поиска (основная идея, без деталей)
+ - Обходы: прямой, симметричный, обратный, BFS, DFS
+- [Сортировка](#Сортировка)
+ - выбором
+ - вставками
+ - пирамидальная
+ - быстрая
+ - слиянием
+- [Графы](#Графы)
+ - ориентированные
+ - неориентированные
+ - матрица смежности
+ - лист смежности
+ - обходы: BFS, DFS
+- [Еще больше знаний](#Еще-больше-знаний)
+ - [Рекурсия](#Рекурсия)
+ - [Объектно-ориентированное программирование](#Объектно-ориентированное-программирование)
+ - [Шаблоны проектирования](#Шаблоны-проектирования)
+ - [Комбинаторика & Вероятность](#combinatorics-n-choose-k--probability)
+ - [NP, NP-полные and Аппроксимирующие алгоритмы](#np-np-complete-and-approximation-algorithms)
+ - [Кэш](#caches)
+ - [Процессы и нити](#processes-and-threads)
+ - [Статьи](#Статьи)
+ - [Тестирование](#Тестирование)
+ - [Планирование](#Планирование)
+ - [Реализация системных вызовов](#Реализация-системных-вызовов)
+ - [Поиск в строке & манипуляции](#string-searching--manipulations)
+- [Проектирование систем, Масштабируемость, Обработка данных](#system-design-scalability-data-handling) (if you have 4+ years experience)
+- [Заключительный обзор](#final-review)
+- [Практика: задачи по программированию](#coding-question-practice)
+- [Упражнения по программированию](#coding-exerciseschallenges)
+- [Перед собеседованием](#once-youre-closer-to-the-interview)
+- [Ваше резюме](#your-resume)
+- [Подумайте об этом когда подходит время собеседования](#be-thinking-of-for-when-the-interview-comes)
+- [Приготовьте вопросы для интервьювера](#have-questions-for-the-interviewer)
+- [Когда вас приняли на работу](#once-youve-got-the-job)
+
+
+---------------- Все что ниже - опционально ----------------
+
+- [Дополнительные книги](#additional-books)
+- [Дополнительное обучение](#additional-learning)
+ - [Динамическое программирование](#dynamic-programming)
+ - [Компиляторы](#compilers)
+ - [Числа с плавующей запятой](#floating-point-numbers)
+ - [Unicode](#unicode)
+ - [Порядок следования байт](#endianness)
+ - [Emacs и vi(m)](#emacs-and-vim)
+ - [Командная строка Unix](#unix-command-line-tools)
+ - [Теория информации](#Теория-информации)
+ - [Чётность & Код Хемминга](#Чётность-и-Код-Хемминга)
+ - [Энтропия](#Энтропия)
+ - [Криптография](#Криптография)
+ - [Сжатие](#Сжатие)
+ - [Сети](#Сети-и-сетевые-протоколы)
+ - [Компьютерная безопасность](#Компьютерная-безопасность)
+ - [Сборка мусора](#Сборка-мусора-(Garbage-collection))
+ - [Параллельное программирование](#Параллельное-программирование)
+ - [Сообщения, сериализация и системы очередей](#Сообщения,-сериализация-и-системы-очередей)
+ - [Быстрое преобразование Фурье](#Быстрое-преобразование-Фурье)
+ - [Фильтр Блума](#Фильтр Блума)
+ - [HyperLogLog](#hyperloglog)
+ - [Локально-чувствительное хеширование](#locality-sensitive-hashing)
+ - [Дерево ван Эмде Боаса](#van-emde-boas-trees)
+ - [Дополнительные структуры данных](#augmented-data-structures)
+ - [Префиксные деревья](#tries)
+ - [N-арные (K-арные, M-арные) деревья](#n-ary-k-ary-m-ary-trees)
+ - [Сбалансированные деревья поиска](#balanced-search-trees)
+ - АВЛ деревья
+ - Splay-деревья
+ - Красно-черные деревья
+ - 2-3 деревья поиска
+ - 2-3-4 деревья
+ - N-арные (K-арные, M-арные) деревья
+ - B-деревья
+ - [k-D деревья](#k-d-trees)
+ - [Списки с пропусками](#skip-lists)
+ - [Сеть](#network-flows)
+ - [Система непересекающихся множеств](#disjoint-sets--union-find)
+ - [Математика для быстрой обработки](#math-for-fast-processing)
+ - [Декартово дерево](#treap)
+ - [Линейное программирование](#linear-programming)
+ - [Геометрия, Выпуклая оболочка](#geometry-convex-hull)
+ - [Дискретная математика](#discrete-math)
+ - [Машинное обучение](#machine-learning)
+ - [Go](#go)
+- [Дополнительные детали](#additional-detail-on-some-subjects)
+- [Видео](#video-series)
+- [Курсы по Computer Science](#computer-science-courses)
+
+---
+
+## Чем это полезно?
+
+Я следую этому плану, готовясь к собеседованию в Google. Я разрабатываю веб-приложения, сервисы и запускаю стартапы с
+1997 года. У меня есть степень по экономике, но нет по CS. На данный момент у меня очень успешная карьера, но я хочу работать
+в Google. Я хочу работать с большими системами и понять принципы их работы, изучить эффективность алгоритмов и различные
+структуры данных, узнать, как работают низкоуровневые языки программирования. Если ты не знаешь что-то из перечисленного,
+Google не возьмёт тебя на работу.
+
+Когда я начал этот проект, я ничего не знал о стеке, куче, Big-O, деревья и способах обхода графа. Если бы мне нужно
+было писать код для сортировки, это было бы не очень хорошо. Структуры данных, которые я использовал, были частью языка,
+и я не знал, как они на самом деле работали. Мне никогда не приходилось управлять памятью, если процесс, который я
+запускал, сообщал об ошибке "out of memory", я искал способ как ее обойти. Я использовал в своей работе несколько
+многомерных массивов и тысячи ассоциативных, но никогда не создавал структуру данных "с нуля".
+
+Но после выполнения этого учебного плана я поверил, что Google меня наймет. Это длинный путь. Я потрачу на это месяцы.
+Если вы уже знакомы с большинством тем, то потратите намного меньше времени.
+
+
+## Как пользоваться
+
+Ниже описан способ использования, вы должны выполнить пункты в описанном порядке.
+
+Я использую разметку Github, включающую список задач для оценки прогресса.
+
+- [x] Создай новую ветку и тогда ты сможешь оставлять отметки у элементов списка, просто добавляя x внутрь скобок: [x]
+
+ Скопируй репозиторий и выполни команды перечисленные ниже
+
+`git checkout -b progress`
+
+`git remote add jwasham https://github.com/jwasham/google-interview-university`
+
+`git fetch --all`
+
+ Mark all boxes with X after you completed your changes
+
+`git add . `
+
+`git commit -m "Marked x" `
+
+`git rebase jwasham/main `
+
+`git push --force `
+
+[Подробнее о разметке на Github](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
+
+## Получи гугловское настроение
+
+Напечатай знак "[future Googler](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)" и не отводи глаз от желанной добычи.
+
+[![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)
+
+## Получил ли я работу?
+
+Пока я ожидаю своей очереди. Надеюсь интервью будет скоро.
+
+ Thanks for the referral, JP.
+
+## Двигайся вместе со мной
+
+Моя история: [Почему я готовился в течении 8 месяцев для собеседования в Google](https://medium.com/@googleyasheck/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)
+
+Я ещё на пути к цели. Двигаемся вперёд:
+
+- **Blog**: [GoogleyAsHeck.com](https://googleyasheck.com/)
+- Twitter: [@googleyasheck](https://twitter.com/googleyasheck)
+- Twitter: [@StartupNextDoor](https://twitter.com/StartupNextDoor)
+- Google+: [+Googleyasheck](https://plus.google.com/+Googleyasheck)
+- LinkedIn: [johnawasham](https://www.linkedin.com/in/johnawasham)
+
+![John Washam - Google Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png)
+
+## Не переживайте о том, что вы недостаточно умны
+- Успешные инженеры умные, но многие из них переживают, что недостаточно умны.
+- [Миф о гениальных программистах](https://www.youtube.com/watch?v=0SARbwvhupQ)
+- [Это опасно, идти в одиночку: Сражаться с невидимыми монстрами в технологиях](https://www.youtube.com/watch?v=1i8ylq4j_EY)
+
+## О Google
+
+- [ ] Для студентов - [Google Careers: Руководство по развитию в технологиях](https://www.google.com/about/careers/students/guide-to-technical-development.html)
+- [ ] Как работает поиск:
+ - [ ] [The Evolution of Search (video)](https://www.youtube.com/watch?v=mTBShTwCnD4)
+ - [ ] [How Search Works - the story](https://www.google.com/insidesearch/howsearchworks/thestory/)
+ - [ ] [How Search Works](https://www.google.com/insidesearch/howsearchworks/)
+ - [ ] [How Search Works - Matt Cutts (video)](https://www.youtube.com/watch?v=BNHR6IQJGZs)
+ - [ ] [How Google makes improvements to its search algorithm (video)](https://www.youtube.com/watch?v=J5RZOU6vK4Q)
+- [ ] Серии:
+ - [ ] [How Google Search Dealt With Mobile](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9)
+ - [ ] [Google's Secret Study To Find Out Our Needs](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf)
+ - [ ] [Google Search Will Be Your Next Brain](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523)
+ - [ ] [The Deep Mind Of Demis Hassabis](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a)
+- [ ] [Книга: Как работает Google](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344)
+- [ ] [Made by Google announcement - Oct 2016 (video)](https://www.youtube.com/watch?v=q4y0KOeXViI)
+
+## О видео ресурсах
+
+Некоторые видео доступно в том случае, если вы являетесь слушателями курсов Coursera, EdX или Lynda.com
+Их называют MOOCs. Некоторые курсы не имеют круглогодичного доступа и вам нужно подождать несколько месяцев,
+прежде чем получите к ним доступ. Курсы на Lynda.com платные.
+
+ Я был бы вам благодарен за помощь в добавлении бесплатных, всегда доступных публичных ресурсов, таких
+ как видео с YouTube сопровождающих онлайн курсы. Мне нравится использовать университетские лекции.
+
+
+## Процесс собеседования & Основное в подготовке к интервью
+
+- [ ] Видео:
+ - [ ] [Как работать в Google: Подготовка к собеседованию на позицию инженера (видео)](https://www.youtube.com/watch?v=ko-KkSmp-Lk)
+ - [ ] [Как работать в Google: Пример кодирования/Собеседование инженера (видео)](https://www.youtube.com/watch?v=XKu_SEDAykw)
+ - [ ] [Как работать в Google - Подготовка кандидатов (видео)](https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be)
+ - [ ] [Советы для технического собеседования от рекрутеров из Google (видео)](https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be)
+ - [ ] [Как работать в Google: Подготовка технического резюме (видео)](https://www.youtube.com/watch?v=8npJLXkcmu8)
+
+- [ ] Статьи:
+ - [ ] [Стать гуглером за три шага](http://www.google.com/about/careers/lifeatgoogle/hiringprocess/)
+ - [ ] [Получить работу Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)
+ - все что он упоминает из того что вы должны знать перечисленно ниже
+ - [ ] (сильно устаревшее)[Как получить работу в Google, Вопросы на собеседовании, Процесс найма](http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html)
+ - [ ] [Вопросы с собеседования по телефону](http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions)
+
+- [ ] Подготовительные курсы:
+ - [ ] [Собеседование инженера-программиста (платный курс)](https://www.udemy.com/software-engineer-interview-unleashed):
+ - Как самостоятельно подготовиться к собеседованию на позицию инженера-программиста от бывшего сотрудника Google
+
+- [ ] Дополнительно (это не рекомендация Google, а моя собственная):
+ - [ ] [ABC: Программируй всегда](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
+ - [ ] [4 шага к Google без образования в CS](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx)
+ - [ ] [Кодирование на доске](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
+ - [ ] [Что думает Google о найме, управлении и культуре](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture)
+ - [ ] [Эффективное кодирование на доске в процессе собеседования](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/)
+ - [ ] Прохождения собеседования по программированию набор 1:
+ - [ ] [Gayle L McDowell - Прохождения собеседования по программированию (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ)
+ - [ ] [Прохождения собеседования по программированию с Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ)
+ - [ ] Как получить работу в большой четверке:
+ - [ ] ['Как получить работу в большой четверке - Amazon, Facebook, Google & Microsoft' (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8)
+ - [ ] [Ошибки на собеседованиях в Google](http://alexbowe.com/failing-at-google-interviews/)
+
+## Выберите один язык для собеседования
+
+Я написал небольшую статью об этом: [Важно: Выберите один язык для собеседования в Google](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/)
+
+На этапе собеседования, когда требуется программировать, вы можете использовать наиболее комфортный для вас язык
+программирования. Для Google лучшим выбором будут следующие:
+
+- C++
+- Java
+- Python
+
+Также подойдут:
+
+- JavaScript
+- Ruby
+
+Вы должны хорошо знать выбранный язык и уметь комфортно писать на нём программы.
+
+Подробнее о выборе:
+- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/
+- http://blog.codingforinterviews.com/best-programming-language-jobs/
+- https://www.quora.com/What-is-the-best-language-to-program-in-for-an-in-person-Google-interview
+
+[Ресурсы по языкам программирования вы можете найти тут](../programming-language-resources.md)
+
+Вы найдете кое-что по С, С++ и Python ниже, потому что я еще в процессе обучения.
+
+## Список книг
+
+Это краткий список того, чем я пользовался. Он сокращен для того, чтобы сэкономить ваше время.
+
+### Подготовка к собеседованию
+
+- [ ] [Собеседование по программированию в подробностях: Секреты получения твоей следующей работы, 2-е издание](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
+ - ответы на C++ и Java
+ - рекомендации Google по обучению кандидатов
+ - это отличная разминка перед подробным разбором собеседования по программированию
+ - не так уж и сложно, некоторые задачи проще чем вам кажутся на собеседовании (из того что я прочитал)
+- [ ] [Разбор собеседования по программированию, 6-е издание](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
+ - ответа на Java
+ - рекомендована [Google Careers сайт](https://www.google.com/about/careers/how-we-hire/interview/)
+ - Если вы видели ссылку на "The Google Resume", эта книга заменена "Разбор собеседования по программированию"
+ ("Cracking the Coding Interview").
+
+Если у вас есть много свободного времени:
+
+- [ ] [Элементы собеседования по программированию](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836)
+ - весь код написан на C++, полезна если вы планируете использовать C++ на собеседовании
+ - хорошая книга, описывающая решения общих задач
+
+### Архитектура компьютера
+
+Если мало времени:
+
+- [ ] [Писать отличный код: Том 1: Понимание компьютера](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
+ - Книга была опубликована в 2004 и отчасти она устарела, но благодаря ей вы быстро поймете как устроены компьютеры.
+ - Автор придумал HLA, поэтому скептически отнеситесь к примерам и упоминаниям HLA. Широко не используется, но содержит ряд примеров, демонстрирующих assembler.
+ - Чтение следующих глав не займет много времени и даст хорошую основу:
+ - Глава 2 - Представление в числовой форме
+ - Глава 3 - Двоичная арифметика и битовые операции
+ - Глава 4 - Представление числа с плавающей точкой
+ - Глава 5 - Представление символа
+ - Глава 6 - Организация памяти и доступа
+ - Глава 7 - Составные типы данных и объекты в памяти
+ - Глава 9 - Архитектура CPU
+ - Глава 10 - Набор инструкций
+ - Глава 11 - Архитектура и организация памяти
+
+Если вы располагаете свободным временем (я хочу купить эту книгу):
+
+- [ ] [Архитектура компьютера, 5-е издание: Количественный подход](https://www.amazon.com/dp/012383872X/)
+
+### По языкам программирования
+
+**Вам необходимо выбрать один язык для интервью (смотри выше).** Здесь вы найдете мои рекомендации по языкам. У меня нет информации по всем языкам, но если есть у вас - добро пожаловать.
+
+Если вы читали одну из них, то у вас есть достаточно знаний по алгоритмам и структурам данных и вы можете приступить к решению задач по программированию.
+**Вы можете пропустить все видео лекции в этом разделе**, если не хотите повторить темы.
+
+[Дополнительные ресурсы по языкам программирования здесь](../programming-language-resources.md)
+
+### C++
+
+Я не читал обе, но они весьма полезны и написаны Седжвиком (Sedgewick). Он отличный автор.
+
+- [ ] [Алгоритмы на C++, Части 1-4: Основы, Структуры данных, Сортировка, Поиск](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
+- [ ] [Алгоритмы на C++ Часть 5: Алгоритмы графов](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
+
+Если вы можете порекомендовать литературу по C++, которая лучше, сообщите мне об этом. Я ищу лучшие книги.
+
+### Java
+
+- [ ] [Алгоритмы (Седжвик и Вайн)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
+ - книга с видео контентом (и Седжвик!):
+ - [Алгоритмы I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2)
+ - [Алгоритмы II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd)
+
+или:
+
+- [ ] [Структуры данных и алгоритмы на Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
+ - авторы Goodrich, Tamassia, Goldwasser
+ - используется в Беркли США как опциональный учебник по введению в CS
+ - смотрите мой отчет по книги по Python ниже. Эта книга содержит те же темы.
+
+### Python
+
+- [ ] [Структуры данных и алгоритмы на Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/)
+ - авторы Goodrich, Tamassia, Goldwasser
+ - Я люблю эту книгу. Она содержит все что нужно и даже больше.
+ - Pythonic code
+ - мой отчет по книге: https://googleyasheck.com/book-report-data-structures-and-algorithms-in-python/
+
+
+### Опциональные книги
+
+**Некоторые рекомендуют эти книги, но я думаю это перебор, если только вы не инженер-программист с большим опытом работы и не ожидаете более сложного собеседования.
+
+- [ ] [Руководство по разработке алгоритмов](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena)
+ - Как обзор и описание проблем
+ - Некоторые алгоритмы вряд ли попадутся вам на собеседовании.
+ - Эта книга состоит из 2-х частей:
+ - классный учебник по структурам данных и алгоритмам
+ - преимущества:
+ - отличный учебник, содержащий обзор существующих алгоритмов
+ - автор описывает реальный опыт решения задач как академических, так и промышленных
+ - примеры кода написаны на C
+ - недостатки:
+ - местами изложение может быть неочевидным и непонятным как в CLRS (Cormen, Leiserson, Rivest, Stein), некоторые темы лучше описаны в CLRS
+ - главы 7, 8, 9 сложно понять, некоторые вещи плохо разъяснены или требуют больших знаний чем есть у меня
+ - не поймите меня неправильно: Мне нравится Skiena, его стиль и манера изложения, но я не могу стать физически Stony Brook.
+ - каталог алгоритмов:
+ - это реальная причина, почему следует купить эту книгу.
+ - о том, как дойти до этой части. Обновлю, когда изучу этот раздел.
+ - Цитата Йеги: "Больше чем какая-либо другая книга, эта помогла мне понять насколько банальны задачи на графы - они должны
+ быть в инструментарии каждого программиста. Книга так же включает в себя разбор базовых структур данных и алгоритмов сортировки,
+ что является приятным бонусом. Но важнейшей частью стала вторая часть книги, которая написана как энциклопедия, описывающая большое
+ количество различных алгоритмических задач и способов их решения без лишних деталей. Почти каждая страница-описание содержит
+ изображение, облегчающее запоминание. Это полезный способ, позволяющий запомнить и в последствии идентифицировать сотни
+ типов задач."
+
+ - Можете ее арендовать
+ - Half.com - отличный ресурс, где можно заказать книги по выгодным ценам.
+ - Ответы:
+ - [Решения](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition))
+ - [Решения](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/)
+ - [Опечатки](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata)
+
+- [ ] [Введение в алгоритмы](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
+ - **Важно:** Чтение этой книги будет полезно только для повторения алгоритмов и структур данных. Она не научит вас программировать.
+ - Цитата Йеги: "Но если вы хотите идти на собеседование, отложите его пока не изучите эту книгу."
+ - Half.com - отличный ресурс, где можно заказать книги по выгодным ценам.
+ - известная как CLR, иногда CLRS, потому что Stein опоздал на игру
+
+- [ ] [Жемчужины программирования](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880)
+ - В первых двух главах представлены решения задач программирования (в некоторых из них используются устаревшие типы данных), но
+ это только введение. Это руководство по разработке программ и архитектуре, такое же как Code Complete, но более краткое.
+
+- ~~"Алгоритмы и программирование: Проблемы и решения" автор Shen~~
+ - Отличная книга, но после разбора нескольких задач написанных на Pascal я разочаровался в его синтаксисе.
+ - Лучше провести время решая задачи по программированию из других книг или онлайн ресурсов.
+
+
+## Перед тем как вы начнете
+
+Я создавал эту учебную программу на протяжении нескольких месяцев своими руками.
+
+Ниже я описал некоторые ошибки, которые я совершил. Это поможет вам их избежать.
+
+### 1. Вы не сможете сразу запомнить все
+
+Я смотрел часами видео делая заметки, но спустя несколько месяцев многое из этого я не помнил. После чего потратил
+3 дня разбираясь в своих заметках и делая карточки-напоминания (flashcards) для того, чтобы потом можно было повторить пройденный материал.
+
+Прочитайте пожалуйста эту статью, что бы не совершать моих ошибок:
+
+[Как сохранить знания в CS](https://startupnextdoor.com/retaining-computer-science-knowledge/)
+
+### 2. Используйте карточки-напоминания
+
+Для решения этой проблемы я сделал небольшой сайт, на котором можно добавлять карточки двух типов: общие и с кодом.
+Каждая карта имеет разный формат.
+
+Я сделал мобильную версию сайта и могу читать карточки на мобильном телефоне или планшете.
+
+Сделай свой собственный бесплатно:
+
+- [Репозиторий сайта Flashcards](https://github.com/jwasham/computer-science-flash-cards)
+- [Моя база данных с карточками](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db): Имейте в виду, я сделал больше чем требуется в Google, описав все начиная с assembler и заканчивая Python с машиным обучением и статистикой.
+
+**Заметка о карточках:** в первый раз вы сразу вспомните ответ, но не помечайте эту карточку как изученную. Нужно просмотреть
+много раз карточку и ответить правильно прежде чем вы действительно ее запомните. Повторение позволяет мозгу надолго
+запомнить материал.
+
+В качестве альтернативы вы можете использовать сайт [Anki](http://ankisrs.net/), который мне рекомендовали много раз. Он использует систему повторений для того что бы помочь вам запомнить.
+Это ресурс user-friendly, доступен на всех платформах и имеет возможность синхронизации с облаком. На платформе iOS стоит 25$, на других бесплатный.
+
+Моя база данных в формате Anki: https://ankiweb.net/shared/info/25173560 (спасибо [@xiewenya](https://github.com/xiewenya))
+
+### 3. Повторение, повторение, повторение
+
+У меня постоянно с собой шпаргалки по ASCII, стеку OSI, Big-O нотации и другим темам. Я повторяю их когда у меня есть свободное время.
+
+Делай перерывы от программирования на пол часа и повторяй свои карточки.
+
+### 4. Фокусируйтесь
+
+Есть много отвлекающих факторов, на которые тратится время. Сосредотачиваться и концентрироваться сложно.
+
+## То, что не охватывает этот учебный план
+
+Это список персональных тем, взятых из заметок Google по подготовке к собеседованию. Это распространенные технологии,
+но они не встречаются в других ресурсах:
+
+- SQL
+- JavaScript
+- HTML, CSS и другие front-end технологии
+
+## План на день
+
+Для изучения некоторых тем требуется один день, для других несколько. Некоторые нужно только изучить и не нужно программировать.
+
+Каждый день я беру одну тему из списка ниже, смотрю видео на эту тему и программирую, используя пройденный материал:
+- C - используя структуры и функции, которые в качестве аргументов принимают указатель на структуру или что-нибудь еще.
+- C++ - без использования встроенных типов
+- C++ - используя встроенные типы, такие как std::list для связанного списка
+- Python - используя встроенные типы (для практики на Python)
+- написание тестов для проверки правильности кода, иногда просто используя выражение assert()
+- Вы можете программировать на Java или других языках, это только лишь мой выбор.
+
+Вам не нужны все эти языки для собеседования, нужен только один [один язык для собеседования](#Выберите-один-язык-для-собеседования).
+
+Зачем нужно программировать на нескольких языках:
+- Практика, практика, практика пока это не надоедает мне я программирую
+- Работа в рамках установленных ограничений (выделение/освобождение памяти без помощи сборщика мусора (кроме Python))
+- Используйте встроенные типы, потому как у меня есть опыт использования встроенных инструментах в реальных проектах (нет смысла в написание своей реализации связанного списка для продакшена)
+
+У меня может и не будет времени на все это, но я попробую.
+
+
+Вы можете посмотреть на мой код тут:
+ - [C] (https://github.com/jwasham/practice-c)
+ - [C++] (https://github.com/jwasham/practice-cpp)
+ - [Python] (https://github.com/jwasham/practice-python)
+
+Вам не нужно запоминать внутренности каждого алгоритма.
+
+Пишите код на доске или листе бумаги, но не компьютере. Проверяйте на простых входных данных. Затем тестируйте на компьютере.
+
+## Необходимые знания
+
+- [ ] **Изучайте C**
+ - С используется везде. Вы встретите примеры в книгах, лекциях, видео, везде, пока вы будете учиться.
+ - [ ] [Язык программирования С, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
+ - Это небольшая книга, но после ее прочтения вы получите необходимые знания по С и если будете практиковать,
+ то достаточно быстро его освоите. Понимание С поможет вам понять как работают программы и память.
+ - [ответы на вопросы](https://github.com/lekkas/c-algorithms)
+
+- [ ] **Как компьютеры выполняют программу:**
+ - [ ] [Как CPU выполняет программы (video)](https://www.youtube.com/watch?v=42KTvGYQYnA)
+ - [ ] [Коды машинных инструкций(video)](https://www.youtube.com/watch?v=Mv2XQgpbTNE)
+
+## Сложность алгоритмов, Big-O, Асимптотический анализ
+- [ ] [Harvard CS50 - Асимптотическая нотация (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
+- [ ] [Big O нотация (основное, короткое руководство) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU)
+- [ ] [Big O нотация (и Omega и Theta) - лучшее математическое объяснение (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
+- [ ] Skiena:
+ - [видео](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [слайды](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf)
+- [ ] [Плавное введение в анализ сложности алгоритмов](http://discrete.gr/complexity/)
+- [ ] [Порядок роста (video)](https://class.coursera.org/algorithmicthink1-004/lecture/59)
+- [ ] [Асимптотика (video)](https://class.coursera.org/algorithmicthink1-004/lecture/61)
+- [ ] [UC Berkeley Big O (видео)](https://youtu.be/VIS4YDpuP98)
+- [ ] [UC Berkeley Big Omega (видео)](https://youtu.be/ca3e7UVmeUc)
+- [ ] [Amortized Analysis (видео)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
+- [ ] [Иллюстрация "Big O" (видео)](https://class.coursera.org/algorithmicthink1-004/lecture/63)
+- [ ] TopCoder (включая рекуррентные соотношений и основную теорему):
+ - [Вычислительная сложность: Часть 1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/)
+ - [Вычислительная сложность: Часть 2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/)
+- [ ] [Шпаргалка](http://bigocheatsheet.com/)
+
+ Если в некоторых лекциях слишком много математики, вы можете ниже найти и посмотреть
+ лекции по дискретной математике для получения базовых знаний.
+
+## Структуры данных
+
+- ### Массивы
+ - Реализация динамического вектора.
+ - [ ] Описание:
+ - [Массивы (видео)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays)
+ - [UCBerkley CS61B - Линейные и многомерные массивы (видео)](https://youtu.be/Wp8oiO_CZZE?t=15m32s)
+ - [Основные массивы (видео)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html)
+ - [Многомерные массивы (видео)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html)
+ - [Динамические массивы (видео)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays)
+ - [Массив массивов (видео)](https://www.youtube.com/watch?v=1jtrQqYpt7g)
+ - [Массив массивов (видео)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html)
+ - [Динамические массивы (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html)
+ - [ ] Реализация вектора (изменяемый массив с автоматическим изменением размера):
+ - [ ] Тренируйтесь программировать используя массивы, указатели и арифметику указателей для перехода к индексу вместо индексации.
+ - [ ] выделение памяти для массива
+ - можно выделить память для массива целых чисел, просто не используя его возможности
+ - начиная с 16, или если начальная цифра больше, использовать степень 2 - 16, 32, 64, 128
+ - [ ] size() - количество элементов
+ - [ ] capacity() - количество элементов которое он может содержать
+ - [ ] is_empty()
+ - [ ] at(index) - возвращает элемент по индексу, изменяет размер, если индекс выходит за пределы
+ - [ ] push(item)
+ - [ ] insert(index, item) - вставка элемента по индексу, сдвигает значение по индексу и следующие за ним элементы вправо
+ - [ ] prepend(item) - может вставить элемент выше индекса 0
+ - [ ] pop() - удалить последний элемент, вернуть значение
+ - [ ] delete(index) - удаляет элемент по индексу, сдвигает все следующие за ним элементы влево
+ - [ ] remove(item) - ищет элементы по значению и удаляет их, даже если их несколько
+ - [ ] find(item) - ищет элемент по значению и возвращает индекс первого найденного элемента, возвращает -1 если ничего не найдено
+ - [ ] resize(new_capacity) // private function
+ - когда массив полностью заполнен, увеличивает его размер вдвое
+ - при добавлении элемента, если размер массива 1/4 от общего размера, увеличиваем на половину
+ - [ ] Время
+ - O(1) для операций add/remove в конце (амортизируется для размещения большего объема), index, или update
+ - O(n) для insert/remove в любом месте
+ - [ ] Работа с памятью
+ - смежные в памяти, это помогает повысить производительность
+ - необходимое пространство = (размер массива, который >= n) * размер элемента, но даже если 2n, по прежнему O(n)
+
+- ### Связные списки (Linked Lists)
+ - [ ] Описание:
+ - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists)
+ - [ ] [CS 61B - Linked Lists (video)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5)
+ - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo)
+ - не все видео целиком, только кусочки об узлах и распределении памяти.
+ - [ ] Связные списки vs Массивы:
+ - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays)
+ - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays)
+ - [ ] [why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo)
+ - [ ] Ага, попался: тебе нужны знания указателей на указатели:
+ (для тех случаев, когда ты передаешь указатель функции, которая может менять адрес, куда указывает указатель)
+ Это страница просто для того, чтобы понять указатели на указатели. Читабельность и обслуживаемость страдает
+ из-за искусности.
+ - [Указатели на указатели](https://www.eskimo.com/~scs/cclass/int/sx8.html)
+ - [ ] воплотить в жизнь (я сделал это с помощью указателя на хвост и без):
+ - [ ] size() - возвращает количество элементов в листе
+ - [ ] empty() - возвращет true если список пуст
+ - [ ] value_at(n) - возращет значение n-го элемента, где 0 - первый элемент
+ - [ ] push_front(value) - добавляет элемент в начало списка
+ - [ ] pop_front() - удаляет первый и возращает его значение
+ - [ ] push_back(value) - добавляет элемент в конец списка
+ - [ ] pop_back() - удаляет последний и возращает его значение
+ - [ ] front() - возращает значение первого элемента в списке
+ - [ ] back() - возращает значение последнего элемента в списке
+ - [ ] insert(index, value) - помещает значение (value) в элемент по индексу (index), при этом заменяемый элемент
+ добавлен в список как новый элемент
+ - [ ] erase(index) - удаляет узел (элемент) по данному индексу
+ - [ ] value_n_from_end(n) - возращает значение n-го элемента c конца списка
+ - [ ] reverse() - реверсирует весь список
+ - [ ] remove_value(value) - удаляет первый элемент в списке с указанным значением (value)
+ - [ ] Двусвязный список
+ - [Описание (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists)
+ - Можно не делать
+
+- ### Стек
+ - [ ] [Стек (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks)
+ - [ ] [Использование стека Last-In First-Out (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html)
+ - [ ] Не будет реализован. Реализация с помощью массива очевидна.
+
+- ### Очередь
+ - [ ] [Использование очереди First-In First-Out(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html)
+ - [ ] [Очередь (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue)
+ - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer)
+ - [ ] [Очередь с приоритетом (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html)
+ - [ ] Реализация с использованием связанного списка и указателя на последний элемент(tail):
+ - enqueue(value) - добавляет элемент в конец очереди
+ - dequeue() - возвращает значение и удаляет из очереди последний добавленный элемент(front)
+ - empty()
+ - [ ] Реализация с применением массива фиксированного размера:
+ - enqueue(value) - добавляет элемент в конец очереди
+ - dequeue() - возвращает значение и удаляет из очереди последний добавленный элемент
+ - empty()
+ - full()
+ - [ ] Затраты:
+ - плохая реализация с применением связанного списка когда элемент добавляется в начало очереди и удаляется с конца очереди за O(n),
+ операция dequeue в таком случае будет требовать каждый раз обхода всего списка
+ - enqueue: O(1) (amortized, связанный список и массив [probing])
+ - dequeue: O(1) (связанный список и массив)
+ - empty: O(1) (связанный список и массив)
+
+- ### Хеш-таблица
+ - [ ] Видео:
+ - [ ] [Hashing with Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8)
+ - [ ] [Table Doubling, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [Open Addressing, Cryptographic Hashing (video)](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)
+ - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (video)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11)
+ - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4)
+
+ - [ ] Онлайн курсы:
+ - [ ] [Understanding Hash Functions (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html)
+ - [ ] [Using Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html)
+ - [ ] [Supporting Hashing (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html)
+ - [ ] [Language Support Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html)
+ - [ ] [Core Hash Tables (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables)
+ - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/3)
+ - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem)
+ - [ ] распределенные хеш-таблицы:
+ - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox)
+ - [Distributed Hash Tables (video)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables)
+
+ - [ ] реализация с помощью массива и применением linear probing
+ - hash(k, m) - m размер хеш-таблицы
+ - add(key, value) - если ключ уже существует обновляем значение
+ - exists(key)
+ - get(key)
+ - remove(key)
+
+## Дополнительно
+
+- ### Бинарный поиск
+ - [ ] [Бинарный поиск (видео на ютубе)](https://www.youtube.com/watch?v=D5SrAga1pno)
+ - [ ] [Бинарный поиск (видео на khanacademy)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search)
+ - [ ] [Длинная статья с деталями](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/)
+ - [ ] Реализация:
+ - бинарный поиск (на отсортированном числовом массиве)
+ - бинарный поиск с использованием рекурсии
+
+- ### Побитовые операции
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - ты должен знать сколько степеней двойки от (2^1 до 2^16 и 2^32)
+ - [ ] Даст отличное понимание манипуляций битами с помощью: &, |, ^, ~, >>, <<
+ - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
+ - [ ] Хорошее введение:
+ [Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I)
+ - [ ] [C Programming Tutorial 2-10: Bitwise Operators (video)](https://www.youtube.com/watch?v=d0AwjSpNXR0)
+ - [ ] [Bit Manipulation](https://en.wikipedia.org/wiki/Bit_manipulation)
+ - [ ] [Bitwise Operation](https://en.wikipedia.org/wiki/Bitwise_operation)
+ - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html)
+ - [ ] [The Bit Twiddler](http://bits.stephan-brumme.com/)
+ - [ ] [The Bit Twiddler Interactive](http://bits.stephan-brumme.com/interactive.html)
+ - [ ] 2s и 1s дополнения:
+ - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4)
+ - [1s Complement](https://en.wikipedia.org/wiki/Ones%27_complement)
+ - [2s Complement](https://en.wikipedia.org/wiki/Two%27s_complement)
+ - [ ] счетчик битов:
+ - [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc)
+ - [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan)
+ - [How To Count The Number Of Set Bits In a 32 Bit Integer](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer)
+ - [ ] округление до следующей степени 2:
+ - [Round Up To Next Power Of Two](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html)
+ - [ ] обмен значениями:
+ - [Swap](http://bits.stephan-brumme.com/swap.html)
+ - [ ] абсолютные значения:
+ - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html)
+
+## Деревья
+
+- ### Деревья, Заметки и Основные понятия
+ - [ ] [Основы деревьев (видео)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
+ - [ ] [Деревья (видео)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
+ - базовые конструкции деревьев
+ - обход
+ - алгоритмы манипуляции
+ - BFS (breadth-first search - поиск в ширину)
+ - [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)
+ - DFS (depth-first search - поиск в глубину)
+ - [MIT (видео)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14)
+ - заметки:
+ сложность по времени выполнения: O(n)
+ сложность по памяти:
+ лучшая: O(log n) - средняя высота дерева
+ худшая: O(n)
+ - in-order (DFS: левый, вершина, правый)
+ - post-order (DFS: левый, правый, вершина)
+ - pre-order (DFS: вершина, левый, правый)
+
+- ### Бинарное дерево поиска (BST: Binary search trees)
+ - [ ] [Обзор бинарного дерева поиска (видео)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [Лекции (видео)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees)
+ - начинается с таблицы символов и заканчивая BST приложениями
+ - [ ] [Введение (видео)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction)
+ - [ ] [MIT (видео)](https://www.youtube.com/watch?v=9Jry5-82I68)
+ - C/C++:
+ - [ ] [Бинарное дерево поиска - реализация на C/C++ (видео)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28)
+ - [ ] [BST реализация - аллокация памяти в стеке и куче (видео)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29)
+ - [ ] [Поиск минимального и максимального элемента в BST (видео)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [Нахождение высоты BST (видео)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31)
+ - [ ] [Обход BST - breadth-first и depth-first стратегии (видео)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32)
+ - [ ] [Бинарное дерево: обход по уровням (видео)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [Обход бинарного дерева: Pre-order, In-order, Post-order (видео)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [Проверка - бинарное дерево BST или нет (видео)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] [Удаление узов в BST (видео)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36)
+ - [ ] [In-order аналог в BST (видео)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P)
+ - [ ] Реализация:
+ - [ ] insert // вставка значения в дерево
+ - [ ] get_node_count // получение количества хранящихся значений
+ - [ ] print_values // вывод значений, начиная с min к max
+ - [ ] delete_tree
+ - [ ] is_in_tree // возвращает если переданное значение есть в дереве
+ - [ ] get_height // возвращает высоту дерева в количестве узлов (высота одного узла 1)
+ - [ ] get_min // возвращает минимальное значение хранящиеся в узлах дерева
+ - [ ] get_max // возвращает максимальное значение хранящиеся в узлах дерева
+ - [ ] is_binary_search_tree
+ - [ ] delete_value
+ - [ ] get_successor // возвращает следующее максимальное значение в дереве после переданного, -1 если none
+
+- ### Куча, Приоритетная очередь, Бинарная куча
+ - визуализируется как дерево, но обычно хранится в линейных структурах данных (массив, связанные список)
+ - [ ] [Куча](https://en.wikipedia.org/wiki/Heap_(data_structure))
+ - [ ] [Введение (видео)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction)
+ - [ ] [Наивная реализация (видео)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations)
+ - [ ] [Бинарные деревья (видео)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees)
+ - [ ] [Замечания к высоте дерева (видео)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark)
+ - [ ] [Базовые операции (видео)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations)
+ - [ ] [Полные двоичные деревья (видео)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees)
+ - [ ] [Псевдокод (видео)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode)
+ - [ ] [Пирамидальная сортировка - начальные шаги (видео)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291)
+ - [ ] [Пирамидальная сортировка (видео)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort)
+ - [ ] [Построение кучи (видео)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap)
+ - [ ] [MIT: Кучи и пирамидальная сортировка (видео)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [CS 61B Лекция 24: Приоритетные очереди (видео)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C)
+ - [ ] [Построение кучи за линейное время (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw)
+ - [ ] Реализация max-heap:
+ - [ ] insert
+ - [ ] sift_up - необходима для вставки
+ - [ ] get_max - возвращает максимальный элемент, не удаляя его
+ - [ ] get_size() - возвращает количество хранящихся элементов
+ - [ ] is_empty() - возвращает true если куча пустая
+ - [ ] extract_max - возвращает максимальный элемент, удаляя его
+ - [ ] sift_down - необходима для extract_max
+ - [ ] remove(i) - удаляет элемент по индексу x
+ - [ ] heapify - создает кучу из элементов массива, необходима для heap_sort
+ - [ ] heap_sort() - берет не отсортированный массив и делает его отсортированным, не используя дополнительной памяти, кроме занимаемой самим массивом используя max heap
+ - важно: можно использовать min heap, но тогда понадобиться доболнительная память.
+
+## Сортировка
+
+- [ ] Заметки:
+ - Напиши код для разных сортировкок и помни про лучшую/худую, среднюю сложность для каждой:
+ - не пузырьковая сортировка - она медленная - O(n^2), заисключением n <= 16
+ - [ ] устойчивость в алгоритмах сортировки ("Быстрая сортировка устойчива?")
+ - [Устоичивость алгоритма сортировки](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability)
+ - [Устоичивость в алгоритмах сортировки](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms)
+ - [Устоичивость в алгоритмах сортировки](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/)
+ - [Алгоритмы сортировки - Устоичивость](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf)
+ - [ ] Какие алгоритмы можно применять для связанного списка? Для массива? А какие для обоих структур данных?
+ - Я не рекомендовал бы сортировать связанный список, но если нужно, то сортировка слиянием подходит для этого.
+ - [Сортировка слиянием для связанного списка](http://www.geeksforgeeks.org/merge-sort-for-linked-list/)
+
+- Для пирамидальной сортировки, см. структуру данных "Куча" выше. Пирамидальная сортировка эффективна, но не устойчива.
+
+- [ ] [Седжвик (Sedgewick) - Сортировка слиянием (5 видео)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+ - [ ] [1. Сортировка слиянием](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1)
+ - [ ] [2. Сортировка слиянием наизнанку](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2)
+ - [ ] [3. Сложность сортировки](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+ - [ ] [4. Компараторы](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+ - [ ] [5. Устойчивость](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+
+- [ ] [Седжвик (Sedgewick) - Быстрая сортировка (4 видео)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [1. Быстрая сортировка](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [2. Выбор](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [3. Дублирование ключей](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [4. Системные сортировки](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+
+- [ ] UC Berkeley:
+ - [ ] [CS 61B Лекция 29: Сортировка I (видео)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29)
+ - [ ] [CS 61B Лекция 30: Сортировка II (видео)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30)
+ - [ ] [CS 61B Лекция 32: Сортировка III (видео)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C)
+ - [ ] [CS 61B Лекция 33: Сортировка V (видео)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C)
+
+- [ ] [Пузырькова сортировка (видео)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB)
+- [ ] [Анализ пузырьковой сортировки (видео)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB)
+- [ ] [Сортировка вставками, Сортировка слиянием (видео)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+- [ ] [Сортировка вставками (видео)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB)
+- [ ] [Сортировка слиянием (видео)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB)
+- [ ] [Быстрая сортировка (видео)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB)
+- [ ] [Сортировка выбором (видео)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB)
+
+- [ ] Код сортировки слиянием:
+ - [ ] [Использование выходного массива (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c)
+ - [ ] [Использование выходного массива (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py)
+ - [ ] [На одном массиве (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc)
+- [ ] Код быстрой сортировки:
+ - [ ] [Реализация (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c)
+ - [ ] [Реализация (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c)
+ - [ ] [Реализация (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py)
+
+- [ ] Реализация:
+ - [ ] Сортировка слиянием: O(n log n) средний и худший случаи
+ - [ ] Быстрая сортировка O(n log n) средний случай
+ - Сортировка выбором и сортировка вставками обе имеют среднюю и худшую сложность O(n^2)
+ - Для пирамидальной сортировки, смотри структуру данных "Куча" выше.
+
+- [ ] Необязательно, но я рекомендую:
+ - [ ] [Седжвик (Sedgewick) - Поразрядная сортировка (6 видео)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
+ - [ ] [1. Строки в Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6)
+ - [ ] [2. Ключевые индексные расчеты](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5)
+ - [ ] [3. Наименьший значащий разряд первой строки поразрядной сортировки](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4)
+ - [ ] [4. Наибольший значащий разряд первой строки поразрядной сортировки](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
+ - [ ] [5. 3 способа поразрядной сортировки](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
+ - [ ] [6. Суффиксные массивы](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1)
+ - [ ] [Поразрядная сортировка](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort)
+ - [ ] [Поразрядная сортировка (видео)](https://www.youtube.com/watch?v=xhr26ia4k38)
+ - [ ] [Поразрядная сортировка, Сортировка подсчётом (линейные временные ограничения) (видео)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [Рандомизация: Перемножение матриц, Быстрая сортировка, Алгоритм Фрейвальда (видео)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [Сортировка за линейное время (видео)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14)
+
+Если вам необходимо больше информации, смотрите секцию "Сортировка" в [Дополнительные детали о некоторых разделах](#additional-detail-on-some-subjects)
+
+## Графы
+Графы могут быть использованы для представления многих задач в области CS, поэтому раздел включает в себя такие темы как деревья и сортировку.
+
+- Заметки от Стива Йеги:
+ - Существуют три основных способа представления графа в памяти:
+ - объекты и указатели
+ - матрица
+ - список смежности
+ - Ознакомьтесь с каждым представлением, его преимуществами и недостатками
+ - BFS и DFS - узнайте их вычислительную сложность, соотношение преимуществ и недостатков, способы реализации в коде
+ - Когда вы получили задачу, сначала попробуйте решить её с использованием графов, а затем двигайтесь дальше, если такого решения нет.
+
+- [ ] Лекции профессора Стивена Скина - хорошее введение:
+ - [ ] [CSE373 2012 - Лекция 11 - Структуры данных для представления графов (видео)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11)
+ - [ ] [CSE373 2012 - Лекция 12 - Поиск в ширину (видео)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12)
+ - [ ] [CSE373 2012 - Лекция 13 - Алгоритмы на графах (видео)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13)
+ - [ ] [CSE373 2012 - Лекция 14 - Алгоритмы на графах (продолжение) (видео)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - Лекция 15 - Алгоритмы на графах (продолжение 2) (видео)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - Лекция 16 - Алгоритмы на графах (продолжение 3) (видео)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+
+- [ ] Графы (обзор и многое другое):
+
+ - [ ] [6.006 Задача поиска кратчайших путей из одной вершины (видео)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.006 Алгоритм Дейкстры (видео)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.006 Алгоритм Беллмана-Форда (видео)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17)
+ - [ ] [6.006 Оптимизация алгоритма Дейкстры (видео)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18)
+ - [ ] [Aduni: Алгоритмы на графах I: Топологическая сортировка, Минимальное остовное дерево, Алгоритм Прима - Лекция 6 (видео)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Aduni: Алгоритмы на графах II: DFS, BFS, Алгоритм Краскала, Система непересекающихся множеств - Лекция 7 (видео)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7)
+ - [ ] [Aduni: Алгоритмы на графах III: Кратчайший путь - Лекция 8 (видео)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8)
+ - [ ] [Aduni: Алгоритмы на графах IV: Введение в геометрические алгоритмы - Лекция 9 (видео)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9)
+ - [ ] [CS 61B 2014 (начиная с 58:09) (видео)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)
+ - [ ] [CS 61B 2014: Взвешенные графы (видео)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19)
+ - [ ] [Жадные алгоритмы: Минимальное остовное дерево (видео)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [Сильно связные компоненты, Алгоритм Косарайю, Алгоритмы на графах (видео)](https://www.youtube.com/watch?v=RpgcYiky7uw)
+
+- Полный курс на Coursera:
+ - [ ] [Алгоритмы на графах (видео)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome)
+
+- Стив Йеги: Если у вас есть возможность, попробуйте изучить более продвинутые алгоритмы:
+ - [ ] Алгоритм Дейкстры - смотри выше - 6.006
+ - [ ] A*
+ - [ ] [Алгоритм поиска A](https://en.wikipedia.org/wiki/A*_search_algorithm)
+ - [ ] [Учебное пособие по основам алгоритма поиска пути A* (видео)](https://www.youtube.com/watch?v=KNXfSOx4eEE)
+ - [ ] [Поиск пути A* (E01: объяснение алгоритма) (видео)](https://www.youtube.com/watch?v=-L-WgKMFuhE)
+
+- Я смогу применить:
+ - [ ] DFS со списком смежности (рекурсия)
+ - [ ] DFS со списком смежности (итерационный подход со стеком)
+ - [ ] DFS с матрицей смежности (рекурсия)
+ - [ ] DFS с матрицей смежности (итерационный подход со стеком)
+ - [ ] BFS со списком смежности
+ - [ ] BFS с матрицей смежности
+ - [ ] Поиск кратчайшего пути из одной вершины (алгоритм Дейкстры)
+ - [ ] Минимальное остовное дерево
+ - Алгоритмы основанные на DFS (см видео Aduni выше):
+ - [ ] Поиск циклов в графе (необходимо для топологической сортировки, так как мы проверяем наличие циклов в графе перед началом работы алгоритма)
+ - [ ] топологическую сортировку
+ - [ ] подсчет компонентов связности в графе
+ - [ ] список сильно связных компонентов
+ - [ ] проверку графа на двудольность
+
+Вы найдете больше практических задач на графах в книге Стивена Скина (см. раздел книги ниже) и в книгах о прохождении интервью.
+
+## Еще больше знаний
+
+- ### Рекурсия
+ - [ ] Лекции Стэнфорда по рекурсии и механизмам возврата:
+ - [ ] [Лекция 8 | Абстракции программирования (видео)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
+ - [ ] [Лекция 9 | Абстракции программирования (видео)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9)
+ - [ ] [Лекция 10 | Абстракции программирования (видео)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69)
+ - [ ] [Лекция 11 | Абстракции программирования (видео)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11)
+ - когда уместно использование рекурсии?
+ - когда лучше использовать хвостовую рекурсию?
+ - [ ] [Что такое хвостовая рекурсия и почему её использование нежелательно?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad)
+ - [ ] [Хвостовая рекурсия (видео)](https://www.youtube.com/watch?v=L1jjXGfxozc)
+
+- ### Объектно-ориентированное программирование
+ - [ ] [Дополнительно: Серия уроков по UML 2.0 (видео)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
+ - [ ] Объектно-ориентированная разработка программного обеспечения: Разработка программного обеспечения с использованием UML и Java (21 видео):
+ - Можно пропустить эту часть, если у вас есть хорошее понимание концепции ООП и практик проектирования.
+ - [ООП: Разработка программного обеспечения с использованием UML и Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] Принципы дизайна ООП (SOLID):
+ - [ ] [Боб Мартин SOLID принципы объектно-ориентированного программирования и гибкое проектирование (видео)](https://www.youtube.com/watch?v=TMuno5RZNeE)
+ - [ ] [Шаблоны проектирования SOLID в C# (видео)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ)
+ - [ ] [Принципы SOLID (видео)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
+ - [ ] S - [Принцип единственной ответственности](http://www.oodesign.com/single-responsibility-principle.html) | [Одна зона ответственности для каждого объекта](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
+ - [больше подробностей](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
+ - [ ] O - [Принцип открытости/закрытости](http://www.oodesign.com/open-close-principle.html) | [Программные сущности должны быть готовы для расширения, но не для модификации](https://en.wikipedia.org/wiki/Open/closed_principle)
+ - [больше подробностей](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
+ - [ ] L - [Принцип подстановки Барбары Лисков](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Функции, которые используют ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
+ - [больше подробностей](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
+ - [ ] I - [Принцип разделения интерфейса](http://www.oodesign.com/interface-segregation-principle.html) | Клиенты не должны быть вынуждены реализовывать интерфейсы, которые они не используют
+ - [Принцип разделения интерфейса за 5 минут (видео)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
+ - [больше подробностей](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
+ - [ ] D -[Принцип инверсии зависимостей](http://www.oodesign.com/dependency-inversion-principle.html) | Снизить зависимость в составе объектов
+ - [Что такое принцип инверсии зависимостей и почему он так важен](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
+ - [больше подробностей](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
+
+- ### Шаблоны проектирования
+ - [ ] [Краткий обзор UML (видео)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
+ - [ ] Изучите эти шаблоны:
+ - [ ] стратегия
+ - [ ] одиночка
+ - [ ] адаптер
+ - [ ] прототип
+ - [ ] декоратор
+ - [ ] посетитель
+ - [ ] фабричный метод, абстрактная фабрика
+ - [ ] фасад
+ - [ ] наблюдатель
+ - [ ] заместитель
+ - [ ] делегирование
+ - [ ] команда
+ - [ ] состояние
+ - [ ] хранитель
+ - [ ] итератор
+ - [ ] компоновщик
+ - [ ] приспособленец
+ - [ ] [Глава 6 (Часть 1) - Паттерны (видео)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
+ - [ ] [Глава 6 (Часть 2) - Абстрактное представление, Общая иерархия, Актер – Роль, Одиночка, Наблюдатель, Делегирование (видео)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [Глава 6 (Часть 3) - Адаптер, Фасад, Неизменяемый объект, интерфейс типа read-only, Заместитель (видео)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+ - [ ] [Серия уроков (27 видео)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
+ - [ ] [Паттерны проектирования](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
+ - Я знаю, что классической книгой для изучения паттернов является "Приемы объектно-ориентированного проектирования. Паттерны проектирования" (Джон Влиссидес, Ральф Джонсон, Ричард Хелм, Эрих Гамма), но "Паттерны проектирования" отлично подходят для тех, кто только начал изучать ООП.
+ - [ ] [Удобный справочник: 101 шаблон проектирования и советы для разработчиков](https://sourcemaking.com/design-patterns-and-tips)
+
+- ### Комбинаторика (n выбрать k) & Вероятность
+ - [ ] [Math Математические навыки: Как найти факториал, перестановки и комбинации (видео)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
+ - [ ] [Make School: Вероятность (видео)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
+ - [ ] [Make School: Больше про вероятность и цепи Маркова (видео)](https://www.youtube.com/watch?v=dNaJg-mLobQ)
+ - [ ] Khan Academy:
+ - Макет курса:
+ - [ ] [Базовые основы теории вероятностей](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic)
+ - Только видео - 41 (простые и короткие):
+ - [ ] [Объяснение вероятности (видео)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19)
+
+- ### NP, NP-полные и аппрпоксимирующие алгоритмы
+ - Наиболее популярные NP-полные задачи, таких как задача коммивояжора и задача о рюкзаке, и то как их нужно идетифицировать на собеседованиях.
+ - Что означает NP-полная задача.
+ - [ ] [Вычислительная сложность (видео)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23)
+ - [ ] Simonson:
+ - [ ] [Жадные алгоритмы. II & Введение в NP полноту (видео)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939)
+ - [ ] [NP полнота II & Понижение (видео)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [NP полнота III (видео)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [NP полнота IV (видео)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18)
+ - [ ] Skiena:
+ - [ ] [CSE373 2012 - Лекция 23 - Введение в NP-полноту (видео)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508)
+ - [ ] [CSE373 2012 - Лекция 24 - NP-полнота доказательства (видео)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [CSE373 2012 - Лекция 25 - NP-полнота сложности (видео)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [Сложность: P, NP, NP-полная, понижение (видео)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22)
+ - [ ] [Сложность: Аппроксимирующие алгоритмы (видео)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24)
+ - [ ] [Сложность: Алгортимы с фиксированными параметрами (видео)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - Peter Norvig обсуждает близкое к оптимальному решение задачи коммивояжера:
+ - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb)
+ - Страницы 1048 - 1140 в CLRS если у тебя она есть.
+
+- ### Кэш
+ - [ ] LRU кэш:
+ - [ ] [Волшебство LRU кэша (100 дней Google Dev) (видео)](https://www.youtube.com/watch?v=R5ON3iwx78M)
+ - [ ] [Реализация LRU (видео)](https://www.youtube.com/watch?v=bq6N7Ym81iI)
+ - [ ] [LeetCode - 146 LRU кэш (C++) (видео)](https://www.youtube.com/watch?v=8-FZRAjR7qU)
+ - [ ] CPU кэш:
+ - [ ] [MIT 6.004 L15: Иерархия памяти (видео)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24)
+ - [ ] [MIT 6.004 L16: Вопросы кэширования (видео)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+
+- ### Процессы и треды
+ - [ ] Компьтерные науки 162 - Операционные системы (25 видео):
+ - видео 1-11 про процес сы и треды
+ - [Операционные системы и системное программирование (видео)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
+ - [В чем разница между процессами и тредами?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread)
+ - Покрытие:
+ - Процессы, треды, конкурентность
+ - разница между процессами и тредами
+ - процессы
+ - треды
+ - блокировки
+ - мьютексы
+ - семафоры
+ - мониторы
+ - как они работают
+ - взаимная блокировка
+ - livelock
+ - CPU активность, прерывания, преключение контекста
+ - Современные конкурирующие конструкции и многоядерные процессоры
+ - Ресурсы процесса (память: код, статическое хранилище, стек, куча, и файловые дискрипторы, i/o)
+ - Ресурсы треда (указанные выше (минус стек) с другими тредами одного процесса, но каждый имеет собственный pc, счетчик стека, регистры, и стек)
+ - Форк действительно копируется при записи (только для чтения), пока новый процесс не запишет в память, а затем сделает полную копию.
+ - Переключение контекста
+ - Как переключение контекста инициируется операционной системой и соответствующим оборудованием
+ - [ ] [треды в C++ (серии - 10 видео)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M)
+ - [ ] конкуренция в Python (видео):
+ - [ ] [Короткие видео о тредах](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1)
+ - [ ] [Python треды](https://www.youtube.com/watch?v=Bs7vPNbB9JM)
+ - [ ] [Понимание Python GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s)
+ - [ссылка](http://www.dabeaz.com/GIL)
+ - [ ] [David Beazley - Параллельный Python с нуля: LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4)
+ - [ ] [Основная мысль David Beazley - Интересные темы (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU)
+ - [ ] [Мьютексы в Python](https://www.youtube.com/watch?v=0zaPs8OtyKY)
+
+- ### Статьи
+ - Здесь вы найдете статьи от Google, а также дургие известные статьи.
+ - У вас вряд ли будет время прочитать их все с начала до конца. Я рекоммендую выбирать статьи и главы в них - тратье время грамотно на то, что хотите изучить глубже.
+ - [Любите классические статьи?](https://www.cs.cmu.edu/~crary/819-f09/)
+ - [ ] [1978: Коммуникация последовательных процессов](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf)
+ - [разработка на языке Go](https://godoc.org/github.com/thomas11/csp)
+ - [ ] [2003: Файловая система Google](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf)
+ - в 2012 заменена на Colossus
+ - [ ] [2004: MapReduce: Упрощенная обработка данных на крупных кластерах](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf)
+ - в основном заменена Cloud Dataflow
+ - [ ] [2007: Что каждый программист должен знать о памяти (очень длинная статья, и автор говорит пропускать некоторые разделы)](https://www.akkadia.org/drepper/cpumemory.pdf)
+ - [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/)
+ - [ ] 2012: AddressSanitizer: Быстрая проверка адресов:
+ - [статья](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf)
+ - [видео](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany)
+ - [ ] 2013: Spanner: Глобальная дистрибутивная база данных Google:
+ - [статья](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf)
+ - [видео](https://www.usenix.org/node/170855)
+ - [ ] [2014: Машинное обучение: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf)
+ - [ ] [2015: Continuous Pipelines в Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf)
+ - [ ] [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf)
+ - [ ] [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf )
+ - [ ] [2015: Как разработчики ищут код: на примере](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf)
+ - [ ] [2016: Borg, Omega, и Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf)
+
+- ### Тестирование
+ - Нужно пройти:
+ - модульное тестирование
+ - Mock-объекты (от англ. «объект-пародия», «объект-имитация»)
+ - интеграционное тестирование
+ - внедрение зависимости
+ - [ ] [Гибкая методология разработки с James Bach (видео)](https://www.youtube.com/watch?v=SAhJf36_u5U)
+ - [ ] [Открытая лекция, данная James Bach на тему тестирования (видео)](https://www.youtube.com/watch?v=ILkT_HV9DVU)
+ - [ ] [Steve Freeman - разработка через тестирование (это не то, что мы имели в виду) (видео)](https://vimeo.com/83960706)
+ - [слайды](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf)
+ - [ ] [Новая эра разработки через тестирование](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html)
+ - [ ] [Мертва ли разработка через тестирование? (видео)](https://www.youtube.com/watch?v=z9quxZsLcfo)
+ - [ ] [Видео-курс (152 видео) - нужны не все (видео)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g)
+ - [ ] [Вэб-разработка через тестирование на Питоне](http://www.obeythetestinggoat.com/pages/book.html#toc)
+ - [ ] Внедрение зависимости:
+ - [ ] [видео](https://www.youtube.com/watch?v=IKD2-MAkXyQ)
+ - [ ] [Принципы тестирования](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html)
+ - [ ] [Как писать тесты](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html)
+
+- ### Планирование
+ - как работает планирование (scheduling) в операционной системе
+ - можно найти информацию в видео про Операционные системы
+
+- ### Реализация системных вызовов
+ - пойми, что находится под обложкой библиотек и программных интерфейсов (API), которые ты используешь
+ - можешь ли ты написать код для них?
+
+- ### Строковый поиск & манипуляции
+ - [ ] [Sedgewick - Суффиксные массивы (видео)](https://www.youtube.com/watch?v=HKPrVm5FWvg)
+ - [ ] [Sedgewick - Поиск подстроки (видео)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5)
+ - [ ] [1. Введение в поиск подстроки](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5)
+ - [ ] [2. Поиск подстроки грубой силой](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4)
+ - [ ] [3. Кнут-Моррис Пратт](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
+ - [ ] [4. Бойер-Мур](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2)
+ - [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
+ - [ ] [Шаблон поиска в тексте (текст)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)
+
+ Если вам нужно больше подробностей по этому вопросу, см. Раздел «Соответствие строк» в [Дополнительная информация по некоторым предметам](#additional-detail-on-some-subjects)
+---
+
+## Проектирование систем, Масштабируемость, Обработка данных
+- **Вы можете ожидать вопросов по проектированию систем если у вас 4+ лет опыта.**
+- Масштабируемость и Проектирование систем это очень большие темы с большим количеством разделов и ресурсов, так как нужно многое учитывать при создании расширяемой программной/аппаратной системы. На освоение этого может уйти немало времени.
+- Заметки от Стива Йеги:
+ - масштабируемость
+ - Извленечние отдельных значений из больших наборов данных
+ - Преобразование одних наборы данных в другие
+ - Обработка неприлично больших объёмов данных
+ - проектирование систем
+ - наборы функций
+ - интерфейсы
+ - иерархии классов
+ - проектирование системы удовлетворяющей определённым ограничениям
+ - простота и надёжность
+ - компромиссы
+ - анализ производительности и оптимизации
+- [ ] **НАЧНИТЕ С ЭТОГО**: [Проектирование систем от HiredInTech](http://www.hiredintech.com/system-design/)
+- [ ] [Как я готовлюсь отвечать на вопросы по проектированию систем на технических интервью?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023)
+- [ ] [8 вещей которые вам нужно узнать прежде чем проходить собеседование по проектированию систем](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/)
+- [ ] [Проектирование алгоритмов](http://www.hiredintech.com/algorithm-design/)
+- [ ] [Нормализация баз данных - 1NF, 2NF, 3NF and 4NF (видео)](https://www.youtube.com/watch?v=UrYLYV7WSHM)
+- [ ] [Собеседование по проектированию систем](https://github.com/checkcheckzz/system-design-interview) - Здесь собрано много ресурсов. Просмотрите статьи и примеры. Некоторые из них выложены ниже.
+- [ ] [Как пройти собеседование по проектированию систем](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
+- [ ] [Числа которые следует знать всем](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/)
+- [ ] [Сколько времени занимает переключение контекста?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html)
+- [ ] [Транзакции через центры обработки данных (видео)](https://www.youtube.com/watch?v=srOgpXECblk)
+- [ ] [Простое английское введение в теорему CAP](http://ksat.me/a-plain-english-introduction-to-cap-theorem/)
+- [ ] Алгоритм Паксос:
+ - [короткое видео](https://www.youtube.com/watch?v=s8JqcZtvnsM)
+ - [более длинное видео со сценарием использования и мульти-паксосом](https://www.youtube.com/watch?v=JEpsBg0AO6o)
+ - [статья](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)
+- [ ] [Последовательное хэширование](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
+- [ ] [NoSQL Шаблоны](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
+- [ ] Масштабируемость:
+ - [ ] [Большой обзор (видео)](https://www.youtube.com/watch?v=-W9F__D3oY4)
+ - [ ] Серия коротких статей:
+ - [Клоны](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
+ - [Базы данных](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database)
+ - [Кэш](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache)
+ - [Асинхронность](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism)
+ - [ ] [Масштабируемая Веб-архитектура и Распределённые системы](http://www.aosabook.org/en/distsys.html)
+ - [ ] [Объяснение ошибок распределённых вычислений](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf)
+ - [ ] [Прагматичные методы программирования](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html)
+ - [дополнительно: обработка графиков Google Pregel](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html)
+ - [ ] [Джефф Дин - создание программных систем в Google и извлечённые уроки (видео)](https://www.youtube.com/watch?v=modXC5IWTJI)
+ - [ ] [Введение в проектирование расширяемых систем](http://lethain.com/introduction-to-architecting-systems-for-scale/)
+ - [ ] [Масштабирование мобильных игр для глобальной аудитории с использованием App Engine и Cloud Datastore (видео)](https://www.youtube.com/watch?v=9nWyWwY2Onc)
+ - [ ] [Как Google разрабатывает планетарное масштабирование для инфраструктуры планетарного масштаба (видео)](https://www.youtube.com/watch?v=H4vMcD7zKM0)
+ - [ ] [Важность алгоритмов](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/)
+ - [ ] [Разбиение на части](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html)
+ - [ ] [Расширение в Facebook (2009)](https://www.infoq.com/presentations/Scale-at-Facebook)
+ - [ ] [Расширение в Facebook (2012), "Разработка для миллиарда пользователей" (видео)](https://www.youtube.com/watch?v=oodS71YtkGU)
+ - [ ] [Проектирование для "долгой игры" - Основной принцип Астрид Аткинсон (видео)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4)
+ - [ ] [7 лет уроков масштабирования с YouTube за 30 минут](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html)
+ - [видео](https://www.youtube.com/watch?v=G-lGCC4KKok)
+ - [ ] [Как PayPal расширили для миллиардов транзакций в день используя всего лишь 8 виртуальных машин](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html)
+ - [ ] [Как удалять дубликаты из больших наборов данных](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/)
+ - [ ] [Взгляд на масштабируемость и инженерную культуру Etsy с Джоном Кови (видео)](https://www.youtube.com/watch?v=3vV4YiqKm1o)
+ - [ ] [Что привело Amazon к созданию собственной микросервисной архитектуры](http://thenewstack.io/led-amazon-microservices-architecture/)
+ - [ ] [Сжимать или не сжимать - такой вопрос стоял перед Uber](https://eng.uber.com/trip-data-squeeze/)
+ - [ ] [Asyncio Tarantool Queue, вставай в очередь](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html)
+ - [ ] [Когда следует использовать приблизительную обработку запросов?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html)
+ - [ ] [Переход Google с единого центра обработки данных на отказоустойчивый, на собственную многосетевую архитектуру]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html)
+ - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html)
+ - [ ] [Архитектура Egnyte: уроки, извлеченные при построении и масштабировании многопетабайтной распределенной системы](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html)
+ - [ ] [Программирование на основе машинного обучения: новое программирование для нового мира](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html)
+ - [ ] [Технология оптимизации изображений, которая обслуживает миллионы запросов в день](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html)
+ - [ ] [Архитектура Patreon коротко](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html)
+ - [ ] [Tinder: как одна из самых больших систем рекомендаций решает кого вы увидите следующим?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html)
+ - [ ] [Современное проектирование кэша](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html)
+ - [ ] [Прямая трансляция видео в масштабе Facebook](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html)
+ - [ ] [Руководство для начинающих по масштабированию до 11 миллионов пользователей на Amazon AWS](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 Counter угрозу существованию Google?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html)
+ - [ ] [360-градусный обзор всего стека Netflix](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)
+ - [ ] [Архитектура Cinchcast - 1500 часов аудио каждый день](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 - 50 миллионов пользователей в месяц и более](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html)
+ - [ ] [Архитектура TripAdvisor - 40 миллионов посетителей, 200 миллионов динамических представлений страниц, 30TB данных](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html)
+ - [ ] [Архитектура PlentyOfFish](http://highscalability.com/plentyoffish-architecture)
+ - [ ] [Архитектура Salesforce - Как они обрабатывают 1.3 миллиарда транзакций в день](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:
+ - [O'Reilly MySQL CE 2011: Джереми Койл, "Большие и маленькие данные в @Twitter" (видео)](https://www.youtube.com/watch?v=5cKTP36HVgI)
+ - [Timelines в процессе расширения](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
+ - Чтобы узнать ещё больше, посмотрите серию видео "Mining Massive Datasets" в разделе "Серии видео".
+- [ ] Практика в проектировании систем: несколько идей чтобы проработать их с небольшим количеством информации о том, как это было сделано в действительности:
+ - обзор: [Проектирование систем с HiredInTech](http://www.hiredintech.com/system-design/)
+ - [шпаргалка](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - процесс работы:
+ 1. Поймите проблему и контекст:
+ - определите сценарии использования с помощью интервьера
+ - предложите дополнительные функции
+ - уберите детали, которые интервьюер посчитает выходящими за рамки
+ - предположите что нужна очень высокая доступность, добавьте соответствующий сценарий использования
+ 2. Подумайте об ограничениях:
+ - спросите сколько предполагается запросов в месяц
+ - спросите сколько предполагается запросов в секунду (вам могут просто сказать или предложить посчитать самостоятельно)
+ - ожидаемое соотношение чтений и записей
+ - держите в голове правило 80/20 когда оцениваете
+ - как много данных записывается в секунду
+ - общее количество памяти, необходимое через 5 лет
+ - как много запросов на чтение происходит в секунду
+ 3. Проектирование абстракций:
+ - слои (сервисный, данные, кэширование)
+ - инфраструктура: балансировка нагрузки, обмен сообщениями
+ - грубая оценка одного из ключевых алгоритмов которые управляют сервисом
+ - примите во внимание "бутылочные горлышки" и определите как от них избавиться
+ - Упражнения:
+ - [Спроектируйте CDN network: старая статья](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci)
+ - [Спроектируйте систему генерации уникальных ID](https://blog.twitter.com/2010/announcing-snowflake)
+ - [Спроектируйте карточную мультиплеерную онлайн-игру](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html)
+ - [Спроектируйте базу данных ключ-значение](http://www.slideshare.net/dvirsky/introduction-to-redis)
+ - [Спроектируйте функцию возвращающую последние k запросов за прошедший период времени]( https://icmi.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf)
+ - [Спроектируйте систему передачи изображений](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html)
+ - [Спроектируйте систему рекомендаций](http://ijcai13.org/files/tutorial_slides/td3.pdf)
+ - [Спроектируйте систему укорачивания URL: скопировано из верхней части](http://www.hiredintech.com/system-design/the-system-design-process/)
+ - [Спроектируйте кэш-систему](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/)
+
+---
+
+## Заключительный обзор
+
+ В этом разделе вы найдете короткие видео, которые можно посмотреть достаточно быстро чтобы повторить наиболее важные моменты.
+ Полезно освежать свои знания чаще.
+
+- [ ] Серия 2-3 минутных короткие видео по темам (23 видео)
+ - [Видео](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22)
+- [ ] Серия коротких 2-5 минутных видео - Michael Sambol (18 видео):
+ - [Видео](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ)
+- [ ] [Видео от Сэджвика - Алгоритмы I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd)
+ - [ ] [01. Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t)
+ - [ ] [02. Анализ Алгоритмов](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0)
+ - [ ] [03. Стэки и Очереди](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh)
+ - [ ] [04. Элементарные сортировки](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd)
+ - [ ] [05. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9)
+ - [ ] [06. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1)
+ - [ ] [07. Приоритетные очереди](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5)
+ - [ ] [08. Элементарные таблицы символов](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG)
+ - [ ] [09. Сбалансированные деревья поиска](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu)
+ - [ ] [10. Геометрические применениния BST](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx)
+ - [ ] [11. Хэш таблицы](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11)
+- [ ] [Видео от Сэджвика - Алгоритмы II](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50)
+ - [ ] [01. Ненаправленные графы](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM)
+ - [ ] [02. Направленные графы](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K)
+ - [ ] [03. Minimum Spanning Trees](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj)
+ - [ ] [04. Кратчайшие пути](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD)
+ - [ ] [05. Maximum Flow](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma)
+ - [ ] [06. Radix Sorts](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53)
+ - [ ] [07. Tries](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
+ - [ ] [08. Поиск подстроки](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66)
+ - [ ] [09. Регулярные выражения](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh)
+ - [ ] [10. Сжатие данных](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ)
+ - [ ] [11. Reductions](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF)
+ - [ ] [12. Линейное программирование](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1)
+ - [ ] [13. Intractability](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S)
+
+---
+
+## Практика: задачи по программированию
+
+Теперь, когда вы узнали все вышерассмотренные темы по компютерным наукам, настало время попрактиковаться в решении задач по программированию.
+
+**Решение задач по программированию - это не запоминание решений.**
+
+Для чего вам нужно практиковаться в решении задач по программированию:
+- выявление проблем, и умение определять какие структуры данных и алгоритмы походят для их решения
+- сбор требований для задачи
+- проговаривание хода решения задачи, так же как вы будете это делать на собеседовании
+- написание кода на доске или на бумаге, но не на компьютере
+- умение оценивать сложность вашего решения по расходу времени и памяти
+- тестирование решений
+
+Вот пример отличного введения в методичное, коммуникативное решение задач на собеседовании. Вы так же найдете это в книгах по интервью для программистов, но это подход мне кажется однм из лучших:
+[Схема разработки алгоритма](http://www.hiredintech.com/algorithm-design/)
+
+[Мой процесс подготовки к собеседованию по программированию (Книга) Упражнения](https://googleyasheck.com/my-process-for-coding-interview-exercises/)
+
+У вас нет доски дома? Не удивительно. Я немного неормальный и у меня есть большая доска дома. Но вместо доски можно использователь и планшет для рисования из магазина художественных товаров, и практиковаться сидя на диване. Это моя "диванная доска". На фото я положил ручку чтобы иметь вы имели представление о масштабе. Если вы будете пользоваться ручкой, постоянно будет возникать желание что-то исправить и решение захламляется достаточно быстро.
+
+![моя диванная доска](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg)
+
+Дополнительно:
+
+- [Математика для Топ-кодеров](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/)
+- [Динамическое программирование - От новичка до продвинутого](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/)
+- [Материалы для интервью от MIT](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php)
+- [Упражнения по улучшению навыков для определенного языка](http://exercism.io/languages)
+
+**Прочитайте и выполните упражнения (именно в этом порядке):**
+
+- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
+ - решения на C, C++ и Java
+- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/)
+ - решения на Java
+
+См. [Список книг ниже](#book-list)
+
+## Упражнения по программированию
+
+Как только вы заполнили свою голову знаниями, самое время применить их на практике.
+Выполняйте упражнения по программированию каждый день, чем больше тем лучше.
+
+- [ ] [Как найти решение](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/)
+- [ ] [Как разбирать задачи из Topcoder](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/)
+
+Сайты с упражнениями:
+- [LeetCode](https://leetcode.com/)
+- [TopCoder](https://www.topcoder.com/)
+- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems)
+- [Codewars](http://www.codewars.com)
+- [HackerRank](https://www.hackerrank.com/)
+- [Codility](https://codility.com/programmers/)
+- [InterviewCake](https://www.interviewcake.com/)
+- [Geeks for Geeks](http://www.geeksforgeeks.org/)
+- [InterviewBit](https://www.interviewbit.com/invite/icjf)
+
+Возможно:
+- [Тестовые интервьюверы из больших компаний](http://www.gainlo.co/)
+
+## Перед собеседованием
+
+- [ ] Cracking The Coding Interview набор 2 (видео):
+ - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo)
+ - [Cracking the Coding Interview - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo)
+ - [Спросите у меня что угодно: Gayle Laakmann McDowell (автор Cracking the Coding Interview)](https://www.youtube.com/watch?v=1fqxMuPmGak)
+
+## Ваше резюме
+
+- [10 советов для подготовки (немного) менее ужасного резюме](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html)
+- Загляните в раздел по подготовке резюме в книге Cracking The Coding Interview и в конце книги Programming Interviews Exposed
+
+## Подумайте об этом когда подходит время собеседования
+
+Подумайте как отвечать приблизительно на 20 распостраненных вопросов которые задают на собеседовании, подготовьте 2-3 ответа на каждый из них.
+Расскажите историю, а не просто сухой пересказ о том над чем вы работали.
+
+- Почему вы хотите получить эту работу?
+- Какая самая большая проблема которую вам приходилось решать?
+- Самые сложные задачи с которыми вам приходилось сталкиваться?
+- Лучшие/худшие дизайн решения с которыми вы сталкивались?
+- Идеи как улучшить какой-нибудь существующий продукт.
+- Вы более продуктивны как часть команды или как иднивидуальный разработчик?
+- Какие из ваших навыков или что из опыта будет наиболее ценным для данной позиции?
+- Что вам больше всего понравилось в работе над [проектом Х/в компании Х]?
+- Какие самые сложные задачи вы решали в [компании X/проекте Х]?
+- С каким самым сложным багом вам приходилось сталкиваться в [компании X/проекте Х]?
+- Чему вы научились в [компании X/проекте Х]?
+- Что бы вы могли сделать лучше работая в [компании X/проекте Х]?
+
+## Приготовьте вопросы для интервьювера
+
+ Вот, некоторые из моих (возможно, я уже знаю ответ, но хочу я услышать мнение интервьювера или точку зрения команды):
+
+- Сколько человек в команде?
+- Как выглядит ваш цикл разработки? Работаете ли вы по agile, спринтам или водопад?
+- Насколько часто бывают переработки и дедлайны? Или сроки достаточно гибкие?
+- Как в вашей команде принимаются решения?
+- Сколько встреч вы проводите в неделю?
+- Располагает ли ваше рабочее окружение к концентрации?
+- Над чем вы работаете?
+- Что вам в этом нравится?
+- Как в целом протекает работа?
+
+## Когда вас приняли на работу
+
+Поздравляю!
+
+- [10 вещей которые я хотел бы знать в мой первый рабочий день в Google](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw)
+
+Не прекращайте учиться.
+
+На самом деле это не конец.
+
+---
+
+ *****************************************************************************************************
+ *****************************************************************************************************
+
+ Все что находится ниже этого места - опционально. Это мои рекоммендации, а не от Google.
+ Изучая все это вы узнаете больше о компьютерных науках, и будуте лучше готовы для любой вакансии программиста.
+ Вы станете более всесторонне-развитым разработчиком.
+ *****************************************************************************************************
+ *****************************************************************************************************
+
+---
+
+## Дополнительная литература
+
+- [ ] [Среда программирования Unix](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=info)
+ - проверенно временем
+- [ ] [Командная строка Linux: введение](https://www.amazon.com/dp/1593273894/)
+ - современный вариант
+- [ ] [Протокол TCP/IP с иллюстрациями(серия книг)](https://en.wikipedia.org/wiki/TCP/IP_Illustrated)
+- [ ] [Погружение в шаблоны проектирования](https://www.amazon.com/gp/product/0596007124/)
+ - введение в шаблоны проектирования
+- [ ] [Шаблоны проектирования: переиспользование компонент в ООП](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
+ - аля книга "Банды четырех", или GOF
+ - каноническая книга про шаблоны проектирования
+- [ ] [Инженерия надежности сайта](https://landing.google.com/sre/book.html)
+ - [Инженерия надежности сайта: Как Google запускает продакшен системы](https://landing.google.com/sre/)
+- [ ] [UNIX and Linux System Administration Handbook, 4th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/)
+
+## Дополнительная литература
+
+- ### Динамическое программирование
+ - Этот вопрос может быть довольно сложным, поскольку каждая разрешимая DP задача должна быть определена как рекурсивное отношение, и придумать его может быть сложно.
+ - Я предлагаю рассмотреть много примеров проблем с DP, пока у вас не будет четкого понимания паттерна.
+ - [ ] Видео:
+ - the Skiena видео может быть не удобно смотреть, так как он иногда использует доску, которая слишком мала
+ - [ ] [Skiena: CSE373 2012 - Лекция 19 - Введение в динамическое программирование (видео)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718)
+ - [ ] [Skiena: CSE373 2012 - Лекция 20 - Изменить расстояние (видео)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749)
+ - [ ] [Skiena: CSE373 2012 - Лекция 21 - Примеры динамического программирования (видео)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406)
+ - [ ] [Skiena: CSE373 2012 - Лекция 22 - Приложения динамического программирования (видео)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22)
+ - [ ] [Simonson: Динамическое программирование 0 (начиная с 59:18) (видео)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558)
+ - [ ] [Simonson: Динамическое программирование I - Лекция 11 (видео)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Simonson: Динамическое программирование II - Лекция 12 (видео)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12)
+ - [ ] Список проблем диннамического программирования:
+ [Динамическое программирование (видео)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+ - [ ] Йельские лекции:
+ - [ ] [Динамическое программирование](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming)
+ - [ ] Coursera:
+ - [ ] [Проблема вторичной структуры РНК (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem)
+ - [ ] [Алгоритм динамического программирования (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm)
+ - [ ] [Иллюстрация алгоритма динамического программирования (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm)
+ - [ ] [Время исполнения алгоритма динамического программирования (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm)
+ - [ ] [DP и рекурсивная имплементация (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation)
+ - [ ] [Глобальное парное выравнивание последовательностей (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
+ - [ ] [Локальное попарное выравнивание последовательностей (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
+
+- ### Компиляторы
+ - [ ] [Как работает компилятор за ~1 минуту (видео)](https://www.youtube.com/watch?v=IhC7sdYe-Jg)
+ - [ ] [Harvard CS50 - Компиляторы (видео)](https://www.youtube.com/watch?v=CSZLNYF4Klo)
+ - [ ] [C++ (видео)](https://www.youtube.com/watch?v=twodd1KFfGk)
+ - [ ] [Понимание оптимизаций компилятора (C++) (видео)](https://www.youtube.com/watch?v=FnGCDLhaxKU)
+
+- ### Числа с плавающей точкой
+ - [ ] 8-bit: [Представление чисел с плавающей точкой - 1 (video - есть ошибка в рассчетах - смотри описание видео)](https://www.youtube.com/watch?v=ji3SfClm8TU)
+ - [ ] 32 bit: [IEEE754 32-bit двоичный файл с плавающей точкой (видео)](https://www.youtube.com/watch?v=50ZYcZebIec)
+
+- ### Unicode
+ - [ ] [Абсолютный минимум, который должен знать каждый разработчик про Unicode]( http://www.joelonsoftware.com/articles/Unicode.html)
+ - [ ] [Что каждый программист абсолютно, положительно должен знать о кодировании и наборах символов для работы с текстом](http://kunststube.net/encoding/)
+
+- ### Порядок байт (Endianness)
+ - [ ] [Big And Little Endian](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html)
+ - [ ] [Big Endian Vs Little Endian (видео)](https://www.youtube.com/watch?v=JrNF0KRAlyo)
+ - [ ] [Big And Little Endian Inside/Out (видео)](https://www.youtube.com/watch?v=oBSuXP-1Tc0)
+ - Очень техническая беседа для разработчиков ядер. Не переживайте, если что-то выше вашего понимания.
+ - Первой половины достаточно.
+
+- ### Emacs и vi(m)
+ - предложено Yegge, из старого поста по найму в Amazon: Familiarize yourself with a unix-based code editor
+ - vi(m):
+ - [Редактирование с vim 01 - Установка, настройка и Режимы (видео на англ.)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr)
+ - [VIM Adventures](http://vim-adventures.com/)
+ - Набор из 4 видео:
+ - [The vi/vim editor - Lesson 1](https://www.youtube.com/watch?v=SI8TeVMX8pk)
+ - [The vi/vim editor - Lesson 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE)
+ - [The vi/vim editor - Lesson 3](https://www.youtube.com/watch?v=ZYEccA_nMaI)
+ - [The vi/vim editor - Lesson 4](https://www.youtube.com/watch?v=1lYD5gwgZIA)
+ - [Использование Vi вместо Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs)
+ - emacs:
+ - [Основы Emacs Руководство (видео на англ.)](https://www.youtube.com/watch?v=hbmV1bnQ-i0)
+ - набор из 3 (видео на англю):
+ - [Emacs Tutorial (Beginners) -Part 1- File commands, cut/copy/paste, cursor commands](https://www.youtube.com/watch?v=ujODL7MD04Q)
+ - [Emacs Tutorial (Beginners) -Part 2- Buffer management, search, M-x grep and rgrep modes](https://www.youtube.com/watch?v=XWpsRupJ4II)
+ - [Emacs Tutorial (Beginners) -Part 3- Expressions, Statements, ~/.emacs file and packages](https://www.youtube.com/watch?v=paSgzPso-yc)
+ - [Режим Зла: Или, Как Я Перестал Беспокоиться И Полюбил Emacs (видео на англ.)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc)
+ - [Написание программ на языке C в Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs)
+ - [(возможно) Погружение в Org режим: Управляя структурой (видео на англ.)](https://www.youtube.com/watch?v=nsGYet02bEk)
+
+- ### Инструменты командной строки Unix
+ - предложено Yegge, из старого поста по найму в Amazon. Я создал список ниже с хорошими утилитами.
+ - [ ] bash
+ - [ ] cat
+ - [ ] grep
+ - [ ] sed
+ - [ ] awk
+ - [ ] curl or wget
+ - [ ] sort
+ - [ ] tr
+ - [ ] uniq
+ - [ ] [strace](https://en.wikipedia.org/wiki/Strace)
+ - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/)
+
+- ### Теория информации
+ - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory)
+ - [ ] Подробнее о Марковских Процессах:
+ - [ ] [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation)
+ - [ ] [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation)
+ - [ ] [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through)
+ - А также смотрите курс-сериал MIT 6.050J Information and Entropy в самом низу.
+
+- ### Чётность и Код Хемминга
+ - [ ] [Вступление](https://www.youtube.com/watch?v=q-3BctoUpHE)
+ - [ ] [Чётность](https://www.youtube.com/watch?v=DdMcAUlxh1M)
+ - [ ] Код Хемминга:
+ - [Обнаружение ошибок](https://www.youtube.com/watch?v=1A_NcXxdoCc)
+ - [Исправление ошибок](https://www.youtube.com/watch?v=JAMLuxdHH8o)
+ - [ ] [Проверка ошибок](https://www.youtube.com/watch?v=wbH2VxzmoZk)
+
+- ### Энтропия
+ - Не забудьте сначала посмотреть видео теории информации
+ - Затем посмотрите следующее видео
+ - [ ] [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176)
+
+- ### Криптография
+ - Не забудьте сначала посмотреть видео теории информации
+ - Затем посмотрите следующее видео
+ - [ ] [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography)
+ - [ ] [Криптография: Хеширование](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30)
+ - [ ] [Криптография: Шифрование](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+- ### Сжатие
+ - Не забудьте сначала посмотреть видео теории информации
+ - [ ] Computerphile (видео на ютубе):
+ - [ ] [Сжатие](https://www.youtube.com/watch?v=Lto-ajuqW3w)
+ - [ ] [Энтропия в сжатии](https://www.youtube.com/watch?v=M5c_RFKVkko)
+ - [ ] [Инвертированный деревья (Кодовые деревья Хаффмана)](https://www.youtube.com/watch?v=umTbivyJoiI)
+ - [ ] [Экстра - Кодовые деревья Хаффмана](https://www.youtube.com/watch?v=DV8efuB3h2g)
+ - [ ] [Элегантное сжатие текста (LZ 77 Метод)](https://www.youtube.com/watch?v=goOa3DGezUA)
+ - [ ] [Сжатие текста и Теория Вероятностей](https://www.youtube.com/watch?v=cCDCfoHTsaU)
+ - [ ] [Compressor Head плейлист](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
+ - [ ] [Разработчики Google вживую: GZIP не достаточно!](https://www.youtube.com/watch?v=whGwm0Lky2s)
+
+- ### Сети и сетевые протоколы
+ - **Если у вас уже есть опыт с сетями или вы хотить стать системным инженером, то ждите вопросов на эти темы**
+ - В противном случае, это все равно полезно знать
+ - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro)
+ - [ ] [UDP and TCP: Сравнение транспортных протоколов](https://www.youtube.com/watch?v=Vdc8TCESIg8)
+ - [ ] [Объяснение TCP/IP and модели OSI](https://www.youtube.com/watch?v=e5DEVa9eSN0)
+ - [ ] [Передача пакетов в интернете. Урок про сети и TCP/IP](https://www.youtube.com/watch?v=nomyRJehhnM)
+ - [ ] [HTTP](https://www.youtube.com/watch?v=WGJrLqtX7As)
+ - [ ] [SSL and HTTPS](https://www.youtube.com/watch?v=S2iBR2ZlZf0)
+ - [ ] [SSL/TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM)
+ - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8)
+ - [ ] [Плейлис на ютубе про сети (21 видео)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j)
+ - [ ] [Подсети без мифов - Часть 5 CIDR](https://www.youtube.com/watch?v=t5xYI0jzOf4)
+
+- ### Компьютерная безопасность
+ - [MIT (23 видео)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Вступление, Моделирование угроз](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Аттаки для перехвата контроля ](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2)
+ - [ ] [Переполнение буфера: использование и защита](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3)
+ - [ ] [Разделение привилегий](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Возможности](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Машинный код в песочнице](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6)
+ - [ ] [Модель веб-безопасности](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Защита веб-приложений](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Символическое выполнение программ](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Безопасность сети](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Сетевые протоколы](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+ - [ ] [Атака по сторонним каналам](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+
+- ### Сборка мусора (Garbage collection)
+ - [ ] [Компиляторы (видео)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff)
+ - [ ] [Сборка мусора в Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI)
+ - [ ] [Глубокое погружение в Java: Сборка мусора - это здорово!](https://www.infoq.com/presentations/garbage-collection-benefits)
+ - [ ] [Глубокое погружение в Python: Сборка мусора в CPython (видео)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3)
+
+- ### Параллельное программирование
+ - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
+ - [ ] [Эффективное использование Python для высокопроизводительных параллельных вычислений (видео)](https://www.youtube.com/watch?v=uY85GkaYzBk)
+
+- ### Сообщения, сериализация и системы очередей
+ - [ ] [Apache Thrift - язык описания интерфейсов](https://thrift.apache.org/)
+ - [Урок по Thrift](http://thrift-tutorial.readthedocs.io/en/latest/intro.html)
+ - [ ] [Protocol Buffers](https://developers.google.com/protocol-buffers/)
+ - [Уроки](https://developers.google.com/protocol-buffers/docs/tutorials)
+ - [ ] [gRPC](http://www.grpc.io/)
+ - [gRPC для Java разработчиков (видео)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1)
+ - [ ] [Redis — сетевое журналируемое хранилище данных](http://redis.io/)
+ - [Урок](http://try.redis.io/)
+ - [ ] [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/)
+ - [ ] [RabbitMQ - платформа для обмены сообщениями](https://www.rabbitmq.com/)
+ - [Урок](https://www.rabbitmq.com/getstarted.html)
+ - [ ] [Celery - распределенная очередь заданий](http://www.celeryproject.org/)
+ - [Первые шаги с Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)
+ - [ ] [ZeroMQ - библиотека для передачи сообщений](http://zeromq.org/)
+ - [Вступление к ZeroMQ](http://zeromq.org/intro:read-the-manual)
+ - [ ] [ActiveMQ](http://activemq.apache.org/)
+ - [ ] [Apache Kafka — распределённый программный брокер сообщений](http://kafka.apache.org/documentation.html#introduction)
+ - [ ] [MessagePack - компьютерный формат обмена данными](http://msgpack.org/index.html)
+ - [ ] [Apache Avro](https://avro.apache.org/)
+
+- ### Быстрое преобразование Фурье
+ - [ ] [Интерактивное руководство по преобразованию Фурье](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
+ - [ ] [Что такое преобразованию Фурье? Для чего оно нужно?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/)
+ - [ ] [Что такое преобразованию Фурье? (видео)](https://www.youtube.com/watch?v=Xxut2PN-V8Q)
+ - [ ] [Разделяй и властвуй: Быстрое преобразование Фурье (видео)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4)
+ - [ ] [Объяснение Быстрого преобразования Фурье](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/)
+
+- ### Фильтр Блума
+ - Если у вас есть Фильтр Блума с m битами и к хеширующими функциями, то вставка и тестирование на членство имеют сложность O(k)
+ - [Фильтры Блума](https://www.youtube.com/watch?v=-SuTGoFYjZs)
+ - [Фильтры Блума | Добыча огромных наборов данных | Стэндфордский Университет](https://www.youtube.com/watch?v=qBTdukbzc78)
+ - [Урок](http://billmill.org/bloomfilter-tutorial/)
+ - [Как написать приложение фильтра Bloom](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/)
+
+- ### HyperLogLog
+ - [Как посчитать миллиард различных объектов, когда у вас есть только 1.5KB памяти](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html)
+
+- ### Хэширование с учетом локальных особенностей
+ - используется для определения сходства документов
+ - противоположность MD5 или SHA, которые используются для определения, являются ли 2 документа / строки одинаковыми.
+ - [Simhashing (надеюсь) стало проще](http://ferd.ca/simhashing-hopefully-made-simple.html)
+
+- ### Деревья ван Эмде Боаса
+ - [ ] [Разделяй и властвуй: Деревья ван Эмде Боаса (видео)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6)
+ - [ ] [Конспект лекций МТИ(Массачусетский технологический институт)](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf)
+
+- ### Расширенные структуры данных
+ - [ ] [CS 61B Лекция 39: Расширение структур данных](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950)
+
+- ### Префиксные деревья
+ - Обратите внимание, что есть разные виды префиксных деревьев. Некоторые имеют префиксы, некоторые нет, а некоторые используют строку вместо битов
+ для отслеживания пути.
+ - Я читаю код, но не буду реализовывать.
+ - [ ] [Sedgewick - Префиксные деревья (3 видео)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
+ - [ ] [1. R путь префиксных деревьев](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
+ - [ ] [2. Троичный поиск в префиксных деревьях](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ)
+ - [ ] [3. Символьные операции](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1)
+ - [ ] [Примечания о структурах данных и методах программирования](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries)
+ - [ ] Короткие видео курса:
+ - [ ] [Введение в префиксные деревья (видео)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries)
+ - [ ] [Производительность префиксных деревьев (видео)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries)
+ - [ ] [Реализация префиксных деревьев (видео)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie)
+ - [ ] [Префиксное дерево: забытая структура данных](https://www.toptal.com/java/the-trie-a-neglected-data-structure)
+ - [ ] [TopCoder - использование префиксных деревьев](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/)
+ - [ ] [Stanford лекция (использование в реальной жизни) (видео)](https://www.youtube.com/watch?v=TJ8SkcUSdbU)
+ - [ ] [MIT, сложные структуры данных, строки (может быть неясным до половине)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+
+- ### Сбалансированные деревья поиска
+ - Знать как минимум один тип сбалансированного дерева поиска (и как его осуществить):
+ - "Среди сбалансированных деревьев поиска AVL и 2/3 деревья теперь в прошлом, а красно-черные деревья все больше набирают популярность. Довольно интересный саморегулирующийся тип это расширяющееся дерево, который использует вращения для перемещения любого ключа к вершине" - Стивен Сол Лекена
+ - Из всех них я предпочел написать расширяющееся дерево. Из того, что я читал, писать реализации сбалансированного дерева поиска во время интервью не понадобится. Но я хотел преодолеть еще одну задачу в програмировании, и будем честны, расширяющиеся деревья превосходны. Еще я прочитал довольно много про красно-черные деревья.
+ - расширяющееся дерево: вставка, поиска, и удаление
+ Если вы решите реализовать красно-черное дерево напишите:
+ - функции поиска и вставки, пропустите удаление
+ - Я хочу изучить побольше про B-деревья, т.к. они применимы при работе с очень большими данными
+ - [ ] [Сбалансированный поиск дерева](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)
+
+ - [ ] **AVL trees**
+ - In practice:
+ From what I can tell, these aren't used much in practice, but I could see where they would be:
+ The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly
+ balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it
+ attractive for data structures that may be built once and loaded without reconstruction, such as language
+ dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter).
+ - [ ] [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6)
+ - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees)
+ - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation)
+ - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge)
+
+ - [ ] **Splay trees**
+ - In practice:
+ Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors,
+ data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory,
+ networking and file system code) etc.
+ - [ ] [CS 61B: Splay Trees (video)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
+ - [ ] MIT Lecture: Splay Trees:
+ - Gets very mathy, but watch the last 10 minutes for sure.
+ - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo)
+
+ - [ ] **Red/black trees**
+ - these are a translation of a 2-3 tree (see below)
+ - In practice:
+ Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time.
+ Not only does this make them valuable in time-sensitive applications such as real-time applications,
+ but it makes them valuable building blocks in other data structures which provide worst-case guarantees;
+ for example, many data structures used in computational geometry can be based on red–black trees, and
+ the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java,
+ the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor
+ hashcodes, a Red-Black tree is used.
+ - [ ] [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871)
+ - [ ] [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5)
+ - [ ] [Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree)
+ - [ ] [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red-black-trees/)
+
+ - [ ] **2-3 search trees**
+ - In practice:
+ 2-3 trees have faster inserts at the expense of slower searches (since height is more compared to AVL trees).
+ - You would use 2-3 tree very rarely because its implementation involves different types of nodes. Instead, people use Red Black trees.
+ - [ ] [23-Tree Intuition and Definition (video)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2)
+ - [ ] [Binary View of 23-Tree](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [2-3 Trees (student recitation) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+ - [ ] **2-3-4 Trees (aka 2-4 trees)**
+ - На практике:
+ На каждое 2-4 дерево, существуют соответствующие красно-чёрные деревья с элементами данных в таком же порядке. Операции вставки и удаления на 2-4 деревьях эквивалентны изменению цвета и ротациям в красно-чёрных деревьях.
+ Таким образом, 2-4 деревья являются важным инструментом в понимании логики красно-чёрных деревьев, именно поэтому много вводных учебников по алгоритмам начинают с 2-4 деревьев прямо перед красно-черными, несмотря на то, что **2-4 деревья редко используются на практике**.
+ - [ ] [CS 61B Лекция 26: Сбалансированные деревья поиска (видео)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C)
+ - [ ] [234-Деревья Снизу Вверх (видео)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [234-Деревья Сверху Вниз (видео)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5)
+
+ - [ ] **N-ичные (K-ичные, M-ичные) деревья**
+ - заметка: N или K это фактор ветвления (максимальное количество веток у каждого корня)
+ - бинарные деревья являются 2-ичными деревьями, где фактор ветвления = 2
+ - 2-3 деревья 3-ичные
+ - [ ] [K-ичные деревья (en)](https://en.wikipedia.org/wiki/K-ary_tree)
+
+ - [ ] **B-Деревья**
+ - забавно, но факт: это загадка, ведь B здесь может значить Boeing, сБалансированный, или Байер (фамилия ко-создателя)
+ - На практике:
+ B-Деревья очень широко используются в базах данных. Большинство современных файловых систем используют B-деревья (или вариации, B+ и B* деревья).
+ В дополнение к использованию в базах данных, B-дерево также применяют в файловых системах для быстрого рандомного доступа к произвольному блоку в конкретном файле. Основная проблема это превратить адрес i файлового блока в адрес дискового блока или, например, в CHS (цилиндр-голова-сектор).
+ - [ ] [B-Деревья (en)](https://en.wikipedia.org/wiki/B-tree)
+ - [ ] [Введение в B-Деревья (видео)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6)
+ - [ ] [B-Деревья Определение и Вставка (видео)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [B-Деревья Удаление (видео)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6)
+ - [ ] [MIT 6.851 - Модели Иерархии Памяти (видео)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf)
+ - включает кэш-агностические B-Деревья, крайне интересные структуры данных
+ - первые 37 минут очень технические, можно пропустить (B это размер блока, размер кэша)
+
+- ### k-D Деревья
+ - прекрасны для нахождения всех точек в прямоугольнике или более многомерном объекте
+ - хорошо подходят для k-ближайших соседей
+ - [ ] [Kd Деревья (видео)](https://www.youtube.com/watch?v=W94M9D_yXKk)
+ - [ ] [kNN Алгоритм K-d дерева (видео)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg)
+
+- ### Список с пропусками
+ - "А это что-то из разряда культа в мире структур данных" - Стивен Скиена
+ - [ ] [Рандомизация: Список с пропусками (видео)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [Для анимаций и чуть побольше деталей](https://en.wikipedia.org/wiki/Skip_list)
+
+- ### Транспортные сети
+ - [ ] [Алгоритм Форд — Фалкерсона за 5 минут (видео)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
+ - [ ] [Алгоритм Форд — Фалкерсона (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0)
+ - [ ] [Транспортные сети (видео)](https://www.youtube.com/watch?v=2vhN4Ice5jI)
+
+- ### Непересекающиеся Множества и Система Непересекающихся Множеств
+ - [ ] [UCB 61B - Непересекающиеся Множества; Сортировка и выборка (видео)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21)
+ - [ ] [Алгоритмы Седжвика - Система непересекающихся множеств (6 видео)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t)
+
+- ### Математика для Быстрой Обработки
+ - [ ] [Арифметика целых чисел, Умножение Карацубы (видео)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [Китайская теорема об остатках (используется в криптографии) (видео)](https://www.youtube.com/watch?v=ru7mWZJlRQg)
+
+- ### Декартово дерево
+ - Комбинация бинарного поискового дерева и структуры данных "куча"
+ - [ ] [Декартово дерево](https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B2%D0%BE_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE)
+ - [ ] [Структуры данных: Декартово Дерево на пальцах (видео)](https://www.youtube.com/watch?v=6podLUYinH8)
+ - [ ] [Применения в множествах](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf)
+
+- ### Linear Programming (videos)
+ - [ ] [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ)
+ - [ ] [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U)
+ - [ ] [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik)
+ - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk)
+
+- ### Геометрия, Выпуклая оболочка (видео)
+ - [ ] [Graph Alg. IV: Введение в геометрические алгоритмы - Лекция 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164)
+ - [ ] [Геометрические алгоритмы: Грэм и Джарвис - Лекция 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm)
+ - [ ] [Разделяй и властвуй: Выпуклая оболочка, Медианный поиск](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2)
+
+- ### Discrete math
+ - see videos below
+
+- ### Machine Learning
+ - [ ] Why ML?
+ - [ ] [How Google Is Remaking Itself As A Machine Learning First Company](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70)
+ - [ ] [Large-Scale Deep Learning for Intelligent Computer Systems (video)](https://www.youtube.com/watch?v=QSaZGT4-6EY)
+ - [ ] [Deep Learning and Understandability versus Software Engineering and Verification by Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw)
+ - [ ] [Google's Cloud Machine learning tools (video)](https://www.youtube.com/watch?v=Ja2hxBAwG_0)
+ - [ ] [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (video)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal)
+ - [ ] [Tensorflow (video)](https://www.youtube.com/watch?v=oZikw5k_2FM)
+ - [ ] [Tensorflow Tutorials](https://www.tensorflow.org/versions/r0.11/tutorials/index.html)
+ - [ ] [Practical Guide to implementing Neural Networks in Python (using Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)
+ - Courses:
+ - [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning)
+ - [videos only](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW)
+ - see videos 12-18 for a review of linear algebra (14 and 15 are duplicates)
+ - [Neural Networks for Machine Learning](https://www.coursera.org/learn/neural-networks)
+ - [Google's Deep Learning Nanodegree](https://www.udacity.com/course/deep-learning--ud730)
+ - [Google/Kaggle Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009)
+ - [Self-Driving Car Engineer Nanodegree](https://www.udacity.com/drive)
+ - [Metis Online Course ($99 for 2 months)](http://www.thisismetis.com/explore-data-science)
+ - Resources:
+ - Books:
+ - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/)
+ - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X)
+ - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/)
+ - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers)
+ - Data School: http://www.dataschool.io/
+
+- ### Go
+ - [ ] Videos:
+ - [ ] [Why Learn Go?](https://www.youtube.com/watch?v=FTl0tl9BGdc)
+ - [ ] [Go Programming](https://www.youtube.com/watch?v=CF9S4QZuV30)
+ - [ ] [A Tour of Go](https://www.youtube.com/watch?v=ytEkHepK08c)
+ - [ ] Books:
+ - [ ] [An Introduction to Programming in Go (read free online)](https://www.golang-book.com/books/intro)
+ - [ ] [The Go Programming Language (Donovan & Kernighan)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440)
+ - [ ] [Bootcamp](https://www.golang-book.com/guides/bootcamp)
+
+--
+
+## Additional Detail on Some Subjects
+
+ I added these to reinforce some ideas already presented above, but didn't want to include them
+ above because it's just too much. It's easy to overdo it on a subject.
+ You want to get hired in this century, right?
+
+- [ ] **Union-Find**
+ - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview)
+ - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations)
+ - [ ] [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees)
+ - [ ] [Union By Rank](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank)
+ - [ ] [Path Compression](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression)
+ - [ ] [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional)
+
+- [ ] **More Dynamic Programming** (videos)
+ - [ ] [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19)
+ - [ ] [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20)
+ - [ ] [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21)
+ - [ ] [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
+ - [ ] [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+ - [ ] [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15)
+ - [ ] [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12)
+
+- [ ] **Advanced Graph Processing** (videos)
+ - [ ] [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27)
+ - [ ] [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28)
+
+- [ ] MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos):
+ - [ ] [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - Random Variables](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21)
+ - [ ] [MIT 6.042J - Expectation I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - Large Deviations](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B)
+ - [ ] [MIT 6.042J - Random Walks](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25)
+
+- [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19)
+
+- [ ] **String Matching**
+ - [ ] Rabin-Karp (videos):
+ - [Rabin Karps Algorithm](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm)
+ - [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation)
+ - [Optimization: Implementation and Analysis](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis)
+ - [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9)
+ - [Rolling Hashes, Amortized Analysis](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32)
+ - [ ] Knuth-Morris-Pratt (KMP):
+ - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo)
+ - [ ] Boyer–Moore string search algorithm
+ - [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm)
+ - [Advanced String Searching Boyer-Moore-Horspool Algorithms (video)](https://www.youtube.com/watch?v=QDZpzctPf10)
+ - [ ] [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1)
+ - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be
+ - nice explanation of tries
+ - can be skipped
+
+- [ ] **Sorting**
+
+ - [ ] Stanford lectures on sorting:
+ - [ ] [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69)
+ - [ ] [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69)
+ - [ ] Shai Simonson, [Aduni.org](http://www.aduni.org/):
+ - [ ] [Algorithms - Sorting - Lecture 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2)
+ - [ ] [Algorithms - Sorting II - Lecture 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3)
+ - [ ] Steven Skiena lectures on sorting:
+ - [ ] [lecture begins at 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600)
+ - [ ] [lecture begins at 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [lecture begins at 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b)
+ - [ ] [lecture begins at 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
+
+## Video Series
+
+Sit back and enjoy. "Netflix and skill" :P
+
+- [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr)
+
+- [ ] [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0)
+
+- [ ] [MIT 18.06 Linear Algebra, Spring 2005 (35 videos)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8)
+
+- [ ] [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A)
+
+- [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy)
+
+- [ ] [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG)
+
+- [ ] [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo)
+
+- [ ] CSE373 - Analysis of Algorithms (25 videos)
+ - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1)
+
+- [ ] [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd)
+
+- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C)
+
+- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_)
+
+- [ ] [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
+
+- [ ] [UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr)
+
+- [ ] [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-)
+
+- [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq)
+
+- [ ] [MIT 6.006: Intro to Algorithms (47 videos)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False)
+
+- [ ] [MIT 6.033: Computer System Engineering (22 videos)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484)
+
+- [ ] [MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi)
+
+- [ ] [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B)
+
+- [ ] [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp)
+
+- [ ] [MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7)
+
+- [ ] [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1)
+
+- [ ] [MIT 6.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c)
+
+- [ ] [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf)
+
+- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh)
+
+- [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02)
+
+- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy)
+ - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/)
+
+- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV)
+
+- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
+
+## Computer Science Courses
+
+- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science)
+- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses)
diff --git a/translations/README-th.md b/translations/README-th.md
index e33cbc6010..39358c3486 100644
--- a/translations/README-th.md
+++ b/translations/README-th.md
@@ -186,7 +186,7 @@
`git commit -m "Marked x" `
-`git rebase jwasham/master `
+`git rebase jwasham/main `
`git push --force `
@@ -392,8 +392,8 @@ Here are some mistakes I made so you'll have a better experience.
คุณสามารถทำได้แบบฟรีๆ:
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
-- [คลัง flash card ของผม (เก่า - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [คลัง flash cards ของผม (ใหม่- 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [คลัง flash card ของผม (เก่า - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [คลัง flash cards ของผม (ใหม่- 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
คลังการ์ดของผมนั้น เนื้อหาจะครอบคลุมเกินเนื้อหาหลัก ตั้งแต่ภาษา assembly และ Python จนไปถึง machine learning และ สถิติ ซึ่งมันก็เกินกว่าที่เราต้องการ
@@ -628,7 +628,7 @@ There are a lot of distractions that can take up valuable time. Focus and concen
- binary search using recursion
- ### Bitwise operations
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
@@ -657,7 +657,6 @@ There are a lot of distractions that can take up valuable time. Focus and concen
## Trees
- ### Trees - Notes & Background
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- basic tree construction
- traversal
@@ -1248,7 +1247,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- For even more, see "Mining Massive Datasets" video series in the Video Series section.
- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- flow:
1. Understand the problem and scope:
- define the use cases, with interviewer's help
diff --git a/translations/README-tw.md b/translations/README-tw.md
index eca3b64bc3..7a96a45600 100644
--- a/translations/README-tw.md
+++ b/translations/README-tw.md
@@ -207,7 +207,7 @@
`git commit -m "Marked x"`
-`git rebase jwasham/master`
+`git rebase jwasham/main`
`git push --force`
@@ -365,8 +365,8 @@
製作屬於自己的免費小字卡:
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
-- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
我的小字卡資料庫中包含了組合語言、Python的小知識、機器學習以及統計。這些內容已經超出了原本他的預設。
@@ -431,7 +431,7 @@
## 先備知識
-- [ ] **學習C++**
+- [ ] **學習C**
- C語言無所不在。在你學習的過程中,幾乎任何一本書、課程,或者影片中你都能看到他的身影。
- [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
- 這本書還滿輕薄的,但他能讓你有初步對於C語言的認識。看著這本書並且練習,你能更快地掌握C語言。理解C語言能讓你更了解程式的運作以及內部記憶體配置。
@@ -597,7 +597,7 @@
- 用遞迴(recursion)的方法實作二分搜尋法
- ### 位元運算(Bitwise operations)
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - 你應該能背出一些2的指數(從2^1到2^16以及2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-cheet.pdf) - 你應該能背出一些2的指數(從2^1到2^16以及2^32)
- [ ] 實際了解如何用下列的位元運算子來操作每個位元: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
@@ -624,7 +624,6 @@
## 樹狀結構(Tree)
- ### Trees-重點與背景知識
- - [ ] [Series: Core Trees (影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- 如何建立一棵樹
- 遍歷
@@ -1160,7 +1159,7 @@
- [ ] 練習系統設計的過程:以下是在紙上練習的一些方法,每個都有他們如何運用在現實中的說明文件:
- 複習: [系統設計入門](https://github.com/donnemartin/system-design-primer)
- [HiredInTech系統設計](http://www.hiredintech.com/system-design/)
- - [提示](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [提示](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- 流程:
1. 了解問題與其範圍:
- 在面試官的幫助下定義使用情況
diff --git a/translations/README-uk.md b/translations/README-uk.md
index f6e8c22a84..d7f452ca1c 100644
--- a/translations/README-uk.md
+++ b/translations/README-uk.md
@@ -181,7 +181,7 @@ Original: [англійською](README.md)
`git commit -m "Marked x" `
-`git rebase jwasham/master `
+`git rebase jwasham/main `
`git push --force `
@@ -390,8 +390,8 @@ I made a mobile-first website so I could review on my phone and tablet, wherever
Make your own for free:
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
-- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):
-- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db):
+- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
+- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db):
Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required.
@@ -626,7 +626,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
- binary search using recursion
- ### Bitwise operations
- - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
- [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, <<
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
- [ ] Good intro:
@@ -655,7 +655,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
## Trees
- ### Trees - Notes & Background
- - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- basic tree construction
- traversal
@@ -1249,7 +1248,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
- For even more, see "Mining Massive Datasets" video series in the Video Series section.
- [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world:
- review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/)
- - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf)
+ - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf)
- flow:
1. Understand the problem and scope:
- define the use cases, with interviewer's help
diff --git a/translations/README-vi.md b/translations/README-vi.md
index 8ad65bce86..c9836db7eb 100644
--- a/translations/README-vi.md
+++ b/translations/README-vi.md
@@ -207,7 +207,7 @@ Ok, bây giờ bạn có thể bắt đầu:
- Check các phần đã hoàn thành bằng cách thêm `x` vào giữa cặp ngoặc vuông (`[ ]`), như thế này: `[x]`.
- Chạy `git add .` để bắt đầu lưu lại các thay đổi.
- Chạy `git commit -m "commit message" `. Thay `commit message` với ghi chú của bạn cho sự thay đổi đó.
-- Đồng bộ thay đổi với bản fork trên Github của bạn bằng `git push origin master`.
+- Đồng bộ thay đổi với bản fork trên Github của bạn bằng `git push origin main`.
## Đừng nghĩ rằng bạn không đủ thông minh
@@ -429,7 +429,7 @@ Tôi đã làm một trang mobile-first (lấy mobile là trọng tâm phát tri
Tự tạo cho mình hoàn toàn miễn phí:
- [Repo của trang thẻ ghi nhớ](https://github.com/jwasham/computer-science-flash-cards)
-- [Cơ sở dữ liệu thẻ ghi nhớ của tôi](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Lưu ý là tôi có đi hơi xa và các thẻ ghi nhớ có thể bao gồm cả hợp ngữ (ngôn ngữ máy) và Python cho đến cả máy học (machine learning) và thống kê. Như thế là quá nhiều cho các yêu cầu từ Google.
+- [Cơ sở dữ liệu thẻ ghi nhớ của tôi](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db): Lưu ý là tôi có đi hơi xa và các thẻ ghi nhớ có thể bao gồm cả hợp ngữ (ngôn ngữ máy) và Python cho đến cả máy học (machine learning) và thống kê. Như thế là quá nhiều cho các yêu cầu từ Google.
**Ghi chú dành cho các thẻ ghi nhớ:** Lần đầu tiên bạn nhận ra bạn biết câu trả lời, đừng đánh dấu là đã biết.Bạn phải xem thẻ tương tự và đưa ra câu trả lời chính xác vài lần trước khi bạn thực sự khẳng định đã nắm được vấn đề. Lặp đi lặp lại việc này sẽ giúp kiến thức được khắc sâu vào não bạn.
@@ -692,7 +692,6 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy
## Cây
- ### Cây - Ghi chú và kiến thức nền
- - [ ] [Chuỗi bài giảng: Căn bản về cây](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees)
- [ ] [Chuỗi bài giảng: Cây](https://www.coursera.org/learn/data-structures/lecture/95qda/trees)
- Xây dựng cây cơ bản.
- Duyệt cây.