diff --git a/README.md b/README.md index 80406ca..4ea8fa2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # Project 9894 -TBD +This is a setup for this project, which is stealthy right now. Will add more detail soon. diff --git a/plan.txt b/plan.txt new file mode 100644 index 0000000..053246a --- /dev/null +++ b/plan.txt @@ -0,0 +1,382 @@ +########################################################################################## +## 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 +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/ + +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. ## +########################################################################################## \ No newline at end of file