From b6125e5ee8b4d52d885665d68e0d9ca0195ac61c Mon Sep 17 00:00:00 2001 From: Glowin Date: Mon, 10 Oct 2016 11:29:54 +0800 Subject: [PATCH 01/61] add Chinese version --- README-cn.md | 1703 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1703 insertions(+) create mode 100644 README-cn.md diff --git a/README-cn.md b/README-cn.md new file mode 100644 index 0000000..2e6a941 --- /dev/null +++ b/README-cn.md @@ -0,0 +1,1703 @@ +# Google Interview University + +## What is it? + +This is my multi-month study plan for going from web developer (self-taught, no CS degree) to Google software engineer. + +![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) + +This long list has been extracted and expanded from **Google's coaching notes**, so these are the things you need to know. +There are extra items I added at the bottom that may come up in the interview or be helpful in solving a problem. Many items are from +Steve Yegge's "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" and are reflected +sometimes word-for-word in Google's coaching notes. + +--- + +## Table of Contents + +- [What is it?](#what-is-it) +- [Why use it?](#why-use-it) +- [How to use it](#how-to-use-it) +- [Get in a Googley Mood](#get-in-a-googley-mood) +- [Did I Get the Job?](#did-i-get-the-job) +- [Follow Along with Me](#follow-along-with-me) +- [Don't feel you aren't smart enough](#dont-feel-you-arent-smart-enough) +- [About Google](#about-google) +- [About Video Resources](#about-video-resources) +- [Interview Process & General Interview Prep](#interview-process--general-interview-prep) +- [Pick One Language for the Interview](#pick-one-language-for-the-interview) +- [Before you Get Started](#before-you-get-started) +- [What you Won't See Covered](#what-you-wont-see-covered) +- [Prerequisite Knowledge](#prerequisite-knowledge) +- [The Daily Plan](#the-daily-plan) +- [Algorithmic complexity / Big-O / Asymptotic analysis](#algorithmic-complexity--big-o--asymptotic-analysis) +- [Data Structures](#data-structures) + - [Arrays](#arrays) + - [Linked Lists](#linked-lists) + - [Stack](#stack) + - [Queue](#queue) + - [Hash table](#hash-table) +- [More Knowledge](#more-knowledge) + - [Binary search](#binary-search) + - [Bitwise operations](#bitwise-operations) +- [Trees](#trees) + - [Trees - Notes & Background](#trees---notes--background) + - [Binary search trees: BSTs](#binary-search-trees-bsts) + - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) + - [Tries](#tries) + - [Balanced search trees](#balanced-search-trees) + - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees) +- [Sorting](#sorting) +- [Graphs](#graphs) +- [Even More Knowledge](#even-more-knowledge) + - [Recursion](#recursion) + - [Dynamic Programming](#dynamic-programming) + - [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability) + - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms) + - [Caches](#caches) + - [Processes and Threads](#processes-and-threads) + - [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) + - [Papers](#papers) + - [Testing](#testing) + - [Scheduling](#scheduling) + - [Implement system routines](#implement-system-routines) + - [String searching & manipulations](#string-searching--manipulations) +- [Final Review](#final-review) +- [Books](#books) +- [Coding exercises/challenges](#coding-exerciseschallenges) +- [Once you're closer to the interview](#once-youre-closer-to-the-interview) +- [Your Resume](#your-resume) +- [Be thinking of for when the interview comes](#be-thinking-of-for-when-the-interview-comes) +- [Have questions for the interviewer](#have-questions-for-the-interviewer) +- [Once You've Got The Job](#once-youve-got-the-job) + +---------------- Everything below this point is optional ---------------- + +- [Additional Learning](#additional-learning) + - [Unicode](#unicode) + - [Endianness](#endianness) + - [Emacs and vi(m)](#emacs-and-vim) + - [Unix command line tools](#unix-command-line-tools) + - [Information theory](#information-theory) + - [Parity & Hamming Code](#parity--hamming-code) + - [Entropy](#entropy) + - [Cryptography](#cryptography) + - [Compression](#compression) + - [Networking](#networking) + - [Computer Security](#computer-security) + - [Garbage collection](#garbage-collection) + - [Parallel Programming](#parallel-programming) + - [Design patterns](#design-patterns) + - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) + - [Fast Fourier Transform](#fast-fourier-transform) + - [Bloom Filter](#bloom-filter) + - [van Emde Boas Trees](#van-emde-boas-trees) + - [Augmented Data Structures](#augmented-data-structures) + - [Skip lists](#skip-lists) + - [Network Flows](#network-flows) + - [Disjoint Sets & Union Find](#disjoint-sets--union-find) + - [Math for Fast Processing](#math-for-fast-processing) + - [Treap](#treap) + - [Linear Programming](#linear-programming) + - [Geometry, Convex hull](#geometry-convex-hull) + - [Discrete math](#discrete-math) + - [Machine Learning](#machine-learning) + - [Go](#go) +- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +- [Video Series](#video-series) +- [Computer Science Courses](#computer-science-courses) + +--- + +## Why use it? + +I'm following this plan to prepare for my Google interview. I've been building the web, building +services, and launching startups since 1997. I have an economics degree, not a CS degree. I've +been very successful in my career, but I want to work at Google. I want to progress into larger systems +and get a real understanding of computer systems, algorithmic efficiency, data structure performance, +low-level languages, and how it all works. And if you don't know any of it, Google won't hire you. + +When I started this project, I didn't know a stack from a heap, didn't know Big-O anything, anything about trees, or how to +traverse a graph. If I had to code a sorting algorithm, I can tell ya it wouldn't have been very good. +Every data structure I've ever used was built into the language, and I didn't know how they worked +under the hood at all. I've never had to manage memory, unless a process I was running would give an "out of +memory" error, and then I'd have to find a workaround. I've used a few multi-dimensional arrays in my life and +thousands of associative arrays, but I've never created data structures from scratch. + +But after going through this study plan I have high confidence I'll be hired. It's a long plan. It's going to take me +months. If you are familiar with a lot of this already it will take you a lot less time. + +## How to use it + +Everything below is an outline, and you should tackle the items in order from top to bottom. + +I'm using Github's special markdown flavor, including tasks lists to check progress. + +- [x] Create a new branch so you can check items like this, just put an x in the brackets: [x] + +[More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + +## Get in a Googley Mood + +Print out a "[future Googler](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)" sign (or two) and keep your eyes on the prize. + +[![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf) + +## Did I Get the Job? + +I haven't applied yet. + +I still have a few days in the learning phase (finishing up this crazy list), and starting next week all +I'll be doing is programming questions all day long. That will continue for a few weeks, and then I'll +apply through a referral I've been holding onto since February (yes, February). + + Thanks for the referral, JP. + +## Follow Along with Me + +I'm on the journey, too. Follow along on my blog at [GoogleyAsHeck.com](https://googleyasheck.com/) + +- Twitter: [@googleyasheck](https://twitter.com/googleyasheck) +- Twitter: [@StartupNextDoor](https://twitter.com/StartupNextDoor) +- Google+: [+Googleyasheck](https://plus.google.com/+Googleyasheck) +- LinkedIn: [johnawasham](https://www.linkedin.com/in/johnawasham) + +![John Washam - Google Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) + +## Don't feel you aren't smart enough +- Google engineers are smart, but many have an insecurity that they aren't smart enough, even though they work at Google. +- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) + +## About Google + +- [ ] For students - [Google Careers: Technical Development Guide](https://www.google.com/about/careers/students/guide-to-technical-development.html) +- [ ] How Search Works: + - [ ] [The Evolution of Search (video)](https://www.youtube.com/watch?v=mTBShTwCnD4) + - [ ] [How Search Works - the story](https://www.google.com/insidesearch/howsearchworks/thestory/) + - [ ] [How Search Works](https://www.google.com/insidesearch/howsearchworks/) + - [ ] [How Search Works - Matt Cutts (video)](https://www.youtube.com/watch?v=BNHR6IQJGZs) + - [ ] [How Google makes improvements to its search algorithm (video)](https://www.youtube.com/watch?v=J5RZOU6vK4Q) +- [ ] Series: + - [ ] [How Google Search Dealt With Mobile](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9) + - [ ] [Google's Secret Study To Find Out Our Needs](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf) + - [ ] [Google Search Will Be Your Next Brain](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523) + - [ ] [The Deep Mind Of Demis Hassabis](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a) +- [ ] [Book: How Google Works](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344) +- [ ] [Made by Google announcement - Oct 2016 (video)](https://www.youtube.com/watch?v=q4y0KOeXViI) + +## About Video Resources + +Some videos are available only by enrolling in a Coursera, EdX, or Lynda.com class. These are called MOOCs. +It is free to do so, but sometimes the classes are not in session so you have to wait a couple of months, so you have no access. + + I'd appreciate your help converting the MOOC video links to public sources to replace the online course videos over time. I like using university lectures. + + +## Interview Process & General Interview Prep + +- [ ] Videos: + - [ ] [How to Work at Google - Candidate Coaching Session (video)](https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be) + - [ ] [Google Recruiters Share Technical Interview Tips (video)](https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be) + - [ ] [How to Work at Google: Tech Resume Preparation (video)](https://www.youtube.com/watch?v=8npJLXkcmu8) + +- [ ] Articles: + - [ ] [Becoming a Googler in Three Steps](http://www.google.com/about/careers/lifeatgoogle/hiringprocess/) + - [ ] [Get That Job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html) + - all the things he mentions that you need to know are listed below + - [ ] _(very dated)_ [How To Get A Job At Google, Interview Questions, Hiring Process](http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html) + - [ ] [Phone Screen Questions](http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions) + +- [ ] Additional (not suggested by Google but I added): + - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) + - [ ] [Four Steps To Google Without A Degree](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) + - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) + - [ ] [How Google Thinks About Hiring, Management And Culture](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture) + - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) + - [ ] Cracking The Coding Interview Set 1: + - [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ) + - [ ] How to Get a Job at the Big 4: + - [ ] ['How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft' (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) + - [ ] [Failing at Google Interviews](http://alexbowe.com/failing-at-google-interviews/) + +## Pick One Language for the Interview + +I wrote this short article about it: [Important: Pick One Language for the Google Interview](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/) + +You can use a language you are comfortable in to do the coding part of the interview, but for Google, these are solid choices: + +- C++ +- Java +- Python + +You could also use these, but read around first. There may be caveats: + +- JavaScript +- Ruby + +You need to be very comfortable in the language, and be knowledgeable. + +Read more about choices: +- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ +- http://blog.codingforinterviews.com/best-programming-language-jobs/ +- https://www.quora.com/What-is-the-best-language-to-program-in-for-an-in-person-Google-interview + +[See language resources here](programming-language-resources.md) + +You'll see some C, C++, and Python learning included below, because I'm learning. There are a few books involved, see the bottom. + +## Before you Get Started + +This list grew over many months, and yes, it kind of got out of hand. + +Here are some mistakes I made so you'll have a better experience. + +### 1. You Won't Remember it All + +I watched hours of videos and took copious notes, and months later there was much I didn't remember. I spent 3 days going +through my notes and making flashcards so I could review (see below). + +### 2. Use Flashcards + +To solve the problem, I made a little flashcards site where I could add flashcards of 2 types: general and code. +Each card has different formatting. + +I made a mobile-first website so I could review on my phone and tablet, whereever I am. + +Make your own for free: + +- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) +- [My flash cards database](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required by Google. + +**Note on flashcards:** The first time you recognize you know the answer, don't mark it as known. You have to see the +same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in +your brain. + +### 3. Review, review, review + +I keep a set of cheatsheets on ASCII, OSI stack, Big-O notations, and more. I study them when I have some spare time. + +Take a break from programming problems for a half hour and go through your flashcards. + +### 4. Focus + +There are a lot of distractions that can take up valuable time. Focus and concentration is hard. + +## What you won't see covered + +This big list all started as a personal to-do list made from Google interview coaching notes. These are prevalent +technologies but were not mentioned in those notes: + +- SQL +- Javascript +- HTML, CSS, and other front-end technologies + +## The Daily Plan + +Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement. + +Each day I take one subject from the list below, watch videos about that subject, and write an implementation in: + C - using structs and functions that take a struct * and something else as args. + C++ - without using built-in types + C++ - using built-in types, like STL's std::list for a linked list + Python - using built-in types (to keep practicing Python) + and write tests to ensure I'm doing it right, sometimes just using simple assert() statements + You may do Java or something else, this is just my thing. + +Why code in all of these? + 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) + Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python)) + 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) + +I may not have time to do all of these for every subject, but I'll try. + +You can see my code here: + - [C] (https://github.com/jwasham/practice-c) + - [C++] (https://github.com/jwasham/practice-cpp) + - [Python] (https://github.com/jwasham/practice-python) + +You don't need to memorize the guts of every algorithm. + +Write code on a whiteboard, not a computer. Test with some sample inputs. Then test it out on a computer. + +## Prerequisite Knowledge + +- [ ] **How computers process a program:** + - [ ] [How does CPU execute program (video)](https://www.youtube.com/watch?v=42KTvGYQYnA) + - [ ] [Machine Code Instructions (video)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) + +- [ ] **Compilers** + - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [ ] [Hardvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo) + - [ ] [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk) + - [ ] [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU) + +- [ ] **How floating point numbers are stored:** + - [ ] simple 8-bit: [Representation of Floating Point Numbers - 1 (video - there is an error in calculations - see video description)](https://www.youtube.com/watch?v=ji3SfClm8TU) + - [ ] 32 bit: [IEEE754 32-bit floating point binary (video)](https://www.youtube.com/watch?v=50ZYcZebIec) + +## Algorithmic complexity / Big-O / Asymptotic analysis +- nothing to implement +- [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] Skiena: + - [video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [slides](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) +- [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/) +- [ ] [Orders of Growth (video)](https://class.coursera.org/algorithmicthink1-004/lecture/59) +- [ ] [Asymptotics (video)](https://class.coursera.org/algorithmicthink1-004/lecture/61) +- [ ] [UC Berkeley Big O (video)](https://youtu.be/VIS4YDpuP98) +- [ ] [UC Berkeley Big Omega (video)](https://youtu.be/ca3e7UVmeUc) +- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [Illustrating "Big O" (video)](https://class.coursera.org/algorithmicthink1-004/lecture/63) +- [ ] TopCoder (includes recurrence relations and master theorem): + - [Computational Complexity: Section 1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) + - [Computational Complexity: Section 2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) +- [ ] [Cheat sheet](http://bigocheatsheet.com/) + + + If some of the lectures are too mathy, you can jump down to the bottom and + watch the discrete mathematics videos to get the background knowledge. + +## Data Structures + +- ### Arrays + - Implement an automatically resizing vector. + - [ ] Description: + - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [Basic Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) + - [Multi-dim (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html) + - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Jagged Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) + - [Resizing arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) + - [ ] Implement a vector (mutable array with automatic resizing): + - [ ] Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing. + - [ ] new raw data array with allocated memory + - can allocate int array under the hood, just not use its features + - start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128 + - [ ] size() - number of items + - [ ] capacity() - number of items it can hold + - [ ] is_empty() + - [ ] at(index) - returns item at given index, blows up if index out of bounds + - [ ] push(item) + - [ ] insert(index, item) - inserts item at index, shifts that index's value and trailing elements to the right + - [ ] prepend(item) - can use insert above at index 0 + - [ ] pop() - remove from end, return value + - [ ] delete(index) - delete item at index, shifting all trailing elements left + - [ ] remove(item) - looks for value and removes index holding it (even if in multiple places) + - [ ] find(item) - looks for value and returns first index with that value, -1 if not found + - [ ] resize(new_capacity) // private function + - when you reach capacity, resize to double the size + - when popping an item, if size is 1/4 of capacity, resize to half + - [ ] Time + - O(1) to add/remove at end (amortized for allocations for more space), index, or update + - O(n) to insert/remove elsewhere + - [ ] Space + - contiguous in memory, so proximity helps performance + - space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n) + +- ### Linked Lists + - [ ] Description: + - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - Linked Lists (video)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5) + - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) + - not the whole video, just portions about Node struct and memory allocation. + - [ ] Linked List vs Arrays: + - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) + - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) + - [ ] [why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo) + - [ ] Gotcha: you need pointer to pointer knowledge: + (for when you pass a pointer to a function that may change the address where that pointer points) + This page is just to get a grasp on ptr to ptr. I don't recommend this list traversal style. Readability and maintainability suffer due to cleverness. + - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) + - [ ] implement (I did with tail pointer & without): + - [ ] size() - returns number of data elements in list + - [ ] empty() - bool returns true if empty + - [ ] value_at(index) - returns the value of the nth item (starting at 0 for first) + - [ ] push_front(value) - adds an item to the front of the list + - [ ] pop_front() - remove front item and return its value + - [ ] push_back(value) - adds an item at the end + - [ ] pop_back() - removes end item and returns its value + - [ ] front() - get value of front item + - [ ] back() - get value of end item + - [ ] insert(index, value) - insert value at index, so current item at that index is pointed to by new item at index + - [ ] erase(index) - removes node at given index + - [ ] value_n_from_end(n) - returns the value of the node at nth position from the end of the list + - [ ] reverse() - reverses the list + - [ ] remove_value(value) - removes the first item in the list with this value + - [ ] Doubly-linked List + - [Description (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) + - No need to implement + +- ### Stack + - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [Using Stacks Last-In First-Out (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html) + - [ ] Will not implement. Implementing with array is trivial. + +- ### Queue + - [ ] [Using Queues First-In First-Out(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) + - [ ] [Queue (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) + - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) + - [ ] [Priority Queues (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) + - [ ] Implement using linked-list, with tail pointer: + - enqueue(value) - adds value at position at tail + - dequeue() - returns value and removes least recently added element (front) + - empty() + - [ ] Implement using fixed-sized array: + - enqueue(value) - adds item at end of available storage + - dequeue() - returns value and removes least recently added element + - empty() + - full() + - [ ] Cost: + - a bad implementation using linked list where you enqueue at head and dequeue at tail would be O(n) + because you'd need the next to last element, causing a full traversal each dequeue + - enqueue: O(1) (amortized, linked list and array [probing]) + - dequeue: O(1) (linked list and array) + - empty: O(1) (linked list and array) + +- ### Hash table + - [ ] Videos: + - [ ] [Hashing with Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) + - [ ] [Table Doubling, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Open Addressing, Cryptographic Hashing (video)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [PyCon 2010: The Mighty Dictionary (video)](https://www.youtube.com/watch?v=C4Kc8xzcA68) + - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (video)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) + + - [ ] Online Courses: + - [ ] [Understanding Hash Functions (video](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) + - [ ] [Using Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html) + - [ ] [Supporting Hashing (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html) + - [ ] [Language Support Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html) + - [ ] [Core Hash Tables (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) + - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/3) + - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) + - [ ] distributed hash tables: + - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) + - [Distributed Hash Tables (video)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) + + - [ ] implement with array using linear probing + - hash(k, m) - m is size of hash table + - add(key, value) - if key already exists, update value + - exists(key) + - get(key) + - remove(key) + +## More Knowledge + +- ### Binary search + - [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno) + - [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) + - [ ] [detail](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/) + - [ ] Implement: + - binary search (on sorted array of integers) + - binary search using recursion + +- ### Bitwise operations + - [ ] [Bits cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32) + - [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, << + - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) + - [ ] Good intro: + [Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I) + - [ ] [C Programming Tutorial 2-10: Bitwise Operators (video)](https://www.youtube.com/watch?v=d0AwjSpNXR0) + - [ ] [Bit Manipulation](https://en.wikipedia.org/wiki/Bit_manipulation) + - [ ] [Bitwise Operation](https://en.wikipedia.org/wiki/Bitwise_operation) + - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) + - [ ] [The Bit Twiddler](http://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](http://bits.stephan-brumme.com/interactive.html) + - [ ] 2s and 1s complement + - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4) + - [1s Complement](https://en.wikipedia.org/wiki/Ones%27_complement) + - [2s Complement](https://en.wikipedia.org/wiki/Two%27s_complement) + - [ ] count set bits + - [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc) + - [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) + - [How To Count The Number Of Set Bits In a 32 Bit Integer](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer) + - [ ] round to next power of 2: + - [Round Up To Next Power Of Two](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) + - [ ] swap values: + - [Swap](http://bits.stephan-brumme.com/swap.html) + - [ ] absolute value: + - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html) + +## Trees + +- ### Trees - Notes & Background + - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) + - [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) + - basic tree construction + - traversal + - manipulation algorithms + - BFS (breadth-first search) + - [MIT (video)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - level order (BFS, using queue) + time complexity: O(n) + space complexity: best: O(1), worst: O(n/2)=O(n) + - DFS (depth-first search) + - [MIT (video)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + - notes: + time complexity: O(n) + space complexity: + best: O(log n) - avg. height of tree + worst: O(n) + - inorder (DFS: left, self, right) + - postorder (DFS: left, right, self) + - preorder (DFS: self, left, right) + +- ### Binary search trees: BSTs + - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [Series (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees) + - starts with symbol table and goes through BST applications + - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) + - [ ] [MIT (video)](https://www.youtube.com/watch?v=9Jry5-82I68) + - C/C++: + - [ ] [Binary search tree - Implementation in C/C++ (video)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) + - [ ] [BST implementation - memory allocation in stack and heap (video)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) + - [ ] [Find min and max element in a binary search tree (video)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Find height of a binary tree (video)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) + - [ ] [Binary tree traversal - breadth-first and depth-first strategies (video)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32) + - [ ] [Binary tree: Level Order Traversal (video)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Binary tree traversal: Preorder, Inorder, Postorder (video)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Check if a binary tree is binary search tree or not (video)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Delete a node from Binary Search Tree (video)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) + - [ ] [Inorder Successor in a binary search tree (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] Implement: + - [ ] insert // insert value into tree + - [ ] get_node_count // get count of values stored + - [ ] print_values // prints the values in the tree, from min to max + - [ ] delete_tree + - [ ] is_in_tree // returns true if given value exists in the tree + - [ ] get_height // returns the height in nodes (single node's height is 1) + - [ ] get_min // returns the minimum value stored in the tree + - [ ] get_max // returns the maximum value stored in the tree + - [ ] is_binary_search_tree + - [ ] delete_value + - [ ] get_successor // returns next-highest value in tree after given value, -1 if none + +- ### Heap / Priority Queue / Binary Heap + - visualized as a tree, but is usually linear in storage (array, linked list) + - [ ] [Heap](https://en.wikipedia.org/wiki/Heap_(data_structure)) + - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) + - [ ] [Naive Implementations (video)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) + - [ ] [Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) + - [ ] [Tree Height Remark (video)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) + - [ ] [Basic Operations (video)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) + - [ ] [Complete Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) + - [ ] [Pseudocode (video)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) + - [ ] [Heap Sort - jumps to start (video)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) + - [ ] [Heap Sort (video)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) + - [ ] [Building a heap (video)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) + - [ ] [MIT: Heaps and Heap Sort (video)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [CS 61B Lecture 24: Priority Queues (video)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) + - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] Implement a max-heap: + - [ ] insert + - [ ] sift_up - needed for insert + - [ ] get_max - returns the max item, without removing it + - [ ] get_size() - return number of elements stored + - [ ] is_empty() - returns true if heap contains no elements + - [ ] extract_max - returns the max item, removing it + - [ ] sift_down - needed for extract_max + - [ ] remove(i) - removes item at index x + - [ ] heapify - create a heap from an array of elements, needed for heap_sort + - [ ] heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap + - note: using a min heap instead would save operations, but double the space needed (cannot do in-place). + +- ### Tries + - Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits + to track the path. + - I read through code, but will not implement. + - [ ] [Notes on Data Structures and Programming Techniques](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries) + - [ ] Short course videos: + - [ ] [Introduction To Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) + - [ ] [Performance Of Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) + - [ ] [Implementing A Trie (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) + - [ ] [The Trie: A Neglected Data Structure](https://www.toptal.com/java/the-trie-a-neglected-data-structure) + - [ ] [TopCoder - Using Tries](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/) + - [ ] [Stanford Lecture (real world use case) (video)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) + - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + +- ### Balanced search trees + - Know least one type of balanced binary tree (and know how it's implemented): + - "Among balanced search trees, AVL and 2/3 trees are now passé, and red-black trees seem to be more popular. + A particularly interesting self-organizing data structure is the splay tree, which uses rotations + to move any accessed key to the root." - Skiena + - Of these, I chose to implement a splay tree. From what I've read, you won't implement a + balanced search tree in your interview. But I wanted exposure to coding one up + and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code. + - splay tree: insert, search, delete functions + If you end up implementing red/black tree try just these: + - search and insertion functions, skipping delete + - I want to learn more about B-Tree since it's used so widely with very large data sets. + - [ ] [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) + + - [ ] **AVL trees** + - In practice: + From what I can tell, these aren't used much in practice, but I could see where they would be: + The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly + balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it + attractive for data structures that may be built once and loaded without reconstruction, such as language + dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter). + - [ ] [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) + - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) + - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) + - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + + - [ ] **Splay trees** + - In practice: + Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors, + data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory, + networking, and file system code) etc. + - [ ] [CS 61B: Splay Trees (video)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) + - [ ] MIT Lecture: Splay Trees: + - Gets very mathy, but watch the last 10 minutes for sure. + - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + + - [ ] **2-3 search trees** + - In practice: + 2-3 trees have faster inserts at the expense of slower searches (since height is more compared to AVL trees). + - You would use 2-3 tree very rarely because its implementation involves different types of nodes. Instead, people use Red Black trees. + - [ ] [23-Tree Intuition and Definition (video)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) + - [ ] [Binary View of 23-Tree](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [2-3 Trees (student recitation) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + + - [ ] **2-3-4 Trees (aka 2-4 trees)** + - In practice: + For every 2-4 tree, there are corresponding red–black trees with data elements in the same order. The insertion and deletion + operations on 2-4 trees are also equivalent to color-flipping and rotations in red–black trees. This makes 2-4 trees an + important tool for understanding the logic behind red–black trees, and this is why many introductory algorithm texts introduce + 2-4 trees just before red–black trees, even though **2-4 trees are not often used in practice**. + - [ ] [CS 61B Lecture 26: Balanced Search Trees (video)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) + - [ ] [Bottom Up 234-Trees (video)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [Top Down 234-Trees (video)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) + + - [ ] **B-Trees** + - fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor) + - In Practice: + B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to + its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary + block in a particular file. The basic problem is turning the file block i address into a disk block + (or perhaps to a cylinder-head-sector) address. + - [ ] [B-Tree](https://en.wikipedia.org/wiki/B-tree) + - [ ] [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) + - [ ] [B-Tree Definition and Insertion (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [B-Tree Deletion (video)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [MIT 6.851 - Memory Hierarchy Models (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + - covers cache-oblivious B-Trees, very interesting data structures + - the first 37 minutes are very technical, may be skipped (B is block size, cache line size) + + - [ ] **Red/black trees** + - In practice: + Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time. + Not only does this make them valuable in time-sensitive applications such as real-time applications, + but it makes them valuable building blocks in other data structures which provide worst-case guarantees; + for example, many data structures used in computational geometry can be based on red–black trees, and + the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java, + the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor + hashcodes, a Red-Black tree is used. + - [ ] [Aduni - Algorithms - Lecture 4 + (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) + - [ ] [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) + - [ ] [Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) + - [ ] [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red-black-trees/) + +- ### N-ary (K-ary, M-ary) trees + - note: the N or K is the branching factor (max branches) + - binary trees are a 2-ary tree, with branching factor = 2 + - 2-3 trees are 3-ary + - [ ] [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) + +## Sorting + +- [ ] Notes: + - Implement sorts & know best case/worst case, average complexity of each: + - no bubble sort - it's terrible - O(n^2), except when n <= 16 + - [ ] stability in sorting algorithms ("Is Quicksort stable?") + - [Sorting Algorithm Stability](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) + - [Stability In Sorting Algorithms](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) + - [Stability In Sorting Algorithms](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/) + - [Sorting Algorithms - Stability](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf) + - [ ] Which algorithms can be used on linked lists? Which on arrays? Which on both? + - I wouldn't recommend sorting a linked list, but merge sort is doable. + - [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) + +- For heapsort, see Heap data structure above. Heap sort is great, but not stable. + +- [ ] [Bubble Sort (video)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [Analyzing Bubble Sort (video)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [Insertion Sort, Merge Sort (video)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [Insertion Sort (video)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [Merge Sort (video)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [Quicksort (video)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [Selection Sort (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) + +- [ ] Stanford lectures on sorting: + - [ ] [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) + - [ ] [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) + +- [ ] Shai Simonson, [Aduni.org](http://www.aduni.org/): + - [ ] [Algorithms - Sorting - Lecture 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) + - [ ] [Algorithms - Sorting II - Lecture 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) + +- [ ] Steven Skiena lectures on sorting: + - [ ] [lecture begins at 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) + - [ ] [lecture begins at 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [lecture begins at 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [lecture begins at 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) + +- [ ] UC Berkeley: + - [ ] [CS 61B Lecture 29: Sorting I (video)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29) + - [ ] [CS 61B Lecture 30: Sorting II (video)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30) + - [ ] [CS 61B Lecture 32: Sorting III (video)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C) + - [ ] [CS 61B Lecture 33: Sorting V (video)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C) + +- [ ] - Merge sort code: + - [ ] [Using output array](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [In-place](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] - Quick sort code: + - [ ] [Implementation](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Implementation](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + +- [ ] Implement: + - [ ] Mergesort: O(n log n) average and worst case + - [ ] Quicksort O(n log n) average case + - Selection sort and insertion sort are both O(n^2) average and worst case + - For heapsort, see Heap data structure above. + +- [ ] For curiosity - not required: + - [ ] [Radix Sort](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) + - [ ] [Radix Sort (video)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [Radix Sort, Counting Sort (linear time given constraints) (video)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Sorting in Linear Time (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) + +## Graphs + +Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. + +- Notes from Yegge: + - 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 + - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code + - When asked a question, look for a graph-based solution first, then move on if none. + +- [ ] Skiena Lectures - great intro: + - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) + - [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) + - [ ] [CSE373 2012 - Lecture 13 - Graph Algorithms (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) + - [ ] [CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + +- [ ] Graphs (review and more): + + - [ ] [6.006 Single-Source Shortest Paths Problem (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) + - [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] [CS 61B 2014 (starting at 58:09) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) + - [ ] [CS 61B 2014: Weighted graphs (video)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) + - [ ] [Greedy Algorithms: Minimum Spanning Tree (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (video)](https://www.youtube.com/watch?v=RpgcYiky7uw) + +- Full Coursera Course: + - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) + +- Yegge: If you get a chance, try to study up on fancier algorithms: + - [ ] Dijkstra's algorithm - see above - 6.006 + - [ ] A* + - [ ] [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm) + - [ ] [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE) + - [ ] [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE) + +- I'll implement: + - [ ] DFS with adjacency list (recursive) + - [ ] DFS with adjacency list (iterative with stack) + - [ ] DFS with adjacency matrix (recursive) + - [ ] DFS with adjacency matrix (iterative with stack) + - [ ] BFS with adjacency list + - [ ] BFS with adjacency matrix + - [ ] single-source shortest path (Dijkstra) + - [ ] minimum spanning tree + - DFS-based algorithms (see Aduni videos above): + - [ ] check for cycle (needed for topological sort, since we'll check for cycle before starting) + - [ ] topological sort + - [ ] count connected components in a graph + - [ ] list strongly connected components + - [ ] check for bipartite graph + +You'll get more graph practice in Skiena's book (see Books section below) and the interview books + +## Even More Knowledge + +- ### Recursion + - [ ] Stanford lectures on recursion & backtracking: + - [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) + - [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) + - when it is appropriate to use it + - how is tail recursion better than not? + - [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) + - [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) + +- ### Dynamic Programming + - This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky. + - I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved. + - [ ] Videos: + - the Skiena videos can be hard to follow since he sometimes uses the whiteboard, which is too small to see + - [ ] [Skiena: CSE373 2012 - Lecture 19 - Introduction to Dynamic Programming (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) + - [ ] [Skiena: CSE373 2012 - Lecture 20 - Edit Distance (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) + - [ ] [Skiena: CSE373 2012 - Lecture 21 - Dynamic Programming Examples (video)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (video)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson: Dynamic Programming I - Lecture 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: Dynamic programming II - Lecture 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] List of individual DP problems (each is short): + [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + - [ ] Yale Lecture notes: + - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) + - [ ] Coursera: + - [ ] [The RNA secondary structure problem (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) + - [ ] [A dynamic programming algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) + - [ ] [Illustrating the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [Running time of the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) + - [ ] [DP vs. recursive implementation (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) + - [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) + - [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) + +- ### Combinatorics (n choose k) & Probability + - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) + - [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) + - [ ] [Make School: More Probability and Markov Chains (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ) + - [ ] Khan Academy: + - Course layout: + - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) + - Just the videos - 41 (each are simple and each are short): + - [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) + +- ### NP, NP-Complete and Approximation Algorithms + - 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. + - Know what NP-complete means. + - [ ] [Computational Complexity (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) + - [ ] Simonson: + - [ ] [Greedy Algs. II & Intro to NP Completeness (video)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [NP Completeness II & Reductions (video)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness III (Video)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness IV (video)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) + - [ ] Skiena: + - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-CompletenessNP Completeness IV (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - Lecture 24 - NP-Completeness Proofs (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 25 - NP-Completeness Challenge (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [Complexity: P, NP, NP-completeness, Reductions (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [Complexity: Approximation Algorithms (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) + - [ ] [Complexity: Fixed-Parameter Algorithms (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - Peter Norvik discusses near-optimal solutions to traveling salesman problem: + - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) + - Pages 1048 - 1140 in CLRS if you have it. + +- ### Caches + - [ ] LRU cache: + - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M) + - [ ] [Implementing LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI) + - [ ] [LeetCode - 146 LRU Cache (C++) (video)](https://www.youtube.com/watch?v=8-FZRAjR7qU) + - [ ] CPU cache: + - [ ] [MIT 6.004 L15: The Memory Hierarchy (video)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) + - [ ] [MIT 6.004 L16: Cache Issues (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) + +- ### Processes and Threads + - [ ] Computer Science 162 - Operating Systems (25 videos): + - for precesses and threads see videos 1-11 + - [Operating Systems and System Programming (video)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [What Is The Difference Between A Process And A Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) + - Covers: + - Processes, Threads, Concurrency issues + - difference between processes and threads + - processes + - threads + - locks + - mutexes + - semaphores + - monitors + - how they work + - deadlock + - livelock + - CPU activity, interrupts, context switching + - Modern concurrency constructs with multicore processors + - Process resource needs (memory: code, static storage, stack, heap, and also file descriptors, i/o) + - Thread resource needs (shares above (minus stack) with other threads in same process but each has its own pc, stack counter, registers and stack) + - Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy. + - Context switching + - How context switching is initiated by the operating system and underlying hardware + - [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) + - [ ] concurrency in Python (videos): + - [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1) + - [ ] [Python Threads](https://www.youtube.com/watch?v=Bs7vPNbB9JM) + - [ ] [Understanding the Python GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s) + - [reference](http://www.dabeaz.com/GIL) + - [ ] [David Beazley - Python Concurrency From the Ground Up: LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4) + - [ ] [Keynote David Beazley - Topics of Interest (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU) + - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) + + + Scalability and System Design are very large topics with many topics and resources, since there is a lot to consider + when designing a software/hardware system that can scale. Expect to spend quite a bit of time on this. + +- ### System Design, Scalability, Data Handling + - Considerations from Yegge: + - scalability + - 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 + - [ ] **START HERE**: [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [ ] [How Do I Prepare To Answer Design Questions In A Technical Inverview?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) + - [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/) + - [ ] [Algorithm design](http://www.hiredintech.com/algorithm-design/) + - [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM) + - [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below. + - [ ] [How to ace a systems design interview](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/) + - [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/) + - [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html) + - [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk) + - [ ] [A plain english introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) + - [ ] Paxos Consensus algorithm: + - [short video](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [extended video with use case and multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o) + - [paper](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf) + - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) + - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) + - [ ] [Optional: UML 2.0 Series (vido)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] OOSE: Software Dev Using UML and Java (21 videos): + - Can skip this if you have a great grasp of OO and OO design practices. + - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] SOLID OOP Principles: + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] [SOLID Design Patterns in C# (video)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ) + - [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) + - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) + - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension for not for modification](https://en.wikipedia.org/wiki/Open/closed_principle) + - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) + - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) + - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) + - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use + - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) + - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) + - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects. + - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important) + - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) + - [ ] Scalability: + - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) + - [ ] Short series: + - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) + - [Database](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) + - [Cache](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) + - [Asynchronism](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) + - [ ] [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html) + - [ ] [Fallacies of Distributed Computing Explained](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) + - [ ] [Pragmatic Programming Techniques](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html) + - [extra: Google Pregel Graph Processing](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) + - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (video)](https://www.youtube.com/watch?v=modXC5IWTJI) + - [ ] [Introduction to Architecting Systems for Scale](http://lethain.com/introduction-to-architecting-systems-for-scale/) + - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (video)](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0) + - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/) + - [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) + - [ ] [Scale at Facebook (2009)](https://www.infoq.com/presentations/Scale-at-Facebook) + - [ ] [Scale at Facebook (2012), "Building for a Billion Users" (video)](https://www.youtube.com/watch?v=oodS71YtkGU) + - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) + - [ ] [7 Years Of YouTube Scalability Lessons In 30 Minutes](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) + - [video](https://www.youtube.com/watch?v=G-lGCC4KKok) + - [ ] [How PayPal Scaled To Billions Of Transactions Daily Using Just 8VMs](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html) + - [ ] [How to Remove Duplicates in Large Datasets](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) + - [ ] [A look inside Etsy's scale and engineering culture with Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o) + - [ ] [What Led Amazon to its Own Microservices Architecture](http://thenewstack.io/led-amazon-microservices-architecture/) + - [ ] [To Compress Or Not To Compress, That Was Uber's Question](https://eng.uber.com/trip-data-squeeze/) + - [ ] [Asyncio Tarantool Queue, Get In The Queue](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html) + - [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html) + - [ ] [Google's Transition From Single Datacenter, To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) + - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html) + - [ ] [Egnyte Architecture: Lessons Learned In Building And Scaling A Multi Petabyte Distributed System](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html) + - [ ] [Machine Learning Driven Programming: A New Programming For A New World](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html) + - [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html) + - [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) + - [ ] [Tinder: How Does One Of The Largest Recommendation Engines Decide Who You'll See Next?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html) + - [ ] [Design Of A Modern Cache](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html) + - [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) + - [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html) + - [ ] [How Does The Use Of Docker Effect Latency?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html) + - [ ] [Does AMP Counter An Existential Threat To Google?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html) + - [ ] [A 360 Degree View Of The Entire Netflix Stack](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html) + - [ ] [Latency Is Everywhere And It Costs You Sales - How To Crush It](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it) + - [ ] [Serverless (very long, just need the gist)](http://martinfowler.com/articles/serverless.html) + - [ ] [What Powers Instagram: Hundreds of Instances, Dozens of Technologies](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) + - [ ] [Cinchcast Architecture - Producing 1,500 Hours Of Audio Every Day](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html) + - [ ] [Justin.Tv's Live Video Broadcasting Architecture](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html) + - [ ] [Playfish's Social Gaming Architecture - 50 Million Monthly Users And Growing](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) + - [ ] [TripAdvisor Architecture - 40M Visitors, 200M Dynamic Page Views, 30TB Data](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html) + - [ ] [PlentyOfFish Architecture](http://highscalability.com/plentyoffish-architecture) + - [ ] [Salesforce Architecture - How They Handle 1.3 Billion Transactions A Day](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) + - [ ] [ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html) + - [ ] See "Messaging, Serialization, and Queueing Systems" way below for info on some of the technologies that can glue services together + - [ ] Twitter: + - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI) + - [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) + - For even more, see "Mining Massive Datasets" video series in the Video Series section. + - [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world: + - review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) + - flow: + 1. Understand the problem and scope: + - define the use cases, with interviewer's help + - suggest additional features + - remove items that interviewer deems out of scope + - assume high availability is required, add as a use case + 2. Think about constraints: + - ask how many requests per month + - ask how many requests per second (they may volunteer it or make you do the math) + - estimate reads vs. writes percentage + - keep 80/20 rule in mind when estimating + - how much data written per second + - total storage required over 5 years + - how much data read per second + 3. Abstract design: + - layers (service, data, caching) + - infrastructure: load balancing, messaging + - rough overview of any key algorithm that drives the service + - consider bottlenecks and determine solutions + - Exercises: + - [Design a CDN network: old article](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) + - [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake) + - [Design an online multiplayer card game](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html) + - [Design a key-value database](http://www.slideshare.net/dvirsky/introduction-to-redis) + - [Design a function to return the top k requests during past time interval]( https://icmi.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf) + - [Design a picture sharing system](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) + - [Design a recommendation system](http://ijcai13.org/files/tutorial_slides/td3.pdf) + - [Design a URL-shortener system: copied from above](http://www.hiredintech.com/system-design/the-system-design-process/) + - [Design a cache system](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) + +- ### Papers + - These are Google papers and well-known papers. + - Reading all from end to end with full comprehension will likely take more time than you have. I recommend being selective on papers and their sections. + - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) + - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) + - [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) + - replaced by Colossus in 2012 + - [ ] [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) + - mostly replaced by Cloud Dataflow? + - [ ] [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf) + - [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) + - paper not available + - [ ] 2012: AddressSanitizer: A Fast Address Sanity Checker: + - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) + - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany) + - [ ] 2013: Spanner: Google’s Globally-Distributed Database: + - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) + - [video](https://www.usenix.org/node/170855) + - [ ] [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) + - [ ] [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) + - [ ] [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf) + - [ ] [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf ) + - [ ] [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) + - [ ] [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf) + +- ### Testing + - To cover: + - how unit testing works + - what are mock objects + - what is integration testing + - what is dependency injection + - [ ] [Agile Software Testing with James Bach (video)](https://www.youtube.com/watch?v=SAhJf36_u5U) + - [ ] [Open Lecture by James Bach on Software Testing (video)](https://www.youtube.com/watch?v=ILkT_HV9DVU) + - [ ] [Steve Freeman - Test-Driven Development (that’s not what we meant) (video)](https://vimeo.com/83960706) + - [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) + - [ ] [TDD is dead. Long live testing.](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html) + - [ ] [Is TDD dead? (video)](https://www.youtube.com/watch?v=z9quxZsLcfo) + - [ ] [Video series (152 videos) - not all are needed (video)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g) + - [ ] [Test-Driven Web Development with Python](http://www.obeythetestinggoat.com/pages/book.html#toc) + - [ ] Dependency injection: + - [ ] [video](https://www.youtube.com/watch?v=IKD2-MAkXyQ) + - [ ] [Tao Of Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html) + - [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) + +- ### Scheduling + - in an OS, how it works + - can be gleaned from Operating System videos + +- ### Implement system routines + - understand what lies beneath the programming APIs you use + - can you implement them? + +- ### String searching & manipulations + - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + - [ ] Rabin-Karp (videos): + - [Rabin Karps Algorithm](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm) + - [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation) + - [Optimization: Implementation and Analysis](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis) + - [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9) + - [Rolling Hashes, Amortized Analysis](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32) + - [ ] Knuth-Morris-Pratt (KMP): + - [Pratt Algorithm](https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm) + - [Tutorial: The Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=2ogqPWJSftE) + - [ ] Boyer–Moore string search algorithm + - [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) + - [Advanced String Searching Boyer-Moore-Horspool Algorithms (video)](https://www.youtube.com/watch?v=QDZpzctPf10) + - [ ] [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) + +--- + +## Final Review + + This section will have shorter videos that can you watch pretty quickly to review most of the important concepts. + It's nice if you want a refresher often. + (More items will be added here) + +#### General: + +- [ ] Series of 2-3 minutes short subject videos (23 videos) + - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (18 videos): + - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) + +#### Sorts: + +- [ ] Merge Sort: https://www.youtube.com/watch?v=GCae1WNvnZM + + +## Books + +### Mentioned in Google Coaching + +**Read and do exercises:** + +- [ ] The Algorithm Design Manual (Skiena) + - Book (can rent on kindle): + - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) + - Half.com is a great resource for textbooks at good prices. + - Answers: + - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) + - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) + - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) + + Once you've understood everything in the daily plan, and read and done exercises from the the books above, + read and do exercises from the books below. Then move to coding challenges (further down below) + +**Read first:** +- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + +**Read second (recommended by many, but not in Google coaching docs):** +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - If you see people reference "The Google Resume", it was a book replaced by "Cracking the Coding Interview". + +### Additional books + + These were not suggested by Google but I added because I needed the background knowledge + +- [ ] C Programming Language, Vol 2 + - [answers to questions](https://github.com/lekkas/c-algorithms) + +- [ ] C++ Primer Plus, 6th Edition + +- [ ] [The Unix Programming Environment](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=info) + +- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + +- [ ] [Algorithms and Programming: Problems and Solutions](http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474) + +### If you have time + +- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - Half.com is a great resource for textbooks at good prices. + +- [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) + - all code is in C++, if you're looking to use C++ in your interview + - good book on problem solving in general. + +## Coding exercises/challenges + +Once you've learned your brains out, put those brains to work. +Take coding challenges every day, as many as you can. + +Programming Question Prep: + +- [ ] [Great intro (copied from System Design section): Algorithm design:](http://www.hiredintech.com/algorithm-design/) +- [ ] [How to Find a Solution](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/) +- [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/) +- [ ] [Mathematics for Topcoders](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/) +- [ ] [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/) + +- [MIT Interview Materials](https://courses.csail.mit.edu/iap/interview/materials.php) + +- [Exercises for getting better at a given language](http://exercism.io/languages) + +Programming: + +- [LeetCode](https://leetcode.com/) +- [TopCoder](https://www.topcoder.com/) +- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) +- [Codewars](http://www.codewars.com) +- [HackerRank](https://www.hackerrank.com/) +- [Codility](https://codility.com/programmers/) +- [InterviewCake](https://www.interviewcake.com/) +- [InterviewBit](https://www.interviewbit.com/invite/icjf) + +- [Mock interviewers from big companies](http://www.gainlo.co/) + +## Once you're closer to the interview + +- [ ] Cracking The Coding Interview Set 2 (videos): + - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo) + - [Cracking the Coding Interview - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo) + - [Ask Me Anything: Gayle Laakmann McDowell (author of Cracking the Coding Interview)](https://www.youtube.com/watch?v=1fqxMuPmGak) + +## Your Resume + +- [Ten Tips for a (Slightly) Less Awful Resume](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html) +- Great stuff at the back of Cracking The Coding Interview + + +## Be thinking of for when the interview comes + + Think of about 20 interview questions you'll get, along the lines of the items below. + Have 2-3 answers for each + Have a story, not just data, about something you accomplished + +- Why do you want this job? +- What's a tough problem you've solved? +- Biggest challenges faced? +- Best/worst designs seen? +- Ideas for improving an existing Google product. +- How do you work best, as an individual and as part of a team? +- Which of your skills or experiences would be assets in the role and why? +- What did you most enjoy at [job x / project y]? +- What was the biggest challenge you faced at [job x / project y]? +- What was the hardest bug you faced at [job x / project y]? +- What did you learn at [job x / project y]? +- What would you have done better at [job x / project y]? + +## Have questions for the interviewer + + Some of mine (I already may know answer to but want their opinion or team perspective): + +- How large is your team? +- What is your dev cycle look like? Do you do waterfall/sprints/agile? +- Are rushes to deadlines common? Or is there flexibility? +- How are decisions made in your team? +- How many meetings do you have per week? +- Do you feel your work environment helps you concentrate? +- What are you working on? +- What do you like about it? +- What is the work life like? + +## Once You've Got The Job + +Congratulations! + +- [10 things I wish I knew on my first day at Google](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw) + +Keep learning. + +You're never really done. + +--- + + ***************************************************************************************************** + ***************************************************************************************************** + + Everything below this point is optional. These are my recommendations, not Google's. + By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for + any software engineering job. + + ***************************************************************************************************** + ***************************************************************************************************** + +--- + +## Additional Learning + +- ### Unicode + - [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html) + - [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/) + +- ### Endianness + - [ ] [Big And Little Endian](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html) + - [ ] [Big Endian Vs Little Endian (video)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [ ] [Big And Little Endian Inside/Out (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) + - Very technical talk for kernel devs. Don't worry if most is over your head. + - The first half is enough. + +- ### Emacs and vi(m) + - suggested by Yegge, from an old Amazon recruiting post: Familiarize yourself with a unix-based code editor + - vi(m): + - [Editing With vim 01 - Installation, Setup, and The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) + - [VIM Adventures](http://vim-adventures.com/) + - set of 4 videos: + - [The vi/vim editor - Lesson 1](https://www.youtube.com/watch?v=SI8TeVMX8pk) + - [The vi/vim editor - Lesson 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE) + - [The vi/vim editor - Lesson 3](https://www.youtube.com/watch?v=ZYEccA_nMaI) + - [The vi/vim editor - Lesson 4](https://www.youtube.com/watch?v=1lYD5gwgZIA) + - [Using Vi Instead of Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs) + - emacs: + - [Basics Emacs Tutorial (video)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) + - set of 3 (videos): + - [Emacs Tutorial (Beginners) -Part 1- File commands, cut/copy/paste, cursor commands](https://www.youtube.com/watch?v=ujODL7MD04Q) + - [Emacs Tutorial (Beginners) -Part 2- Buffer management, search, M-x grep and rgrep modes](https://www.youtube.com/watch?v=XWpsRupJ4II) + - [Emacs Tutorial (Beginners) -Part 3- Expressions, Statements, ~/.emacs file and packages](https://www.youtube.com/watch?v=paSgzPso-yc) + - [Evil Mode: Or, How I Learned to Stop Worrying and Love Emacs (video)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc) + - [Writing C Programs With Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) + - [(maybe) Org Mode In Depth: Managing Structure (video)](https://www.youtube.com/watch?v=nsGYet02bEk) + +- ### Unix command line tools + - suggested by Yegge, from an old Amazon recruiting post. I filled in the list below from good tools. + - [ ] bash + - [ ] cat + - [ ] grep + - [ ] sed + - [ ] awk + - [ ] curl or wget + - [ ] sort + - [ ] tr + - [ ] uniq + - [ ] [strace](https://en.wikipedia.org/wiki/Strace) + - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/) + +- ### Information theory (videos) + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory) + - [ ] more about Markov processes: + - [ ] [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) + - [ ] [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) + - [ ] [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through) + - See more in MIT 6.050J Information and Entropy series below. + +- ### Parity & Hamming Code (videos) + - [ ] [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) + - [ ] [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M) + - [ ] Hamming Code: + - [Error detection](https://www.youtube.com/watch?v=1A_NcXxdoCc) + - [Error correction](https://www.youtube.com/watch?v=JAMLuxdHH8o) + - [ ] [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk) + +- ### Entropy + - also see videos below + - make sure to watch information theory videos first + - [ ] [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176) + +- ### Cryptography + - also see videos below + - make sure to watch information theory videos first + - [ ] [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography) + - [ ] [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30) + - [ ] [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + +- ### Compression + - make sure to watch information theory videos first + - [ ] Computerphile (videos): + - [ ] [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w) + - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko) + - [ ] [Upside Down Trees (Huffman Trees)](https://www.youtube.com/watch?v=umTbivyJoiI) + - [ ] [EXTRA BITS/TRITS - Huffman Trees](https://www.youtube.com/watch?v=DV8efuB3h2g) + - [ ] [Elegant Compression in Text (The LZ 77 Method)](https://www.youtube.com/watch?v=goOa3DGezUA) + - [ ] [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU) + - [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) + - [ ] [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s) + +- ### Networking (videos) + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) + - [ ] [UDP and TCP: Comparison of Transport Protocols](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP and the OSI Model Explained!](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial.](https://www.youtube.com/watch?v=nomyRJehhnM) + - [ ] [HTTP](https://www.youtube.com/watch?v=WGJrLqtX7As) + - [ ] [SSL and HTTPS](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL/TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM) + - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8) + - [ ] [Video Series (21 videos)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Subnetting Demystified - Part 5 CIDR Notation](https://www.youtube.com/watch?v=t5xYI0jzOf4) + +- ### Computer Security + - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2) + - [ ] [Buffer Overflow Exploits and Defenses](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3) + - [ ] [Privilege Separation](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [Capabilities](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [Sandboxing Native Code](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6) + - [ ] [Web Security Model](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [Securing Web Applications](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [Symbolic Execution](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [Network Security](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [Network Protocols](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- ### Garbage collection + - [ ] [Garbage collection (Java); Augmenting data str (video)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25) + - [ ] [Compilers (video)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) + - [ ] [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI) + - [ ] [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits) + - [ ] [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3) + +- ### Parallel Programming + - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1) + - [ ] [Efficient Python for High Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk) + +- ### Design patterns + - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) + - [ ] Learn these patterns: + - [ ] strategy + - [ ] singleton + - [ ] adapter + - [ ] prototype + - [ ] decorator + - [ ] visitor + - [ ] factory, abstract factory + - [ ] facade + - [ ] observer + - [ ] proxy + - [ ] delegate + - [ ] command + - [ ] state + - [ ] memento + - [ ] iterator + - [ ] composite + - [ ] flyweight + - [ ] [Chapter 6 (Part 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) + - [ ] [Chapter 6 (Part 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) + - [ ] [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO. + - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) + +- ### Messaging, Serialization, and Queueing Systems + - [ ] [Thrift](https://thrift.apache.org/) + - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) + - [ ] [Protocol Buffers](https://developers.google.com/protocol-buffers/) + - [Tutorials](https://developers.google.com/protocol-buffers/docs/tutorials) + - [ ] [gRPC](http://www.grpc.io/) + - [gRPC 101 for Java Developers (video)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) + - [ ] [Redis](http://redis.io/) + - [Tutorial](http://try.redis.io/) + - [ ] [Amazon SQS (queue)](https://aws.amazon.com/sqs/) + - [ ] [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/) + - [ ] [RabbitMQ](https://www.rabbitmq.com/) + - [Get Startet](https://www.rabbitmq.com/getstarted.html) + - [ ] [Celery](http://www.celeryproject.org/) + - [First Steps With Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html) + - [ ] [ZeroMQ](http://zeromq.org/) + - [Intro - Read The Manual](http://zeromq.org/intro:read-the-manual) + - [ ] [ActiveMQ](http://activemq.apache.org/) + - [ ] [Kafka](http://kafka.apache.org/documentation.html#introduction) + - [ ] [MessagePack](http://msgpack.org/index.html) + - [ ] [Avro](https://avro.apache.org/) + +- ### Fast Fourier Transform + - [ ] [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/) + - [ ] [What is the Fourier Transform? (video)](https://www.youtube.com/watch?v=Xxut2PN-V8Q) + - [ ] [Divide & Conquer: FFT (video)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) + - [ ] [Understanding The FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) + +- ### Bloom Filter + - Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k) + - [Bloom Filters](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters | Mining of Massive Datasets | Stanford University](https://www.youtube.com/watch?v=qBTdukbzc78) + - [Tutorial](http://billmill.org/bloomfilter-tutorial/) + - [How To Write A Bloom Filter App](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/) + +- ### van Emde Boas Trees + - [ ] [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) + - [ ] [MIT Lecture Notes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf) + +- ### Augmented Data Structures + - [ ] [CS 61B Lecture 39: Augmenting Data Structures](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) + +- ### Skip lists + - "These are somewhat of a cult data structure" - Skiena + - [ ] [Randomization: Skip Lists (video)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [For animations and a little more detail](https://en.wikipedia.org/wiki/Skip_list) + +- ### Network Flows + - [ ] [Ford-Fulkerson in 5 minutes (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [ ] [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [ ] [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) + +- ### Disjoint Sets & Union Find + - [ ] [Disjoint Set](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) + - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) + - [ ] Coursera (not needed since the above video explains it great): + - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) + - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) + - [ ] [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees) + - [ ] [Union By Rank](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank) + - [ ] [Path Compression](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression) + - [ ] [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) + +- ### Math for Fast Processing + - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg) + +- ### Treap + - Combination of a binary search tree and a heap + - [ ] [Treap](https://en.wikipedia.org/wiki/Treap) + - [ ] [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8) + - [ ] [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) + +- ### Linear Programming (videos) + - [ ] [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ) + - [ ] [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U) + - [ ] [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik) + +- ### Geometry, Convex hull (videos) + - [ ] [Graph Alg. IV: Intro to geometric algorithms - Lecture 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164) + - [ ] [Geometric Algorithms: Graham & Jarvis - Lecture 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) + +- ### Discrete math + - see videos below + +- ### Machine Learning + - [ ] Why ML? + - [ ] [How Google Is Remaking Itself As A Machine Learning First Company](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70) + - [ ] [Large-Scale Deep Learning for Intelligent Computer Systems (video)](https://www.youtube.com/watch?v=QSaZGT4-6EY) + - [ ] [Deep Learning and Understandability versus Software Engineering and Verification by Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw) + - [ ] [Google's Cloud Machine learning tools (video)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) + - [ ] [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (video)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) + - [ ] [Tensorflow (video)](https://www.youtube.com/watch?v=oZikw5k_2FM) + - [ ] [Tensorflow Tutorials](https://www.tensorflow.org/versions/r0.11/tutorials/index.html) + - [ ] [Practical Guide to implementing Neural Networks in Python](using Theano)])http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/) + - Courses: + - [ ] [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning) + - [videos only](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) + - see videos 12-18 for a review of linear algebra (14 and 15 are duplicates) + - [ ] [Neural Networks for Machine Learning](https://www.coursera.org/learn/neural-networks) + - [ ] [Google's Deep Learning Nanodegree](https://www.udacity.com/course/deep-learning--ud730) + - [ ] [Google/Kaggle Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009) + - [ ] [Self-Driving Car Engineer Nanodegree](https://www.udacity.com/drive) + - [ ] [Metis Online Course ($99 for 2 months)](http://www.thisismetis.com/explore-data-science) + - Resources: + - Great book: Data Science from Scratch: First Principles with Python: https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X + - Data School: http://www.dataschool.io/ + +- ### Go + - [ ] Videos: + - [ ] [Why Learn Go?](https://www.youtube.com/watch?v=FTl0tl9BGdc) + - [ ] [Go Programming](https://www.youtube.com/watch?v=CF9S4QZuV30) + - [ ] [A Tour of Go](https://www.youtube.com/watch?v=ytEkHepK08c) + - [ ] Books: + - [ ] [An Introduction to Programming in Go (read free online)](https://www.golang-book.com/books/intro) + - [ ] [The Go Programming Language (Donovan & Kernighan)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440) + - [ ] [Bootcamp](https://www.golang-book.com/guides/bootcamp) + +-- + +## Additional Detail on Some Subjects + + I added these to reinforce some ideas already presented above, but didn't want to include them + above because it's just too much. It's easy to overdo it on a subject. + You want to get hired in this century, right? + +- [ ] **More Dynamic Programming** (videos) + - [ ] [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19) + - [ ] [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20) + - [ ] [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21) + - [ ] [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) + - [ ] [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) + +- [ ] **Advanced Graph Processing** (videos) + - [ ] [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) + - [ ] [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28) + +- [ ] MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos): + - [ ] [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Random Variables](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21) + - [ ] [MIT 6.042J - Expectation I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Large Deviations](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Random Walks](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25) + +- [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) + +## Video Series + +Sit back and enjoy. "netflix and skill" :P + +- [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + +- [ ] [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) + +- [ ] [MIT 18.06 Linear Algebra, Spring 2005 (35 videos)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8) + +- [ ] [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) + +- [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy) + +- [ ] [Discrete Mathematics (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) + +- [ ] CSE373 - Analysis of Algorithms (25 videos) + - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) + +- [ ] [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) + +- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)]( https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) + +- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) + +- [ ] [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + +- [ ] [UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr) + +- [ ] [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) + +- [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) + +- [ ] [MIT 6.006: Intro to Algorithms (47 videos)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False) + +- [ ] [MIT 6.033: Computer System Engineering (22 videos)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484) + +- [ ] [MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi) + +- [ ] [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B) + +- [ ] [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + +- [ ] [MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7) + +- [ ] [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) + +- [ ] [MIT 6.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) + +- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- [ ] Stanford: Programming Paradigms (17 videos) + - [Course on C and C++](https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False) + +- [ ] [Introduction to Cryptography](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be) + - [more in series (not in order)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) + +- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) + +## Computer Science Courses + +- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science) +- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses) + From bb377feb1c792413e8e360946e1f5fdb34efb419 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 22:34:13 +0800 Subject: [PATCH 02/61] update --- README-cn.md | 1024 ++++++++++++++++++++++++-------------------------- 1 file changed, 493 insertions(+), 531 deletions(-) diff --git a/README-cn.md b/README-cn.md index 2e6a941..4110eb7 100644 --- a/README-cn.md +++ b/README-cn.md @@ -1,52 +1,49 @@ -# Google Interview University +# Google Interview University - 一套完整的学习手册帮助自己准备 Google 的面试 -## What is it? +## 这是? -This is my multi-month study plan for going from web developer (self-taught, no CS degree) to Google software engineer. +这是我为了从 web 开发者(自学、非 CS 学位)蜕变至 Google 软件工程师所制定的计划,其内容历时数月。 -![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![白板上编程 ———— 来自 HBO 频道的剧集,“硅谷”](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) -This long list has been extracted and expanded from **Google's coaching notes**, so these are the things you need to know. -There are extra items I added at the bottom that may come up in the interview or be helpful in solving a problem. Many items are from -Steve Yegge's "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" and are reflected -sometimes word-for-word in Google's coaching notes. +这一长列表是从 **Google 的指导笔记** 中萃取出来并进行扩展。因此,有些事情你必须去了解一下。我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题。这些额外项大部分是来自 Steve Yegge 的“[得到在 Google 工作的机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)”,且有时会在 Google 指导笔记的逐字间反映出来。 --- -## Table of Contents +## 目录 -- [What is it?](#what-is-it) -- [Why use it?](#why-use-it) -- [How to use it](#how-to-use-it) -- [Get in a Googley Mood](#get-in-a-googley-mood) -- [Did I Get the Job?](#did-i-get-the-job) -- [Follow Along with Me](#follow-along-with-me) -- [Don't feel you aren't smart enough](#dont-feel-you-arent-smart-enough) -- [About Google](#about-google) -- [About Video Resources](#about-video-resources) -- [Interview Process & General Interview Prep](#interview-process--general-interview-prep) -- [Pick One Language for the Interview](#pick-one-language-for-the-interview) -- [Before you Get Started](#before-you-get-started) -- [What you Won't See Covered](#what-you-wont-see-covered) -- [Prerequisite Knowledge](#prerequisite-knowledge) -- [The Daily Plan](#the-daily-plan) -- [Algorithmic complexity / Big-O / Asymptotic analysis](#algorithmic-complexity--big-o--asymptotic-analysis) -- [Data Structures](#data-structures) - - [Arrays](#arrays) - - [Linked Lists](#linked-lists) - - [Stack](#stack) - - [Queue](#queue) - - [Hash table](#hash-table) -- [More Knowledge](#more-knowledge) - - [Binary search](#binary-search) - - [Bitwise operations](#bitwise-operations) -- [Trees](#trees) - - [Trees - Notes & Background](#trees---notes--background) - - [Binary search trees: BSTs](#binary-search-trees-bsts) - - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) - - [Tries](#tries) - - [Balanced search trees](#balanced-search-trees) - - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees) +- [这是?](#what-is-it) +- [为何要用到它?](#why-use-it) +- [如何使用它](#how-to-use-it) +- [拥有一名 Googler 的心态](#get-in-a-googley-mood) +- [我得到了工作吗?](#did-i-get-the-job) +- [跟随着我](#follow-along-with-me) +- [不要自以为自己足够聪明](#dont-feel-you-arent-smart-enough) +- [关于 Google](#about-google) +- [相关视频资源](#about-video-resources) +- [面试过程 & 通用的面试准备](#interview-process--general-interview-prep) +- [为你的面试选择一种语言](#pick-one-language-for-the-interview) +- [在你开始之前](#before-you-get-started) +- [你所看不到的](#what-you-wont-see-covered) +- [日常计划](#the-daily-plan) +- [必备知识](#prerequisite-knowledge) +- [算法复杂度 / Big-O / 渐进分析法](#algorithmic-complexity--big-o--asymptotic-analysis) +- [数据结构](#data-structures) + - [数组](#arrays) + - [链表](#linked-lists) + - [堆栈](#stack) + - [队列](#queue) + - [哈希表](#hash-table) +- [更多的知识](#more-knowledge) + - [二分查找](#binary-search) + - [按位运算](#bitwise-operations) +- [树](#trees) + - [树 —— 笔记 & 背景](#trees---notes--background) + - [二叉查找树: BSTs](#binary-search-trees-bsts) + - [堆 / 优先级队列 / 二叉堆](#heap--priority-queue--binary-heap) + - [字典树(Tries)](#tries) + - [平衡查找树](#balanced-search-trees) + - [N 叉树(K 叉树、M 叉树)](#n-ary-k-ary-m-ary-trees) - [Sorting](#sorting) - [Graphs](#graphs) - [Even More Knowledge](#even-more-knowledge) @@ -109,53 +106,43 @@ sometimes word-for-word in Google's coaching notes. --- -## Why use it? +## 为何要用到它? -I'm following this plan to prepare for my Google interview. I've been building the web, building -services, and launching startups since 1997. I have an economics degree, not a CS degree. I've -been very successful in my career, but I want to work at Google. I want to progress into larger systems -and get a real understanding of computer systems, algorithmic efficiency, data structure performance, -low-level languages, and how it all works. And if you don't know any of it, Google won't hire you. +我一直都是遵循该计划去准备 Google 的面试。自 1997 年以来,我一直从事于 web 程序的构建、服务器的构建及创业型公司的创办。对于只有着一个经济学学位,而不是计算机科学学位(CS degree)的我来说,在职业生涯中所取得的都非常成功。然而,我想在 Google 工作,并进入大型系统中,真正地去理解计算机系统、算法效率、数据结构性能、低级别编程语言及其工作原理。可一项都不了解的我,怎么会被 Google 所应聘呢? -When I started this project, I didn't know a stack from a heap, didn't know Big-O anything, anything about trees, or how to -traverse a graph. If I had to code a sorting algorithm, I can tell ya it wouldn't have been very good. -Every data structure I've ever used was built into the language, and I didn't know how they worked -under the hood at all. I've never had to manage memory, unless a process I was running would give an "out of -memory" error, and then I'd have to find a workaround. I've used a few multi-dimensional arrays in my life and -thousands of associative arrays, but I've never created data structures from scratch. +当我创建该项目时,我从一个栈到一个堆都并不了解。不懂得 Big-O 的任何东西、关于树的一切,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的并非十分巧妙。一直以来,任何我所用的数据结构都是内建于编程语言当中。至于它们在背后如何运作,我都一概不了解。此外,我并不需要管理内存。最多就是在一个正在执行的进程给出了“内存不足”的错误后,采取一些权变措施。在我的生活中,我甚少使用到多维的数组,可关联数组却成千上万。而且,从开始到现在,我都还未曾创建过数据结构。 -But after going through this study plan I have high confidence I'll be hired. It's a long plan. It's going to take me -months. If you are familiar with a lot of this already it will take you a lot less time. +然而,经过该学习计划,我已有足够的信心认为我能被 Google 所雇佣。这是一个花费了我数月的计划,若您已对大部分知识都熟悉的话,或许能节省大量的时间。 -## How to use it +## 如何使用它 -Everything below is an outline, and you should tackle the items in order from top to bottom. +下面所有的东西都是一个概述,而你需要根据从上到下的顺序逐一处理。 -I'm using Github's special markdown flavor, including tasks lists to check progress. +在学习过程中,我是使用 GitHub 特殊的 markdown flavor 语法去检查计划的进展,包括使用任务列表。 -- [x] Create a new branch so you can check items like this, just put an x in the brackets: [x] +- [x] 创建一个新的分支,以使得你可以像这样去检查每项。直接往方括号中填写一个字符 x:[x] -[More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +[关于 Github-flavored markdown 更多的详情](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) -## Get in a Googley Mood +## 拥有一名 Googler 的心态 -Print out a "[future Googler](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)" sign (or two) and keep your eyes on the prize. +把一个(或两个)印有“[future Googler](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)”的图案打印出来,并用你誓要成功的眼神盯着它。 [![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf) -## Did I Get the Job? +## 我得到了工作吗? -I haven't applied yet. +我还没去应聘。 -I still have a few days in the learning phase (finishing up this crazy list), and starting next week all -I'll be doing is programming questions all day long. That will continue for a few weeks, and then I'll -apply through a referral I've been holding onto since February (yes, February). +因为我离完成学习(完成该疯狂的计划列表)还需要数天的时间,并打算在下周开始用一整天的时间,以编程的方式去解决问题,而这将持续数周时间。然后,我才通过二月时得到的一个介绍资格去正式应聘(没错,是二月时得到的)。 - Thanks for the referral, JP. + 感谢 JP 的这次介绍。 -## Follow Along with Me +## 跟随着我 -I'm on the journey, too. Follow along on my blog at [GoogleyAsHeck.com](https://googleyasheck.com/) +目前我仍在该计划的执行过程中,如果,你想跟随我的脚步去学习,你可以登进我在 [GoogleyAsHeck.com](https://googleyasheck.com/) 上所写的博客。 + +下面是我的联系方式: - Twitter: [@googleyasheck](https://twitter.com/googleyasheck) - Twitter: [@StartupNextDoor](https://twitter.com/StartupNextDoor) @@ -164,549 +151,525 @@ I'm on the journey, too. Follow along on my blog at [GoogleyAsHeck.com](https:// ![John Washam - Google Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) -## Don't feel you aren't smart enough -- Google engineers are smart, but many have an insecurity that they aren't smart enough, even though they work at Google. -- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) +## 不要自以为自己足够聪明 -## About Google +- Google 的工程师都是才智过人的。但是,就算是工作在 Google 的他们,仍然会因为自己不够聪明而感到一种不安全感。 +- [天才程序员的神话](https://www.youtube.com/watch?v=0SARbwvhupQ) -- [ ] For students - [Google Careers: Technical Development Guide](https://www.google.com/about/careers/students/guide-to-technical-development.html) -- [ ] How Search Works: - - [ ] [The Evolution of Search (video)](https://www.youtube.com/watch?v=mTBShTwCnD4) - - [ ] [How Search Works - the story](https://www.google.com/insidesearch/howsearchworks/thestory/) - - [ ] [How Search Works](https://www.google.com/insidesearch/howsearchworks/) - - [ ] [How Search Works - Matt Cutts (video)](https://www.youtube.com/watch?v=BNHR6IQJGZs) - - [ ] [How Google makes improvements to its search algorithm (video)](https://www.youtube.com/watch?v=J5RZOU6vK4Q) -- [ ] Series: - - [ ] [How Google Search Dealt With Mobile](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9) - - [ ] [Google's Secret Study To Find Out Our Needs](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf) - - [ ] [Google Search Will Be Your Next Brain](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523) - - [ ] [The Deep Mind Of Demis Hassabis](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a) -- [ ] [Book: How Google Works](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344) -- [ ] [Made by Google announcement - Oct 2016 (video)](https://www.youtube.com/watch?v=q4y0KOeXViI) +## 关于 Google -## About Video Resources +- [ ] 面向学生 —— [Google 的职业生涯:技术开发指导](https://www.google.com/about/careers/students/guide-to-technical-development.html) +- [ ] Google 检索的原理: + - [ ] [Google 检索的发展史(视频)](https://www.youtube.com/watch?v=mTBShTwCnD4) + - [ ] [Google 检索的原理 —— 故事篇](https://www.google.com/insidesearch/howsearchworks/thestory/) + - [ ] [Google 检索的原理](https://www.google.com/insidesearch/howsearchworks/) + - [ ] [Google 检索的原理 —— Matt Cutts(视频)](https://www.youtube.com/watch?v=BNHR6IQJGZs) + - [ ] [Google 是如何改善其检索算法(视频)](https://www.youtube.com/watch?v=J5RZOU6vK4Q) +- [ ] 连载小说: + - [ ] [Google 检索是如何处理移动设备](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9) + - [ ] [Google 用于寻找需求的秘密研究](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf) + - [ ] [Google 检索将成为你的下一个大脑](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523) + - [ ] [Demis Hassabis 的心灵深处](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a) +- [ ] [书籍:Google 公司是如何运作的](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344) +- [ ] [由 Google 通告所制作 —— 2016年10月(视频)](https://www.youtube.com/watch?v=q4y0KOeXViI) -Some videos are available only by enrolling in a Coursera, EdX, or Lynda.com class. These are called MOOCs. -It is free to do so, but sometimes the classes are not in session so you have to wait a couple of months, so you have no access. +## 相关视频资源 - I'd appreciate your help converting the MOOC video links to public sources to replace the online course videos over time. I like using university lectures. +部分视频只能通过在 Coursera、Edx 或 Lynda.com class 上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。虽然,它们是免费观看。但是,部分课程可能不在该期间。因此,你需要多等待几个月。 + 我很感谢您能帮我把网络公开课程的视频链接转换成公开的视频源,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。 -## Interview Process & General Interview Prep +## 面试过程 & 通用的面试准备 -- [ ] Videos: - - [ ] [How to Work at Google - Candidate Coaching Session (video)](https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be) - - [ ] [Google Recruiters Share Technical Interview Tips (video)](https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be) - - [ ] [How to Work at Google: Tech Resume Preparation (video)](https://www.youtube.com/watch?v=8npJLXkcmu8) +- [ ] 视频: + - [ ] [如何在 Google 工作 —— 考生指导课程(视频)](https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be) + - [ ] [Google 招聘者所分享的技术面试小窍门(视频)](https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be) + - [ ] [如何在 Google 工作:技术型简历的准备(视频)](https://www.youtube.com/watch?v=8npJLXkcmu8) -- [ ] Articles: - - [ ] [Becoming a Googler in Three Steps](http://www.google.com/about/careers/lifeatgoogle/hiringprocess/) - - [ ] [Get That Job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html) - - all the things he mentions that you need to know are listed below - - [ ] _(very dated)_ [How To Get A Job At Google, Interview Questions, Hiring Process](http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html) - - [ ] [Phone Screen Questions](http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions) +- [ ] 文章: + - [ ] [三步成为 Googler](http://www.google.com/about/careers/lifeatgoogle/hiringprocess/) + - [ ] [得到在 Google 的工作机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html) + - 所有他所提及的事情都列在了下面 + - [ ] _(早已过期)_ [如何得到 Google 的一份工作,面试题,应聘过程](http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html) + - [ ] [手机设备屏幕的问题](http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions) -- [ ] Additional (not suggested by Google but I added): - - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - - [ ] [Four Steps To Google Without A Degree](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) - - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) - - [ ] [How Google Thinks About Hiring, Management And Culture](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture) - - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - - [ ] Cracking The Coding Interview Set 1: - - [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) - - [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ) - - [ ] How to Get a Job at the Big 4: - - [ ] ['How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft' (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - - [ ] [Failing at Google Interviews](http://alexbowe.com/failing-at-google-interviews/) +- [ ] 附加的(虽然 Google 不建议,但我添加上来): + - [ ] [ABC:总处于编程状态(Always Be Coding)](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) + - [ ] [四步成为 Google 一名没有学位的员工](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) + - [ ] [共享白板(Whiteboarding)](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) + - [ ] [Google 是如何看待应聘、管理和公司文化](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture) + - [ ] [程序开发面试中有效的白板(Whiteboarding)](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) + - [ ] 震撼程序开发的面试第一集: + - [ ] [Gayle L McDowell —— 震撼程序开发的面试(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [震撼程序开发的面试 —— 作者 Gayle Laakmann McDowell(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ) + - [ ] 如何在世界四强企业中获得一份工作: + - [ ] [“如何在世界四强企业中获得一份工作 —— Amazon、Facebook、Google和Microsoft”(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8) + - [ ] [面试 Google 失败](http://alexbowe.com/failing-at-google-interviews/) -## Pick One Language for the Interview +## 为你的面试选择一种语言 -I wrote this short article about it: [Important: Pick One Language for the Google Interview](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/) +在这,我就以下话题写一篇短文 —— [重点:为在 Google 的面试选择一种语言](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/) -You can use a language you are comfortable in to do the coding part of the interview, but for Google, these are solid choices: +在大多数公司面试中的编程环节,你可以使用一种用起来较为舒适的语言。但在 Google,只有三种固定的选择: - C++ - Java - Python -You could also use these, but read around first. There may be caveats: +有时你也可以使用下面两种,但需要事先查阅说明。因为,说明中会有警告: - JavaScript - Ruby -You need to be very comfortable in the language, and be knowledgeable. +你需要对你所选择的语言感到非常舒适且足够了解。 + +关于选择的更多阅读: -Read more about choices: - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ - http://blog.codingforinterviews.com/best-programming-language-jobs/ - https://www.quora.com/What-is-the-best-language-to-program-in-for-an-in-person-Google-interview -[See language resources here](programming-language-resources.md) +[在此查看相关语言的资源](programming-language-resources.md) -You'll see some C, C++, and Python learning included below, because I'm learning. There are a few books involved, see the bottom. +由于,我正在学习C、C++ 和 Python,因此,在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。 -## Before you Get Started +## 在你开始之前 -This list grew over many months, and yes, it kind of got out of hand. +该列表已经持续更新了很长时间,所以没错,它的确容易会失去控制。 -Here are some mistakes I made so you'll have a better experience. +这里列出一些我所犯过的错误,希望您不要重滔覆辙。 -### 1. You Won't Remember it All +### 1. 你不可能把所有的东西都记住 -I watched hours of videos and took copious notes, and months later there was much I didn't remember. I spent 3 days going -through my notes and making flashcards so I could review (see below). +我查看了数小时的视频,并记录了大量的笔记。可几个月后,我都忘却了其中的大部分东西。所以,我翻阅我的笔记,并将可回顾的东西制作成抽认卡(flashcard)(请往下看) -### 2. Use Flashcards +### 2. 使用抽认卡 -To solve the problem, I made a little flashcards site where I could add flashcards of 2 types: general and code. -Each card has different formatting. +为了解决善忘的问题,我制作了一些抽认卡页面,用于添加两种抽认卡:正常的及带代码的。每种卡都会有不同的格式设计。 -I made a mobile-first website so I could review on my phone and tablet, whereever I am. +而且,我还以移动设备优先去设计网页,以使得在任何地方,我都可以在我的手机及平板上回顾知识。 -Make your own for free: +你也可以免费制作数以你自己的网站: -- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) -- [My flash cards database](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Keep in mind I went overboard and have cards covering everything from assembly language and Python trivia to machine learning and statistics. It's way too much for what's required by Google. +- [抽认卡页面的代码仓库](https://github.com/jwasham/computer-science-flash-cards) +- [我的抽认卡数据库](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):有一点需要记住的是,我做事有点过头,以至于把卡片覆盖到所有的东西上。从汇编语言和 Python 的细枝末节,到机器学习和统计。这种性格对于 Google 的要求来说,是的确有点多余。 -**Note on flashcards:** The first time you recognize you know the answer, don't mark it as known. You have to see the -same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in -your brain. +**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,不要急着把其标注成“已懂”。你需要做的是去查看是否有同样的抽认卡,并在你真正懂得如何解决问题之前,多问自己几次。重复地问答可帮助您深刻记住该知识点。 -### 3. Review, review, review +### 3. 回顾,回顾,回顾 -I keep a set of cheatsheets on ASCII, OSI stack, Big-O notations, and more. I study them when I have some spare time. +我留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的小抄纸,以便在空余的时候可以学习。 -Take a break from programming problems for a half hour and go through your flashcards. +每编程半个小时就要休息一下,并去回顾一下你的抽认卡。 -### 4. Focus +### 4. 专注 -There are a lot of distractions that can take up valuable time. Focus and concentration is hard. +在学习的过程中,往往会有许多令人分心的事情占据着我们宝贵的时间。因此,专注和集中注意力是非常的苦难的。 -## What you won't see covered +## 你所看不到的 -This big list all started as a personal to-do list made from Google interview coaching notes. These are prevalent -technologies but were not mentioned in those notes: +由于,这个巨大的列表是始于一个从 Google 面试指导笔记所形成的的个人事件处理列表。因此,有一些我熟悉且普遍的技术都未被谈及到: - SQL - Javascript - HTML, CSS, and other front-end technologies -## The Daily Plan +## 日常计划 -Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement. +部分问题可能会花费一天去学习,而部分则会花费都天。有些学习,则不需要使用代码去实现。 -Each day I take one subject from the list below, watch videos about that subject, and write an implementation in: - C - using structs and functions that take a struct * and something else as args. - C++ - without using built-in types - C++ - using built-in types, like STL's std::list for a linked list - Python - using built-in types (to keep practicing Python) - and write tests to ensure I'm doing it right, sometimes just using simple assert() statements - You may do Java or something else, this is just my thing. +因此,每一天我都会在下面所列出的列表中选择一个问题,并查看相关的视频。然后,使用以下的一种语言去实现: -Why code in all of these? - 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) - Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python)) - 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) + C —— 使用结构体和函数,该函数会接受一个结构体指针 * 及其他数据作为参数。 + C++ —— 不适用内建的数据类型。 + C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来充当一个链表。 + Python —— 使用内建的数据类型(为了持续连续 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。 + 此外,你也可以使用 Java 或其他语言,这只是我的偏好而已。 -I may not have time to do all of these for every subject, but I'll try. +为何要在这些语言上都编程一次? -You can see my code here: + 因为可以练习,练习,练习,直至我已厌倦它,并毫无问题地完成它。(若有部分边缘条件没想到时,则用书写的形式记录下来并去记忆) + 因为可以在纯原生的条件下工作(不需垃圾回收机制的帮助下,分配/释放内存(除了 Python)) + 因为可以利用上内建的数据类型,以使得我拥有在现实世界中使用内建工具的经验(在生产环境中,不会去编码实现自己的链表) + +就算我没有时间去每一项都这么做,我也会尽我所能的。 + +在这里,你可以查看到我的代码: - [C] (https://github.com/jwasham/practice-c) - [C++] (https://github.com/jwasham/practice-cpp) - [Python] (https://github.com/jwasham/practice-python) -You don't need to memorize the guts of every algorithm. +你不需要记住每一个算法的内部原理。 -Write code on a whiteboard, not a computer. Test with some sample inputs. Then test it out on a computer. +在一个白板上写代码,而不要在一台计算机上编写。在测试完部分简单输入后,到计算机上再测试一下。 -## Prerequisite Knowledge +## 必备知识 -- [ ] **How computers process a program:** - - [ ] [How does CPU execute program (video)](https://www.youtube.com/watch?v=42KTvGYQYnA) - - [ ] [Machine Code Instructions (video)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) +- [ ] **计算机是如何处理一段程序:** + - [ ] [CPU 是如何执行代码(视频)](https://www.youtube.com/watch?v=42KTvGYQYnA) + - [ ] [机器码指令(视频)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) -- [ ] **Compilers** - - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - - [ ] [Hardvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo) - - [ ] [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk) - - [ ] [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU) +- [ ] **编译器** + - [ ] [编译器是如何在 ~1 分钟内工作(视频)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [ ] [Hardvard CS50 —— 编译器(视频)](https://www.youtube.com/watch?v=CSZLNYF4Klo) + - [ ] [C++(视频)](https://www.youtube.com/watch?v=twodd1KFfGk) + - [ ] [掌握编译器的优化(C++)(视频)](https://www.youtube.com/watch?v=FnGCDLhaxKU) -- [ ] **How floating point numbers are stored:** - - [ ] simple 8-bit: [Representation of Floating Point Numbers - 1 (video - there is an error in calculations - see video description)](https://www.youtube.com/watch?v=ji3SfClm8TU) - - [ ] 32 bit: [IEEE754 32-bit floating point binary (video)](https://www.youtube.com/watch?v=50ZYcZebIec) +- [ ] **浮点数是如何存储的:** + - [ ] 简单的 8-bit:[浮点数的表达形式 —— 1(视频 —— 在计算上有一个错误 —— 详情请查看视频的介绍)](https://www.youtube.com/watch?v=ji3SfClm8TU) + - [ ] 32 bit:[IEEE754 32-bit 浮点二进制(视频)](https://www.youtube.com/watch?v=50ZYcZebIec) -## Algorithmic complexity / Big-O / Asymptotic analysis -- nothing to implement -- [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) -- [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) -- [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] Skiena: - - [video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [slides](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) -- [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/) -- [ ] [Orders of Growth (video)](https://class.coursera.org/algorithmicthink1-004/lecture/59) -- [ ] [Asymptotics (video)](https://class.coursera.org/algorithmicthink1-004/lecture/61) -- [ ] [UC Berkeley Big O (video)](https://youtu.be/VIS4YDpuP98) -- [ ] [UC Berkeley Big Omega (video)](https://youtu.be/ca3e7UVmeUc) -- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] [Illustrating "Big O" (video)](https://class.coursera.org/algorithmicthink1-004/lecture/63) +## 算法复杂度 / Big-O / 渐进分析法 +- 并不需要实现 +- [ ] [Harvard CS50 —— 渐进表示(视频)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [Big O 记号(通用快速教程)(视频)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] [Big O 记号(以及 Omega 和 Theta)—— 最佳数学解释(视频)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] Skiena 算法: + - [视频](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [幻灯片](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) +- [ ] [对于算法复杂度分析的一次详细介绍](http://discrete.gr/complexity/) +- [ ] [增长阶数(Orders of Growth)(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/59) +- [ ] [渐进性(Asymptotics)(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/61) +- [ ] [UC Berkeley Big O(视频)](https://youtu.be/VIS4YDpuP98) +- [ ] [UC Berkeley Big Omega(视频)](https://youtu.be/ca3e7UVmeUc) +- [ ] [摊提法分析(Amortized Analysis)(视频)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [举证“Big O”(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/63) - [ ] TopCoder (includes recurrence relations and master theorem): - - [Computational Complexity: Section 1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) - - [Computational Complexity: Section 2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) -- [ ] [Cheat sheet](http://bigocheatsheet.com/) + - [计算性复杂度:第一部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) + - [计算性复杂度:第二部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) +- [ ] [速查表(Cheat sheet)](http://bigocheatsheet.com/) + 如果部分课程过于学术性,你可直接跳到文章底部,去查看离散数学的视频以获取相关背景知识。 - If some of the lectures are too mathy, you can jump down to the bottom and - watch the discrete mathematics videos to get the background knowledge. +## 数据结构 -## Data Structures - -- ### Arrays - - Implement an automatically resizing vector. - - [ ] Description: - - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [Basic Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) - - [Multi-dim (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html) - - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - - [Jagged Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) - - [Resizing arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) - - [ ] Implement a vector (mutable array with automatic resizing): - - [ ] Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing. - - [ ] new raw data array with allocated memory - - can allocate int array under the hood, just not use its features - - start with 16, or if starting number is greater, use power of 2 - 16, 32, 64, 128 - - [ ] size() - number of items - - [ ] capacity() - number of items it can hold +- ### 数组 + - 实现一个自动调整大小的动态数组。 + - [ ] 介绍: + - [数组(视频)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [基础数组(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) + - [多维数组(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html) + - [动态数组(视频)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [不规则数组(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) + - [调整数组的大小(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) + - [ ] 实现一个动态数组(可自动调整大小的可变数组): + - [ ] 练习使用数组和指针去编码,并且指针是通过计算去跳转而不是使用索引 + - [ ] 通过分配内存来新建一个原生数据型数组 + - 可以使用 int 类型的数组,但不能使用其语法特性 + - 从大小为16或更大的数(使用2的倍数 —— 16、32、64、128)开始编写 + - [ ] size() —— 数组元素的个数 + - [ ] capacity() —— 可容纳元素的个数 - [ ] is_empty() - - [ ] at(index) - returns item at given index, blows up if index out of bounds + - [ ] at(index) —— 返回对应索引的元素,且若索引越界则愤然报错 - [ ] push(item) - - [ ] insert(index, item) - inserts item at index, shifts that index's value and trailing elements to the right - - [ ] prepend(item) - can use insert above at index 0 - - [ ] pop() - remove from end, return value - - [ ] delete(index) - delete item at index, shifting all trailing elements left - - [ ] remove(item) - looks for value and removes index holding it (even if in multiple places) - - [ ] find(item) - looks for value and returns first index with that value, -1 if not found - - [ ] resize(new_capacity) // private function - - when you reach capacity, resize to double the size - - when popping an item, if size is 1/4 of capacity, resize to half - - [ ] Time - - O(1) to add/remove at end (amortized for allocations for more space), index, or update - - O(n) to insert/remove elsewhere - - [ ] Space - - contiguous in memory, so proximity helps performance - - space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n) + - [ ] insert(index, item) —— 在指定索引中插入元素,并把后面的元素依次后移 + - [ ] prepend(item) —— 可以使用上面的 insert 函数,传参 index 为 0 + - [ ] pop() —— 删除在数组末端元素,并返回其值 + - [ ] delete(index) —— 删除指定索引的元素,并把后面的元素依次前移 + - [ ] remove(item) —— 删除指定值的元素,并返回其索引(即使有多个元素) + - [ ] find(item) —— 寻找指定值的元素并返回其中第一个出现的元素其索引,若未找到则 + - [ ] resize(new_capacity) // 私有函数 + - 若数组到达其容积,则变大一倍 + - 当获取元素后,数组大小为其容积的1/4,则缩小一半 + - [ ] 时间复杂度 + - 在数组末端增加/删除、定位、更新元素,只允许占 O(1) 的时间复杂度(平摊(amortized)去分配内存以获取更多空间) + - 在数组任何地方插入/移除元素,只允许 O(n) 的时间复杂度 + - [ ] 空间复杂度 + - 因为在内存中分配的空间邻近,所以有助于提高性能 + - 空间需求 = (大于或等于 n 的数组容积)* 元素的大小。即便空间需求为 2n,其空间复杂度仍然是 O(n) -- ### Linked Lists - - [ ] Description: - - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - - [ ] [CS 61B - Linked Lists (video)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5) - - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - - not the whole video, just portions about Node struct and memory allocation. - - [ ] Linked List vs Arrays: - - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) - - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) - - [ ] [why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo) - - [ ] Gotcha: you need pointer to pointer knowledge: - (for when you pass a pointer to a function that may change the address where that pointer points) - This page is just to get a grasp on ptr to ptr. I don't recommend this list traversal style. Readability and maintainability suffer due to cleverness. - - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) - - [ ] implement (I did with tail pointer & without): - - [ ] size() - returns number of data elements in list - - [ ] empty() - bool returns true if empty - - [ ] value_at(index) - returns the value of the nth item (starting at 0 for first) - - [ ] push_front(value) - adds an item to the front of the list - - [ ] pop_front() - remove front item and return its value - - [ ] push_back(value) - adds an item at the end - - [ ] pop_back() - removes end item and returns its value - - [ ] front() - get value of front item - - [ ] back() - get value of end item - - [ ] insert(index, value) - insert value at index, so current item at that index is pointed to by new item at index - - [ ] erase(index) - removes node at given index - - [ ] value_n_from_end(n) - returns the value of the node at nth position from the end of the list - - [ ] reverse() - reverses the list - - [ ] remove_value(value) - removes the first item in the list with this value - - [ ] Doubly-linked List - - [Description (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) - - No need to implement +- ### 链表 + - [ ] 介绍: + - [ ] [单向链表(视频)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B —— 链表(视频)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5) + - [ ] [C 代码(视频)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) + - 并非看整个视频,而只是关于节点结果和内存分配那一部分 + - [ ] 链表 vs 数组: + - [核心链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) + - [在现实世界中,链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) + - [ ] [为什么你需要避免使用链表(视频)](https://www.youtube.com/watch?v=YQs6IC-vgmo) + - [ ] Gotcha:你需要关于“指向指针的指针”的相关知识: + (因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址) + 该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格,因为,代码的可读性和可维护性太低。 + - [指向指针的指针](https://www.eskimo.com/~scs/cclass/int/sx8.html) + - [ ] 实现(我实现了使用尾指针以及没有使用这两种情况): + - [ ] size() —— 返回链表中数据元素的个数 + - [ ] empty() —— 若链表为空则返回一个布尔值 true + - [ ] value_at(index) —— 返回第 n 个元素的值(从0开始计算) + - [ ] push_front(value) —— 添加元素到链表的首部 + - [ ] pop_front() —— 删除首部元素并返回其值 + - [ ] push_back(value) —— 添加元素到链表的尾部 + - [ ] pop_back() —— 删除尾部元素并返回其值 + - [ ] front() —— 返回首部元素的值 + - [ ] back() —— 返回尾部元素的值 + - [ ] insert(index, value) —— 插入值到指定的索引,并且当前索引的元素指向到新的元素 index + - [ ] erase(index) —— 删除指定索引的节点 + - [ ] value_n_from_end(n) —— 返回倒数第 n 个节点的值 + - [ ] reverse() —— 逆序链表 + - [ ] remove_value(value) —— 删除链表中指定值的第一个元素 + - [ ] 双向链表 + - [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) + - 并不需要实现 -- ### Stack - - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - - [ ] [Using Stacks Last-In First-Out (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html) - - [ ] Will not implement. Implementing with array is trivial. +- ### 堆栈 + - [ ] [堆栈(视频)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [使用堆栈 —— 后进先出(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html) + - [ ] 可以不实现,因为使用数组实现并不重要 -- ### Queue - - [ ] [Using Queues First-In First-Out(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) - - [ ] [Queue (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) - - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - - [ ] [Priority Queues (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) - - [ ] Implement using linked-list, with tail pointer: - - enqueue(value) - adds value at position at tail - - dequeue() - returns value and removes least recently added element (front) +- ### 队列 + - [ ] [使用队列 —— 先进先出(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) + - [ ] [队列(视频)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) + - [ ] [原型队列/先进先出(FIFO)](https://en.wikipedia.org/wiki/Circular_buffer) + - [ ] [优先级队列(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) + - [ ] 使用含有尾部指针链表实现: + - enqueue(value) —— 在尾部添加值 + - dequeue() —— 删除最早添加的元素并返回其值(首部元素) - empty() - - [ ] Implement using fixed-sized array: - - enqueue(value) - adds item at end of available storage - - dequeue() - returns value and removes least recently added element + - [ ] 使用固定大小的数组实现: + - enqueue(value) —— 在可容的情况下添加元素到尾部 + - dequeue() —— 删除最早添加的元素并返回其值 - empty() - full() - - [ ] Cost: - - a bad implementation using linked list where you enqueue at head and dequeue at tail would be O(n) - because you'd need the next to last element, causing a full traversal each dequeue - - enqueue: O(1) (amortized, linked list and array [probing]) - - dequeue: O(1) (linked list and array) - - empty: O(1) (linked list and array) - -- ### Hash table - - [ ] Videos: - - [ ] [Hashing with Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) - - [ ] [Table Doubling, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [Open Addressing, Cryptographic Hashing (video)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [PyCon 2010: The Mighty Dictionary (video)](https://www.youtube.com/watch?v=C4Kc8xzcA68) - - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (video)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) - - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - - - [ ] Online Courses: - - [ ] [Understanding Hash Functions (video](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) - - [ ] [Using Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html) - - [ ] [Supporting Hashing (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html) - - [ ] [Language Support Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html) - - [ ] [Core Hash Tables (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) - - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/3) - - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) - - [ ] distributed hash tables: - - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) - - [Distributed Hash Tables (video)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) - - - [ ] implement with array using linear probing - - hash(k, m) - m is size of hash table - - add(key, value) - if key already exists, update value + - [ ] 花销: + - 在使用链表的一个糟糕实现中,入列和出列的时间复杂度将会是 O(n) + 因为你需要找到下一个元素,以致循环整个队列 + - enqueue:O(1)(平摊(amortized)、链表和数组 [探测(probing)]) + - dequeue:O(1)(链表和数组) + - empty:O(1)(链表和数组) + +- ### 哈希表 + - [ ] 视频: + - [ ] [链式哈希表(视频)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) + - [ ] [Table Doubling 和 Karp-Rabin(视频)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Open Addressing 和 密码型哈希(Cryptographic Hashing)(视频)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [PyCon 2010:The Mighty Dictionary(视频)](https://www.youtube.com/watch?v=C4Kc8xzcA68) + - [ ] [(进阶)随机取样(Randomization):全域散列(Universal)& 完美散列(Perfect Hashing)(视频)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(进阶)完美散列(Perfect hashing)(视频)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) + + - [ ] 在线课程: + - [ ] [哈希函数的掌握(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) + - [ ] [使用哈希表(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html) + - [ ] [Supporting Hashing(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html) + - [ ] [哈希表的语言支持(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html) + - [ ] [核心哈希表(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) + - [ ] [数据结构(视频)](https://www.coursera.org/learn/data-structures/home/week/3) + - [ ] [电话薄问题(Phone Book Problem)(视频)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) + - [ ] 分布式哈希表: + - [Dropbox 中的瞬时上传及存储优化(视频)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) + - [分布式哈希表(视频)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) + + - [ ] 使用线性探测的数组去实现 + - hash(k, m) —— m 是哈希表的大小 + - add(key, value) —— 如果 key 已存在则更新值 - exists(key) - get(key) - remove(key) -## More Knowledge +## 更多的知识 -- ### Binary search - - [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno) - - [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) - - [ ] [detail](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/) - - [ ] Implement: - - binary search (on sorted array of integers) - - binary search using recursion +- ### 二分查找 + - [ ] [二分查找(视频)](https://www.youtube.com/watch?v=D5SrAga1pno) + - [ ] [二分查找(视频)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) + - [ ] [详情](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/) + - [ ] 实现: + - 二分查找(在一个已排序好的整型数组中查找) + - 迭代式二分查找 -- ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32) - - [ ] Get a really good understanding of manipulating bits with: &, |, ^, ~, >>, << - - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - - [ ] Good intro: - [Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I) - - [ ] [C Programming Tutorial 2-10: Bitwise Operators (video)](https://www.youtube.com/watch?v=d0AwjSpNXR0) - - [ ] [Bit Manipulation](https://en.wikipedia.org/wiki/Bit_manipulation) - - [ ] [Bitwise Operation](https://en.wikipedia.org/wiki/Bitwise_operation) +- ### 按位运算 + - [ ] [Bits 速查表](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) + - 你需要知道大量2的倍数其值(从2^1 到 2^16 及 2^32) + - [ ] 好好理解位运操作符的含义:&、|、^、~、>>、<< + - [ ] [字码(words)](https://en.wikipedia.org/wiki/Word_(computer_architecture)) + - [ ] 好的介绍: + [位操作(视频)](https://www.youtube.com/watch?v=7jkIUgLC29I) + - [ ] [C 语言编程教程 2-10:按位运算(视频)](https://www.youtube.com/watch?v=d0AwjSpNXR0) + - [ ] [位操作](https://en.wikipedia.org/wiki/Bit_manipulation) + - [ ] [按位运算](https://en.wikipedia.org/wiki/Bitwise_operation) - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) - - [ ] [The Bit Twiddler](http://bits.stephan-brumme.com/) - - [ ] [The Bit Twiddler Interactive](http://bits.stephan-brumme.com/interactive.html) - - [ ] 2s and 1s complement - - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4) - - [1s Complement](https://en.wikipedia.org/wiki/Ones%27_complement) - - [2s Complement](https://en.wikipedia.org/wiki/Two%27s_complement) - - [ ] count set bits - - [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc) + - [ ] [位元抚弄者(The Bit Twiddler)](http://bits.stephan-brumme.com/) + - [ ] [交互式位元抚弄者(The Bit Twiddler Interactive)](http://bits.stephan-brumme.com/interactive.html) + - [ ] 一补数和补码 + - [二进制:利 & 弊(为什么我们要使用补码)(视频)](https://www.youtube.com/watch?v=lKTsv6iVxV4) + - [一补数(1s Complement)](https://en.wikipedia.org/wiki/Ones%27_complement) + - [补码(2s Complement)](https://en.wikipedia.org/wiki/Two%27s_complement) + - [ ] 计算置位(Set Bits) + - [计算一个字节中置位(Set Bits)的四种方式(视频)](https://youtu.be/Hzuzo9NJrlc) - [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) - - [How To Count The Number Of Set Bits In a 32 Bit Integer](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer) - - [ ] round to next power of 2: - - [Round Up To Next Power Of Two](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) - - [ ] swap values: - - [Swap](http://bits.stephan-brumme.com/swap.html) - - [ ] absolute value: - - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html) + - [如何在一个 32 位的整型中计算置位(Set Bits)的数量](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer) + - [ ] 四舍五入2的幂数: + - [四舍五入到2的下一幂数](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) + - [ ] 交换值: + - [交换(Swap)](http://bits.stephan-brumme.com/swap.html) + - [ ] 绝对值: + - [绝对整型(Absolute Integer)](http://bits.stephan-brumme.com/absInteger.html) -## Trees +## 树 -- ### Trees - Notes & Background - - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - - [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - - basic tree construction - - traversal - - manipulation algorithms - - BFS (breadth-first search) - - [MIT (video)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - - level order (BFS, using queue) - time complexity: O(n) - space complexity: best: O(1), worst: O(n/2)=O(n) - - DFS (depth-first search) - - [MIT (video)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) - - notes: - time complexity: O(n) - space complexity: - best: O(log n) - avg. height of tree - worst: O(n) - - inorder (DFS: left, self, right) - - postorder (DFS: left, right, self) - - preorder (DFS: self, left, right) +- ### 树 —— 笔记 & 背景 + - [ ] [系列:树结构的核心(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) + - [ ] [系列:树(视频)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) + - 基本的树形结构 + - 遍历 + - 操作算法 + - BFS(广度优先检索,breadth-first search) + - [MIT(视频)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - 层序遍历(使用队列的 BFS 算法) + 时间复杂度: O(n) + 空间复杂度:最好情况: O(1),最坏情况:O(n/2)=O(n) + - DFS(深度优先检索,depth-first search) + - [MIT(视频)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + - 笔记: + 时间复杂度:O(n) + 空间复杂度: + 最好情况:O(log n) - 树的平均高度 + 最坏情况:O(n) + - 中序遍历(DFS:左、自己、右) + - 后序遍历(DFS:左、右、自己) + - 先序遍历(DFS:自己、左、右) -- ### Binary search trees: BSTs - - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - - [ ] [Series (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees) - - starts with symbol table and goes through BST applications - - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) - - [ ] [MIT (video)](https://www.youtube.com/watch?v=9Jry5-82I68) +- ### 二叉查找树: BSTs + - [ ] [二叉查找树概览(视频)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [系列(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees) + - 从符号表开始讲到 BST 程序 + - [ ] [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) + - [ ] [MIT(视频)](https://www.youtube.com/watch?v=9Jry5-82I68) - C/C++: - - [ ] [Binary search tree - Implementation in C/C++ (video)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) - - [ ] [BST implementation - memory allocation in stack and heap (video)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) - - [ ] [Find min and max element in a binary search tree (video)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - - [ ] [Find height of a binary tree (video)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) - - [ ] [Binary tree traversal - breadth-first and depth-first strategies (video)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32) - - [ ] [Binary tree: Level Order Traversal (video)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - - [ ] [Binary tree traversal: Preorder, Inorder, Postorder (video)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - - [ ] [Check if a binary tree is binary search tree or not (video)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - - [ ] [Delete a node from Binary Search Tree (video)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) - - [ ] [Inorder Successor in a binary search tree (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - - [ ] Implement: - - [ ] insert // insert value into tree - - [ ] get_node_count // get count of values stored - - [ ] print_values // prints the values in the tree, from min to max + - [ ] [二叉查找树 —— 在 C/C++ 中实现(视频)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) + - [ ] [BST 实现 —— 在堆栈和堆中的内存分配(视频)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) + - [ ] [在二叉查找树中找到最小和最大的元素(视频)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [寻找二叉树的高度(视频)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) + - [ ] [二叉树的遍历 —— 广度优先和深度优先策略(视频)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32) + - [ ] [二叉树:层序遍历(视频)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [二叉树的遍历:先序、中序、后续(视频)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [判断一棵二叉树是否是二叉查找树(视频)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [从二叉查找树中删除一个节点(视频)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) + - [ ] [二叉查找树中序遍历的后继者(视频)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] 实现: + - [ ] insert // 往树上插值 + - [ ] get_node_count // 查找树上的节点数 + - [ ] print_values // 从小到大打印树中节点的值 - [ ] delete_tree - - [ ] is_in_tree // returns true if given value exists in the tree - - [ ] get_height // returns the height in nodes (single node's height is 1) - - [ ] get_min // returns the minimum value stored in the tree - - [ ] get_max // returns the maximum value stored in the tree + - [ ] is_in_tree // 如果值存在于树中则返回 true + - [ ] get_height // 返回节点所在的高度(如果只有一个节点,那么高度则为1) + - [ ] get_min // 返回树上的最小值 + - [ ] get_max // 返回树上的最大值 - [ ] is_binary_search_tree - [ ] delete_value - - [ ] get_successor // returns next-highest value in tree after given value, -1 if none + - [ ] get_successor // 返回给定值的后继者,若没有则返回-1 -- ### Heap / Priority Queue / Binary Heap - - visualized as a tree, but is usually linear in storage (array, linked list) - - [ ] [Heap](https://en.wikipedia.org/wiki/Heap_(data_structure)) - - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) - - [ ] [Naive Implementations (video)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) - - [ ] [Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) - - [ ] [Tree Height Remark (video)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) - - [ ] [Basic Operations (video)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) - - [ ] [Complete Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) - - [ ] [Pseudocode (video)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) - - [ ] [Heap Sort - jumps to start (video)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) - - [ ] [Heap Sort (video)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) - - [ ] [Building a heap (video)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) - - [ ] [MIT: Heaps and Heap Sort (video)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [CS 61B Lecture 24: Priority Queues (video)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) - - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) - - [ ] Implement a max-heap: +- ### 堆 / 优先级队列 / 二叉堆 + - 可视化是一棵树,但通常是以线性的形式存储(数组、链表) + - [ ] [堆](https://en.wikipedia.org/wiki/Heap_(data_structure)) + - [ ] [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) + - [ ] [无知的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) + - [ ] [二叉树(视频)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) + - [ ] [关于树高的讨论(视频)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) + - [ ] [基本操作(视频)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) + - [ ] [完全二叉树(视频)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) + - [ ] [伪代码(视频)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) + - [ ] [堆排序 —— 跳到起点(视频)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) + - [ ] [堆排序(视频)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) + - [ ] [构建一个堆(视频)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) + - [ ] [MIT:堆与堆排序(视频)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [CS 61B Lecture 24:优先级队列(视频)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) + - [ ] [线性时间复杂度的堆构建(大顶堆)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] 实现一个大顶堆: - [ ] insert - - [ ] sift_up - needed for insert - - [ ] get_max - returns the max item, without removing it - - [ ] get_size() - return number of elements stored - - [ ] is_empty() - returns true if heap contains no elements - - [ ] extract_max - returns the max item, removing it - - [ ] sift_down - needed for extract_max - - [ ] remove(i) - removes item at index x - - [ ] heapify - create a heap from an array of elements, needed for heap_sort - - [ ] heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap - - note: using a min heap instead would save operations, but double the space needed (cannot do in-place). + - [ ] sift_up —— 用于插入元素 + - [ ] get_max —— 返回最大值但不移除 + - [ ] get_size() —— 返回存储的元素数量 + - [ ] is_empty() —— 若堆为空则返回 true + - [ ] extract_max —— 返回最大值并移除它 + - [ ] sift_down —— 用于获取最大值元素 + - [ ] remove(i) —— 删除指定索引的元素 + - [ ] heapify —— 构件堆,用于堆排序 + - [ ] heap_sort() —— 拿到一个未排序的数组,然后使用大顶堆进行就地排序 + - 注意:若用小顶堆可节省操作,但导致空间复杂度加倍。(无法做到就地) -- ### Tries - - Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits - to track the path. - - I read through code, but will not implement. - - [ ] [Notes on Data Structures and Programming Techniques](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries) - - [ ] Short course videos: - - [ ] [Introduction To Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) - - [ ] [Performance Of Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) - - [ ] [Implementing A Trie (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) - - [ ] [The Trie: A Neglected Data Structure](https://www.toptal.com/java/the-trie-a-neglected-data-structure) - - [ ] [TopCoder - Using Tries](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/) - - [ ] [Stanford Lecture (real world use case) (video)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) - - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) +- ### 字典树(Tries) + - 需要注意的是,字典树各式各样。有些有前缀,而有些则没有。有些使用字符串而不使用比特位来追踪路径。 + - 阅读代码,但不实现。 + - [ ] [数据结构笔记及编程技术](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries) + - [ ] 短课程视频: + - [ ] [对字典树(Tries)的介绍(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) + - [ ] [字典树(Tries)的性能(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) + - [ ] [实现一棵字典树(Tries)(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) + - [ ] [字典树(Tries):一个被忽略的数据结构](https://www.toptal.com/java/the-trie-a-neglected-data-structure) + - [ ] [高级编程人员 —— 使用字典树(Tries)](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/) + - [ ] [标准教程(现实中的用例)(视频)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) + - [ ] [MIT,高阶数据结构,字符串(可事半功倍)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) -- ### Balanced search trees - - Know least one type of balanced binary tree (and know how it's implemented): - - "Among balanced search trees, AVL and 2/3 trees are now passé, and red-black trees seem to be more popular. - A particularly interesting self-organizing data structure is the splay tree, which uses rotations - to move any accessed key to the root." - Skiena - - Of these, I chose to implement a splay tree. From what I've read, you won't implement a - balanced search tree in your interview. But I wanted exposure to coding one up - and let's face it, splay trees are the bee's knees. I did read a lot of red-black tree code. - - splay tree: insert, search, delete functions - If you end up implementing red/black tree try just these: - - search and insertion functions, skipping delete - - I want to learn more about B-Tree since it's used so widely with very large data sets. - - [ ] [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) +- ### 平衡查找树 + - 掌握至少一种平衡查找树(并懂得如何实现): + - “在各种平衡查找树当中,AVL 和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。 + 这种特别令人感兴趣的数据结构,叫伸展树(splay tree)。该数据结构可自我管理,且会使用轮换来移除任何访问过根节点的 key。 + ” —— Skiena + - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。通过我的阅读,我发现你并不会在你的面试中被要求实现一棵 + 平衡搜索树。但是,我希望胜人一筹,因此让我们来面对该类树的实现吧。伸展树的确是更高质量的一种实现,因为我的确阅读了 + 大量关于红黑树的代码。 + - 伸展树:插入、查找、删除函数的实现 + ,而如果你最终实现了红黑树,那么请尝试一下: + - 跳过删除函数,直接实现搜索和插入功能 + - 我希望能阅读到更多关于 B 树的资料,因为它被广泛地应用到大型的数据集中。 + - [ ] [自我平衡二叉寻找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - - [ ] **AVL trees** - - In practice: - From what I can tell, these aren't used much in practice, but I could see where they would be: - The AVL tree is another structure supporting O(log n) search, insertion, and removal. It is more rigidly - balanced than red–black trees, leading to slower insertion and removal but faster retrieval. This makes it - attractive for data structures that may be built once and loaded without reconstruction, such as language - dictionaries (or program dictionaries, such as the opcodes of an assembler or interpreter). - - [ ] [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) - - [ ] [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - - [ ] [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - - [ ] [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [ ] **AVL 树** + - 实际中: + 我能告诉你的事,该种树在实际中并无太多的用途,但我能看到有用的地方在哪里: + AVL 树是另一种结构,可支持时间复杂度为 O(log n) 的查询、插入及删除。它比红黑树严格意义上更要平衡,从而导致更慢的插入和删除,但遍历快。正因如此,才彰显其结构的魅力。只需要构建一次,就可以在不重新构造的情况下读取,例如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。 + - [ ] [MIT AVL 树 / AVL 树的排序(视频)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) + - [ ] [AVL 树(视频)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) + - [ ] [AVL 树的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) + - [ ] [分离与合并](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) - - [ ] **Splay trees** - - In practice: - Splay trees are typically used in the implementation of caches, memory allocators, routers, garbage collectors, - data compression, ropes (replacement of string used for long text strings), in Windows NT (in the virtual memory, - networking, and file system code) etc. - - [ ] [CS 61B: Splay Trees (video)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) - - [ ] MIT Lecture: Splay Trees: - - Gets very mathy, but watch the last 10 minutes for sure. - - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + - [ ] **伸展树** + - 实际中: + 伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes(字符串的一种替代品,用于存储长串的文本字符)、Windows NT(虚拟内存、网络及文件系统)等的实现。 + - [ ] [CS 61B:伸展树(Splay trees)(视频)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) + - [ ] MIT 教程:伸展树(Splay trees): + - 该教程会过于学术,但请观看到最后的10分钟以确保掌握。 + - [视频](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - - [ ] **2-3 search trees** - - In practice: - 2-3 trees have faster inserts at the expense of slower searches (since height is more compared to AVL trees). - - You would use 2-3 tree very rarely because its implementation involves different types of nodes. Instead, people use Red Black trees. - - [ ] [23-Tree Intuition and Definition (video)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) - - [ ] [Binary View of 23-Tree](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - - [ ] [2-3 Trees (student recitation) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] **2-3查找树** + - 实际中: + 2-3树有着快速的插入,但却有着查询慢的代价(因为相比较 AVL 树来说,其高度更高)。 + - 你会很少用到2-3树。这是因为其实现涉及到不同类型的节点。因此,人们会选择红黑树。 + - [ ] [2-3树的直感与定义(视频)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) + - [ ] [2-3树的二元观点](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [2-3树(学生叙述)(视频)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - [ ] **2-3-4 Trees (aka 2-4 trees)** - - In practice: - For every 2-4 tree, there are corresponding red–black trees with data elements in the same order. The insertion and deletion - operations on 2-4 trees are also equivalent to color-flipping and rotations in red–black trees. This makes 2-4 trees an - important tool for understanding the logic behind red–black trees, and this is why many introductory algorithm texts introduce - 2-4 trees just before red–black trees, even though **2-4 trees are not often used in practice**. - - [ ] [CS 61B Lecture 26: Balanced Search Trees (video)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) - - [ ] [Bottom Up 234-Trees (video)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - - [ ] [Top Down 234-Trees (video)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) + - [ ] **2-3-4树 (亦称2-4树)** + - 实际中: + 对于每一棵2-4树,都有着对应的红黑树来存储同样顺序的数据元素。在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。这就是为什么许多算法引导文章都会在介绍红黑树之前,先介绍2-4树,尽管**2-4树在实际中并不经常使用**。 + - [ ] [CS 61B Lecture 26:平衡查找树(视频)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) + - [ ] [自底向上的2-4树(视频)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [自顶向下的2-4树(视频)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) - - [ ] **B-Trees** - - fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor) - - In Practice: - B-Trees are widely used in databases. Most modern filesystems use B-trees (or Variants). In addition to - its use in databases, the B-tree is also used in filesystems to allow quick random access to an arbitrary - block in a particular file. The basic problem is turning the file block i address into a disk block - (or perhaps to a cylinder-head-sector) address. - - [ ] [B-Tree](https://en.wikipedia.org/wiki/B-tree) - - [ ] [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) - - [ ] [B-Tree Definition and Insertion (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - - [ ] [B-Tree Deletion (video)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - - [ ] [MIT 6.851 - Memory Hierarchy Models (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - - covers cache-oblivious B-Trees, very interesting data structures - - the first 37 minutes are very technical, may be skipped (B is block size, cache line size) + - [ ] **B 树** + - 有趣的是:为啥叫 B 仍然是一个神秘,因为 B 可代表波音(Boeing)、平衡(Balanced)或 Bayer(联合创造者) + - 实际中: + B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中,B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。 + - [ ] [B 树](https://en.wikipedia.org/wiki/B-tree) + - [ ] [B 树的介绍(视频)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) + - [ ] [B 树的定义及其插入操作(视频)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [B 树的删除操作(视频)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [MIT 6.851 —— 内存层次模块(Memory Hierarchy Models)(视频)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + - 覆盖有高速缓存参数无关型(cache-oblivious) B 树和非常有趣的数据结构 + - 头37分钟讲述的很专业,或许可以跳过(B 指块的大小、即缓存行的大小) - - [ ] **Red/black trees** - - In practice: - Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time. - Not only does this make them valuable in time-sensitive applications such as real-time applications, - but it makes them valuable building blocks in other data structures which provide worst-case guarantees; - for example, many data structures used in computational geometry can be based on red–black trees, and - the Completely Fair Scheduler used in current Linux kernels uses red–black trees. In the version 8 of Java, - the Collection HashMap has been modified such that instead of using a LinkedList to store identical elements with poor - hashcodes, a Red-Black tree is used. - - [ ] [Aduni - Algorithms - Lecture 4 - (link jumps to starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) - - [ ] [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) - - [ ] [Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) - - [ ] [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red-black-trees/) + - [ ] **红黑树** + - 实际中: + 红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用。而且,还对在其他数据结构中构建块非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 系统所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。在 Java 的版本8中,红黑树也被用于存储哈希列表集合中相同的数据,而不是使用链表及哈希码。 + - [ ] [Aduni —— 算法 —— 课程4(该链接直接跳到开始部分)(视频)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) + - [ ] [Aduni —— 算法 —— 课程5(视频)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) + - [ ] [黑树(Black Tree)](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) + - [ ] [二分查找及红黑树的介绍](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red-black-trees/) -- ### N-ary (K-ary, M-ary) trees - - note: the N or K is the branching factor (max branches) - - binary trees are a 2-ary tree, with branching factor = 2 - - 2-3 trees are 3-ary - - [ ] [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) +- ### N 叉树(K 叉树、M 叉树) + - 注意:N 或 K 指的是分支系数(即树的最大分支数): + - 二叉树是一种分支系数为2的树 + - 2-3树是一种分支系数为3的树 + - [ ] [K 叉树](https://en.wikipedia.org/wiki/K-ary_tree) ## Sorting @@ -848,7 +811,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - how is tail recursion better than not? - [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) - [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) - + - ### Dynamic Programming - This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky. - I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved. @@ -863,7 +826,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [Simonson: Dynamic programming II - Lecture 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) - [ ] List of individual DP problems (each is short): [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - - [ ] Yale Lecture notes: + - [ ] Yale Lecture notes: - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) - [ ] Coursera: - [ ] [The RNA secondary structure problem (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) @@ -949,7 +912,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) - Scalability and System Design are very large topics with many topics and resources, since there is a lot to consider + Scalability and System Design are very large topics with many topics and resources, since there is a lot to consider when designing a software/hardware system that can scale. Expect to spend quite a bit of time on this. - ### System Design, Scalability, Data Handling @@ -977,14 +940,14 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html) - [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk) - [ ] [A plain english introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) - - [ ] Paxos Consensus algorithm: + - [ ] Paxos Consensus algorithm: - [short video](https://www.youtube.com/watch?v=s8JqcZtvnsM) - [extended video with use case and multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o) - [paper](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] [Optional: UML 2.0 Series (vido)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] OOSE: Software Dev Using UML and Java (21 videos): + - [ ] OOSE: Software Dev Using UML and Java (21 videos): - Can skip this if you have a great grasp of OO and OO design practices. - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - [ ] SOLID OOP Principles: @@ -997,7 +960,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) - - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use + - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects. @@ -1005,7 +968,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) - [ ] Scalability: - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) - - [ ] Short series: + - [ ] Short series: - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) - [Database](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) - [Cache](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) @@ -1164,7 +1127,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th --- -## Final Review +## Final Review This section will have shorter videos that can you watch pretty quickly to review most of the important concepts. It's nice if you want a refresher often. @@ -1180,7 +1143,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th #### Sorts: - [ ] Merge Sort: https://www.youtube.com/watch?v=GCae1WNvnZM - + ## Books @@ -1207,7 +1170,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - If you see people reference "The Google Resume", it was a book replaced by "Cracking the Coding Interview". -### Additional books +### Additional books These were not suggested by Google but I added because I needed the background knowledge @@ -1226,7 +1189,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - Half.com is a great resource for textbooks at good prices. - + - [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - all code is in C++, if you're looking to use C++ in your interview - good book on problem solving in general. @@ -1279,7 +1242,7 @@ Programming: Think of about 20 interview questions you'll get, along the lines of the items below. Have 2-3 answers for each Have a story, not just data, about something you accomplished - + - Why do you want this job? - What's a tough problem you've solved? - Biggest challenges faced? @@ -1321,9 +1284,9 @@ You're never really done. ***************************************************************************************************** ***************************************************************************************************** - - Everything below this point is optional. These are my recommendations, not Google's. - By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for + + Everything below this point is optional. These are my recommendations, not Google's. + By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for any software engineering job. ***************************************************************************************************** @@ -1385,7 +1348,7 @@ You're never really done. - [ ] [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) - [ ] [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) - [ ] [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through) - - See more in MIT 6.050J Information and Entropy series below. + - See more in MIT 6.050J Information and Entropy series below. - ### Parity & Hamming Code (videos) - [ ] [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) @@ -1409,7 +1372,7 @@ You're never really done. - ### Compression - make sure to watch information theory videos first - - [ ] Computerphile (videos): + - [ ] Computerphile (videos): - [ ] [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w) - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko) - [ ] [Upside Down Trees (Huffman Trees)](https://www.youtube.com/watch?v=umTbivyJoiI) @@ -1551,13 +1514,13 @@ You're never really done. - ### Math for Fast Processing - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg) - + - ### Treap - Combination of a binary search tree and a heap - [ ] [Treap](https://en.wikipedia.org/wiki/Treap) - [ ] [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8) - [ ] [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) - + - ### Linear Programming (videos) - [ ] [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ) - [ ] [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U) @@ -1661,7 +1624,7 @@ Sit back and enjoy. "netflix and skill" :P - [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)]( https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) - [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) - + - [ ] [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - [ ] [UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr) @@ -1693,11 +1656,10 @@ Sit back and enjoy. "netflix and skill" :P - [ ] [Introduction to Cryptography](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be) - [more in series (not in order)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) - + - [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) ## Computer Science Courses - [Directory of Online CS Courses](https://github.com/open-source-society/computer-science) - [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses) - From a382e851db9aee042deb5921b9ff409d28310c9d Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 22:40:28 +0800 Subject: [PATCH 03/61] modification --- README-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README-cn.md b/README-cn.md index 4110eb7..b001b0f 100644 --- a/README-cn.md +++ b/README-cn.md @@ -2,11 +2,11 @@ ## 这是? -这是我为了从 web 开发者(自学、非 CS 学位)蜕变至 Google 软件工程师所制定的计划,其内容历时数月。 +这是我为了从 web 开发者(自学、非计算机科学学位)蜕变至 Google 软件工程师所制定的计划,其内容历时数月。 ![白板上编程 ———— 来自 HBO 频道的剧集,“硅谷”](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) -这一长列表是从 **Google 的指导笔记** 中萃取出来并进行扩展。因此,有些事情你必须去了解一下。我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题。这些额外项大部分是来自 Steve Yegge 的“[得到在 Google 工作的机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)”,且有时会在 Google 指导笔记的逐字间反映出来。 +这一长列表是从 **Google 的指导笔记** 中萃取出来并进行扩展。因此,有些事情你必须去了解一下。我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题。这些额外项大部分是来自于 Steve Yegge 的“[得到在 Google 工作的机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)”。在 Google 指导笔记的逐字间,它们有时会被反映出来。 --- From 5032c8fcc2c7d65b739ed64c918091dba3b136c0 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 22:41:16 +0800 Subject: [PATCH 04/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index b001b0f..32d2c6d 100644 --- a/README-cn.md +++ b/README-cn.md @@ -6,7 +6,7 @@ ![白板上编程 ———— 来自 HBO 频道的剧集,“硅谷”](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) -这一长列表是从 **Google 的指导笔记** 中萃取出来并进行扩展。因此,有些事情你必须去了解一下。我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题。这些额外项大部分是来自于 Steve Yegge 的“[得到在 Google 工作的机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)”。在 Google 指导笔记的逐字间,它们有时会被反映出来。 +这一长列表是从 **Google 的指导笔记** 中萃取出来并进行扩展。因此,有些事情你必须去了解一下。我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题。这些额外项大部分是来自于 Steve Yegge 的“[得到在 Google 工作的机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)”。而在 Google 指导笔记的逐字间,它们有时也会被反映出来。 --- From b4b6447126eb8fe10e150d3a0ee5c2616d318cdc Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 22:47:58 +0800 Subject: [PATCH 05/61] modification --- README-cn.md | 60 ++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/README-cn.md b/README-cn.md index 32d2c6d..6ead303 100644 --- a/README-cn.md +++ b/README-cn.md @@ -12,36 +12,36 @@ ## 目录 -- [这是?](#what-is-it) -- [为何要用到它?](#why-use-it) -- [如何使用它](#how-to-use-it) -- [拥有一名 Googler 的心态](#get-in-a-googley-mood) -- [我得到了工作吗?](#did-i-get-the-job) -- [跟随着我](#follow-along-with-me) -- [不要自以为自己足够聪明](#dont-feel-you-arent-smart-enough) -- [关于 Google](#about-google) -- [相关视频资源](#about-video-resources) -- [面试过程 & 通用的面试准备](#interview-process--general-interview-prep) -- [为你的面试选择一种语言](#pick-one-language-for-the-interview) -- [在你开始之前](#before-you-get-started) -- [你所看不到的](#what-you-wont-see-covered) -- [日常计划](#the-daily-plan) -- [必备知识](#prerequisite-knowledge) -- [算法复杂度 / Big-O / 渐进分析法](#algorithmic-complexity--big-o--asymptotic-analysis) -- [数据结构](#data-structures) - - [数组](#arrays) - - [链表](#linked-lists) - - [堆栈](#stack) - - [队列](#queue) - - [哈希表](#hash-table) -- [更多的知识](#more-knowledge) - - [二分查找](#binary-search) - - [按位运算](#bitwise-operations) -- [树](#trees) - - [树 —— 笔记 & 背景](#trees---notes--background) - - [二叉查找树: BSTs](#binary-search-trees-bsts) - - [堆 / 优先级队列 / 二叉堆](#heap--priority-queue--binary-heap) - - [字典树(Tries)](#tries) +- [这是?](#这是) +- [为何要用到它?](#为何要用到它) +- [如何使用它](#如何使用它) +- [拥有一名 Googler 的心态](#拥有一名-Googler-的心态) +- [我得到了工作吗?](#我得到了工作吗) +- [跟随着我](#跟随着我) +- [不要自以为自己足够聪明](#不要自以为自己足够聪明) +- [关于 Google](#[关于-Google) +- [相关视频资源](#相关视频资源) +- [面试过程 & 通用的面试准备](#面试过程--通用的面试准备) +- [为你的面试选择一种语言](#为你的面试选择一种语言) +- [在你开始之前](#在你开始之前) +- [你所看不到的](#你所看不到的) +- [日常计划](#日常计划) +- [必备知识](#必备知识) +- [算法复杂度 / Big-O / 渐进分析法](#算法复杂度--big-o--渐进分析法) +- [数据结构](#数据结构) + - [数组](#数组) + - [链表](#链表) + - [堆栈](#堆栈) + - [队列](#队列) + - [哈希表](#哈希表) +- [更多的知识](#更多的知识) + - [二分查找](#二分查找) + - [按位运算](#按位运算) +- [树](#树) + - [树 —— 笔记 & 背景](#树--笔记--背景) + - [二叉查找树:BSTs](#二叉查找树-bstss) + - [堆 / 优先级队列 / 二叉堆](#堆--优先级队列--二叉堆) + - [字典树(Tries)](#字典树tries) - [平衡查找树](#balanced-search-trees) - [N 叉树(K 叉树、M 叉树)](#n-ary-k-ary-m-ary-trees) - [Sorting](#sorting) From cdbc856ca636f7dbed5f68b4c8d5e7d29ecd225b Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 22:48:27 +0800 Subject: [PATCH 06/61] modification --- README-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README-cn.md b/README-cn.md index 6ead303..06c110d 100644 --- a/README-cn.md +++ b/README-cn.md @@ -42,8 +42,8 @@ - [二叉查找树:BSTs](#二叉查找树-bstss) - [堆 / 优先级队列 / 二叉堆](#堆--优先级队列--二叉堆) - [字典树(Tries)](#字典树tries) - - [平衡查找树](#balanced-search-trees) - - [N 叉树(K 叉树、M 叉树)](#n-ary-k-ary-m-ary-trees) + - [平衡查找树](#平衡查找树) + - [N 叉树(K 叉树、M 叉树)](#n-叉树k-叉树m-叉树) - [Sorting](#sorting) - [Graphs](#graphs) - [Even More Knowledge](#even-more-knowledge) From 402dfcd41a86c16cea33a63decf7f264f86eff0b Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 22:54:54 +0800 Subject: [PATCH 07/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 06c110d..513582e 100644 --- a/README-cn.md +++ b/README-cn.md @@ -15,7 +15,7 @@ - [这是?](#这是) - [为何要用到它?](#为何要用到它) - [如何使用它](#如何使用它) -- [拥有一名 Googler 的心态](#拥有一名-Googler-的心态) +- [拥有一名 Googler 的心态](#拥有一名-googler-的心态) - [我得到了工作吗?](#我得到了工作吗) - [跟随着我](#跟随着我) - [不要自以为自己足够聪明](#不要自以为自己足够聪明) From 6d6a5c5ac6e249798ea31ca507727112d1c4b058 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 22:56:24 +0800 Subject: [PATCH 08/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 513582e..55bdb08 100644 --- a/README-cn.md +++ b/README-cn.md @@ -19,7 +19,7 @@ - [我得到了工作吗?](#我得到了工作吗) - [跟随着我](#跟随着我) - [不要自以为自己足够聪明](#不要自以为自己足够聪明) -- [关于 Google](#[关于-Google) +- [关于 Google](#关于-google) - [相关视频资源](#相关视频资源) - [面试过程 & 通用的面试准备](#面试过程--通用的面试准备) - [为你的面试选择一种语言](#为你的面试选择一种语言) From 97209bae2914292e26fe268e8987518065728fef Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:05:55 +0800 Subject: [PATCH 09/61] modification --- README-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README-cn.md b/README-cn.md index 55bdb08..04af64a 100644 --- a/README-cn.md +++ b/README-cn.md @@ -110,9 +110,9 @@ 我一直都是遵循该计划去准备 Google 的面试。自 1997 年以来,我一直从事于 web 程序的构建、服务器的构建及创业型公司的创办。对于只有着一个经济学学位,而不是计算机科学学位(CS degree)的我来说,在职业生涯中所取得的都非常成功。然而,我想在 Google 工作,并进入大型系统中,真正地去理解计算机系统、算法效率、数据结构性能、低级别编程语言及其工作原理。可一项都不了解的我,怎么会被 Google 所应聘呢? -当我创建该项目时,我从一个栈到一个堆都并不了解。不懂得 Big-O 的任何东西、关于树的一切,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的并非十分巧妙。一直以来,任何我所用的数据结构都是内建于编程语言当中。至于它们在背后如何运作,我都一概不了解。此外,我并不需要管理内存。最多就是在一个正在执行的进程给出了“内存不足”的错误后,采取一些权变措施。在我的生活中,我甚少使用到多维的数组,可关联数组却成千上万。而且,从开始到现在,我都还未曾创建过数据结构。 +当我创建该项目时,我从一个堆栈到一个堆都不了解。那时的我,完全不了解 Big-O 、树,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的肯定是很糟糕。一直以来,我所用的任何数据结构都是内建于编程语言当中。至于它们在背后是如何运作,对此我一概不清楚。此外,以前的我并不需要对内存进行管理,最多就只是在一个正在执行的进程抛出了“内存不足”的错误后,采取一些权变措施。而在我的编程生活中,也甚少使用到多维数组,可关联数组却成千上万。而且,从一开始到现在,我都还未曾自己实现过数据结构。 -然而,经过该学习计划,我已有足够的信心认为我能被 Google 所雇佣。这是一个花费了我数月的计划,若您已对大部分知识都熟悉的话,或许能节省大量的时间。 +就是这样的我,在经过该学习计划后,已然对被 Google 所雇佣充满信心。这是一个漫长的计划,以至于花费了我数月的时间。若您早已熟悉大部分的知识,那么也许能节省大量的时间。 ## 如何使用它 From 131fb743117231c4e74171c3fff6bf50bbd887d7 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:08:41 +0800 Subject: [PATCH 10/61] modification --- README-cn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README-cn.md b/README-cn.md index 04af64a..9ca0774 100644 --- a/README-cn.md +++ b/README-cn.md @@ -116,13 +116,13 @@ ## 如何使用它 -下面所有的东西都是一个概述,而你需要根据从上到下的顺序逐一处理。 +下面所有的东西都只是一个概述。因此,你需要由上而下逐一地去处理它。 -在学习过程中,我是使用 GitHub 特殊的 markdown flavor 语法去检查计划的进展,包括使用任务列表。 +在学习过程中,我是使用 GitHub 特殊的语法特性 markdown flavor 去检查计划的进展,包括使用任务列表。 -- [x] 创建一个新的分支,以使得你可以像这样去检查每项。直接往方括号中填写一个字符 x:[x] +- [x] 创建一个新的分支,以使得你可以像这样去检查计划的进展。直接往方括号中填写一个字符 x 即可:[x] -[关于 Github-flavored markdown 更多的详情](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +[更多关于 Github-flavored markdown 的详情](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) ## 拥有一名 Googler 的心态 From 10345accd4a3b08c42bcf8c561940110a3a60a62 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:11:38 +0800 Subject: [PATCH 11/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 9ca0774..92ba5c2 100644 --- a/README-cn.md +++ b/README-cn.md @@ -134,7 +134,7 @@ 我还没去应聘。 -因为我离完成学习(完成该疯狂的计划列表)还需要数天的时间,并打算在下周开始用一整天的时间,以编程的方式去解决问题,而这将持续数周时间。然后,我才通过二月时得到的一个介绍资格去正式应聘(没错,是二月时得到的)。 +因为我离完成学习(完成该疯狂的计划列表)还需要数天的时间,并打算在下周开始用一整天的时间,以编程的方式去解决问题。当然,这将会持续数周的时间。然后,我才通过使用在二月份所得到的一个介绍资格,去正式应聘 Google(没错,是二月份时就得到的)。 感谢 JP 的这次介绍。 From 0776cb042fcdb417602e43c7fa2f3d6ff3803c4c Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:12:38 +0800 Subject: [PATCH 12/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 92ba5c2..f10e5d5 100644 --- a/README-cn.md +++ b/README-cn.md @@ -140,7 +140,7 @@ ## 跟随着我 -目前我仍在该计划的执行过程中,如果,你想跟随我的脚步去学习,你可以登进我在 [GoogleyAsHeck.com](https://googleyasheck.com/) 上所写的博客。 +目前我仍在该计划的执行过程中,如果你想跟随我脚步去学习的话,可以登进我在 [GoogleyAsHeck.com](https://googleyasheck.com/) 上所写的博客。 下面是我的联系方式: From ba0aa65f8e1dbb4665817a2b7951aebed240abcc Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:13:29 +0800 Subject: [PATCH 13/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index f10e5d5..93b136d 100644 --- a/README-cn.md +++ b/README-cn.md @@ -153,7 +153,7 @@ ## 不要自以为自己足够聪明 -- Google 的工程师都是才智过人的。但是,就算是工作在 Google 的他们,仍然会因为自己不够聪明而感到一种不安全感。 +- Google 的工程师都是才智过人的。但是,就算是工作在 Google 的他们,仍然会因为自己不够聪明而感到一种不安。 - [天才程序员的神话](https://www.youtube.com/watch?v=0SARbwvhupQ) ## 关于 Google From e6848ab34e1d2e247a60e83cbf5ef936076a5884 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:14:06 +0800 Subject: [PATCH 14/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 93b136d..57be815 100644 --- a/README-cn.md +++ b/README-cn.md @@ -165,7 +165,7 @@ - [ ] [Google 检索的原理](https://www.google.com/insidesearch/howsearchworks/) - [ ] [Google 检索的原理 —— Matt Cutts(视频)](https://www.youtube.com/watch?v=BNHR6IQJGZs) - [ ] [Google 是如何改善其检索算法(视频)](https://www.youtube.com/watch?v=J5RZOU6vK4Q) -- [ ] 连载小说: +- [ ] 系列文章: - [ ] [Google 检索是如何处理移动设备](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9) - [ ] [Google 用于寻找需求的秘密研究](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf) - [ ] [Google 检索将成为你的下一个大脑](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523) From e1f5a3316e2bea41ecc6d9b93809518d4a08086b Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:16:42 +0800 Subject: [PATCH 15/61] modification --- README-cn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README-cn.md b/README-cn.md index 57be815..ffa62b6 100644 --- a/README-cn.md +++ b/README-cn.md @@ -167,17 +167,17 @@ - [ ] [Google 是如何改善其检索算法(视频)](https://www.youtube.com/watch?v=J5RZOU6vK4Q) - [ ] 系列文章: - [ ] [Google 检索是如何处理移动设备](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9) - - [ ] [Google 用于寻找需求的秘密研究](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf) + - [ ] [Google 为了寻找大众需求的秘密研究](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf) - [ ] [Google 检索将成为你的下一个大脑](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523) - - [ ] [Demis Hassabis 的心灵深处](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a) + - [ ] [Demis Hassabis 的心灵直白](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a) - [ ] [书籍:Google 公司是如何运作的](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344) - [ ] [由 Google 通告所制作 —— 2016年10月(视频)](https://www.youtube.com/watch?v=q4y0KOeXViI) ## 相关视频资源 -部分视频只能通过在 Coursera、Edx 或 Lynda.com class 上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。虽然,它们是免费观看。但是,部分课程可能不在该期间。因此,你需要多等待几个月。 +部分视频只能通过在 Coursera、Edx 或 Lynda.com class 上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。即便是免费观看,部分课程可能会由于不在时间段内而无法获取。因此,你需要多等待几个月。 - 我很感谢您能帮我把网络公开课程的视频链接转换成公开的视频源,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。 + 很感谢您能帮我把网络公开课程的视频链接转换成公开的视频源,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。 ## 面试过程 & 通用的面试准备 From 12f9b323e14874be6a4120cf9159af8df02f7661 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:21:21 +0800 Subject: [PATCH 16/61] modification --- README-cn.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README-cn.md b/README-cn.md index ffa62b6..5f60d9f 100644 --- a/README-cn.md +++ b/README-cn.md @@ -193,17 +193,17 @@ - [ ] _(早已过期)_ [如何得到 Google 的一份工作,面试题,应聘过程](http://dondodge.typepad.com/the_next_big_thing/2010/09/how-to-get-a-job-at-google-interview-questions-hiring-process.html) - [ ] [手机设备屏幕的问题](http://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions) -- [ ] 附加的(虽然 Google 不建议,但我添加上来): - - [ ] [ABC:总处于编程状态(Always Be Coding)](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - - [ ] [四步成为 Google 一名没有学位的员工](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) +- [ ] 附加的(虽然 Google 不建议,但我还是添加在此): + - [ ] [ABC:永远都要去编程(Always Be Coding)](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) + - [ ] [四步成为 Google 里一名没有学位的员工](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) - [ ] [共享白板(Whiteboarding)](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) - [ ] [Google 是如何看待应聘、管理和公司文化](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture) - [ ] [程序开发面试中有效的白板(Whiteboarding)](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - - [ ] 震撼程序开发的面试第一集: - - [ ] [Gayle L McDowell —— 震撼程序开发的面试(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) - - [ ] [震撼程序开发的面试 —— 作者 Gayle Laakmann McDowell(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ) + - [ ] 震撼开发类面试 第一集: + - [ ] [Gayle L McDowell —— 震撼开发类面试(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [震撼开发类面试 —— 作者 Gayle Laakmann McDowell(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ) - [ ] 如何在世界四强企业中获得一份工作: - - [ ] [“如何在世界四强企业中获得一份工作 —— Amazon、Facebook、Google和Microsoft”(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8) + - [ ] [“如何在世界四强企业中获得一份工作 —— Amazon、Facebook、Google 和 Microsoft”(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [ ] [面试 Google 失败](http://alexbowe.com/failing-at-google-interviews/) ## 为你的面试选择一种语言 From a49eb05071fb2fc734448f75248684bf9158fd50 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:29:26 +0800 Subject: [PATCH 17/61] modification --- README-cn.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README-cn.md b/README-cn.md index 5f60d9f..b236634 100644 --- a/README-cn.md +++ b/README-cn.md @@ -210,7 +210,7 @@ 在这,我就以下话题写一篇短文 —— [重点:为在 Google 的面试选择一种语言](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/) -在大多数公司面试中的编程环节,你可以使用一种用起来较为舒适的语言。但在 Google,只有三种固定的选择: +在大多数公司的面试当中,你可以在编程这一环节,使用一种自己用起来较为舒适的语言去完成编程。但在 Google,你只有三种固定的选择: - C++ - Java @@ -223,7 +223,7 @@ 你需要对你所选择的语言感到非常舒适且足够了解。 -关于选择的更多阅读: +更多关于语言选择的阅读: - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ - http://blog.codingforinterviews.com/best-programming-language-jobs/ @@ -231,30 +231,30 @@ [在此查看相关语言的资源](programming-language-resources.md) -由于,我正在学习C、C++ 和 Python,因此,在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。 +由于,我正在学习C、C++ 和 Python。因此,在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。 ## 在你开始之前 -该列表已经持续更新了很长时间,所以没错,它的确容易会失去控制。 +该列表已经持续更新了很长的一段时间,所以,我们的确很容易会对其失去控制。 -这里列出一些我所犯过的错误,希望您不要重滔覆辙。 +这里列出了一些我所犯过的错误,希望您不要重滔覆辙。 ### 1. 你不可能把所有的东西都记住 -我查看了数小时的视频,并记录了大量的笔记。可几个月后,我都忘却了其中的大部分东西。所以,我翻阅我的笔记,并将可回顾的东西制作成抽认卡(flashcard)(请往下看) +就算我查看了数小时的视频,并记录了大量的笔记。几个月后的我,仍然会忘却其中大部分的东西。所以,我翻阅了我的笔记,并将可回顾的东西制作成抽认卡(flashcard)(请往下看) ### 2. 使用抽认卡 -为了解决善忘的问题,我制作了一些抽认卡页面,用于添加两种抽认卡:正常的及带代码的。每种卡都会有不同的格式设计。 +为了解决善忘的问题,我制作了一些关于抽认卡的页面,用于添加两种抽认卡:正常的及带有代码的。每种卡都会有不同的格式设计。 -而且,我还以移动设备优先去设计网页,以使得在任何地方,我都可以在我的手机及平板上回顾知识。 +而且,我还以移动设备为先去设计这些网页,以使得在任何地方的我,都能通过我的手机及平板去回顾知识。 -你也可以免费制作数以你自己的网站: +你也可以免费制作属于你自己的抽认卡网站: - [抽认卡页面的代码仓库](https://github.com/jwasham/computer-science-flash-cards) -- [我的抽认卡数据库](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):有一点需要记住的是,我做事有点过头,以至于把卡片覆盖到所有的东西上。从汇编语言和 Python 的细枝末节,到机器学习和统计。这种性格对于 Google 的要求来说,是的确有点多余。 +- [我的抽认卡数据库](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):有一点需要记住的是,我做事有点过头,以至于把卡片都覆盖到所有的东西上。从汇编语言和 Python 的细枝末节,乃至到机器学习和统计都被覆盖到卡片上。而这种做法,对于 Google 的要求来说,却是多余。 -**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,不要急着把其标注成“已懂”。你需要做的是去查看是否有同样的抽认卡,并在你真正懂得如何解决问题之前,多问自己几次。重复地问答可帮助您深刻记住该知识点。 +**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已懂”。你需要做的,是去查看一下是否有同样的抽认卡,并在你真正懂得如何解决问题之前,多问自己几次。重复地问答可帮助您深刻记住该知识点。 ### 3. 回顾,回顾,回顾 From 8c0b88e2993d7f62916cd6cf06ebebe50b083859 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:31:42 +0800 Subject: [PATCH 18/61] modification --- README-cn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README-cn.md b/README-cn.md index b236634..842fde0 100644 --- a/README-cn.md +++ b/README-cn.md @@ -260,19 +260,19 @@ 我留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的小抄纸,以便在空余的时候可以学习。 -每编程半个小时就要休息一下,并去回顾一下你的抽认卡。 +每编程半个小时就要休息一下,并去回顾你的抽认卡。 ### 4. 专注 -在学习的过程中,往往会有许多令人分心的事情占据着我们宝贵的时间。因此,专注和集中注意力是非常的苦难的。 +在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。因此,专注和集中注意力是非常困难的。 ## 你所看不到的 -由于,这个巨大的列表是始于一个从 Google 面试指导笔记所形成的的个人事件处理列表。因此,有一些我熟悉且普遍的技术都未被谈及到: +由于,这个巨大的列表一开始是作为我个人从 Google 面试指导笔记所形成的一个事件处理列表。因此,有一些我熟悉且普遍的技术在此都未被谈及到: - SQL - Javascript -- HTML, CSS, and other front-end technologies +- HTML、CSS 和其他前端技术 ## 日常计划 From 532dc8e44009913f9179781e8413461a65ca33d8 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:37:02 +0800 Subject: [PATCH 19/61] modification --- README-cn.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README-cn.md b/README-cn.md index 842fde0..0dc6fc3 100644 --- a/README-cn.md +++ b/README-cn.md @@ -276,23 +276,23 @@ ## 日常计划 -部分问题可能会花费一天去学习,而部分则会花费都天。有些学习,则不需要使用代码去实现。 +部分问题可能会花费一天的时间去学习,而部分则会花费多天。当然,有些学习并不需要我们懂得如何实现。 -因此,每一天我都会在下面所列出的列表中选择一个问题,并查看相关的视频。然后,使用以下的一种语言去实现: +因此,每一天我都会在下面所列出的列表中选择一项,并查看相关的视频。然后,使用以下的一种语言去实现: C —— 使用结构体和函数,该函数会接受一个结构体指针 * 及其他数据作为参数。 - C++ —— 不适用内建的数据类型。 - C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来充当一个链表。 - Python —— 使用内建的数据类型(为了持续连续 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。 - 此外,你也可以使用 Java 或其他语言,这只是我的偏好而已。 + C++ —— 不使用内建的数据类型。 + C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来作为链表。 + Python —— 使用内建的数据类型(为了持续练习 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。 + 此外,你也可以使用 Java 或其他语言。以上只是我的个人偏好而已。 -为何要在这些语言上都编程一次? +为何要在这些语言上分别实现一次? - 因为可以练习,练习,练习,直至我已厌倦它,并毫无问题地完成它。(若有部分边缘条件没想到时,则用书写的形式记录下来并去记忆) + 因为可以练习,练习,练习,直至我厌倦它,并完美地实现出来。(若有部分边缘条件没想到时,我会用书写的形式记录下来并去记忆) 因为可以在纯原生的条件下工作(不需垃圾回收机制的帮助下,分配/释放内存(除了 Python)) - 因为可以利用上内建的数据类型,以使得我拥有在现实世界中使用内建工具的经验(在生产环境中,不会去编码实现自己的链表) + 因为可以利用上内建的数据类型,以使得我拥有在现实中使用内建工具的经验(在生产环境中,我不会去实现自己的链表) -就算我没有时间去每一项都这么做,我也会尽我所能的。 +就算我没有时间去每一项都这么做,但我也会尽我所能的。 在这里,你可以查看到我的代码: - [C] (https://github.com/jwasham/practice-c) @@ -301,7 +301,7 @@ 你不需要记住每一个算法的内部原理。 -在一个白板上写代码,而不要在一台计算机上编写。在测试完部分简单输入后,到计算机上再测试一下。 +在一个白板上写代码,而不要直接在计算机上编写。在测试完部分简单的输入后,到计算机上再测试一遍。 ## 必备知识 From 641a6861a266af3c8f3da2e2974fbd0e48ef1179 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:39:06 +0800 Subject: [PATCH 20/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 0dc6fc3..f455b77 100644 --- a/README-cn.md +++ b/README-cn.md @@ -332,7 +332,7 @@ - [ ] [渐进性(Asymptotics)(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/61) - [ ] [UC Berkeley Big O(视频)](https://youtu.be/VIS4YDpuP98) - [ ] [UC Berkeley Big Omega(视频)](https://youtu.be/ca3e7UVmeUc) -- [ ] [摊提法分析(Amortized Analysis)(视频)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [平摊分析法(Amortized Analysis)(视频)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) - [ ] [举证“Big O”(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/63) - [ ] TopCoder (includes recurrence relations and master theorem): - [计算性复杂度:第一部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) From a21d3caa28958ee2a3d312c09df7d89d9f22da3a Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:40:08 +0800 Subject: [PATCH 21/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index f455b77..c89aa88 100644 --- a/README-cn.md +++ b/README-cn.md @@ -334,7 +334,7 @@ - [ ] [UC Berkeley Big Omega(视频)](https://youtu.be/ca3e7UVmeUc) - [ ] [平摊分析法(Amortized Analysis)(视频)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) - [ ] [举证“Big O”(视频)](https://class.coursera.org/algorithmicthink1-004/lecture/63) -- [ ] TopCoder (includes recurrence relations and master theorem): +- [ ] 高级编程(包括递归关系和主定理): - [计算性复杂度:第一部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) - [计算性复杂度:第二部](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) - [ ] [速查表(Cheat sheet)](http://bigocheatsheet.com/) From be429e7d547bab133c14158ba3c9a3bd74b6c5db Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:43:15 +0800 Subject: [PATCH 22/61] modification --- README-cn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README-cn.md b/README-cn.md index c89aa88..c6176e9 100644 --- a/README-cn.md +++ b/README-cn.md @@ -344,10 +344,10 @@ ## 数据结构 - ### 数组 - - 实现一个自动调整大小的动态数组。 + - 实现一个可自动调整大小的动态数组。 - [ ] 介绍: - [数组(视频)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [基础数组(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) + - [数组的基础知识(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) - [多维数组(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html) - [动态数组(视频)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [不规则数组(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) @@ -364,10 +364,10 @@ - [ ] push(item) - [ ] insert(index, item) —— 在指定索引中插入元素,并把后面的元素依次后移 - [ ] prepend(item) —— 可以使用上面的 insert 函数,传参 index 为 0 - - [ ] pop() —— 删除在数组末端元素,并返回其值 + - [ ] pop() —— 删除在数组末端的元素,并返回其值 - [ ] delete(index) —— 删除指定索引的元素,并把后面的元素依次前移 - [ ] remove(item) —— 删除指定值的元素,并返回其索引(即使有多个元素) - - [ ] find(item) —— 寻找指定值的元素并返回其中第一个出现的元素其索引,若未找到则 + - [ ] find(item) —— 寻找指定值的元素并返回其中第一个出现的元素其索引,若未找到则返回 -1 - [ ] resize(new_capacity) // 私有函数 - 若数组到达其容积,则变大一倍 - 当获取元素后,数组大小为其容积的1/4,则缩小一半 From 85eefc63142345b5df84d0061c43ba4c43dd1426 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:44:58 +0800 Subject: [PATCH 23/61] modification --- README-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README-cn.md b/README-cn.md index c6176e9..12f6122 100644 --- a/README-cn.md +++ b/README-cn.md @@ -369,8 +369,8 @@ - [ ] remove(item) —— 删除指定值的元素,并返回其索引(即使有多个元素) - [ ] find(item) —— 寻找指定值的元素并返回其中第一个出现的元素其索引,若未找到则返回 -1 - [ ] resize(new_capacity) // 私有函数 - - 若数组到达其容积,则变大一倍 - - 当获取元素后,数组大小为其容积的1/4,则缩小一半 + - 若数组的大小到达其容积,则变大一倍 + - 获取元素后,若数组大小为其容积的1/4,则缩小一半 - [ ] 时间复杂度 - 在数组末端增加/删除、定位、更新元素,只允许占 O(1) 的时间复杂度(平摊(amortized)去分配内存以获取更多空间) - 在数组任何地方插入/移除元素,只允许 O(n) 的时间复杂度 From 18e41cc2dfcb339041ed35f1613c51a1f8a96403 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Mon, 10 Oct 2016 23:55:40 +0800 Subject: [PATCH 24/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 12f6122..910212a 100644 --- a/README-cn.md +++ b/README-cn.md @@ -383,7 +383,7 @@ - [ ] [单向链表(视频)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - [ ] [CS 61B —— 链表(视频)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5) - [ ] [C 代码(视频)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - - 并非看整个视频,而只是关于节点结果和内存分配那一部分 + - 并非看完整个视频,只需要看关于节点结果和内存分配那一部分即可 - [ ] 链表 vs 数组: - [核心链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) - [在现实世界中,链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) From 3d45bd387cc7103b34a7263271719066b76980b6 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:01:17 +0800 Subject: [PATCH 25/61] modification --- README-cn.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README-cn.md b/README-cn.md index 910212a..03f3327 100644 --- a/README-cn.md +++ b/README-cn.md @@ -385,14 +385,14 @@ - [ ] [C 代码(视频)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - 并非看完整个视频,只需要看关于节点结果和内存分配那一部分即可 - [ ] 链表 vs 数组: - - [核心链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) - - [在现实世界中,链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) + - [基本链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) + - [在现实中,链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) - [ ] [为什么你需要避免使用链表(视频)](https://www.youtube.com/watch?v=YQs6IC-vgmo) - - [ ] Gotcha:你需要关于“指向指针的指针”的相关知识: + - [ ] 的确:你需要关于“指向指针的指针”的相关知识: (因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址) 该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格,因为,代码的可读性和可维护性太低。 - [指向指针的指针](https://www.eskimo.com/~scs/cclass/int/sx8.html) - - [ ] 实现(我实现了使用尾指针以及没有使用这两种情况): + - [ ] 实现(我实现了使用尾指针以及没有使用尾指针这两种情况): - [ ] size() —— 返回链表中数据元素的个数 - [ ] empty() —— 若链表为空则返回一个布尔值 true - [ ] value_at(index) —— 返回第 n 个元素的值(从0开始计算) @@ -402,7 +402,7 @@ - [ ] pop_back() —— 删除尾部元素并返回其值 - [ ] front() —— 返回首部元素的值 - [ ] back() —— 返回尾部元素的值 - - [ ] insert(index, value) —— 插入值到指定的索引,并且当前索引的元素指向到新的元素 index + - [ ] insert(index, value) —— 插入值到指定的索引,并把当前索引的元素指向到新的元素 - [ ] erase(index) —— 删除指定索引的节点 - [ ] value_n_from_end(n) —— 返回倒数第 n 个节点的值 - [ ] reverse() —— 逆序链表 @@ -414,14 +414,14 @@ - ### 堆栈 - [ ] [堆栈(视频)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - [ ] [使用堆栈 —— 后进先出(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html) - - [ ] 可以不实现,因为使用数组实现并不重要 + - [ ] 可以不实现,因为使用数组来实现并不重要 - ### 队列 - [ ] [使用队列 —— 先进先出(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) - [ ] [队列(视频)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) - [ ] [原型队列/先进先出(FIFO)](https://en.wikipedia.org/wiki/Circular_buffer) - [ ] [优先级队列(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) - - [ ] 使用含有尾部指针链表实现: + - [ ] 使用含有尾部指针的链表来实现: - enqueue(value) —— 在尾部添加值 - dequeue() —— 删除最早添加的元素并返回其值(首部元素) - empty() @@ -431,8 +431,8 @@ - empty() - full() - [ ] 花销: - - 在使用链表的一个糟糕实现中,入列和出列的时间复杂度将会是 O(n) - 因为你需要找到下一个元素,以致循环整个队列 + - 在糟糕的实现情况下,使用链表所实现的队列,其入列和出列的时间复杂度将会是 O(n)。 + 因为,你需要找到下一个元素,以致循环整个队列 - enqueue:O(1)(平摊(amortized)、链表和数组 [探测(probing)]) - dequeue:O(1)(链表和数组) - empty:O(1)(链表和数组) From e684fca54b63b11940ea685fc650876c160cb8df Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:02:05 +0800 Subject: [PATCH 26/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 03f3327..aaa3ac4 100644 --- a/README-cn.md +++ b/README-cn.md @@ -390,7 +390,7 @@ - [ ] [为什么你需要避免使用链表(视频)](https://www.youtube.com/watch?v=YQs6IC-vgmo) - [ ] 的确:你需要关于“指向指针的指针”的相关知识: (因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址) - 该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格,因为,代码的可读性和可维护性太低。 + 该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格。因为,这种风格的代码,其可读性和可维护性太低。 - [指向指针的指针](https://www.eskimo.com/~scs/cclass/int/sx8.html) - [ ] 实现(我实现了使用尾指针以及没有使用尾指针这两种情况): - [ ] size() —— 返回链表中数据元素的个数 From 6db2e626c8fc1104b1eaf863c7a6658ddd04c25c Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:05:38 +0800 Subject: [PATCH 27/61] modification --- README-cn.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README-cn.md b/README-cn.md index aaa3ac4..4b2e890 100644 --- a/README-cn.md +++ b/README-cn.md @@ -438,20 +438,20 @@ - empty:O(1)(链表和数组) - ### 哈希表 - - [ ] 视频: + - [ ] 视频: - [ ] [链式哈希表(视频)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) - [ ] [Table Doubling 和 Karp-Rabin(视频)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [Open Addressing 和 密码型哈希(Cryptographic Hashing)(视频)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Open Addressing 和密码型哈希(Cryptographic Hashing)(视频)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [PyCon 2010:The Mighty Dictionary(视频)](https://www.youtube.com/watch?v=C4Kc8xzcA68) - - [ ] [(进阶)随机取样(Randomization):全域散列(Universal)& 完美散列(Perfect Hashing)(视频)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) - - [ ] [(进阶)完美散列(Perfect hashing)(视频)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) + - [ ] [(进阶)随机取样(Randomization):全域哈希(Universal Hashing)& 完美哈希(Perfect Hashing)(视频)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(进阶)完美哈希(Perfect hashing)(视频)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - [ ] 在线课程: - [ ] [哈希函数的掌握(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) - [ ] [使用哈希表(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html) - - [ ] [Supporting Hashing(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html) + - [ ] [哈希表的支持(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html) - [ ] [哈希表的语言支持(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html) - - [ ] [核心哈希表(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) + - [ ] [基本哈希表(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) - [ ] [数据结构(视频)](https://www.coursera.org/learn/data-structures/home/week/3) - [ ] [电话薄问题(Phone Book Problem)(视频)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) - [ ] 分布式哈希表: From 87fded9ba98c1696304be130bf69d046d632a0ba Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:13:58 +0800 Subject: [PATCH 28/61] modification --- README-cn.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README-cn.md b/README-cn.md index 4b2e890..0db3816 100644 --- a/README-cn.md +++ b/README-cn.md @@ -477,8 +477,8 @@ - ### 按位运算 - [ ] [Bits 速查表](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - - 你需要知道大量2的倍数其值(从2^1 到 2^16 及 2^32) - - [ ] 好好理解位运操作符的含义:&、|、^、~、>>、<< + - 你需要知道大量2的幂数值(从2^1 到 2^16 及 2^32) + - [ ] 好好理解位操作符的含义:&、|、^、~、>>、<< - [ ] [字码(words)](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] 好的介绍: [位操作(视频)](https://www.youtube.com/watch?v=7jkIUgLC29I) @@ -494,7 +494,7 @@ - [补码(2s Complement)](https://en.wikipedia.org/wiki/Two%27s_complement) - [ ] 计算置位(Set Bits) - [计算一个字节中置位(Set Bits)的四种方式(视频)](https://youtu.be/Hzuzo9NJrlc) - - [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) + - [计算比特位](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) - [如何在一个 32 位的整型中计算置位(Set Bits)的数量](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer) - [ ] 四舍五入2的幂数: - [四舍五入到2的下一幂数](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) @@ -506,7 +506,7 @@ ## 树 - ### 树 —— 笔记 & 背景 - - [ ] [系列:树结构的核心(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) + - [ ] [系列:基本树(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - [ ] [系列:树(视频)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - 基本的树形结构 - 遍历 @@ -523,25 +523,25 @@ 空间复杂度: 最好情况:O(log n) - 树的平均高度 最坏情况:O(n) - - 中序遍历(DFS:左、自己、右) - - 后序遍历(DFS:左、右、自己) - - 先序遍历(DFS:自己、左、右) + - 中序遍历(DFS:左、节点本身、右) + - 后序遍历(DFS:左、右、节点本身) + - 先序遍历(DFS:节点本身、左、右) - ### 二叉查找树: BSTs - [ ] [二叉查找树概览(视频)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [系列(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees) - - 从符号表开始讲到 BST 程序 + - 从符号表开始到 BST 程序 - [ ] [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) - [ ] [MIT(视频)](https://www.youtube.com/watch?v=9Jry5-82I68) - C/C++: - [ ] [二叉查找树 —— 在 C/C++ 中实现(视频)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) - - [ ] [BST 实现 —— 在堆栈和堆中的内存分配(视频)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) + - [ ] [BST 的实现 —— 在堆栈和堆中的内存分配(视频)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) - [ ] [在二叉查找树中找到最小和最大的元素(视频)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - [ ] [寻找二叉树的高度(视频)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) - [ ] [二叉树的遍历 —— 广度优先和深度优先策略(视频)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32) - [ ] [二叉树:层序遍历(视频)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - - [ ] [二叉树的遍历:先序、中序、后续(视频)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - - [ ] [判断一棵二叉树是否是二叉查找树(视频)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [二叉树的遍历:先序、中序、后序(视频)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [判断一棵二叉树是否为二叉查找树(视频)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - [ ] [从二叉查找树中删除一个节点(视频)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) - [ ] [二叉查找树中序遍历的后继者(视频)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - [ ] 实现: @@ -572,17 +572,17 @@ - [ ] [构建一个堆(视频)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) - [ ] [MIT:堆与堆排序(视频)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [CS 61B Lecture 24:优先级队列(视频)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) - - [ ] [线性时间复杂度的堆构建(大顶堆)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] [构建线性时间复杂度的堆(大顶堆)](https://www.youtube.com/watch?v=MiyLo8adrWw) - [ ] 实现一个大顶堆: - [ ] insert - [ ] sift_up —— 用于插入元素 - - [ ] get_max —— 返回最大值但不移除 + - [ ] get_max —— 返回最大值但不移除元素 - [ ] get_size() —— 返回存储的元素数量 - [ ] is_empty() —— 若堆为空则返回 true - - [ ] extract_max —— 返回最大值并移除它 + - [ ] extract_max —— 返回最大值并移除 - [ ] sift_down —— 用于获取最大值元素 - [ ] remove(i) —— 删除指定索引的元素 - - [ ] heapify —— 构件堆,用于堆排序 + - [ ] heapify —— 构建堆,用于堆排序 - [ ] heap_sort() —— 拿到一个未排序的数组,然后使用大顶堆进行就地排序 - 注意:若用小顶堆可节省操作,但导致空间复杂度加倍。(无法做到就地) From d1c784c5c39273127b8aa5ba9a34105f1521c363 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:16:34 +0800 Subject: [PATCH 29/61] modification --- README-cn.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README-cn.md b/README-cn.md index 0db3816..e608d8b 100644 --- a/README-cn.md +++ b/README-cn.md @@ -591,13 +591,13 @@ - 阅读代码,但不实现。 - [ ] [数据结构笔记及编程技术](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries) - [ ] 短课程视频: - - [ ] [对字典树(Tries)的介绍(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) - - [ ] [字典树(Tries)的性能(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) - - [ ] [实现一棵字典树(Tries)(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) - - [ ] [字典树(Tries):一个被忽略的数据结构](https://www.toptal.com/java/the-trie-a-neglected-data-structure) - - [ ] [高级编程人员 —— 使用字典树(Tries)](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/) + - [ ] [对字典树的介绍(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) + - [ ] [字典树的性能(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) + - [ ] [实现一棵字典树(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) + - [ ] [字典树:一个被忽略的数据结构](https://www.toptal.com/java/the-trie-a-neglected-data-structure) + - [ ] [高级编程 —— 使用字典树](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/) - [ ] [标准教程(现实中的用例)(视频)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) - - [ ] [MIT,高阶数据结构,字符串(可事半功倍)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + - [ ] [MIT,高阶数据结构,使用字符串追踪路径(可事半功倍)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - ### 平衡查找树 - 掌握至少一种平衡查找树(并懂得如何实现): From 8d5267f6f3c3fff9c153a6c78a9de21f6ed8aaff Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:20:11 +0800 Subject: [PATCH 30/61] modification --- README-cn.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README-cn.md b/README-cn.md index e608d8b..db5a60d 100644 --- a/README-cn.md +++ b/README-cn.md @@ -601,12 +601,12 @@ - ### 平衡查找树 - 掌握至少一种平衡查找树(并懂得如何实现): - - “在各种平衡查找树当中,AVL 和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。 - 这种特别令人感兴趣的数据结构,叫伸展树(splay tree)。该数据结构可自我管理,且会使用轮换来移除任何访问过根节点的 key。 + - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。 + 这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的 key。 ” —— Skiena - - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。通过我的阅读,我发现你并不会在你的面试中被要求实现一棵 - 平衡搜索树。但是,我希望胜人一筹,因此让我们来面对该类树的实现吧。伸展树的确是更高质量的一种实现,因为我的确阅读了 - 大量关于红黑树的代码。 + - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在 Google 的面试中并不会被要求实现一棵 + 平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了 + 大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。 - 伸展树:插入、查找、删除函数的实现 ,而如果你最终实现了红黑树,那么请尝试一下: - 跳过删除函数,直接实现搜索和插入功能 From 60d6e5a080fafa478d8ab112f810d085ed615e68 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:21:35 +0800 Subject: [PATCH 31/61] modification --- README-cn.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README-cn.md b/README-cn.md index db5a60d..a24136c 100644 --- a/README-cn.md +++ b/README-cn.md @@ -604,9 +604,7 @@ - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。 这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的 key。 ” —— Skiena - - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在 Google 的面试中并不会被要求实现一棵 - 平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了 - 大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。 + - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在 Google 的面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。 - 伸展树:插入、查找、删除函数的实现 ,而如果你最终实现了红黑树,那么请尝试一下: - 跳过删除函数,直接实现搜索和插入功能 From 2f4bc34ec170977257e63272acd31c5452d0f689 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:29:34 +0800 Subject: [PATCH 32/61] modification --- README-cn.md | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/README-cn.md b/README-cn.md index a24136c..1c51063 100644 --- a/README-cn.md +++ b/README-cn.md @@ -601,63 +601,53 @@ - ### 平衡查找树 - 掌握至少一种平衡查找树(并懂得如何实现): - - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。 - 这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的 key。 - ” —— Skiena + - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的 key。” —— Skiena - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在 Google 的面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。 - - 伸展树:插入、查找、删除函数的实现 - ,而如果你最终实现了红黑树,那么请尝试一下: + - 伸展树:插入、查找、删除函数的实现,而如果你最终实现了红黑树,那么请尝试一下: - 跳过删除函数,直接实现搜索和插入功能 - - 我希望能阅读到更多关于 B 树的资料,因为它被广泛地应用到大型的数据集中。 - - [ ] [自我平衡二叉寻找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) + - 我希望能阅读到更多关于 B 树的资料,因为它也被广泛地应用到大型的数据库当中。 + - [ ] [自平衡二叉查找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - [ ] **AVL 树** - - 实际中: - 我能告诉你的事,该种树在实际中并无太多的用途,但我能看到有用的地方在哪里: - AVL 树是另一种结构,可支持时间复杂度为 O(log n) 的查询、插入及删除。它比红黑树严格意义上更要平衡,从而导致更慢的插入和删除,但遍历快。正因如此,才彰显其结构的魅力。只需要构建一次,就可以在不重新构造的情况下读取,例如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。 + - 实际中:我能告诉你的是,该种树并无太多的用途,但我能看到有用的地方在哪里:AVL 树是另一种平衡查找树结构。其可支持时间复杂度为 O(log n) 的查询、插入及删除。它比红黑树严格意义上更为平衡,从而导致插入和删除更慢,但遍历却更快。正因如此,才彰显其结构的魅力。只需要构建一次,就可以在不重新构造的情况下读取,适合于实现诸如语言字典(或程序字典,如一个汇编程序或解释程序的操作码)。 - [ ] [MIT AVL 树 / AVL 树的排序(视频)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) - [ ] [AVL 树(视频)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) - [ ] [AVL 树的实现(视频)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) - [ ] [分离与合并](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) - [ ] **伸展树** - - 实际中: - 伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes(字符串的一种替代品,用于存储长串的文本字符)、Windows NT(虚拟内存、网络及文件系统)等的实现。 + - 实际中:伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、ropes(字符串的一种替代品,用于存储长串的文本字符)、Windows NT(虚拟内存、网络及文件系统)等的实现。 - [ ] [CS 61B:伸展树(Splay trees)(视频)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) - [ ] MIT 教程:伸展树(Splay trees): - 该教程会过于学术,但请观看到最后的10分钟以确保掌握。 - [视频](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - [ ] **2-3查找树** - - 实际中: - 2-3树有着快速的插入,但却有着查询慢的代价(因为相比较 AVL 树来说,其高度更高)。 - - 你会很少用到2-3树。这是因为其实现涉及到不同类型的节点。因此,人们会选择红黑树。 + - 实际中:2-3树的元素插入非常快速,但却有着查询慢的代价(因为相比较 AVL 树来说,其高度更高)。 + - 你会很少用到2-3树。这是因为,其实现过程中涉及到不同类型的节点。因此,人们更多地会选择红黑树。 - [ ] [2-3树的直感与定义(视频)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) - [ ] [2-3树的二元观点](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [2-3树(学生叙述)(视频)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - [ ] **2-3-4树 (亦称2-4树)** - - 实际中: - 对于每一棵2-4树,都有着对应的红黑树来存储同样顺序的数据元素。在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。这就是为什么许多算法引导文章都会在介绍红黑树之前,先介绍2-4树,尽管**2-4树在实际中并不经常使用**。 + - 实际中:对于每一棵2-4树,都有着对应的红黑树来存储同样顺序的数据元素。在2-4树上进行插入及删除操作等同于在红黑树上进行颜色翻转及轮换。这使得2-4树成为一种用于掌握红黑树背后逻辑的重要工具。这就是为什么许多算法引导文章都会在介绍红黑树之前,先介绍2-4树,尽管**2-4树在实际中并不经常使用**。 - [ ] [CS 61B Lecture 26:平衡查找树(视频)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) - [ ] [自底向上的2-4树(视频)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [自顶向下的2-4树(视频)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) - [ ] **B 树** - - 有趣的是:为啥叫 B 仍然是一个神秘,因为 B 可代表波音(Boeing)、平衡(Balanced)或 Bayer(联合创造者) - - 实际中: - B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中,B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。 + - 有趣的是:为啥叫 B 仍然是一个神秘。因为 B 可代表波音(Boeing)、平衡(Balanced)或 Bayer(联合创造者) + - 实际中:B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中,B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。 - [ ] [B 树](https://en.wikipedia.org/wiki/B-tree) - [ ] [B 树的介绍(视频)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) - [ ] [B 树的定义及其插入操作(视频)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [B 树的删除操作(视频)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [MIT 6.851 —— 内存层次模块(Memory Hierarchy Models)(视频)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - - 覆盖有高速缓存参数无关型(cache-oblivious) B 树和非常有趣的数据结构 + - 覆盖有高速缓存参数无关型(cache-oblivious)B 树和非常有趣的数据结构 - 头37分钟讲述的很专业,或许可以跳过(B 指块的大小、即缓存行的大小) - [ ] **红黑树** - - 实际中: - 红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用。而且,还对在其他数据结构中构建块非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 系统所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。在 Java 的版本8中,红黑树也被用于存储哈希列表集合中相同的数据,而不是使用链表及哈希码。 + - 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用,还对在其他数据结构中块的构建非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 系统所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。在 Java 8中,红黑树也被用于存储哈希列表集合中相同的数据,而不是使用链表及哈希码。 - [ ] [Aduni —— 算法 —— 课程4(该链接直接跳到开始部分)(视频)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) - [ ] [Aduni —— 算法 —— 课程5(视频)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) - [ ] [黑树(Black Tree)](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) From 75466d07b26e52f5b9ddc7a7c61956fe8f5c1954 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:31:34 +0800 Subject: [PATCH 33/61] modification --- README-cn.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README-cn.md b/README-cn.md index 1c51063..f9c6587 100644 --- a/README-cn.md +++ b/README-cn.md @@ -29,11 +29,11 @@ - [必备知识](#必备知识) - [算法复杂度 / Big-O / 渐进分析法](#算法复杂度--big-o--渐进分析法) - [数据结构](#数据结构) - - [数组](#数组) - - [链表](#链表) - - [堆栈](#堆栈) - - [队列](#队列) - - [哈希表](#哈希表) + - [数组(Arrays)](#数组arrays) + - [链表(Linked Lists)](#链表linked-lists) + - [堆栈(Stack)](#堆栈stack) + - [队列(Queue)](#队列queue) + - [哈希表(Hash table)](#哈希表hash-table) - [更多的知识](#更多的知识) - [二分查找](#二分查找) - [按位运算](#按位运算) From 356841dba600e65773277b5e189bb3af32a41401 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:32:21 +0800 Subject: [PATCH 34/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index f9c6587..3387840 100644 --- a/README-cn.md +++ b/README-cn.md @@ -343,7 +343,7 @@ ## 数据结构 -- ### 数组 +- ### 数组(Arrays) - 实现一个可自动调整大小的动态数组。 - [ ] 介绍: - [数组(视频)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) From c2c5ee92a277c5910499c7a6b9cbe2769ee97dda Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:39:02 +0800 Subject: [PATCH 35/61] modification --- README-cn.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README-cn.md b/README-cn.md index 3387840..7c599e8 100644 --- a/README-cn.md +++ b/README-cn.md @@ -35,14 +35,14 @@ - [队列(Queue)](#队列queue) - [哈希表(Hash table)](#哈希表hash-table) - [更多的知识](#更多的知识) - - [二分查找](#二分查找) - - [按位运算](#按位运算) -- [树](#树) + - [二分查找(Binary search)](#二分查找binary-search) + - [按位运算(Bitwise operations)](#按位运算bitwise-operations) +- [树(Trees)](#树trees) - [树 —— 笔记 & 背景](#树--笔记--背景) - - [二叉查找树:BSTs](#二叉查找树-bstss) - - [堆 / 优先级队列 / 二叉堆](#堆--优先级队列--二叉堆) + - [二叉查找树(Binary search trees):BSTs](#二叉查找树binary-search-trees-bstss) + - [堆(Heap) / 优先级队列(Priority Queue) / 二叉堆(Binary Heap)](#堆heap--优先级队列priority-queue--二叉堆binary-heap) - [字典树(Tries)](#字典树tries) - - [平衡查找树](#平衡查找树) + - [平衡查找树(Balanced search trees)](#平衡查找树balanced-search-trees) - [N 叉树(K 叉树、M 叉树)](#n-叉树k-叉树m-叉树) - [Sorting](#sorting) - [Graphs](#graphs) @@ -378,7 +378,7 @@ - 因为在内存中分配的空间邻近,所以有助于提高性能 - 空间需求 = (大于或等于 n 的数组容积)* 元素的大小。即便空间需求为 2n,其空间复杂度仍然是 O(n) -- ### 链表 +- ### 链表(Linked Lists) - [ ] 介绍: - [ ] [单向链表(视频)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - [ ] [CS 61B —— 链表(视频)](https://www.youtube.com/watch?v=sJtJOtXCW_M&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=5) @@ -411,12 +411,12 @@ - [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) - 并不需要实现 -- ### 堆栈 +- ### 堆栈(Stack) - [ ] [堆栈(视频)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - [ ] [使用堆栈 —— 后进先出(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html) - [ ] 可以不实现,因为使用数组来实现并不重要 -- ### 队列 +- ### 队列(Queue) - [ ] [使用队列 —— 先进先出(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) - [ ] [队列(视频)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) - [ ] [原型队列/先进先出(FIFO)](https://en.wikipedia.org/wiki/Circular_buffer) @@ -437,7 +437,7 @@ - dequeue:O(1)(链表和数组) - empty:O(1)(链表和数组) -- ### 哈希表 +- ### 哈希表(Hash table) - [ ] 视频: - [ ] [链式哈希表(视频)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) - [ ] [Table Doubling 和 Karp-Rabin(视频)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) @@ -467,7 +467,7 @@ ## 更多的知识 -- ### 二分查找 +- ### 二分查找(Binary search) - [ ] [二分查找(视频)](https://www.youtube.com/watch?v=D5SrAga1pno) - [ ] [二分查找(视频)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) - [ ] [详情](https://www.topcoder.com/community/data-science/data-science-tutorials/binary-search/) @@ -475,7 +475,7 @@ - 二分查找(在一个已排序好的整型数组中查找) - 迭代式二分查找 -- ### 按位运算 +- ### 按位运算(Bitwise operations) - [ ] [Bits 速查表](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - 你需要知道大量2的幂数值(从2^1 到 2^16 及 2^32) - [ ] 好好理解位操作符的含义:&、|、^、~、>>、<< @@ -503,7 +503,7 @@ - [ ] 绝对值: - [绝对整型(Absolute Integer)](http://bits.stephan-brumme.com/absInteger.html) -## 树 +## 树(Trees) - ### 树 —— 笔记 & 背景 - [ ] [系列:基本树(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) @@ -527,7 +527,7 @@ - 后序遍历(DFS:左、右、节点本身) - 先序遍历(DFS:节点本身、左、右) -- ### 二叉查找树: BSTs +- ### 二叉查找树(Binary search trees):BSTs - [ ] [二叉查找树概览(视频)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [系列(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/p82sw/core-introduction-to-binary-search-trees) - 从符号表开始到 BST 程序 @@ -557,7 +557,7 @@ - [ ] delete_value - [ ] get_successor // 返回给定值的后继者,若没有则返回-1 -- ### 堆 / 优先级队列 / 二叉堆 +- ### 堆(Heap) / 优先级队列(Priority Queue) / 二叉堆(Binary Heap) - 可视化是一棵树,但通常是以线性的形式存储(数组、链表) - [ ] [堆](https://en.wikipedia.org/wiki/Heap_(data_structure)) - [ ] [介绍(视频)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) @@ -599,7 +599,7 @@ - [ ] [标准教程(现实中的用例)(视频)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) - [ ] [MIT,高阶数据结构,使用字符串追踪路径(可事半功倍)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) -- ### 平衡查找树 +- ### 平衡查找树(Balanced search trees) - 掌握至少一种平衡查找树(并懂得如何实现): - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的 key。” —— Skiena - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在 Google 的面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。 From f662417457fa8a578146cc9b719088b2668238cf Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:41:45 +0800 Subject: [PATCH 36/61] modification --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 7c599e8..5ab9e16 100644 --- a/README-cn.md +++ b/README-cn.md @@ -39,7 +39,7 @@ - [按位运算(Bitwise operations)](#按位运算bitwise-operations) - [树(Trees)](#树trees) - [树 —— 笔记 & 背景](#树--笔记--背景) - - [二叉查找树(Binary search trees):BSTs](#二叉查找树binary-search-trees-bstss) + - [二叉查找树(Binary search trees):BSTs](#二叉查找树binary-search-treesbsts) - [堆(Heap) / 优先级队列(Priority Queue) / 二叉堆(Binary Heap)](#堆heap--优先级队列priority-queue--二叉堆binary-heap) - [字典树(Tries)](#字典树tries) - [平衡查找树(Balanced search trees)](#平衡查找树balanced-search-trees) From ba19ce760b7eacfcfa6760efa7899c74f68bdc54 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 00:45:31 +0800 Subject: [PATCH 37/61] modification --- README-cn.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/README-cn.md b/README-cn.md index 5ab9e16..6acd99e 100644 --- a/README-cn.md +++ b/README-cn.md @@ -388,9 +388,7 @@ - [基本链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) - [在现实中,链表 Vs 数组(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) - [ ] [为什么你需要避免使用链表(视频)](https://www.youtube.com/watch?v=YQs6IC-vgmo) - - [ ] 的确:你需要关于“指向指针的指针”的相关知识: - (因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址) - 该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格。因为,这种风格的代码,其可读性和可维护性太低。 + - [ ] 的确:你需要关于“指向指针的指针”的相关知识:(因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址)该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格。因为,这种风格的代码,其可读性和可维护性太低。 - [指向指针的指针](https://www.eskimo.com/~scs/cclass/int/sx8.html) - [ ] 实现(我实现了使用尾指针以及没有使用尾指针这两种情况): - [ ] size() —— 返回链表中数据元素的个数 @@ -431,8 +429,7 @@ - empty() - full() - [ ] 花销: - - 在糟糕的实现情况下,使用链表所实现的队列,其入列和出列的时间复杂度将会是 O(n)。 - 因为,你需要找到下一个元素,以致循环整个队列 + - 在糟糕的实现情况下,使用链表所实现的队列,其入列和出列的时间复杂度将会是 O(n)。因为,你需要找到下一个元素,以致循环整个队列 - enqueue:O(1)(平摊(amortized)、链表和数组 [探测(probing)]) - dequeue:O(1)(链表和数组) - empty:O(1)(链表和数组) @@ -643,8 +640,8 @@ - [ ] [B 树的定义及其插入操作(视频)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [B 树的删除操作(视频)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [MIT 6.851 —— 内存层次模块(Memory Hierarchy Models)(视频)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - - 覆盖有高速缓存参数无关型(cache-oblivious)B 树和非常有趣的数据结构 - - 头37分钟讲述的很专业,或许可以跳过(B 指块的大小、即缓存行的大小) + - 覆盖有高速缓存参数无关型(cache-oblivious)B 树和非常有趣的数据结构 + - 头37分钟讲述的很专业,或许可以跳过(B 指块的大小、即缓存行的大小) - [ ] **红黑树** - 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用,还对在其他数据结构中块的构建非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 系统所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。在 Java 8中,红黑树也被用于存储哈希列表集合中相同的数据,而不是使用链表及哈希码。 From c113b7b4acfb4f918e73b6b3c76cee4728160de1 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 01:26:26 +0800 Subject: [PATCH 38/61] modification --- README-cn.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README-cn.md b/README-cn.md index 6acd99e..d1e26e0 100644 --- a/README-cn.md +++ b/README-cn.md @@ -12,8 +12,8 @@ ## 目录 -- [这是?](#这是) -- [为何要用到它?](#为何要用到它) +- [这是?](#这是) +- [为何要用到它?](#为何要用到它) - [如何使用它](#如何使用它) - [拥有一名 Googler 的心态](#拥有一名-googler-的心态) - [我得到了工作吗?](#我得到了工作吗) @@ -106,7 +106,7 @@ --- -## 为何要用到它? +## 为何要用到它? 我一直都是遵循该计划去准备 Google 的面试。自 1997 年以来,我一直从事于 web 程序的构建、服务器的构建及创业型公司的创办。对于只有着一个经济学学位,而不是计算机科学学位(CS degree)的我来说,在职业生涯中所取得的都非常成功。然而,我想在 Google 工作,并进入大型系统中,真正地去理解计算机系统、算法效率、数据结构性能、低级别编程语言及其工作原理。可一项都不了解的我,怎么会被 Google 所应聘呢? From beaf5270a417d192c9b75186aced405134a1e1ed Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 01:28:05 +0800 Subject: [PATCH 39/61] modification --- README-cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README-cn.md b/README-cn.md index d1e26e0..ad03492 100644 --- a/README-cn.md +++ b/README-cn.md @@ -16,7 +16,7 @@ - [为何要用到它?](#为何要用到它) - [如何使用它](#如何使用它) - [拥有一名 Googler 的心态](#拥有一名-googler-的心态) -- [我得到了工作吗?](#我得到了工作吗) +- [我得到了工作吗?](#我得到了工作吗) - [跟随着我](#跟随着我) - [不要自以为自己足够聪明](#不要自以为自己足够聪明) - [关于 Google](#关于-google) @@ -130,7 +130,7 @@ [![future Googler sign](https://dng5l3qzreal6.cloudfront.net/2016/Oct/Screen_Shot_2016_10_04_at_10_13_24_AM-1475601104364.png)](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf) -## 我得到了工作吗? +## 我得到了工作吗? 我还没去应聘。 From 2ab0c0336427a0a852b0c79c53a5299de887b1e6 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 01:42:34 +0800 Subject: [PATCH 40/61] modification --- README-cn.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README-cn.md b/README-cn.md index ad03492..ecf2948 100644 --- a/README-cn.md +++ b/README-cn.md @@ -295,9 +295,9 @@ 就算我没有时间去每一项都这么做,但我也会尽我所能的。 在这里,你可以查看到我的代码: - - [C] (https://github.com/jwasham/practice-c) - - [C++] (https://github.com/jwasham/practice-cpp) - - [Python] (https://github.com/jwasham/practice-python) + - [C](https://github.com/jwasham/practice-c) + - [C++](https://github.com/jwasham/practice-cpp) + - [Python](https://github.com/jwasham/practice-python) 你不需要记住每一个算法的内部原理。 From 94bc4928d4c49040c496689c3c508abd7d788676 Mon Sep 17 00:00:00 2001 From: aleen42 Date: Tue, 11 Oct 2016 10:24:24 +0800 Subject: [PATCH 41/61] modification --- README-cn.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README-cn.md b/README-cn.md index ecf2948..6629e9b 100644 --- a/README-cn.md +++ b/README-cn.md @@ -511,15 +511,17 @@ - BFS(广度优先检索,breadth-first search) - [MIT(视频)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - 层序遍历(使用队列的 BFS 算法) - 时间复杂度: O(n) - 空间复杂度:最好情况: O(1),最坏情况:O(n/2)=O(n) + - 时间复杂度: O(n) + - 空间复杂度: + - 最好情况: O(1) + - 最坏情况:O(n/2)=O(n) - DFS(深度优先检索,depth-first search) - [MIT(视频)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) - 笔记: - 时间复杂度:O(n) - 空间复杂度: - 最好情况:O(log n) - 树的平均高度 - 最坏情况:O(n) + - 时间复杂度:O(n) + - 空间复杂度: + - 最好情况:O(log n) - 树的平均高度 + - 最坏情况:O(n) - 中序遍历(DFS:左、节点本身、右) - 后序遍历(DFS:左、右、节点本身) - 先序遍历(DFS:节点本身、左、右) From dac005e875ce4c2b52a470b524732d567bbfa807 Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 12:13:01 +0800 Subject: [PATCH 42/61] Translation completed the last part of the content. --- README-cn.md | 71 ++++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/README-cn.md b/README-cn.md index 6629e9b..c532cda 100644 --- a/README-cn.md +++ b/README-cn.md @@ -101,8 +101,8 @@ - [Machine Learning](#machine-learning) - [Go](#go) - [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) -- [Video Series](#video-series) -- [Computer Science Courses](#computer-science-courses) +- [视频系列](#视频系列) +- [计算机科学课程](#计算机科学课程) --- @@ -1587,66 +1587,67 @@ You're never really done. - [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) -## Video Series +## 视频系列 -Sit back and enjoy. "netflix and skill" :P + 坐下来享受一下吧。"netflix and skill" :P -- [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) +- [ ] [个人的动态规划问题列表 (都是短视频哟)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) -- [ ] [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) +- [ ] [x86 架构,汇编,应用程序 (11 个视频)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) -- [ ] [MIT 18.06 Linear Algebra, Spring 2005 (35 videos)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8) +- [ ] [MIT 18.06 线性代数,2005 年春季 (35 个视频)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8) -- [ ] [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) +- [ ] [绝妙的 MIT 微积分:单变量微积分](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) -- [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy) +- [ ] [计算机科学 70, 001 - 2015 年春季 - 离散数学和概率理论](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy) -- [ ] [Discrete Mathematics (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) +- [ ] [离散数学 (19 个视频)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) -- [ ] CSE373 - Analysis of Algorithms (25 videos) - - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) +- [ ] CSE373 - 算法分析 (25 个视频) + - [Skiena 的算法设计手册讲座](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) -- [ ] [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) +- [ ] [UC Berkeley 61B (2014 年春季): 数据结构 (25 个视频)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) -- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)]( https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) +- [ ] [UC Berkeley 61B (2006 年秋季): 数据结构 (39 个视频)]( https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) -- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) +- [ ] [UC Berkeley 61C: 计算机结构 (26 个视频)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) -- [ ] [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) +- [ ] [OOSE: 使用 UML 和 Java 进行软件开发 (21 个视频)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) -- [ ] [UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr) +- [ ] [UC Berkeley CS 152: 计算机结构和工程 (20 个视频)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr) -- [ ] [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) +- [ ] [MIT 6.004: 计算结构 (49 视频)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) -- [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) +- [ ] [卡內基梅隆大学 - 计算机架构讲座 (39 个视频)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) -- [ ] [MIT 6.006: Intro to Algorithms (47 videos)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False) +- [ ] [MIT 6.006: 算法介绍 (47 个视频)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False) -- [ ] [MIT 6.033: Computer System Engineering (22 videos)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484) +- [ ] [MIT 6.033: 计算机系统工程 (22 个视频)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484) -- [ ] [MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi) +- [ ] [MIT 6.034 人工智能, 2010 年秋季 (30 个视频)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi) -- [ ] [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B) +- [ ] [MIT 6.042J: 计算机科学数学, 2010 年秋季 (25 个视频)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B) -- [ ] [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) +- [ ] [MIT 6.046: 算法设计与分析 (34 个视频)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) -- [ ] [MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7) +- [ ] [MIT 6.050J: 信息和熵, 2008 年春季 (19 个视频)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7) -- [ ] [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) +- [ ] [MIT 6.851: 高等数据结构 (22 个视频)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) -- [ ] [MIT 6.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) +- [ ] [MIT 6.854: 高等算法, 2016 年春季 (24 个视频)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) -- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) +- [ ] [MIT 6.858计算机系统安全, 2014 年秋季](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) -- [ ] Stanford: Programming Paradigms (17 videos) - - [Course on C and C++](https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False) +- [ ] 斯坦福: 编程范例 (17 个视频) + - [C 和 C++ 课程](https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False) -- [ ] [Introduction to Cryptography](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be) - - [more in series (not in order)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) +- [ ] [密码学导论](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be) + - [本系列更多内容 (不分先后顺序)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) -- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) +- [ ] [大数据 - 斯坦福大学 (94 个视频)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) ## Computer Science Courses +## 计算机科学课程 -- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science) -- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses) +- [ 在线 CS 课程目录 ](https://github.com/open-source-society/computer-science) +- [CS 课程目录 (一些是在线讲座)](https://github.com/prakhar1989/awesome-courses) From 819bde4c14f80ef652969d5358f64c98ee49ff27 Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 12:22:10 +0800 Subject: [PATCH 43/61] Delete the original title. --- README-cn.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index c532cda..439e950 100644 --- a/README-cn.md +++ b/README-cn.md @@ -1646,7 +1646,6 @@ You're never really done. - [ ] [大数据 - 斯坦福大学 (94 个视频)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) -## Computer Science Courses ## 计算机科学课程 - [ 在线 CS 课程目录 ](https://github.com/open-source-society/computer-science) From 77261ac56527a684f8b338e17a8e26e5166ef55a Mon Sep 17 00:00:00 2001 From: newt0n Date: Tue, 11 Oct 2016 12:47:24 +0800 Subject: [PATCH 44/61] =?UTF-8?q?+=20=E5=AE=8C=E6=88=90=20711=20=E5=88=B0?= =?UTF-8?q?=201318=20=E8=A1=8C=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 970 +++++++++++++++++++++++++-------------------------- 1 file changed, 485 insertions(+), 485 deletions(-) diff --git a/README-cn.md b/README-cn.md index 2e6a941..56f1ee8 100644 --- a/README-cn.md +++ b/README-cn.md @@ -51,7 +51,7 @@ sometimes word-for-word in Google's coaching notes. - [Graphs](#graphs) - [Even More Knowledge](#even-more-knowledge) - [Recursion](#recursion) - - [Dynamic Programming](#dynamic-programming) + - [动态规划](#dynamic-programming) - [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability) - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms) - [Caches](#caches) @@ -711,611 +711,611 @@ Write code on a whiteboard, not a computer. Test with some sample inputs. Then t ## Sorting - [ ] Notes: - - Implement sorts & know best case/worst case, average complexity of each: - - no bubble sort - it's terrible - O(n^2), except when n <= 16 - - [ ] stability in sorting algorithms ("Is Quicksort stable?") - - [Sorting Algorithm Stability](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) - - [Stability In Sorting Algorithms](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) - - [Stability In Sorting Algorithms](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/) - - [Sorting Algorithms - Stability](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf) - - [ ] Which algorithms can be used on linked lists? Which on arrays? Which on both? - - I wouldn't recommend sorting a linked list, but merge sort is doable. - - [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) + - 实现各种排序 & 知道每种排序的最坏、最好和平均的复杂度分别是什么场景: + - 不要用冒泡排序 - 大多数情况下效率感人 - 时间复杂度 O(n^2), 除非 n <= 16 + - [ ] 排序算法的稳定性 ("快排是稳定的么?") + - [排序算法的稳定性](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) + - [排序算法的稳定性](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) + - [排序算法的稳定性](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) + - [排序算法的稳定性](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/) + - [排序算法 - 稳定性](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf) + - [ ] 哪种排序算法可以用链表?哪种用数组?哪种两者都可? + - 并不推荐对一个链表排序,但归并排序是可行的. + - [链表的归并排序](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) -- For heapsort, see Heap data structure above. Heap sort is great, but not stable. +- 关于堆排序,请查看前文堆的数据结构部分。堆排序很强大,不过是非稳定排序。 -- [ ] [Bubble Sort (video)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) -- [ ] [Analyzing Bubble Sort (video)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) -- [ ] [Insertion Sort, Merge Sort (video)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) -- [ ] [Insertion Sort (video)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) -- [ ] [Merge Sort (video)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) -- [ ] [Quicksort (video)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) -- [ ] [Selection Sort (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) +- [ ] [冒泡排序 (video)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [冒泡排序分析 (video)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [插入排序 & 归并排序 (video)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [插入排序 (video)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [归并排序 (video)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [快排 (video)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [选择排序 (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) -- [ ] Stanford lectures on sorting: +- [ ] 斯坦福大学关于排序算法的视频: - [ ] [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) - [ ] [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) -- [ ] Shai Simonson, [Aduni.org](http://www.aduni.org/): - - [ ] [Algorithms - Sorting - Lecture 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) - - [ ] [Algorithms - Sorting II - Lecture 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) +- [ ] Shai Simonson 视频, [Aduni.org](http://www.aduni.org/): + - [ ] [算法 - 排序 - 第二讲 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) + - [ ] [算法 - 排序2 - 第三讲 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) -- [ ] Steven Skiena lectures on sorting: - - [ ] [lecture begins at 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) - - [ ] [lecture begins at 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [lecture begins at 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [lecture begins at 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) +- [ ] Steven Skiena 关于排序的视频: + - [ ] [课程从 26:46 开始 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) + - [ ] [课程从 27:40 开始 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [课程从 35:00 开始 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [课程从 23:50 开始 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) -- [ ] UC Berkeley: +- [ ] 加州大学伯克利分校(UC Berkeley) 大学课程: - [ ] [CS 61B Lecture 29: Sorting I (video)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29) - [ ] [CS 61B Lecture 30: Sorting II (video)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30) - [ ] [CS 61B Lecture 32: Sorting III (video)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C) - [ ] [CS 61B Lecture 33: Sorting V (video)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C) -- [ ] - Merge sort code: - - [ ] [Using output array](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - - [ ] [In-place](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) -- [ ] - Quick sort code: - - [ ] [Implementation](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) - - [ ] [Implementation](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) +- [ ] - 归并排序: + - [ ] [使用外部数组](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [对原数组直接排序](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] - 快速排序: + - [ ] [实现](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [实现](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) -- [ ] Implement: - - [ ] Mergesort: O(n log n) average and worst case - - [ ] Quicksort O(n log n) average case - - Selection sort and insertion sort are both O(n^2) average and worst case - - For heapsort, see Heap data structure above. +- [ ] 实现: + - [ ] 归并:平均和最差情况的时间复杂度为 O(n log n)。 + - [ ] 快排:平均时间复杂度为 O(n log n)。 + - 选择排序和插入排序的最坏、平均时间复杂度都是 O(n^2)。 + - 关于堆排序,请查看前文堆的数据结构部分。 -- [ ] For curiosity - not required: - - [ ] [Radix Sort](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) - - [ ] [Radix Sort (video)](https://www.youtube.com/watch?v=xhr26ia4k38) - - [ ] [Radix Sort, Counting Sort (linear time given constraints) (video)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - [ ] [Sorting in Linear Time (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) +- [ ] 有兴趣的话,还有一些补充 - 但并不是必须的: + - [ ] [基数排序](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) + - [ ] [基数排序 (video)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [基数排序, 计数排序 (线性时间内) (video)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [随机算法: 矩阵相乘, 快排, Freivalds' 算法 (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [线性时间内的排序 (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) -## Graphs +## 图 -Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. +图论能解决计算机科学里的很多问题,所以这一节会比较长,像树和排序的部分一样。 -- Notes from Yegge: - - 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 - - BFS and DFS - know their computational complexity, their tradeoffs, and how to implement them in real code - - When asked a question, look for a graph-based solution first, then move on if none. +- Yegge 的笔记: + - 有 3 种基本方式在内存里表示一个图: + - 对象和指针 + - 矩阵 + - 邻接表 + - 熟悉以上每一种图的表示法,并了解各自的优缺点 + - 宽度优先搜索和深度优先搜索 - 知道它们的计算复杂度和设计上的权衡以及如何用代码实现它们 + - 遇到一个问题时,首先尝试基于图的解决方案,如果没有再去尝试其他的。 -- [ ] Skiena Lectures - great intro: - - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) - - [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) - - [ ] [CSE373 2012 - Lecture 13 - Graph Algorithms (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) - - [ ] [CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) +- [ ] Skiena 教授的课程 - 很不错的介绍: + - [ ] [CSE373 2012 - 课程 11 - 图的数据结构 (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) + - [ ] [CSE373 2012 - 课程 12 - 广度优先搜索 (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) + - [ ] [CSE373 2012 - 课程 13 - 图的算法 (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) + - [ ] [CSE373 2012 - 课程 14 - 图的算法 (1) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 课程 15 - 图的算法 (2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 课程 16 - 图的算法 (3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) -- [ ] Graphs (review and more): +- [ ] 图 (复习和其他): - - [ ] [6.006 Single-Source Shortest Paths Problem (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) - - [ ] [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) - - [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) - - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) - - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) - - [ ] [CS 61B 2014 (starting at 58:09) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) - - [ ] [CS 61B 2014: Weighted graphs (video)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) - - [ ] [Greedy Algorithms: Minimum Spanning Tree (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (video)](https://www.youtube.com/watch?v=RpgcYiky7uw) + - [ ] [6.006 单源最短路径问题 (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Dijkstra 算法 (video)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Bellman-Ford 算法(video)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 Dijkstra 效率优化 (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) + - [ ] [Aduni: 图的算法 I - 拓扑排序, 最小生成树, Prim 算法 - 第六课 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Aduni: 图的算法 II - 深度优先搜索, 广度优先搜索, Kruskal 算法, 并查集数据结构 - 第七课 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni: 图的算法 III: 最短路径 - 第八课 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni: 图的算法. IV: 几何算法介绍 - 第九课 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] [CS 61B 2014 (从 58:09 开始) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) + - [ ] [CS 61B 2014: 加权图 (video)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) + - [ ] [贪心算法: 最小生成树 (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [图的算法之强连通分量 Kosaraju 算法 (video)](https://www.youtube.com/watch?v=RpgcYiky7uw) -- Full Coursera Course: - - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) +- 完整的 Coursera 课程: + - [ ] [图的算法 (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) -- Yegge: If you get a chance, try to study up on fancier algorithms: - - [ ] Dijkstra's algorithm - see above - 6.006 - - [ ] A* - - [ ] [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm) - - [ ] [A* Pathfinding Tutorial (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE) - - [ ] [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE) +- Yegge: 如果有机会,可以试试研究更酷炫的算法: + - [ ] Dijkstra 算法 - 上文 - 6.006 + - [ ] A* 算法 + - [ ] [A* 算法](https://en.wikipedia.org/wiki/A*_search_algorithm) + - [ ] [A* 寻路教程 (video)](https://www.youtube.com/watch?v=KNXfSOx4eEE) + - [ ] [A* 寻路 (E01: 算法解释) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE) -- I'll implement: - - [ ] DFS with adjacency list (recursive) - - [ ] DFS with adjacency list (iterative with stack) - - [ ] DFS with adjacency matrix (recursive) - - [ ] DFS with adjacency matrix (iterative with stack) - - [ ] BFS with adjacency list - - [ ] BFS with adjacency matrix - - [ ] single-source shortest path (Dijkstra) - - [ ] minimum spanning tree - - DFS-based algorithms (see Aduni videos above): - - [ ] check for cycle (needed for topological sort, since we'll check for cycle before starting) - - [ ] topological sort - - [ ] count connected components in a graph - - [ ] list strongly connected components - - [ ] check for bipartite graph +- 我会实现: + - [ ] DFS 邻接表 (递归) + - [ ] DFS 邻接表 (栈迭代) + - [ ] DFS 邻接矩阵 (递归) + - [ ] DFS 邻接矩阵 (栈迭代) + - [ ] BFS 邻接表 + - [ ] BFS 邻接矩阵 + - [ ] 单源最短路径问题 (Dijkstra) + - [ ] 最小生成树 + - 基于 DFS 的算法 (根据上文 Aduni 的视频): + - [ ] 检查环 (我们会先检查是否有环存在以便做拓扑排序) + - [ ] 拓扑排序 + - [ ] 计算图中的连通分支 + - [ ] 列出强连通分量 + - [ ] 检查双向图 -You'll get more graph practice in Skiena's book (see Books section below) and the interview books +可以从 Skiena 的书(参考下面的书推荐小节)和面试书籍中学习更多关于图的实践。 -## Even More Knowledge +## 更多知识 -- ### Recursion - - [ ] Stanford lectures on recursion & backtracking: - - [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) - - [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) - - [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) - - [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) - - when it is appropriate to use it - - how is tail recursion better than not? - - [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) - - [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) +- ### 递归 + - [ ] Stanford 大学关于递归 & 回溯的课程: + - [ ] [课程 8 | 抽象编程 (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] [课程 9 | 抽象编程 (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) + - [ ] [课程 10 | 抽象编程 (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [课程 11 | 抽象编程 (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) + - 什么时候适合使用 + - 尾递归会更好么? + - [ ] [什么是尾递归以及为什么它如此糟糕?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) + - [ ] [尾递归 (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) -- ### Dynamic Programming +- ### 动态规划 - This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky. - - I suggest looking at many examples of DP problems until you have a solid understanding of the pattern involved. - - [ ] Videos: - - the Skiena videos can be hard to follow since he sometimes uses the whiteboard, which is too small to see - - [ ] [Skiena: CSE373 2012 - Lecture 19 - Introduction to Dynamic Programming (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) - - [ ] [Skiena: CSE373 2012 - Lecture 20 - Edit Distance (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) - - [ ] [Skiena: CSE373 2012 - Lecture 21 - Dynamic Programming Examples (video)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) - - [ ] [Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (video)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) - - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) - - [ ] [Simonson: Dynamic Programming I - Lecture 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [Simonson: Dynamic programming II - Lecture 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) - - [ ] List of individual DP problems (each is short): - [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - - [ ] Yale Lecture notes: - - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) - - [ ] Coursera: - - [ ] [The RNA secondary structure problem (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) - - [ ] [A dynamic programming algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) - - [ ] [Illustrating the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) - - [ ] [Running time of the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) - - [ ] [DP vs. recursive implementation (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) - - [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) - - [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) + - 这一部分会有点困难,每个可以用动态规划解决的问题都必须先定义出递推关系,要推导出来可能会有点棘手。 + - 我建议先阅读和学习足够多的动态规划的例子,以便对解决 DP 问题的一般模式有个扎实的理解。 -- ### Combinatorics (n choose k) & Probability - - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) - - [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) - - [ ] [Make School: More Probability and Markov Chains (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ) - - [ ] Khan Academy: - - Course layout: - - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) - - Just the videos - 41 (each are simple and each are short): - - [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) + - [ ] 视频: + - Skiena 的视频可能会有点难跟上,有时候他用白板写的字会比较小,难看清楚。 + - [ ] [Skiena: CSE373 2012 - 课程 19 - 动态规划介绍 (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) + - [ ] [Skiena: CSE373 2012 - 课程 20 - 编辑距离 (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) + - [ ] [Skiena: CSE373 2012 - 课程 21 - 动态规划举例 (video)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena: CSE373 2012 - 课程 22 - 动态规划应用 (video)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Simonson: 动态规划 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson: 动态规划 I - 课程 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: 动态规划 II - 课程 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] 单独的 DP 问题 (每一个视频都很短): + [动态规划 (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + - [ ] Yale 课程笔记: + - [ ] [动态规划](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) + - [ ] Coursera 课程: + - [ ] [RNA 二级结构问题 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) + - [ ] [动态规划算法 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) + - [ ] [DP 算法描述 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [DP 算法的运行时间 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) + - [ ] [DP vs 递归实现 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) + - [ ] [全局成对序列排列 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) + - [ ] [本地成对序列排列 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) -- ### NP, NP-Complete and Approximation Algorithms - - 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. - - Know what NP-complete means. - - [ ] [Computational Complexity (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) +- ### 组合 (n 中选 k 个) & 概率 + - [ ] [数据技巧: 如何找出阶乘、排列和组合(选择) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) + - [ ] [来点学校的东西: 概率 (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) + - [ ] [来点学校的东西: 概率和马尔可夫链 (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ) + - [ ] 可汗学院: + - 课程设置: + - [ ] [概率理论基础](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) + - 视频 - 41 (每一个都短小精悍): + - [ ] [概率解释 (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) + +- ### NP, NP-完全和近似算法 + - 知道最经典的一些 NP 完全问题,比如旅行商问题和背包问题, + 而且能在面试官试图忽悠你的时候识别出他们。 + - 知道 NP 完全是什么意思. + - [ ] [计算复杂度 (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) - [ ] Simonson: - - [ ] [Greedy Algs. II & Intro to NP Completeness (video)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) - - [ ] [NP Completeness II & Reductions (video)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [NP Completeness III (Video)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [NP Completeness IV (video)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) + - [ ] [贪心算法. II & 介绍 NP-完全性 (video)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [NP-完全性 II & 归约 (video)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP-完全性 III (Video)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP-完全性 IV (video)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] Skiena: - - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-CompletenessNP Completeness IV (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) - - [ ] [CSE373 2012 - Lecture 24 - NP-Completeness Proofs (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - Lecture 25 - NP-Completeness Challenge (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [Complexity: P, NP, NP-completeness, Reductions (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) - - [ ] [Complexity: Approximation Algorithms (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) - - [ ] [Complexity: Fixed-Parameter Algorithms (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - Peter Norvik discusses near-optimal solutions to traveling salesman problem: - - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) - - Pages 1048 - 1140 in CLRS if you have it. + - [ ] [CSE373 2012 - Lecture 23 - 介绍 NP-完全性 IV (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - Lecture 24 - NP-完全性证明 (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 25 - NP-完全性挑战 (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [复杂度: P, NP, NP-完全性, 规约 (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [复杂度: 近视算法 Algorithms (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) + - [ ] [复杂度: 固定参数算法 (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - Peter Norvik 讨论旅行商问题的近似最优解: + - [Jupyter 笔记本](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) + - 《算法导论》的第 1048 - 1140 页。 -- ### Caches - - [ ] LRU cache: - - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M) - - [ ] [Implementing LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI) +- ### 缓存 + - [ ] LRU 缓存: + - [ ] [LRU 的魔力 (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M) + - [ ] [实现 LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI) - [ ] [LeetCode - 146 LRU Cache (C++) (video)](https://www.youtube.com/watch?v=8-FZRAjR7qU) - [ ] CPU cache: - - [ ] [MIT 6.004 L15: The Memory Hierarchy (video)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) - - [ ] [MIT 6.004 L16: Cache Issues (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) + - [ ] [MIT 6.004 L15: 存储体系 (video)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) + - [ ] [MIT 6.004 L16: 缓存的问题 (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) -- ### Processes and Threads - - [ ] Computer Science 162 - Operating Systems (25 videos): - - for precesses and threads see videos 1-11 - - [Operating Systems and System Programming (video)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) - - [What Is The Difference Between A Process And A Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) - - Covers: - - Processes, Threads, Concurrency issues - - difference between processes and threads - - processes - - threads - - locks - - mutexes - - semaphores - - monitors - - how they work - - deadlock - - livelock - - CPU activity, interrupts, context switching - - Modern concurrency constructs with multicore processors - - Process resource needs (memory: code, static storage, stack, heap, and also file descriptors, i/o) - - Thread resource needs (shares above (minus stack) with other threads in same process but each has its own pc, stack counter, registers and stack) - - Forking is really copy on write (read-only) until the new process writes to memory, then it does a full copy. - - Context switching - - How context switching is initiated by the operating system and underlying hardware - - [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) - - [ ] concurrency in Python (videos): - - [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1) - - [ ] [Python Threads](https://www.youtube.com/watch?v=Bs7vPNbB9JM) - - [ ] [Understanding the Python GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s) - - [reference](http://www.dabeaz.com/GIL) - - [ ] [David Beazley - Python Concurrency From the Ground Up: LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4) - - [ ] [Keynote David Beazley - Topics of Interest (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU) - - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) +- ### 进程和线程 + - [ ] 计算机科学 162 - 操作系统 (25 个视频): + - 视频 1-11 是关于进程和线程 + - [操作系统和系统编程 (video)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [进程和线程的区别是什么?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) + - 涵盖了: + - 进程、线程、协程 + - 进程和线程的区别 + - 进程 + - 线程 + - 锁 + - 互斥 + - 信号量 + - 监控 + - 他们是如何工作的 + - 死锁 + - 活锁 + - CPU 活动, 中断, 上下文切换 + - 现代多核处理器的并发式结构 + - 进程资源需要(内存:代码、静态存储器、栈、堆、文件描述符、I/O) + - 线程资源需要(在同一个进程内和其他线程共享以上的资源,但是每个线程都有独立的程序计数器、栈计数器、寄存器和栈) + - Fork 操作是真正的写时复制(只读),直到新的进程写到内存中,才会生成一份新的拷贝。 + - 上下文切换 + - 操作系统和底层硬件是如何初始化上下文切换的。 + - [ ] [C++ 的线程 (系列 - 10 个视频)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) + - [ ] Python 的协程 (视频): + - [ ] [线程系列](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1) + - [ ] [Python 线程](https://www.youtube.com/watch?v=Bs7vPNbB9JM) + - [ ] [理解 Python 的 GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s) + - [参考](http://www.dabeaz.com/GIL) + - [ ] [David Beazley - Python 协程 - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4) + - [ ] [Keynote David Beazley - 兴趣主题 (Python 异步 I/O)](https://www.youtube.com/watch?v=ZzfHjytDceU) + - [ ] [Python 中的互斥](https://www.youtube.com/watch?v=0zaPs8OtyKY) - Scalability and System Design are very large topics with many topics and resources, since there is a lot to consider - when designing a software/hardware system that can scale. Expect to spend quite a bit of time on this. + 系统设计以及可伸缩性,要把软硬件的伸缩性设计的足够好有很多的东西要考虑,所以这是个包含非常多内容和资源的大主题。需要花费相当多的时间在这个主题上。 -- ### System Design, Scalability, Data Handling - - Considerations from Yegge: - - scalability - - 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 - - [ ] **START HERE**: [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - - [ ] [How Do I Prepare To Answer Design Questions In A Technical Inverview?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) - - [ ] [8 Things You Need to Know Before a System Design Interview](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/) - - [ ] [Algorithm design](http://www.hiredintech.com/algorithm-design/) - - [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM) - - [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - There are a lot of resources in this one. Look through the articles and examples. I put some of them below. - - [ ] [How to ace a systems design interview](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/) - - [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/) - - [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html) - - [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk) - - [ ] [A plain english introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) - - [ ] Paxos Consensus algorithm: - - [short video](https://www.youtube.com/watch?v=s8JqcZtvnsM) - - [extended video with use case and multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o) - - [paper](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf) - - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - - [ ] [Optional: UML 2.0 Series (vido)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] OOSE: Software Dev Using UML and Java (21 videos): - - Can skip this if you have a great grasp of OO and OO design practices. - - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [ ] SOLID OOP Principles: - - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) - - [ ] [SOLID Design Patterns in C# (video)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ) - - [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) - - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) - - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) - - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension for not for modification](https://en.wikipedia.org/wiki/Open/closed_principle) - - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) - - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) - - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) - - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use - - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) - - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) - - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects. - - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important) - - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) - - [ ] Scalability: - - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) - - [ ] Short series: - - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) - - [Database](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) - - [Cache](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) - - [Asynchronism](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) - - [ ] [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html) - - [ ] [Fallacies of Distributed Computing Explained](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) - - [ ] [Pragmatic Programming Techniques](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html) - - [extra: Google Pregel Graph Processing](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) - - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (video)](https://www.youtube.com/watch?v=modXC5IWTJI) - - [ ] [Introduction to Architecting Systems for Scale](http://lethain.com/introduction-to-architecting-systems-for-scale/) - - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (video)](https://www.youtube.com/watch?v=9nWyWwY2Onc) +- ### 系统设计、可伸缩性、数据处理 + - Yegge 的注意事项: + - 伸缩性 + - 把大数据集提取为单一值 + - 大数据集转换 + - 处理大量的数据集 + - 系统 + - 特征集 + - 接口 + - 类层次结构 + - 在特定的约束下设计系统 + - 轻量和健壮性 + - 权衡和折衷 + - 性能分析和优化 + - [ ] **从这里开始**: [HiredInTech:系统设计](http://www.hiredintech.com/system-design/) + - [ ] [该如何为技术面试里设计方面的问题做准备?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) + - [ ] [在系统设计面试前必须知道的 8 件事](http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/) + - [ ] [算法设计](http://www.hiredintech.com/algorithm-design/) + - [ ] [数据库范式 - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM) + - [ ] [系统设计面试](https://github.com/checkcheckzz/system-design-interview) - 这一部分有很多的资源,浏览一下我放在下面的文章和例子。 + - [ ] [如何在系统设计面试中脱颖而出](http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/) + - [ ] [每个人都该知道的一些数字](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/) + - [ ] [上下文切换操作会耗费多少时间?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html) + - [ ] [跨数据中心的事务 (video)](https://www.youtube.com/watch?v=srOgpXECblk) + - [ ] [简明 CAP 理论介绍](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) + - [ ] Paxos 一致性算法: + - [时间很短](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [用例 和 multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o) + - [论文](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf) + - [ ] [一致性哈希](http://www.tom-e-white.com/2007/11/consistent-hashing.html) + - [ ] [NoSQL 模式](http://horicky.blogspot.com/2009/11/nosql-patterns.html) + - [ ] [OOSE: UML 2.0 系列 (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] OOSE: 使用 UML 和 Java 开发软件 (21 videos): + - 如果你对 OO 都深刻的理解和实践,可以跳过这部分。 + - [OOSE: 使用 UML 和 Java 开发软件](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] 面向对象编程的 SOLID 原则: + - [ ] [Bob Martin 面向对象的 SOLID 原则和敏捷设计 (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] [C# SOLID 设计模式 (video)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ) + - [ ] [SOLID 原则 (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + - [ ] S - [单一职责原则](http://www.oodesign.com/single-responsibility-principle.html) | [每个对象的单一职责](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) + - [更多](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) + - [ ] O - [开闭原则](http://www.oodesign.com/open-close-principle.html) | [生产环境里的对象应该为扩展做准备而不是为更改](https://en.wikipedia.org/wiki/Open/closed_principle) + - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) + - [ ] L - [里氏代换原则](http://www.oodesign.com/liskov-s-substitution-principle.html) | [基类和继承类遵循 ‘IS A’ 原则](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) + - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) + - [ ] I - [接口隔离原则](http://www.oodesign.com/interface-segregation-principle.html) | 客户端被迫实现用不到的接口 + - [5 分钟讲解接口隔离原则 (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) + - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) + - [ ] D -[依赖反转原则](http://www.oodesign.com/dependency-inversion-principle.html) | 减少对象里的依赖。 + - [什么是依赖倒置以及它为什么重要](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important) + - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) + - [ ] 可伸缩性: + - [ ] [很棒的概述 (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) + - [ ] 简短系列: + - [克隆](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) + - [数据库](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) + - [缓存](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) + - [异步](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) + - [ ] [可伸缩的 Web 架构和分布式系统](http://www.aosabook.org/en/distsys.html) + - [ ] [错误的分布式系统解释](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) + - [ ] [实用编程技术](http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html) + - [extra: Google Pregel 图形处理](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) + - [ ] [Jeff Dean - 在 Goolge 构建软件系统 (video)](https://www.youtube.com/watch?v=modXC5IWTJI) + - [ ] [可伸缩系统架构设计介绍](http://lethain.com/introduction-to-architecting-systems-for-scale/) + - [ ] [使用 App Engine 和云存储扩展面向全球用户的手机游戏架构实践(video)](https://www.youtube.com/watch?v=9nWyWwY2Onc) - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0) - - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/) - - [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) - - [ ] [Scale at Facebook (2009)](https://www.infoq.com/presentations/Scale-at-Facebook) - - [ ] [Scale at Facebook (2012), "Building for a Billion Users" (video)](https://www.youtube.com/watch?v=oodS71YtkGU) - - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) - - [ ] [7 Years Of YouTube Scalability Lessons In 30 Minutes](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) + - [ ] [算法的重要性](https://www.topcoder.com/community/data-science/data-science-tutorials/the-importance-of-algorithms/) + - [ ] [分片](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) + - [ ] [Facebook 系统规模扩展实践 (2009)](https://www.infoq.com/presentations/Scale-at-Facebook) + - [ ] [Facebook 系统规模扩展实践 (2012), "为 10 亿用户构建" (video)](https://www.youtube.com/watch?v=oodS71YtkGU) + - [ ] [Long Game 工程实践 - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) + - [ ] [30 分钟看完 YouTuBe 7 年系统扩展经验](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) - [video](https://www.youtube.com/watch?v=G-lGCC4KKok) - - [ ] [How PayPal Scaled To Billions Of Transactions Daily Using Just 8VMs](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html) - - [ ] [How to Remove Duplicates in Large Datasets](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) - - [ ] [A look inside Etsy's scale and engineering culture with Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o) - - [ ] [What Led Amazon to its Own Microservices Architecture](http://thenewstack.io/led-amazon-microservices-architecture/) - - [ ] [To Compress Or Not To Compress, That Was Uber's Question](https://eng.uber.com/trip-data-squeeze/) - - [ ] [Asyncio Tarantool Queue, Get In The Queue](http://highscalability.com/blog/2016/3/3/asyncio-tarantool-queue-get-in-the-queue.html) - - [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html) - - [ ] [Google's Transition From Single Datacenter, To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) + - [ ] [PayPal 如何用 8 台虚拟机扛住 10 亿日交易量系统](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html) + - [ ] [如何对大数据集去重](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) + - [ ] [Etsy 的扩展和工程文化探究 Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o) + - [ ] [是什么造就了 Amazon 自己的微服务架构](http://thenewstack.io/led-amazon-microservices-architecture/) + - [ ] [压缩还是不压缩,是 Uber 面临的问题](https://eng.uber.com/trip-data-squeeze/) + - [ ] [异步 I/O Tarantool 队列](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) + - [ ] [Google 从单数据中心到故障转移, 到本地多宿主架构的演变]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) - [ ] [Spanner](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html) - - [ ] [Egnyte Architecture: Lessons Learned In Building And Scaling A Multi Petabyte Distributed System](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html) - - [ ] [Machine Learning Driven Programming: A New Programming For A New World](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html) - - [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html) - - [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) - - [ ] [Tinder: How Does One Of The Largest Recommendation Engines Decide Who You'll See Next?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html) - - [ ] [Design Of A Modern Cache](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html) - - [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) - - [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html) - - [ ] [How Does The Use Of Docker Effect Latency?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html) - - [ ] [Does AMP Counter An Existential Threat To Google?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html) - - [ ] [A 360 Degree View Of The Entire Netflix Stack](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html) - - [ ] [Latency Is Everywhere And It Costs You Sales - How To Crush It](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it) - - [ ] [Serverless (very long, just need the gist)](http://martinfowler.com/articles/serverless.html) - - [ ] [What Powers Instagram: Hundreds of Instances, Dozens of Technologies](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) - - [ ] [Cinchcast Architecture - Producing 1,500 Hours Of Audio Every Day](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html) - - [ ] [Justin.Tv's Live Video Broadcasting Architecture](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html) - - [ ] [Playfish's Social Gaming Architecture - 50 Million Monthly Users And Growing](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) - - [ ] [TripAdvisor Architecture - 40M Visitors, 200M Dynamic Page Views, 30TB Data](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html) - - [ ] [PlentyOfFish Architecture](http://highscalability.com/plentyoffish-architecture) - - [ ] [Salesforce Architecture - How They Handle 1.3 Billion Transactions A Day](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) - - [ ] [ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html) - - [ ] See "Messaging, Serialization, and Queueing Systems" way below for info on some of the technologies that can glue services together + - [ ] [Egnyte: 构建和扩展 PB 级分布式系统架构的经验教训](http://highscalability.com/blog/2016/2/15/egnyte-architecture-lessons-learned-in-building-and-scaling.html) + - [ ] [机器学习驱动的编程: 新世界的新编程方式](http://highscalability.com/blog/2016/7/6/machine-learning-driven-programming-a-new-programming-for-a.html) + - [ ] [日服务数百万请求的图像优化技术](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html) + - [ ] [Patreon 架构](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) + - [ ] [Tinder: 推荐引擎是如何决定下一个你将会看到谁的?](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) + - [ ] [Facebook 实时视频流扩展](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) + - [ ] [在 Amazon AWS 上把服务扩展到 1100 万量级的新手教程](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html) + - [ ] [对延时敏感的应用是否应该使用 Docker?](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html) + - [ ] [AMP(Accelerated Mobile Pages)的存在是对 Google 的威胁么?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html) + - [ ] [360 度解读 Netflix 技术栈](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html) + - [ ] [延迟无处不在 - 如何搞定它?](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it) + - [ ] [无服务器架构](http://martinfowler.com/articles/serverless.html) + - [ ] [是什么驱动着 Instagram: 上百个实例、几十种技术](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) + - [ ] [Cinchcast 架构 - 每天处理 1500 小时的音频](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html) + - [ ] [Justin.Tv 实时视频播放架构](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html) + - [ ] [Playfish's 社交游戏架构 - 每月五千万用户增长](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) + - [ ] [猫途鹰架构 - 40 万访客, 200 万动态页面访问, 30TB 数据](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html) + - [ ] [PlentyOfFish 架构](http://highscalability.com/plentyoffish-architecture) + - [ ] [Salesforce 架构 - 如何扛住 13 亿日交易量](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) + - [ ] [ESPN's 架构扩展](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html) + - [ ] 下面 『消息、序列化和消息系统』部分的内容会提到什么样的技术能把各种服务整合到一起 - [ ] Twitter: - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI) - - [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) - - For even more, see "Mining Massive Datasets" video series in the Video Series section. - - [ ] Practicing the system design process: Here are some ideas to try working through on paper, each with some documentation on how it was handled in the real world: - - review: [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [时间线的扩展](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) + - 更多内容可以查看视频部分的『大规模数据挖掘』视频系列。 + - [ ] 系统设计问题练习:下面有一些指导原则,每一个都有相关文档以及在现实中该如何处理。 + - 复习: [HiredInTech 的系统设计](http://www.hiredintech.com/system-design/) - [cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) - - flow: - 1. Understand the problem and scope: - - define the use cases, with interviewer's help - - suggest additional features - - remove items that interviewer deems out of scope - - assume high availability is required, add as a use case - 2. Think about constraints: - - ask how many requests per month - - ask how many requests per second (they may volunteer it or make you do the math) - - estimate reads vs. writes percentage - - keep 80/20 rule in mind when estimating - - how much data written per second - - total storage required over 5 years - - how much data read per second - 3. Abstract design: - - layers (service, data, caching) - - infrastructure: load balancing, messaging - - rough overview of any key algorithm that drives the service - - consider bottlenecks and determine solutions - - Exercises: - - [Design a CDN network: old article](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) - - [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake) - - [Design an online multiplayer card game](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html) - - [Design a key-value database](http://www.slideshare.net/dvirsky/introduction-to-redis) - - [Design a function to return the top k requests during past time interval]( https://icmi.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf) - - [Design a picture sharing system](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) - - [Design a recommendation system](http://ijcai13.org/files/tutorial_slides/td3.pdf) - - [Design a URL-shortener system: copied from above](http://www.hiredintech.com/system-design/the-system-design-process/) - - [Design a cache system](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) + - 流程: + 1. 理解问题和范围: + - 在面试官的帮助下定义用例 + - 提出附加功能的建议 + - 去掉面试官认定范围以外的内容 + - 假定高可用是必须的,而且要作为一个用例 + 2. 考虑约束: + - 问一下每月请求量 + - 问一下每秒请求量 (他们可能会主动提到或者让你算一下) + - 评估读写所占的百分比 + - 评估的时候牢记 2/8 原则 + - 每秒写多少数据 + - 总的数据存储量要考虑超过 5 年的情况 + - 每秒读多少数据 + 3. 抽象设计: + - 分层 (服务, 数据, 缓存) + - 基础设施: 负载均衡, 消息 + - 粗略的概括任何驱动整个服务的关键算法 + - 考虑瓶颈并指出解决方案 + - 练习: + - [设计一个 CDN 网络](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) + - [设计一个随机唯一 ID 生成系统](https://blog.twitter.com/2010/announcing-snowflake) + - [设计一个在线多人卡牌游戏](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html) + - [设计一个 key-value 数据库](http://www.slideshare.net/dvirsky/introduction-to-redis) + - [设计一个函数获取过去某个时间段内前 K 个最高频访问的请求]( https://icmi.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf) + - [设计一个图片分享系统](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) + - [设计一个推荐系统](http://ijcai13.org/files/tutorial_slides/td3.pdf) + - [设计一个短域名生成系统](http://www.hiredintech.com/system-design/the-system-design-process/) + - [设计一个缓存系统](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) -- ### Papers - - These are Google papers and well-known papers. - - Reading all from end to end with full comprehension will likely take more time than you have. I recommend being selective on papers and their sections. - - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - - [implemented in Go](https://godoc.org/github.com/thomas11/csp) - - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - - [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) - - replaced by Colossus in 2012 +- ### 论文 + - 有 Google 的论文和一些知名的论文. + - 你很可能实在没时间一篇篇完整的读完他们。我建议可以有选择的读其中一些论文里的核心部分。 + - [ ] [1978: 通信顺序处理](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [Go 实现](https://godoc.org/github.com/thomas11/csp) + - [喜欢经典的论文?](https://www.cs.cmu.edu/~crary/819-f09/) + - [ ] [2003: The Google 文件系统](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) + - 2012 年被 Colossus 取代了 - [ ] [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) - - mostly replaced by Cloud Dataflow? - - [ ] [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf) - - [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) - - paper not available - - [ ] 2012: AddressSanitizer: A Fast Address Sanity Checker: - - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) - - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany) - - [ ] 2013: Spanner: Google’s Globally-Distributed Database: - - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) - - [video](https://www.usenix.org/node/170855) + - 大多被云数据流取代了? + - [ ] [2007: 每个程序员都应该知道的内存知识 (非常长,作者建议跳过某些章节来阅读)](https://www.akkadia.org/drepper/cpumemory.pdf) + - [ ] [2012: Google 的 Colossus](https://www.wired.com/2012/07/google-colossus/) + - 没有论文 + - [ ] 2012: AddressSanitizer: 快速的内存访问检查器: + - [论文](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) + - [视频](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany) + - [ ] 2013: Spanner: Google 的分布式数据库: + - [论文](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) + - [视频](https://www.usenix.org/node/170855) - [ ] [2014: Machine Learning: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) - [ ] [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) - - [ ] [2015: High-Availability at Massive Scale: Building Google’s Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf) - - [ ] [2015: TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems](http://download.tensorflow.org/paper/whitepaper2015.pdf ) - - [ ] [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) + - [ ] [2015: 大规模高可用: 构建 Google Ads 的数据基础设施](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf) + - [ ] [2015: TensorFlow: 异构分布式系统上的大规模机器学习](http://download.tensorflow.org/paper/whitepaper2015.pdf ) + - [ ] [2015: 开发者应该如何搜索代码:用例学习](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) - [ ] [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf) -- ### Testing - - To cover: - - how unit testing works - - what are mock objects - - what is integration testing - - what is dependency injection - - [ ] [Agile Software Testing with James Bach (video)](https://www.youtube.com/watch?v=SAhJf36_u5U) - - [ ] [Open Lecture by James Bach on Software Testing (video)](https://www.youtube.com/watch?v=ILkT_HV9DVU) - - [ ] [Steve Freeman - Test-Driven Development (that’s not what we meant) (video)](https://vimeo.com/83960706) +- ### 测试 + - 涵盖了: + - 单元测试是如何工作的 + - 什么是模拟对象 + - 什么是集成测试 + - 什么是依赖注入 + - [ ] [James Bach 讲敏捷软件测试 (video)](https://www.youtube.com/watch?v=SAhJf36_u5U) + - [ ] [James Bach 软件测试公开课 (video)](https://www.youtube.com/watch?v=ILkT_HV9DVU) + - [ ] [Steve Freeman - 测试驱动的开发 (video)](https://vimeo.com/83960706) - [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) - - [ ] [TDD is dead. Long live testing.](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html) - - [ ] [Is TDD dead? (video)](https://www.youtube.com/watch?v=z9quxZsLcfo) - - [ ] [Video series (152 videos) - not all are needed (video)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g) - - [ ] [Test-Driven Web Development with Python](http://www.obeythetestinggoat.com/pages/book.html#toc) - - [ ] Dependency injection: - - [ ] [video](https://www.youtube.com/watch?v=IKD2-MAkXyQ) - - [ ] [Tao Of Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html) - - [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) + - [ ] [测试驱动的开发已死. 测试不朽。](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html) + - [ ] [测试驱动的开发已死? (video)](https://www.youtube.com/watch?v=z9quxZsLcfo) + - [ ] [视频系列 (152 个) - 并不都是必须 (video)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g) + - [ ] [Python:测试驱动的 Web 开发](http://www.obeythetestinggoat.com/pages/book.html#toc) + - [ ] 依赖注入: + - [ ] [视频](https://www.youtube.com/watch?v=IKD2-MAkXyQ) + - [ ] [测试之道](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html) + - [ ] [如何编写测试](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) -- ### Scheduling - - in an OS, how it works - - can be gleaned from Operating System videos +- ### 调度 + - 在操作系统中是如何运作的 + - 在操作系统部分的视频里有很多资料 -- ### Implement system routines - - understand what lies beneath the programming APIs you use - - can you implement them? +- ### 实现系统例程 + - 理解你使用的系统 API 底层有什么 + - 你能自己实现它们么? -- ### String searching & manipulations - - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) +- ### 字符串搜索和操作 + - [ ] [文本的搜索模式 (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - [ ] Rabin-Karp (videos): - - [Rabin Karps Algorithm](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm) - - [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation) - - [Optimization: Implementation and Analysis](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis) + - [Rabin Karps 算法](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm) + - [预先计算的优化](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation) + - [优化: 实现和分析](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis) - [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9) - - [Rolling Hashes, Amortized Analysis](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32) - - [ ] Knuth-Morris-Pratt (KMP): - - [Pratt Algorithm](https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm) - - [Tutorial: The Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=2ogqPWJSftE) - - [ ] Boyer–Moore string search algorithm - - [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) - - [Advanced String Searching Boyer-Moore-Horspool Algorithms (video)](https://www.youtube.com/watch?v=QDZpzctPf10) - - [ ] [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) + - [滚动哈希](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32) + - [ ] Knuth-Morris-Pratt (KMP) 算法: + - [Pratt 算法](https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm) + - [教程: Knuth-Morris-Pratt (KMP) 字符串匹配算法](https://www.youtube.com/watch?v=2ogqPWJSftE) + - [ ] Boyer–Moore 字符串搜索算法 + - [Boyer-Moore字符串搜索算法](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) + - [Boyer-Moore-Horspool 高级字符串搜索算法 (video)](https://www.youtube.com/watch?v=QDZpzctPf10) + - [ ] [Coursera: 字符串的算法](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) --- -## Final Review +## 终面 - This section will have shorter videos that can you watch pretty quickly to review most of the important concepts. - It's nice if you want a refresher often. - (More items will be added here) + 这一部分有一些短视频,你可以快速的观看和复习大多数重要概念。 + 这对经常性的巩固很有帮助。 -#### General: +#### 综述: -- [ ] Series of 2-3 minutes short subject videos (23 videos) +- [ ] 2-3 分钟的短视频系列 (23 个) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (18 videos): +- [ ] 2-5 分钟的短视频系列 - Michael Sambol (18 个): - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) -#### Sorts: +#### 排序: -- [ ] Merge Sort: https://www.youtube.com/watch?v=GCae1WNvnZM +- [ ] 归并排序: https://www.youtube.com/watch?v=GCae1WNvnZM -## Books +## 书籍 -### Mentioned in Google Coaching +### Google Coaching 里提到的 -**Read and do exercises:** +**阅读并做练习:** -- [ ] The Algorithm Design Manual (Skiena) - - Book (can rent on kindle): +- [ ] 算法设计手册 (Skiena) + - 书 (Kindle 上可以租到): - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) - - Half.com is a great resource for textbooks at good prices. - - Answers: - - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) - - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) - - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) + - Half.com 是一个资源丰富且性价比很高的在线书店. + - 答案: + - [解答](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) + - [解答](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) + - [勘误表](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) - Once you've understood everything in the daily plan, and read and done exercises from the the books above, read and do exercises from the books below. Then move to coding challenges (further down below) + 一旦你理解了每日计划里的所有内容,就去读上面所列的书并完成练习,然后开始读下面所列的书并做练习,之后就可以开始实战写代码了(本文再往后的部分) -**Read first:** +**首先阅读:** - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) -**Read second (recommended by many, but not in Google coaching docs):** +**然后阅读 (这本获得了很多推荐, 但是不在 Google coaching 的文档里):** - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - If you see people reference "The Google Resume", it was a book replaced by "Cracking the Coding Interview". + - 如果你看到有人在看 "The Google Resume", 实际上它和 "Cracking the Coding Interview" 是同一个作者写的,而且后者是升级版。 -### Additional books +### 附加书单 - These were not suggested by Google but I added because I needed the background knowledge +这些没有被 Google 推荐阅读,不过我因为需要这些背景知识所以也把它们列在了这里。 - [ ] C Programming Language, Vol 2 - - [answers to questions](https://github.com/lekkas/c-algorithms) + - [练习的答案](https://github.com/lekkas/c-algorithms) - [ ] C++ Primer Plus, 6th Edition -- [ ] [The Unix Programming Environment](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=info) +- [ ] [《Unxi 环境高级编程》 The Unix Programming Environment](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=info) -- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) +- [ ] [《编程珠玑》 Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - [ ] [Algorithms and Programming: Problems and Solutions](http://www.amazon.com/Algorithms-Programming-Solutions-Alexander-Shen/dp/0817638474) -### If you have time +### 如果你有时间 - [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - Half.com is a great resource for textbooks at good prices. - [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - - all code is in C++, if you're looking to use C++ in your interview - - good book on problem solving in general. + - 如果你希望在面试里用 C++ 写代码,这本书的代码全都是 C++ 写的 + - 通常情况下能找到解决方案的好书. -## Coding exercises/challenges +## 编码练习和挑战 -Once you've learned your brains out, put those brains to work. -Take coding challenges every day, as many as you can. +一旦你学会了理论基础,就应该把它们拿出来练练。 +尽量坚持每天做编码练习,越多越好。 -Programming Question Prep: +编程问题预备: -- [ ] [Great intro (copied from System Design section): Algorithm design:](http://www.hiredintech.com/algorithm-design/) -- [ ] [How to Find a Solution](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/) -- [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/) -- [ ] [Mathematics for Topcoders](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/) -- [ ] [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/) +- [ ] [不错的介绍 (摘自 System Design 章节): 算法设计:](http://www.hiredintech.com/algorithm-design/) +- [ ] [如何找到解决方案](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/) +- [ ] [如何剖析 Topcoder 题目描述](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/) +- [ ] [Topcoders 里用到的数学](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/) +- [ ] [动态规划 – 从入门到精通](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/) -- [MIT Interview Materials](https://courses.csail.mit.edu/iap/interview/materials.php) +- [MIT 面试材料](https://courses.csail.mit.edu/iap/interview/materials.php) -- [Exercises for getting better at a given language](http://exercism.io/languages) +- [针对编程语言本身的练习](http://exercism.io/languages) -Programming: +编码练习平台: - [LeetCode](https://leetcode.com/) - [TopCoder](https://www.topcoder.com/) -- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) +- [Project Euler (数学方向为主)](https://projecteuler.net/index.php?section=problems) - [Codewars](http://www.codewars.com) - [HackerRank](https://www.hackerrank.com/) - [Codility](https://codility.com/programmers/) - [InterviewCake](https://www.interviewcake.com/) - [InterviewBit](https://www.interviewbit.com/invite/icjf) -- [Mock interviewers from big companies](http://www.gainlo.co/) +- [模拟大公司的面试](http://www.gainlo.co/) -## Once you're closer to the interview +## 当你临近面试时 -- [ ] Cracking The Coding Interview Set 2 (videos): +- [ ] 搞定代码面试 (videos): - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo) - - [Cracking the Coding Interview - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo) - - [Ask Me Anything: Gayle Laakmann McDowell (author of Cracking the Coding Interview)](https://www.youtube.com/watch?v=1fqxMuPmGak) + - [Cracking the Coding Interview - 全栈系列](https://www.youtube.com/watch?v=Eg5-tdAwclo) + - [Ask Me Anything: Gayle Laakmann McDowell (Cracking the Coding Interview 的作者)](https://www.youtube.com/watch?v=1fqxMuPmGak) -## Your Resume +## 你的简历 -- [Ten Tips for a (Slightly) Less Awful Resume](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html) -- Great stuff at the back of Cracking The Coding Interview +- [10 条小贴士让你写出一份还算不错的简历](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html) +- 这是搞定面试的第一个关键步骤 -## Be thinking of for when the interview comes +## 当面试来临的时候 - Think of about 20 interview questions you'll get, along the lines of the items below. - Have 2-3 answers for each - Have a story, not just data, about something you accomplished + 随着下面列举的问题思考下你可能会遇到的 20 个面试问题 + 每个问题准备 2-3 种回答 + 准备点故事,不要只是摆一些你完成的事情的数据,相信我,人人都喜欢听故事 -- Why do you want this job? -- What's a tough problem you've solved? -- Biggest challenges faced? -- Best/worst designs seen? -- Ideas for improving an existing Google product. -- How do you work best, as an individual and as part of a team? -- Which of your skills or experiences would be assets in the role and why? -- What did you most enjoy at [job x / project y]? -- What was the biggest challenge you faced at [job x / project y]? -- What was the hardest bug you faced at [job x / project y]? -- What did you learn at [job x / project y]? -- What would you have done better at [job x / project y]? +- 你为什么想得到这份工作? +- 你解决过的最有难度的问题是什么? +- 面对过的最大挑战是什么? +- 见过的最好或者最坏的设计是怎么样的? +- 对某项 Google 产品提出改进建议。 +- 你作为一个个体同时也是团队的一员,如何达到最好的工作状态? +- 你的什么技能或者经验是你的角色中不可或缺的?为什么? +- 你在某份工作或某个项目中最享受的是什么? +- 你在某份工作或某个项目中面临过的最大挑战是什么? +- 你在某份工作或某个项目中遇到过的最蛋疼的 Bug 是什么样的? +- 你在某份工作或某个项目中学到了什么? +- 你在某份工作或某个项目中哪些地方还可以做的更好? -## Have questions for the interviewer +## 问面试官的问题 - Some of mine (I already may know answer to but want their opinion or team perspective): + 我会问的一些:(可能我已经知道了答案但我想听听面试官的看法或者了解团队的前景): -- How large is your team? -- What is your dev cycle look like? Do you do waterfall/sprints/agile? -- Are rushes to deadlines common? Or is there flexibility? -- How are decisions made in your team? -- How many meetings do you have per week? -- Do you feel your work environment helps you concentrate? -- What are you working on? -- What do you like about it? -- What is the work life like? +- 团队多大规模? +- 开发周期是怎样的? 会使用瀑布流/极限编程/敏捷开发么? +- 经常会为 deadline 加班么? 或者是有弹性的? +- 团队里怎么做技术选型? +- 每周平均开多少次会? +- 你觉得工作环境有助于员工集中精力吗? +- 目前正在做什么工作? +- 喜欢这些事情吗? +- 工作期限是怎么样的? -## Once You've Got The Job +## 当你获得了梦想的职位 -Congratulations! +我还能说些什么呢,恭喜你! -- [10 things I wish I knew on my first day at Google](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw) +- [我希望在 Google 的第一天就知道的 10 件事](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw) -Keep learning. +坚持继续学习。 -You're never really done. +得到这份工作只是一个开始。 --- @@ -1612,14 +1612,14 @@ You're never really done. above because it's just too much. It's easy to overdo it on a subject. You want to get hired in this century, right? -- [ ] **More Dynamic Programming** (videos) - - [ ] [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19) - - [ ] [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20) +- [ ] **More 动态规划** (videos) + - [ ] [6.006: 动态规划 I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19) + - [ ] [6.006: 动态规划 II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20) - [ ] [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21) - [ ] [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - [ ] [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) - - [ ] [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) + - [ ] [6.046: 动态规划 & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [6.046: 动态规划: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) + - [ ] [6.046: 动态规划 (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) - [ ] **Advanced Graph Processing** (videos) - [ ] [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) @@ -1641,7 +1641,7 @@ You're never really done. Sit back and enjoy. "netflix and skill" :P -- [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) +- [ ] [List of individual 动态规划 problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - [ ] [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) From 8f02ecac96d7ccb86c61bf250c9cbfc8dfead749 Mon Sep 17 00:00:00 2001 From: newt0n Date: Tue, 11 Oct 2016 13:31:41 +0800 Subject: [PATCH 45/61] * minor tweaks --- README-cn.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README-cn.md b/README-cn.md index 221eaa0..fc061d8 100644 --- a/README-cn.md +++ b/README-cn.md @@ -658,9 +658,9 @@ - 2-3树是一种分支系数为3的树 - [ ] [K 叉树](https://en.wikipedia.org/wiki/K-ary_tree) -## Sorting +## 排序(Sorting) -- [ ] Notes: +- [ ] 笔记: - 实现各种排序 & 知道每种排序的最坏、最好和平均的复杂度分别是什么场景: - 不要用冒泡排序 - 大多数情况下效率感人 - 时间复杂度 O(n^2), 除非 n <= 16 - [ ] 排序算法的稳定性 ("快排是稳定的么?") @@ -723,7 +723,7 @@ - [ ] [随机算法: 矩阵相乘, 快排, Freivalds' 算法 (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - [ ] [线性时间内的排序 (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) -## 图 +## 图(Graphs) 图论能解决计算机科学里的很多问题,所以这一节会比较长,像树和排序的部分一样。 @@ -789,7 +789,7 @@ ## 更多知识 -- ### 递归 +- ### 递归(Recursion) - [ ] Stanford 大学关于递归 & 回溯的课程: - [ ] [课程 8 | 抽象编程 (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) - [ ] [课程 9 | 抽象编程 (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) @@ -800,7 +800,7 @@ - [ ] [什么是尾递归以及为什么它如此糟糕?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) - [ ] [尾递归 (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) -- ### 动态规划 +- ### 动态规划(Dynamic Programming) - This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky. - 这一部分会有点困难,每个可以用动态规划解决的问题都必须先定义出递推关系,要推导出来可能会有点棘手。 - 我建议先阅读和学习足够多的动态规划的例子,以便对解决 DP 问题的一般模式有个扎实的理解。 @@ -827,7 +827,7 @@ - [ ] [全局成对序列排列 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) - [ ] [本地成对序列排列 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) -- ### 组合 (n 中选 k 个) & 概率 +- ### 组合(Combinatorics) (n 中选 k 个) & 概率(Probability) - [ ] [数据技巧: 如何找出阶乘、排列和组合(选择) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) - [ ] [来点学校的东西: 概率 (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) - [ ] [来点学校的东西: 概率和马尔可夫链 (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ) @@ -858,7 +858,7 @@ - [Jupyter 笔记本](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) - 《算法导论》的第 1048 - 1140 页。 -- ### 缓存 +- ### 缓存(Cache) - [ ] LRU 缓存: - [ ] [LRU 的魔力 (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M) - [ ] [实现 LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI) @@ -867,7 +867,7 @@ - [ ] [MIT 6.004 L15: 存储体系 (video)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) - [ ] [MIT 6.004 L16: 缓存的问题 (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) -- ### 进程和线程 +- ### 进程(Processe)和线程(Thread) - [ ] 计算机科学 162 - 操作系统 (25 个视频): - 视频 1-11 是关于进程和线程 - [操作系统和系统编程 (video)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) From e1cf1826c068a2628bac1c233a2f1041695b4946 Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 15:04:25 +0800 Subject: [PATCH 46/61] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E8=AF=91=E8=80=85=E7=9A=84=E8=AF=91=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 241 ++++++++++++++++++++++++++------------------------- 1 file changed, 121 insertions(+), 120 deletions(-) diff --git a/README-cn.md b/README-cn.md index fc061d8..485d820 100644 --- a/README-cn.md +++ b/README-cn.md @@ -1315,8 +1315,8 @@ - [Writing C Programs With Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) - [(maybe) Org Mode In Depth: Managing Structure (video)](https://www.youtube.com/watch?v=nsGYet02bEk) -- ### Unix command line tools - - suggested by Yegge, from an old Amazon recruiting post. I filled in the list below from good tools. +- ### Unix命令行工具(Unix command line tools) + - 下列内容中的优秀工具由的Yegge推荐,Yegge目前致力于Amazon人事招聘处。 - [ ] bash - [ ] cat - [ ] grep @@ -1329,88 +1329,88 @@ - [ ] [strace](https://en.wikipedia.org/wiki/Strace) - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/) -- ### Information theory (videos) - - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory) - - [ ] more about Markov processes: - - [ ] [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) - - [ ] [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) - - [ ] [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through) - - See more in MIT 6.050J Information and Entropy series below. +- ### 信息资源 (视频) + - [ ] [Khan Academy可汗学院](https://www.khanacademy.org/computing/computer-science/informationtheory) + - [ ] 更多有关马尔可夫的内容: + - [ ] [Core Markov Text Generation马尔可夫内容生成](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) + - [ ] [Core Implementing Markov Text Generation马尔可夫内容生成补充](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) + - [ ] [Project = Markov Text Generation Walk Through一个马尔可夫内容生成器的项目](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through) + - 关于更多信息,请参照下方 MIT 6.050J 信息和系统复杂度的内容. -- ### Parity & Hamming Code (videos) - - [ ] [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) - - [ ] [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M) +- ### 奇偶校验位 & 汉明码 (视频) + - [ ] [入门](https://www.youtube.com/watch?v=q-3BctoUpHE) + - [ ] [奇偶校验位](https://www.youtube.com/watch?v=DdMcAUlxh1M) - [ ] Hamming Code: - - [Error detection](https://www.youtube.com/watch?v=1A_NcXxdoCc) - - [Error correction](https://www.youtube.com/watch?v=JAMLuxdHH8o) - - [ ] [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk) + - [发现错误](https://www.youtube.com/watch?v=1A_NcXxdoCc) + - [修正错误](https://www.youtube.com/watch?v=JAMLuxdHH8o) + - [ ] [检查错误](https://www.youtube.com/watch?v=wbH2VxzmoZk) -- ### Entropy - - also see videos below - - make sure to watch information theory videos first - - [ ] [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176) +- ### 系统熵值(系统复杂度) + - 请参考下方视频 + - 观看之前,请先确定观看了信息论的视频 + - [ ] [信息理论, 克劳德·香农, 熵值, 系统冗余, 数据比特压缩 (视频)](https://youtu.be/JnJq3Py0dyM?t=176) -- ### Cryptography - - also see videos below - - make sure to watch information theory videos first - - [ ] [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography) - - [ ] [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30) - - [ ] [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) +- ### 密码学 + - 请参考下方视频 + - 观看之前,请先确定观看了信息论的视频 + - [ ] [可汗学院](https://www.khanacademy.org/computing/computer-science/密码学) + - [ ] [密码学: 哈希函数](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30) + - [ ] [密码学: 加密](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) -- ### Compression - - make sure to watch information theory videos first - - [ ] Computerphile (videos): - - [ ] [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w) - - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko) - - [ ] [Upside Down Trees (Huffman Trees)](https://www.youtube.com/watch?v=umTbivyJoiI) - - [ ] [EXTRA BITS/TRITS - Huffman Trees](https://www.youtube.com/watch?v=DV8efuB3h2g) - - [ ] [Elegant Compression in Text (The LZ 77 Method)](https://www.youtube.com/watch?v=goOa3DGezUA) +- ### 压缩 + - 观看之前,请先确定观看了信息论的视频 + - [ ] 压缩 (视频): + - [ ] [压缩](https://www.youtube.com/watch?v=Lto-ajuqW3w) + - [ ] [压缩熵值](https://www.youtube.com/watch?v=M5c_RFKVkko) + - [ ] [由上而下的树 (霍夫曼编码树)](https://www.youtube.com/watch?v=umTbivyJoiI) + - [ ] [额外比特 - 霍夫曼编码树](https://www.youtube.com/watch?v=DV8efuB3h2g) + - [ ] [优雅的压缩数据 (无损数据压缩方法)](https://www.youtube.com/watch?v=goOa3DGezUA) - [ ] [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU) - - [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) - - [ ] [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s) + - [ ] [数据压缩的艺术](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) + - [ ] [(可选) 谷歌开发者: GZIP 还差远了呢!](https://www.youtube.com/watch?v=whGwm0Lky2s) -- ### Networking (videos) - - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) - - [ ] [UDP and TCP: Comparison of Transport Protocols](https://www.youtube.com/watch?v=Vdc8TCESIg8) - - [ ] [TCP/IP and the OSI Model Explained!](https://www.youtube.com/watch?v=e5DEVa9eSN0) - - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial.](https://www.youtube.com/watch?v=nomyRJehhnM) +- ### 网络 (视频) + - [ ] [可汗学院](https://www.khanacademy.org/computing/computer-science/internet-intro) + - [ ] [网络传输协议中的数据压缩](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP 和 OSI 模型解析!](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [TCP/IP 教程:传输数据包.](https://www.youtube.com/watch?v=nomyRJehhnM) - [ ] [HTTP](https://www.youtube.com/watch?v=WGJrLqtX7As) - - [ ] [SSL and HTTPS](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL 和 HTTPS](https://www.youtube.com/watch?v=S2iBR2ZlZf0) - [ ] [SSL/TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM) - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8) - - [ ] [Video Series (21 videos)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) - - [ ] [Subnetting Demystified - Part 5 CIDR Notation](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] [视频](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [子网络解密 - 第五部分 经典内部域名指向CIDR标记](https://www.youtube.com/watch?v=t5xYI0jzOf4) -- ### Computer Security - - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - - [ ] [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - - [ ] [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2) - - [ ] [Buffer Overflow Exploits and Defenses](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3) - - [ ] [Privilege Separation](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - - [ ] [Capabilities](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - - [ ] [Sandboxing Native Code](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6) - - [ ] [Web Security Model](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - - [ ] [Securing Web Applications](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - - [ ] [Symbolic Execution](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - - [ ] [Network Security](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - - [ ] [Network Protocols](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - - [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) +- ### 电脑安全 + - [MIT](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [威胁模型:入门](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [控制攻击](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2) + - [ ] [缓冲数据注入和防御](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3) + - [ ] [优先权区分](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [能力](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [在沙盒中运行原生代码](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6) + - [ ] [网络安全模型](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [网络安全应用](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [标志化执行](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [网络安全](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [网络协议](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [ ] [旁路攻击](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) -- ### Garbage collection - - [ ] [Garbage collection (Java); Augmenting data str (video)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25) - - [ ] [Compilers (video)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) - - [ ] [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI) - - [ ] [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits) - - [ ] [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3) +- ### 释放缓存 + - [ ] [Java 释放缓存; 片段化数据 (视频)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25) + - [ ] [编译器 (视频)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) + - [ ] [Python 释放缓存 (视频)](https://www.youtube.com/watch?v=iHVs_HkjdmI) + - [ ] [深度解析:论释放缓存在JAVA中的重要性](https://www.infoq.com/presentations/garbage-collection-benefits) + - [ ] [深度解析:论释放缓存在Python中的重要性(视频)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3) -- ### Parallel Programming +- ### 平行化(多线程)编程 - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1) - - [ ] [Efficient Python for High Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk) + - [ ] [论平行化编程如何提高Python执行效率 (视频)](https://www.youtube.com/watch?v=uY85GkaYzBk) -- ### Design patterns - - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) - - [ ] Learn these patterns: - - [ ] strategy +- ### 设计模式 + - [ ] [UML统一建模语言概览 (视频)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) + - [ ] 主要有如下的设计模式: + - [ ] s(strategy) - [ ] singleton - [ ] adapter - [ ] prototype @@ -1427,76 +1427,77 @@ - [ ] iterator - [ ] composite - [ ] flyweight - - [ ] [Chapter 6 (Part 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) - - [ ] [Chapter 6 (Part 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [ ] [Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [ ] [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) - - [ ] [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) - - I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO. - - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) + - [ ] [第六章 (第1部分 ) - 设计模式 (视频)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) + - [ ] [第六章 (第2部分 ) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (视频)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [第六章 (第3部分 ) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [视频](https://www.youtube.com/playlist?list=PLF206E906175C7E07) + - [ ] [Head Fisrt:设计模型](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - 尽管这本书叫做设计模式:重复使用模块,但是我还是认为Head First是对于新手来说很不错的书。 + - [ ] [基于实际操作对于入门开发者的建议](https://sourcemaking.com/design-patterns-and-tips) -- ### Messaging, Serialization, and Queueing Systems +- ### 信息传输, 序列化,和队列化的系统 - [ ] [Thrift](https://thrift.apache.org/) - - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) - - [ ] [Protocol Buffers](https://developers.google.com/protocol-buffers/) - - [Tutorials](https://developers.google.com/protocol-buffers/docs/tutorials) + - [教程](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) + - [ ] [协议缓冲](https://developers.google.com/protocol-buffers/) + - [教程](https://developers.google.com/protocol-buffers/docs/tutorials) - [ ] [gRPC](http://www.grpc.io/) - - [gRPC 101 for Java Developers (video)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) + - [gRPC 对于JAVA开发者的入门教程(视频)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) - [ ] [Redis](http://redis.io/) - - [Tutorial](http://try.redis.io/) - - [ ] [Amazon SQS (queue)](https://aws.amazon.com/sqs/) - - [ ] [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/) + - [教程](http://try.redis.io/) + - [ ] [Amazon的SQS系统 (队列)](https://aws.amazon.com/sqs/) + - [ ] [Amazon的SNS系统 (pub-sub)](https://aws.amazon.com/sns/) - [ ] [RabbitMQ](https://www.rabbitmq.com/) - - [Get Startet](https://www.rabbitmq.com/getstarted.html) + - [入门教程](https://www.rabbitmq.com/getstarted.html) - [ ] [Celery](http://www.celeryproject.org/) - - [First Steps With Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html) + - [Celery入门](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html) - [ ] [ZeroMQ](http://zeromq.org/) - - [Intro - Read The Manual](http://zeromq.org/intro:read-the-manual) + - [入门教程](http://zeromq.org/intro:read-the-manual) - [ ] [ActiveMQ](http://activemq.apache.org/) - [ ] [Kafka](http://kafka.apache.org/documentation.html#introduction) - [ ] [MessagePack](http://msgpack.org/index.html) - [ ] [Avro](https://avro.apache.org/) -- ### Fast Fourier Transform - - [ ] [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/) - - [ ] [What is the Fourier Transform? (video)](https://www.youtube.com/watch?v=Xxut2PN-V8Q) - - [ ] [Divide & Conquer: FFT (video)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) - - [ ] [Understanding The FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) +- ### 快速傅里叶变换 + - [ ] [什么是傅立叶变换?论傅立叶变换的用途](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/) + - [ ] [什么是傅立叶变换? (视频)](https://www.youtube.com/watch?v=Xxut2PN-V8Q) + - [ ] [关于FFT的不同观点 (视频)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) + - [ ] [FTT是什么](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) -- ### Bloom Filter - - Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k) - - [Bloom Filters](https://www.youtube.com/watch?v=-SuTGoFYjZs) - - [Bloom Filters | Mining of Massive Datasets | Stanford University](https://www.youtube.com/watch?v=qBTdukbzc78) - - [Tutorial](http://billmill.org/bloomfilter-tutorial/) - - [How To Write A Bloom Filter App](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/) +- ### 布隆过滤器 + - 给一个布隆过滤器m比特和k个哈希函数,所有的注入和相关测试都会是通过。 + - [布隆过滤器](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [布隆过滤器 | 数据挖掘 | Stanford University](https://www.youtube.com/watch?v=qBTdukbzc78) + - [教程](http://billmill.org/bloomfilter-tutorial/) + - [如何写一个布隆过滤器应用](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/) -- ### van Emde Boas Trees - - [ ] [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) - - [ ] [MIT Lecture Notes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf) +- ### van Emde Boas 树 + - [ ] [争论: van Emde Boas 树 (视频)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) + - [ ] [MIT课堂笔记](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf) -- ### Augmented Data Structures - - [ ] [CS 61B Lecture 39: Augmenting Data Structures](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) +- ### 更深入的数据结构 + - [ ] [CS 61B 第 39 课: 更深入的数据结构](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) -- ### Skip lists - - "These are somewhat of a cult data structure" - Skiena - - [ ] [Randomization: Skip Lists (video)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - [ ] [For animations and a little more detail](https://en.wikipedia.org/wiki/Skip_list) +- ### 跳表 + - "有一种非常迷幻的数据类型" - Skiena + - [ ] [随机化: 跳表 (视频)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [更生动详细的解释](https://en.wikipedia.org/wiki/Skip_list) -- ### Network Flows - - [ ] [Ford-Fulkerson in 5 minutes (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) - - [ ] [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) - - [ ] [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) +- ### 网络流 + - [ ] [5分钟简析Ford-Fulkerson (视频)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [ ] [Ford-Fulkerson 算法 (视频)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [ ] [网络流 (视频)](https://www.youtube.com/watch?v=2vhN4Ice5jI) -- ### Disjoint Sets & Union Find - - [ ] [Disjoint Set](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) - - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) +- ### 不相交集 & 联合查找 + - [ ] [不相交集](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) + - [ ] [UCB 61B - 不相交集; 排序 & 选择(视频)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) - [ ] Coursera (not needed since the above video explains it great): - - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) - - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) - - [ ] [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees) - - [ ] [Union By Rank](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank) - - [ ] [Path Compression](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression) - - [ ] [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) + - [ ] [概览](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) + - [ ] [初级实践](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) + - [ ] [树状结构](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees) + - [ ] [合并树状结构](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank) + - [ ] [路径压缩](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression) + - [ ] [分析选项](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) + - ### Math for Fast Processing - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) From e017b8436c8de32a84e6446bc65979952472df53 Mon Sep 17 00:00:00 2001 From: jaeger Date: Tue, 11 Oct 2016 14:45:31 +0800 Subject: [PATCH 47/61] translated 1510 to 1590 by jaeger --- README-cn.md | 132 +++++++++++++++++++++++++-------------------------- 1 file changed, 65 insertions(+), 67 deletions(-) diff --git a/README-cn.md b/README-cn.md index fc061d8..3e55e22 100644 --- a/README-cn.md +++ b/README-cn.md @@ -1507,85 +1507,83 @@ - [ ] [Treap](https://en.wikipedia.org/wiki/Treap) - [ ] [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8) - [ ] [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) - -- ### Linear Programming (videos) - - [ ] [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ) - - [ ] [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U) - - [ ] [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik) -- ### Geometry, Convex hull (videos) - - [ ] [Graph Alg. IV: Intro to geometric algorithms - Lecture 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164) - - [ ] [Geometric Algorithms: Graham & Jarvis - Lecture 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) +- ### 线性规划(Linear Programming)(视频) + - [ ] [线性规划](https://www.youtube.com/watch?v=M4K6HYLHREQ) + - [ ] [寻找最小成本](https://www.youtube.com/watch?v=2ACJ9ewUC6U) + - [ ] [寻找最大值](https://www.youtube.com/watch?v=8AA_81xI3ik) -- ### Discrete math - - see videos below +- ### 几何:凸包(Geometry, Convex hull)(视频) + - [ ] [Graph Alg. IV: 几何算法介绍 - 第 9 课](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164) + - [ ] [Graham & Jarvis: 几何算法 - 第 10 课](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Divide & Conquer: 凸包, 中值查找](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) -- ### Machine Learning - - [ ] Why ML? - - [ ] [How Google Is Remaking Itself As A Machine Learning First Company](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70) - - [ ] [Large-Scale Deep Learning for Intelligent Computer Systems (video)](https://www.youtube.com/watch?v=QSaZGT4-6EY) - - [ ] [Deep Learning and Understandability versus Software Engineering and Verification by Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw) - - [ ] [Google's Cloud Machine learning tools (video)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) - - [ ] [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (video)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) - - [ ] [Tensorflow (video)](https://www.youtube.com/watch?v=oZikw5k_2FM) - - [ ] [Tensorflow Tutorials](https://www.tensorflow.org/versions/r0.11/tutorials/index.html) - - [ ] [Practical Guide to implementing Neural Networks in Python](using Theano)])http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/) - - Courses: - - [ ] [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning) - - [videos only](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) - - see videos 12-18 for a review of linear algebra (14 and 15 are duplicates) - - [ ] [Neural Networks for Machine Learning](https://www.coursera.org/learn/neural-networks) - - [ ] [Google's Deep Learning Nanodegree](https://www.udacity.com/course/deep-learning--ud730) - - [ ] [Google/Kaggle Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009) - - [ ] [Self-Driving Car Engineer Nanodegree](https://www.udacity.com/drive) - - [ ] [Metis Online Course ($99 for 2 months)](http://www.thisismetis.com/explore-data-science) - - Resources: - - Great book: Data Science from Scratch: First Principles with Python: https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X - - Data School: http://www.dataschool.io/ +- ### 离散数学 + - 查看下面的视频:(这里没看到视频= =) -- ### Go - - [ ] Videos: - - [ ] [Why Learn Go?](https://www.youtube.com/watch?v=FTl0tl9BGdc) - - [ ] [Go Programming](https://www.youtube.com/watch?v=CF9S4QZuV30) - - [ ] [A Tour of Go](https://www.youtube.com/watch?v=ytEkHepK08c) - - [ ] Books: - - [ ] [An Introduction to Programming in Go (read free online)](https://www.golang-book.com/books/intro) - - [ ] [The Go Programming Language (Donovan & Kernighan)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440) - - [ ] [Bootcamp](https://www.golang-book.com/guides/bootcamp) +- ### 机器学习(Machine Learning) + - [ ] 为什么学习机器学习? + - [ ] [谷歌如何将自己改造成一家「机器学习优先」公司?](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70) + - [ ] [智能计算机系统的大规模深度学习 (视频)](https://www.youtube.com/watch?v=QSaZGT4-6EY) + - [ ] [Peter Norvig:深度学习和理解与软件工程和验证的对比](https://www.youtube.com/watch?v=X769cyzBNVw) + - [ ] [谷歌云机器学习工具(视频)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) + - [ ] [谷歌开发者机器学习清单 (Scikit Learn 和 Tensorflow) (视频)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) + - [ ] [Tensorflow (视频)](https://www.youtube.com/watch?v=oZikw5k_2FM) + - [ ] [Tensorflow 教程](https://www.tensorflow.org/versions/r0.11/tutorials/index.html) + - [ ] [Python 实现神经网络实例教程(使用 Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/) + - 课程: + - [ ] [很棒的初级课程:机器学习](https://www.coursera.org/learn/machine-learning) + - [视频教程](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) + - 看第 12-18 集复习线性代数(第 14 集和第 15 集是重复的) + - [ ] [机器学习中的神经网络](https://www.coursera.org/learn/neural-networks) + - [ ] [Google 深度学习微学位](https://www.udacity.com/course/deep-learning--ud730) + - [ ] [Google/Kaggle 机器学习工程师微学位](https://www.udacity.com/course/machine-learning-engineer-nanodegree-by-google--nd009) + - [ ] [无人驾驶工程师微学位](https://www.udacity.com/drive) + - [ ] [Metis 在线课程 (两个月 99 美元)](http://www.thisismetis.com/explore-data-science) + - 资源: + - 书籍: Data Science from Scratch: First Principles with Python: https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X + - 网站: Data School: http://www.dataschool.io/ + +- ### Go 语言 + - [ ] 视频: + - [ ] [为什么学习 Go 语言?](https://www.youtube.com/watch?v=FTl0tl9BGdc) + - [ ] [Go 语言编程](https://www.youtube.com/watch?v=CF9S4QZuV30) + - [ ] [Go 语言之旅](https://www.youtube.com/watch?v=ytEkHepK08c) + - [ ] 书籍: + - [ ] [Go 语言编程入门 (免费在线阅读)](https://www.golang-book.com/books/intro) + - [ ] [Go 语言圣经 (Donovan & Kernighan)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440) + - [ ] [Go 语言新手训练营](https://www.golang-book.com/guides/bootcamp) -- -## Additional Detail on Some Subjects +## 一些主题的额外内容 - I added these to reinforce some ideas already presented above, but didn't want to include them - above because it's just too much. It's easy to overdo it on a subject. - You want to get hired in this century, right? + 我为前面提到的某些主题增加了一些额外的内容,之所以没有直接添加到前面,是因为这样很容易导致某个主题内容过多。毕竟你想在本世纪找到一份工作,对吧? -- [ ] **More 动态规划** (videos) - - [ ] [6.006: 动态规划 I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19) - - [ ] [6.006: 动态规划 II: Text Justification, Blackjack](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20) - - [ ] [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21) - - [ ] [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [6.046: 动态规划 & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - [ ] [6.046: 动态规划: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) - - [ ] [6.046: 动态规划 (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) +- [ ] **动态规划的更多内容** (视频) + - [ ] [6.006: 动态规划 I: 斐波那契数列, 最短路径](https://www.youtube.com/watch?v=OQ5jsbhAv_M&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=19) + - [ ] [6.006: 动态规划 II: 文本匹配, 二十一点/黑杰克](https://www.youtube.com/watch?v=ENyox7kNKeY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=20) + - [ ] [6.006: 动态规划 III: 最优加括号方式, 最小编辑距离, 背包问题](https://www.youtube.com/watch?v=ocZMDMZwhCY&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=21) + - [ ] [6.006: 动态规划 IV: 吉他指法,拓扑,超级马里奥.](https://www.youtube.com/watch?v=tp4_UXaVyx8&index=22&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.046: 动态规划: 动态规划进阶](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [6.046: 动态规划: 所有点对最短路径](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) + - [ ] [6.046: 动态规划: 更多示例](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) -- [ ] **Advanced Graph Processing** (videos) - - [ ] [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) - - [ ] [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28) +- [ ] **图形处理进阶** (视频) + - [ ] [异步分布式算法: 对称性破缺,最小生成树](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) + - [ ] [异步分布式算法: 最小生成树](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28) -- [ ] MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos): - - [ ] [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B) - - [ ] [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B) - - [ ] [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B) - - [ ] [MIT 6.042J - Random Variables](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21) - - [ ] [MIT 6.042J - Expectation I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B) - - [ ] [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B) - - [ ] [MIT 6.042J - Large Deviations](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B) - - [ ] [MIT 6.042J - Random Walks](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25) +- [ ] MIT **概率论** (mathy, and go slowly, which is good for mathy things) (视频): + - [ ] [MIT 6.042J - 概率论概述](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - 条件概率 Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - 独立](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - 随机变量](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21) + - [ ] [MIT 6.042J - 期望 I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - 期望 II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - 大偏差](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - 随机游走](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25) -- [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) +- [ ] [Simonson: 近似算法 (视频)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) ## 视频系列 From 0ca88672a4dc79f63b713f7ec57f4338e5970814 Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 15:12:24 +0800 Subject: [PATCH 48/61] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=92=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/README-cn.md b/README-cn.md index 485d820..c67b69e 100644 --- a/README-cn.md +++ b/README-cn.md @@ -1315,8 +1315,8 @@ - [Writing C Programs With Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) - [(maybe) Org Mode In Depth: Managing Structure (video)](https://www.youtube.com/watch?v=nsGYet02bEk) -- ### Unix命令行工具(Unix command line tools) - - 下列内容中的优秀工具由的Yegge推荐,Yegge目前致力于Amazon人事招聘处。 +- ### Unix 命令行工具 + - 下列内容中的优秀工具由的 Yegge 推荐,Yegge 目前致力于 Amazon 人事招聘处。 - [ ] bash - [ ] cat - [ ] grep @@ -1330,7 +1330,7 @@ - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/) - ### 信息资源 (视频) - - [ ] [Khan Academy可汗学院](https://www.khanacademy.org/computing/computer-science/informationtheory) + - [ ] [Khan Academy 可汗学院](https://www.khanacademy.org/computing/computer-science/informationtheory) - [ ] 更多有关马尔可夫的内容: - [ ] [Core Markov Text Generation马尔可夫内容生成](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) - [ ] [Core Implementing Markov Text Generation马尔可夫内容生成补充](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) @@ -1340,7 +1340,7 @@ - ### 奇偶校验位 & 汉明码 (视频) - [ ] [入门](https://www.youtube.com/watch?v=q-3BctoUpHE) - [ ] [奇偶校验位](https://www.youtube.com/watch?v=DdMcAUlxh1M) - - [ ] Hamming Code: + - [ ] 汉明码(Hamming Code): - [发现错误](https://www.youtube.com/watch?v=1A_NcXxdoCc) - [修正错误](https://www.youtube.com/watch?v=JAMLuxdHH8o) - [ ] [检查错误](https://www.youtube.com/watch?v=wbH2VxzmoZk) @@ -1379,7 +1379,7 @@ - [ ] [SSL/TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM) - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8) - [ ] [视频](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) - - [ ] [子网络解密 - 第五部分 经典内部域名指向CIDR标记](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] [子网络解密 - 第五部分 经典内部域名指向 CIDR 标记](https://www.youtube.com/watch?v=t5xYI0jzOf4) - ### 电脑安全 - [MIT](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) @@ -1400,12 +1400,12 @@ - [ ] [Java 释放缓存; 片段化数据 (视频)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25) - [ ] [编译器 (视频)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) - [ ] [Python 释放缓存 (视频)](https://www.youtube.com/watch?v=iHVs_HkjdmI) - - [ ] [深度解析:论释放缓存在JAVA中的重要性](https://www.infoq.com/presentations/garbage-collection-benefits) - - [ ] [深度解析:论释放缓存在Python中的重要性(视频)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3) + - [ ] [深度解析:论释放缓存在 JAVA 中的重要性](https://www.infoq.com/presentations/garbage-collection-benefits) + - [ ] [深度解析:论释放缓存在 Python 中的重要性(视频)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3) - ### 平行化(多线程)编程 - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1) - - [ ] [论平行化编程如何提高Python执行效率 (视频)](https://www.youtube.com/watch?v=uY85GkaYzBk) + - [ ] [论平行化编程如何提高 Python 执行效率 (视频)](https://www.youtube.com/watch?v=uY85GkaYzBk) - ### 设计模式 - [ ] [UML统一建模语言概览 (视频)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) @@ -1427,11 +1427,11 @@ - [ ] iterator - [ ] composite - [ ] flyweight - - [ ] [第六章 (第1部分 ) - 设计模式 (视频)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) - - [ ] [第六章 (第2部分 ) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (视频)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [ ] [第六章 (第3部分 ) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [第六章 (第 1 部分 ) - 设计模式 (视频)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) + - [ ] [第六章 (第 2 部分 ) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (视频)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [第六章 (第 3 部分 ) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - [ ] [视频](https://www.youtube.com/playlist?list=PLF206E906175C7E07) - - [ ] [Head Fisrt:设计模型](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - [ ] [Head Fisrt 设计模型](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) - 尽管这本书叫做设计模式:重复使用模块,但是我还是认为Head First是对于新手来说很不错的书。 - [ ] [基于实际操作对于入门开发者的建议](https://sourcemaking.com/design-patterns-and-tips) @@ -1444,8 +1444,8 @@ - [gRPC 对于JAVA开发者的入门教程(视频)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) - [ ] [Redis](http://redis.io/) - [教程](http://try.redis.io/) - - [ ] [Amazon的SQS系统 (队列)](https://aws.amazon.com/sqs/) - - [ ] [Amazon的SNS系统 (pub-sub)](https://aws.amazon.com/sns/) + - [ ] [Amazon的 SQS 系统 (队列)](https://aws.amazon.com/sqs/) + - [ ] [Amazon的 SNS 系统 (pub-sub)](https://aws.amazon.com/sns/) - [ ] [RabbitMQ](https://www.rabbitmq.com/) - [入门教程](https://www.rabbitmq.com/getstarted.html) - [ ] [Celery](http://www.celeryproject.org/) @@ -1460,8 +1460,8 @@ - ### 快速傅里叶变换 - [ ] [什么是傅立叶变换?论傅立叶变换的用途](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/) - [ ] [什么是傅立叶变换? (视频)](https://www.youtube.com/watch?v=Xxut2PN-V8Q) - - [ ] [关于FFT的不同观点 (视频)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) - - [ ] [FTT是什么](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) + - [ ] [关于 FFT 的不同观点 (视频)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) + - [ ] [FTT 是什么](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) - ### 布隆过滤器 - 给一个布隆过滤器m比特和k个哈希函数,所有的注入和相关测试都会是通过。 @@ -1498,7 +1498,6 @@ - [ ] [路径压缩](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression) - [ ] [分析选项](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) - - ### Math for Fast Processing - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg) From d43b294e714afde47b17f92b37a861b090e1c6f1 Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 15:23:07 +0800 Subject: [PATCH 49/61] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/README-cn.md b/README-cn.md index c67b69e..58666cc 100644 --- a/README-cn.md +++ b/README-cn.md @@ -74,25 +74,25 @@ - [Unicode](#unicode) - [Endianness](#endianness) - [Emacs and vi(m)](#emacs-and-vim) - - [Unix command line tools](#unix-command-line-tools) - - [Information theory](#information-theory) - - [Parity & Hamming Code](#parity--hamming-code) - - [Entropy](#entropy) - - [Cryptography](#cryptography) - - [Compression](#compression) - - [Networking](#networking) - - [Computer Security](#computer-security) - - [Garbage collection](#garbage-collection) - - [Parallel Programming](#parallel-programming) - - [Design patterns](#design-patterns) - - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - - [Fast Fourier Transform](#fast-fourier-transform) - - [Bloom Filter](#bloom-filter) - - [van Emde Boas Trees](#van-emde-boas-trees) - - [Augmented Data Structures](#augmented-data-structures) - - [Skip lists](#skip-lists) - - [Network Flows](#network-flows) - - [Disjoint Sets & Union Find](#disjoint-sets--union-find) + - [Unix 命令行工具](#unix-命令行工具) + - [信息资源 (视频)](#信息资源-视频) + - [奇偶校验位 & 汉明码 (视频)](#奇偶校验位--汉明码-视频) + - [系统熵值(系统复杂度)](#系统熵值系统复杂度) + - [密码学](#密码学) + - [压缩](#压缩) + - [网络 (视频)](#网络-视频) + - [计算机安全](#计算机安全) + - [释放缓存](#释放缓存) + - [平行化(多线程)编程](#平行化多线程编程) + - [设计模式](#设计模式) + - [信息传输, 序列化, 和队列化的系统](#信息传输-序列化和队列化的系统) + - [快速傅里叶变换](#快速傅里叶变换) + - [布隆过滤器](#布隆过滤器) + - [van Emde Boas 树](#van-emde-boas-树) + - [更深入的数据结构](#更深入的数据结构) + - [跳表](#跳表) + - [网络流](#网络流) + - [不相交集 & 联合查找](#不相交集--联合查找) - [Math for Fast Processing](#math-for-fast-processing) - [Treap](#treap) - [Linear Programming](#linear-programming) @@ -1381,7 +1381,7 @@ - [ ] [视频](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) - [ ] [子网络解密 - 第五部分 经典内部域名指向 CIDR 标记](https://www.youtube.com/watch?v=t5xYI0jzOf4) -- ### 电脑安全 +- ### 计算机安全 - [MIT](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - [ ] [威胁模型:入门](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - [ ] [控制攻击](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2) From 30d5d09ddb443e332dca9c4f499184fc5bf70eb7 Mon Sep 17 00:00:00 2001 From: newt0n Date: Tue, 11 Oct 2016 16:04:39 +0800 Subject: [PATCH 50/61] * minor tweaks --- README-cn.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README-cn.md b/README-cn.md index fc061d8..2ae3cd3 100644 --- a/README-cn.md +++ b/README-cn.md @@ -684,8 +684,8 @@ - [ ] [选择排序 (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) - [ ] 斯坦福大学关于排序算法的视频: - - [ ] [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) - - [ ] [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) + - [ ] [课程 15 | 编程抽象 (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) + - [ ] [课程 16 | 编程抽象 (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) - [ ] Shai Simonson 视频, [Aduni.org](http://www.aduni.org/): - [ ] [算法 - 排序 - 第二讲 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) @@ -698,10 +698,10 @@ - [ ] [课程从 23:50 开始 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) - [ ] 加州大学伯克利分校(UC Berkeley) 大学课程: - - [ ] [CS 61B Lecture 29: Sorting I (video)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29) - - [ ] [CS 61B Lecture 30: Sorting II (video)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30) - - [ ] [CS 61B Lecture 32: Sorting III (video)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C) - - [ ] [CS 61B Lecture 33: Sorting V (video)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C) + - [ ] [CS 61B 课程 29: 排序 I (video)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29) + - [ ] [CS 61B 课程 30: 排序 II (video)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30) + - [ ] [CS 61B 课程 32: 排序 III (video)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C) + - [ ] [CS 61B 课程 33: 排序 V (video)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C) - [ ] - 归并排序: - [ ] [使用外部数组](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) @@ -848,9 +848,9 @@ - [ ] [NP-完全性 III (Video)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - [ ] [NP-完全性 IV (video)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] Skiena: - - [ ] [CSE373 2012 - Lecture 23 - 介绍 NP-完全性 IV (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) - - [ ] [CSE373 2012 - Lecture 24 - NP-完全性证明 (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - Lecture 25 - NP-完全性挑战 (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 课程 23 - 介绍 NP-完全性 IV (video)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - 课程 24 - NP-完全性证明 (video)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 课程 25 - NP-完全性挑战 (video)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - [ ] [复杂度: P, NP, NP-完全性, 规约 (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) - [ ] [复杂度: 近视算法 Algorithms (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) - [ ] [复杂度: 固定参数算法 (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) @@ -1081,7 +1081,7 @@ - [ ] [James Bach 软件测试公开课 (video)](https://www.youtube.com/watch?v=ILkT_HV9DVU) - [ ] [Steve Freeman - 测试驱动的开发 (video)](https://vimeo.com/83960706) - [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) - - [ ] [测试驱动的开发已死. 测试不朽。](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html) + - [ ] [测试驱动的开发已死。测试不朽。](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html) - [ ] [测试驱动的开发已死? (video)](https://www.youtube.com/watch?v=z9quxZsLcfo) - [ ] [视频系列 (152 个) - 并不都是必须 (video)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g) - [ ] [Python:测试驱动的 Web 开发](http://www.obeythetestinggoat.com/pages/book.html#toc) From b94d658cb3124335049c2b50100dd0614efba307 Mon Sep 17 00:00:00 2001 From: antonia0912 Date: Tue, 11 Oct 2016 16:06:11 +0800 Subject: [PATCH 51/61] Update README-cn.md --- README-cn.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README-cn.md b/README-cn.md index fb95fdc..b69aa81 100644 --- a/README-cn.md +++ b/README-cn.md @@ -1,5 +1,10 @@ # Google Interview University - 一套完整的学习手册帮助自己准备 Google 的面试 +> * 原文地址:[Google Interview University](https://github.com/jwasham/google-interview-university) +* 原文作者:[John Washam](https://github.com/jwasham) +* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner) +* 译者:[Aleen](https://github.com/aleen42),[Newton](https://github.com/Newt0n),[bobmayuze](https://github.com/bobmayuze),[Jaeger](https://github.com/laobie),[sqrthree](https://github.com/sqrthree) + ## 这是? 这是我为了从 web 开发者(自学、非计算机科学学位)蜕变至 Google 软件工程师所制定的计划,其内容历时数月。 From f86fcaec23ebbedb4139eee0901b1b0dac17714c Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 16:25:34 +0800 Subject: [PATCH 52/61] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=8D=95=E8=AF=8D=E7=9A=84=E6=84=8F=E6=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README-cn.md b/README-cn.md index b69aa81..5a3d08c 100644 --- a/README-cn.md +++ b/README-cn.md @@ -88,7 +88,7 @@ - [网络 (视频)](#网络-视频) - [计算机安全](#计算机安全) - [释放缓存](#释放缓存) - - [平行化(多线程)编程](#平行化多线程编程) + - [并行/并发编程](#并行/并发编程) - [设计模式](#设计模式) - [信息传输, 序列化, 和队列化的系统](#信息传输-序列化和队列化的系统) - [快速傅里叶变换](#快速傅里叶变换) @@ -1408,9 +1408,9 @@ - [ ] [深度解析:论释放缓存在 JAVA 中的重要性](https://www.infoq.com/presentations/garbage-collection-benefits) - [ ] [深度解析:论释放缓存在 Python 中的重要性(视频)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3) -- ### 平行化(多线程)编程 +- ### 并行/并发编程 - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1) - - [ ] [论平行化编程如何提高 Python 执行效率 (视频)](https://www.youtube.com/watch?v=uY85GkaYzBk) + - [ ] [论并行/并发编程如何提高 Python 执行效率 (视频)](https://www.youtube.com/watch?v=uY85GkaYzBk) - ### 设计模式 - [ ] [UML统一建模语言概览 (视频)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) From e95d6098aba65b0f7c6c8a3158afe13b4e80fc8b Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 16:27:45 +0800 Subject: [PATCH 53/61] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 5a3d08c..08b7965 100644 --- a/README-cn.md +++ b/README-cn.md @@ -88,7 +88,7 @@ - [网络 (视频)](#网络-视频) - [计算机安全](#计算机安全) - [释放缓存](#释放缓存) - - [并行/并发编程](#并行/并发编程) + - [并行/并发编程](#并行并发编程) - [设计模式](#设计模式) - [信息传输, 序列化, 和队列化的系统](#信息传输-序列化和队列化的系统) - [快速傅里叶变换](#快速傅里叶变换) From 873b45ed3d0f555417f59ff90fd734abddcf3e10 Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 17:32:19 +0800 Subject: [PATCH 54/61] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E5=89=A9=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E5=86=85=E5=AE=B9=20+=20=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 128 +++++++++++++++++++++++++-------------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/README-cn.md b/README-cn.md index 08b7965..54072c4 100644 --- a/README-cn.md +++ b/README-cn.md @@ -49,31 +49,31 @@ - [字典树(Tries)](#字典树tries) - [平衡查找树(Balanced search trees)](#平衡查找树balanced-search-trees) - [N 叉树(K 叉树、M 叉树)](#n-叉树k-叉树m-叉树) -- [Sorting](#sorting) -- [Graphs](#graphs) -- [Even More Knowledge](#even-more-knowledge) - - [Recursion](#recursion) - - [动态规划](#dynamic-programming) - - [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability) - - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms) - - [Caches](#caches) - - [Processes and Threads](#processes-and-threads) - - [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) - - [Papers](#papers) - - [Testing](#testing) - - [Scheduling](#scheduling) - - [Implement system routines](#implement-system-routines) - - [String searching & manipulations](#string-searching--manipulations) -- [Final Review](#final-review) -- [Books](#books) -- [Coding exercises/challenges](#coding-exerciseschallenges) -- [Once you're closer to the interview](#once-youre-closer-to-the-interview) -- [Your Resume](#your-resume) -- [Be thinking of for when the interview comes](#be-thinking-of-for-when-the-interview-comes) -- [Have questions for the interviewer](#have-questions-for-the-interviewer) -- [Once You've Got The Job](#once-youve-got-the-job) +- [排序](#排序sorting) +- [图(Graphs)](#图graphs) +- [更多知识](#更多知识) + - [递归](#递归recursion) + - [动态规划](#动态规划dynamic-programming) + - [组合 & 概率](#组合combinatorics-n-中选-k-个--概率probability) + - [NP, NP-完全和近似算法](#np-np-完全和近似算法) + - [缓存](#缓存cache) + - [进程和线程](#进程processe和线程thread) + - [系统设计、可伸缩性、数据处理](#系统设计可伸缩性数据处理) + - [论文](#论文) + - [测试](#测试) + - [调度](#调度) + - [实现系统例程](#实现系统例程) + - [字符串搜索和操作](#字符串搜索和操作) +- [终面](#终面) +- [书籍](#书籍) +- [编码练习和挑战](#编码练习和挑战) +- [当你临近面试时](#当你临近面试时) +- [你的简历](#你的简历) +- [当面试来临的时候](#当面试来临的时候) +- [问面试官的问题](#问面试官的问题) +- [当你获得了梦想的职位](#当你获得了梦想的职位) ----------------- Everything below this point is optional ---------------- +---------------- 下面的内容是可选的 ---------------- - [Additional Learning](#additional-learning) - [Unicode](#unicode) @@ -804,7 +804,7 @@ - 尾递归会更好么? - [ ] [什么是尾递归以及为什么它如此糟糕?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) - [ ] [尾递归 (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) - + - ### 动态规划(Dynamic Programming) - This subject can be pretty difficult, as each DP soluble problem must be defined as a recursion relation, and coming up with it can be tricky. - 这一部分会有点困难,每个可以用动态规划解决的问题都必须先定义出递推关系,要推导出来可能会有点棘手。 @@ -821,7 +821,7 @@ - [ ] [Simonson: 动态规划 II - 课程 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) - [ ] 单独的 DP 问题 (每一个视频都很短): [动态规划 (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - - [ ] Yale 课程笔记: + - [ ] Yale 课程笔记: - [ ] [动态规划](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) - [ ] Coursera 课程: - [ ] [RNA 二级结构问题 (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) @@ -934,14 +934,14 @@ - [ ] [上下文切换操作会耗费多少时间?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html) - [ ] [跨数据中心的事务 (video)](https://www.youtube.com/watch?v=srOgpXECblk) - [ ] [简明 CAP 理论介绍](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) - - [ ] Paxos 一致性算法: + - [ ] Paxos 一致性算法: - [时间很短](https://www.youtube.com/watch?v=s8JqcZtvnsM) - [用例 和 multi-paxos](https://www.youtube.com/watch?v=JEpsBg0AO6o) - [论文](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf) - [ ] [一致性哈希](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL 模式](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] [OOSE: UML 2.0 系列 (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] OOSE: 使用 UML 和 Java 开发软件 (21 videos): + - [ ] OOSE: 使用 UML 和 Java 开发软件 (21 videos): - 如果你对 OO 都深刻的理解和实践,可以跳过这部分。 - [OOSE: 使用 UML 和 Java 开发软件](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - [ ] 面向对象编程的 SOLID 原则: @@ -962,7 +962,7 @@ - [更多](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) - [ ] 可伸缩性: - [ ] [很棒的概述 (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) - - [ ] 简短系列: + - [ ] 简短系列: - [克隆](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) - [数据库](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) - [缓存](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) @@ -1121,7 +1121,7 @@ --- -## 终面 +## 终面 这一部分有一些短视频,你可以快速的观看和复习大多数重要概念。 这对经常性的巩固很有帮助。 @@ -1136,7 +1136,7 @@ #### 排序: - [ ] 归并排序: https://www.youtube.com/watch?v=GCae1WNvnZM - + ## 书籍 @@ -1163,7 +1163,7 @@ - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - 如果你看到有人在看 "The Google Resume", 实际上它和 "Cracking the Coding Interview" 是同一个作者写的,而且后者是升级版。 -### 附加书单 +### 附加书单 这些没有被 Google 推荐阅读,不过我因为需要这些背景知识所以也把它们列在了这里。 @@ -1181,7 +1181,7 @@ ### 如果你有时间 - [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - + - [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - 如果你希望在面试里用 C++ 写代码,这本书的代码全都是 C++ 写的 - 通常情况下能找到解决方案的好书. @@ -1234,7 +1234,7 @@ 随着下面列举的问题思考下你可能会遇到的 20 个面试问题 每个问题准备 2-3 种回答 准备点故事,不要只是摆一些你完成的事情的数据,相信我,人人都喜欢听故事 - + - 你为什么想得到这份工作? - 你解决过的最有难度的问题是什么? - 面对过的最大挑战是什么? @@ -1276,49 +1276,49 @@ ***************************************************************************************************** ***************************************************************************************************** - - Everything below this point is optional. These are my recommendations, not Google's. - By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for - any software engineering job. + + 下面的内容都是可选的。这些是我的推荐,不是 Google 的。 + 通过学习这些内容,你将会得到更多的有关 CS 的概念,并将为所有的软件工程工作做更好的准备。 ***************************************************************************************************** ***************************************************************************************************** --- -## Additional Learning +## 附加的学习 - ### Unicode - - [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html) - - [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/) + - [ ] [每一个软件开发者的绝对最低限度,必须要知道的关于 Unicode 和字符集知识]( http://www.joelonsoftware.com/articles/Unicode.html) + - [ ] [关于处理文本需要的编码和字符集, 每个程序员绝对需要知道的知识](http://kunststube.net/encoding/) -- ### Endianness - - [ ] [Big And Little Endian](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html) - - [ ] [Big Endian Vs Little Endian (video)](https://www.youtube.com/watch?v=JrNF0KRAlyo) - - [ ] [Big And Little Endian Inside/Out (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) - - Very technical talk for kernel devs. Don't worry if most is over your head. - - The first half is enough. +- ### 字节顺序 + - [ ] [大、小端字节序](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html) + - [ ] [大端字节 Vs 小端字节(视频)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [ ] [大、小端字节序的里里外外(Big And Little Endian Inside/Out) (视频)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) + - 内核开发者的讨论非常技术性,如果大多数都超出了你的理解范围,不要太担心。 + - 前半段已经足够了。 - ### Emacs and vi(m) - suggested by Yegge, from an old Amazon recruiting post: Familiarize yourself with a unix-based code editor + - Yegge 的建议,从一个很早以前的亚马逊招聘信息中而来:熟悉基于 unix 的代码编辑器 - vi(m): - - [Editing With vim 01 - Installation, Setup, and The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) - - [VIM Adventures](http://vim-adventures.com/) - - set of 4 videos: - - [The vi/vim editor - Lesson 1](https://www.youtube.com/watch?v=SI8TeVMX8pk) - - [The vi/vim editor - Lesson 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE) - - [The vi/vim editor - Lesson 3](https://www.youtube.com/watch?v=ZYEccA_nMaI) - - [The vi/vim editor - Lesson 4](https://www.youtube.com/watch?v=1lYD5gwgZIA) - - [Using Vi Instead of Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs) + - [使用 vim 进行编辑 01 - 安装, 设置和模式 (视频)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) + - [VIM 的冒险之旅](http://vim-adventures.com/) + - 4 个视频集: + - [vi/vim 编辑器 - 课程 1](https://www.youtube.com/watch?v=SI8TeVMX8pk) + - [vi/vim 编辑器 - 课程 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE) + - [vi/vim 编辑器 - 课程 4](https://www.youtube.com/watch?v=1lYD5gwgZIA) + - [vi/vim 编辑器 - 课程 3](https://www.youtube.com/watch?v=ZYEccA_nMaI) + - [使用 Vi 而不是 Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs) - emacs: - - [Basics Emacs Tutorial (video)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) - - set of 3 (videos): - - [Emacs Tutorial (Beginners) -Part 1- File commands, cut/copy/paste, cursor commands](https://www.youtube.com/watch?v=ujODL7MD04Q) - - [Emacs Tutorial (Beginners) -Part 2- Buffer management, search, M-x grep and rgrep modes](https://www.youtube.com/watch?v=XWpsRupJ4II) - - [Emacs Tutorial (Beginners) -Part 3- Expressions, Statements, ~/.emacs file and packages](https://www.youtube.com/watch?v=paSgzPso-yc) - - [Evil Mode: Or, How I Learned to Stop Worrying and Love Emacs (video)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc) - - [Writing C Programs With Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) - - [(maybe) Org Mode In Depth: Managing Structure (video)](https://www.youtube.com/watch?v=nsGYet02bEk) + - [基础 Emacs 教程 (视频)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) + - 3 个视频集: + - [Emacs 教程 (初学者) -第 1 部分- 文件命令, 剪切/复制/粘贴, 自定义命令](https://www.youtube.com/watch?v=ujODL7MD04Q) + - [Emacs 教程 (初学者 -第 2 部分- Buffer 管理, 搜索, M-x grep 和 rgrep 模式](https://www.youtube.com/watch?v=XWpsRupJ4II) + - [Emacs 教程 (初学者 -第 3 部分- 表达式, 声明, ~/.emacs 文件和包机制](https://www.youtube.com/watch?v=paSgzPso-yc) + - [Evil 模式: 或许, 我是怎样对 Emacs 路人转粉的 (视频)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc) + - [使用 Emacs 开发 C 程序](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) + - [(或许) 深度组织模式:管理结构 (视频)](https://www.youtube.com/watch?v=nsGYet02bEk) - ### Unix 命令行工具 - 下列内容中的优秀工具由的 Yegge 推荐,Yegge 目前致力于 Amazon 人事招聘处。 @@ -1506,7 +1506,7 @@ - ### Math for Fast Processing - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg) - + - ### Treap - Combination of a binary search tree and a heap - [ ] [Treap](https://en.wikipedia.org/wiki/Treap) From 303dbbfe2a9a861af08a8ee081c7ebc10445fa44 Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 17:34:26 +0800 Subject: [PATCH 55/61] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README-cn.md b/README-cn.md index 54072c4..719f9e6 100644 --- a/README-cn.md +++ b/README-cn.md @@ -75,9 +75,9 @@ ---------------- 下面的内容是可选的 ---------------- -- [Additional Learning](#additional-learning) +- [附加的学习](#附加的学习) - [Unicode](#unicode) - - [Endianness](#endianness) + - [字节顺序](#字节顺序) - [Emacs and vi(m)](#emacs-and-vim) - [Unix 命令行工具](#unix-命令行工具) - [信息资源 (视频)](#信息资源-视频) @@ -1299,7 +1299,6 @@ - 前半段已经足够了。 - ### Emacs and vi(m) - - suggested by Yegge, from an old Amazon recruiting post: Familiarize yourself with a unix-based code editor - Yegge 的建议,从一个很早以前的亚马逊招聘信息中而来:熟悉基于 unix 的代码编辑器 - vi(m): - [使用 vim 进行编辑 01 - 安装, 设置和模式 (视频)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) From e5f4bd782e387d9df72ebdd67596ee44da4e572f Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 17:46:26 +0800 Subject: [PATCH 56/61] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E9=81=97=E7=95=99?= =?UTF-8?q?=E7=9A=84=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README-cn.md b/README-cn.md index 719f9e6..5b0309c 100644 --- a/README-cn.md +++ b/README-cn.md @@ -1502,15 +1502,15 @@ - [ ] [路径压缩](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression) - [ ] [分析选项](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) -- ### Math for Fast Processing - - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg) +- ### 数学的快速处理 + - [ ] [整数运算, Karatsuba 乘法 (视频)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [中国剩余定理 (在密码学中的使用) (视频)](https://www.youtube.com/watch?v=ru7mWZJlRQg) -- ### Treap - - Combination of a binary search tree and a heap - - [ ] [Treap](https://en.wikipedia.org/wiki/Treap) - - [ ] [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8) - - [ ] [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) +- ### 树堆 (Treap) + - 一个二叉搜索树和一个堆的组合 + - [ ] [树堆](https://en.wikipedia.org/wiki/Treap) + - [ ] [数据结构:树堆的讲解(video)](https://www.youtube.com/watch?v=6podLUYinH8) + - [ ] [集合操作的应用(Applications in set operations)](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) - ### 线性规划(Linear Programming)(视频) - [ ] [线性规划](https://www.youtube.com/watch?v=M4K6HYLHREQ) From 8925c5c6555a93c4b3ef02aece77d9eb8c4fd406 Mon Sep 17 00:00:00 2001 From: sqrtthree Date: Tue, 11 Oct 2016 17:52:16 +0800 Subject: [PATCH 57/61] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-cn.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README-cn.md b/README-cn.md index 5b0309c..0136a4a 100644 --- a/README-cn.md +++ b/README-cn.md @@ -98,14 +98,14 @@ - [跳表](#跳表) - [网络流](#网络流) - [不相交集 & 联合查找](#不相交集--联合查找) - - [Math for Fast Processing](#math-for-fast-processing) - - [Treap](#treap) - - [Linear Programming](#linear-programming) - - [Geometry, Convex hull](#geometry-convex-hull) - - [Discrete math](#discrete-math) - - [Machine Learning](#machine-learning) - - [Go](#go) -- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + - [快速处理数学](#math-for-fast-processing) + - [树堆 (Treap)](#树堆-treap) + - [线性规划](#线性规划linear-programming视频) + - [几何:凸包(Geometry, Convex hull)](#几何凸包geometry-convex-hull视频) + - [离散数学](#离散数学) + - [机器学习](#机器学习machine-learning) + - [Go 语言](#go-语言) +- [一些主题的额外内容](#一些主题的额外内容) - [视频系列](#视频系列) - [计算机科学课程](#计算机科学课程) @@ -1502,7 +1502,7 @@ - [ ] [路径压缩](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression) - [ ] [分析选项](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) -- ### 数学的快速处理 +- ### 快速处理数学 - [ ] [整数运算, Karatsuba 乘法 (视频)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [中国剩余定理 (在密码学中的使用) (视频)](https://www.youtube.com/watch?v=ru7mWZJlRQg) From 9ff224d7e33438afde3f8897caf246f6fcff817b Mon Sep 17 00:00:00 2001 From: Glow Chiang Date: Tue, 11 Oct 2016 18:10:26 +0800 Subject: [PATCH 58/61] add Chinese version --- README.md | 50 +++----------------------------------------------- 1 file changed, 3 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 2e6a941..4128416 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Google Interview University +[中文版本](https://github.com/xitu/google-interview-university/blob/master/README-cn.md) + ## What is it? This is my multi-month study plan for going from web developer (self-taught, no CS degree) to Google software engineer. @@ -1654,50 +1656,4 @@ Sit back and enjoy. "netflix and skill" :P - [ ] [Discrete Mathematics (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) - [ ] CSE373 - Analysis of Algorithms (25 videos) - - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) - -- [ ] [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) - -- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)]( https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) - -- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://www.youtube.com/watch?v=gJJeUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) - -- [ ] [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - -- [ ] [UC Berkeley CS 152: Computer Architecture and Engineering (20 videos)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr) - -- [ ] [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) - -- [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) - -- [ ] [MIT 6.006: Intro to Algorithms (47 videos)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False) - -- [ ] [MIT 6.033: Computer System Engineering (22 videos)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484) - -- [ ] [MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi) - -- [ ] [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B) - -- [ ] [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - -- [ ] [MIT 6.050J: Information and Entropy, Spring 2008 (19 videos)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7) - -- [ ] [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) - -- [ ] [MIT 6.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) - -- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - -- [ ] Stanford: Programming Paradigms (17 videos) - - [Course on C and C++](https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False) - -- [ ] [Introduction to Cryptography](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be) - - [more in series (not in order)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) - -- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) - -## Computer Science Courses - -- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science) -- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses) - + - [Skiena lecture From d6c252bdaedfaf768c8fa71cccc8acd875802bdd Mon Sep 17 00:00:00 2001 From: antonia0912 Date: Tue, 11 Oct 2016 18:17:42 +0800 Subject: [PATCH 59/61] Update README-cn.md --- README-cn.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README-cn.md b/README-cn.md index 017bf55..0e14b6c 100644 --- a/README-cn.md +++ b/README-cn.md @@ -1,4 +1,3 @@ -# Google Interview University - 一套完整的学习手册帮助自己准备 Google 的面试 > * 原文地址:[Google Interview University](https://github.com/jwasham/google-interview-university) * 原文作者:[John Washam](https://github.com/jwasham) From b1dea3635f5ec85a0b7fd8fc114431574b60595b Mon Sep 17 00:00:00 2001 From: Glow Chiang Date: Tue, 11 Oct 2016 18:43:19 +0800 Subject: [PATCH 60/61] =?UTF-8?q?add=20=E4=B8=AD=E6=96=87=E7=89=88?= =?UTF-8?q?=E6=9C=AC=20to=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 48c5531..bb373dc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Google Interview University +[中文版本](https://github.com/xitu/google-interview-university/blob/master/README-cn.md) + ## What is it? This is my multi-month study plan for going from web developer (self-taught, no CS degree) to Google software engineer. From 33b5a2515e6e1d466f01406da03cc119b27e3208 Mon Sep 17 00:00:00 2001 From: antonia0912 Date: Tue, 11 Oct 2016 18:57:18 +0800 Subject: [PATCH 61/61] Update README-cn.md --- README-cn.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README-cn.md b/README-cn.md index 0e14b6c..0711e43 100644 --- a/README-cn.md +++ b/README-cn.md @@ -1,3 +1,4 @@ +# [译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 > * 原文地址:[Google Interview University](https://github.com/jwasham/google-interview-university) * 原文作者:[John Washam](https://github.com/jwasham)