plan.txt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. ##########################################################################################
  2. ## Knowledge:
  3. ##########################################################################################
  4. I put a * at the beginning of a line when I'm done with it. When all sub-items are done, I put a * the top level,
  5. meaning the entire block is done.
  6. * - how computers process a program:
  7. * - https://www.youtube.com/watch?v=42KTvGYQYnA
  8. * - https://www.youtube.com/watch?v=Mv2XQgpbTNE
  9. * - Computer Arch Intro:
  10. (first video only - interesting but not required) https://www.youtube.com/watch?v=zLP_X4wyHbY&list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq&index=1
  11. * - Parity & Hamming Code:
  12. Parity:
  13. https://www.youtube.com/watch?v=DdMcAUlxh1M
  14. Hamming Code:
  15. https://www.youtube.com/watch?v=1A_NcXxdoCc
  16. https://www.youtube.com/watch?v=JAMLuxdHH8o
  17. Error Checking:
  18. https://www.youtube.com/watch?v=wbH2VxzmoZk
  19. * - C
  20. * - K&R C book (ANSI C)
  21. - C++
  22. * - basics
  23. * - pointers
  24. * - functions
  25. * - references
  26. * - templates
  27. * - compilation
  28. * - scope & linkage
  29. * - namespaces
  30. * - OOP
  31. * - STL
  32. * - functors: http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html
  33. * - C++ at Google: https://www.youtube.com/watch?v=NOCElcMcFik
  34. * - Google C++ Style Guide: https://google.github.io/styleguide/cppguide.html
  35. - Google uses clang-format (Google setting)
  36. - C++ Core Guidelines: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
  37. * - Efficiency with Algorithms, Performance with Data Structures: https://youtu.be/fHNmRkzxHWs
  38. - review: https://www.youtube.com/watch?v=Rub-JsjMhWY
  39. * - compilers:
  40. * - https://class.coursera.org/compilers-004/lecture/1
  41. * - https://class.coursera.org/compilers-004/lecture/2
  42. * - C++: https://www.youtube.com/watch?v=twodd1KFfGk
  43. * - Understanding Compiler Optimization (C++): https://www.youtube.com/watch?v=FnGCDLhaxKU
  44. ----------------------------------------------------------------
  45. The Gauntlet:
  46. Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
  47. C
  48. C++ - without using built-in types
  49. C++ - using built-in types, like STL's std::list for a linked list
  50. Python - without using built-in types
  51. and write tests to ensure I'm doing it right
  52. Each subject does not require a whole day to be able to understand it fully.
  53. Why code in all of these?
  54. 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)
  55. Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
  56. 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)
  57. ----------------------------------------------------------------
  58. arrays
  59. - No need to spend a day on this.
  60. - Implement:
  61. - raw data array with allocated memory
  62. - at(index) - returns item at given index
  63. - append(item)
  64. - insert(index, item)
  65. - prepend(item) - can use insert above at index 0
  66. - delete(index)
  67. - remove(item)
  68. - find(item)
  69. - Nothing to implement, but practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
  70. - https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays
  71. - https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays
  72. - Time
  73. - O(1) to add/remove at end (amortized for allocations for more space), index, or update
  74. - O(n) to insert/remove elsewhere
  75. - Space
  76. - contiguous in memory, so proximity helps performance
  77. - space needed = size of object * number of items to store
  78. linked lists
  79. - singly-linked
  80. * - Description: https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists
  81. * - Lynda.com:
  82. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Introduction-lists/149042/177115-4.html
  83. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-basic-list-implementations/149042/177116-4.html
  84. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-singly-doubly-linked-lists/149042/177117-4.html
  85. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/List-support-across-languages/149042/177118-4.html
  86. * - C Code: https://www.youtube.com/watch?v=QN6FPiD0Gzo
  87. - not the whole video, just portions about Node struct and memory allocation.
  88. * - why you should avoid linked lists:
  89. - https://www.youtube.com/watch?v=YQs6IC-vgmo
  90. - implement (with tail pointer), item is the data item in a node:
  91. - push_front
  92. - get_front
  93. - pop_front
  94. - push_back
  95. - get_back
  96. - pop_back
  97. - insert_before(node, item)
  98. - insert_after(node, item)
  99. - size()
  100. - is_empty()
  101. - find(item) - assume each item is unique
  102. - remove(item) - assume each item is unique
  103. - doubly-linked list
  104. - Description: https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists
  105. - reverse a singly-linked list
  106. stacks
  107. - see: https://class.coursera.org/algs4partI-010/lecture
  108. - https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks
  109. queues
  110. - see: https://class.coursera.org/algs4partI-010/lecture
  111. - https://www.coursera.org/learn/data-structures/lecture/EShpq/queues
  112. Vectors
  113. - Vector calculus ?
  114. heaps
  115. - https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees
  116. - min heap
  117. - max heap
  118. Priority Queue
  119. - https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction
  120. - see: https://class.coursera.org/algs4partI-010/lecture
  121. - https://class.coursera.org/algs4partI-010/lecture/39
  122. - https://en.wikipedia.org/wiki/Priority_queue
  123. Disjoint Sets:
  124. - https://www.coursera.org/learn/data-structures/lecture/JssSY/overview
  125. - https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees
  126. hashtables
  127. - https://www.youtube.com/watch?v=C4Kc8xzcA68
  128. - https://class.coursera.org/algs4partI-010/lecture/52
  129. - https://www.coursera.org/learn/data-structures/home/week/3
  130. - see: https://class.coursera.org/algs4partI-010/lecture
  131. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables
  132. - test: implement with only arrays
  133. tries
  134. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries
  135. Circular buffer/FIFO:
  136. - https://en.wikipedia.org/wiki/Circular_buffer
  137. Bit operations
  138. - count on bits
  139. - https://youtu.be/Hzuzo9NJrlc
  140. - max run of off bits
  141. - bit shifting
  142. binary search
  143. Sorting
  144. - no bubble sort - it's terrible
  145. - at least one n*log(n) sorting algorithm, preferably two (say, quicksort and merge sort)
  146. - Which algorithms can be used on lists? Which on arrays? Which on both? Is Quicksort stable?
  147. - algos:
  148. - mergesort
  149. - quicksort
  150. Caches
  151. - LRU cache
  152. Trees
  153. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees
  154. - see: https://class.coursera.org/algs4partI-010/lecture
  155. - basic tree construction
  156. - traversal
  157. - manipulation algorithms
  158. - binary search trees BSTs
  159. - https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction
  160. - applications:
  161. - https://class.coursera.org/algs4partI-010/lecture/57
  162. - n-ary trees
  163. - trie-trees
  164. - at least one type of balanced binary tree (and know how it's implemented):
  165. - red/black tree
  166. - https://class.coursera.org/algs4partI-010/lecture/50
  167. - splay trees
  168. - https://www.coursera.org/learn/data-structures/lecture/O9nZ6/splay-trees
  169. - AVL trees
  170. - https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees
  171. - https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation
  172. - https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge
  173. - 2-3 Search Trees
  174. - https://class.coursera.org/algs4partI-010/lecture/49
  175. - B-Trees:
  176. - https://class.coursera.org/algs4partI-010/lecture/51
  177. - BFS (breadth-first search)
  178. - DFS (depth-first search)
  179. - know the difference between
  180. - inorder
  181. - postorder
  182. - preorder
  183. Graphs:
  184. There are three basic ways to represent a graph in memory:
  185. - objects and pointers
  186. - matrix
  187. - adjacency list
  188. - familiarize yourself with each representation and its pros & cons
  189. - now their computational complexity, their tradeoffs, and how to implement them in real code
  190. - If you get a chance, try to study up on fancier algorithms:
  191. - Dijkstra
  192. - A*
  193. Other data structures:
  194. - You should study up on as many other data structures and algorithms as possible
  195. - You should especially 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.
  196. - Find out what NP-complete means.
  197. Recursion
  198. - when it is appropriate to use it
  199. Algorithmic complexity
  200. open-ended problems
  201. - manipulate strings
  202. - manipulate patterns
  203. design patterns:
  204. - strategy
  205. - singleton
  206. - adapter
  207. - prototype
  208. - decorator
  209. - visitor
  210. - factory
  211. Combinatorics (n choose k)
  212. Probability
  213. Dynamic Programming
  214. Processes, Threads, Concurrency issues
  215. - difference: https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread
  216. - threads: https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M
  217. - stopped here: https://www.youtube.com/watch?v=_N0B5ua7oN8&list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M&index=4
  218. - locks
  219. - mutexes
  220. - semaphores
  221. - monitors
  222. - how they work
  223. - deadlock
  224. - livelock
  225. Process resource needs
  226. Thread resource needs
  227. Modern concurrency constructs with multicore processors
  228. Context switching
  229. - How context switching is initiated by the operating system and underlying hardware
  230. Scheduling
  231. Weighted random sampling
  232. Implement system routines
  233. Distill large data sets to single values
  234. Transform one data set to another
  235. Handling obscenely large amounts of data
  236. System design:
  237. - features sets
  238. - interfaces
  239. - class hierarchies
  240. - designing a system under certain constraints
  241. - simplicity and robustness
  242. - tradeoffs
  243. Performance analysis and optimization
  244. Testing
  245. Information theory:
  246. - Markov processes:
  247. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation
  248. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation
  249. - https://www.khanacademy.org/computing/computer-science/informationtheory/moderninfotheory/v/symbol-rate-information-theory
  250. - includes Markov chain
  251. Bloom Filter
  252. - https://www.youtube.com/watch?v=-SuTGoFYjZs
  253. - http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/
  254. Fast Fourier Transform
  255. - http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/
  256. C (for basis of C)
  257. C++ (for interview answers)
  258. Machine Learning:
  259. - http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/
  260. - review videos
  261. - intro in Goodreader on iPad
  262. - http://www.dataschool.io/
  263. ---
  264. When you have time:
  265. C++ Talks at CPPCon:
  266. - https://www.youtube.com/watch?v=hEx5DNLWGgA&index=2&list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh
  267. Compilers:
  268. - https://class.coursera.org/compilers-004/lecture
  269. Computer and processor architecture:
  270. - https://class.coursera.org/comparch-003/lecture
  271. Long series of C++ videos:
  272. - https://www.youtube.com/playlist?list=PLfVsf4Bjg79Cu5MYkyJ-u4SyQmMhFeC1C
  273. ---
  274. Biggest challenges faced
  275. Best/worst designs seen
  276. Ideas for improving existing products
  277. - my search idea (optimal result exhaustion and refresh)
  278. ##########################################################################################
  279. ## Videos:
  280. ##########################################################################################
  281. 6.042: Math for CS (25 videos):
  282. - https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B
  283. 6.006: Intro to Algorithms (47 videos):
  284. - https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False
  285. 6.033: Computer System Engineering (22 videos):
  286. - https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484
  287. 6.046: Design and Analysis of Algorithms (34 videos):
  288. - https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp
  289. 6.851: Advanced Data Structures (22 videos):
  290. - https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf
  291. Stanford: Programming Paradigms (17 videos)
  292. - https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False
  293. ##########################################################################################
  294. ## Articles:
  295. ##########################################################################################
  296. - https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/
  297. - http://highscalability.com/blog/2016/4/4/how-to-remove-duplicates-in-a-large-dataset-reducing-memory.html
  298. - http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html
  299. - http://highscalability.com/blog/2016/3/21/to-compress-or-not-to-compress-that-was-ubers-question.html
  300. - http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html
  301. - http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html
  302. - http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html
  303. - http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html
  304. - http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html
  305. - http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html
  306. - http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html
  307. - http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html
  308. - http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html
  309. - http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html
  310. - http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html
  311. - http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html
  312. ##########################################################################################
  313. ## Papers:
  314. ##########################################################################################
  315. Computing Weak Consistency in Polynomial Time
  316. - http://delivery.acm.org/10.1145/2770000/2767407/p395-golab.pdf?ip=104.200.154.80&id=2767407&acc=OA&key=4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E5945DC2EABF3343C&CFID=769944592&CFTOKEN=71654301&__acm__=1460506755_42d28e3f230cc8e733e2e9ed1ebe3605
  317. How Developers Search for Code: A Case Study
  318. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf
  319. Borg, Omega, and Kubernetes
  320. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf
  321. Continuous Pipelines at Google
  322. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf
  323. AddressSanitizer: A Fast Address Sanity Checker
  324. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
  325. ##########################################################################################
  326. ## Interview Prep:
  327. ##########################################################################################
  328. Videos:
  329. - https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be
  330. - https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be
  331. Articles:
  332. - http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html
  333. - http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
  334. - http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions
  335. - http://www.google.com/about/careers/lifeatgoogle/hiringprocess/
  336. Additional:
  337. - https://courses.csail.mit.edu/iap/interview/materials.php
  338. - http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/
  339. - https://www.youtube.com/watch?v=rEJzOhC5ZtQ&feature=youtu.be
  340. - https://www.youtube.com/watch?v=aClxtDcdpsQ&feature=youtu.be
  341. - https://www.youtube.com/watch?v=2cf9xo1S134&feature=youtu.be
  342. ##########################################################################################
  343. ## Books:
  344. ##########################################################################################
  345. %%%%% Mentioned in Coaching %%%%%%%%%%%%%%%
  346. The Algorithm Design Manual
  347. http://sist.sysu.edu.cn/~isslxm/DSA/textbook/Skiena.-.TheAlgorithmDesignManual.pdf
  348. Algorithms and Programming: Problems and Solutions:
  349. http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474
  350. Read first:
  351. Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition:
  352. http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html
  353. Read second:
  354. Cracking the Coding Interview, Fourth Edition:
  355. http://www.amazon.com/Cracking-Coding-Interview-Fourth-Edition/dp/145157827X
  356. %%%%% Additional %%%%%%%%%%%%%%%
  357. Programming Pearls:
  358. - http://www.wou.edu/~jcm/Spring-P-2015/Programming%20Pearls%20(2nd%20Ed)%20Bentley.pdf
  359. The Google Resume:
  360. - https://www.uop.edu.jo/download/research/members/495_1887_llll.pdf
  361. * - C Programming Language, Vol 2
  362. * - C++ Primer Plus
  363. Clean Code
  364. Code Complete
  365. Introduction to Algorithms
  366. ##########################################################################################
  367. ## Coding exercises/challenges:
  368. ##########################################################################################
  369. Recommended: LeetCode: https://leetcode.com/
  370. HackerRank: https://www.hackerrank.com/
  371. Codility: https://codility.com/programmers/
  372. Proect Euler: https://projecteuler.net/index.php?section=problems
  373. InterviewCake: https://www.interviewcake.com/
  374. InterviewBit: https://www.interviewbit.com/invite/icjf
  375. ##########################################################################################
  376. ## Code:
  377. ##########################################################################################
  378. https://github.com/lekkas/c-algorithms
  379. ##########################################################################################
  380. ## Done. ##
  381. ##########################################################################################