plan.txt 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  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. - visitor
  157. - factory
  158. Combinatorics (n choose k)
  159. Probability
  160. Dynamic Programming
  161. Processes, Threads, Concurrency issues
  162. - difference: https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread
  163. - threads: https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M
  164. - stopped here: https://www.youtube.com/watch?v=_N0B5ua7oN8&list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M&index=4
  165. - locks
  166. - mutexes
  167. - semaphores
  168. - monitors
  169. - how they work
  170. - deadlock
  171. - livelock
  172. Process resource needs
  173. Thread resource needs
  174. Modern concurrency constructs with multicore processors
  175. Context switching
  176. - How context switching is initiated by the operating system and underlying hardware
  177. Scheduling
  178. Weighted random sampling
  179. Implement system routines
  180. Distill large data sets to single values
  181. Transform one data set to another
  182. Handling obscenely large amounts of data
  183. System design:
  184. - features sets
  185. - interfaces
  186. - class hierarchies
  187. - designing a system under certain constraints
  188. - simplicity and robustness
  189. - tradeoffs
  190. Performance analysis and optimization
  191. Testing
  192. Information theory:
  193. - Markov processes:
  194. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation
  195. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation
  196. - https://www.khanacademy.org/computing/computer-science/informationtheory/moderninfotheory/v/symbol-rate-information-theory
  197. - includes Markov chain
  198. Bloom Filter
  199. - https://www.youtube.com/watch?v=-SuTGoFYjZs
  200. - http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/
  201. Fast Fourier Transform
  202. - http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/
  203. C (for basis of C)
  204. C++ (for interview answers)
  205. Machine Learning:
  206. - http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/
  207. - review videos
  208. - intro in Goodreader on iPad
  209. - http://www.dataschool.io/
  210. ---
  211. When you have time:
  212. C++ Talks at CPPCon:
  213. - https://www.youtube.com/watch?v=hEx5DNLWGgA&index=2&list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh
  214. Compilers:
  215. - https://class.coursera.org/compilers-004/lecture
  216. Computer and processor architecture:
  217. - https://class.coursera.org/comparch-003/lecture
  218. Long series of C++ videos:
  219. - https://www.youtube.com/playlist?list=PLfVsf4Bjg79Cu5MYkyJ-u4SyQmMhFeC1C
  220. ---
  221. Biggest challenges faced
  222. Best/worst designs seen
  223. Ideas for improving existing products
  224. - my search idea (optimal result exhaustion and refresh)
  225. ##########################################################################################
  226. ## Videos:
  227. ##########################################################################################
  228. 6.042: Math for CS (25 videos):
  229. - https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B
  230. 6.006: Intro to Algorithms (47 videos):
  231. - https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False
  232. 6.033: Computer System Engineering (22 videos):
  233. - https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484
  234. 6.046: Design and Analysis of Algorithms (34 videos):
  235. - https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp
  236. 6.851: Advanced Data Structures (22 videos):
  237. - https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf
  238. Stanford: Programming Paradigms (17 videos)
  239. - https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False
  240. ##########################################################################################
  241. ## Articles:
  242. ##########################################################################################
  243. - https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/
  244. - http://highscalability.com/blog/2016/4/4/how-to-remove-duplicates-in-a-large-dataset-reducing-memory.html
  245. - http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html
  246. - http://highscalability.com/blog/2016/3/21/to-compress-or-not-to-compress-that-was-ubers-question.html
  247. - http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html
  248. - http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html
  249. - http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html
  250. - http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html
  251. - http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html
  252. - http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html
  253. - http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html
  254. - http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html
  255. - http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html
  256. - http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html
  257. - http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html
  258. - http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html
  259. ##########################################################################################
  260. ## Papers:
  261. ##########################################################################################
  262. Computing Weak Consistency in Polynomial Time
  263. - 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
  264. How Developers Search for Code: A Case Study
  265. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf
  266. Borg, Omega, and Kubernetes
  267. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf
  268. Continuous Pipelines at Google
  269. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf
  270. AddressSanitizer: A Fast Address Sanity Checker
  271. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
  272. ##########################################################################################
  273. ## Interview Prep:
  274. ##########################################################################################
  275. Videos:
  276. - https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be
  277. - https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be
  278. Articles:
  279. - http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html
  280. - http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
  281. - http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions
  282. - http://www.google.com/about/careers/lifeatgoogle/hiringprocess/
  283. Additional:
  284. - https://courses.csail.mit.edu/iap/interview/materials.php
  285. - http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/
  286. - https://www.youtube.com/watch?v=rEJzOhC5ZtQ&feature=youtu.be
  287. - https://www.youtube.com/watch?v=aClxtDcdpsQ&feature=youtu.be
  288. - https://www.youtube.com/watch?v=2cf9xo1S134&feature=youtu.be
  289. ##########################################################################################
  290. ## Books:
  291. ##########################################################################################
  292. %%%%% Mentioned in Coaching %%%%%%%%%%%%%%%
  293. The Algorithm Design Manual
  294. http://sist.sysu.edu.cn/~isslxm/DSA/textbook/Skiena.-.TheAlgorithmDesignManual.pdf
  295. Algorithms and Programming: Problems and Solutions:
  296. http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474
  297. Read first:
  298. Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition:
  299. http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html
  300. Read second:
  301. Cracking the Coding Interview, Fourth Edition:
  302. http://www.amazon.com/Cracking-Coding-Interview-Fourth-Edition/dp/145157827X
  303. %%%%% Additional %%%%%%%%%%%%%%%
  304. Programming Pearls:
  305. - http://www.wou.edu/~jcm/Spring-P-2015/Programming%20Pearls%20(2nd%20Ed)%20Bentley.pdf
  306. The Google Resume:
  307. - https://www.uop.edu.jo/download/research/members/495_1887_llll.pdf
  308. * - C Programming Language, Vol 2
  309. * - C++ Primer Plus
  310. Clean Code
  311. Code Complete
  312. Introduction to Algorithms
  313. ##########################################################################################
  314. ## Coding exercises/challenges:
  315. ##########################################################################################
  316. Recommended: LeetCode: https://leetcode.com/
  317. HackerRank: https://www.hackerrank.com/
  318. Codility: https://codility.com/programmers/
  319. Proect Euler: https://projecteuler.net/index.php?section=problems
  320. InterviewCake: https://www.interviewcake.com/
  321. InterviewBit: https://www.interviewbit.com/invite/icjf
  322. ##########################################################################################
  323. ## Code:
  324. ##########################################################################################
  325. https://github.com/lekkas/c-algorithms
  326. ##########################################################################################
  327. ## Done. ##
  328. ##########################################################################################