########################################################################################## ## Knowledge: ########################################################################################## * - Computer Arch Intro & Basics: https://www.youtube.com/watch?v=zLP_X4wyHbY&list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq&index=1 * - Parity & Hamming Code: Parity: https://www.youtube.com/watch?v=DdMcAUlxh1M Hamming Code: https://www.youtube.com/watch?v=1A_NcXxdoCc https://www.youtube.com/watch?v=JAMLuxdHH8o Error Checking: https://www.youtube.com/watch?v=wbH2VxzmoZk * - C * - K&R C book (ANSI C) - C++ * - basics * - pointers * - functions * - references * - templates * - compilation * - scope & linkage * - namespaces * - OOP * - STL * - functors: http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html * - C++ at Google: https://www.youtube.com/watch?v=NOCElcMcFik * - Google C++ Style Guide: https://google.github.io/styleguide/cppguide.html - Google uses clang-format (Google setting) - C++ Core Guidelines: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines * - Efficiency with Algorithms, Performance with Data Structures: https://youtu.be/fHNmRkzxHWs - review: https://www.youtube.com/watch?v=Rub-JsjMhWY compilers: * - https://class.coursera.org/compilers-004/lecture/1 * - https://class.coursera.org/compilers-004/lecture/2 * - C++: https://www.youtube.com/watch?v=twodd1KFfGk * - Understanding Compiler Optimization (C++): https://www.youtube.com/watch?v=FnGCDLhaxKU how computers process a program: - https://www.youtube.com/watch?v=42KTvGYQYnA - https://www.youtube.com/watch?v=Mv2XQgpbTNE - https://www.youtube.com/watch?v=h8T3PWauYF4 linked lists - https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays - singly-linked - https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists - doubly-linked - https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists - reverse a singly-linked list stacks - see: https://class.coursera.org/algs4partI-010/lecture - https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks queues - see: https://class.coursera.org/algs4partI-010/lecture - https://www.coursera.org/learn/data-structures/lecture/EShpq/queues arrays - https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays - https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays Vectors - Vector calculus ? heaps - https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees - min heap - max heap Priority Queue - https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction - see: https://class.coursera.org/algs4partI-010/lecture - https://class.coursera.org/algs4partI-010/lecture/39 - https://en.wikipedia.org/wiki/Priority_queue Disjoint Sets: - https://www.coursera.org/learn/data-structures/lecture/JssSY/overview - https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees hashtables - https://www.youtube.com/watch?v=C4Kc8xzcA68 - https://class.coursera.org/algs4partI-010/lecture/52 - https://www.coursera.org/learn/data-structures/home/week/3 - see: https://class.coursera.org/algs4partI-010/lecture - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables - test: implement with only arrays tries - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries Circular buffer/FIFO: - https://en.wikipedia.org/wiki/Circular_buffer Bit operations - count on bits - https://youtu.be/Hzuzo9NJrlc - max run of off bits - bit shifting binary search Sorting - no bubble sort - it's terrible - at least one n*log(n) sorting algorithm, preferably two (say, quicksort and merge sort) - Which algorithms can be used on lists? Which on arrays? Which on both? Is Quicksort stable? - algos: - mergesort - quicksort Caches - LRU cache Trees - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees - see: https://class.coursera.org/algs4partI-010/lecture - basic tree construction - traversal - manipulation algorithms - binary search trees BSTs - https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction - applications: - https://class.coursera.org/algs4partI-010/lecture/57 - n-ary trees - trie-trees - at least one type of balanced binary tree (and know how it's implemented): - red/black tree - https://class.coursera.org/algs4partI-010/lecture/50 - splay trees - https://www.coursera.org/learn/data-structures/lecture/O9nZ6/splay-trees - AVL trees - https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees - https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation - https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge - 2-3 Search Trees - https://class.coursera.org/algs4partI-010/lecture/49 - B-Trees: - https://class.coursera.org/algs4partI-010/lecture/51 - BFS (breadth-first search) - DFS (depth-first search) - know the difference between - inorder - postorder - preorder Graphs: There are three basic ways to represent a graph in memory: - objects and pointers - matrix - adjacency list - familiarize yourself with each representation and its pros & cons - now their computational complexity, their tradeoffs, and how to implement them in real code - If you get a chance, try to study up on fancier algorithms: - Dijkstra - A* Other data structures: - You should study up on as many other data structures and algorithms as possible - 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. - Find out what NP-complete means. Recursion - when it is appropriate to use it Algorithmic complexity open-ended problems - manipulate strings - manipulate patterns design patterns: - strategy - singleton - adapter - prototype - decorator - visitor - factory Combinatorics (n choose k) Probability Dynamic Programming Processes, Threads, Concurrency issues - difference: https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread - threads: https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M - stopped here: https://www.youtube.com/watch?v=_N0B5ua7oN8&list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M&index=4 - locks - mutexes - semaphores - monitors - how they work - deadlock - livelock Process resource needs Thread resource needs Modern concurrency constructs with multicore processors Context switching - How context switching is initiated by the operating system and underlying hardware Scheduling Weighted random sampling Implement system routines Distill large data sets to single values Transform one data set to another Handling obscenely large amounts of data System design: - features sets - interfaces - class hierarchies - designing a system under certain constraints - simplicity and robustness - tradeoffs Performance analysis and optimization Testing Information theory: - Markov processes: - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation - https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation - https://www.khanacademy.org/computing/computer-science/informationtheory/moderninfotheory/v/symbol-rate-information-theory - includes Markov chain Bloom Filter - https://www.youtube.com/watch?v=-SuTGoFYjZs - http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/ Fast Fourier Transform - http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/ C (for basis of C) C++ (for interview answers) Machine Learning: - http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/ - review videos - intro in Goodreader on iPad - http://www.dataschool.io/ --- When you have time: C++ Talks at CPPCon: - https://www.youtube.com/watch?v=hEx5DNLWGgA&index=2&list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh Compilers: - https://class.coursera.org/compilers-004/lecture Computer and processor architecture: - https://class.coursera.org/comparch-003/lecture Long series of C++ videos: - https://www.youtube.com/playlist?list=PLfVsf4Bjg79Cu5MYkyJ-u4SyQmMhFeC1C --- Biggest challenges faced Best/worst designs seen Ideas for improving existing products - my search idea (optimal result exhaustion and refresh) ########################################################################################## ## Videos: ########################################################################################## 6.042: Math for CS (25 videos): - https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B 6.006: Intro to Algorithms (47 videos): - https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False 6.033: Computer System Engineering (22 videos): - https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484 6.046: Design and Analysis of Algorithms (34 videos): - https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp 6.851: Advanced Data Structures (22 videos): - https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf Stanford: Programming Paradigms (17 videos) - https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False ########################################################################################## ## Articles: ########################################################################################## - https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/ - http://highscalability.com/blog/2016/4/4/how-to-remove-duplicates-in-a-large-dataset-reducing-memory.html - http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html - http://highscalability.com/blog/2016/3/21/to-compress-or-not-to-compress-that-was-ubers-question.html - http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html - http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html - http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html - http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html - http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html - http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html - http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html - http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html - http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html - http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html - http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html - http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html ########################################################################################## ## Papers: ########################################################################################## Computing Weak Consistency in Polynomial Time - 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 How Developers Search for Code: A Case Study - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf Borg, Omega, and Kubernetes - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf Continuous Pipelines at Google - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf AddressSanitizer: A Fast Address Sanity Checker - http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf ########################################################################################## ## Interview Prep: ########################################################################################## Videos: - https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be - https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be Articles: - http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html - http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html - http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions - http://www.google.com/about/careers/lifeatgoogle/hiringprocess/ Additional: - https://courses.csail.mit.edu/iap/interview/materials.php - http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/ - https://www.youtube.com/watch?v=rEJzOhC5ZtQ&feature=youtu.be - https://www.youtube.com/watch?v=aClxtDcdpsQ&feature=youtu.be - https://www.youtube.com/watch?v=2cf9xo1S134&feature=youtu.be ########################################################################################## ## Books: ########################################################################################## %%%%% Mentioned in Coaching %%%%%%%%%%%%%%% The Algorithm Design Manual http://sist.sysu.edu.cn/~isslxm/DSA/textbook/Skiena.-.TheAlgorithmDesignManual.pdf Algorithms and Programming: Problems and Solutions: http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474 Read first: Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition: http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html Read second: Cracking the Coding Interview, Fourth Edition: http://www.amazon.com/Cracking-Coding-Interview-Fourth-Edition/dp/145157827X %%%%% Additional %%%%%%%%%%%%%%% Programming Pearls: - http://www.wou.edu/~jcm/Spring-P-2015/Programming%20Pearls%20(2nd%20Ed)%20Bentley.pdf The Google Resume: - https://www.uop.edu.jo/download/research/members/495_1887_llll.pdf * - C Programming Language, Vol 2 * - C++ Primer Plus Clean Code Code Complete Introduction to Algorithms ########################################################################################## ## Coding exercises/challenges: ########################################################################################## Recommended: LeetCode: https://leetcode.com/ HackerRank: https://www.hackerrank.com/ Codility: https://codility.com/programmers/ Proect Euler: https://projecteuler.net/index.php?section=problems InterviewCake: https://www.interviewcake.com/ InterviewBit: https://www.interviewbit.com/invite/icjf ########################################################################################## ## Code: ########################################################################################## https://github.com/lekkas/c-algorithms ########################################################################################## ## Done. ## ##########################################################################################