plan.txt 16 KB

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