plan.txt 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. ##########################################################################################
  2. ## How to read this
  3. ##########################################################################################
  4. Everything below is an outline, and you should tackle the items in order from top to bottom.
  5. I put an asterisk * at the beginning of a line when I'm done with it. When all sub-items are done,
  6. I put a * at the top level, meaning the entire block is done. Sorry you have to remove all my *
  7. to use this the same way. If you search/replace, there are a couple of places to look out for.
  8. ##########################################################################################
  9. ## Interview Prep:
  10. ##########################################################################################
  11. * - Videos:
  12. * - https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be
  13. * - https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be
  14. * - https://www.youtube.com/watch?v=8npJLXkcmu8
  15. * - Articles:
  16. * - http://www.google.com/about/careers/lifeatgoogle/hiringprocess/
  17. * - http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
  18. - all the things he mentions that you need to know are listed below
  19. * - (very dated) http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html
  20. * - http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions
  21. * - Additional (not suggested by Google but I added):
  22. * - https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4
  23. * - https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx
  24. * - https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1
  25. * - http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture
  26. * - http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/
  27. * - Cracking The Coding Interview Set 1:
  28. * - https://www.youtube.com/watch?v=rEJzOhC5ZtQ
  29. * - https://www.youtube.com/watch?v=aClxtDcdpsQ
  30. * - How to Get a Job at the Big 4:
  31. * - https://www.youtube.com/watch?v=YJZCUhxNCv8
  32. ##########################################################################################
  33. ## Knowledge:
  34. ##########################################################################################
  35. You need to know C, C++, or Java to do the coding part of the interview.
  36. They will sometimes make an exception and let you use Python or some other language, but the language
  37. must be mainstream and allow you write your code low-level enough to solve the problems.
  38. You'll see some C, C++ learning included below.
  39. There are a few books involved, see the bottom.
  40. Some videos are available only by enrolling in a Coursera or EdX class. It is free to do so.
  41. * - how computers process a program:
  42. * - https://www.youtube.com/watch?v=42KTvGYQYnA
  43. * - https://www.youtube.com/watch?v=Mv2XQgpbTNE
  44. * - Computer Arch Intro:
  45. (first video only - interesting but not required) https://www.youtube.com/watch?v=zLP_X4wyHbY&list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq&index=1
  46. * - Parity & Hamming Code:
  47. Parity:
  48. https://www.youtube.com/watch?v=DdMcAUlxh1M
  49. Hamming Code:
  50. https://www.youtube.com/watch?v=1A_NcXxdoCc
  51. https://www.youtube.com/watch?v=JAMLuxdHH8o
  52. Error Checking:
  53. https://www.youtube.com/watch?v=wbH2VxzmoZk
  54. * - C
  55. * - K&R C book (ANSI C)
  56. - C++
  57. * - basics
  58. * - pointers
  59. * - functions
  60. * - references
  61. * - templates
  62. * - compilation
  63. * - scope & linkage
  64. * - namespaces
  65. * - OOP
  66. * - STL
  67. * - functors: http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html
  68. * - C++ at Google: https://www.youtube.com/watch?v=NOCElcMcFik
  69. * - Google C++ Style Guide: https://google.github.io/styleguide/cppguide.html
  70. * - Google uses clang-format (there is a command line "style" argument: -style=google)
  71. * - Efficiency with Algorithms, Performance with Data Structures: https://youtu.be/fHNmRkzxHWs
  72. - C++ Core Guidelines: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
  73. - review of C++ concepts: https://www.youtube.com/watch?v=Rub-JsjMhWY
  74. * - compilers:
  75. * - https://class.coursera.org/compilers-004/lecture/1
  76. * - https://class.coursera.org/compilers-004/lecture/2
  77. * - C++: https://www.youtube.com/watch?v=twodd1KFfGk
  78. * - Understanding Compiler Optimization (C++): https://www.youtube.com/watch?v=FnGCDLhaxKU
  79. ----------------------------------------------------------------
  80. The Daily Plan:
  81. Each day I take one subject from the list below, watch videos about that subject, and write an implementation in:
  82. C - using structs and functions that take a struct * and something else as args.
  83. C++ - without using built-in types
  84. C++ - using built-in types, like STL's std::list for a linked list
  85. Python - without using built-in types
  86. and write tests to ensure I'm doing it right, keep it simple with just assert() statements
  87. You may do Java or something else, this is just my thing.
  88. Each subject does not require a whole day to be able to understand it fully.
  89. Why code in all of these?
  90. 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)
  91. Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
  92. 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)
  93. You don't need to memorize the guts of every algorithm.
  94. Write code on a whiteboard, not a computer. Test with some sample inputs.
  95. Then test it out on a computer to make sure it's not buggy from syntax.
  96. ----------------------------------------------------------------
  97. * - Before you get started:
  98. The myth of the Genius Programmer: https://www.youtube.com/watch?v=0SARbwvhupQ
  99. Google engineers are smart, but many have an insecurity that they aren't smart enough.
  100. * - Algorithmic complexity / Big O / Asymptotic analysis
  101. - nothing to implement
  102. - Harvard CS50 - Asymptotic Notation: https://www.youtube.com/watch?v=iOq5kSKqeR4
  103. - Big O Notations (general quick tutorial) - https://www.youtube.com/watch?v=V6mKVRU1evU
  104. - Big O Notation (and Omega and Theta):
  105. - https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN
  106. - Skiena:
  107. - video: https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b
  108. - slides: http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf
  109. - A Gentle Introduction to Algorithm Complexity Analysis: http://discrete.gr/complexity/
  110. - Orders of Growth: https://class.coursera.org/algorithmicthink1-004/lecture/59
  111. - Asymptotics: https://class.coursera.org/algorithmicthink1-004/lecture/61
  112. - Illustrating "Big O": https://class.coursera.org/algorithmicthink1-004/lecture/63
  113. - http://bigocheatsheet.com/
  114. Arrays
  115. * - Description:
  116. - Arrays: https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays
  117. - Dynamic Arrays: https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays
  118. - Resizing arrays: https://class.coursera.org/algs4partI-010/lecture/19
  119. - Implement:
  120. * - Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
  121. * - new raw data array with allocated memory (can allocate int array under the hood, just not use its features)
  122. * - size() - number of items
  123. * - capacity() - number of items it can hold
  124. * - is_empty()
  125. - at(index) - returns item at given index
  126. - append(item) - or push(item)
  127. - insert(index, item)
  128. - prepend(item) - can use insert above at index 0
  129. - delete(index)
  130. - remove(item)
  131. - find(item)
  132. - resize(new_capacity) // private function
  133. - when you reach capacity, resize to double the size
  134. - when popping an item, if size is 1/4 of capacity, resize to half
  135. - Time
  136. - O(1) to add/remove at end (amortized for allocations for more space), index, or update
  137. - O(n) to insert/remove elsewhere
  138. - Space
  139. - contiguous in memory, so proximity helps performance
  140. - space needed = size of object * number of items to store
  141. linked lists
  142. - singly-linked
  143. * - Description: https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists
  144. * - Lynda.com:
  145. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Introduction-lists/149042/177115-4.html
  146. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-basic-list-implementations/149042/177116-4.html
  147. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-singly-doubly-linked-lists/149042/177117-4.html
  148. - https://www.lynda.com/Developer-Programming-Foundations-tutorials/List-support-across-languages/149042/177118-4.html
  149. * - C Code: https://www.youtube.com/watch?v=QN6FPiD0Gzo
  150. - not the whole video, just portions about Node struct and memory allocation.
  151. * - why you should avoid linked lists:
  152. - https://www.youtube.com/watch?v=YQs6IC-vgmo
  153. - implement (with tail pointer), item is the data item in a node:
  154. - push_front
  155. - get_front
  156. - pop_front
  157. - push_back
  158. - get_back
  159. - pop_back
  160. - insert_before(node, item)
  161. - insert_after(node, item)
  162. - size()
  163. - is_empty()
  164. - find(item) - assume each item is unique
  165. - remove(item) - assume each item is unique
  166. - doubly-linked list
  167. - Description: https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists
  168. - reverse a singly-linked list
  169. stacks
  170. - see: https://class.coursera.org/algs4partI-010/lecture
  171. - https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks
  172. queues
  173. - see: https://class.coursera.org/algs4partI-010/lecture
  174. - https://www.coursera.org/learn/data-structures/lecture/EShpq/queues
  175. Vectors
  176. heaps
  177. - https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees
  178. - min heap
  179. - max heap
  180. Priority Queue
  181. - https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction
  182. - see: https://class.coursera.org/algs4partI-010/lecture
  183. - https://class.coursera.org/algs4partI-010/lecture/39
  184. - https://en.wikipedia.org/wiki/Priority_queue
  185. Disjoint Sets:
  186. - https://www.coursera.org/learn/data-structures/lecture/JssSY/overview
  187. - https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees
  188. hashtables
  189. - https://www.youtube.com/watch?v=C4Kc8xzcA68
  190. - https://class.coursera.org/algs4partI-010/lecture/52
  191. - https://www.coursera.org/learn/data-structures/home/week/3
  192. - see: https://class.coursera.org/algs4partI-010/lecture
  193. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables
  194. - test: implement with only arrays
  195. tries
  196. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries
  197. Circular buffer/FIFO:
  198. - https://en.wikipedia.org/wiki/Circular_buffer
  199. Bit operations
  200. - count on bits
  201. - https://youtu.be/Hzuzo9NJrlc
  202. - max run of off bits
  203. - bit shifting
  204. binary search
  205. Sorting
  206. - no bubble sort - it's terrible
  207. - at least one n*log(n) sorting algorithm, preferably two (say, quicksort and merge sort)
  208. - Which algorithms can be used on lists? Which on arrays? Which on both? Is Quicksort stable?
  209. - algos:
  210. - mergesort
  211. - quicksort
  212. Caches
  213. - LRU cache
  214. Trees
  215. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees
  216. - see: https://class.coursera.org/algs4partI-010/lecture
  217. - basic tree construction
  218. - traversal
  219. - manipulation algorithms
  220. - binary search trees BSTs
  221. - https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction
  222. - applications:
  223. - https://class.coursera.org/algs4partI-010/lecture/57
  224. - n-ary trees
  225. - trie-trees
  226. - at least one type of balanced binary tree (and know how it's implemented):
  227. - red/black tree
  228. - https://class.coursera.org/algs4partI-010/lecture/50
  229. - splay trees
  230. - https://www.coursera.org/learn/data-structures/lecture/O9nZ6/splay-trees
  231. - AVL trees
  232. - https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees
  233. - https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation
  234. - https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge
  235. - 2-3 Search Trees
  236. - https://class.coursera.org/algs4partI-010/lecture/49
  237. - B-Trees:
  238. - https://class.coursera.org/algs4partI-010/lecture/51
  239. - BFS (breadth-first search)
  240. - DFS (depth-first search)
  241. - know the difference between
  242. - inorder
  243. - postorder
  244. - preorder
  245. Graphs:
  246. There are three basic ways to represent a graph in memory:
  247. - objects and pointers
  248. - matrix
  249. - adjacency list
  250. - familiarize yourself with each representation and its pros & cons
  251. - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code
  252. - If you get a chance, try to study up on fancier algorithms:
  253. - Dijkstra
  254. - A*
  255. - when asked a question, look for a graph-based solution first, then move on if none.
  256. Other data structures:
  257. - You should study up on as many other data structures and algorithms as possible
  258. - 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.
  259. - Know what NP-complete means.
  260. Recursion
  261. - when it is appropriate to use it
  262. open-ended problems
  263. - manipulate strings
  264. - manipulate patterns
  265. design patterns:
  266. - strategy
  267. - singleton
  268. - adapter
  269. - prototype
  270. - decorator
  271. - visitor
  272. - factory
  273. Combinatorics (n choose k)
  274. Probability
  275. Dynamic Programming
  276. Processes, Threads, Concurrency issues
  277. - difference: https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread
  278. - threads: https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M
  279. - stopped here: https://www.youtube.com/watch?v=_N0B5ua7oN8&list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M&index=4
  280. - locks
  281. - mutexes
  282. - semaphores
  283. - monitors
  284. - how they work
  285. - deadlock
  286. - livelock
  287. Process resource needs
  288. Thread resource needs
  289. Modern concurrency constructs with multicore processors
  290. Context switching
  291. - How context switching is initiated by the operating system and underlying hardware
  292. Scheduling
  293. Weighted random sampling
  294. Implement system routines
  295. Distill large data sets to single values
  296. Transform one data set to another
  297. Handling obscenely large amounts of data
  298. System design:
  299. - features sets
  300. - interfaces
  301. - class hierarchies
  302. - designing a system under certain constraints
  303. - simplicity and robustness
  304. - tradeoffs
  305. Performance analysis and optimization
  306. Familiarize yourself with unix-based souped-up code editor: emacs & vi(m)
  307. vi(m):
  308. - https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr
  309. - set of 4:
  310. - https://www.youtube.com/watch?v=SI8TeVMX8pk
  311. - https://www.youtube.com/watch?v=F3OO7ZIOaJE
  312. - https://www.youtube.com/watch?v=ZYEccA_nMaI
  313. - https://www.youtube.com/watch?v=1lYD5gwgZIA
  314. emacs:
  315. - https://www.youtube.com/watch?v=hbmV1bnQ-i0
  316. - set of 3:
  317. - https://www.youtube.com/watch?v=ujODL7MD04Q
  318. - https://www.youtube.com/watch?v=XWpsRupJ4II
  319. - https://www.youtube.com/watch?v=paSgzPso-yc
  320. - https://www.youtube.com/watch?v=JWD1Fpdd4Pc
  321. Testing
  322. -------------------------------------------------------------------
  323. Once you're closer to the interview:
  324. - Cracking The Coding Interview Set 2:
  325. - https://www.youtube.com/watch?v=4NIb9l3imAo
  326. - https://www.youtube.com/watch?v=Eg5-tdAwclo
  327. - https://www.youtube.com/watch?v=1fqxMuPmGak
  328. -------------------------------------------------------------------
  329. Extras that can't hurt:
  330. Information theory:
  331. - Markov processes:
  332. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation
  333. - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation
  334. - https://www.khanacademy.org/computing/computer-science/informationtheory/moderninfotheory/v/symbol-rate-information-theory
  335. - includes Markov chain
  336. Bloom Filter
  337. - https://www.youtube.com/watch?v=-SuTGoFYjZs
  338. - http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/
  339. Fast Fourier Transform
  340. - http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/
  341. Machine Learning:
  342. - great course: https://www.coursera.org/learn/machine-learning
  343. - http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/
  344. - http://www.dataschool.io/
  345. ------------------------
  346. Be thinking of for when the interview comes:
  347. Think of about 20 interview questions you'll get, along the lines of the items below:
  348. have 2-3 answers for each
  349. Have a story, not just data, about something you accomplished
  350. Why do you want this job?
  351. What's a tough problem you've solved?
  352. Biggest challenges faced?
  353. Best/worst designs seen?
  354. Ideas for improving an existing Google product.
  355. How do you work best, as an individual and as part of a team?
  356. Which of your skills or experiences would be assets in the role and why?
  357. What did you most enjoy at [job x / project y]?
  358. What was the biggest challenge you faced at [job x / project y]?
  359. What was the hardest bug you faced at [job x / project y]?
  360. What did you learn at [job x / project y]?
  361. What would you have done better at [job x / project y]?
  362. ---------------------------
  363. Have questions for the interviewer.
  364. Some of mine (I already may know answer to but want their opinion or team perspective):
  365. - How large is your team?
  366. - What is your dev cycle look like? Do you do sprints/agile?
  367. - How are decisions made in your team?
  368. - How many meetings do you have per week?
  369. - Do you feel your work environment helps you concentrate?
  370. - What are you working on?
  371. - What do you like about it?
  372. - What is the work life like?
  373. ##########################################################################################
  374. ## Books:
  375. ##########################################################################################
  376. Mentioned in Coaching:
  377. The Algorithm Design Manual
  378. http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
  379. Algorithms and Programming: Problems and Solutions:
  380. http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474
  381. Read first:
  382. Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition:
  383. http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html
  384. Read second:
  385. Cracking the Coding Interview, 6th Edition:
  386. - http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/
  387. Additional (not suggested by Google but I added):
  388. * - C Programming Language, Vol 2
  389. * - C++ Primer Plus, 6th Edition
  390. Introduction to Algorithms
  391. Programming Pearls:
  392. - http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880
  393. If you see people reference "The Google Resume", it was replaced by "Cracking the Coding Interview".
  394. Clean Code
  395. Code Complete
  396. ##########################################################################################
  397. ##########################################################################################
  398. ##
  399. ##
  400. ##
  401. ## Everything below is my recommendation, not Google's, and
  402. ## you may not have enough time to watch or read them all.
  403. ## That's ok. I may not either.
  404. ##
  405. ##
  406. ##
  407. ##########################################################################################
  408. ##########################################################################################
  409. ## Videos:
  410. ##########################################################################################
  411. CSE373 - Analysis of Algorithms (25 videos):
  412. - https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1
  413. 6.042: Math for CS (25 videos):
  414. - https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B
  415. 6.006: Intro to Algorithms (47 videos):
  416. - https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False
  417. 6.033: Computer System Engineering (22 videos):
  418. - https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484
  419. 6.046: Design and Analysis of Algorithms (34 videos):
  420. - https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp
  421. 6.851: Advanced Data Structures (22 videos):
  422. - https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf
  423. Stanford: Programming Paradigms (17 videos)
  424. - https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False
  425. ##########################################################################################
  426. ## Articles:
  427. ##########################################################################################
  428. - https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/
  429. - http://highscalability.com/blog/2016/4/4/how-to-remove-duplicates-in-a-large-dataset-reducing-memory.html
  430. - http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html
  431. - http://highscalability.com/blog/2016/3/21/to-compress-or-not-to-compress-that-was-ubers-question.html
  432. - http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html
  433. - http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html
  434. - http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html
  435. - http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html
  436. - http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html
  437. - http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html
  438. - http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html
  439. - http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html
  440. - http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html
  441. - http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html
  442. - http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html
  443. - http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html
  444. ##########################################################################################
  445. ## Papers:
  446. ##########################################################################################
  447. Computing Weak Consistency in Polynomial Time
  448. - http://dl.acm.org/ft_gateway.cfm?id=2767407&ftid=1607485&dwn=1&CFID=627637486&CFTOKEN=49290244
  449. How Developers Search for Code: A Case Study
  450. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf
  451. Borg, Omega, and Kubernetes
  452. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf
  453. Continuous Pipelines at Google
  454. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf
  455. AddressSanitizer: A Fast Address Sanity Checker
  456. - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
  457. ##########################################################################################
  458. ## Coding exercises/challenges:
  459. ##########################################################################################
  460. - https://courses.csail.mit.edu/iap/interview/materials.php
  461. LeetCode: https://leetcode.com/
  462. TopCoder: https://www.topcoder.com/
  463. More:
  464. HackerRank: https://www.hackerrank.com/
  465. Codility: https://codility.com/programmers/
  466. Project Euler: https://projecteuler.net/index.php?section=problems
  467. InterviewCake: https://www.interviewcake.com/
  468. InterviewBit: https://www.interviewbit.com/invite/icjf
  469. ##########################################################################################
  470. ## Maybe:
  471. ##########################################################################################
  472. http://www.gainlo.co/ - Mock interviewers from big companies
  473. ##########################################################################################
  474. ## Code References:
  475. ##########################################################################################
  476. For review questions in C book:
  477. https://github.com/lekkas/c-algorithms
  478. ##########################################################################################
  479. ## Once you've got the job (this is mainly for me):
  480. ##########################################################################################
  481. C++ Talks at CPPCon:
  482. - https://www.youtube.com/watch?v=hEx5DNLWGgA&index=2&list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh
  483. Compilers:
  484. - https://class.coursera.org/compilers-004/lecture
  485. Computer and processor architecture:
  486. - https://class.coursera.org/comparch-003/lecture
  487. Long series of C++ videos:
  488. - https://www.youtube.com/playlist?list=PLfVsf4Bjg79Cu5MYkyJ-u4SyQmMhFeC1C
  489. ##########################################################################################
  490. ## Done. ##
  491. ##########################################################################################