plan.txt 17 KB

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