From b8c8fb5f40eb04583f4430dc47a652fe1ba8dddb Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Fri, 23 Dec 2016 11:03:15 +0300 Subject: [PATCH 001/263] Init russian translation. --- README-ru.md | 2018 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2018 insertions(+) create mode 100644 README-ru.md diff --git a/README-ru.md b/README-ru.md new file mode 100644 index 0000000..5b71294 --- /dev/null +++ b/README-ru.md @@ -0,0 +1,2018 @@ +# Google Interview University + +Оригинальная версия: [Английский](README.md) + +## Что это? + +Это мой учебный план рассчитанный на несколько месяцев для веб-разарботчиков, не имеющих образования в CS и планирующих +работать разработчиками программного обеспечения в компании Google. + +![Кодирование на доске - из телесериала канала 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. + +I've pared down what you need to know from what Yegge recommends. I've altered Yegge's requirements +from information received from my contact at Google. This is meant for **new software engineers** or those switching from +software/web development to software engineering (where computer science knowledge is required). If you have +many years of experience and are claiming many years of software engineering experience, expect a harder interview. +[Read more here](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/). + +If you have many years of software/web development experience, note that Google views software engineering as +different from software/web development and they require computer science knowledge. + +If you want to be a reliability engineer or systems engineer, study more from the optional list (networking, security). + +--- + +## 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) +- [Book List](#book-list) +- [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) + - balanced search trees (general concept, not details) + - traversals: preorder, inorder, postorder, BFS, DFS +- [Sorting](#sorting) + - selection + - insertion + - heapsort + - quicksort + - merge sort +- [Graphs](#graphs) + - directed + - undirected + - adjacency matrix + - adjacency list + - traversals: BFS, DFS +- [Even More Knowledge](#even-more-knowledge) + - [Recursion](#recursion) + - [Object-Oriented Programming](#object-oriented-programming) + - [Design Patterns](#design-patterns) + - [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) + - [Papers](#papers) + - [Testing](#testing) + - [Scheduling](#scheduling) + - [Implement system routines](#implement-system-routines) + - [String searching & manipulations](#string-searching--manipulations) +- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) +- [Final Review](#final-review) +- [Coding Question Practice](#coding-question-practice) +- [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 Books](#additional-books) +- [Additional Learning](#additional-learning) + - [Dynamic Programming](#dynamic-programming) + - [Compilers](#compilers) + - [Floating Point Numbers](#floating-point-numbers) + - [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) (if you have networking experience or want to be a systems engineer, expect questions) + - [Computer Security](#computer-security) + - [Garbage collection](#garbage-collection) + - [Parallel Programming](#parallel-programming) + - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) + - [Fast Fourier Transform](#fast-fourier-transform) + - [Bloom Filter](#bloom-filter) + - [HyperLogLog](#hyperloglog) + - [Locality-Sensitive Hashing](#locality-sensitive-hashing) + - [van Emde Boas Trees](#van-emde-boas-trees) + - [Augmented Data Structures](#augmented-data-structures) + - [Tries](#tries) + - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees) + - [Balanced search trees](#balanced-search-trees) + - AVL trees + - Splay trees + - Red/black trees + - 2-3 search trees + - 2-3-4 Trees (aka 2-4 trees) + - N-ary (K-ary, M-ary) trees + - B-Trees + - [k-D Trees](#k-d-trees) + - [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 multidimensional 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] + + + Fork a branch and follow the commands below + +`git checkout -b progress` + +`git remote add jwasham https://github.com/jwasham/google-interview-university` + +`git fetch --all` + + Mark all boxes with X after you completed your changes + +`git add . ` + +`git commit -m "Marked x" ` + +`git rebase jwasham/master ` + +`git push --force ` + +[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'm in the queue right now. Hope to interview soon. + + Thanks for the referral, JP. + +## Follow Along with Me + +My story: [Why I Studied Full-Time for 8 Months for a Google Interview](https://medium.com/@googleyasheck/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) + +I'm on the journey, too. Follow along: + +- **Blog**: [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) +- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) + +## 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. +Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. Lynda.com courses are not free. + + I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos. + I like using university lectures. + + +## Interview Process & General Interview Prep + +- [ ] Videos: + - [ ] [How to Work at Google: Prepare for an Engineering Interview (video)](https://www.youtube.com/watch?v=ko-KkSmp-Lk) + - [ ] [How to Work at Google: Example Coding/Engineering Interview (video)](https://www.youtube.com/watch?v=XKu_SEDAykw) + - [ ] [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) + +- [ ] Prep Courses: + - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): + - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. + +- [ ] 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. + +## Book List + +This is a shorter list than what I used. This is abbreviated to save you time. + +### Interview Prep + +- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - answers in C++ and Java + - recommended in Google candidate coaching + - this is a good warm-up for Cracking the Coding Interview + - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - answers in Java + - recommended on the [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/) + - If you see people reference "The Google Resume", it was a book replaced by "Cracking the Coding Interview". + +If you have tons of extra time: + +- [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) + - all code is in C++, very good if you're looking to use C++ in your interview + - a good book on problem solving in general. + +### Computer Architecture + +If short on time: + +- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. + - The author invented HLA, so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - These chapters are worth the read to give you a nice foundation: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization + +If you have more time (I want this book): + +- [ ] [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/) + - For a richer, more up-to-date (2011), but longer treatment + +### Language Specific + +**You need to choose a language for the interview (see above).** Here are my recommendations by language. I don't have resources for all languages. I welcome additions. + +If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. +**You can skip all the video lectures in this project**, unless you'd like a review. + +[Additional language-specific resources here.](programming-language-resources.md) + +### C++ + +I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. + +- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. + +### Java + +- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - videos with book content (and Sedgewick!): + - [Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) + - [Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) + +OR: + +- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - by Goodrich, Tamassia, Goldwasser + - used as optional text for CS intro course at UC Berkeley + - see my book report on the Python version below. This book covers the same topics. + +### Python + +- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - by Goodrich, Tamassia, Goldwasser + - I loved this book. It covered everything and more. + - Pythonic code + - my glowing book report: https://googleyasheck.com/book-report-data-structures-and-algorithms-in-python/ + + +### Optional Books + +**Some people recommend these, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:** + +- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - To quote Yegge: "More than any other book it helped me understand just how astonishingly commonplace + (and important) graph problems are – they should be part of every working programmer's toolkit. The book also + covers basic data structures and sorting algorithms, which is a nice bonus. But the gold mine is the second half + of the book, which is a sort of encyclopedia of 1-pagers on zillions of useful problems and various ways to solve + them, without too much detail. Almost every 1-pager has a simple picture, making it easy to remember. This is a + great way to learn how to identify hundreds of problem types." + - Can rent it on kindle + - 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) + +- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - To quote Yegge: "But if you want to come into your interviews *prepped*, then consider deferring your application until you've made your way through that book." + - Half.com is a great resource for textbooks at good prices. + - aka CLR, sometimes CLRS, because Stein was late to the game + +- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. + +- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ + - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. + - Would rather spend time on coding problems from another book or online coding problems. + + +## 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. + +Read please so you won't make my mistakes: + +[Retaining Computer Science Knowledge](https://googleyasheck.com/retaining-computer-science-knowledge/) + +### 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, wherever 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. + +An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. +It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. + +My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) + +### 3. Review, review, review + +I keep a set of cheat sheets 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 are 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. + +You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). + +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 or paper, not a computer. Test with some sample inputs. Then test it out on a computer. + +## Prerequisite Knowledge + +- [ ] **Learn C** + - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. + - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - This is a short book, but it will give you a great handle on the C language and if you practice it a little + you'll quickly get proficient. Understanding C helps you understand how programs and memory work. + - [answers to questions](https://github.com/lekkas/c-algorithms) + +- [ ] **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) + +## 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) + - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) + - [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.youtube.com/watch?v=1jtrQqYpt7g) + - [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). + +## 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. + +- [ ] [Sedgewick - Mergesort (5 videos)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [1. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) + - [ ] [2. Bottom up Mergesort](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) + - [ ] [3. Sorting Complexity](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [4. Comparators](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [5. Stability](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + +- [ ] [Sedgewick - Quicksort (4 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [1. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [2. Selection](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [3. Duplicate Keys](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [4. System Sorts](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + +- [ ] 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) + +- [ ] [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) + +- [ ] Merge sort code: + - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] Quick sort code: + - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + +- [ ] 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. + +- [ ] Not required, but I recommended them: + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [1. Strings in Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) + - [ ] [2. Key Indexed Counting](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [5. 3 Way Radix Quicksort](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [6. Suffix Arrays](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1) + - [ ] [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) + +If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + +## 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) + +- ### Object-Oriented Programming + - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] Object-Oriented Software Engineering: 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) + +- ### 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) + +- ### 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-Completeness (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 Norvig 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 processes 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 the 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) + +- ### 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 + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.youtube.com/watch?v=HKPrVm5FWvg) + - [ ] [Sedgewick - Substring Search (videos)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) + - [ ] [1. Introduction to Substring Search](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) + - [ ] [2. Brute-Force Substring Search](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) + - [ ] [3. Knuth-Morris Pratt](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [4. Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) + - [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + +--- + +## System Design, Scalability, Data Handling +- **You can expect system design questions if you have 4+ years of experience.** +- 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. +- 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) +- [ ] 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/) + +--- + +## 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. + +- [ ] 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) +- [ ] [Sedgewick Videos - Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) + - [ ] [01. Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) + - [ ] [02. Analysis of Algorithms](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) + - [ ] [03. Stacks and Queues](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) + - [ ] [04. Elementary Sorts](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) + - [ ] [05. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [06. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [07. Priority Queues](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) + - [ ] [08. Elementary Symbol Tables](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) + - [ ] [09. Balanced Search Trees](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) + - [ ] [10. Geometric Applications of BST](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) + - [ ] [11. Hash Tables](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) +- [ ] [Sedgewick Videos - Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50) + - [ ] [01. Undirected Graphs](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) + - [ ] [02. Directed Graphs](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) + - [ ] [03. Minimum Spanning Trees](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj) + - [ ] [04. Shortest Paths](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) + - [ ] [05. Maximum Flow](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) + - [ ] [06. Radix Sorts](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [07. Tries](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [08. Substring Search](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [09. Regular Expressions](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) + - [ ] [10. Data Compression](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) + - [ ] [11. Reductions](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF) + - [ ] [12. Linear Programming](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) + - [ ] [13. Intractability](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) + +--- + +## Coding Question Practice + +Now that you know all the computer science topics above, it's time to practice answering coding problems. + +**Coding question practice is not about memorizing answers to programming problems.** + +Why you need to practice doing programming problems: +- problem recognition, and where the right data structures and algorithms fit in +- gathering requirements for the problem +- talking your way through the problem like you will in the interview +- coding on a whiteboard or paper, not a computer +- coming up with time and space complexity for your solutions +- testing your solutions + +There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming +interview books, too, but I found this outstanding: +[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) + +[My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/) + +No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a +large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". +I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. + +![my sofa whiteboard](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) + +Supplemental: + +- [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://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) +- [Exercises for getting better at a given language](http://exercism.io/languages) + +**Read and Do Programming Problems (in this order):** + +- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - answers in C, C++ and Java +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - answers in Java + +See [Book List above](#book-list) + +## 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. + +- [ ] [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/) + +Challenge sites: +- [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/) +- [Geeks for Geeks](http://www.geeksforgeeks.org/) +- [InterviewBit](https://www.interviewbit.com/invite/icjf) + +Maybe: +- [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) +- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed + + +## Be thinking of for when the interview comes + +Think of about 20 interview questions you'll get, along with 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 does 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. You'll be a much more well-rounded software engineer. + + ***************************************************************************************************** + ***************************************************************************************************** + +--- + +## Additional Books + +- [ ] [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) + - an oldie but a goodie +- [ ] [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) + - a modern option +- [ ] [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [ ] [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) + - a gentle introduction to design patterns +- [ ] [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) + - aka the "Gang Of Four" book, or GOF + - the canonical design patterns book +- [ ] [Site Reliability Engineering](https://landing.google.com/sre/book.html) + - [Site Reliability Engineering: How Google Runs Production Systems](https://landing.google.com/sre/) +- [ ] [UNIX and Linux System Administration Handbook, 4th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/) + +## Additional Learning + +- ### 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) + +- ### Compilers + - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [ ] [Harvard 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) + +- ### Floating Point Numbers + - [ ] 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) + +- ### 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 + - **if you have networking experience or want to be a systems engineer, expect questions** + - otherwise, this is just good to know + - [ ] [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) + +- ### 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 Started](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 + - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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/) + +- ### HyperLogLog + - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + +- ### Locality-Sensitive Hashing + - used to determine the similarity of documents + - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) + +- ### 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) + +- ### 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. + - [ ] [Sedgewick - Tries (3 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [1. R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [2. Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [3. Character Based Operations](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) + - [ ] [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) + + - [ ] **Red/black trees** + - these are a translation of a 2-3 tree (see below) + - 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/) + + - [ ] **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) + + - [ ] **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) + + - [ ] **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) + + +- ### k-D Trees + - great for finding number of points in a rectangle or higher dimension object + - a good fit for k-nearest neighbors + - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + +- ### 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 + - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) + - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) + +- ### 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) + - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) + +- ### 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: + - Books: + - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) + - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) + - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) + - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - 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? + +- [ ] **Union-Find** + - [ ] [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) + +- [ ] **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) + +- [ ] **String Matching** + - [ ] 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): + - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - [ ] 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) + - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be + - nice explanation of tries + - can be skipped + +- [ ] **Sorting** + + - [ ] 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) + +## 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 by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) + +- [ ] [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) + +- [ ] 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) + +- [ ] [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) + +- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) + +- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) + - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) + +- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) + +- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) + +## 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 195ad48c4fd0495216e8b6b17cfa0589936dd440 Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Sat, 24 Dec 2016 11:57:27 +0300 Subject: [PATCH 002/263] Header and the table of contents until optional items. --- README-ru.md | 165 ++++++++++++++++++++++++++------------------------- 1 file changed, 84 insertions(+), 81 deletions(-) diff --git a/README-ru.md b/README-ru.md index 5b71294..192d0d8 100644 --- a/README-ru.md +++ b/README-ru.md @@ -4,97 +4,100 @@ ## Что это? -Это мой учебный план рассчитанный на несколько месяцев для веб-разарботчиков, не имеющих образования в CS и планирующих -работать разработчиками программного обеспечения в компании Google. +Это мой учебный план рассчитанный на несколько месяцев для веб-разработчиков, не имеющих образования в Computer Science (CS) +и планирующих работать инженерами-программистами (software engineer) в компании Google. ![Кодирование на доске - из телесериала канала 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's coaching notes** и значительно расширил его. Тут вы найдёте +много полезных вещей, которые необходимо знать. Дополнительные вопросы я добавил в конец списка, их могут задавать на +интервью, так же они могут быть полезны в решении повседневных задач. Некоторые пункты я взял из поста Стива Йеги (Steve Yegge) +"[Получить работу в Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)", а некоторые слово в слово +соответствуют вопросам, разбираемых Google в их постах о подготовке. -I've pared down what you need to know from what Yegge recommends. I've altered Yegge's requirements -from information received from my contact at Google. This is meant for **new software engineers** or those switching from -software/web development to software engineering (where computer science knowledge is required). If you have -many years of experience and are claiming many years of software engineering experience, expect a harder interview. -[Read more here](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/). +Я сократил тот объем знаний, который необходим, по сравнению с рекомендациями Йеги. Я изменил требования Йеги исходя +из той информации, которую мне предоставил мой знакомый из Google. Это важно для тех, кто сейчас еще **новички в +разработке программного обеспечения** или являются веб-разработчиками и планируют стать инженерами-программистами +(это та профессия где требуются знания в области CS). Если вы опытный разработчик, ожидайте что собеседование будет сложным. +[Подробнее](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/). -If you have many years of software/web development experience, note that Google views software engineering as -different from software/web development and they require computer science knowledge. +Если вы обладаете многолетним опытом разработки ПО, помните, что Google разделяет понятия инженер-программист и +разработчик ПО/веб-разработчик. Первое требует знаний в области CS. -If you want to be a reliability engineer or systems engineer, study more from the optional list (networking, security). +Если вы хотите быть инженерами обеспечивающими надежность ПО или системными инженерами, то уделить внимание вопросом из +опционального списка(разделы сеть, безопасность). --- -## Table of Contents +## Содержание + +- [Что это?](#what-is-it) +- [Почему нужно это использовать?](#why-use-it) +- [Как пользоваться](#how-to-use-it) +- [Получи гугловское настроение](#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) +- [Список книг](#book-list) +- [Перед тем как ты начнешь](#before-you-get-started) +- [Что еще не охвачено](#what-you-wont-see-covered) +- [Необходимые знания](#prerequisite-knowledge) +- [План на день](#the-daily-plan) +- [Сложность алгоритмов / 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) + - Сбалансированные деревья поиска (основная идея, без деталей) + - Обходы: прямой, симметричный, обратный, BFS, DFS +- [Сортировка](#sorting) + - выбором + - вставками + - пирамидальная + - быстрая + - слиянием +- [Графы](#graphs) + - ориентированные + - неориентированные + - матрица смежности + - лист смежности + - обходы: BFS, DFS +- [Еще больше знаний](#even-more-knowledge) + - [Рекурсия](#recursion) + - [Объектно-ориентированное программирование](#object-oriented-programming) + - [Шаблоны проектирования](#design-patterns) + - [Комбинаторика & Вероятность](#combinatorics-n-choose-k--probability) + - [NP, NP-полные and Аппроксимирующие алгоритмы](#np-np-complete-and-approximation-algorithms) + - [Кэш](#caches) + - [Процессы и нити](#processes-and-threads) + - [Статьи](#papers) + - [Тестирование](#testing) + - [Планирование](#scheduling) + - [Реализация системных вызовов](#implement-system-routines) + - [Поиск в строке & манипуляции](#string-searching--manipulations) +- [Проектирование систем, Масштабируемость, Обработка данных](#system-design-scalability-data-handling) (if you have 4+ years experience) +- [Финальный обзор](#final-review) +- [Практические вопросы по программированию](#coding-question-practice) +- [Упражнения по программированию](#coding-exerciseschallenges) +- [Перед собеседованием](#once-youre-closer-to-the-interview) +- [Ваше резюме](#your-resume) +- [О чем нужно думать на собеседовании](#be-thinking-of-for-when-the-interview-comes) +- [Вопросы к собеседующим](#have-questions-for-the-interviewer) +- [После того как вы получили работу](#once-youve-got-the-job) -- [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) -- [Book List](#book-list) -- [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) - - balanced search trees (general concept, not details) - - traversals: preorder, inorder, postorder, BFS, DFS -- [Sorting](#sorting) - - selection - - insertion - - heapsort - - quicksort - - merge sort -- [Graphs](#graphs) - - directed - - undirected - - adjacency matrix - - adjacency list - - traversals: BFS, DFS -- [Even More Knowledge](#even-more-knowledge) - - [Recursion](#recursion) - - [Object-Oriented Programming](#object-oriented-programming) - - [Design Patterns](#design-patterns) - - [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) - - [Papers](#papers) - - [Testing](#testing) - - [Scheduling](#scheduling) - - [Implement system routines](#implement-system-routines) - - [String searching & manipulations](#string-searching--manipulations) -- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) -- [Final Review](#final-review) -- [Coding Question Practice](#coding-question-practice) -- [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 ---------------- From 98ab3637d2f00ce518c12349328eb9edd198242c Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Sat, 24 Dec 2016 20:30:55 +0300 Subject: [PATCH 003/263] The table of contents is finished --- README-ru.md | 96 ++++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/README-ru.md b/README-ru.md index 192d0d8..6e0a47e 100644 --- a/README-ru.md +++ b/README-ru.md @@ -25,7 +25,7 @@ разработчик ПО/веб-разработчик. Первое требует знаний в области CS. Если вы хотите быть инженерами обеспечивающими надежность ПО или системными инженерами, то уделить внимание вопросом из -опционального списка(разделы сеть, безопасность). +опционального списка (разделы сеть, безопасность). --- @@ -99,57 +99,57 @@ - [После того как вы получили работу](#once-youve-got-the-job) ----------------- Everything below this point is optional ---------------- +---------------- Все что ниже - опционально ---------------- -- [Additional Books](#additional-books) -- [Additional Learning](#additional-learning) - - [Dynamic Programming](#dynamic-programming) - - [Compilers](#compilers) - - [Floating Point Numbers](#floating-point-numbers) +- [Дополнительные книги](#additional-books) +- [Дополнительное обучение](#additional-learning) + - [Динамическое программирование](#dynamic-programming) + - [Компиляторы](#compilers) + - [Числа с плавующей запятой](#floating-point-numbers) - [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) (if you have networking experience or want to be a systems engineer, expect questions) - - [Computer Security](#computer-security) - - [Garbage collection](#garbage-collection) - - [Parallel Programming](#parallel-programming) - - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - - [Fast Fourier Transform](#fast-fourier-transform) - - [Bloom Filter](#bloom-filter) + - [Порядок следования байт](#endianness) + - [Emacs и vi(m)](#emacs-and-vim) + - [Командная строка Unix](#unix-command-line-tools) + - [Теория информации](#information-theory) + - [Четность & Код Хемминга](#parity--hamming-code) + - [Энтропия](#entropy) + - [Криптография](#cryptography) + - [Сжатие](#compression) + - [Сети](#networking) (if you have networking experience or want to be a systems engineer, expect questions) + - [Компьютерная безопасность](#computer-security) + - [Сборщики мусора](#garbage-collection) + - [Параллельное программирование](#parallel-programming) + - [Сообщения, сериализация и системы очередей](#messaging-serialization-and-queueing-systems) + - [Быстрое преобразование Фурье](#fast-fourier-transform) + - [Фильтр Блума](#bloom-filter) - [HyperLogLog](#hyperloglog) - - [Locality-Sensitive Hashing](#locality-sensitive-hashing) - - [van Emde Boas Trees](#van-emde-boas-trees) - - [Augmented Data Structures](#augmented-data-structures) - - [Tries](#tries) - - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees) - - [Balanced search trees](#balanced-search-trees) - - AVL trees - - Splay trees - - Red/black trees - - 2-3 search trees - - 2-3-4 Trees (aka 2-4 trees) - - N-ary (K-ary, M-ary) trees - - B-Trees - - [k-D Trees](#k-d-trees) - - [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) + - [Локально-чувствительное хеширование](#locality-sensitive-hashing) + - [Дерево ван Эмде Боаса](#van-emde-boas-trees) + - [Дополнительные структуры данных](#augmented-data-structures) + - [Префиксные деревья](#tries) + - [N-арные (K-арные, M-арные) деревья](#n-ary-k-ary-m-ary-trees) + - [Сбалансированные деревья поиска](#balanced-search-trees) + - АВЛ деревья + - Splay-деревья + - Красно-черные деревья + - 2-3 деревья поиска + - 2-3-4 деревья + - N-арные (K-арные, M-арные) деревья + - B-деревья + - [k-D деревья](#k-d-trees) + - [Списки с пропусками](#skip-lists) + - [Сеть](#network-flows) + - [Система непересекающихся множеств](#disjoint-sets--union-find) + - [Математика для быстрой обработки](#math-for-fast-processing) + - [Декартово дерево](#treap) + - [Линейное программирование](#linear-programming) + - [Геометрия, Выпуклая оболочка](#geometry-convex-hull) + - [Дискретная математика](#discrete-math) + - [Машинное обучение](#machine-learning) - [Go](#go) -- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) -- [Video Series](#video-series) -- [Computer Science Courses](#computer-science-courses) +- [Дополнительные детали](#additional-detail-on-some-subjects) +- [Видео](#video-series) +- [Курсы по Computer Science](#computer-science-courses) --- From fda116c4acc771d5deee8a060f03391d9de74511 Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Sun, 25 Dec 2016 18:45:59 +0300 Subject: [PATCH 004/263] The first paragraph is checked --- README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-ru.md b/README-ru.md index 6e0a47e..40aeba1 100644 --- a/README-ru.md +++ b/README-ru.md @@ -31,7 +31,7 @@ ## Содержание -- [Что это?](#what-is-it) +- [Что это?](#что-это) - [Почему нужно это использовать?](#why-use-it) - [Как пользоваться](#how-to-use-it) - [Получи гугловское настроение](#get-in-a-googley-mood) From 48c412e808cdc67db466bd495d4db623e7ce8187 Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Sun, 25 Dec 2016 18:52:42 +0300 Subject: [PATCH 005/263] Changed the main readme. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 054fe2c..92b1fd1 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Translations: - [Español (in progress)](README-es.md) [Issue #80](https://github.com/jwasham/google-interview-university/issues/80) - हिन्दी (in progress) [Issue #81](https://github.com/jwasham/google-interview-university/issues/81) - [עברית (in progress)](README-he.md) [Issue #82] (https://github.com/jwasham/google-interview-university/issues/82) - +- [Russian (in progress)](README-ru.md) [Issue #87] (https://github.com/jwasham/google-interview-university/issues/87) ## What is it? From 1397d07c6404442df06925b58a98004b94f76ccc Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Sun, 25 Dec 2016 19:16:33 +0300 Subject: [PATCH 006/263] Fixed a link. --- README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-ru.md b/README-ru.md index 40aeba1..e490e2b 100644 --- a/README-ru.md +++ b/README-ru.md @@ -31,7 +31,7 @@ ## Содержание -- [Что это?](#что-это) +- [Что это?](#Что-это) - [Почему нужно это использовать?](#why-use-it) - [Как пользоваться](#how-to-use-it) - [Получи гугловское настроение](#get-in-a-googley-mood) From 8bf2224483f43fe0484b00ebaed27815082ecf3e Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Sun, 25 Dec 2016 20:07:41 +0300 Subject: [PATCH 007/263] "Why use it" was translated. --- README-ru.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/README-ru.md b/README-ru.md index e490e2b..b9c38d8 100644 --- a/README-ru.md +++ b/README-ru.md @@ -2,7 +2,7 @@ Оригинальная версия: [Английский](README.md) -## Что это? +## Для кого это? Это мой учебный план рассчитанный на несколько месяцев для веб-разработчиков, не имеющих образования в Computer Science (CS) и планирующих работать инженерами-программистами (software engineer) в компании Google. @@ -31,8 +31,8 @@ ## Содержание -- [Что это?](#Что-это) -- [Почему нужно это использовать?](#why-use-it) +- [Для кого это?](#Для-кого-это) +- [Чем это полезно?](#Чем-это-полезно) - [Как пользоваться](#how-to-use-it) - [Получи гугловское настроение](#get-in-a-googley-mood) - [Получил ли я работу?](#did-i-get-the-job) @@ -153,23 +153,23 @@ --- -## 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 года. У меня есть степень по экономике, но нет по CS. До сих пор у меня очень успешная карьера, но я хочу работать +в 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 multidimensional arrays in my life and -thousands of associative arrays, but I've never created data structures from scratch. +Когда я начал этот проект, я ничего не знал о стеке, куче, Big-O, деревья и способах обхода графа. Если бы мне нужно +было писать код для сортировки, это было бы не очень хорошо. Структуры данных, которые я использовал, были частью языка, +и я не знал, как они на самом деле работали. Мне никогда не приходилось управлять памятью, если процесс, который я +запускал, сообщал об ошибке "out of memory", я искал способ как ее обойти. Я использовал в своей работе несколько +многомерных массивов и тысячи ассоциативных, но никогда не создавал структуру данных "с нуля". + +Но после выполнения этого учебного плана я поверил, что Google меня наймет. Это длинный план. Я потрачу на это месяцы. +Если вы уже знакомы с большинством тем, то прохождение всех тем то потратите намного меньше времени. -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 From ca8756a397ec2a8df0a2e11c2db422865387a408 Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Mon, 2 Jan 2017 15:23:20 +0300 Subject: [PATCH 008/263] Moved the translation file to the translations directory. --- README.md | 2 +- README-ru.md => translations/README-ru.md | 67 +++++++++++------------ 2 files changed, 34 insertions(+), 35 deletions(-) rename README-ru.md => translations/README-ru.md (97%) diff --git a/README.md b/README.md index 92b1fd1..923fa4c 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Translations: - [Español (in progress)](README-es.md) [Issue #80](https://github.com/jwasham/google-interview-university/issues/80) - हिन्दी (in progress) [Issue #81](https://github.com/jwasham/google-interview-university/issues/81) - [עברית (in progress)](README-he.md) [Issue #82] (https://github.com/jwasham/google-interview-university/issues/82) -- [Russian (in progress)](README-ru.md) [Issue #87] (https://github.com/jwasham/google-interview-university/issues/87) +- [Russian (in progress)](translations/README-ru.md) [Issue #87] (https://github.com/jwasham/google-interview-university/issues/87) ## What is it? diff --git a/README-ru.md b/translations/README-ru.md similarity index 97% rename from README-ru.md rename to translations/README-ru.md index b9c38d8..4194118 100644 --- a/README-ru.md +++ b/translations/README-ru.md @@ -1,6 +1,6 @@ # Google Interview University -Оригинальная версия: [Английский](README.md) +Оригинальная версия: [Английский](../README.md) ## Для кого это? @@ -33,12 +33,12 @@ - [Для кого это?](#Для-кого-это) - [Чем это полезно?](#Чем-это-полезно) -- [Как пользоваться](#how-to-use-it) -- [Получи гугловское настроение](#get-in-a-googley-mood) -- [Получил ли я работу?](#did-i-get-the-job) -- [Двигайся вместе со мной](#follow-along-with-me) -- [Не переживай о том, что ты не достаточно умный](#dont-feel-you-arent-smart-enough) -- [О Google](#about-google) +- [Как пользоваться](#Как-пользоваться) +- [Получи гугловское настроение](#Получи-гугловское-настроение) +- [Получил ли я работу?](#Получил-ли-я-работу) +- [Двигайся вместе со мной](#Двигайся-вместе-со-мной) +- [Не переживай о том, что ты не достаточно умный](#Не-переживай-о-том-что-ты-не-достаточно-умный) +- [О Google](#О-google) - [О видео ресурсах](#about-video-resources) - [Процесс собеседования & Основное в подготовке к интервью](#interview-process--general-interview-prep) - [Выберите один язык для собеседования](#pick-one-language-for-the-interview) @@ -167,20 +167,19 @@ Google не возьмёт тебя на работу. запускал, сообщал об ошибке "out of memory", я искал способ как ее обойти. Я использовал в своей работе несколько многомерных массивов и тысячи ассоциативных, но никогда не создавал структуру данных "с нуля". -Но после выполнения этого учебного плана я поверил, что Google меня наймет. Это длинный план. Я потрачу на это месяцы. -Если вы уже знакомы с большинством тем, то прохождение всех тем то потратите намного меньше времени. +Но после выполнения этого учебного плана я поверил, что 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, включая список задач для оценки прогресса. -- [x] Create a new branch so you can check items like this, just put an x in the brackets: [x] +- [x] Создай новую ветку и тогда вы сможете оставлять отметки у элементов списка, просто добавляя x внутрь скобок: [x] - - Fork a branch and follow the commands below + Скопируй репозиторий и выполни команды перечисленные ниже `git checkout -b progress` @@ -198,25 +197,25 @@ I'm using Github's special markdown flavor, including tasks lists to check progr `git push --force ` -[More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +[Подробнее о разметке на Github](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](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'm in the queue right now. Hope to interview soon. +Пока я ожидаю своей очереди. Надеюсь интервью будет скоро. Thanks for the referral, JP. -## Follow Along with Me +## Двигайся вместе со мной -My story: [Why I Studied Full-Time for 8 Months for a Google Interview](https://medium.com/@googleyasheck/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +Моя история: [Почему я готовился в течении 8 месяцев для собеседования в Google](https://medium.com/@googleyasheck/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) -I'm on the journey, too. Follow along: +Я еще на пути к цели. Двигаемся вперед: - **Blog**: [GoogleyAsHeck.com](https://googleyasheck.com/) - Twitter: [@googleyasheck](https://twitter.com/googleyasheck) @@ -226,26 +225,26 @@ I'm on the journey, too. Follow along: ![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) -- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) +## Не переживай о том, что ты не достаточно умный +- Инженеры в Google умные, но многие из них переживают что недостаточно, хотя там уже работают. +- [Миф о гениальных программистах](https://www.youtube.com/watch?v=0SARbwvhupQ) +- [Это опасно, идти в одиночку: Сражаться с невидимыми монстрами в технологиях](https://www.youtube.com/watch?v=1i8ylq4j_EY) -## About Google +## О Google -- [ ] For students - [Google Careers: Technical Development Guide](https://www.google.com/about/careers/students/guide-to-technical-development.html) -- [ ] How Search Works: +- [ ] Для студентов - [Google Careers: Руководство по развитию в технологиях](https://www.google.com/about/careers/students/guide-to-technical-development.html) +- [ ] Как работает поиск: - [ ] [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) +- [ ] [Книга: Как работает Google](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 @@ -312,7 +311,7 @@ Read more about choices: - 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) +[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. @@ -368,7 +367,7 @@ If you have more time (I want this book): If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. **You can skip all the video lectures in this project**, unless you'd like a review. -[Additional language-specific resources here.](programming-language-resources.md) +[Additional language-specific resources here.](../programming-language-resources.md) ### C++ From 72e1d8a9e059cc5c5707aca657b39bd1b349893e Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Wed, 4 Jan 2017 20:54:52 +0300 Subject: [PATCH 009/263] About Video Resources and Interview Process --- translations/README-ru.md | 73 ++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 4194118..851adde 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -39,8 +39,8 @@ - [Двигайся вместе со мной](#Двигайся-вместе-со-мной) - [Не переживай о том, что ты не достаточно умный](#Не-переживай-о-том-что-ты-не-достаточно-умный) - [О Google](#О-google) -- [О видео ресурсах](#about-video-resources) -- [Процесс собеседования & Основное в подготовке к интервью](#interview-process--general-interview-prep) +- [О видео ресурсах](#О-видео-ресурсах) +- [Процесс собеседования & Основное в подготовке к интервью](#Процесс-собеседования-Основное-в-подготовке-к-интервью) - [Выберите один язык для собеседования](#pick-one-language-for-the-interview) - [Список книг](#book-list) - [Перед тем как ты начнешь](#before-you-get-started) @@ -225,7 +225,7 @@ Google не возьмёт тебя на работу. ![John Washam - Google Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) -## Не переживай о том, что ты не достаточно умный +## Не переживайте о том, что вы не достаточно умны - Инженеры в Google умные, но многие из них переживают что недостаточно, хотя там уже работают. - [Миф о гениальных программистах](https://www.youtube.com/watch?v=0SARbwvhupQ) - [Это опасно, идти в одиночку: Сражаться с невидимыми монстрами в технологиях](https://www.youtube.com/watch?v=1i8ylq4j_EY) @@ -247,47 +247,48 @@ Google не возьмёт тебя на работу. - [ ] [Книга: Как работает Google](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. -Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. Lynda.com courses are not free. - - I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos. - I like using university lectures. +Некоторые видео доступно в том случае, если вы являетесь слушателями курсов Coursera, EdX или Lynda.com +Их называют MOOCs. Некоторые курсы не имеют круглогодичного доступа и вам нужно подождать несколько месяцев, +прежде чем получите к ним доступ. Курсы на Lynda.com платные. + + Я был бы вам благодарен за помощь в добавлении бесплатных, всегда доступных публичных ресурсов, таких как видео с YouTube + сопровождающих онлайн курсы. Мне нравяться использовать университетские лекции. -## Interview Process & General Interview Prep +## Процесс собеседования & Основное в подготовке к интервью -- [ ] Videos: - - [ ] [How to Work at Google: Prepare for an Engineering Interview (video)](https://www.youtube.com/watch?v=ko-KkSmp-Lk) - - [ ] [How to Work at Google: Example Coding/Engineering Interview (video)](https://www.youtube.com/watch?v=XKu_SEDAykw) - - [ ] [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=ko-KkSmp-Lk) + - [ ] [Как работать в Google: Пример кодированияg/Собеседование инженера (видео)](https://www.youtube.com/watch?v=XKu_SEDAykw) + - [ ] [Как работать в 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) +- [ ] Статьи: + - [ ] [Стать гуглером за три шага](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) -- [ ] Prep Courses: - - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. - -- [ ] 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: +- [ ] Подготовительные курсы: + - [ ] [Собеседование инженера-программиста (платный курс)](https://www.udemy.com/software-engineer-interview-unleashed): + - Как самосттоятельно подготовиться с собеседованию на позицию инженера-программиста от бывшего сотрудника Google + +- [ ] Дополнительно (это не рекомендация Google, а моя собственная): + - [ ] [ABC: Программируй всегда](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) + - [ ] [4 шага в Google без образованияв CS](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) + - [ ] [Кодирование на доске](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) + - [ ] [Что думает Google о найме, управлении и культуре](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture) + - [ ] [Эффективное кодирование на доске в процессе собеседования](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) + - [ ] Прохождения собеседования по программированию набор 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/) + - [ ] Как получить работу в большой четверке: + - [ ] ['Как получить работу в большой четверк - Amazon, Facebook, Google & Microsoft' (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) + - [ ] [Ошибки на собеседованиях в Google](http://alexbowe.com/failing-at-google-interviews/) ## Pick One Language for the Interview From 403beb8e705534f09139e2b83c373ab27e3d5024 Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Wed, 4 Jan 2017 20:57:51 +0300 Subject: [PATCH 010/263] Fixed a bug --- translations/README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 851adde..8e180d3 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -37,7 +37,7 @@ - [Получи гугловское настроение](#Получи-гугловское-настроение) - [Получил ли я работу?](#Получил-ли-я-работу) - [Двигайся вместе со мной](#Двигайся-вместе-со-мной) -- [Не переживай о том, что ты не достаточно умный](#Не-переживай-о-том-что-ты-не-достаточно-умный) +- [Не переживайте о том, что вы не достаточно умны](#Не-переживай-о-том-что-ты-не-достаточно-умный) - [О Google](#О-google) - [О видео ресурсах](#О-видео-ресурсах) - [Процесс собеседования & Основное в подготовке к интервью](#Процесс-собеседования-Основное-в-подготовке-к-интервью) From 41694bfbd2703fa636dccf41467bbe47346fcb49 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 6 Jan 2017 00:41:05 +0300 Subject: [PATCH 011/263] Add "Graph" section --- translations/README-ru.md | 107 +++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 8e180d3..1180600 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -892,69 +892,68 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) -## Graphs +## Графы +Графы могут быть использованы для представления многих задач в области CS, поэтому раздел включает в себя такие темы как деревья и сортировку. -Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. +- Заметки от Стива Йеги: + - Существуют три основных способа представления графа в памяти: + - объекты и указатели + - матрица + - список смежности + - Ознакомьтесь с каждым представлением, его преимуществами и недостатками + - BFS и DFS - узнайте их вычислительную сложность, соотношение преимуществ и недостатков, способы реализации в коде + - Когда вы получили задачу, в первую очередь попробуйте построить свое решение с использованием графов, а затем двигайтесь дальше, если такого решения нет. -- 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. +- [ ] Лекции профессора Стивена Скина - хорошее введение: + - [ ] [CSE373 2012 - Лекция 11 - Структуры данных для представления графов (видео)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) + - [ ] [CSE373 2012 - Лекция 12 - Поиск в ширину (видео)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) + - [ ] [CSE373 2012 - Лекция 13 - Алгоритмы на графах (видео)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) + - [ ] [CSE373 2012 - Лекция 14 - Алгоритмы на графах (продолжение) (видео)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Лекция 15 - Алгоритмы на графах (продолжение 2) (видео)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Лекция 16 - Алгоритмы на графах (продолжение 3) (видео)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) -- [ ] 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 Задача поиска кратчайших путей из одной вершины (видео)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Алгоритм Дейкстры (видео)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Алгоритм Беллмана-Форда (видео)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 Оптимизация алгоритма Дейкстры (видео)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) + - [ ] [Aduni: Алгоритмы на графах I: Топологическая сортировка, Минимальное остовное дерево, Алгоритм Прима - Лекция 6 (видео)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Aduni: Алгоритмы на графах II: DFS, BFS, Алгоритм Краскала, Система непересекающихся множеств - Лекция 7 (видео)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni: Алгоритмы на графах III: Кратчайший путь - Лекция 8 (видео)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni: Алгоритмы на графах IV: Введение в геометрические алгоритмы - Лекция 9 (видео)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] [CS 61B 2014 (начиная с 58:09) (видео)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) + - [ ] [CS 61B 2014: Взвешенные графы (видео)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) + - [ ] [Жадные алгоритмы: Минимальное остовное дерево (видео)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Сильно связные компоненты, Алгоритм Косарайю, Алгоритмы на графах (видео)](https://www.youtube.com/watch?v=RpgcYiky7uw) - - [ ] [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) +- Полный курс на Coursera: + - [ ] [Алгоритмы на графах (видео)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) -- 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 +- Стив Йеги: Если у вас есть возможность, попробуйте изучить более продвинутые алгоритмы: + - [ ] Алгоритм Дейкстры - смотри выше - 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) + - [ ] [Алгоритм поиска A](https://en.wikipedia.org/wiki/A*_search_algorithm) + - [ ] [Учебное пособие по основам алгоритма поиска пути A* (видео)](https://www.youtube.com/watch?v=KNXfSOx4eEE) + - [ ] [Поиск пути A* (E01: объяснение алгоритма) (видео)](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 с матрицей смежности + - [ ] Поиск кратчайшего пути из одной вершины (алгоритм Дейкстры) + - [ ] Минимальное остовное дерево + - Алгоритмы основанные на DFS (см видео Aduni выше): + - [ ] Поиск циклов в графе (необходимо для топологической сортировки, так как мы проверяем наличие циклов в графе перед началом работы алгоритма) + - [ ] топологическую сортировку + - [ ] подсчет компонентов связности в графе + - [ ] список сильно связных компонентов + - [ ] проверку графа на двудольность -You'll get more graph practice in Skiena's book (see Books section below) and the interview books +Вы найдете больше практических задач на графах в книге Стивена Скина (см раздел книги ниже) и в книгах о прохождении интервью. ## Even More Knowledge From 68604d5e916455cfc0076da1f82023c2ebb2bb4e Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Fri, 6 Jan 2017 12:23:23 +0300 Subject: [PATCH 012/263] Translated "List of books" --- translations/README-ru.md | 232 +++++++++++++++++++------------------- 1 file changed, 117 insertions(+), 115 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 8e180d3..59945a1 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -41,8 +41,8 @@ - [О Google](#О-google) - [О видео ресурсах](#О-видео-ресурсах) - [Процесс собеседования & Основное в подготовке к интервью](#Процесс-собеседования-Основное-в-подготовке-к-интервью) -- [Выберите один язык для собеседования](#pick-one-language-for-the-interview) -- [Список книг](#book-list) +- [Выберите один язык для собеседования](#Выберите-один-язык-для-собеседования) +- [Список книг](#Список-книг) - [Перед тем как ты начнешь](#before-you-get-started) - [Что еще не охвачено](#what-you-wont-see-covered) - [Необходимые знания](#prerequisite-knowledge) @@ -253,18 +253,18 @@ Google не возьмёт тебя на работу. Их называют MOOCs. Некоторые курсы не имеют круглогодичного доступа и вам нужно подождать несколько месяцев, прежде чем получите к ним доступ. Курсы на Lynda.com платные. - Я был бы вам благодарен за помощь в добавлении бесплатных, всегда доступных публичных ресурсов, таких как видео с YouTube - сопровождающих онлайн курсы. Мне нравяться использовать университетские лекции. + Я был бы вам благодарен за помощь в добавлении бесплатных, всегда доступных публичных ресурсов, таких + как видео с YouTube сопровождающих онлайн курсы. Мне нравяться использовать университетские лекции. ## Процесс собеседования & Основное в подготовке к интервью - [ ] Видео: - [ ] [Как работать в Google: Подготовка к собеседованию на позицию инженера (видео)](https://www.youtube.com/watch?v=ko-KkSmp-Lk) - - [ ] [Как работать в Google: Пример кодированияg/Собеседование инженера (видео)](https://www.youtube.com/watch?v=XKu_SEDAykw) + - [ ] [Как работать в Google: Пример кодирования/Собеседование инженера (видео)](https://www.youtube.com/watch?v=XKu_SEDAykw) - [ ] [Как работать в 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) + - [ ] [Как работать в Google: Подготовка технического резюме (видео)](https://www.youtube.com/watch?v=8npJLXkcmu8) - [ ] Статьи: - [ ] [Стать гуглером за три шага](http://www.google.com/about/careers/lifeatgoogle/hiringprocess/) @@ -275,7 +275,7 @@ Google не возьмёт тебя на работу. - [ ] Подготовительные курсы: - [ ] [Собеседование инженера-программиста (платный курс)](https://www.udemy.com/software-engineer-interview-unleashed): - - Как самосттоятельно подготовиться с собеседованию на позицию инженера-программиста от бывшего сотрудника Google + - Как самостоятельно подготовиться r собеседованию на позицию инженера-программиста от бывшего сотрудника Google - [ ] Дополнительно (это не рекомендация Google, а моя собственная): - [ ] [ABC: Программируй всегда](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) @@ -284,170 +284,172 @@ Google не возьмёт тебя на работу. - [ ] [Что думает Google о найме, управлении и культуре](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture) - [ ] [Эффективное кодирование на доске в процессе собеседования](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - [ ] Прохождения собеседования по программированию набор 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) + - [ ] [Gayle L McDowell - Прохождения собеседования по программированию (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [Прохождения собеседования по программированию с Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ) - [ ] Как получить работу в большой четверке: - - [ ] ['Как получить работу в большой четверк - Amazon, Facebook, Google & Microsoft' (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) + - [ ] ['Как получить работу в большой четверке - Amazon, Facebook, Google & Microsoft' (video)](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. +Вы найдете кое-что по С, С++ и Python ниже, потому-что я еще в процессе обучения. -## Book List +## Список книг -This is a shorter list than what I used. This is abbreviated to save you time. +Это краткий список, того чем я пользовался. Он сокращен, для того что-бы сэкономить ваше время. -### Interview Prep +### Подготовка к собеседованию -- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C++ and Java - - recommended in Google candidate coaching - - this is a good warm-up for Cracking the Coding Interview - - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) -- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java - - recommended on the [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/) - - If you see people reference "The Google Resume", it was a book replaced by "Cracking the Coding Interview". +- [ ] [Собеседование по программированию в подробнастях: Секреты получения твоей следующей работы, 2-е издание](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - ответы на C++ и Java + - рекомендации Google по обучению кандидатов + - это отличная разминка перед подробным разбором собеседования по программированию + - не так уж и сложно, некоторые задачи проще чем вам кажутся на собеседовании (из того что я прочитал) +- [ ] [Разбор собеседования по программированию, 6-е издание](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - ответа на Java + - рекомендована [Google Careers сайт](https://www.google.com/about/careers/how-we-hire/interview/) + - Если вы видели ссылку на "The Google Resume", эта книга заменена "Разбор собеседования по программированию" + ("Cracking the Coding Interview"). -If you have tons of extra time: +Если у вас есть много свободного времени: -- [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - - all code is in C++, very good if you're looking to use C++ in your interview - - a good book on problem solving in general. +- [ ] [Элементы собеседования по программированию](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) + - весь код написан на C++, полезна если вы планируете использовать C++ на собеседовании + - хорошая книга, описывающая решения общих задач. -### Computer Architecture +### Архитектура компьютера -If short on time: +Если мало времени: -- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented HLA, so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - - These chapters are worth the read to give you a nice foundation: - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization +- [ ] [Писать отличный код: Том 1: Понимание компьютера](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - Книга была опубликована в 2004 и отчасти она устарела, но благодаря ей вы быстро поймете как устроены компьютеры. + - Автор придумал HLA, поэтому скептически отнеситесь к примерам и упоминаниям HLA. Широко не используется, но содержит ряд примеров, демострирующих assembler. + - Чтение следующих глав не займет много времени и даст хорошую основу: + - Глава 2 - Представление в числовой форме + - Глава 3 - Двоичная арифметика и битовые операции + - Глава 4 - Представление числа с плавующей запятой + - Глава 5 - Представление символа + - Глава 6 - Организация памяти и доступа + - Глава 7 - Составные типы данных и объекты в памяти + - Глава 9 - Архитектура CPU + - Глава 10 - Набор инструкций + - Глава 11 - Архитектура и организация памяти -If you have more time (I want this book): +Если вы рапологаете свободным временем (я хочу купить эту книгу): -- [ ] [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/) - - For a richer, more up-to-date (2011), but longer treatment +- [ ] [Архитектура компьютера, 5-е издание: Количественный подход](https://www.amazon.com/dp/012383872X/) -### Language Specific +### По языкам программирования -**You need to choose a language for the interview (see above).** Here are my recommendations by language. I don't have resources for all languages. I welcome additions. +**Вам необходимо выбрать один язык для интервью (смотри выше).** Здесь вы найдете мои рекомендации по языкам. У меня нет информации по всем языкам, но если есть у вас - добро пожаловать. -If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. -**You can skip all the video lectures in this project**, unless you'd like a review. +Если вы читали одну из них, то у вас есть достаточно знаний по алгоритмам и структурам данных и вы можете приступить к решению задач по программированию. +**Вы можете пропустить все видео лекции в этом разделе**, если не хотите повторить темы. -[Additional language-specific resources here.](../programming-language-resources.md) +[Дополнительные ресурсы по языкам программирования здесь](../programming-language-resources.md) ### C++ -I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. +Я не читал обе, но они весьма полезны и написаны Седжвиком (Sedgewick). Он отличный автор. -- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) -- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) +- [ ] [Алгоритмы на C++, Части 1-4: Основы, Структуры данных, Сортировка, Поиск](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [Алгоритмы на C++ Часть 5: Алгоритмы графов](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) -If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. +Если вы можете порекоммендовать литературу по C++, которая лучше, сообщите мне об этом. Я ищу лучшие книги. ### Java -- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - videos with book content (and Sedgewick!): - - [Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) - - [Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) +- [ ] [Алгоритмы (Седжвик и Вайн)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - книга с видео контентом (и Седжвик!): + - [Алгоритмы I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) + - [Алгоритмы II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) -OR: +или: -- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - - by Goodrich, Tamassia, Goldwasser - - used as optional text for CS intro course at UC Berkeley - - see my book report on the Python version below. This book covers the same topics. +- [ ] [Структуры данных и алгоритмы на Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - авторы Goodrich, Tamassia, Goldwasser + - используется в Беркли США как опциональный учебник по введению в CS + - смотрите мой отчет по книги по Python ниже. Эта книга содержит те же темы. ### Python -- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - - by Goodrich, Tamassia, Goldwasser - - I loved this book. It covered everything and more. +- [ ] [Структуры данных и алгоритмы на Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - авторы Goodrich, Tamassia, Goldwasser + - Я люблю эту книгу. Она содержит все что нужно и даже больше. - Pythonic code - - my glowing book report: https://googleyasheck.com/book-report-data-structures-and-algorithms-in-python/ + - мой отчет по книге: https://googleyasheck.com/book-report-data-structures-and-algorithms-in-python/ -### Optional Books +### Опциональные книги -**Some people recommend these, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:** +**Некоторые рекомендую эти книги, но я думаю это перебор, если только вы не инженер-программист с большим опытом работы и не ожидаете более сложного собеседования. -- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - To quote Yegge: "More than any other book it helped me understand just how astonishingly commonplace - (and important) graph problems are – they should be part of every working programmer's toolkit. The book also - covers basic data structures and sorting algorithms, which is a nice bonus. But the gold mine is the second half - of the book, which is a sort of encyclopedia of 1-pagers on zillions of useful problems and various ways to solve - them, without too much detail. Almost every 1-pager has a simple picture, making it easy to remember. This is a - great way to learn how to identify hundreds of problem types." - - Can rent it on kindle - - 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) +- [ ] [Руководство по разработке алгоритмов](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - Как обзор и описание проблем + - Некоторые алгоритмы вряд ли попадутся вам на собеседовании. + - Эта книга состоит из 2-х частей: + - классный учебник по структурам данных и алгоритмам + - преимущества: + - отличный учебник, содержащий обзор существующих алгоритмов + - автор описывает реальный опыт решения задач как академических, так и промышленных + - примеры кода написаны на C + - недостатки: + - местами изложение может быть не очевидным и не понятным как в CLRS (Cormen, Leiserson, Rivest, Stein), некоторые темы лучше описаны в CLRS + - главы 7, 8, 9 сложно понять, некоторые вещи плохо разъяснены или требуют больших знаний чем есть у меня + - не поймите меня не правильно: Мне нравиться Skiena, ее стиль и манера изложения, но я не могу стать физически Stony Brook. + - каталог алгоритмов: + - это реальная причина, почему следует купить эту книгу. + - о том как дойти до этой части. Обновлю, когда изучу этот раздел. + - Цитата Йеги: "Больше чем какая-либо другая книга, эта помогла мне понять насколько банальны задачи на графы - они должны + быть в инструментарии каждого программиста. Книга так же включает в себя разбор базовых структур данных и алгоритмов сортировки, + что является приятным бонусом. Но важнейшей частью стала вторая часть книги, которая написана как энциклопедия, описывающая большое + количество различных алгоритмических задач и способов их решения без лишних деталей. Почти каждая страница-описание содержит + изображение, облегчающее запоминание. Это полезный способ, позволяющий запомнить и в последствии идентифицировать сотни + типов задач." + + - Можете ее арендовать + - 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) -- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - To quote Yegge: "But if you want to come into your interviews *prepped*, then consider deferring your application until you've made your way through that book." - - Half.com is a great resource for textbooks at good prices. - - aka CLR, sometimes CLRS, because Stein was late to the game +- [ ] [Введение в алгоритмы](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Важно:** Чтение этой книги будет полезно только для повторения алгоритмов и структур данных. Она не научит вас программировать. + - Цитата Йеги: "Но если вы хотите идти на собеседование, отложите его пока не изучите эту книгу." + - Half.com - отличный ресурс, где можно заказать книги по выгодным ценам. + - известная как CLR, иногда CLRS, потому что Stein опоздал на игру -- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. +- [ ] [Жемчужины программирования](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - В первых двух главах представлены решения задач программирования (в некоторых из них используются устаревшие типы данных), но + это только введение. Это руководство по разработке программ и архитектуре, такое же как Code Complete, но более краткое. -- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ - - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. - - Would rather spend time on coding problems from another book or online coding problems. +- ~~"Алгоритмы и программирование: Проблемы и решения" автор Shen~~ + - Отличная книга, но после разбора нескольких задач написанных на Pascal я разочаровался в его синтаксисе. + - Лучше провести время решая задачи по программированию из других книг или онлайн ресурсов. ## Before you Get Started From 46d54e6e18b4120c64f9e7007f3682b60c180b23 Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Fri, 6 Jan 2017 12:30:44 +0300 Subject: [PATCH 013/263] Change the link of graphs. --- translations/README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index adc4fa4..4582e22 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -69,7 +69,7 @@ - пирамидальная - быстрая - слиянием -- [Графы](#graphs) +- [Графы](#Графы) - ориентированные - неориентированные - матрица смежности From a84bf36485e4774e32f930d5461fcede66ae0880 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 6 Jan 2017 14:50:33 +0300 Subject: [PATCH 014/263] Add " Recursion", "object-oriented-programming" and "design-patterns" sections. --- translations/README-ru.md | 126 +++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 4582e22..ac4c644 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -75,10 +75,10 @@ - матрица смежности - лист смежности - обходы: BFS, DFS -- [Еще больше знаний](#even-more-knowledge) - - [Рекурсия](#recursion) - - [Объектно-ориентированное программирование](#object-oriented-programming) - - [Шаблоны проектирования](#design-patterns) +- [Еще больше знаний](#еще-больше-знаний) + - [Рекурсия](#рекурсия) + - [Объектно-ориентированное программирование](#объектно-ориентированное-программирование) + - [Шаблоны проектирования](#шаблоны-проектирования) - [Комбинаторика & Вероятность](#combinatorics-n-choose-k--probability) - [NP, NP-полные and Аппроксимирующие алгоритмы](#np-np-complete-and-approximation-algorithms) - [Кэш](#caches) @@ -957,68 +957,68 @@ If you need more detail on this subject, see "Sorting" section in [Additional De Вы найдете больше практических задач на графах в книге Стивена Скина (см раздел книги ниже) и в книгах о прохождении интервью. -## 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) +- ### Рекурсия + - [ ] Лекции Стэнфорда по рекурсии и механизмам возврата: + - [ ] [Лекция 8 | Абстракции программирования (видео)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] [Лекция 9 | Абстракции программирования (видео)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) + - [ ] [Лекция 10 | Абстракции программирования (видео)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [Лекция 11 | Абстракции программирования (видео)](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) + - [ ] [Хвостовая рекурсия (видео)](https://www.youtube.com/watch?v=L1jjXGfxozc) -- ### Object-Oriented Programming - - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] Object-Oriented Software Engineering: 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) +- ### Объектно-ориентированное программирование + - [ ] [Дополнительно: Серия уроков по UML 2.0 (видео)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] Объектно-ориентированная разработка программного обеспечения: Разработка программного обеспечения с использованием UML и Java (21 видео): + - Можно пропустить эту часть, если у вас есть хорошее понимание концепции ООП и практик проектирования. + - [ООП: Разработка программного обеспечения с использованием UML и Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] Принципы дизайна ООП (SOLID): + - [ ] [Боб Мартин SOLID принципы объектно-ориентированного программирования и гибкое проектирование (видео)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] [Шаблоны проектирования SOLID в C# (видео)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ) + - [ ] [Принципы SOLID (видео)](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) | [Функции, которые используют ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом](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 минут (видео)](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) -- ### 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) +- ### Шаблоны проектирования + - [ ] [Краткий обзор UML (видео)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) + - [ ] Изучите эти шаблоны: + - [ ] стратегия + - [ ] одиночка + - [ ] адаптер + - [ ] прототип + - [ ] декоратор + - [ ] посетитель + - [ ] фабричный метод, абстрактная фабрика + - [ ] фасад + - [ ] наблюдатель + - [ ] заместитель + - [ ] делегирование + - [ ] команда + - [ ] состояние + - [ ] хранитель + - [ ] итератор + - [ ] компоновщик + - [ ] приспособленец + - [ ] [Глава 6 (Часть 1) - Паттерны (видео)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) + - [ ] [Глава 6 (Часть 2) - Абстрактное представление, Общая иерархия, Актер – Роль, Одиночка, Наблюдатель, Делегирование (видео)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [Глава 6 (Часть 3) - Адаптер, Фасад, Неизменяемый объект, интерфейс типа read-only, Заместитель (видео)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [Серия уроков (27 видео)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) + - [ ] [Паттерны проектирования](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - Я знаю, что классической книгой для изучения паттернов является "Приемы объектно-ориентированного проектирования. Паттерны проектирования" (Джон Влиссидес, Ральф Джонсон, Ричард Хелм, Эрих Гамма), но "Паттерны проектирования" отлично подходят для тех, кто только начал изучать ООП. + - [ ] [Удобный справочник: 101 шаблон проектирования и советы для разработчиков](https://sourcemaking.com/design-patterns-and-tips) - ### Combinatorics (n choose k) & Probability - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) From 1575303aa0c697c3f9618b254bcf4128b0a76b15 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 6 Jan 2017 14:54:55 +0300 Subject: [PATCH 015/263] Fixed a bug --- translations/README-ru.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index ac4c644..486b14b 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -75,10 +75,10 @@ - матрица смежности - лист смежности - обходы: BFS, DFS -- [Еще больше знаний](#еще-больше-знаний) - - [Рекурсия](#рекурсия) - - [Объектно-ориентированное программирование](#объектно-ориентированное-программирование) - - [Шаблоны проектирования](#шаблоны-проектирования) +- [Еще больше знаний](#Еще-больше-знаний) + - [Рекурсия](#Рекурсия) + - [Объектно-ориентированное программирование](#Объектно-ориентированное-программирование) + - [Шаблоны проектирования](#Шаблоны-проектирования) - [Комбинаторика & Вероятность](#combinatorics-n-choose-k--probability) - [NP, NP-полные and Аппроксимирующие алгоритмы](#np-np-complete-and-approximation-algorithms) - [Кэш](#caches) From 767e7147fec4e2139e02fcd41ab5121bc1c15899 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 6 Jan 2017 15:03:27 +0300 Subject: [PATCH 016/263] Fixed a typo --- translations/README-ru.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 486b14b..29d2ce2 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -965,7 +965,7 @@ If you need more detail on this subject, see "Sorting" section in [Additional De - [ ] [Лекция 9 | Абстракции программирования (видео)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) - [ ] [Лекция 10 | Абстракции программирования (видео)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) - [ ] [Лекция 11 | Абстракции программирования (видео)](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) - [ ] [Хвостовая рекурсия (видео)](https://www.youtube.com/watch?v=L1jjXGfxozc) @@ -988,7 +988,7 @@ If you need more detail on this subject, see "Sorting" section in [Additional De - [ ] I - [Принцип разделения интерфейса](http://www.oodesign.com/interface-segregation-principle.html) | Клиенты не должны быть вынуждены реализовывать интерфейсы, которые они не используют - [Принцип разделения интерфейса за 5 минут (видео)](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) | Снизить зависимость в составе объектов. + - [ ] 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) From f0c4df98a21d2ad33aad14e9602462cda977812b Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 6 Jan 2017 15:42:20 +0300 Subject: [PATCH 017/263] Fixed a typo --- translations/README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 29d2ce2..f2fae27 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1014,7 +1014,7 @@ If you need more detail on this subject, see "Sorting" section in [Additional De - [ ] приспособленец - [ ] [Глава 6 (Часть 1) - Паттерны (видео)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) - [ ] [Глава 6 (Часть 2) - Абстрактное представление, Общая иерархия, Актер – Роль, Одиночка, Наблюдатель, Делегирование (видео)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [ ] [Глава 6 (Часть 3) - Адаптер, Фасад, Неизменяемый объект, интерфейс типа read-only, Заместитель (видео)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [Глава 6 (Часть 3) - Адаптер, Фасад, Неизменяемый объект, интерфейс типа read-only, Заместитель (видео)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - [ ] [Серия уроков (27 видео)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) - [ ] [Паттерны проектирования](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) - Я знаю, что классической книгой для изучения паттернов является "Приемы объектно-ориентированного проектирования. Паттерны проектирования" (Джон Влиссидес, Ральф Джонсон, Ричард Хелм, Эрих Гамма), но "Паттерны проектирования" отлично подходят для тех, кто только начал изучать ООП. From 25d125dc5e95ad14d21e3782232db28b636ad117 Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Wed, 11 Jan 2017 13:50:50 +0300 Subject: [PATCH 018/263] Before you Get Started was translated --- translations/README-ru.md | 101 +++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f2fae27..6d36df5 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -43,7 +43,7 @@ - [Процесс собеседования & Основное в подготовке к интервью](#Процесс-собеседования-Основное-в-подготовке-к-интервью) - [Выберите один язык для собеседования](#Выберите-один-язык-для-собеседования) - [Список книг](#Список-книг) -- [Перед тем как ты начнешь](#before-you-get-started) +- [Перед тем как вы начнете](#Перед-тем-как-вы-начнете) - [Что еще не охвачено](#what-you-wont-see-covered) - [Необходимые знания](#prerequisite-knowledge) - [План на день](#the-daily-plan) @@ -452,90 +452,91 @@ Google не возьмёт тебя на работу. - Лучше провести время решая задачи по программированию из других книг или онлайн ресурсов. -## 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. +Я смотрел часами видео делая заметки, но спустя несколько месяцев многое из этого я не помнил. После чего потратил +3 дня разбираясь в своих заметках и делая карточки-напоминания(flashcards), для того что бы потом можно было повторить пройденный материал. -Read please so you won't make my mistakes: +Прочитайте пожалуйста эту статью, что бы не совершать моих ошибок: -[Retaining Computer Science Knowledge](https://googleyasheck.com/retaining-computer-science-knowledge/) +[Как сохранить знания в CS](https://googleyasheck.com/retaining-computer-science-knowledge/) -### 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, wherever 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. +- [Репозиторий сайта Flashcards](https://github.com/jwasham/computer-science-flash-cards) +- [Моя база данных с карточками](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Имейте ввиду, я зделал больше чем требуется в Google, описав все начиная с assembler и заканчивая Python с машиным обучением и статистикой. -**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. +**Заметка о карточках:** в первый раз вы сразу вспомните ответ, но не помечайте эту карточку как изученную. Нужно просмотреть +много раз карточку и ответить правильно прежде чем вы действительно ее запомните. Повторение позволяет мозгу надолго +запомнить материал. -An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. -It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. +В качестве альтернативы вы можете использовать сайт [Anki](http://ankisrs.net/), который мне рекомендовали много раз. Он использует систему повторений для того что бы помочь вам запомнить. +Это ресурс user-friendly, доступен на всех платформах и имеет возможность синхронизации с облаком. На платформе iOS стоит 25$ на других бесплатный. -My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) +Моя база данных в формате Anki: https://ankiweb.net/shared/info/25173560 (спасибо [@xiewenya](https://github.com/xiewenya)) -### 3. Review, review, review +### 3. Повторение, повторение, повторение -I keep a set of cheat sheets 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 are 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 +- JavaScript +- HTML, CSS и другие front-end технологии -## 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. +Каждый день я беру одну тему из списка ниже, смотрю видео на эту тему и программирую, используя пройденный материал: +- C - используя структуры и функции, которые в качестве аргументов принимают указатель на структуру или что-нибудь еще. +- C++ - без использования встроенных типов +- C++ - используя встроенные типы, такие как std::list для связанного списка +- Python - используя встроенные типы (для практики на Python) +- написание тестов для проверки правильности кода, иногда просто используя выражение assert() +- Вы можете программировать на Java или других языках, это только лишь мой выбор. -You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). +Вам не нужны все эти языки для собеседования, нужен только один [один язык для собеседования](#Выберите-один-язык-для-собеседования). -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) +Зачем нужно программировать на нескольких языках: +- Практика, практика, практика пока это не надоедает мне я программирую +- Работа в рамках установленных ограничений (выделение/освобождение памяти без помощи сборщика мусора (кроме Python)) +- Используйте встроенные типы, потому как у меня есть опыт использования встроенных инструментах в реальных проектах (нет смысла в написание своей реализации связанного списка для продакшена) -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 or paper, not a computer. Test with some sample inputs. Then test it out on a computer. +Пишите код на доске или листе бумаги, но не компьютере. Проверяйте на простых входных данных. Затем тестируйте на компьютере. ## Prerequisite Knowledge From 2ca71e00a7363ecb459bc6d3e87ad230ef300084 Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Tue, 25 Apr 2017 15:50:31 +0300 Subject: [PATCH 019/263] =?UTF-8?q?=D0=90=D0=BA=D1=89=D1=8C=20Prerequisite?= =?UTF-8?q?=20Knowledge=20to=20Data=20Structures?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- translations/README-ru.md | 61 +++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 6d36df5..4a43a48 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -538,42 +538,41 @@ Google не возьмёт тебя на работу. Пишите код на доске или листе бумаги, но не компьютере. Проверяйте на простых входных данных. Затем тестируйте на компьютере. -## Prerequisite Knowledge +## Необходимые знания -- [ ] **Learn C** - - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. - - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - This is a short book, but it will give you a great handle on the C language and if you practice it a little - you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - - [answers to questions](https://github.com/lekkas/c-algorithms) +- [ ] **Изучайте C** + - С используется везде. Вы встретите примеры в книгах, лекциях, видео, везде, пока вы будите учиться. + - [ ] [Язык программирования С, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - Это не большая книга, но после ее прочтения вы получите необходимые знания по С и если будите практиковать, + то достаточно быстро его освоите. Понимание С поможет вам понять как программы и память работают. + - [ответы на вопросы](https://github.com/lekkas/c-algorithms) -- [ ] **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 выполняет программы (video)](https://www.youtube.com/watch?v=42KTvGYQYnA) + - [ ] [Коды машинных инструкций(video)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) -## 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) +## Сложность алгоритмов / Big-O / Асимптотический анализ +- ничего не реализовывать +- [ ] [Harvard CS50 - Асимптотическая нотация (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [Big O нотация (основное, короткое руководство) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] [Big O нотация (и Omega и Theta) - лучшее математическое объяснение (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/) + - [видео](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/) +- [ ] [Порядок роста (video)](https://class.coursera.org/algorithmicthink1-004/lecture/59) +- [ ] [Асимптотика (video)](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 (включая рекуррентные соотношений и основную теорему): + - [Вычислительная сложность: Часть 1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) + - [Вычислительная сложность: Часть 2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) +- [ ] [Шпаргалка](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 From c13e60eae24ccfbcdff4f9ffe877c9e0ababadb1 Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Tue, 25 Apr 2017 19:15:48 +0300 Subject: [PATCH 020/263] Data Structures to Linked Lists --- translations/README-ru.md | 70 +++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 4a43a48..521f027 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -565,7 +565,7 @@ Google не возьмёт тебя на работу. - [ ] [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) +- [ ] [Иллюстрация "Big O" (видео)](https://class.coursera.org/algorithmicthink1-004/lecture/63) - [ ] TopCoder (включая рекуррентные соотношений и основную теорему): - [Вычислительная сложность: Часть 1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) - [Вычислительная сложность: Часть 2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) @@ -574,44 +574,44 @@ Google не возьмёт тебя на работу. Если в некоторых лекциях слишком много математики, вы можете ниже найти и посмотреть лекции по дискретной математике для получения базовых знаний. -## Data Structures +## Структуры данных -- ### Arrays - - Implement an automatically resizing vector. - - [ ] Description: - - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [UCBerkley CS61B - Линейные и многомерные массивы (видео)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) + - [Основные массивы (видео)](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.youtube.com/watch?v=1jtrQqYpt7g) + - [Массив массивов (видео)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) + - [Динамические массивы (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) + - [ ] Реализация вектора (изменяемый массив с автоматическим изменением размера): + - [ ] Тренируйтесь программировать используя массивы, указатели и арифметику указателей для перехода к индексу вместо индексации. + - [ ] выделение памяти для массива + - можно выделить память для массива целых чисел, просто не используя его возможности + - начиная с 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 + - [ ] insert(index, item) - вставка элемента по индексу, сдвигает значение по индексу и следующие за ним элементы вправо + - [ ] prepend(item) - может вставить элемент выше индекса 0 + - [ ] pop() - удалить последний элемент, вернуть значение + - [ ] delete(index) - удаляет элемент по индексу, сдвигает все следующие за ним элементы в лево + - [ ] remove(item) - ищет элементы по значению и удаляет их, даже если их несколько + - [ ] find(item) - ищет элемент по значению и возвращает индекс первого найденного элемента, возвращает -1 если ничего не найденно - [ ] 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) + - когда массив полностью заполнен, увеличивает его размер вдвое + - при добавлении элемента, если размер массива 1/4 от общего размера, увеличиваем на половину + - [ ] Время + - O(1) для операций add/remove в конце (амортизируется для размещения большего объема), index, или update + - O(n) для insert/remove в любом месте + - [ ] Работа с памятью + - смежные в памяти, это помогает повысить производительность + - необходимое пространство = (размер массива, который >= n) * размер элемента, но даже если 2n, по прежнему O(n) - ### Linked Lists - [ ] Description: From 551745986a3e2f46284ed7c3d7e89081e133423d Mon Sep 17 00:00:00 2001 From: redmou Date: Wed, 26 Apr 2017 20:14:24 +0300 Subject: [PATCH 021/263] Update README-ru.md --- translations/README-ru.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 521f027..8afbe38 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -201,7 +201,7 @@ Google не возьмёт тебя на работу. ## Получи гугловское настроение -Напечатай знак "[future Googler](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)" и смотри на приз. +Напечатай знак "[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) @@ -613,23 +613,24 @@ Google не возьмёт тебя на работу. - смежные в памяти, это помогает повысить производительность - необходимое пространство = (размер массива, который >= n) * размер элемента, но даже если 2n, по прежнему O(n) -- ### Linked Lists - - [ ] Description: +- ### Связные списки (Linked Lists) + - [ ] Описание: - [ ] [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: + - не все видео целиком, только кусочки об узлах и распределении памяти. + - [ ] Связные списки vs Массивы: - [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 + - [ ] Ага, попался: тебе нужны знания указетелей на указатели: + (для тех случаев, когда ты передаешь указатель функции, которая может менять адрес, куда указывает указатель) + Это страница просто для того, чтобы понять указатели на указатели. Читабельность и обслуживаемость страдает + из-за искусность. + - [Указатели на указатели](https://www.eskimo.com/~scs/cclass/int/sx8.html) + - [ ] воплотить в жизнь (я сделал это с помощью указателя на хвост и без): + - [ ] size() - возвращает количество элементов в листе + - [ ] empty() - bool returnвs 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 From bac49f8c189f4749d04a2ee75b481cce2c97b4a4 Mon Sep 17 00:00:00 2001 From: redmou Date: Wed, 26 Apr 2017 22:04:22 +0300 Subject: [PATCH 022/263] Linked Lists section translation. Little amendment. --- translations/README-ru.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 8afbe38..306030c 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -630,22 +630,23 @@ Google не возьмёт тебя на работу. - [Указатели на указатели](https://www.eskimo.com/~scs/cclass/int/sx8.html) - [ ] воплотить в жизнь (я сделал это с помощью указателя на хвост и без): - [ ] size() - возвращает количество элементов в листе - - [ ] empty() - bool returnвs 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 + - [ ] empty() - возвращет true если список пуст + - [ ] value_at(n) - возращет значение n-го элемента, где 0 - первый элемент + - [ ] push_front(value) - добавляет элемент в начало списка + - [ ] pop_front() - удаляет первый и возращает его значение + - [ ] push_back(value) - добавляет элемент в конец списка + - [ ] pop_back() - удаляет последний и возращает его значение + - [ ] front() - возращает значение первого элемента в списке + - [ ] back() - возращает значение последнего элемента в списке + - [ ] insert(index, value) - помещает значение (value) в элемент по индексу (index), при этом заменяемый элемент + добавлен в список как новый элемент + - [ ] erase(index) - удаляет узел (элемент) по данному индексу + - [ ] value_n_from_end(n) - возращает значение n-го элемента c конца списка + - [ ] reverse() - реверсирует весь список + - [ ] remove_value(value) - удаляет первый элемент в списке с указанным значением (value) + - [ ] Двусвязный список - [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) From 6dd0bf2a4e15f602a214224c7ed07eb5fe6b2904 Mon Sep 17 00:00:00 2001 From: Yuta Kawai Date: Sun, 11 Jun 2017 15:23:26 +0900 Subject: [PATCH 023/263] [add] japanese readme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 日本語のREADMEを追加 --- translations/README-ja.md | 1975 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1975 insertions(+) create mode 100644 translations/README-ja.md diff --git a/translations/README-ja.md b/translations/README-ja.md new file mode 100644 index 0000000..fcd3862 --- /dev/null +++ b/translations/README-ja.md @@ -0,0 +1,1975 @@ +#コーディングインタビュー大学 + +>私はもともとこれをソフトウェアエンジニアになるための短期的な研究テーマのリストとして作成しましたが、 +>しかし、それは今日あなたが見る大きなリストに成長しました。この調査計画を経て、[私は雇われました +> Amazonのソフトウェア開発エンジニアとして](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +>あなたは私のように勉強する必要はないでしょう。とにかく、必要なものはすべてここにあります。 +> +>ここに記載されている項目は、ほぼすべてのソフトウェア会社のインタビューの中で、 +>巨人を含む:Amazon、Facebook、GoogleまたはMicrosoft。 +> +> *あなたに最高の運勢!* + +翻訳: +- [中文版本](翻訳/ README-cn.md) +- [TiếngViệt - ベトナム語](翻訳/ README-vi.md) +- [Español](翻訳/ README-es.md) + +翻訳中: +- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) +- [עברית](https://github.com/jwasham/coding-interview-university/issues/82) +- [インドネシア語](https://github.com/jwasham/coding-interview-university/issues/101) +- [アラビア語](https://github.com/jwasham/coding-interview-university/issues/98) +- [トルコ語](https://github.com/jwasham/coding-interview-university/issues/90) +- [French](https://github.com/jwasham/coding-interview-university/issues/89) +- [ロシア語](https://github.com/jwasham/coding-interview-university/issues/87) +- [ウクライナ](https://github.com/jwasham/coding-interview-university/issues/106) +- [ブラジルのポルトガル語](https://github.com/jwasham/coding-interview-university/issues/113) +- [韓国語](https://github.com/jwasham/coding-interview-university/issues/118) +- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) +- [Polish](https://github.com/jwasham/coding-interview-university/issues/122) +- [ドイツ語](https://github.com/jwasham/coding-interview-university/issues/135) +- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) +- [タイ語](https://github.com/jwasham/coding-interview-university/issues/156) +- [ギリシャ語](https://github.com/jwasham/coding-interview-university/issues/166) +- [Italian](https://github.com/jwasham/coding-interview-university/issues/170) + +## それは何ですか? + +これは、Web開発者(独学で、CS指導なし)から大企業のソフトウェアエンジニアに向かうための私の複数月の学習計画です。 + +![ホワイトボードでのコーディング - HBOのシリコンバレーから](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) + +これは、**新しいソフトウェアエンジニア**または +ソフトウェア/ウェブ開発からソフトウェア工学(コンピュータサイエンスの知識が必要な場合)。あなたが持っている場合 +長年の経験とソフトウェア工学の長年の経験を主張している、より面白いインタビューを期待しています。 + +何年ものソフトウェア/ウェブ開発経験がある場合は、Google、Amazon、 +FacebookとMicrosoftはソフトウェアエンジニアリングをソフトウェア/ Web開発とは異なるものと見ており、コンピュータ科学の知識が必要です。 + +信頼性エンジニアまたはシステムエンジニアになりたい場合は、オプションのリスト(ネットワーク、セキュリティ)から詳細を調べてください。 + +--- + +## 目次 + +- [これはなんで?](何のことなの?) +- (なぜそれを使うの?)(#why-use-it) +- [使い方](#使い方) +- [あなたが十分にスマートではないと感じないでください](十分にスマートではありません) +- [ビデオリソースについて](#about-video-resources) +- [インタビュープロセスと一般インタビューの準備](#インタビュープロセス - 一般インタビュー - 準備) +- [インタビューのための1つの言語を選ぶ](インタビューのために1つの言語を選択する) +- [ブックリスト](#ブックリスト) +- [あなたが始める前に](始める前に#) +- あなたがカバーしていないもの(何があなたには見えません) +- [前提知識](#前提条件知識) +- [日々の計画](日々の計画) +- [アルゴリズムの複雑さ/ Big-O / Asymptotic分析](#アルゴリズム - 複雑 - big-o - 漸近分析) +- [データ構造](#データ構造) + - [配列](#配列) + - [リンクリスト](#リンクリスト) + - [スタック](#スタック) + - [キュー](#キュー) + - [ハッシュテーブル](#ハッシュテーブル) +- [その他の知識](#more-knowledge) + - [バイナリ検索](#バイナリ検索) + - [ビット単位演算](#ビット単位演算) +- [ツリー](#木) + - [ツリー - ノートと背景](#木---ノート - 背景) + - [バイナリ検索ツリー:BST](#binary-search-trees-bsts) + - [ヒープ/優先度キュー/バイナリヒープ](#ヒープ - 優先度キュー - バイナリヒープ) + - バランスの取れた検索ツリー(詳細ではなく一般概念) + - トラバーサル:preorder、inorder、postorder、BFS、DFS +- [ソート](#ソート) + - 選択 + - 挿入 + - heapsort + - クイックソート + - マージソート +- [グラフ](#グラフ) + - 監督 + - 無向 + - 隣接行列 + - 隣接リスト + - トラバーサル:BFS、DFS +- [さらに多くの知識](#偶数知識) + - [再帰](#再帰) + - [動的プログラミング](#動的プログラミング) + - [オブジェクト指向プログラミング](#オブジェクト指向プログラミング) + - [デザインパターン](#デザインパターン) + - [組み合わせ(n choose k)と確率](#combinatorics-n-choose-k - 確率) + - [NP、NP-完全近似アルゴリズム](#np-np-complete-and-approximation-algorithms) + - [キャッシュ](#キャッシュ) + - [プロセスとスレッド](#processes-and-threads) + - [論文](#論文) + - [テスト](#テスト) + - [スケジューリング](#スケジューリング) + - [システムルーチンを実装する](#implement-system-routines) + - [文字列検索と操作](#文字列検索 - 操作) + - [試行](#試行) + - [浮動小数点数](浮動小数点数) + - [Unicode](#ユニコード) + - [エンディアン](#エンディアン) +- [ネットワーキング](#ネットワーキング) +- [システム設計、スケーラビリティ、データ処理](#システム設計 - スケーラビリティデータ処理)(4年以上の経験がある場合) +- [最終審査](#最終審査) +- [コーディング質問練習](#コーディング質問練習) +- [コーディング練習問題/挑戦](#コーディング演習問題) +- [インタビューに近づいたら](インタビューに一度近づいて) +- [あなたの履歴書](あなたの履歴書) +- [インタビューが来たときに考える](インタビューのときに考えている) +- [インタビュアーに質問があります](#面接のための質問があります) +- [一度あなたは仕事を得ました](一度あなたが仕事をしたこと) + +----------------この時点より下のものはすべてオプションです---------------- + +- [追加の書籍](追加の書籍数) +- [追加学習](追加学習) + - [コンパイラ](#コンパイラ) + - [Emacsとvi(m)](#emacs-and-vim) + - [Unixコマンドラインツール](#unix-command-line-tools) + - [情報理論](#情報理論) + - [パリティ&ハミングコード](#パリティ - ハミングコード) + - [Entropy](#エントロピー) + - [暗号化](#暗号化) + - [圧縮](#圧縮) + - [コンピュータセキュリティ](#コンピュータセキュリティ) + - [ガベージコレクション](#ガベージコレクション) + - [パラレルプログラミング](#パラレルプログラミング) + - [メッセージング、シリアライゼーション、キューイングシステム](#メッセージングシリアライゼーションとキューイングシステム) + - [A *](#a) + - [高速フーリエ変換](#高速フーリエ変換) + - [ブルームフィルタ](#ブルームフィルタ) + - [HyperLogLog](#hyperloglog) + - [Locality-Sensitive Hashing](#ローカリティセンシティブハッシング) + - [van Emde Boas Trees](ヴァン・エムード・ボア・ツリー) + - [拡張データ構造](#拡張データ構造) + - [N-ary(k-ary、M-ary)木](#n-ary-k-ary-m-ary-trees) + - [バランス検索木](#バランス検索木) + - AVLツリー + - スプレッドツリー + - レッド/ブラックの木 + - 2-3の検索木 + - 2-3-4樹木(別名2-4木) + - N-ary(K-ary、M-ary)木 + - Bツリー + - [k-D木](#k-d-trees) + - [スキップリスト](#スキップリスト) + - [ネットワークフロー](#ネットワークフロー) + - [分離セットとユニオン検索](#disjoint-sets - union-find) + - [高速処理のための数学](#数学のための高速処理) + - [Treap](#treap) + - [線形計画法](#線形計画法) + - [ジオメトリ、凸包](#ジオメトリ - 凸包) + - [離散数学](離散数学) + - [機械学習](機械学習) +- [いくつかの科目の追加の詳細](#追加の詳細 - いくつかの科目) +- [ビデオシリーズ](#ビデオシリーズ) +- [コンピュータサイエンスコース](#コンピュータサイエンスコース) + +## なぜそれを使用するのですか? + +私がこのプロジェクトを始めたとき、ヒープからスタックを知りませんでした、Big-Oの何か、木のこと、または +グラフを横断する。並べ替えアルゴリズムをコーディングしなければならない場合は、あまりうまくいきませんでした。 +これまで使用してきたすべてのデータ構造は言語に組み込まれており、どのように動作するのか分かりませんでした +ボンネットの下にすべて。私が実行していたプロセスが " +私は人生でいくつかの多次元配列を使いました。 +何千もの連想配列ですが、データ構造を一から作成したことはありません。 + +それは長い計画です。あなたに数ヶ月かかるかもしれません。すでに多くのことに慣れていれば、それほど時間がかかりません。 + +## それの使い方 + +下のすべてがアウトラインです。アイテムを上から下に順番に取り組まなければなりません。 + +私はGithubの特別なマークダウンフレーバーを使用しています。 + +**新しいブランチを作成して、このような項目をチェックできるようにするには、xを角かっこで囲みます:[x] ** + + +    ブランチをフォークし、以下のコマンドに従ってください。 + +`git checkout -b progress` + +`git remote add jwasham https:// github.com / jwasham / coding-interview-university` + +`git fetch --all` + +    変更を完了した後にXですべてのボックスにマークを付ける + +`git add。 ` + +`git commit -m `とマークしたx" + +`git rebase jwasham / master` + +`git push --force` + +[Github風味のマークアップの詳細](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + +##あなたは十分にスマートではないと感じないでください +- 成功したソフトウェアエンジニアはスマートですが、多くの人はスマートではないという不安があります。 +- [Geniusプログラマーの神話](https://www.youtube.com/watch?v=0SARbwvhupQ) +- [独り言に行くのは危険だ:Tech in Invisible Monstersと戦う](https://www.youtube.com/watch?v=1i8ylq4j_EY) +--- + +##ビデオリソースについて + +一部のビデオは、Coursera、EdX、またはLynda.comクラスに登録することによってのみ利用できます。これらはMOOCと呼ばれています。 +時にはクラスがセッションに入っていないので、数ヶ月待つ必要があるため、アクセス権がありません。 Lynda.comコースは無料ではありません。 + +    オンラインコースビデオに付随するYouTubeビデオなど、無料で常時利用可能なパブリックソースを追加することに感謝します。 +    私は大学の講義を使うのが好きです。 + + +##インタビュープロセスと一般インタビュー準備 + +- [ ] [ABC:常にコーディングする](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [ ] [プログラミングインタビュー中の効果的なホワイトボード](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [ ] [Tech Recruitingの謎解き](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] クラッキングコーディングインタビューセット1: + - [ ] [Gayle L McDowell - コーディングインタビュー(ビデオ)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [Gayle Laakmann McDowell(ビデオ)](https://www.youtube.com/watch?v=aClxtDcdpsQ)とのコーディングインタビューをクラッキング +- [ ] ビッグ4で仕事を得る方法: + - [ ] [Amazon、Facebook、Google、Microsoft(ビデオ)](https://www.youtube.com/watch?v=YJZCUhxNCv8)でビッグ4の仕事を手に入れる方法 +- [ ] 準備コース: + - [ ] [Software Engineer Interview Unleashed(有料コース)](https://www.udemy.com/software-engineer-interview-unleashed): + - 以前のGoogleインタビュアーのソフトウェアエンジニアインタビューの準備をする方法を学びます。 + - [ ] [データ構造、アルゴリズム、インタビューのためのPython! (有料コース)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - データ構造、アルゴリズム、模擬インタビューなどを扱うPython中心のインタビューの準備コース。 + +##インタビューのための1つの言語を選ぶ + +インタビューのコーディングの部分に慣れ親しんだ言語を使用することはできますが、大企業にとってはこれらの選択肢が確実です。 + +- C ++ +- Java +- Python + +これらを使用することもできますが、最初に読んでください。注意が必要な場合があります: + +- JavaScript +- Ruby + +あなたは言語に非常に慣れて知識が必要です。 + +選択肢についてもっと読む: +- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ +- http://blog.codingforinterviews.com/best-programming-language-jobs/ + +[言語リソースはこちら](programming-language-resources.md) + +私は学習しているので、以下に含まれるC、C ++、Pythonの学習を見ることができます。いくつかの本があります、下を参照してください。 + +## 予約リスト + +これは私が使ったものよりも短いリストです。これは時間を節約するために省略されています。 + +### インタビュー準備 + +- [ ] [プログラミングインタビュー公開:あなたの次の仕事への秘密、第2版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - C ++とJavaの回答 + - コーディングインタビューをクラッキングするためのウォームアップが良い + - それほど難しくない、ほとんどの問題は、私が読んだことから、あなたがインタビューで見るよりも簡単かもしれません。 +- [ ] [Cracking the Coding Interview、第6版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - Javaでの回答 + +もし余分な時間があれば: + +- [ ] [プログラミングインタビューの要素(C ++版)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] インタビュープログラミングの要素(Java版) + - [本](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [コンパニオンプロジェクト - 本のすべての問題のメソッドスタブとテストケース](https://github.com/gardncl/elements-of-programming-interviews) + +### コンピュータアーキテクチャ + +短い時間: + +- [ ] [グレートコードの作成:第1巻:マシンの理解](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - この本は2004年に出版され、幾分古いですが、コンピュータを簡単に理解するには素晴らしいリソースです。 + - 作者はHLAを発明したので、塩の穀物でHLAの言及と例を取り上げます。広く使われているわけではありませんが、どのようなアセンブリのように見えますか? + - これらの章はあなたに素敵な基礎を与えるために読む価値があります: + - 第2章 - 数値表現 +        第3章2進算術とビット演算 + - 第4章 - 浮動小数点表現 + - 第5章 - キャラクター表現 + - 第6章 - メモリ構成とアクセス +        第7章複合データ型とメモリオブジェクト +        第9章CPUアーキテクチャ + - 第10章命令セットのアーキテクチャ + - 第11章 - メモリのアーキテクチャと構成 + +もっと時間があれば(私はこの本が欲しい): + +- [ ] [Computer Architecture、第5版:定量的アプローチ](https://www.amazon.com/dp/012383872X/) + - より豊かで最新の(2011年)、より長い治療のために + +###言語固有 + +**インタビューの言語を選択する必要があります(上記参照)。** 私はすべての言語のためのリソースがありません。私は追加を歓迎する。 + +これらのうちの1つを読んだら、コーディングの問題を開始するために必要なすべてのデータ構造とアルゴリズムの知識が必要です。 +**あなたがレビューしたいと思わない限り、このプロジェクト**のビデオ講義をすべてスキップすることができます**。 + +[ここに言語固有の追加リソースがあります](programming-language-resources.md) + +### C ++ + +私はこれらの2つを読んだことはありませんが、Sedgewickによって高く評価され書かれています。彼は素晴らしいです。 + +- [ ] [C ++でのアルゴリズム、パート1-4:基礎、データ構造、ソート、検索](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [C ++でのアルゴリズム第5部:グラフアルゴリズム](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +C ++の推奨事項がある場合は、私に知らせてください。包括的なリソースを探しています。 + +### Java + +- [ ] [アルゴリズム(Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - 本のコンテンツを持つビデオ(とSedgewick!): + - [アルゴリズム1](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) + - [アルゴリズムII](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) + +OR: + +- [ ] [Javaにおけるデータ構造とアルゴリズム](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - Goodrich、Tamassia、Goldwasserによる + - UCバークレーのCSイントロコースのオプションテキストとして使用 + - 下のPython版の私の本のレポートを見てください。この本は同じトピックを扱っています。 + +### Python + +- [ ] [Pythonのデータ構造とアルゴリズム](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - Goodrich、Tamassia、Goldwasserによる + - 私はこの本が好きだった。それはすべてをカバーしました。 + - Pythonコード + - 私の輝く本のレポート:https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ + + +###オプションの書籍 + +**何人かはこれをお勧めしますが、何年ものソフトウェアエンジニアリング経験があり、より面白いインタビューを期待している場合を除いて、** + +- [ ] [アルゴリズム設計マニュアル](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202)(Skiena) + - レビューと問題認識として + - アルゴリズムのカタログ部分は、インタビューで得られる難易度の範囲をはるかに超えています。 + - この本は2つの部分を持っています: + - データ構造とアルゴリズムに関する教科書 + - プロ: + - アルゴリズムの教科書はどんなものでも良いレビューです + - 業界および学界の問題を解決した経験から得た素敵な話 + - Cのコード例 + - 短所: + - CLRSと同様に密集しているか、侵入不可能な場合があります。場合によっては、CLRSが一部の被験者にとってより良い選択肢になる可能性があります + - 章7,8,9は、いくつかの項目がうまく説明されていない、または私が持っているよりも多くの脳を必要とするため、追跡しようとすると痛いことがあります + - 私は間違っていない:私はSkiena、彼の教授のスタイル、そしてマタニズムが好きだが、私はストーニーブルックの素材ではないかもしれない。 + - アルゴリズムカタログ: + - これがあなたがこの本を買う本当の理由です。 + - この部分に近づくこと。一度私がそれを通り抜けたら、ここで更新されます。 + - それを光り輝かせることができます + - 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) + +- [ ] [アルゴリズムの紹介](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **重要:** この本の読書は価値が限られています。この本はアルゴリズムとデータ構造の素晴らしいレビューですが、良いコードを書く方法を教えてくれません。まともなソリューションを効率的にコーディングすることができなければなりません。 + - Half.comは、良い価格で教科書のための素晴らしいリソースです。 + - スタインはゲームに遅れていたので、別名CLR、ときにはCLRS + +- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - 章の最初の2つは、プログラミング上の問題(データテープを使用して非常に古くなっているもの) +      それはちょうどイントロです。これはプログラムの設計とアーキテクチャに関するガイドブックです。Code Completeとよく似ていますが、はるかに短いものです。 + +- ~~シェンの "アルゴリズムとプログラミング:問題と解決策"~~ + - 良い本ですが、いくつかのページで問題を解決した後、私はPascalに悩まされ、whileループ、1つのインデックス付き配列、不確実な事後条件の満足度結果を得ました。 + - 別の書籍やオンラインのコーディングの問題からコーディングの問題に時間を費やすことになります。 + + +##あなたが始める前に + +このリストは何ヶ月にもわたって成長しました。 + +ここで私が作ったいくつかの間違いがあります。あなたはより良い経験をするでしょう。 + +### 1.あなたはそれをすべて覚えていない + +私は数時間のビデオを見て、豊富なメモを取りました。そして数ヶ月後に私は覚えていないほどでした。私は3日間過ごした +私のメモとフラッシュカードを作って見直すことができました。 + +あなたが私の間違いをしないように読んでください: + +[コンピュータ科学知識の保持](https://startupnextdoor.com/retaining-computer-science-knowledge/) + +### 2.フラッシュカードを使用する + +この問題を解決するために、私は2種類のフラッシュカード、一般とコードを追加できる小さなフラッシュカードサイトを作った。 +各カードのフォーマットは異なります。 + +私はモバイル先のウェブサイトを作ったので、どこにいても電話とタブレットを見直すことができました。 + +あなた自身を無料で作る: + +- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) +- [マイフラッシュカードデータベース(旧1200カード)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): +- [マイフラッシュカードデータベース(新1800カード)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db): + +私は船外に出て、アセンブリ言語やPythonのトリビアからマシンの学習や統計に至るまですべてのカードをカバーしています。何が必要なのかはあまりにも大変です。 + +**フラッシュカードについての注意:** あなたが最初に答えを知っているときは、知らないようにしてください。あなたは +あなたが本当にそれを知る前に、同じカードを数回正しく答えてください。繰り返しは、その知識を深く +あなたの脳。 + +私のフラッシュカードサイトを使用する代わりに[Anki](http://ankisrs.net/)が何度も私に勧められています。繰り返しシステムを使用して覚えやすくなります。 +ユーザーフレンドリーで、すべてのプラットフォームで利用でき、クラウドシンクシステムを備えています。 iOSでは25ドル、他のプラットフォームでは無料です。 + +Ankiフォーマットの私のフラッシュカードデータベース:https://ankiweb.net/shared/info/25173560(thanks [@xiewenya](https://github.com/xiewenya)) + + +### 3.レビュー、レビュー、評価 + +私は、ASCII、OSIスタック、Big-O表記などのチートシートを用意しています。私は余裕があるときに勉強します。 + +プログラミングの問題から30分ほど休み、フラッシュカードを通過してください。 + +### 4.フォーカス + +貴重な時間を費やす可能性のある注意散漫がたくさんあります。集中と集中が難しい。 + +##カバーされていないもの + +これらは一般的な技術ですが、この調査計画の一部ではありません: + +- SQL +- Javascript +- HTML、CSS、およびその他のフロントエンド技術 + +##日々の計画 + +一部の被験者は1日を要し、いくつかは複数日を要する。いくつかは、何も実装することなく学習しているだけです。 + +毎日私は以下のリストから1つのテーマを取り上げ、そのテーマに関するビデオを見て、以下の実装を書いています: +- C - structと他のものをargsとする構造体と関数を使う。 +- C ++ - 組み込み型を使用しない +- C + + - リンクリストのSTLのstd :: listのような組込み型の使用 +- Python - 組み込み型を使用する(Pythonの練習を続ける) +私は正しいことをするためのテストを書いています。単純なassert()文を使って +- あなたはJavaや他の何かをするかもしれませんが、これは私のことです。 + +あなたはこれらのすべてを必要としません。あなたは[インタビューのための1つの言語]だけが必要です(インタビューのための1つの言語を選択します)。 + +なぜこれらすべてのコード? +- 私はそれが病気になるまで、練習、練習、練習、そして何も問題なく行うことができます(いくつかは覚えておくべき多くのエッジケースと簿記の詳細があります) +- 生の制約内で作業する(ガベージコレクションの助けを借りずにメモリを割り当てる/解放する(Pythonを除く)) +- 組み込み型を利用するので、組み込みのツールを実世界で使用する経験があります(実稼働環境で自分のリンクリストの実装を作成するつもりはありません) + +私はすべてのテーマでこれらのすべてをやる時間がないかもしれませんが、私は試してみます。 + +あなたは私のコードをここに見ることができます: +- [C](https://github.com/jwasham/practice-c) +- [C ++](https://github.com/jwasham/practice-cpp) +- [Python](https://github.com/jwasham/practice-python) + +あなたはすべてのアルゴリズムの勇気を暗記する必要はありません。 + +コンピューターではなく、ホワイトボードや紙にコードを書く。いくつかのサンプル入力でテストします。次に、コンピュータでテストします。 + +##前提知識 + +- [ ] **Learn C** + - Cはどこにでもあります。あなたは勉強している間、書籍、講義、ビデオ、*どこでも*の例を見ることができます。 + - [ ] [Cプログラミング言語、Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - これは短い本ですが、C言語の優れた処理方法を提供し、少しでも練習すれば +            あなたはすぐに熟練を得るでしょう。 Cを理解すると、プログラムやメモリの仕組みを理解するのに役立ちます。 + - [質問への回答](https://github.com/lekkas/c-algorithms) + +- [ ] **コンピュータがプログラムをどのように処理するか:** + - [ ] [CPUがプログラム(ビデオ)をどのように実行するか](https://www.youtube.com/watch?v=42KTvGYQYnA) + - [ ] [機械コード命令(ビデオ)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) + +##アルゴリズムの複雑さ/ Big-O / Asymptotic解析 +- 何もしない +- [ ] [Harvard CS50 - Asymptotic Notation(video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [ビッグO記法(一般的なクイックチュートリアル)(ビデオ)](https://www.youtube.com/watch?v=V6mKVRU1evU) +ビッグO表記(とオメガとシータ) - 最良の数学的説明(ビデオ)(https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] スキナ: + - [動画](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/) +- [ ] [成長の命令(ビデオ)](https://class.coursera.org/algorithmicthink1-004/lecture/59) +- [ ] [Asymptotics(video)](https://class.coursera.org/algorithmicthink1-004/lecture/61) +- [ ] [UCバークレービッグO(ビデオ)](https://youtu.be/VIS4YDpuP98) +- [ ] [UCバークレービッグオメガ(ビデオ)](https://youtu.be/ca3e7UVmeUc) +- [ ] [償却分析(ビデオ)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [「Big O」(ビデオ)を説明する](https://class.coursera.org/algorithmicthink1-004/lecture/63) +- [ ] TopCoder(漸化関係とマスター定理を含む): + - [計算の複雑さ:セクション1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) + - [計算の複雑さ:セクション2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) +- [ ] [チートシート](http://bigocheatsheet.com/) + + +    講義の中には数学的にも余裕がある場合は、下にジャンプして +    離散数学ビデオを見て、バックグラウンドの知識を得る。 + +## データ構造 + +- ###配列 + - 自動的にサイズ変更ベクトルを実装する。 + - [ ] 説明: + - [アレイ(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UCBerkley CS61B - 線形および多次元アレイ(ビデオ)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) + - [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) + - [ダイナミックアレイ(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [ギザギザアレイ(動画)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [ギザギザアレイ(ビデオ)](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) - 指定されたインデックスでitemを返し、インデックスが範囲外であれば吹き飛ばす + - [ ] プッシュ(項目) + - [ ] insert(index、item) - itemをindexに挿入し、そのインデックスの値と末尾の要素を右側にシフトする + - [ ] prepend(item) - インデックス0に上記の挿入を使用できます + - [ ] pop() - 最後から削除し、値を返す + - [ ] delete(index) - インデックスの項目を削除し、すべての末尾の要素を左にシフトする + - [ ] remove(item) - 値を探し、それを保持するインデックスを削除します(複数の場所であっても) + - [ ] find(item) - valueを検索し、その値を持つ最初のインデックスを返します。見つからなければ-1を返します。 + - [ ] resize(new_capacity)//プライベート関数 + - 容量に達すると、サイズを2倍に変更します + - アイテムをポップするとき、サイズが容量の1/4である場合、サイズを半分に変更 + - [ ] 時間 + - 最後に追加/削除するO(1)(スペースを増やすために償却される)、索引、または更新 + - 他の場所に挿入/削除するO(n) +    - [ ] スペース + - メモリ内で連続しているため、プロキシミティがパフォーマンスに役立ちます + - 必要なスペース=(配列の容量は> = n)*アイテムのサイズですが、2nでもO(n) + +- ###リンクリスト + - [ ] 説明: + - [ ] [単独リンクされたリスト(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - リンクリスト1(動画)](https://www.youtube.com/watch?v=htzJdKoEmO0&list=PL4BBB74C7D2A1049C&index=7) + - [ ] [CS 61B - リンクリスト2(動画)](https://www.youtube.com/watch?v=-c4I3gFYe3w&index=8&list=PL4BBB74C7D2A1049C) + - [ ] [Cコード(動画)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) +            ビデオ全体ではなく、Node構造体とメモリ割り当てに関する部分だけです。 + - [ ] リンクリストと配列: + - [Core Linked Lists Vs Arrays(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) + - [Real World Linked Lists Vs Arrays(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/quaUd/in-the-real-world-lists-vs)アレー) + - [ ] [なぜあなたはリンクされたリスト(ビデオ)を避けるべきですか](https://www.youtube.com/watch?v=YQs6IC-vgmo) + - [ ] Gotcha:ポインタの知識へのポインタが必要です: +        (そのポインタが指すアドレスを変更する可能性のある関数へのポインタを渡すとき) +        このページはptrからptrまでを把握するためのものです。このリストトラバーサルスタイルはお勧めしません。読みやすさと保守性は巧みさのために苦しんでいます。 + - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) + - [ ] 実装する(私はテールポインタ&なしで行った): + - [ ] size() - リスト内のデータ要素の数を返す + - [ ] empty() - 空の場合はboolを返します + - [ ] value_at(index) - n番目の項目の値を返します(最初は0から始まります) + - [ ] push_front(value) - リストの先頭に項目を追加します + - [ ] pop_front() - 前面アイテムを削除してその値を返します + - [ ] push_back(値) - 最後に項目を追加する + - [ ] pop_back() - 終了アイテムを削除し、その値を返します + - [ ] front() - フロントアイテムの値を取得する + - [ ] back() - 終了項目の値を取得する + - [ ] insert(index、value) - インデックスに値を挿入するので、そのインデックスの現在のアイテムはインデックスの新しいアイテムによってポイントされます + - [ ] 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) + - [ ] [スタックを先入れ先出しで使用する(ビデオ)](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) + - [ ] [Queue(video)](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) + - [ ] テールポインタ付きリンクリストを使って実装する: + - エンキュー(値) - テールの位置に値を追加する + - dequeue() - 値を返し、最近追加された要素のうち少なくとも最近削除されたもの(前面) +        - 空の() + - [ ] 固定長配列を使って実装する: + - エンキュー(値) - 利用可能なストレージの最後にアイテムを追加する + - dequeue() - 値を返し、最近追加された要素のうち最も古い要素を削除します +        - 空の() + - full() + - [ ] コスト: +        あなたが頭にエンキューし、テールでデキューするリンクリストを使った悪い実装はO(n) +            あなたが最後の要素の次の要素を必要とするため、各デキューを完全にトラバースさせるためです + - エンキュー:O(1)(償却、リンクリストと配列[プロービング]) + - デキュー:O(1)(リンクされたリストと配列) + - 空:O(1)(リンクリストと配列) + +- ### ハッシュ表 + - [ ] 動画: + - [ ] [連鎖によるハッシング(動画)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) + - [ ] [テーブルダブリング、Karp-Rabin(ビデオ)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [公開アドレス指定、暗号化ハッシング(動画)](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(ビデオ)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(高度)パーフェクトハッシング(動画)](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) + - [ ] [ハッシングをサポートする(ビデオ)](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) + - [ ] [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) + - [ ] [電話帳の問題(ビデオ)](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) - キーがすでに存在する場合は、値を更新します。 + - 存在する(キー) + - get(key) + - 削除(キー) + +##その他の知識 + +- ###バイナリ検索 + - [ ] [バイナリ検索(動画)](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/) + - [ ] 実装: + - バイナリ検索(ソートされた整数の配列) + - 再帰を使用したバイナリ検索 + +- ###ビット演算 + - [ ] [ビットチートシート](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - (2 ^ 1から2 ^ 16および2 ^ 32までの2の累乗) + - [ ] &、|、^、〜、>>、<<を使ってビットを操作することについての本当の理解を得る + - [ ] [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/) + - [ ] [ビットツイダーインタラクティブ](http://bits.stephan-brumme.com/interactive.html) + - [ ] 2と1の補数 + - [バイナリ:Plusses&Minuses(なぜ2の補数を使うのか)(ビデオ)](https://www.youtube.com/watch?v=lKTsv6iVxV4) + - [1s補完](https://en.wikipedia.org/wiki/Ones%27_complement) + - [2s補完](https://en.wikipedia.org/wiki/Two%27s_complement) + - [ ] カウントセットビット + - [1バイトのビットを数える4つの方法(ビデオ)](https://youtu.be/Hzuzo9NJrlc) + - [カウントビット数](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) + - [32ビット整数で設定されたビット数を数える方法](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32ビット整数) + - [ ] 2の次の累乗に丸めます: + - [2つの次のパワーに回す](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) + - [ ] スワップ値: + - [Swap](http://bits.stephan-brumme.com/swap.html) +    - [ ] 絶対値: + - [絶対整数](http://bits.stephan-brumme.com/absInteger.html) + +## 木 + +- ###木 - ノートと背景 + - [ ] [シリーズ: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) + - 基本的な木の構築 + - トラバーサル + - 操作アルゴリズム + - BFS(幅優先検索) + - [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(深さ優先探索) + - [MIT(動画)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) +        - ノート: +            時間複雑度:O(n) +            スペースの複雑さ: +                最良:O(log n) - 平均。木の高さ +                最悪:O(n) + - インオーダー(DFS:left、self、right) + - ポストオーダー(DFS:left、right、self) + - プレオーダー(DFS:自己、左、右) + +- ###バイナリ検索ツリー:BST + - [ ] [バイナリ検索ツリーレビュー(動画)](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 ++: + - [ ] [バイナリ検索ツリー - 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) + - [ ] [バイナリツリートラバーサル:Preorder、Inorder、Postorder(video)](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) + - [ ] [バイナリ検索ツリー(ビデオ)のInorder Successor](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] 実装: + - [ ] insert //ツリーに値を挿入する + - [ ] get_node_count //格納された値の数を取得する + - [ ] print_values //最小値から最大値までツリーの値を出力します + - [ ] delete_tree + - [ ] is_in_tree //与えられた値がツリーに存在する場合はtrueを返します + - [ ] get_height //ノードの高さを返します(単一ノードの高さは1です) + - [ ] get_min //ツリーに格納されている最小値を返します + - [ ] get_max //ツリーに格納されている最大値を返します + - [ ] is_binary_search_tree + - [ ] delete_value + - [ ] get_successor //指定された値の後にツリーの次に高い値を返し、存在しなければ-1を返します + +- ###ヒープ/プライオリティキュー/バイナリヒープ + - ツリーとして可視化されますが、通常はストレージ内で線形です(配列、リンクリスト) + - [ ] [ヒープ](https://en.wikipedia.org/wiki/Heap_(data_structure)) + - [ ] [はじめに(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) + - [ ] [Naive Implementations(video)](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講義24:優先度キュー(ビデオ)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) + - [ ] [Linear Time BuildHeap(max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] 最大ヒープを実装する: + - [ ] 挿入 + - [ ] sift_up - 挿入に必要 + - [ ] get_max - 最大項目を削除せずに返します + - [ ] get_size() - 格納された要素の数を返す + - [ ] is_empty() - ヒープに要素が含まれていない場合はtrueを返します。 + - [ ] extract_max - 最大アイテムを返し、それを削除します。 + - [ ] sift_down - extract_maxに必要です + - [ ] remove(i) - インデックスxのアイテムを削除する + - [ ] heapify - heap_sortに必要な要素の配列からヒープを作成する + - [ ] heap_sort() - ソートされていない配列を取り出し、最大ヒープを使用してソート済みの配列に変換します + - 注意:代わりにminヒープを使用すると、操作が節約されますが、必要な領域が2倍になります(インプレースでは実行できません)。 + +##並べ替え + +- [ ] ノート: + - ソートを実装し、最良のケース/最悪のケース、それぞれの平均的な複雑さを知る: + - バブルソートなし - ひどい - O(n ^ 2)、ただしn <= 16の場合を除く + - ソートアルゴリズムの安定性( "Quicksortは安定していますか?") + - [ソートアルゴリズムの安定性](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) + - [ソーティングアルゴリズムの安定性](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/) + +- ヒープソートについては、上記のヒープデータ構造を参照してください。ヒープソートは素晴らしいですが、安定していません。 + +- [ ] [Sedgewick - Mergesort(5ビデオ)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [1。 Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) + - [ ] [2。 Mergesortボトムアップ](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) + - [ ] [3。複雑さの並べ替え](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [4。コンパレータ](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [5。安定性](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + +- [ ] [Sedgewick - Quicksort(4ビデオ)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [1。 Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [2。選択](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [3。 Duplicate Keys](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [4。システムソート](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + +- [ ] UCバークレー: + - [ ] [CS 61B講義29:ソートI(ビデオ)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29) + - [ ] [CS 61B講義30:ソートII(ビデオ)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30) + - [ ] [CS 61B講義32:ソートIII(ビデオ)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C) + - [ ] [CS 61B講義33:ソートV(ビデオ)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C) + +- [ ] [バブルソート(動画)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [バブルソートの分析(動画)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [挿入ソート、マージソート(動画)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [挿入順(動画)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [マージソート(動画)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [クイックソート(動画)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [選択ソート(動画)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) + +- [ ] マージソートコード: + - [ ] [出力配列(C)の使用](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [出力配列(Python)を使う](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [インプレース(C ++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] クイックソートコード: + - [ ] [Implementation(C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [実装(C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [実装(Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + +- [ ] 実装: + - [ ] Mergesort:O(n log n)平均と最悪の場合 + - [ ] Quicksort O(n log n)平均の場合 + - 選択ソートと挿入ソートは両方ともO(n ^ 2)の平均と最悪の場合です + - ヒープソートについては、上記のヒープデータ構造を参照してください。 + +- [ ] 必須ではありませんが、私はそれらをお勧めしました: + - [ ] [Sedgewick - Radix Sorts(6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [1。 Javaの文字列](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) + - [ ] [2。 Key Indexed Counting](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) + - [ ] [3。最下位桁の最初の文字列の基数ソート](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) + - [ ] [4。最も重要な数字の最初の文字列の基数ソート](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [5。 3 Way Radix Quicksort](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [6。接尾辞配列](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1) + - [ ] [基数ソート](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) + - [ ] [基数ソート(動画)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [基数ソート、ソート(線形時間指定の制約)(ビデオ)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [無作為化:Matrix Multiply、Quicksort、Freivaldsのアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [線形時間で並べ替える(ビデオ)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) + +要約すると、[15ソートアルゴリズム](https://www.youtube.com/watch?v=kPRA0W1kECg)の視覚的表現です。 +このテーマの詳細が必要な場合は、[いくつかの科目の追加の詳細]の[ソート]の項を参照してください(#additional-detail-on-some-subjects) + +##グラフ + +グラフはコンピュータサイエンスの多くの問題を表現するために使用することができるので、このセクションは木やソートのように長いです。 + +- ノート: + - メモリにグラフを表示するには4つの基本的な方法があります: + - オブジェクトとポインタ + - 隣接行列 + - 隣接リスト + - 隣接地図 + - 各表現とその長所と短所をよく知っている + - BFSとDFS - 計算の複雑さとそのトレードオフ、そしてそれらを実際のコードに実装する方法を知っている + - 質問が表示されたら、まずグラフベースのソリューションを探し、見つからない場合は次に進みます。 + +- [ ] Skiena Lectures - 素晴らしいイントロ: + - [ ] [CSE373 2012 - 講義11 - グラフデータ構造(ビデオ)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) + - [ ] [CSE373 2012 - 講義12 - 幅優先検索(ビデオ)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) + - [ ] [CSE373 2012 - 講義13 - グラフアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) + - [ ] [CSE373 2012 - 講義14 - グラフアルゴリズム(ビデオ)(ビデオ)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 講義15 - グラフアルゴリズム(動画2)(ビデオ)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 講義16 - グラフアルゴリズム(コンター3)(ビデオ)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + +- [ ] グラフ(レビューなど): + + - [ ] [6.006シングルソース最短経路問題(ビデオ)](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のスピードアップ(ビデオ)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) +    グラフアルゴリズムI - トポロジカルソート、最小スパニングツリー、プリムのアルゴリズム - 講演6(ビデオ)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [Aduni:グラフアルゴリズムII - DFS、BFS、Kruskalのアルゴリズム、連合探索データ構造 - 講義7(ビデオ)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7 ) + - [Aduni:グラフアルゴリズムIII:最短経路 - レクチャー8(ビデオ)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni:Graph Alg。 IV:幾何学アルゴリズムの紹介 - 第9講(ビデオ)(https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] [CS 61B 2014(58:09から開始)(ビデオ)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) + - [ ] [CS 61B 2014:加重グラフ(ビデオ)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) + - [ ] [欲張りアルゴリズム:最小スパニングツリー(ビデオ)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [強固に接続されたコサラジュのアルゴリズムグラフアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=RpgcYiky7uw) + +- フルコースラコース: + - [ ] [グラフ上のアルゴリズム(ビデオ)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) + +- 私は実装します: + - [ ] 隣接リストを持つDFS(再帰的) + - [ ] 隣接リストを持つDFS(スタックで反復) + - [ ] 隣接行列を持つDFS(再帰的) + - [ ] 隣接行列を持つDFS(スタックで反復) +    隣接リストを持つ - [ ] BFS +    隣接行列を持つ[ - ] BFS + - [ ] 単一ソースの最短経路(ダイクストラ) + - [ ] 最小スパニングツリー + - DFSベースのアルゴリズム(上記のAduniの動画を参照): + - [ ] サイクルをチェックする(トポロジカルソートに必要、開始前にサイクルをチェックするので) + - [ ] トポロジカルソート + - [ ] グラフ内の接続されたコンポーネントをカウントする + - [ ] 強く接続されたコンポーネントを一覧表示する + - [ ] 二部グラフをチェックする + +Skienaの本(下記の書籍の節を参照)とインタビューの書籍 + +##さらに多くの知識 + +- ###再帰 + - [ ] スタンフォードは再帰とバックトラックに関する講義を行います: + - [ ] [講義8 |プログラミング抽象概念(ビデオ)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] [講義9 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) + - [ ] [講義10 |プログラミング抽象概念(ビデオ)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [講義11 |プログラミング抽象概念(ビデオ)](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) + - [ ] [テール再帰(ビデオ)](https://www.youtube.com/watch?v=L1jjXGfxozc) + +- ###動的プログラミング + - この問題はかなり難しいかもしれません。なぜなら、各DPの可溶性問題は再帰関係として定義されなければならず、それを思い付くのは難しいかもしれないからです。 + - DPの問題の多くの例を見て、あなたが関連するパターンをしっかりと理解するまでお勧めします。 + - [ ] 動画: + - Skienaのビデオは、時には見ることができないほど小さすぎるホワイトボードを使用することがあるため、フォローするのが難しい場合があります + - [ ] [Skiena:CSE373 2012 - 講義19 - 動的プログラミング入門(ビデオ)(https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) + - [ ] [Skiena:CSE373 2012 - 講義20 - 編集距離(ビデオ)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) + - [ ] [Skiena:CSE373 2012 - 講義21 - 動的プログラミング例(ビデオ)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena:CSE373 2012 - 講義22 - 動的プログラミング(ビデオ)のアプリケーション](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [Simonson:Dynamic Programming 0(59:18から開始)(ビデオ)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson:ダイナミックプログラミングI - 講義11(ビデオ)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson:Dynamic Programming II - 講演12(ビデオ)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] 個々のDP問題のリスト(それぞれ短い): +            [動的プログラミング(動画)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + - [ ] Yale講義ノート: + - [ ] [動的プログラミング](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicプログラミング) + - [ ] Coursera: + - [ ] [RNA二次構造の問題(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) + - [ ] [動的プログラミングアルゴリズム(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) + - [ ] [DPアルゴリズム(ビデオ)の説明](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [DPアルゴリズムの実行時間(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) +        [[DP対再帰的実装(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) + - [ ] [グローバル対配列アライメント(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) + - [ ] [ローカル対配列アライメント(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) + +- ### オブジェクト指向プログラミング + - [ ] [オプション:UML 2.0シリーズ(動画)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] オブジェクト指向ソフトウェアエンジニアリング:UMLとJavaを使ったソフトウェア開発(21ビデオ): + - OOおよびOO設計の実践を十分に把握している場合は、これをスキップできます。 + - [OOSE:UMLとJavaを使用したソフトウェア開発](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] SOLID OOP原則: + - [ ] [Bob Martin SOLIDオブジェクト指向とアジャイルデザインの原則(ビデオ)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] [ソリッド原則(ビデオ)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + - [ ] S - [Single Responsibility Principle](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 - [Open / Closed Principal](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 - [Liskov Substitution Principal](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=ja) + - [ ] I - [インタフェース分離原理](http://www.oodesign.com/interface-segregation-principle.html)|クライアントは、使用しないインタフェースを強制的に実装するべきではありません + - [インタフェース分離原理5分(ビデオ)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) + - [もっと味](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=ja) + - [ ] D - [Dependency Inversion principle](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=ja) + +- ### デザインパターン + - [ ] [クイックUMLレビュー(ビデオ)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) + - [ ] これらのパターンを学ぶ: + - [ ] 戦略 + - [ ] シングルトン + - [ ] アダプタ + - [ ] プロトタイプ + - [ ] デコレータ + - [ ] 訪問者 + - [ ] 工場、抽象工場 + - [ ] ファサード + - [ ] 観察者 + - [ ] プロキシ + - [ ] 委任 + - [ ] コマンド + - [ ] 状態 + - [ ] 記念品 + - [ ] イテレータ + - [ ] コンポジット + - [ ] フライウェイト + - [ ] [第6章(パート1) - パターン(ビデオ)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) + - 抽象化 - 発生、一般階層、プレーヤー役割、シングルトン、オブザーバー、代表団(ビデオ)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index= 12&リスト= PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [第6章(パート3) - アダプタ、ファサード、変更不可、読み取り専用インターフェイス、プロキシ(ビデオ)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [一連の動画(27ビデオ)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) + - [ ] [ヘッドファーストデザインパターン](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - 正式な本は「デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素」であることは分かっていますが、ヘッドファーストはOOの初心者には最適です。 + - [ ] [参考:101のデザインパターンとヒント(開発者向け)](https://sourcemaking.com/design-patterns-and-tips) + - [ ] [人間のデザインパターン](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) + + +- ###コンビナトリアル(nをkとする)と確率 + - [ ] [数学のスキル:ファクター、パーミュテーション、コンビネーションの検索方法(選択)(ビデオ)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) + - [ ] [学校を作る:確率(ビデオ)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) + - [ ] [学校を作る:確率とマルコフ連鎖(ビデオ)](https://www.youtube.com/watch?v=dNaJg-mLobQ) + - [ ] Khan Academy: + - コースのレイアウト: + - [ ] [基本理論的確率](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) + - ちょうどビデオ - 41(それぞれ単純で、それぞれ短いです): + - [ ] [確率説明(ビデオ)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) +- ### NP、NP-完全近似アルゴリズム + - 旅行者のセールスマンやナップザックの問題など、NP完全問題の最も有名なクラスについて知っています。 +        面接官があなたに偽装して尋ねると、それらを認識することができます。 + - NP完成の意味を知る。 + - [ ] [計算上の複雑さ(ビデオ)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) + - [ ] Simonson: + - [ ] [Greedy Algs。 II&NP完全性へのイントロ(ビデオ)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [NP完全性II&リダクション(ビデオ)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP完全性III(ビデオ)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP完全性IV(ビデオ)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) + - [ ] スキナ: + - [ ] [CSE373 2012 - 講義23 - NP完全性入門(ビデオ)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - 講義24 - NP完全性証明(ビデオ)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 講演25 - NP完全性挑戦(ビデオ)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [複雑さ:P、NP、NP完全性、リダクション(ビデオ)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [複雑さ:近似アルゴリズム(ビデオ)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) + - [ ] [複雑さ:固定パラメータアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - ピーター・ノヴィグ(Peter Norvig)は、セールスマンの問題を解決するために最適なソリューションについて議論しています。 + - [ジュピターノート](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) + - あなたが持っているなら、CLRSの1048 - 1140ページ。 + +- ###キャッシュ + - [ ] LRUキャッシュ: + - [ ] [LRUキャッシュの魔法(100日間のGoogle Dev)(ビデオ)](https://www.youtube.com/watch?v=R5ON3iwx78M) + - [ ] [LRU(ビデオ)の実装](https://www.youtube.com/watch?v=bq6N7Ym81iI) + - [ ] [LeetCode - 146 LRU Cache(C ++)(video)](https://www.youtube.com/watch?v=8-FZRAjR7qU) + - [ ] CPUキャッシュ: + - [ ] [MIT 6.004 L15:メモリ階層(ビデオ)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) + - [ ] [MIT 6.004 L16:キャッシュの問題(動画)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) + +- ###プロセスとスレッド + - [ ] コンピュータサイエンス162 - オペレーティングシステム(25ビデオ): + - プロセスとスレッド用 + - [オペレーティングシステムとシステムプログラミング(ビデオ)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [プロセスとスレッドの違いは何ですか?](https://www.quora.com/What-is-the-difference-between-a-process-and-thread) + - カバー: + - プロセス、スレッド、並行性の問題 + - プロセスとスレッドの違い + - プロセス + - スレッド + - ロック + - mutexes + - セマフォー + - モニター + - 彼らはどのように動作する + - デッドロック + - ライブロック + - CPUの動作、割り込み、コンテキストの切り替え + - マルチコアプロセッサを使用した最新の並行性構成 + - [ページング、セグメンテーション、仮想メモリ(動画)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [割り込み(動画)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - [スケジュール設定(動画)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) + - プロセスリソースのニーズ(メモリ:コード、静的ストレージ、スタック、ヒープ、ファイル記述子、I / O) + - スレッドリソースの必要性(同じプロセス内の他のスレッドとの上の(マイナススタック)の共有、それぞれが独自のpc、スタックカウンタ、レジスタ、およびスタックを持つ) + - フォークは、新しいプロセスがメモリに書き込むまで、実際には書き込み時にコピー(読み取り専用)され、次に完全なコピーを行います。 + - コンテキストスイッチ + - オペレーティングシステムとその基盤となるハードウェアによってコンテキスト切り替えが開始される仕組み + - [ ] [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並行処理:LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4) + - [ ] [基調講演David Beazley - 興味のあるトピック(Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU) + - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) + +- ###論文 + - 全面的に完全に理解することは、あなたが持っているより多くの時間がかかるでしょう。私は論文とそのセクションを選択することをお勧めします。 + - [古典的な論文を愛する?](https://www.cs.cmu.edu/~crary/819-f09/) + - [ ] [1978:順次プロセスの通信](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [Goで実装](https://godoc.org/github.com/thomas11/csp) + - [ ] [2003:The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) + - 2012年に巨像に置き換えられました + - [ ] [2004:MapReduce:大規模クラスタでのデータ処理の簡略化](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) + - 主にCloud Dataflowに置き換えられましたか? + - [ ] [2006:Bigtable:構造化データ用分散ストレージシステム](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [Google BigQueryの内部を見る](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) + - [ ] [2006:疎結合分散システムのChubby Lockサービス](https://research.google.com/archive/chubby-osdi06.pdf) + - [ ] [2007:Dynamo:Amazonの高可用キー値ストア](https://www.akkadia.org/drepper/cpumemory.pdf) + - Dynamo紙がNoSQL革命を開始 + - すべてのプログラマーがメモリについて知っておくべきこと(非常に長く、著者はいくつかのセクションのスキップを奨励する)](https://www.akkadia.org/drepper/cpumemory.pdf) + - [ ] [2010:Dapper、大規模分散システム追跡基盤](https://research.google.com/pubs/archive/36356.pdf) + - [ ] [2010:Dremel:Web-Scaleデータセットのインタラクティブ解析](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) + - [ ] [2012:Googleの巨像](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:スパナ:Googleのグローバル分散データベース: + - [ペーパー](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) + - [ビデオ](https://www.usenix.org/node/170855) + - [ ] [2014年:機械学習:技術的な負債の高い金利のクレジットカード](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) + - [ ] [2015:Googleの継続的なパイプライン](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) + - [ ] [2015年:大規模な高可用性:Googleの広告用データ基盤の構築](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、Kubernetes](http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/44843.pdf) + +- ###テスト + - カバーするために: + - ユニットテストの仕組み + - モックオブジェクトとは何ですか? + - 統合テストとは + - 依存性注入とは + - [ ] [James Bachによるアジャイルソフトウェアテスト(ビデオ)](https://www.youtube.com/watch?v=SAhJf36_u5U) + - [ ] [ジェイムス・バッハによるソフトウェアテストの公開講座(ビデオ)](https://www.youtube.com/watch?v=ILkT_HV9DVU) + - [ ] [Steve Freeman - テスト駆動開発(これは私たちが意味するものではありません)(ビデオ)](https://vimeo.com/83960706) + - [スライド](http://goocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) + - [ ] [TDDは死んでいます。長いライブテスト。](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html) + - [ ] [TDDは死んでいますか? (ビデオ)](https://www.youtube.com/watch?v=z9quxZsLcfo) + - [ ] [ビデオシリーズ(152ビデオ) - すべてではない(ビデオ)](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) + +- ###スケジューリング + - OSで、どのように動作するのですか + - オペレーティングシステムのビデオから収集できます + +- ###システムルーチンを実装する + - 使用するプログラミングAPIの下にあるものを理解する +    あなたはそれらを実装できますか? + +- ###文字列の検索と操作 + - [ ] [Sedgewick - 接尾辞配列(ビデオ)](https://www.youtube.com/watch?v=HKPrVm5FWvg) + - [ ] [Sedgewick - サブストリング検索(動画)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) + - [ ] [1。サブストリング検索の紹介](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) + - [ ] [2。ブルートフォースサブストリング検索](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) + - [ ] [3。 Knuth-Morris Pratt](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [4。 Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) + - [ ] [5。 Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [テキストの検索パターン(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + +    このテーマについてさらに詳しく知りたい場合は、[いくつかの科目の追加の詳細]の「文字列のマッチング」の項を参照してください(#additional-detail-on-some-subjects) + +- ###試行 + - 試行の種類が異なることに注意してください。いくつかは接頭辞を持ち、いくつかは接頭辞を持ち、あるものはビットの代わりに文字列を使います +        パスを追跡する。 + - 私はコードを読んだが、実装しないだろう。 + - [ ] [Sedgewick - 試してみる(3ビデオ)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [1。 R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [2。 Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [3。キャラクターベースの操作](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) + - [ ] [データ構造とプログラミング手法に関する注記](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#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) + - [ ] [Trie(ビデオ)の実装](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) + - [ ] [Trie:無視されたデータ構造](https://www.toptal.com/java/the-trie-a-neglected-data-structure) + - [ ] [TopCoder - 試用版の使用](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) + +- ###浮動小数点数 + - [ ] 単純な8ビット:[浮動小数点数の表現 - 1(ビデオ - 計算にエラーがあります - ビデオの説明を参照)](https://www.youtube.com/watch?v=ji3SfClm8TU) + - [ ] 32ビット:[IEEE754 32ビット浮動小数点バイナリ(ビデオ)](https://www.youtube.com/watch?v=50ZYcZebIec) + +- ### Unicode + - [ ] [すべてのソフトウェア開発者が絶対に最低限必要とする、絶対にUnicodeと文字セットについて熟知していること](http://www.joelonsoftware.com/articles/Unicode.html) + - [ ] [すべてのプログラマーが、エンコーディングと文字セットについて知る必要があることは間違いない](http://kunststube.net/encoding/) + +- ###エンディアン + - [ ] [ビッグ・アンド・リトル・エンディアン](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html) + - [ ] [ビッグエンディアン対リトルエンディアン(ビデオ)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [ ] [Big And Little Endian Inside / Out(ビデオ)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) + - カーネル開発者のための非常に技術的な話。ほとんどがあなたの頭の上にある場合は心配しないでください。 + - 前半で十分です。 + +- ###ネットワーキング + - **ネットワーク経験がある、またはシステムエンジニアになりたい場合は、質問を期待してください** + - そうでなければ、これは知っているだけでいいです + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) + - [ ] [UDPとTCP:トランスポートプロトコルの比較](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と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) + - [ ] [ビデオシリーズ(21ビデオ)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IggfoqO4iPnPYQui46QqT0j) + - [ ] [不確かさのサブネット化 - 第5部CIDR表記](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] ソケット: + - [ ] [Java - Sockets - Introduction(video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [ソケットプログラミング(ビデオ)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + +##システム設計、スケーラビリティ、データ処理 +- **4年以上の経験があれば、システム設計の質問を期待できます。** +- スケーラビリティとシステム設計は、多くのトピックとリソースを持つ非常に大きなトピックです。 +      拡張可能なソフトウェア/ハードウェアシステムを設計する際には、考慮すべき点がたくさんあります。 +      これにかなりの時間を費やすことを期待してください。 +- 考察: + - スケーラビリティ + - 大きなデータセットを単一の値に変換する + - あるデータセットを別のデータセットに変換する + - 莫大な量のデータを扱う + - システム設計 + - 機能セット + - インターフェース + - クラス階層 + - 一定の制約の下でシステムを設計する + - シンプルさと丈夫さ + - トレードオフ + - パフォーマンス分析と最適化 + +- [ ] **ここをクリック**:[The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] [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 - システム設計 - インタビュー/) +- [ ] [アルゴリズム設計](http://www.hiredintech.com/algorithm-design/) +- [ ] [データベースの正規化 - 1NF、2NF、3NF、4NF(ビデオ)](https://www.youtube.com/watch?v=UrYLYV7WSHM) +- [ ] [System Design Interview](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) +- [ ] [データセンター間の取引(動画)](https://www.youtube.com/watch?v=srOgpXECblk) +- [ ] [CAP定理の簡単な英語入門](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) +- [ ] パクソス合意アルゴリズム: + - [短い動画](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ユースケースとマルチパクソーズの拡張動画](https://www.youtube.com/watch?v=JEpsBg0AO6o) + - [ペーパー](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) + +- [ ] スケーラビリティ: + - [ ] [概要(動画)](https://www.youtube.com/watch?v=-W9F__D3oY4) + - [ ] 短いシリーズ: + - [Clones](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/ja/distsys.html) + - [ ] [分散コンピューティングの説明](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グラフ処理](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) + - [ ] [Jeff Dean - Googleでソフトウェアシステムを構築し、教訓(ビデオ)](https://www.youtube.com/watch?v=modXC5IWTJI) + - [ ] [規模の設計システムの紹介](http://lethain.com/introduction-to-architecting-systems-for-scale/) + - [ ] [App EngineとCloud Datastore(ビデオ)を使用して世界中の視聴者にモバイルゲームを拡大](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [GoogleがPlanet-Scale Infra(プラチナスケールインフラ)のプラネットスケールエンジニアリングを行う仕組み](https://www.youtube.com/watch?v=H4vMcD7zKM0) + - [ ] [アルゴリズムの重要性](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) + - [ ] [Scale at Facebook(2009)](https://www.infoq.com/presentations/Scale-at-Facebook) +    Facebook(2012年)、「10億ユーザー向けビルド(ビデオ)」(https://www.youtube.com/watch?v=oodS71YtkGU) + - [ ] [ロングゲームのためのエンジニアリング - Astrid Atkinson Keynote(ビデオ)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) + - [ ] [7年間のYouTubeスケーラビリティレッスン30分](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html ) + - [動画](https://www.youtube.com/watch?v=G-lGCC4KKok) + - [ ] [ペイパルが毎日何十億ものトランザクションにスケーリングされる方法(8VMだけを使用)](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によるエンジニアリング文化(ビデオ)](https://www.youtube.com/watch?v=3vV4YiqKm1o) + - Amazonが独自のマイクロサービスアーキテクチャに導いたこと(http://thenewstack.io/led-amazon-microservices-architecture/) + - [圧縮するか圧縮しない、それはUberの質問でした](https://eng.uber.com/trip-data-squeeze/) + - [ ] [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-an.html) + - [ ] [スパナ](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html) + - [Egnyteアーキテクチャ:マルチペタバイト分散システムの構築とスケーリングの教訓](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) + - [ ] [1日あたり何百万ものリクエストを処理する画像最適化技術](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:どのようにして最大のレコメンデーションエンジンの誰があなたが次に誰を見るか決定する?](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で1,100万人以上のユーザーに拡大するための初心者向けガイド(http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million- users-on-amazons.html) + - [ ] [ドッカーの効果待ち時間の使用方法](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html) + - [ ] [AMPはGoogleに存在する脅威に対抗していますか?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html) + - [ ] [全Netflixスタックの360度ビュー](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) + - [ ] [Serverless(非常に長い、要点が必要)](http://martinfowler.com/articles/serverless.html) + - [ ] [Instagramのパワーは何百ものインスタンス、何十ものテクノロジ](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) + - [シンクキャストアーキテクチャ - 毎日1,500時間の音声を生成する](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のソーシャルゲームアーキテクチャ - 50百万人の月間ユーザーと成長(http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) ) + - [ ] [アーキテクチャ - 40Mビジター、200M動的ページビュー、30TBデータ](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view .html) + - [ ] [PlentyOfFishアーキテクチャ](http://highscalability.com/plentyoffish-architecture) + - [ ] [Salesforceのアーキテクチャ - どのように130億回のトランザクションを処理するか](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) ) + - [ESPNの規模でのアーキテクチャ - 毎秒100,000のDuh Nuh Nuhsで動作](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、「@Twitterの大小データ」(ビデオ)](https://www.youtube.com/watch?v=5cKTP36HVgI) + - [スケール時のタイムライン](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) + - さらに詳しくは、[Video Series](ビデオシリーズ)セクションの「Mining Massive Datasets」ビデオシリーズを参照してください。 + +- [ ] システム設計プロセスの練習:紙で作業しようとするいくつかのアイデアがあります。実際にどのように扱われたのかについてのいくつかの文書があります。 + - レビュー:[The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [HiredInTechのシステム設計](http://www.hiredintech.com/system-design/) + - [チートシート](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) + - 流れ: + 1. 問題と範囲を理解する: +            - インタビュアーの助けを借りてユースケースを定義する + - 追加の機能を提案する + - インタビュアーが範囲外とみなすアイテムを削除する + - 高可用性が必要と仮定し、ユースケースとして追加する + 2. 制約について考える: + - 1か月あたりのリクエスト数を尋ねる + - 1秒あたりにどれくらい多くのリクエストをするか(彼らはボランティアでもよいし、あなたに数学をさせるかもしれない) + - 読み込みの見積もりと書き込みの割合 + - 推定時に80/20ルールを覚えておいてください + - 1秒あたりに書き込まれるデータの量 + - 5年間に必要な合計ストレージ + - 1秒あたりに読み取られるデータの量 + 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) + - [画像共有システムの設計](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) + - [推薦システムの設計](http://ijcai13.org/files/tutorial_slides/td3.pdf) + - [URL短縮システムの設計:上からコピー](http://www.hiredintech.com/system-design/the-system-design-process/) + - [キャッシュシステム設計](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) + +--- + +##最終レビュー + +    このセクションでは、重要な概念のほとんどを見直すためにかなり短いビデオを見ることができます。 +    あなたが頻繁にリフレッシャーをしたいならいいですね。 + +- [ ] 2〜3分短編ビデオシリーズ(23ビデオ) + - [動画](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) +- [ ] マイケル・サンボール(18ビデオ) + - [動画](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] [Sedgewick Videos - アルゴリズムI](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) + - [ ] [01。ユニオン検索](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) + - [ ] [02。アルゴリズムの分析](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) + - [ ] [03。スタックとキュー](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) + - [ ] [04。初級](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) + - [ ] [05。 Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [06。 Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [07。優先度キュー](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) + - [ ] [08。 Elementary Symbol Tables](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) + - [ ] [09。平衡検索ツリー](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) + - [ ] [10。 BSTの幾何学的応用](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) + - [ ] [11。ハッシュテーブル](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) +- [ ] [Sedgewick Videos - アルゴリズムII](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50) + - [ ] [01。間違ったグラフ](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) + - [ ] [02。 (Directed Graphs)](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) + - [ ] [03。最小スパニングツリー](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj) + - [ ] [04。最短経路](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) + - [ ] [05。最大フロー](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) + - [ ] [06。基数ソート](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [07。試してください](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [08。サブストリング検索](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [09。正規表現](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) + - [ ] [10。データ圧縮](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) + - [ ] [11。減額](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF) + - [ ] [12。リニアプログラミング](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) + - [ ] [13。難易度](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) + +--- + +##コーディングの質問練習 + +上のすべてのコンピュータ科学のトピックを知ったので、コーディングの問題に答える練習をしましょう。 + +**コーディング質問の練習は、プログラミング問題への回答を記憶することではありません。** + +プログラミングの問題を練習する必要がある理由 +- 問題の認識、そして適切なデータ構造とアルゴリズムの適合 +- 問題のための要件を集める +- インタビューであなたのように問題を話している +- コンピュータではなく、ホワイトボードや紙でのコーディング +- ソリューションの時間と空間の複雑さが増す +- ソリューションのテスト + +インタビューでは、体系的でコミュニケーション的な問題解決の素晴らしいイントロがあります。あなたはプログラミングからこれを得るでしょう +インタビューの本もありましたが、私はこの優れた発見しました: +[アルゴリズム設計キャンバス](http://www.hiredintech.com/algorithm-design/) + +自宅にホワイトボードはありませんか?それは理にかなっている。私は変わった人で、大きなホワイトボードを持っています。ホワイトボードの代わりに、 +アートストアからの大きな描画パッド。あなたはソファに座って練習することができます。これが私の「ソファホワイトボード」です。 +私はスケールの写真にペンを追加しました。ペンを使うと、あなたは消すことができます。すぐに厄介になる。 + +![私のソファホワイトボード](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) + +補足: + +- [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インタビュー資料](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) +- [特定の言語をより良くするための練習](http://exercism.io/languages) + +**プログラミングの問題を読んでやる(この順番で):** + +- [ ] [プログラミングインタビュー公開:あなたの次の仕事への秘密、第2版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - C、C ++、Javaの回答 +- [ ] [Cracking the Coding Interview、第6版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - Javaでの回答 + +[上記のブックリスト](#ブックリスト)を参照してください + +##コード演習/挑戦 + +あなたの脳を学んだら、脳を働かせてください。 +できるだけ多く、毎日コーディングの課題に取り組んでください。 + +- [ ] [解決方法](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/) +- [ ] [Topcoder Problem Statementを解読する方法](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/) + +コーディングインタビュー質問ビデオ: +- [IDeserve(88ビデオ)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy(5プレイリスト)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + +チャレンジサイト: +- [LeetCode](https://leetcode.com/) +- [TopCoder](https://www.topcoder.com/) +- [プロジェクトオイラー(Math-focused)](https://projecteuler.net/index.php?section=problems) +- [コードワード](http://www.codewars.com) +- [HackerEarth](https://www.hackerearth.com/) +- [HackerRank](https://www.hackerrank.com/) +- [Codility](https://codility.com/programmers/) +- [InterviewCake](https://www.interviewcake.com/) +- [Geeks for Geeks](http://www.geeksforgeeks.org/) +- [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Sphere(Sphere)](http://www.spoj.com/) + +チャレンジレポ: +- [Pythonの対話型コーディングインタビューの課題](https://github.com/donnemartin/interactive-coding-challenges) + +モックインタビュー: +- [Gainlo.co:大企業のモックインタビュアー](http://www.gainlo.co/) +- [Pramp:仲間との懇談会](https://www.pramp.com/) +- [Refdash:Mock interviews](https://refdash.com/) + +##あなたが面接に近づいたら + +- [ ] クラッキングコーディングインタビューセット2(ビデオ): + - [コードインタビューをクラッキングする](https://www.youtube.com/watch?v=4NIb9l3imAo) + - [コードインタビューをクラックする - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo) + +## あなたの履歴書 + +- クラッキングでの準備項目の再開を参照してください。コーディングインタビューとプログラミングインタビューの公開 + + +##インタビューが来る時を考えている + +あなたが得る20の面接の質問と、以下の項目の行を考えてみましょう。それぞれ2-3の答えがあります。 +あなたが達成したことについての物語だけでなく、データを持ってください。 + +- なぜあなたはこの仕事をしたいです? +- あなたが解決した厳しい問題は何ですか? +- 最大の課題に直面した? +- ベスト/最悪のデザインが見られる? +- 既存の製品を改善するためのアイデア。 +- 個人として、そしてチームの一員として、どのようにベストを尽くしていますか? +- あなたのスキルや経験のうち、その役割の資産とその理由は? +- [job x / project y]で一番楽しかったことは何ですか? +- [job x / project y]に直面した最大の課題は何ですか? +- [job x / project y]で直面した最も難しいバグは何でしたか? +- [job x / project y]で何を学びましたか? +- あなたは[job x / project y]で何を良くしていますか? + +##インタビュアーに質問があります + +    私の中には(私は既に知っているかもしれませんが、彼らの意見やチームの視点が必要です): + +あなたのチームはどれくらいですか? +- あなたの開発サイクルはどのように見えるのですか?あなたは滝/スプリント/アジャイルをしますか? +- 締め切りまでの時間は共通ですか?それとも柔軟性はありますか? +- あなたのチームではどのように意思決定が行われますか? +- 週に何回会議がありますか? +- あなたの仕事環境が集中するのに役立つと思いますか? +- 何をしているの? +- それについて何が好きですか? +- 仕事の生活はどうですか? + +##一度あなたは仕事を得た + +おめでとう! + +学び続けます。 + +あなたは決して本当に終わらない。 + +--- + +    *************************************************** *************************************************** * +    *************************************************** *************************************************** * + +    この点以下のものはすべてオプションです。 +    これらを勉強することで、より多くのCSコンセプトにさらされることになります。 +    任意のソフトウェアエンジニアリングジョブ。あなたはもっと豊富なソフトウェアエンジニアになるでしょう。 + +    *************************************************** *************************************************** * +    *************************************************** *************************************************** * + +--- + + +##その他の書籍 + +- [ ] [Unixプログラミング環境](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=情報) + - 古き良き時代 +- [ ] [Linuxコマンドライン:完全な紹介](https://www.amazon.com/dp/1593273894/) + - 現代的な選択肢 +- [ ] [TCP / IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [ ] [ヘッドファーストデザインパターン](https://www.amazon.com/gp/product/0596007124/) + - デザインパターンへの穏やかな紹介 +- [ ] [デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) + - 別名「Gang Of Four」の本、またはGOF + - 正式なデザインパターンの本 +- [ ] [UNIXおよびLinuxシステム管理ハンドブック、第4版](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/) + +##その他の学習 + +これらの話題はインタビューでは出てこないかもしれませんが、 +特定のテクノロジとアルゴリズムを認識するためには、より大きなツールボックスが必要になります。 + +- ###コンパイラ + - [ ] [1分でコンパイラがどのように動作するか(ビデオ)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [ ] [Harvard CS50 - コンパイラ(ビデオ)](https://www.youtube.com/watch?v=CSZLNYF4Klo) + - [ ] [C ++(video)](https://www.youtube.com/watch?v=twodd1KFfGk) + - [ ] [コンパイラの最適化について(C ++)(ビデオ)](https://www.youtube.com/watch?v=FnGCDLhaxKU) + +- ### Emacsとvi(m) + - UNIXベースのコードエディタに慣れましょう + - vi(m): + - [vim 01での編集 - インストール、設定、およびモード(ビデオ)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) + - [VIM Adventures](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エディター - レッスン3](https://www.youtube.com/watch?v=ZYEccA_nMaI) + - [vi / vimエディタ - レッスン4](https://www.youtube.com/watch?v=1lYD5gwgZIA) + - [Emacsの代わりにViを使う](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs) + - emacs: + - [基本Emacsチュートリアル(ビデオ)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) + - 3つのセット(ビデオ): + - [Emacsチュートリアル(初心者向け) - 第1部 - ファイルコマンド、カット/コピー/ペースト、カーソルコマンド](https://www.youtube.com/watch?v=ujODL7MD04Q) + - [Emacsチュートリアル(初心者向け) - パート2 - バッファ管理、検索、M-grep、rgrepモード](https://www.youtube.com/watch?v=XWpsRupJ4II) + - [Emacsチュートリアル(初心者) - 第3章式、ステートメント、〜/ .emacsファイルとパッケージ](https://www.youtube.com/watch?v=paSgzPso-yc) + - [邪悪なモード:または、私が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コマンドラインツール + - 私は良いツールから下のリストに記入しました。 + - [ ] bash + - [ ] cat + - [ ] grep + - [ ] sed + - [ ] awk + - [ ] カールまたはwget + - [ ] ソート + - [ ] tr + - [ ] uniq + - [ ] [strace](https://en.wikipedia.org/wiki/Strace) + - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/) + +- ###情報理論(ビデオ) + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory) + - [ ] Markovプロセスの詳細: + - [ ] [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) + - [ ] [Markov Text Generationを実装するコア](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) + - [ ] [プロジェクト=マルコフテキスト生成ウォークスルー](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walkthroughs) + - 下記のMIT 6.050J Information and Entropyシリーズを参照してください。 + +- ###パリティ&ハミングコード(ビデオ) + - [ ] [イントロ](https://www.youtube.com/watch?v=q-3BctoUpHE) + - [ ] [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M) + - [ ] ハミングコード: + - [エラー検出](https://www.youtube.com/watch?v=1A_NcXxdoCc) + - [エラー修正](https://www.youtube.com/watch?v=JAMLuxdHH8o) + - [ ] [エラーチェック](https://www.youtube.com/watch?v=wbH2VxzmoZk) + +- ###エントロピー + - 下記の動画もご覧ください + - 最初に情報理論ビデオを見てください + - [情報理論、Claude Shannon、エントロピー、冗長性、データ圧縮およびビット(ビデオ)](https://youtu.be/JnJq3Py0dyM?t=176) + +- ###暗号化 + - 下記の動画もご覧ください + - 最初に情報理論ビデオを見てください + - [ ] [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography) + - [ ] [暗号化:ハッシュ関数](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30) + - [ ] [暗号化:暗号化](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + +- ###圧縮 + - 最初に情報理論ビデオを見てください + - [ ] Computerphile(ビデオ): + - [ ] [圧縮](https://www.youtube.com/watch?v=Lto-ajuqW3w) + - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko) + - [ ] [上向きの木(ハフマンツリー)](https://www.youtube.com/watch?v=umTbivyJoiI) + - [ ] [エキストラビット/ TRITS - ハフマンツリー](https://www.youtube.com/watch?v=DV8efuB3h2g) + - [ ] [テキストのエレガントな圧縮(LZ 77方式)](https://www.youtube.com/watch?v=goOa3DGezUA) + - [ ] [テキスト圧縮が確率を満たす](https://www.youtube.com/watch?v=cCDCfoHTsaU) + - [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) + - [ ] [(オプション)Google Developers Live:GZIPでは不十分です!](https://www.youtube.com/watch?v=whGwm0Lky2s) + +- ###コンピュータセキュリティ + - [MIT(23ビデオ)](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) + - [ ] [Webアプリケーションの保護](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) + +- ###ガベージコレクション + - [ ] [ガベージコレクション(Java);データの拡張(動画)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25) + - [ ] [コンパイラ(ビデオ)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) + - [ ] [GC in Python(video)](https://www.youtube.com/watch?v=iHVs_HkjdmI) + - [ ] [ディープダイブJava:ガーベッジコレクションは良いです!](https://www.infoq.com/presentations/garbage-collection-benefits) + - [ ] [Deep Dive Python:CPythonでのガベージコレクション(ビデオ)](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) + +- ###メッセージング、シリアライゼーション、およびキューイングシステム + - [ ] [Thrift](https://thrift.apache.org/) + - [チュートリアル](http://thrift-tutorial.readthedocs.io/ja/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) + - [ ] [Redis](http://redis.io/) + - [チュートリアル](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/) + - [はじめに](https://www.rabbitmq.com/getstarted.html) + - [ ] [Celery](http://www.celeryproject.org/) + - [セロリの最初のステップ](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html) + - [ ] [ZeroMQ](http://zeromq.org/) + - [イントロ - マニュアルを読む](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/) + +- ### A * + - [ ] [検索アルゴリズム](https://en.wikipedia.org/wiki/A*_search_algorithm) + - [ ] [A * Pathfinding Tutorial(video)](https://www.youtube.com/watch?v=KNXfSOx4eEE) + - [ ] [A *経路探索(E01:アルゴリズムの説明)(ビデオ)](https://www.youtube.com/watch?v=-L-WgKMFuhE) + +- ###高速フーリエ変換 + - [ ] [フーリエ変換のインタラクティブガイド](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/) + - [ ] [フーリエ変換とは何ですか?それは何のために使われますか?](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) + - [ ] [Divide&Conquer:FFT(ビデオ)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) + - [ ] [FFTの理解](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) + +- ###ブルームフィルター + - mビットとkハッシュ関数を持つBloomフィルタが与えられた場合、挿入とメンバーシップの両方のテストはO(k) + - [Bloom Filters](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [ブルームフィルター|大規模なデータセットのマイニング|スタンフォード大学](https://www.youtube.com/watch?v=qBTdukbzc78) + - [チュートリアル](http://billmill.org/bloomfilter-tutorial/) + - [Bloom Filter Appを書く方法](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/) + +- ### HyperLogLog + - [わずか1.5KBのメモリを使用して10億の異なるオブジェクトを数える方法](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct -objects-us.html) + +- ###局所性に敏感なハッシング + - ドキュメントの類似性を判断するために使用されます。 + - 2つの文書/文字列がまったく同じかどうかを判断するために使用されるMD5またはSHAの反対。 + - [Simhashing(うまくいけば)シンプルに](http://ferd.ca/simhashing-hopefully-made-simple.html) + +- ###ヴァンEmde Boasの木 + - [Divide&Conquer:van Emde Boas Trees(ビデオ)](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) + +- ###拡張データ構造 + - [ ] [CS 61B講義39:データ構造の拡張](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) + +- ###バランスの取れた検索ツリー + - 少なくとも1つのタイプの平衡二分木を知っている(そしてそれがどのように実装されているか知っている): + - "バランスの取れた探索木の​​中で、AVLと2/3の樹木が通過し、赤黒の木がより人気があるようです。 +        特に興味深い自己組織化データ構造は、スプレイツリーであり、回転を使用します +        アクセスされたキーをルートに移動する」 - Skiena +    これらのうち、私はスプレイツリーを実装することを選択しました。私が読んだことから、あなたは +        あなたのインタビューでバランスの取れた検索ツリー。しかし、私は1つのコーディングへの露出を望んでいた +        そしてそれに直面しましょう、スプレーの木はミツバチの膝です。私は赤黒の木のコードをたくさん読んだ。 + - スプレイツリー:挿入、検索、削除機能 +        あなたが赤/黒の木の実装を終わらせるならば、これらを試してみてください: + - 検索と挿入機能、削除をスキップする +    B-Treeについては、非常に大規模なデータセットで非常に広く使用されているため、詳細を知りたい。 + - [ ] [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) + + - [ ] ** AVLツリー** +        - 実際には: +            私が言うことから、これらは実際にはあまり使われていませんが、どこになるか分かります。 +            AVLツリーは、O(log n)検索、挿入、および削除をサポートする別の構造です。より厳格に +            赤黒の木よりもバランスがとれているため、挿入と取り出しが遅くなりますが、検索が速くなります。これにより +            一度構築され、再構成なしでロードされる、例えば言語 +            辞書(または、アセンブラまたはインタプリタのオペコードなどのプログラム辞書)を含む。 + - [ ] [MIT AVL Trees / AVL Sort(ビデオ)](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) + + - [ ] **スプレッドツリー** +        - 実際には: +            スプレイ・ツリーは、キャッシュ、メモリ・アロケータ、ルータ、ガベージ・コレクタ、 +            データ圧縮、ロープ(長いテキスト文字列に使用される文字列の置換)、Windows NT(仮想メモリ、 +            ネットワークおよびファイルシステムコードなど) + - [ ] [CS 61B:Splay Trees(video)](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木の翻訳です(下記参照) +        - 実際には: +            赤黒の木は、挿入時間、削除時間、および検索時間に対して最悪の場合の保証を提供します。 +            これは、リアルタイムアプリケーションなどの時間に敏感なアプリケーションでは、これらを貴重なものにするだけでなく、 +            それは最悪の場合の保証を提供する他のデータ構造における貴重なビルディングブロックになります。 +            例えば、計算幾何学で使用される多くのデータ構造は赤黒の木に基づくことができ、 +            現在のLinuxカーネルで使用されている完全に公正なスケジューラは赤黒のツリーを使用します。 Javaのバージョン8では、 +            Collection HashMapが変更され、LinkedListを使用して同一の要素を貧弱に保存する代わりに +            ハッシュコードでは、赤黒のツリーが使用されます。 + - [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) + - [ ] [黒い木](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 /) + +- [ ] **2-3の検索ツリー** + - 実際には: +            2〜3本の木は、検索が遅くなるため(AVL木よりも高さが高いため)、挿入が速くなります。 + - 2-3のツリーは非常にまれにしか使用しませんが、実装にはさまざまなタイプのノードが含まれるためです。代わりに、人々はレッドブラックの木を使用します。 + - [ ] [23木の直感と定義(ビデオ)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) + - [ ] [23-Treeのバイナリビュー](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本の木は実用的ではありません**。 + - [ ] [CS 61B講義26:バランスの取れた検索ツリー(ビデオ)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) + - [ ] [ボトムアップ234-Trees(ビデオ)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [トップダウン234ツリー(動画)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) + + - [ ] **N-ary(K-ary、M-ary)木** + - 注記:NまたはKは分岐因子(最大分岐)であり、 + - 2分木は2分木であり、分岐因子= 2 + - 2-3本の木は3本である + - [ ] [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) + + - [ ] **B-Tree** + - 楽しい事実:それは謎ですが、Bはボーイング、バランスの取れた、またはバイエル(共同発明家)のために立つことができます。 +        - 実際には: +            Bツリーはデータベースで広く使用されています。最近のファイルシステムのほとんどは、B-tree(またはVariants)を使用しています。に加えて +            Bツリーはファイルシステムでも使用され、任意のデータベースへの迅速なランダムアクセスを可能にします +            特定のファイル内のブロック基本的な問題は、ファイルブロックのiアドレスをディスクブロックに変換することです +            (またはおそらくシリンダーヘッドセクターへの)アドレスである。 + - [ ] [B-Tree](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 - メモリ階層モデル(ビデオ)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + - キャッシュに気付かないBツリー、非常に興味深いデータ構造 + - 最初の37分は非常に技術的であり、スキップすることができます(Bはブロックサイズ、キャッシュラインサイズです) + + +- ### k-D木 + - 矩形または高次元のオブジェクトの点数を見つけるのに最適 + - k最近接の隣人に適している + - [ ] [Kd Trees(ビデオ)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [ ] [kNN K-dツリーアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + +- ###リストをスキップする + - 「これは多少のカルトデータ構造です」 - Skiena + - [ ] [ランダム化:リストをスキップ(ビデオ)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [アニメーションともう少し詳しく](https://en.wikipedia.org/wiki/Skip_list) + +- ###ネットワークの流れ + - [ ] [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) + +- ###分離集合と連合検索 + - [ ] [UCB 61B - ばらばらのセット;並べ替えと選択(動画)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) + - [ ] [Sedgewickアルゴリズム - Union-Find(6ビデオ)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) + +- ###高速処理のための数学 + - [ ] [整数演算、Karatsuba倍数(ビデオ)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [中国の剰余定理(暗号で使用)(ビデオ)](https://www.youtube.com/watch?v=ru7mWZJlRQg) + +- ### + - バイナリ検索ツリーとヒープの組み合わせ + - [ ] [Treap](https://en.wikipedia.org/wiki/Treap) + - [ ] [データ構造:Treaps説明(動画)](https://www.youtube.com/watch?v=6podLUYinH8) + - [ ] [セット操作のアプリケーション](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) + +- ###リニアプログラミング(ビデオ) + - [ ] [線形計画法](https://www.youtube.com/watch?v=M4K6HYLHREQ) + - [ ] [最小費用の見積もり](https://www.youtube.com/watch?v=2ACJ9EWUC6U) + - [ ] [最大値の検索](https://www.youtube.com/watch?v=8AA_81xI3ik) + - [ ] [Pythonで線形方程式を解く - シンプレックスアルゴリズム](https://www.youtube.com/watch?v=44pAWI7v5Zk) + +- ###幾何学、凸包(ビデオ) + - [ ] [Graph Alg。 IV:幾何学アルゴリズムの紹介 - 講義9(https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164) + - [ ] [Geometric Algorithms:Graham&Jarvis - 講義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) + +- ###離散数学 + - 下のビデオを見る + +- ###機械学習 + - [ ] なぜMLですか? + - [ ] [Googleがどのように最初の企業を学習するマシンとして自分自身を作り直すか](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) + - [ ] [Googleのクラウドマシン学習ツール(動画)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) + - [ ] [Google Developers `Machine Learning Recipes(Scikit Learn&Tensorflow)(ビデオ)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) + - [ ] [Tensorflow(video)](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の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) + - [自己運転車技術者Nanodegree](https://www.udacity.com/drive) + - [Metis Online Course(2ヶ月間99ドル)](http://www.thisismetis.com/explore-data-science) + - リソース: + - 書籍: + - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) + - [ゼロからのデータ科学:Pythonの第一原理](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) + - [Pythonによる機械学習入門](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) + - [ソフトウェアエンジニア向け機械学習](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - データスクール:http://www.dataschool.io/ + +- + +##追加科目の詳細 + +    私は既に上記のいくつかのアイデアを強化するためにこれらを追加しましたが、それらを含めたくありませんでした +    それはちょうどあまりにも多くのためです。それは被験者にそれを過ごすのは簡単です。 +    あなたは今世紀に雇われたかったですね。 + +- [ ] **連合検索** + - [ ] [概要](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) + - [ ] [Naive Implementation](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) + +- [ ] **もっとダイナミックなプログラミング**(ビデオ) + - [ ] [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:DP III:かっこ、編集距離、ナップザック](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:ダイナミックプログラミング:オールペア最短パス](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) + - [ ] [6.046:ダイナミックプログラミング(学生の暗唱)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) + +- [ ] **高度なグラフ処理**(ビデオ) + - [ ] [同期分散アルゴリズム:対称性を破る。ツリーにまたがる最短パス](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) + - [ ] [非同期分散アルゴリズム:ツリーにまたがる最短パス](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28) + +- [ ] MIT **確率**(mathy、ゆっくりと進み、数学的なことに良い)(ビデオ): + - [ ] [MIT 6.042J - 確率の紹介](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - 条件付き確率](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 - Expectation 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) + +- [ ] **文字列マッチング** + - [ ] Rabin-Karp(ビデオ): + - [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) + - [最適化:実装と分析](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis) + - [表倍増、Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9) + - [ローリングハッシュ、償却分析](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32) + - [ ] クヌース・モリス・プラット(KMP): + - [Knuth-Morris-Pratt(KMP)文字列マッチングアルゴリズム](https://www.youtube.com/watch?v=5i7oKodCRJo) + - [ ] Boyer-Moore文字列検索アルゴリズム + - [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) + - [高度な文字列検索Boyer-Moore-Horspoolアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=QDZpzctPf10) + - [ ] [Coursera:文字列のアルゴリズム](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) + - すごく始まりますが、KMPを過ぎるまでには、必要以上に複雑になります + - 試行の良い説明 + - スキップすることができます + +- [ ] **ソート** + + - [ ] スタンフォードのソーティングに関する講義: + - [ ] [講義15 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) + - [ ] [講義16 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) + - [ ] Shai Simonson、[Aduni.org](http://www.aduni.org/): + - [ ] [アルゴリズム - ソート - 講義2(ビデオ)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) + - [ ] [アルゴリズム - ソートII - レクチャー3(ビデオ)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) + - [ ] Steven Skienaのソーティングに関する講義: + - [ ] [講義は26:46に始まります(ビデオ)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) + - [ ] [講義は27:40(ビデオ)から開始](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [講演は35:00(ビデオ)から開始](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [講演は23:50から始まります(ビデオ)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) + + +##ビデオシリーズ + +座って楽しんでください。 「ネットフリックスとスキル」:P + +- [ ] [個々の動的プログラミングの問題のリスト(それぞれ短いです)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + +- [ ] [x86アーキテクチャ、アセンブリ、アプリケーション(11ビデオ)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) + +- [ ] [MIT 18.06線形代数、2005年春(35ビデオ)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8) + +- [ ] [優秀 - MIT Calculus Revisited:単一変数計算](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) + +- [ ] [コンピュータサイエンス70,001 - 春2015 - 離散数学と確率論](https://www.youtube.com/playlist?list=PL-XXv-cvA_iD8wQm8U0gG_Z1uHjImKXFy) + +- [ ] [Shai Simonsonによる離散数学(19ビデオ)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) + +- [ ] [離散数学第1部:Sarada Herke(5ビデオ)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) + +- [ ] CSE373 - アルゴリズムの分析(25ビデオ) + - [アルゴリズム設計マニュアルのSkiena講義](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) + +- [UCバークレー61B(Spring 2014):データ構造(25ビデオ)](https://www.youtube.com/watch?v=mFPmKGIrQs4&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) + +- [UC Berkeley 61B(2006年秋):データ構造(39ビデオ)](https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) + +- [UC Berkeley 61C:機械構造物(26ビデオ)](https://www.youtube.com/watch?v=gJJUUFyuvvg&list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) + +- [ ] [OOSE:UMLとJavaを使用したソフトウェア開発(21ビデオ)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + +- [ ] [UC Berkeley CS 152:コンピュータアーキテクチャとエンジニアリング(20ビデオ)](https://www.youtube.com/watch?v=UH0QYvtP7Rk&index=20&list=PLkFD6_40KJIwEiwQx1dACXwh-2Fuo32qr) + +- [ ] [MIT 6.004:計算構造(49ビデオ)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) + +- [Carnegie Mellon - Computer Architecture Lectures(39ビデオ)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) + +- [ ] [MIT 6.006:アルゴリズム紹介(47ビデオ)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False) + +- [ ] [MIT 6.033:コンピュータシステムエンジニアリング(22ビデオ)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484) + +- [ ] [MIT 6.034人工知能、2010年秋(30ビデオ)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi) + +- [ ] [MIT 6.042J:コンピュータサイエンスの数学、2010年秋(25ビデオ)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B) + +- [ ] [MIT 6.046:アルゴリズムの設計と分析(34ビデオ)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + +- [ ] [MIT 6.050J:情報とエントロピー、2008年春(19ビデオ)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7) + +- [ ] [MIT 6.851:高度なデータ構造(22ビデオ)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) + +- [ ] [MIT 6.854:Advanced Algorithms、Spring 2016(24ビデオ)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) + +- [ ] [Harvard COMPSCI 224:Advanced Algorithms(25ビデオ)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) + +- [ ] [MIT 6.858コンピュータシステムセキュリティ、2014年秋](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- [ ] [Stanford:Programming Paradigms(27ビデオ)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) + +- [ ] [Christof Paarによる暗号の概要](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) + - [スライドと問題セットと一緒のコースウェブサイト](http://www.crypto-textbook.com/) + +- [ ] [Mining Massive Datasets - スタンフォード大学(94ビデオ)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) + +- [ ] グラフ理論(Sarada Herke)(67ビデオ)(https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) + +##コンピュータサイエンスコース + +- [オンラインCSコースのディレクトリ](https://github.com/open-source-society/computer-science) +- [CSコースのディレクトリ(多くはオンライン講義あり)](https://github.com/prakhar1989/awesome-courses) \ No newline at end of file From 02d9aad7b2475b3e24b771d3ea1d12838ca8a87d Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Sat, 1 Jul 2017 20:16:28 +0300 Subject: [PATCH 024/263] Stack and queue --- translations/README-ru.md | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 306030c..afecf44 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -645,34 +645,34 @@ Google не возьмёт тебя на работу. - [ ] reverse() - реверсирует весь список - [ ] remove_value(value) - удаляет первый элемент в списке с указанным значением (value) - [ ] Двусвязный список - - [Description (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) + - [Описание (video)](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. +- ### Стек + - [ ] [Стек (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [Использование стека Last-In First-Out (video)](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) +- ### Очередь + - [ ] [Использование очереди First-In First-Out(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) + - [ ] [Очередь (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) + - [ ] [Очередь с приоритетом (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) + - [ ] Реализация с использованием связанного списка и указателя на последний элемент(tail): + - enqueue(value) - добавляет элемент в конец очереди + - dequeue() - возвращает значение и удаляет из очереди последний добавленный элемент(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 + - [ ] Реализация с приминением массива фиксированного размера: + - 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) + - [ ] Затраты: + - плохая реализация с приминением связанного списка когда элемент добавляется в начало очереди и удаляется с конца очереди за O(n), + операция dequeue в таком случае будет требовать каждый раз обхода всего списка + - enqueue: O(1) (amortized, связанный список и массив [probing]) + - dequeue: O(1) (связанный список и массив) + - empty: O(1) (связанный список и массив) - ### Hash table - [ ] Videos: From b84f3b875c397ea6163c8ad32a0baa88911109ad Mon Sep 17 00:00:00 2001 From: Ilyushin Evgeniy Date: Sat, 1 Jul 2017 20:32:16 +0300 Subject: [PATCH 025/263] Hash table, binary search & bitwise operations --- translations/README-ru.md | 40 +++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index afecf44..f56603d 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -674,8 +674,8 @@ Google не возьмёт тебя на работу. - dequeue: O(1) (связанный список и массив) - empty: O(1) (связанный список и массив) -- ### 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) @@ -683,7 +683,7 @@ Google не возьмёт тебя на работу. - [ ] [(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) @@ -691,32 +691,32 @@ Google не возьмёт тебя на работу. - [ ] [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 + - [ ] реализация с помощью массива и приминением linear probing + - hash(k, m) - m размер хеш-таблицы + - add(key, 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) @@ -724,19 +724,19 @@ Google не возьмёт тебя на работу. - [ ] [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 + - [ ] 2s и 1s дополнения: - [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: + - [ ] округление до следующей степени 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 From 8f06d1b8ebe085b6c080d93685d78873f4547af9 Mon Sep 17 00:00:00 2001 From: riverwell Date: Mon, 30 Oct 2017 23:17:27 +0900 Subject: [PATCH 026/263] [update] modified wording --- translations/README-ja.md | 1148 +++++++++++++++++++------------------ 1 file changed, 578 insertions(+), 570 deletions(-) diff --git a/translations/README-ja.md b/translations/README-ja.md index fcd3862..20a3955 100644 --- a/translations/README-ja.md +++ b/translations/README-ja.md @@ -1,19 +1,19 @@ -#コーディングインタビュー大学 +#コーディング面接の大学 ->私はもともとこれをソフトウェアエンジニアになるための短期的な研究テーマのリストとして作成しましたが、 ->しかし、それは今日あなたが見る大きなリストに成長しました。この調査計画を経て、[私は雇われました -> Amazonのソフトウェア開発エンジニアとして](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! ->あなたは私のように勉強する必要はないでしょう。とにかく、必要なものはすべてここにあります。 +>私はもともとこれをソフトウェアエンジニアになるための短いトピックリストとして作成しましたが、 +>今日それは大きなリストに成長しました。この調査計画を経て、[私はAmazonで +> ソフトウェアエンジニアとして雇われました!!](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu) +>おそらく、あなたは私ほど勉強する必要はないでしょう。とにかく、必要なものはすべてここにあります。 > ->ここに記載されている項目は、ほぼすべてのソフトウェア会社のインタビューの中で、 ->巨人を含む:Amazon、Facebook、GoogleまたはMicrosoft。 +>ここに掲載されている項目を学べば、Amazon、Facebook、Google、Microsoftなど +>大手企業を含む、ほぼすべてのソフトウェア会社の面接に備えることができます。 > -> *あなたに最高の運勢!* +> *あなたに最高の幸運がありますように!* 翻訳: -- [中文版本](翻訳/ README-cn.md) -- [TiếngViệt - ベトナム語](翻訳/ README-vi.md) -- [Español](翻訳/ README-es.md) +- [中文版本](translations/README-cn.md) +- [TiếngViệt - ベトナム語](translations/README-vi.md) +- [Español](translations/README-es.md) 翻訳中: - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) @@ -34,62 +34,59 @@ - [ギリシャ語](https://github.com/jwasham/coding-interview-university/issues/166) - [Italian](https://github.com/jwasham/coding-interview-university/issues/170) -## それは何ですか? +## これは何? -これは、Web開発者(独学で、CS指導なし)から大企業のソフトウェアエンジニアに向かうための私の複数月の学習計画です。 +これは、Webエンジニア(独学で、CS学位なし)から大企業のソフトウェアエンジニアを目指すための私の複数月の学習計画です。 ![ホワイトボードでのコーディング - HBOのシリコンバレーから](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +これは、 **新人ソフトウェアエンジニア** 、またはソフトウェア/ Webエンジニアからソフトウェアエンジニア(CSの知識が必要な場合)に転職する人を対象にしています。 +長年のソフトウェアエ開発経験をお持ちの場合は、より面白い面接を期待してください。 -これは、**新しいソフトウェアエンジニア**または -ソフトウェア/ウェブ開発からソフトウェア工学(コンピュータサイエンスの知識が必要な場合)。あなたが持っている場合 -長年の経験とソフトウェア工学の長年の経験を主張している、より面白いインタビューを期待しています。 +あなたに何年ものソフトウェア/Web開発経験がある場合、Google、Amazon、Facebook、Microsoftなどの大規模なソフトウェア会社は、ソフトウェア/Web開発力ではなくソフトウェア工学に関して見ており、そのためにはCSに関する知識が必要となることをご了承ください。 -何年ものソフトウェア/ウェブ開発経験がある場合は、Google、Amazon、 -FacebookとMicrosoftはソフトウェアエンジニアリングをソフトウェア/ Web開発とは異なるものと見ており、コンピュータ科学の知識が必要です。 - -信頼性エンジニアまたはシステムエンジニアになりたい場合は、オプションのリスト(ネットワーク、セキュリティ)から詳細を調べてください。 +SREまたはシステムエンジニアになりたい場合は、オプションのリスト(ネットワーク、セキュリティ)から詳細を調べてください。 --- ## 目次 -- [これはなんで?](何のことなの?) -- (なぜそれを使うの?)(#why-use-it) +- [これは何?](#何のことなの?) +- [なぜこれを使うの?](#why-use-it) - [使い方](#使い方) -- [あなたが十分にスマートではないと感じないでください](十分にスマートではありません) +- [あなたは十分にスマートではないと感じないでください](十分にスマートではありません) - [ビデオリソースについて](#about-video-resources) -- [インタビュープロセスと一般インタビューの準備](#インタビュープロセス - 一般インタビュー - 準備) -- [インタビューのための1つの言語を選ぶ](インタビューのために1つの言語を選択する) +- [面接のプロセスと一般的な面接の準備](#面接プロセス--一般面接--準備) +- [面接のための1つの言語を選ぶ](面接のために1つの言語を選択する) - [ブックリスト](#ブックリスト) -- [あなたが始める前に](始める前に#) +- [始める前に](始める前に#) - あなたがカバーしていないもの(何があなたには見えません) - [前提知識](#前提条件知識) - [日々の計画](日々の計画) -- [アルゴリズムの複雑さ/ Big-O / Asymptotic分析](#アルゴリズム - 複雑 - big-o - 漸近分析) +- [アルゴリズムの複雑さ/ Big-O / Asymptotic分析](#アルゴリズム--複雑--big-o--漸近分析) - [データ構造](#データ構造) - [配列](#配列) - - [リンクリスト](#リンクリスト) + - [連結リスト](#連結リスト) - [スタック](#スタック) - [キュー](#キュー) - [ハッシュテーブル](#ハッシュテーブル) - [その他の知識](#more-knowledge) - - [バイナリ検索](#バイナリ検索) - - [ビット単位演算](#ビット単位演算) -- [ツリー](#木) - - [ツリー - ノートと背景](#木---ノート - 背景) - - [バイナリ検索ツリー:BST](#binary-search-trees-bsts) - - [ヒープ/優先度キュー/バイナリヒープ](#ヒープ - 優先度キュー - バイナリヒープ) - - バランスの取れた検索ツリー(詳細ではなく一般概念) - - トラバーサル:preorder、inorder、postorder、BFS、DFS + - [二分探索](#二分探索) + - [ビット演算](#ビット演算) +- [木構造](#木) + - [木構造 - ノートと背景](#木---ノート--背景) + - [二分探索木:BST](#binary-search-trees-bsts) + - [ヒープ/優先度つきキュー/二分ヒープ](#ヒープ--優先度キュー--バイナリヒープ) + - 平衡探索木(詳細ではなく一般概念) + - 木の走査(traversal):行きがけ順(pre-order)、通りがかり順(in-order)、帰りがけ順(postorder)、深さ優先探索(BFS)、幅優先探索(DFS) - [ソート](#ソート) - - 選択 - - 挿入 - - heapsort + - 選択ソート + - 挿入ソート + - ヒープソート - クイックソート - マージソート - [グラフ](#グラフ) - - 監督 - - 無向 + - 有向グラフ + - 無向グラフ - 隣接行列 - 隣接リスト - トラバーサル:BFS、DFS @@ -98,151 +95,156 @@ FacebookとMicrosoftはソフトウェアエンジニアリングをソフトウ - [動的プログラミング](#動的プログラミング) - [オブジェクト指向プログラミング](#オブジェクト指向プログラミング) - [デザインパターン](#デザインパターン) - - [組み合わせ(n choose k)と確率](#combinatorics-n-choose-k - 確率) - - [NP、NP-完全近似アルゴリズム](#np-np-complete-and-approximation-algorithms) + - [組み合わせと確率](#combinatorics-n-choose-k--確率) + - [NP、NP完全/近似アルゴリズム](#np-np-complete-and-approximation-algorithms) - [キャッシュ](#キャッシュ) - [プロセスとスレッド](#processes-and-threads) - [論文](#論文) - [テスト](#テスト) - [スケジューリング](#スケジューリング) - [システムルーチンを実装する](#implement-system-routines) - - [文字列検索と操作](#文字列検索 - 操作) + - [文字列検索と操作](#文字列検索--操作) - [試行](#試行) - [浮動小数点数](浮動小数点数) - - [Unicode](#ユニコード) - - [エンディアン](#エンディアン) + - [ユニコード](#ユニコード) + - [バイト順(エンディアン)](#エンディアン) - [ネットワーキング](#ネットワーキング) -- [システム設計、スケーラビリティ、データ処理](#システム設計 - スケーラビリティデータ処理)(4年以上の経験がある場合) +- [システム設計、スケーラビリティ、データ処理](#システム設計--スケーラビリティなデータ処理)(4年以上の経験がある場合) - [最終審査](#最終審査) - [コーディング質問練習](#コーディング質問練習) - [コーディング練習問題/挑戦](#コーディング演習問題) -- [インタビューに近づいたら](インタビューに一度近づいて) -- [あなたの履歴書](あなたの履歴書) -- [インタビューが来たときに考える](インタビューのときに考えている) -- [インタビュアーに質問があります](#面接のための質問があります) -- [一度あなたは仕事を得ました](一度あなたが仕事をしたこと) +- [面接に近づいたら](面接に一度近づいて) +- [履歴書](あなたの履歴書) +- [面接が来たときに考える](面接のときに考えている) +- [面接官に質問があります](#面接のための質問があります) +- [一度あなたは仕事を得た](一度あなたが仕事をしたこと) ----------------この時点より下のものはすべてオプションです---------------- - [追加の書籍](追加の書籍数) -- [追加学習](追加学習) +- [追加の学習](追加学習) - [コンパイラ](#コンパイラ) - [Emacsとvi(m)](#emacs-and-vim) - [Unixコマンドラインツール](#unix-command-line-tools) - [情報理論](#情報理論) - - [パリティ&ハミングコード](#パリティ - ハミングコード) - - [Entropy](#エントロピー) + - [パリティとハミング符号](#パリティ--ハミングコード) + - [情報量(エントロピー)](#エントロピー) - [暗号化](#暗号化) - [圧縮](#圧縮) - [コンピュータセキュリティ](#コンピュータセキュリティ) - [ガベージコレクション](#ガベージコレクション) - - [パラレルプログラミング](#パラレルプログラミング) - - [メッセージング、シリアライゼーション、キューイングシステム](#メッセージングシリアライゼーションとキューイングシステム) + - [並列計算](#パラレルプログラミング) + - [メッセージング、シリアライゼーション・キューイングシステム](#メッセージングシリアライゼーションとキューイングシステム) - [A *](#a) - [高速フーリエ変換](#高速フーリエ変換) - [ブルームフィルタ](#ブルームフィルタ) - [HyperLogLog](#hyperloglog) - - [Locality-Sensitive Hashing](#ローカリティセンシティブハッシング) - - [van Emde Boas Trees](ヴァン・エムード・ボア・ツリー) + - [局所性鋭敏型ハッシュ](#ローカリティセンシティブハッシング) + - [van Emde Boas Trees(バン エンデ ボース)](ヴァン・エムード・ボア・木) - [拡張データ構造](#拡張データ構造) - [N-ary(k-ary、M-ary)木](#n-ary-k-ary-m-ary-trees) - - [バランス検索木](#バランス検索木) - - AVLツリー - - スプレッドツリー - - レッド/ブラックの木 - - 2-3の検索木 - - 2-3-4樹木(別名2-4木) - - N-ary(K-ary、M-ary)木 - - Bツリー - - [k-D木](#k-d-trees) + - [平衡探索木](#バランス検索木) + - AVL木 + - スプレー木 + - 赤黒木 + - 2-3木 + - 2-3-4木(別名2-4木) + - 多分木(N-ary,K-ary,M-ary木) + - B木 + - [kd木](#k-d-trees) - [スキップリスト](#スキップリスト) - - [ネットワークフロー](#ネットワークフロー) - - [分離セットとユニオン検索](#disjoint-sets - union-find) + - [ネットワークのフロー](#ネットワークフロー) + - [素集合データ構造とUnion-Findアルゴリズム](#disjoint-sets--union-find) - [高速処理のための数学](#数学のための高速処理) - [Treap](#treap) - [線形計画法](#線形計画法) - - [ジオメトリ、凸包](#ジオメトリ - 凸包) + - [ジオメトリ、凸包](#ジオメトリ--凸包) - [離散数学](離散数学) - [機械学習](機械学習) -- [いくつかの科目の追加の詳細](#追加の詳細 - いくつかの科目) +- [いくつかの科目の追加の詳細](#追加の詳細--いくつかの科目) - [ビデオシリーズ](#ビデオシリーズ) - [コンピュータサイエンスコース](#コンピュータサイエンスコース) ## なぜそれを使用するのですか? -私がこのプロジェクトを始めたとき、ヒープからスタックを知りませんでした、Big-Oの何か、木のこと、または -グラフを横断する。並べ替えアルゴリズムをコーディングしなければならない場合は、あまりうまくいきませんでした。 -これまで使用してきたすべてのデータ構造は言語に組み込まれており、どのように動作するのか分かりませんでした -ボンネットの下にすべて。私が実行していたプロセスが " -私は人生でいくつかの多次元配列を使いました。 -何千もの連想配列ですが、データ構造を一から作成したことはありません。 +私はこのプロジェクトを始めたとき、ヒープからスタックを知りませんでしたし、Big-Oの何か、樹木に関すること、グラフをたどる方法を知らなかったのです。 +ソートアルゴリズムをコーディングしなければならない場合は、あまりうまくいきませんでした。 +これまで使用してきたすべてのデータ構造は言語に組み込まれていて、どのようにしてそれらがどのようにして動作するのか分かりませんでした。 +私が実行していたプロセスが "メモリ不足"エラーを出さない限り、メモリを管理する必要はありませんでしたが、回避策を見つけなければなりません。 +私は人生で数多くの多次元配列を使用していましたが、何千もの連想配列を使用しましたが、データ構造を一から作成したことはありません。 -それは長い計画です。あなたに数ヶ月かかるかもしれません。すでに多くのことに慣れていれば、それほど時間がかかりません。 + +それは長い計画です。あなたに数ヶ月かかるかもしれません。 +すでに多くのことに慣れていれば、それほど時間がかかりません。 ## それの使い方 -下のすべてがアウトラインです。アイテムを上から下に順番に取り組まなければなりません。 +下のすべてがアウトラインです。 +アイテムを上から下に順番に取り組まなければなりません。 私はGithubの特別なマークダウンフレーバーを使用しています。 -**新しいブランチを作成して、このような項目をチェックできるようにするには、xを角かっこで囲みます:[x] ** +**新しいブランチを作成して、このような項目をチェックできるようにしてください.xを角かっこに入れてください:[x]**     ブランチをフォークし、以下のコマンドに従ってください。 `git checkout -b progress` -`git remote add jwasham https:// github.com / jwasham / coding-interview-university` +`git remote add jwasham https://github.com/jwasham/coding-interview-university` `git fetch --all`     変更を完了した後にXですべてのボックスにマークを付ける -`git add。 ` +`git add . ` -`git commit -m `とマークしたx" +`git commit -m "マークされたx"` -`git rebase jwasham / master` +`git rebase jwasham/master` `git push --force` -[Github風味のマークアップの詳細](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +[Github風マークダウンの詳細](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) ##あなたは十分にスマートではないと感じないでください - 成功したソフトウェアエンジニアはスマートですが、多くの人はスマートではないという不安があります。 - [Geniusプログラマーの神話](https://www.youtube.com/watch?v=0SARbwvhupQ) -- [独り言に行くのは危険だ:Tech in Invisible Monstersと戦う](https://www.youtube.com/watch?v=1i8ylq4j_EY) +- [一人で行くのは危険だ:テクノロジーの見えない魔物と戦う](https://www.youtube.com/watch?v=1i8ylq4j_EY) + --- ##ビデオリソースについて -一部のビデオは、Coursera、EdX、またはLynda.comクラスに登録することによってのみ利用できます。これらはMOOCと呼ばれています。 -時にはクラスがセッションに入っていないので、数ヶ月待つ必要があるため、アクセス権がありません。 Lynda.comコースは無料ではありません。 +一部のビデオは、Coursera、EdX、またはLynda.comクラスに登録することによってのみ利用できます。 +これらはMOOCと呼ばれています。 +時にはクラスがセッションに入っていないので、数ヶ月待つ必要があるため、アクセス権がありません。 +Lynda.comコースは無料ではありません。     オンラインコースビデオに付随するYouTubeビデオなど、無料で常時利用可能なパブリックソースを追加することに感謝します。     私は大学の講義を使うのが好きです。 -##インタビュープロセスと一般インタビュー準備 +## 面接のプロセスと一般的な面接の準備 - [ ] [ABC:常にコーディングする](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [ ] [プログラミングインタビュー中の効果的なホワイトボード](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) -- [ ] [Tech Recruitingの謎解き](https://www.youtube.com/watch?v=N233T0epWTs) -- [ ] クラッキングコーディングインタビューセット1: - - [ ] [Gayle L McDowell - コーディングインタビュー(ビデオ)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) - - [ ] [Gayle Laakmann McDowell(ビデオ)](https://www.youtube.com/watch?v=aClxtDcdpsQ)とのコーディングインタビューをクラッキング +- [ ] [プログラミング面接中の効果的なホワイトボード](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [ ] [技術職募集での謎解き](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] クラッキングコーディング面接セット1: + - [ ] [Gayle L McDowell - コーディング面接(ビデオ)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [Gayle Laakmann McDowell(ビデオ)](https://www.youtube.com/watch?v=aClxtDcdpsQ)とのコーディング面接をクラッキング - [ ] ビッグ4で仕事を得る方法: - - [ ] [Amazon、Facebook、Google、Microsoft(ビデオ)](https://www.youtube.com/watch?v=YJZCUhxNCv8)でビッグ4の仕事を手に入れる方法 + - [ ] [Amazon、Facebook、Google、Microsoftで仕事を手に入れる方法(ビデオ)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [ ] 準備コース: - [ ] [Software Engineer Interview Unleashed(有料コース)](https://www.udemy.com/software-engineer-interview-unleashed): - - 以前のGoogleインタビュアーのソフトウェアエンジニアインタビューの準備をする方法を学びます。 - - [ ] [データ構造、アルゴリズム、インタビューのためのPython! (有料コース)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - - データ構造、アルゴリズム、模擬インタビューなどを扱うPython中心のインタビューの準備コース。 + - 以前のGoogle面接官からソフトウェアエンジニアの面接準備をする方法を学びます。 + - [ ] [データ構造、アルゴリズム、面接のためのPython! (有料コース)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - データ構造、アルゴリズム、模擬面接などを扱うPython中心の面接の準備コース。 -##インタビューのための1つの言語を選ぶ +##面接のための1つの言語を選ぶ -インタビューのコーディングの部分に慣れ親しんだ言語を使用することはできますが、大企業にとってはこれらの選択肢が確実です。 +面接のコーディングの部分に慣れ親しんだ言語を使用することはできますが、大企業にとってはこれらの選択肢が確実です。 - C ++ - Java @@ -261,25 +263,26 @@ FacebookとMicrosoftはソフトウェアエンジニアリングをソフトウ [言語リソースはこちら](programming-language-resources.md) -私は学習しているので、以下に含まれるC、C ++、Pythonの学習を見ることができます。いくつかの本があります、下を参照してください。 +私は学習しているので、以下に含まれるC、C ++、Pythonの学習を見ることができます。 +いくつかの本があります、下を参照してください。 -## 予約リスト +## ブックリスト これは私が使ったものよりも短いリストです。これは時間を節約するために省略されています。 -### インタビュー準備 +### 面接の準備 -- [ ] [プログラミングインタビュー公開:あなたの次の仕事への秘密、第2版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) +- [ ] [プログラミング面接の公開:あなたの次の仕事への秘密、第2版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - C ++とJavaの回答 - - コーディングインタビューをクラッキングするためのウォームアップが良い - - それほど難しくない、ほとんどの問題は、私が読んだことから、あなたがインタビューで見るよりも簡単かもしれません。 + - コーディング面接をクラッキングするためのウォームアップが良い + - あまりにも難しくない、ほとんどの問題はあなたが面接で(私が読んだことから)見ることよりも簡単かもしれない - [ ] [Cracking the Coding Interview、第6版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - Javaでの回答 もし余分な時間があれば: -- [ ] [プログラミングインタビューの要素(C ++版)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) -- [ ] インタビュープログラミングの要素(Java版) +- [ ] [プログラミング面接の要素(C ++版)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] プログラミング面接の要素(Java版) - [本](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - [コンパニオンプロジェクト - 本のすべての問題のメソッドスタブとテストケース](https://github.com/gardncl/elements-of-programming-interviews) @@ -292,13 +295,13 @@ FacebookとMicrosoftはソフトウェアエンジニアリングをソフトウ - 作者はHLAを発明したので、塩の穀物でHLAの言及と例を取り上げます。広く使われているわけではありませんが、どのようなアセンブリのように見えますか? - これらの章はあなたに素敵な基礎を与えるために読む価値があります: - 第2章 - 数値表現 -        第3章2進算術とビット演算 +        - 第3章 - 2進算術とビット演算 - 第4章 - 浮動小数点表現 - 第5章 - キャラクター表現 - 第6章 - メモリ構成とアクセス -        第7章複合データ型とメモリオブジェクト -        第9章CPUアーキテクチャ - - 第10章命令セットのアーキテクチャ +        - 第7章 - 複合データ型とメモリオブジェクト +        - 第9章 - CPUアーキテクチャ + - 第10章 - 命令セットのアーキテクチャ - 第11章 - メモリのアーキテクチャと構成 もっと時間があれば(私はこの本が欲しい): @@ -306,28 +309,28 @@ FacebookとMicrosoftはソフトウェアエンジニアリングをソフトウ - [ ] [Computer Architecture、第5版:定量的アプローチ](https://www.amazon.com/dp/012383872X/) - より豊かで最新の(2011年)、より長い治療のために -###言語固有 +### 言語固有 -**インタビューの言語を選択する必要があります(上記参照)。** 私はすべての言語のためのリソースがありません。私は追加を歓迎する。 +**面接の言語を選択する必要があります(上記参照)。** ここで私の推奨する言語です。私はすべての言語のためのリソースがありません。私は追加を歓迎する。 これらのうちの1つを読んだら、コーディングの問題を開始するために必要なすべてのデータ構造とアルゴリズムの知識が必要です。 -**あなたがレビューしたいと思わない限り、このプロジェクト**のビデオ講義をすべてスキップすることができます**。 +**あなたがレビューをしたくない場合は、このプロジェクト**のビデオ講義をすべてスキップすることができます。 [ここに言語固有の追加リソースがあります](programming-language-resources.md) -### C ++ +### C++ 私はこれらの2つを読んだことはありませんが、Sedgewickによって高く評価され書かれています。彼は素晴らしいです。 -- [ ] [C ++でのアルゴリズム、パート1-4:基礎、データ構造、ソート、検索](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) -- [ ] [C ++でのアルゴリズム第5部:グラフアルゴリズム](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) +- [ ] [C++でのアルゴリズム、パート1-4:基礎、データ構造、ソート、検索](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [C++でのアルゴリズム第5部:グラフアルゴリズム](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) -C ++の推奨事項がある場合は、私に知らせてください。包括的なリソースを探しています。 +C++の推奨事項がある場合は、私に知らせてください。包括的なリソースを探しています。 ### Java - [ ] [アルゴリズム(Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - 本のコンテンツを持つビデオ(とSedgewick!): + - 書籍コンテンツの動画(とSedgewick!): - [アルゴリズム1](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) - [アルゴリズムII](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) @@ -349,57 +352,60 @@ OR: ###オプションの書籍 -**何人かはこれをお勧めしますが、何年ものソフトウェアエンジニアリング経験があり、より面白いインタビューを期待している場合を除いて、** +**ソフトウェア工学の長年の経験があり、もっと面白い面接を期待しない限り、これらのことをお勧めする人もいます。** - [ ] [アルゴリズム設計マニュアル](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202)(Skiena) - レビューと問題認識として - - アルゴリズムのカタログ部分は、インタビューで得られる難易度の範囲をはるかに超えています。 + - アルゴリズムのカタログ部分は、面接で得られる難易度の範囲をはるかに超えています。 - この本は2つの部分を持っています: - データ構造とアルゴリズムに関する教科書 - - プロ: + - 長所: - アルゴリズムの教科書はどんなものでも良いレビューです - 業界および学界の問題を解決した経験から得た素敵な話 - Cのコード例 - 短所: - - CLRSと同様に密集しているか、侵入不可能な場合があります。場合によっては、CLRSが一部の被験者にとってより良い選択肢になる可能性があります - - 章7,8,9は、いくつかの項目がうまく説明されていない、または私が持っているよりも多くの脳を必要とするため、追跡しようとすると痛いことがあります - - 私は間違っていない:私はSkiena、彼の教授のスタイル、そしてマタニズムが好きだが、私はストーニーブルックの素材ではないかもしれない。 + - Introduction to Algorithms(CLRS)と同様に密集しているか、侵入不可能な場合があります。場合によっては、CLRSが一部の科目にとってより良い選択肢になる可能性があります + - 7章、8章、9章では、いくつかの項目がうまく説明されていないか、私が持っているよりも多くの脳を必要とするため、追跡しようとすると痛いことがあります + - 誤解しないで:私はSkiena、彼の教え方、そしてマナーを好きですが、Stony Brookの教材ではないかもしれません。 - アルゴリズムカタログ: - これがあなたがこの本を買う本当の理由です。 - - この部分に近づくこと。一度私がそれを通り抜けたら、ここで更新されます。 - - それを光り輝かせることができます - - Half.comは、良い価格で教科書のための素晴らしいリソースです。 + - この部分に近づきます。一度私がそれを通り抜けたら、ここで更新されます。 + - Kindleで読むことが出来ます + - 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) - [ ] [アルゴリズムの紹介](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **重要:** この本の読書は価値が限られています。この本はアルゴリズムとデータ構造の素晴らしいレビューですが、良いコードを書く方法を教えてくれません。まともなソリューションを効率的にコーディングすることができなければなりません。 + - **重要:** この本を読む価値は限られています。この本はアルゴリズムとデータ構造の素晴らしいレビューですが、良いコードを書く方法を教えてくれません。まともなソリューションを効率的にコーディングすることができなければなりません。 - Half.comは、良い価格で教科書のための素晴らしいリソースです。 - スタインはゲームに遅れていたので、別名CLR、ときにはCLRS - [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - 章の最初の2つは、プログラミング上の問題(データテープを使用して非常に古くなっているもの) -      それはちょうどイントロです。これはプログラムの設計とアーキテクチャに関するガイドブックです。Code Completeとよく似ていますが、はるかに短いものです。 + - プログラミング上の問題(データテープを使っているものもあります)への巧妙な解決策を示していますが、これは単なるイントロです。 +      これはプログラムの設計とアーキテクチャに関するガイドブックです。 + これはプログラムの設計とアーキテクチャに関するガイドブックです。Code Completeとよく似ていますが、はるかに短いものです。 - ~~シェンの "アルゴリズムとプログラミング:問題と解決策"~~ - 良い本ですが、いくつかのページで問題を解決した後、私はPascalに悩まされ、whileループ、1つのインデックス付き配列、不確実な事後条件の満足度結果を得ました。 - - 別の書籍やオンラインのコーディングの問題からコーディングの問題に時間を費やすことになります。 + - むしろ別の本やオンラインのコーディングの問題からコーディングの問題に時間を費やすだろう -##あなたが始める前に +## 始める前に このリストは何ヶ月にもわたって成長しました。 -ここで私が作ったいくつかの間違いがあります。あなたはより良い経験をするでしょう。 +ここで私が作ったいくつかの間違いがあります。 +あなたはより良い経験をするでしょう。 ### 1.あなたはそれをすべて覚えていない -私は数時間のビデオを見て、豊富なメモを取りました。そして数ヶ月後に私は覚えていないほどでした。私は3日間過ごした -私のメモとフラッシュカードを作って見直すことができました。 +私は数時間のビデオを見て、豊富なメモを取りました。 +そして数ヶ月後に私は覚えていないほどでした。 +私はメモを書き、フラッシュカードを作って見直すことができるように3日間過ごしました。 -あなたが私の間違いをしないように読んでください: +あなたが私と同じ間違いをしないように読んでください: [コンピュータ科学知識の保持](https://startupnextdoor.com/retaining-computer-science-knowledge/) @@ -416,21 +422,25 @@ OR: - [マイフラッシュカードデータベース(旧1200カード)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): - [マイフラッシュカードデータベース(新1800カード)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db): -私は船外に出て、アセンブリ言語やPythonのトリビアからマシンの学習や統計に至るまですべてのカードをカバーしています。何が必要なのかはあまりにも大変です。 +覚えておいてほしいのですが,私はやりすぎてしまい、アセンブリ言語,機械学習のためのPythonのトリビア,統計に至るまですべてのカードをカバーしています。 +何が必要なのかはあまりにも大変です。 -**フラッシュカードについての注意:** あなたが最初に答えを知っているときは、知らないようにしてください。あなたは -あなたが本当にそれを知る前に、同じカードを数回正しく答えてください。繰り返しは、その知識を深く -あなたの脳。 +**フラッシュカードについての注意:** 最初に答えを知っているときは、それを既知のものとしてマークしないでください。 +あなたは本当にそれを知る前に、同じカードを見て、それを正しく数回答えなければなりません。 +繰り返すことで、その知識があなたの脳に深く浸透します。 -私のフラッシュカードサイトを使用する代わりに[Anki](http://ankisrs.net/)が何度も私に勧められています。繰り返しシステムを使用して覚えやすくなります。 -ユーザーフレンドリーで、すべてのプラットフォームで利用でき、クラウドシンクシステムを備えています。 iOSでは25ドル、他のプラットフォームでは無料です。 -Ankiフォーマットの私のフラッシュカードデータベース:https://ankiweb.net/shared/info/25173560(thanks [@xiewenya](https://github.com/xiewenya)) +私のフラッシュカードサイトを使用する代わりに[Anki](http://ankisrs.net/)が何度も私に勧められています。 +繰り返しシステムを使用して覚えやすくなります。 +ユーザーフレンドリーで、すべてのプラットフォームで利用でき、クラウド同期システムを備えています。 +iOSでは25ドル、他のプラットフォームでは無料です。 + +Anki形式の私のフラッシュカードデータベース:https://ankiweb.net/shared/info/25173560(thanks [@xiewenya](https://github.com/xiewenya)) ### 3.レビュー、レビュー、評価 -私は、ASCII、OSIスタック、Big-O表記などのチートシートを用意しています。私は余裕があるときに勉強します。 +私は、ASCII、OSI参照モデル、Big-O記法などのチートシートを用意しています。私は余裕があるときに勉強します。 プログラミングの問題から30分ほど休み、フラッシュカードを通過してください。 @@ -448,22 +458,23 @@ Ankiフォーマットの私のフラッシュカードデータベース:http ##日々の計画 -一部の被験者は1日を要し、いくつかは複数日を要する。いくつかは、何も実装することなく学習しているだけです。 +一部の科目は1日を要し、いくつかは複数日を要する。 +いくつかは、何も実装することなく学習しているだけです。 毎日私は以下のリストから1つのテーマを取り上げ、そのテーマに関するビデオを見て、以下の実装を書いています: -- C - structと他のものをargsとする構造体と関数を使う。 -- C ++ - 組み込み型を使用しない -- C + + - リンクリストのSTLのstd :: listのような組込み型の使用 +- C - struct*と何か他のものをargsとする構造体と関数を使用する。 +- C++ - 組み込み型を使用しない +- C++ - 連結リストのSTLのstd :: listのような組込み型の使用 - Python - 組み込み型を使用する(Pythonの練習を続ける) -私は正しいことをするためのテストを書いています。単純なassert()文を使って +- 簡単なassert()文を使って、時には正しく動作することを保証するテストを書く - あなたはJavaや他の何かをするかもしれませんが、これは私のことです。 -あなたはこれらのすべてを必要としません。あなたは[インタビューのための1つの言語]だけが必要です(インタビューのための1つの言語を選択します)。 +あなたはこれらのすべてを必要としません。[面接のために必要な言語は1つだけです](面接のための1つの言語を選択します)。 なぜこれらすべてのコード? -- 私はそれが病気になるまで、練習、練習、練習、そして何も問題なく行うことができます(いくつかは覚えておくべき多くのエッジケースと簿記の詳細があります) +- 私はそれが病気になるまで練習、練習、練習をし、何の問題もありません(忘れてはいけないことがいくつかあります) - 生の制約内で作業する(ガベージコレクションの助けを借りずにメモリを割り当てる/解放する(Pythonを除く)) -- 組み込み型を利用するので、組み込みのツールを実世界で使用する経験があります(実稼働環境で自分のリンクリストの実装を作成するつもりはありません) +- 組み込みの型を利用して、実際の使用のために組み込みのツールを使用した経験を持ちます(本番環境で自分のリンクされたリストの実装を書くつもりはありません) 私はすべてのテーマでこれらのすべてをやる時間がないかもしれませんが、私は試してみます。 @@ -472,38 +483,38 @@ Ankiフォーマットの私のフラッシュカードデータベース:http - [C ++](https://github.com/jwasham/practice-cpp) - [Python](https://github.com/jwasham/practice-python) -あなたはすべてのアルゴリズムの勇気を暗記する必要はありません。 +あなたはすべてのアルゴリズムの内容を暗記する必要はありません。 コンピューターではなく、ホワイトボードや紙にコードを書く。いくつかのサンプル入力でテストします。次に、コンピュータでテストします。 ##前提知識 -- [ ] **Learn C** - - Cはどこにでもあります。あなたは勉強している間、書籍、講義、ビデオ、*どこでも*の例を見ることができます。 +- [ ] **Cを学ぶ** + - Cはどこにでもあります。あなたは勉強している間、書籍、講義、ビデオ、*どこにでも*見ることができます。 - [ ] [Cプログラミング言語、Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - これは短い本ですが、C言語の優れた処理方法を提供し、少しでも練習すれば -            あなたはすぐに熟練を得るでしょう。 Cを理解すると、プログラムやメモリの仕組みを理解するのに役立ちます。 + - これは短い本ですが、それはC言語の優れた処理方法を提供します。 + 少しでも練習すれば、すばやく習得できます。 Cを理解すると、プログラムやメモリの仕組みを理解するのに役立ちます。 - [質問への回答](https://github.com/lekkas/c-algorithms) - [ ] **コンピュータがプログラムをどのように処理するか:** - [ ] [CPUがプログラム(ビデオ)をどのように実行するか](https://www.youtube.com/watch?v=42KTvGYQYnA) - - [ ] [機械コード命令(ビデオ)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) + - [ ] [マシンコード命令(ビデオ)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) ##アルゴリズムの複雑さ/ Big-O / Asymptotic解析 -- 何もしない -- [ ] [Harvard CS50 - Asymptotic Notation(video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) -- [ ] [ビッグO記法(一般的なクイックチュートリアル)(ビデオ)](https://www.youtube.com/watch?v=V6mKVRU1evU) -ビッグO表記(とオメガとシータ) - 最良の数学的説明(ビデオ)(https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] スキナ: +- 実装するものは何もない +- [ ] [Harvard CS50 - 漸近表記(video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [BigO記法(一般的なクイックチュートリアル)(ビデオ)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] BigO表記(とオメガとシータ) - 最良の数学的説明(ビデオ)(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/) +- [ ] [アルゴリズム複雑さ分析への穏やかな紹介](http://discrete.gr/complexity/) - [ ] [成長の命令(ビデオ)](https://class.coursera.org/algorithmicthink1-004/lecture/59) -- [ ] [Asymptotics(video)](https://class.coursera.org/algorithmicthink1-004/lecture/61) -- [ ] [UCバークレービッグO(ビデオ)](https://youtu.be/VIS4YDpuP98) -- [ ] [UCバークレービッグオメガ(ビデオ)](https://youtu.be/ca3e7UVmeUc) +- [ ] [漸近線(Asymptotics)(video)](https://class.coursera.org/algorithmicthink1-004/lecture/61) +- [ ] [UCバークレー BigO(ビデオ)](https://youtu.be/VIS4YDpuP98) +- [ ] [UCバークレー Big オメガ(ビデオ)](https://youtu.be/ca3e7UVmeUc) - [ ] [償却分析(ビデオ)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] [「Big O」(ビデオ)を説明する](https://class.coursera.org/algorithmicthink1-004/lecture/63) +- [ ] [「Big Oを描く」(ビデオ)](https://class.coursera.org/algorithmicthink1-004/lecture/63) - [ ] TopCoder(漸化関係とマスター定理を含む): - [計算の複雑さ:セクション1](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-1/) - [計算の複雑さ:セクション2](https://www.topcoder.com/community/data-science/data-science-tutorials/computational-complexity-section-2/) @@ -511,32 +522,32 @@ Ankiフォーマットの私のフラッシュカードデータベース:http     講義の中には数学的にも余裕がある場合は、下にジャンプして -    離散数学ビデオを見て、バックグラウンドの知識を得る。 +    離散数学ビデオを見て、背景知識を得る。 ## データ構造 - ###配列 - 自動的にサイズ変更ベクトルを実装する。 - [ ] 説明: - - [アレイ(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [UCBerkley CS61B - 線形および多次元アレイ(ビデオ)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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) - - [ダイナミックアレイ(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - - [ギザギザアレイ(動画)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [ギザギザアレイ(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) + - [配列(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UCBerkley CS61B - 線形および多次元配列(ビデオ)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) + - [基本的な配列(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) + - [多次元(video)](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.youtube.com/watch?v=1jtrQqYpt7g) + - [ジャグ配列(ビデオ)](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) - 指定されたインデックスでitemを返し、インデックスが範囲外であれば吹き飛ばす - - [ ] プッシュ(項目) - - [ ] insert(index、item) - itemをindexに挿入し、そのインデックスの値と末尾の要素を右側にシフトする + - [ ] push(item) + - [ ] insert(index,item) - itemをindexに挿入し、そのインデックスの値と末尾の要素を右側にシフトする - [ ] prepend(item) - インデックス0に上記の挿入を使用できます - [ ] pop() - 最後から削除し、値を返す - [ ] delete(index) - インデックスの項目を削除し、すべての末尾の要素を左にシフトする @@ -548,85 +559,84 @@ Ankiフォーマットの私のフラッシュカードデータベース:http - [ ] 時間 - 最後に追加/削除するO(1)(スペースを増やすために償却される)、索引、または更新 - 他の場所に挿入/削除するO(n) -    - [ ] スペース - - メモリ内で連続しているため、プロキシミティがパフォーマンスに役立ちます - - 必要なスペース=(配列の容量は> = n)*アイテムのサイズですが、2nでもO(n) +    - [ ] 空間 + - メモリ内で連続しているため、プロキシミティはパフォーマンスに役立ちます + - 必要なスペース=(配列の容量, > = n)*アイテムのサイズですが、2nでもO(n) -- ###リンクリスト +- ### 連結リスト - [ ] 説明: - - [ ] [単独リンクされたリスト(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - - [ ] [CS 61B - リンクリスト1(動画)](https://www.youtube.com/watch?v=htzJdKoEmO0&list=PL4BBB74C7D2A1049C&index=7) - - [ ] [CS 61B - リンクリスト2(動画)](https://www.youtube.com/watch?v=-c4I3gFYe3w&index=8&list=PL4BBB74C7D2A1049C) + - [ ] [単独連結されたリスト(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - 連結リスト1(動画)](https://www.youtube.com/watch?v=htzJdKoEmO0&list=PL4BBB74C7D2A1049C&index=7) + - [ ] [CS 61B - 連結リスト2(動画)](https://www.youtube.com/watch?v=-c4I3gFYe3w&index=8&list=PL4BBB74C7D2A1049C) - [ ] [Cコード(動画)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) -            ビデオ全体ではなく、Node構造体とメモリ割り当てに関する部分だけです。 - - [ ] リンクリストと配列: - - [Core Linked Lists Vs Arrays(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) - - [Real World Linked Lists Vs Arrays(ビデオ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/quaUd/in-the-real-world-lists-vs)アレー) - - [ ] [なぜあなたはリンクされたリスト(ビデオ)を避けるべきですか](https://www.youtube.com/watch?v=YQs6IC-vgmo) - - [ ] Gotcha:ポインタの知識へのポインタが必要です: +            ビデオ全体ではなく、ノード構造体とメモリ割り当てに関する部分だけです。 + - [ ] 連結リスト Vs 配列: + - [コア連結リストs 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)アレー) + - [ ] [連結リスト(ビデオ)を避けるべき理由](https://www.youtube.com/watch?v=YQs6IC-vgmo) + - [ ] 分かったぞ!:ポインタの知識へのポインタが必要です:         (そのポインタが指すアドレスを変更する可能性のある関数へのポインタを渡すとき)         このページはptrからptrまでを把握するためのものです。このリストトラバーサルスタイルはお勧めしません。読みやすさと保守性は巧みさのために苦しんでいます。 - - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) + - [ポインターへのポインター](https://www.eskimo.com/~scs/cclass/int/sx8.html) - [ ] 実装する(私はテールポインタ&なしで行った): - [ ] size() - リスト内のデータ要素の数を返す - [ ] empty() - 空の場合はboolを返します - [ ] value_at(index) - n番目の項目の値を返します(最初は0から始まります) - [ ] push_front(value) - リストの先頭に項目を追加します - [ ] pop_front() - 前面アイテムを削除してその値を返します - - [ ] push_back(値) - 最後に項目を追加する + - [ ] push_back(value) - 最後に項目を追加する - [ ] pop_back() - 終了アイテムを削除し、その値を返します - [ ] front() - フロントアイテムの値を取得する - [ ] back() - 終了項目の値を取得する - [ ] insert(index、value) - インデックスに値を挿入するので、そのインデックスの現在のアイテムはインデックスの新しいアイテムによってポイントされます - [ ] erase(index) - 指定したインデックスのノードを削除する - [ ] value_n_from_end(n) - リストの最後からn番目のノードの値を返します - - [ ] reverse() - リストを逆順にする + - [ ] 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) - - [ ] [スタックを先入れ先出しで使用する(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4 .html) + - [ ] [スタックをの使用 Last-In First-Out(ビデオ)](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) - - [ ] [Queue(video)](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) - - [ ] テールポインタ付きリンクリストを使って実装する: - - エンキュー(値) - テールの位置に値を追加する - - dequeue() - 値を返し、最近追加された要素のうち少なくとも最近削除されたもの(前面) -        - 空の() +- ### キュー + - [ ] [キューの使用 First-In First-Out(ビデオ)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4 .html) + - [ ] [キュー(video)](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() - [ ] 固定長配列を使って実装する: - - エンキュー(値) - 利用可能なストレージの最後にアイテムを追加する + - enqueue(value) - 利用可能なストレージの最後にアイテムを追加する - dequeue() - 値を返し、最近追加された要素のうち最も古い要素を削除します -        - 空の() +        - empty() - full() - [ ] コスト: -        あなたが頭にエンキューし、テールでデキューするリンクリストを使った悪い実装はO(n) -            あなたが最後の要素の次の要素を必要とするため、各デキューを完全にトラバースさせるためです - - エンキュー:O(1)(償却、リンクリストと配列[プロービング]) - - デキュー:O(1)(リンクされたリストと配列) - - 空:O(1)(リンクリストと配列) + - 最後の要素の次の要素が必要になるため、先頭にエンキューし、末尾をデキューするリンクリストを使用する悪い実装はO(n)になり、デキューごとに完全なトラバーサルが発生します + - enqueue:O(1)(償却、連結リストと配列[プロービング]) + - dequeue:O(1)(連結リストと配列) + - empty:O(1)(連結リストと配列) -- ### ハッシュ表 +- ### ハッシュテーブル - [ ] 動画: - [ ] [連鎖によるハッシング(動画)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) - - [ ] [テーブルダブリング、Karp-Rabin(ビデオ)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [ダブリング、ラビン-カープ(ビデオ)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [公開アドレス指定、暗号化ハッシング(動画)](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(ビデオ)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) - - [ ] [(高度)パーフェクトハッシング(動画)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) + - [ ] [(上級)Randomization:ユニバーサル&完全 ハッシング(ビデオ)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(高度)完全ハッシング(動画)](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) + - [ ] [ハッシュ関数について(ビデオ)](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) - [ ] [ハッシングをサポートする(ビデオ)](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) - - [ ] [Core Hash Tables(ビデオ)](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) - [ ] [電話帳の問題(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) - [ ] 分散ハッシュテーブル: @@ -636,50 +646,49 @@ Ankiフォーマットの私のフラッシュカードデータベース:http - [ ] 線形プロービングを使用して配列で実装する - hash(k、m) - mはハッシュテーブルのサイズです - add(key、value) - キーがすでに存在する場合は、値を更新します。 - - 存在する(キー) + - exists(キー) - get(key) - - 削除(キー) + - remove(キー) -##その他の知識 +## その他の知識 -- ###バイナリ検索 - - [ ] [バイナリ検索(動画)](https://www.youtube.com/watch?v=D5SrAga1pno) - - [ ] [バイナリ検索(ビデオ)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/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/) - [ ] 実装: - - バイナリ検索(ソートされた整数の配列) - - 再帰を使用したバイナリ検索 + - 二分探索(ソートされた整数の配列) + - 再帰を利用した二分探索 - ###ビット演算 - - [ ] [ビットチートシート](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - (2 ^ 1から2 ^ 16および2 ^ 32までの2の累乗) + - [ ] [ビットチートシート- 2 ^ 1から2 ^ 16および2 ^ 32までの2の累乗の多くを知るべきです](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - [ ] &、|、^、〜、>>、<<を使ってビットを操作することについての本当の理解を得る - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - - [ ] 良いイントロ: -            [ビット操作(動画)](https://www.youtube.com/watch?v=7jkIUgLC29I) + - [ ]  [良いイントロ:ビット操作(動画)](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) + - [ ] [ビット演算](https://en.wikipedia.org/wiki/Bitwise_operation) - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) - [ ] [The Bit Twiddler](http://bits.stephan-brumme.com/) - - [ ] [ビットツイダーインタラクティブ](http://bits.stephan-brumme.com/interactive.html) + - [ ] [インタラクティブなBit Twiddler](http://bits.stephan-brumme.com/interactive.html) - [ ] 2と1の補数 - [バイナリ:Plusses&Minuses(なぜ2の補数を使うのか)(ビデオ)](https://www.youtube.com/watch?v=lKTsv6iVxV4) - - [1s補完](https://en.wikipedia.org/wiki/Ones%27_complement) - - [2s補完](https://en.wikipedia.org/wiki/Two%27s_complement) + - [1の補数](https://en.wikipedia.org/wiki/Ones%27_complement) + - [2の補数](https://en.wikipedia.org/wiki/Two%27s_complement) - [ ] カウントセットビット - [1バイトのビットを数える4つの方法(ビデオ)](https://youtu.be/Hzuzo9NJrlc) - - [カウントビット数](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) - - [32ビット整数で設定されたビット数を数える方法](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32ビット整数) + - [カウントビット](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) + - [セットビットの数を32ビット整数で数える方法](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32ビット整数) - [ ] 2の次の累乗に丸めます: - [2つの次のパワーに回す](http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) - [ ] スワップ値: - - [Swap](http://bits.stephan-brumme.com/swap.html) + - [スワップ](http://bits.stephan-brumme.com/swap.html)     - [ ] 絶対値: - [絶対整数](http://bits.stephan-brumme.com/absInteger.html) ## 木 -- ###木 - ノートと背景 +- ### 木 - メモと背景 - [ ] [シリーズ: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) - 基本的な木の構築 @@ -692,63 +701,63 @@ Ankiフォーマットの私のフラッシュカードデータベース:http             空間の複雑さ:最適:O(1)、最悪:O(n / 2)= O(n) - DFS(深さ優先探索) - [MIT(動画)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) -        - ノート: +        - メモ:             時間複雑度:O(n) -            スペースの複雑さ: +            空間の複雑さ:                 最良:O(log n) - 平均。木の高さ                 最悪:O(n) - - インオーダー(DFS:left、self、right) - - ポストオーダー(DFS:left、right、self) - - プレオーダー(DFS:自己、左、右) + - inorder(DFS:left、self、right) + - postorder(DFS:left、right、self) + - preorder(DFS:自己、左、右) -- ###バイナリ検索ツリー:BST - - [ ] [バイナリ検索ツリーレビュー(動画)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) +- ### 二分探索木:BST + - [ ] [二分探索木レビュー(動画)](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 ++: - - [ ] [バイナリ検索ツリー - C / C ++での実装(ビデオ)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) + - [ ] [二分探索木 - 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) - - [ ] [バイナリツリートラバーサル:Preorder、Inorder、Postorder(video)](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) - - [ ] [バイナリ検索ツリー(ビデオ)のInorder Successor](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [二分探索木(ビデオ)の最小要素と最大要素を検索](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) + - [ ] [二分木トラバーサル:Preorder、Inorder、Postorder(video)](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) + - [ ] [二分探索木(ビデオ)のInorder Successor](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - [ ] 実装: - - [ ] insert //ツリーに値を挿入する + - [ ] insert //木に値を挿入する - [ ] get_node_count //格納された値の数を取得する - - [ ] print_values //最小値から最大値までツリーの値を出力します - - [ ] delete_tree - - [ ] is_in_tree //与えられた値がツリーに存在する場合はtrueを返します + - [ ] print_values //最小値から最大値まで木の値を出力します + - [ ] delete_tree + - [ ] is_in_tree //与えられた値が木に存在する場合はtrueを返します - [ ] get_height //ノードの高さを返します(単一ノードの高さは1です) - - [ ] get_min //ツリーに格納されている最小値を返します - - [ ] get_max //ツリーに格納されている最大値を返します + - [ ] get_min //木に格納されている最小値を返します + - [ ] get_max //木に格納されている最大値を返します - [ ] is_binary_search_tree - [ ] delete_value - - [ ] get_successor //指定された値の後にツリーの次に高い値を返し、存在しなければ-1を返します + - [ ] get_successor //指定された値の後に木の次に高い値を返し、存在しなければ-1を返します -- ###ヒープ/プライオリティキュー/バイナリヒープ - - ツリーとして可視化されますが、通常はストレージ内で線形です(配列、リンクリスト) +- ### ヒープ/優先度つきキュー/二分ヒープ + - 木として可視化されますが、通常はストレージ内で線形です(配列、連結リスト) - [ ] [ヒープ](https://en.wikipedia.org/wiki/Heap_(data_structure)) - [ ] [はじめに(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) - - [ ] [Naive Implementations(video)](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) + - [ ] [ナイーブな実装(video)](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://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講義24:優先度キュー(ビデオ)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) - - [ ] [Linear Time BuildHeap(max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] [CS 61B講義24:優先度つきキュー(ビデオ)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) + - [ ] [線形時間BuildHeap(max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) - [ ] 最大ヒープを実装する: - - [ ] 挿入 + - [ ] insert - [ ] sift_up - 挿入に必要 - [ ] get_max - 最大項目を削除せずに返します - [ ] get_size() - 格納された要素の数を返す @@ -758,36 +767,36 @@ Ankiフォーマットの私のフラッシュカードデータベース:http - [ ] remove(i) - インデックスxのアイテムを削除する - [ ] heapify - heap_sortに必要な要素の配列からヒープを作成する - [ ] heap_sort() - ソートされていない配列を取り出し、最大ヒープを使用してソート済みの配列に変換します - - 注意:代わりにminヒープを使用すると、操作が節約されますが、必要な領域が2倍になります(インプレースでは実行できません)。 + - 注意:代わりにminヒープを使用すると、操作が節約されますが、必要な領域が2倍になります([in-place](https://ja.wikipedia.org/wiki/In-place%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0)では実行できません)。 -##並べ替え +## ソート -- [ ] ノート: +- [ ] note: - ソートを実装し、最良のケース/最悪のケース、それぞれの平均的な複雑さを知る: - バブルソートなし - ひどい - O(n ^ 2)、ただしn <= 16の場合を除く - ソートアルゴリズムの安定性( "Quicksortは安定していますか?") - [ソートアルゴリズムの安定性](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) - - [ソーティングアルゴリズムの安定性](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) - - [ソーティングアルゴリズムの安定性](http://www.geeksforgeeks.org/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/) + - [ ] 連結リストで使用できるアルゴリズムはどれですか?どの配列ですか?両方でどちら? + - 連結リストのソートはお勧めしませんが、マージソートは実行可能です。 + - [連結リストのマージソート](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) - ヒープソートについては、上記のヒープデータ構造を参照してください。ヒープソートは素晴らしいですが、安定していません。 - [ ] [Sedgewick - Mergesort(5ビデオ)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [1。 Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) - - [ ] [2。 Mergesortボトムアップ](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) + - [ ] [1。 マージソート](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) + - [ ] [2。 マージソート・ボトムアップ](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) - [ ] [3。複雑さの並べ替え](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - [ ] [4。コンパレータ](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - [ ] [5。安定性](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - [ ] [Sedgewick - Quicksort(4ビデオ)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [1。 Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [2。選択](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [3。 Duplicate Keys](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [4。システムソート](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [1. クイックソート](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [2. 選択](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [3. 重複キー](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [4. システムソート](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - [ ] UCバークレー: - [ ] [CS 61B講義29:ソートI(ビデオ)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29) @@ -798,14 +807,14 @@ Ankiフォーマットの私のフラッシュカードデータベース:http - [ ] [バブルソート(動画)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) - [ ] [バブルソートの分析(動画)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) - [ ] [挿入ソート、マージソート(動画)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) -- [ ] [挿入順(動画)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [挿入ソート(動画)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) - [ ] [マージソート(動画)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) - [ ] [クイックソート(動画)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) - [ ] [選択ソート(動画)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) - [ ] マージソートコード: - [ ] [出力配列(C)の使用](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - - [ ] [出力配列(Python)を使う](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [出力配列(Python)の使用](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) - [ ] [インプレース(C ++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) - [ ] クイックソートコード: - [ ] [Implementation(C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) @@ -819,202 +828,202 @@ Ankiフォーマットの私のフラッシュカードデータベース:http - ヒープソートについては、上記のヒープデータ構造を参照してください。 - [ ] 必須ではありませんが、私はそれらをお勧めしました: - - [ ] [Sedgewick - Radix Sorts(6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [1。 Javaの文字列](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) - - [ ] [2。 Key Indexed Counting](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) - - [ ] [3。最下位桁の最初の文字列の基数ソート](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) - - [ ] [4。最も重要な数字の最初の文字列の基数ソート](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [5。 3 Way Radix Quicksort](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [Sedgewick - 基数ソート(6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [1. Javaの文字列](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) + - [ ] [2. キーインデックスのカウント](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) + - [ ] [3. 最下位桁の最初の文字列の基数ソート](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) + - [ ] [4. 最も重要な数字の最初の文字列の基数ソート](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [5. 基数ソートの3つの方法](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - [ ] [6。接尾辞配列](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1) - [ ] [基数ソート](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) - [ ] [基数ソート(動画)](https://www.youtube.com/watch?v=xhr26ia4k38) - [ ] [基数ソート、ソート(線形時間指定の制約)(ビデオ)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [無作為化:Matrix Multiply、Quicksort、Freivaldsのアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [ランダム化:行列乗算、クイックソート、Freivaldsのアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - [ ] [線形時間で並べ替える(ビデオ)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) -要約すると、[15ソートアルゴリズム](https://www.youtube.com/watch?v=kPRA0W1kECg)の視覚的表現です。 +まとめとして、ここには[15ソートアルゴリズム](https://www.youtube.com/watch?v=kPRA0W1kECg)の視覚的表現があります。 このテーマの詳細が必要な場合は、[いくつかの科目の追加の詳細]の[ソート]の項を参照してください(#additional-detail-on-some-subjects) ##グラフ グラフはコンピュータサイエンスの多くの問題を表現するために使用することができるので、このセクションは木やソートのように長いです。 -- ノート: +- note: - メモリにグラフを表示するには4つの基本的な方法があります: - オブジェクトとポインタ - 隣接行列 - 隣接リスト - - 隣接地図 - - 各表現とその長所と短所をよく知っている + - 隣接マップ + - それぞれの表現とその長所と短所を熟知してください - BFSとDFS - 計算の複雑さとそのトレードオフ、そしてそれらを実際のコードに実装する方法を知っている - - 質問が表示されたら、まずグラフベースのソリューションを探し、見つからない場合は次に進みます。 + - 質問が表示されたら、まずグラフベースのソリューションを探し、それがなければ進んでください。 - [ ] Skiena Lectures - 素晴らしいイントロ: - [ ] [CSE373 2012 - 講義11 - グラフデータ構造(ビデオ)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) - [ ] [CSE373 2012 - 講義12 - 幅優先検索(ビデオ)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) - [ ] [CSE373 2012 - 講義13 - グラフアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) - - [ ] [CSE373 2012 - 講義14 - グラフアルゴリズム(ビデオ)(ビデオ)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - 講義15 - グラフアルゴリズム(動画2)(ビデオ)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - 講義16 - グラフアルゴリズム(コンター3)(ビデオ)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 講義14 - グラフアルゴリズム(1)(ビデオ)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 講義15 - グラフアルゴリズム(2)(動画)(ビデオ)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 講義16 - グラフアルゴリズム(3)(ビデオ)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - [ ] グラフ(レビューなど): - - [ ] [6.006シングルソース最短経路問題(ビデオ)](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のスピードアップ(ビデオ)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) -    グラフアルゴリズムI - トポロジカルソート、最小スパニングツリー、プリムのアルゴリズム - 講演6(ビデオ)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [Aduni:グラフアルゴリズムII - DFS、BFS、Kruskalのアルゴリズム、連合探索データ構造 - 講義7(ビデオ)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7 ) + - [ ] [6.006単一始点最短経路問題(ビデオ)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 ダイクストラ(ビデオ)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 ベルマン-フォード法(ビデオ)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 ダイクストラ法のスピードアップ(ビデオ)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) + - [ ] [Aduni:グラフアルゴリズムI - トポロジカルソート、最小スパニング木、プリムのアルゴリズム - 講演6(ビデオ)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [Aduni:グラフアルゴリズムII - DFS、BFS、クラスカル法のアルゴリズム、連合探索データ構造 - 講義7(ビデオ)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7 ) - [Aduni:グラフアルゴリズムIII:最短経路 - レクチャー8(ビデオ)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) - - [ ] [Aduni:Graph Alg。 IV:幾何学アルゴリズムの紹介 - 第9講(ビデオ)(https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] [Aduni:グラフアルゴリズムIV:幾何学アルゴリズムの紹介 - 第9講(ビデオ)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) - [ ] [CS 61B 2014(58:09から開始)(ビデオ)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) - [ ] [CS 61B 2014:加重グラフ(ビデオ)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) - - [ ] [欲張りアルゴリズム:最小スパニングツリー(ビデオ)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [欲張りアルゴリズム:最小スパニング木(ビデオ)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - [ ] [強固に接続されたコサラジュのアルゴリズムグラフアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=RpgcYiky7uw) -- フルコースラコース: - - [ ] [グラフ上のアルゴリズム(ビデオ)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) +- フルcourseraコース: + - [ ] [グラフのアルゴリズム(ビデオ)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - 私は実装します: - [ ] 隣接リストを持つDFS(再帰的) - [ ] 隣接リストを持つDFS(スタックで反復) - [ ] 隣接行列を持つDFS(再帰的) - [ ] 隣接行列を持つDFS(スタックで反復) -    隣接リストを持つ - [ ] BFS -    隣接行列を持つ[ - ] BFS - - [ ] 単一ソースの最短経路(ダイクストラ) - - [ ] 最小スパニングツリー + - [ ] 隣接リストを持つBFS + - [ ] 隣接行列を持つBFS + - [ ] 単一始点の最短経路(ダイクストラ) + - [ ] 最小スパニング木 - DFSベースのアルゴリズム(上記のAduniの動画を参照): - - [ ] サイクルをチェックする(トポロジカルソートに必要、開始前にサイクルをチェックするので) + - [ ] サイクルをチェックする(トポロジカルソートに必要.開始前にサイクルをチェックする) - [ ] トポロジカルソート - [ ] グラフ内の接続されたコンポーネントをカウントする - [ ] 強く接続されたコンポーネントを一覧表示する - [ ] 二部グラフをチェックする -Skienaの本(下記の書籍の節を参照)とインタビューの書籍 +Skienaの本(下記の書籍の節を参照)と面接の書籍 ##さらに多くの知識 - ###再帰 - - [ ] スタンフォードは再帰とバックトラックに関する講義を行います: - - [ ] [講義8 |プログラミング抽象概念(ビデオ)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] 再帰とバックトラックに関するスタンフォードの講義: + - [ ] [講義8 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) - [ ] [講義9 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) - - [ ] [講義10 |プログラミング抽象概念(ビデオ)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) - - [ ] [講義11 |プログラミング抽象概念(ビデオ)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) + - [ ] [講義10 |プログラミングの抽象化(ビデオ)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [講義11 |プログラミングの抽象化(ビデオ)](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) - [ ] [テール再帰(ビデオ)](https://www.youtube.com/watch?v=L1jjXGfxozc) - ###動的プログラミング - - この問題はかなり難しいかもしれません。なぜなら、各DPの可溶性問題は再帰関係として定義されなければならず、それを思い付くのは難しいかもしれないからです。 + - この問題はかなり難しいかもしれません。なぜなら、それぞれのDP可溶性問題は再帰関係として定義されなければならず、それを思い付くのは難しいかもしれないからです。 - DPの問題の多くの例を見て、あなたが関連するパターンをしっかりと理解するまでお勧めします。 - [ ] 動画: - Skienaのビデオは、時には見ることができないほど小さすぎるホワイトボードを使用することがあるため、フォローするのが難しい場合があります - - [ ] [Skiena:CSE373 2012 - 講義19 - 動的プログラミング入門(ビデオ)(https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) + - [ ] [Skiena:CSE373 2012 - 講義19 - 動的プログラミング入門(ビデオ)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) - [ ] [Skiena:CSE373 2012 - 講義20 - 編集距離(ビデオ)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) - [ ] [Skiena:CSE373 2012 - 講義21 - 動的プログラミング例(ビデオ)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) - - [ ] [Skiena:CSE373 2012 - 講義22 - 動的プログラミング(ビデオ)のアプリケーション](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) - - [Simonson:Dynamic Programming 0(59:18から開始)(ビデオ)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) - - [ ] [Simonson:ダイナミックプログラミングI - 講義11(ビデオ)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [Simonson:Dynamic Programming II - 講演12(ビデオ)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] [Skiena:CSE373 2012 - 講義22 - 動的プログラミングのアプリケーション(ビデオ)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Simonson:動的プログラミング0(59:18から開始)(ビデオ)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson:動的プログラミングI - 講義11(ビデオ)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson:動的プログラミングII - 講演12(ビデオ)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) - [ ] 個々のDP問題のリスト(それぞれ短い):             [動的プログラミング(動画)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - - [ ] Yale講義ノート: + - [ ] イェール講義ノート: - [ ] [動的プログラミング](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicプログラミング) - [ ] Coursera: - [ ] [RNA二次構造の問題(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) - - [ ] [動的プログラミングアルゴリズム(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) - - [ ] [DPアルゴリズム(ビデオ)の説明](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [動的プログラミングのアルゴリズム(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) + - [ ] [DPアルゴリズムの説明(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) - [ ] [DPアルゴリズムの実行時間(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) -        [[DP対再帰的実装(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) +        - [ ] [[DP Vs 再帰的実装(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) - [ ] [グローバル対配列アライメント(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) - [ ] [ローカル対配列アライメント(ビデオ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) - ### オブジェクト指向プログラミング - [ ] [オプション:UML 2.0シリーズ(動画)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - [ ] オブジェクト指向ソフトウェアエンジニアリング:UMLとJavaを使ったソフトウェア開発(21ビデオ): - - OOおよびOO設計の実践を十分に把握している場合は、これをスキップできます。 + - OOとOOの設計方法を十分に理解している場合は、これをスキップできます。 - [OOSE:UMLとJavaを使用したソフトウェア開発](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - [ ] SOLID OOP原則: - [ ] [Bob Martin SOLIDオブジェクト指向とアジャイルデザインの原則(ビデオ)](https://www.youtube.com/watch?v=TMuno5RZNeE) - - [ ] [ソリッド原則(ビデオ)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) - - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html)| [各オブジェクトへの単一責任](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) + - [ ] [SOLID原則(ビデオ)](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 - [Open / Closed Principal](http://www.oodesign.com/open-close-principle.html)| [プロダクションレベルではオブジェクトは拡張の準備ができていますが、変更はできません](https://en.wikipedia.org/wiki/Open/closed_principle) + - [ ] O - [オープン/クローズの原則l](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 - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html)| [基本クラスと派生クラスは `IS A`プリンシパルに従います](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) + - [ ] 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=ja) - - [ ] I - [インタフェース分離原理](http://www.oodesign.com/interface-segregation-principle.html)|クライアントは、使用しないインタフェースを強制的に実装するべきではありません - - [インタフェース分離原理5分(ビデオ)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) + - [ ] I - [インタフェース分離の原則](http://www.oodesign.com/interface-segregation-principle.html)|クライアントは、使用しないインタフェースを強制的に実装するべきではありません + - [インタフェース分離の原則5分(ビデオ)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) - [もっと味](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=ja) - - [ ] D - [Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html)|オブジェクトの構成における依存関係を減らす。 + - [ ] 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=ja) - ### デザインパターン - [ ] [クイックUMLレビュー(ビデオ)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) - [ ] これらのパターンを学ぶ: - - [ ] 戦略 - - [ ] シングルトン - - [ ] アダプタ - - [ ] プロトタイプ - - [ ] デコレータ - - [ ] 訪問者 - - [ ] 工場、抽象工場 - - [ ] ファサード - - [ ] 観察者 - - [ ] プロキシ - - [ ] 委任 - - [ ] コマンド - - [ ] 状態 - - [ ] 記念品 - - [ ] イテレータ - - [ ] コンポジット - - [ ] フライウェイト + - [ ] Strategy(戦略) + - [ ] Singleton(単一要素) + - [ ] Adapter(アダプタ) + - [ ] Prototype(原型) + - [ ] Decorator(装飾者) + - [ ] Visitor(訪問者) + - [ ] Factory,AbstractFactory(工場、抽象工場) + - [ ] Facade(外見) + - [ ] Observer(観察者) + - [ ] Proxy(代理) + - [ ] Delegate(委任) + - [ ] Command(命令) + - [ ] State(状態) + - [ ] Memento(記念品) + - [ ] Iterator(イテレータ) + - [ ] Composite(合成) + - [ ] Flyweight(フライ級) - [ ] [第6章(パート1) - パターン(ビデオ)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) - - 抽象化 - 発生、一般階層、プレーヤー役割、シングルトン、オブザーバー、代表団(ビデオ)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index= 12&リスト= PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [第6章(パート3) - アダプタ、ファサード、変更不可、読み取り専用インターフェイス、プロキシ(ビデオ)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [ ] [一連の動画(27ビデオ)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) + - [ ] [第6章(パート2) - 抽象化 - 発生、一般階層、プレーヤーロール、シングルトン、オブザーバー、代表団(ビデオ)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [第6章(パート3) - アダプタ、ファサード、変更不可、読み取り専用インターフェイス、プロキシ(ビデオ)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [ビデオシリーズ(27ビデオ)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) - [ ] [ヘッドファーストデザインパターン](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) - 正式な本は「デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素」であることは分かっていますが、ヘッドファーストはOOの初心者には最適です。 - - [ ] [参考:101のデザインパターンとヒント(開発者向け)](https://sourcemaking.com/design-patterns-and-tips) + - [ ] [参考:開発者のための101のデザインパターンとヒント](https://sourcemaking.com/design-patterns-and-tips) - [ ] [人間のデザインパターン](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) -- ###コンビナトリアル(nをkとする)と確率 - - [ ] [数学のスキル:ファクター、パーミュテーション、コンビネーションの検索方法(選択)(ビデオ)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) +- ###組み合わせ(nCk)と確率 + - [ ] [数学のスキル:階乗、順列、組み合わせの見つけ方(選択)(ビデオ)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) - [ ] [学校を作る:確率(ビデオ)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) - [ ] [学校を作る:確率とマルコフ連鎖(ビデオ)](https://www.youtube.com/watch?v=dNaJg-mLobQ) - [ ] Khan Academy: - コースのレイアウト: - [ ] [基本理論的確率](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) - ちょうどビデオ - 41(それぞれ単純で、それぞれ短いです): - - [ ] [確率説明(ビデオ)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) -- ### NP、NP-完全近似アルゴリズム - - 旅行者のセールスマンやナップザックの問題など、NP完全問題の最も有名なクラスについて知っています。 -        面接官があなたに偽装して尋ねると、それらを認識することができます。 - - NP完成の意味を知る。 + - [ ] [確率の説明(ビデオ)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) +- ### NP、NP-完全/近似アルゴリズム + - 巡回セールスマン問題やナップザック問題など、NP完全問題の最も有名なクラスについて知りましょう。 +       そうすれば面接官がこれらについて偽装して尋ねるとき、それらを認識することができます。 + - NP完全の意味を知る。 - [ ] [計算上の複雑さ(ビデオ)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) - [ ] Simonson: - - [ ] [Greedy Algs。 II&NP完全性へのイントロ(ビデオ)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [貪欲アルゴリズム。 II&NP完全性へのイントロ(ビデオ)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) - [ ] [NP完全性II&リダクション(ビデオ)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - [ ] [NP完全性III(ビデオ)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - [ ] [NP完全性IV(ビデオ)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] スキナ: - - [ ] [CSE373 2012 - 講義23 - NP完全性入門(ビデオ)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) - - [ ] [CSE373 2012 - 講義24 - NP完全性証明(ビデオ)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - 講演25 - NP完全性挑戦(ビデオ)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [複雑さ:P、NP、NP完全性、リダクション(ビデオ)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [CSE373 2012 - 講義23 - NP完全性の紹介(ビデオ)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - 講義24 - NP完全性の証明(ビデオ)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 講演25 - NP完全性への挑戦(ビデオ)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [複雑さ:P、NP、NP完全性、削減(ビデオ)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) - [ ] [複雑さ:近似アルゴリズム(ビデオ)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) - [ ] [複雑さ:固定パラメータアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - ピーター・ノヴィグ(Peter Norvig)は、セールスマンの問題を解決するために最適なソリューションについて議論しています。 - - [ジュピターノート](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) + - ピーター・ノヴィグ(Peter Norvig)は、セールスマンの問題を解決するための最適なソリューションについて説明しています。 + - [JupyterNotebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) - あなたが持っているなら、CLRSの1048 - 1140ページ。 - ###キャッシュ - [ ] LRUキャッシュ: - - [ ] [LRUキャッシュの魔法(100日間のGoogle Dev)(ビデオ)](https://www.youtube.com/watch?v=R5ON3iwx78M) + - [ ] [LRUキャッシュの魔法(Google Devの100日間)(ビデオ)](https://www.youtube.com/watch?v=R5ON3iwx78M) - [ ] [LRU(ビデオ)の実装](https://www.youtube.com/watch?v=bq6N7Ym81iI) - [ ] [LeetCode - 146 LRU Cache(C ++)(video)](https://www.youtube.com/watch?v=8-FZRAjR7qU) - [ ] CPUキャッシュ: @@ -1023,7 +1032,7 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - ###プロセスとスレッド - [ ] コンピュータサイエンス162 - オペレーティングシステム(25ビデオ): - - プロセスとスレッド用 + - プロセスとスレッドのためのビデオ表示1-11 - [オペレーティングシステムとシステムプログラミング(ビデオ)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) - [プロセスとスレッドの違いは何ですか?](https://www.quora.com/What-is-the-difference-between-a-process-and-thread) - カバー: @@ -1032,67 +1041,67 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - プロセス - スレッド - ロック - - mutexes - - セマフォー - - モニター - - 彼らはどのように動作する + - ミューテックス + - セマフォ + - モニタ(同期) + - 彼らの動作の仕方 - デッドロック - ライブロック - CPUの動作、割り込み、コンテキストの切り替え - - マルチコアプロセッサを使用した最新の並行性構成 + - マルチコアプロセッサを使用した最新の並行構成 - [ページング、セグメンテーション、仮想メモリ(動画)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - [割り込み(動画)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - - [スケジュール設定(動画)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) - - プロセスリソースのニーズ(メモリ:コード、静的ストレージ、スタック、ヒープ、ファイル記述子、I / O) + - [スケジューリング(動画)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) + - プロセスリソースのニーズ(メモリ:コード、静的ストレージ、スタック、ヒープ、ファイル記述子、I/O) - スレッドリソースの必要性(同じプロセス内の他のスレッドとの上の(マイナススタック)の共有、それぞれが独自のpc、スタックカウンタ、レジスタ、およびスタックを持つ) - フォークは、新しいプロセスがメモリに書き込むまで、実際には書き込み時にコピー(読み取り専用)され、次に完全なコピーを行います。 - コンテキストスイッチ - オペレーティングシステムとその基盤となるハードウェアによってコンテキスト切り替えが開始される仕組み - - [ ] [C ++のスレッド(シリーズ - 10ビデオ)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) + - [ ] [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) + - [ ] [Python GIL(2010)について理解する](https://www.youtube.com/watch?v=Obt-vMVdM8s) - [参考文献](http://www.dabeaz.com/GIL) - [ ] [David Beazley - 地上からのPython並行処理:LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4) - [ ] [基調講演David Beazley - 興味のあるトピック(Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU) - - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) + - [ ] [Pythonのミューテックス](https://www.youtube.com/watch?v=0zaPs8OtyKY) - ###論文 - - 全面的に完全に理解することは、あなたが持っているより多くの時間がかかるでしょう。私は論文とそのセクションを選択することをお勧めします。 + - 完全に理解した上ですべてを読むことは、あなたが持っているより多くの時間がかかるでしょう。私は論文とそのセクションを選択することをお勧めします。 - [古典的な論文を愛する?](https://www.cs.cmu.edu/~crary/819-f09/) - [ ] [1978:順次プロセスの通信](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - [Goで実装](https://godoc.org/github.com/thomas11/csp) - - [ ] [2003:The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) + - [ ] [2003:The Googleファイルシステム](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) - 2012年に巨像に置き換えられました - [ ] [2004:MapReduce:大規模クラスタでのデータ処理の簡略化](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) - 主にCloud Dataflowに置き換えられましたか? - [ ] [2006:Bigtable:構造化データ用分散ストレージシステム](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - [Google BigQueryの内部を見る](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - [ ] [2006:疎結合分散システムのChubby Lockサービス](https://research.google.com/archive/chubby-osdi06.pdf) - - [ ] [2007:Dynamo:Amazonの高可用キー値ストア](https://www.akkadia.org/drepper/cpumemory.pdf) + - [ ] [2007:Dynamo:Amazonの高可用性 key valueストア](https://www.akkadia.org/drepper/cpumemory.pdf) - Dynamo紙がNoSQL革命を開始 - すべてのプログラマーがメモリについて知っておくべきこと(非常に長く、著者はいくつかのセクションのスキップを奨励する)](https://www.akkadia.org/drepper/cpumemory.pdf) - [ ] [2010:Dapper、大規模分散システム追跡基盤](https://research.google.com/pubs/archive/36356.pdf) - [ ] [2010:Dremel:Web-Scaleデータセットのインタラクティブ解析](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) - [ ] [2012:Googleの巨像](https://www.wired.com/2012/07/google-colossus/) - - 紙がありません + - 論文がありません - [ ] 2012:AddressSanitizer:高速アドレス整合性チェッカー: - - [ペーパー](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) + - [論文](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) - [ビデオ](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany) - [ ] 2013:スパナ:Googleのグローバル分散データベース: - - [ペーパー](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) + - [論文](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) - [ビデオ](https://www.usenix.org/node/170855) - - [ ] [2014年:機械学習:技術的な負債の高い金利のクレジットカード](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) + - [ ] [2014年:機械学習:技術的負債の高利貸しクレジットカード](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) - [ ] [2015:Googleの継続的なパイプライン](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) - [ ] [2015年:大規模な高可用性:Googleの広告用データ基盤の構築](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) + - [ ] [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、Kubernetes](http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/44843.pdf) - ###テスト - カバーするために: - - ユニットテストの仕組み + - ユニット(単体)テストの仕組み - モックオブジェクトとは何ですか? - 統合テストとは - 依存性注入とは @@ -1110,7 +1119,7 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [ ] [テストの書き方](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) - ###スケジューリング - - OSで、どのように動作するのですか + - OSで、どのように動作するか - オペレーティングシステムのビデオから収集できます - ###システムルーチンを実装する @@ -1119,31 +1128,30 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - ###文字列の検索と操作 - [ ] [Sedgewick - 接尾辞配列(ビデオ)](https://www.youtube.com/watch?v=HKPrVm5FWvg) - - [ ] [Sedgewick - サブストリング検索(動画)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [1。サブストリング検索の紹介](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [2。ブルートフォースサブストリング検索](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) - - [ ] [3。 Knuth-Morris Pratt](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [4。 Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) - - [ ] [5。 Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [Sedgewick - サブストリング(文字列の一部)検索(動画)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) + - [ ] [1. サブストリング検索の紹介](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) + - [ ] [2. ブルートフォースサブストリング検索](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) + - [ ] [3. クヌース・モーリス・プラット法](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [4. ボイヤー-ムーア文字列検索アルゴリズム](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) + - [ ] [5. ラビン-カープ文字列検索アルゴリズム](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - [ ] [テキストの検索パターン(ビデオ)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text)     このテーマについてさらに詳しく知りたい場合は、[いくつかの科目の追加の詳細]の「文字列のマッチング」の項を参照してください(#additional-detail-on-some-subjects) -- ###試行 - - 試行の種類が異なることに注意してください。いくつかは接頭辞を持ち、いくつかは接頭辞を持ち、あるものはビットの代わりに文字列を使います -        パスを追跡する。 +- ###トライ木 + - さまざまなトライ木があることに注意してください。いくつかは接頭辞を持ち、あるものはパスを追跡するビットの代わりに文字列を使用します。 - 私はコードを読んだが、実装しないだろう。 - [ ] [Sedgewick - 試してみる(3ビデオ)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [1。 R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [2。 Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [3。キャラクターベースの操作](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) + - [ ] [1. R Way トライ木](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [2. 3分探索木](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [3. キャラクターベースの操作](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) - [ ] [データ構造とプログラミング手法に関する注記](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#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) - - [ ] [Trie(ビデオ)の実装](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) + - [ ] [トライ木の紹介(ビデオ)](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) - [ ] [Trie:無視されたデータ構造](https://www.toptal.com/java/the-trie-a-neglected-data-structure) - - [ ] [TopCoder - 試用版の使用](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/) + - [ ] [TopCoder - トライ木の使用](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) @@ -1155,10 +1163,10 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [ ] [すべてのソフトウェア開発者が絶対に最低限必要とする、絶対にUnicodeと文字セットについて熟知していること](http://www.joelonsoftware.com/articles/Unicode.html) - [ ] [すべてのプログラマーが、エンコーディングと文字セットについて知る必要があることは間違いない](http://kunststube.net/encoding/) -- ###エンディアン - - [ ] [ビッグ・アンド・リトル・エンディアン](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html) - - [ ] [ビッグエンディアン対リトルエンディアン(ビデオ)](https://www.youtube.com/watch?v=JrNF0KRAlyo) - - [ ] [Big And Little Endian Inside / Out(ビデオ)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) +- ###バイト順(エンディアン) + - [ ] [ビッグエンディアンとリトルエンディアン](https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html) + - [ ] [ビッグエンディアン Vs リトルエンディアン(ビデオ)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [ ] [ビッグエンディアンとリトルエンディアンの イン/アウト(ビデオ)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) - カーネル開発者のための非常に技術的な話。ほとんどがあなたの頭の上にある場合は心配しないでください。 - 前半で十分です。 @@ -1174,7 +1182,7 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [ ] [SSL / TLS](https://www.youtube.com/watch?v=Rp3iZUvXWlM) - [ ] [HTTP 2.0](https://www.youtube.com/watch?v=E9FxNzv1Tr8) - [ ] [ビデオシリーズ(21ビデオ)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IggfoqO4iPnPYQui46QqT0j) - - [ ] [不確かさのサブネット化 - 第5部CIDR表記](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] [詳解サブネット化 - 第5部CIDR表記](https://www.youtube.com/watch?v=t5xYI0jzOf4) - [ ] ソケット: - [ ] [Java - Sockets - Introduction(video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - [ ] [ソケットプログラミング(ビデオ)](https://www.youtube.com/watch?v=G75vN2mnJeQ) @@ -1182,9 +1190,9 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 ##システム設計、スケーラビリティ、データ処理 - **4年以上の経験があれば、システム設計の質問を期待できます。** - スケーラビリティとシステム設計は、多くのトピックとリソースを持つ非常に大きなトピックです。 -      拡張可能なソフトウェア/ハードウェアシステムを設計する際には、考慮すべき点がたくさんあります。 +      スケーラビリティ(拡張可能)なソフトウェア/ハードウェアシステムを設計する際には、考慮すべき点がたくさんあります。       これにかなりの時間を費やすことを期待してください。 -- 考察: +- 考慮事項: - スケーラビリティ - 大きなデータセットを単一の値に変換する - あるデータセットを別のデータセットに変換する @@ -1198,102 +1206,102 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - トレードオフ - パフォーマンス分析と最適化 -- [ ] **ここをクリック**:[The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] **ここをクリック**:[システム設計入門](https://github.com/donnemartin/system-design-primer) - [ ] [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 - システム設計 - インタビュー/) +- [ ] [技術面接で設計質問に答えるための準備方法](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、4NF(ビデオ)](https://www.youtube.com/watch?v=UrYLYV7WSHM) -- [ ] [System Design Interview](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/) +- [ ] [システム設計の面接](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) - [ ] [データセンター間の取引(動画)](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) - - [ユースケースとマルチパクソーズの拡張動画](https://www.youtube.com/watch?v=JEpsBg0AO6o) - - [ペーパー](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) + - [ユースケースとマルチパクソスによる拡張動画](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) - [ ] スケーラビリティ: - [ ] [概要(動画)](https://www.youtube.com/watch?v=-W9F__D3oY4) - [ ] 短いシリーズ: - - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) + - [クローン](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/ja/distsys.html) - - [ ] [分散コンピューティングの説明](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グラフ処理](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) - - [ ] [Jeff Dean - Googleでソフトウェアシステムを構築し、教訓(ビデオ)](https://www.youtube.com/watch?v=modXC5IWTJI) - - [ ] [規模の設計システムの紹介](http://lethain.com/introduction-to-architecting-systems-for-scale/) - - [ ] [App EngineとCloud Datastore(ビデオ)を使用して世界中の視聴者にモバイルゲームを拡大](https://www.youtube.com/watch?v=9nWyWwY2Onc) - - [ ] [GoogleがPlanet-Scale Infra(プラチナスケールインフラ)のプラネットスケールエンジニアリングを行う仕組み](https://www.youtube.com/watch?v=H4vMcD7zKM0) + - [ ] [分散コンピューティングの説明の誤り](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 - Googleのソフトウェアシステム構築と教訓(ビデオ)](https://www.youtube.com/watch?v=modXC5IWTJI) + - [ ] [スケールのための設計システムの紹介](http://lethain.com/introduction-to-architecting-systems-for-scale/) + - [ ] [App EngineとCloud Datastoreを使用してモバイルゲームを世界中の視聴者に拡大(ビデオ)](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [Googleがプラネットスケールのインフラのプラネットスケールエンジニアリングを行う仕組み](https://www.youtube.com/watch?v=H4vMcD7zKM0) - [ ] [アルゴリズムの重要性](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) - - [ ] [Scale at Facebook(2009)](https://www.infoq.com/presentations/Scale-at-Facebook) -    Facebook(2012年)、「10億ユーザー向けビルド(ビデオ)」(https://www.youtube.com/watch?v=oodS71YtkGU) + - [ ] [Facebook(2009)でスケール](https://www.infoq.com/presentations/Scale-at-Facebook) + - [ ] [Facebook(2012年)、「10億ユーザー向けビルド(ビデオ)」](https://www.youtube.com/watch?v=oodS71YtkGU) - [ ] [ロングゲームのためのエンジニアリング - Astrid Atkinson Keynote(ビデオ)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) - [ ] [7年間のYouTubeスケーラビリティレッスン30分](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html ) - [動画](https://www.youtube.com/watch?v=G-lGCC4KKok) - - [ ] [ペイパルが毎日何十億ものトランザクションにスケーリングされる方法(8VMだけを使用)](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using -ju.html) + - [ ] [ペイパルが毎日何十億ものトランザクションにスケーリングされる方法(8VMだけを使用)](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によるエンジニアリング文化(ビデオ)](https://www.youtube.com/watch?v=3vV4YiqKm1o) - - Amazonが独自のマイクロサービスアーキテクチャに導いたこと(http://thenewstack.io/led-amazon-microservices-architecture/) - - [圧縮するか圧縮しない、それはUberの質問でした](https://eng.uber.com/trip-data-squeeze/) - - [ ] [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) + - [ ] [Jon CowieによるEtsyのスケールとエンジニアリング文化の中の一見(ビデオ)](https://www.youtube.com/watch?v=3vV4YiqKm1o) + - [ ] [Amazonは独自のマイクロサービスアーキテクチャをどのように導いたか](http://thenewstack.io/led-amazon-microservices-architecture/) + - [ ] [圧縮するか圧縮しないか、それはUberの質問でした](https://eng.uber.com/trip-data-squeeze/) + - [ ] [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-an.html) + - [ ] [単一のデータセンターからフェイルオーバーするための、Googleのネイティブマルチホームアーキテクチャへの移行](http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) - [ ] [スパナ](http://highscalability.com/blog/2012/9/24/google-spanners-most-surprising-revelation-nosql-is-out-and.html) - - [Egnyteアーキテクチャ:マルチペタバイト分散システムの構築とスケーリングの教訓](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) - - [ ] [1日あたり何百万ものリクエストを処理する画像最適化技術](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:どのようにして最大のレコメンデーションエンジンの誰があなたが次に誰を見るか決定する?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of- the-largest-recommendation-engines-de.html) + - [ ] [Egnyteアーキテクチャ:マルチペタバイト分散システムの構築とスケーリングの教訓](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) + - [ ] [1日あたり何百万ものリクエストを処理する画像最適化技術](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で1,100万人以上のユーザーに拡大するための初心者向けガイド(http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million- users-on-amazons.html) - - [ ] [ドッカーの効果待ち時間の使用方法](http://highscalability.com/blog/2015/12/16/how-does-the-use-of-docker-effect-latency.html) +    - [ ] [AmazonのAWSで1,100万人以上のユーザーに拡大するための初心者向けガイド](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はGoogleに存在する脅威に対抗していますか?](http://highscalability.com/blog/2015/12/14/does-amp-counter-an-existential-threat-to-google.html) - [ ] [全Netflixスタックの360度ビュー](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) - - [ ] [Serverless(非常に長い、要点が必要)](http://martinfowler.com/articles/serverless.html) - - [ ] [Instagramのパワーは何百ものインスタンス、何十ものテクノロジ](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) - - [シンクキャストアーキテクチャ - 毎日1,500時間の音声を生成する](http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d。 html) + - [ ] [サーバーレス(非常に長い、要点が必要)](http://martinfowler.com/articles/serverless.html) + - [ ] [Instagramを動かすもの:何百ものインスタンス、数十のテクノロジ](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) + - [ ] [シンクキャストアーキテクチャ - 毎日1,500時間の音声を生成する](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のソーシャルゲームアーキテクチャ - 50百万人の月間ユーザーと成長(http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) ) - - [ ] [アーキテクチャ - 40Mビジター、200M動的ページビュー、30TBデータ](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view .html) + - [ ] [Playfishのソーシャルゲームアーキテクチャ - 月間5000万人のユーザーと成長](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) ) + - [ ] [アーキテクチャ - 40Mビジター、200Mダイナミックページビュー、30TBデータ]() - [ ] [PlentyOfFishアーキテクチャ](http://highscalability.com/plentyoffish-architecture) - [ ] [Salesforceのアーキテクチャ - どのように130億回のトランザクションを処理するか](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) ) - - [ESPNの規模でのアーキテクチャ - 毎秒100,000のDuh Nuh Nuhsで動作](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh -nuh-nuhs.html) - - [ ] 一緒にサービスを接着できる技術の情報については、下記の「メッセージング、シリアライゼーション、およびキューイングシステム」を参照してください。 + - [ ] [ESPNの規模でのアーキテクチャ - 毎秒100,000のDuh Nuh Nuhsで動作](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、「@Twitterの大小データ」(ビデオ)](https://www.youtube.com/watch?v=5cKTP36HVgI) - [スケール時のタイムライン](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) - - さらに詳しくは、[Video Series](ビデオシリーズ)セクションの「Mining Massive Datasets」ビデオシリーズを参照してください。 + - さらに詳しくは、[ビデオシリーズ](ビデオシリーズ)セクションの「Mining Massive Datasets」ビデオシリーズを参照してください。 -- [ ] システム設計プロセスの練習:紙で作業しようとするいくつかのアイデアがあります。実際にどのように扱われたのかについてのいくつかの文書があります。 - - レビュー:[The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] システム設計プロセスの練習:紙で作業しようとするいくつかのアイデアがあります。実際にどのように処理されたかについてのいくつかの文書があります。 + - レビュー:[システム設計入門](https://github.com/donnemartin/system-design-primer) - [HiredInTechのシステム設計](http://www.hiredintech.com/system-design/) - [チートシート](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) - 流れ: 1. 問題と範囲を理解する: -            - インタビュアーの助けを借りてユースケースを定義する +            - 面接官の助けを借りてユースケースを定義する - 追加の機能を提案する - - インタビュアーが範囲外とみなすアイテムを削除する + - 面接官が範囲外とみなすアイテムを削除する - 高可用性が必要と仮定し、ユースケースとして追加する 2. 制約について考える: - - 1か月あたりのリクエスト数を尋ねる - - 1秒あたりにどれくらい多くのリクエストをするか(彼らはボランティアでもよいし、あなたに数学をさせるかもしれない) - - 読み込みの見積もりと書き込みの割合 - - 推定時に80/20ルールを覚えておいてください + - 毎月のリクエスト数を尋ねる + - 毎秒どれくらいのリクエストをするか(彼らはボランティアでもよいし、あなたに数学をさせるかもしれない) + - 読み込みと書き込みの割合を見積もります + - 推定時に80/20ルールを守って下さい - 1秒あたりに書き込まれるデータの量 - 5年間に必要な合計ストレージ - - 1秒あたりに読み取られるデータの量 + - 毎秒読み取られるデータの量 3. 抽象的なデザイン: - レイヤー(サービス、データ、キャッシング) - インフラストラクチャ:負荷分散、メッセージング @@ -1307,68 +1315,67 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [画像共有システムの設計](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) - [推薦システムの設計](http://ijcai13.org/files/tutorial_slides/td3.pdf) - [URL短縮システムの設計:上からコピー](http://www.hiredintech.com/system-design/the-system-design-process/) - - [キャッシュシステム設計](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) + - [キャッシュシステムの設計](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) --- ##最終レビュー     このセクションでは、重要な概念のほとんどを見直すためにかなり短いビデオを見ることができます。 -    あなたが頻繁にリフレッシャーをしたいならいいですね。 +    あなたが頻繁に再学習をしたいならいいですね。 - [ ] 2〜3分短編ビデオシリーズ(23ビデオ) - [動画](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] マイケル・サンボール(18ビデオ) +- [ ] 2〜5分の短編シリーズビデオ - Michael Sambol(18ビデオ) - [動画](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) - [ ] [Sedgewick Videos - アルゴリズムI](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) - - [ ] [01。ユニオン検索](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) - - [ ] [02。アルゴリズムの分析](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) - - [ ] [03。スタックとキュー](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) - - [ ] [04。初級](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) - - [ ] [05。 Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [06。 Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [07。優先度キュー](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) - - [ ] [08。 Elementary Symbol Tables](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) - - [ ] [09。平衡検索ツリー](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) - - [ ] [10。 BSTの幾何学的応用](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) - - [ ] [11。ハッシュテーブル](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) + - [ ] [01.Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) + - [ ] [02.アルゴリズムの分析](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) + - [ ] [03.スタックとキュー](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) + - [ ] [04.初級ソート](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) + - [ ] [05. マージソート](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [06. クイックソート](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [07.優先度つきキュー](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) + - [ ] [08. 基本記号表](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) + - [ ] [09. 平衡探索木](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) + - [ ] [10. BSTの幾何学的応用](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) + - [ ] [11.ハッシュテーブル](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) - [ ] [Sedgewick Videos - アルゴリズムII](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50) - - [ ] [01。間違ったグラフ](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) - - [ ] [02。 (Directed Graphs)](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) - - [ ] [03。最小スパニングツリー](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj) - - [ ] [04。最短経路](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) - - [ ] [05。最大フロー](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) - - [ ] [06。基数ソート](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [07。試してください](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [08。サブストリング検索](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [09。正規表現](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) - - [ ] [10。データ圧縮](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) - - [ ] [11。減額](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF) - - [ ] [12。リニアプログラミング](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) - - [ ] [13。難易度](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) + - [ ] [01.無向グラフ](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) + - [ ] [02. 有向グラフ](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) + - [ ] [03.最小スパニング木](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj) + - [ ] [04.最短経路](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) + - [ ] [05.最大フロー](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) + - [ ] [06.基数ソート](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [07.トライ木](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [08.部分文字列検索](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [09.正規表現](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) + - [ ] [10.データ圧縮](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) + - [ ] [11.リダクション](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF) + - [ ] [12.線形プログラミング](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) + - [ ] [13.難易度](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) --- ##コーディングの質問練習 -上のすべてのコンピュータ科学のトピックを知ったので、コーディングの問題に答える練習をしましょう。 +上のすべてのコンピュータサイエンスのトピックを知ったので、コーディングの問題に答える練習をしましょう。 **コーディング質問の練習は、プログラミング問題への回答を記憶することではありません。** プログラミングの問題を練習する必要がある理由 - 問題の認識、そして適切なデータ構造とアルゴリズムの適合 - 問題のための要件を集める -- インタビューであなたのように問題を話している +- 面接であなたのように問題をあなたの方法で話している - コンピュータではなく、ホワイトボードや紙でのコーディング - ソリューションの時間と空間の複雑さが増す - ソリューションのテスト -インタビューでは、体系的でコミュニケーション的な問題解決の素晴らしいイントロがあります。あなたはプログラミングからこれを得るでしょう -インタビューの本もありましたが、私はこの優れた発見しました: +面接では、体系的でコミュニケーション的な問題解決の素晴らしいイントロがあります。あなたはプログラミングの面接の本からもこれを手に入れるでしょうが、私はこの優れた発見しました: [アルゴリズム設計キャンバス](http://www.hiredintech.com/algorithm-design/) 自宅にホワイトボードはありませんか?それは理にかなっている。私は変わった人で、大きなホワイトボードを持っています。ホワイトボードの代わりに、 -アートストアからの大きな描画パッド。あなたはソファに座って練習することができます。これが私の「ソファホワイトボード」です。 +アートストアから大きなドローイングパッドを拾い上げます。あなたはソファに座って練習することができます。これが私の「ソファホワイトボード」です。 私はスケールの写真にペンを追加しました。ペンを使うと、あなたは消すことができます。すぐに厄介になる。 ![私のソファホワイトボード](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) @@ -1376,15 +1383,15 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 補足: - [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インタビュー資料](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) -- [特定の言語をより良くするための練習](http://exercism.io/languages) +- [動的プログラミング - 初心者から上級者まで](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/) +- [MIT面接資料](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) +- [特定の言語でより良くなるための練習](http://exercism.io/languages) **プログラミングの問題を読んでやる(この順番で):** -- [ ] [プログラミングインタビュー公開:あなたの次の仕事への秘密、第2版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) +- [ ] [プログラミング面接公開:あなたが次の仕事に着任する秘訣、第2版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - C、C ++、Javaの回答 -- [ ] [Cracking the Coding Interview、第6版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) +- [ ] [コーディング面接をクラッキング、第6版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - Javaでの回答 [上記のブックリスト](#ブックリスト)を参照してください @@ -1394,10 +1401,10 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 あなたの脳を学んだら、脳を働かせてください。 できるだけ多く、毎日コーディングの課題に取り組んでください。 -- [ ] [解決方法](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-find-a-solution/) -- [ ] [Topcoder Problem Statementを解読する方法](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/) +- [ ] [解決策を見つける方法](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/) -コーディングインタビュー質問ビデオ: +コーディング面接質問ビデオ: - [IDeserve(88ビデオ)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [Tushar Roy(5プレイリスト)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) @@ -1415,27 +1422,28 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [Sphere(Sphere)](http://www.spoj.com/) チャレンジレポ: -- [Pythonの対話型コーディングインタビューの課題](https://github.com/donnemartin/interactive-coding-challenges) +- [Pythonでインタラクティブなコーディング面接の課題](https://github.com/donnemartin/interactive-coding-challenges) -モックインタビュー: -- [Gainlo.co:大企業のモックインタビュアー](http://www.gainlo.co/) -- [Pramp:仲間との懇談会](https://www.pramp.com/) -- [Refdash:Mock interviews](https://refdash.com/) +疑似面接: +- [Gainlo.co:大企業の疑似面接官](http://www.gainlo.co/) +- [Pramp:仲間との面接](https://www.pramp.com/) +- [Refdash:疑似面接](https://refdash.com/) -##あなたが面接に近づいたら +##面接に近づいたら -- [ ] クラッキングコーディングインタビューセット2(ビデオ): - - [コードインタビューをクラッキングする](https://www.youtube.com/watch?v=4NIb9l3imAo) - - [コードインタビューをクラックする - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo) +- [ ] クラッキングコーディング面接セット2(ビデオ): + - [コード面接をクラッキングする](https://www.youtube.com/watch?v=4NIb9l3imAo) + - [コード面接をクラックする - Fullstack Speaker Series](https://www.youtube.com/watch?v=Eg5-tdAwclo) ## あなたの履歴書 -- クラッキングでの準備項目の再開を参照してください。コーディングインタビューとプログラミングインタビューの公開 +- クラッキングでの準備項目の再開を参照してください。コーディング面接とプログラミング面接の公開 -##インタビューが来る時を考えている +##面接が来たときに考えてください -あなたが得る20の面接の質問と、以下の項目の行を考えてみましょう。それぞれ2-3の答えがあります。 +あなたが得る20の面接の質問と、以下の項目の行を考えてみましょう。 +それぞれ2-3の答えがあります。 あなたが達成したことについての物語だけでなく、データを持ってください。 - なぜあなたはこの仕事をしたいです? @@ -1451,13 +1459,13 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [job x / project y]で何を学びましたか? - あなたは[job x / project y]で何を良くしていますか? -##インタビュアーに質問があります +##面接官に質問があります     私の中には(私は既に知っているかもしれませんが、彼らの意見やチームの視点が必要です): -あなたのチームはどれくらいですか? -- あなたの開発サイクルはどのように見えるのですか?あなたは滝/スプリント/アジャイルをしますか? -- 締め切りまでの時間は共通ですか?それとも柔軟性はありますか? +あなたのチームはどれくらいの規模ですか? +- あなたの開発サイクルはどのように見えるのですか?あなたはウォーターフォール/スプリント/アジャイルをしますか? +- 締め切りまでのフローは共通ですか?それとも柔軟性はありますか? - あなたのチームではどのように意思決定が行われますか? - 週に何回会議がありますか? - あなたの仕事環境が集中するのに役立つと思いますか? @@ -1504,7 +1512,7 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 ##その他の学習 -これらの話題はインタビューでは出てこないかもしれませんが、 +これらの話題は面接では出てこないかもしれませんが、 特定のテクノロジとアルゴリズムを認識するためには、より大きなツールボックスが必要になります。 - ###コンパイラ @@ -1581,8 +1589,8 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [ ] Computerphile(ビデオ): - [ ] [圧縮](https://www.youtube.com/watch?v=Lto-ajuqW3w) - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko) - - [ ] [上向きの木(ハフマンツリー)](https://www.youtube.com/watch?v=umTbivyJoiI) - - [ ] [エキストラビット/ TRITS - ハフマンツリー](https://www.youtube.com/watch?v=DV8efuB3h2g) + - [ ] [上向きの木(ハフマン木)](https://www.youtube.com/watch?v=umTbivyJoiI) + - [ ] [エキストラビット/ TRITS - ハフマン木](https://www.youtube.com/watch?v=DV8efuB3h2g) - [ ] [テキストのエレガントな圧縮(LZ 77方式)](https://www.youtube.com/watch?v=goOa3DGezUA) - [ ] [テキスト圧縮が確率を満たす](https://www.youtube.com/watch?v=cCDCfoHTsaU) - [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) @@ -1670,35 +1678,35 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - ###拡張データ構造 - [ ] [CS 61B講義39:データ構造の拡張](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) -- ###バランスの取れた検索ツリー +- ###バランスの取れた検索木 - 少なくとも1つのタイプの平衡二分木を知っている(そしてそれがどのように実装されているか知っている): - "バランスの取れた探索木の​​中で、AVLと2/3の樹木が通過し、赤黒の木がより人気があるようです。 -        特に興味深い自己組織化データ構造は、スプレイツリーであり、回転を使用します +        特に興味深い自己組織化データ構造は、スプレイ木であり、回転を使用します         アクセスされたキーをルートに移動する」 - Skiena -    これらのうち、私はスプレイツリーを実装することを選択しました。私が読んだことから、あなたは -        あなたのインタビューでバランスの取れた検索ツリー。しかし、私は1つのコーディングへの露出を望んでいた +    これらのうち、私はスプレイ木を実装することを選択しました。私が読んだことから、あなたは +        あなたの面接でバランスの取れた検索木。しかし、私は1つのコーディングへの露出を望んでいた         そしてそれに直面しましょう、スプレーの木はミツバチの膝です。私は赤黒の木のコードをたくさん読んだ。 - - スプレイツリー:挿入、検索、削除機能 + - スプレイ木:挿入、検索、削除機能         あなたが赤/黒の木の実装を終わらせるならば、これらを試してみてください: - 検索と挿入機能、削除をスキップする     B-Treeについては、非常に大規模なデータセットで非常に広く使用されているため、詳細を知りたい。 - [ ] [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - - [ ] ** AVLツリー** + - [ ] ** AVL木**         - 実際には:             私が言うことから、これらは実際にはあまり使われていませんが、どこになるか分かります。 -            AVLツリーは、O(log n)検索、挿入、および削除をサポートする別の構造です。より厳格に +            AVL木は、O(log n)検索、挿入、および削除をサポートする別の構造です。より厳格に             赤黒の木よりもバランスがとれているため、挿入と取り出しが遅くなりますが、検索が速くなります。これにより             一度構築され、再構成なしでロードされる、例えば言語             辞書(または、アセンブラまたはインタプリタのオペコードなどのプログラム辞書)を含む。 - [ ] [MIT AVL Trees / AVL Sort(ビデオ)](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) + - [ ] [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) - - [ ] **スプレッドツリー** + - [ ] **スプレッド木**         - 実際には: -            スプレイ・ツリーは、キャッシュ、メモリ・アロケータ、ルータ、ガベージ・コレクタ、 +            スプレイ・木は、キャッシュ、メモリ・アロケータ、ルータ、ガベージ・コレクタ、             データ圧縮、ロープ(長いテキスト文字列に使用される文字列の置換)、Windows NT(仮想メモリ、             ネットワークおよびファイルシステムコードなど) - [ ] [CS 61B:Splay Trees(video)](https://www.youtube.com/watch?v=Najzh1rYQTo&index=23&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) @@ -1713,31 +1721,31 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍             これは、リアルタイムアプリケーションなどの時間に敏感なアプリケーションでは、これらを貴重なものにするだけでなく、             それは最悪の場合の保証を提供する他のデータ構造における貴重なビルディングブロックになります。             例えば、計算幾何学で使用される多くのデータ構造は赤黒の木に基づくことができ、 -            現在のLinuxカーネルで使用されている完全に公正なスケジューラは赤黒のツリーを使用します。 Javaのバージョン8では、 +            現在のLinuxカーネルで使用されている完全に公正なスケジューラは赤黒の木を使用します。 Javaのバージョン8では、             Collection HashMapが変更され、LinkedListを使用して同一の要素を貧弱に保存する代わりに -            ハッシュコードでは、赤黒のツリーが使用されます。 +            ハッシュコードでは、赤黒の木が使用されます。 - [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) - [ ] [黒い木](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 /) + - [ ] [バイナリサーチとレッドブラック木の紹介](https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-binary-search-and-red -black-trees /) -- [ ] **2-3の検索ツリー** +- [ ] **2-3の検索木** - 実際には:             2〜3本の木は、検索が遅くなるため(AVL木よりも高さが高いため)、挿入が速くなります。 - - 2-3のツリーは非常にまれにしか使用しませんが、実装にはさまざまなタイプのノードが含まれるためです。代わりに、人々はレッドブラックの木を使用します。 + - 2-3の木は非常にまれにしか使用しませんが、実装にはさまざまなタイプのノードが含まれるためです。代わりに、人々はレッドブラックの木を使用します。 - [ ] [23木の直感と定義(ビデオ)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) - [ ] [23-Treeのバイナリビュー](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本の木は実用的ではありません**。 - - [ ] [CS 61B講義26:バランスの取れた検索ツリー(ビデオ)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) + - [ ] [CS 61B講義26:バランスの取れた検索木(ビデオ)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) - [ ] [ボトムアップ234-Trees(ビデオ)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - - [ ] [トップダウン234ツリー(動画)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) + - [ ] [トップダウン234木(動画)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) - [ ] **N-ary(K-ary、M-ary)木** - 注記:NまたはKは分岐因子(最大分岐)であり、 @@ -1748,16 +1756,16 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [ ] **B-Tree** - 楽しい事実:それは謎ですが、Bはボーイング、バランスの取れた、またはバイエル(共同発明家)のために立つことができます。         - 実際には: -            Bツリーはデータベースで広く使用されています。最近のファイルシステムのほとんどは、B-tree(またはVariants)を使用しています。に加えて -            Bツリーはファイルシステムでも使用され、任意のデータベースへの迅速なランダムアクセスを可能にします +            B木はデータベースで広く使用されています。最近のファイルシステムのほとんどは、B-tree(またはVariants)を使用しています。に加えて +            B木はファイルシステムでも使用され、任意のデータベースへの迅速なランダムアクセスを可能にします             特定のファイル内のブロック基本的な問題は、ファイルブロックのiアドレスをディスクブロックに変換することです             (またはおそらくシリンダーヘッドセクターへの)アドレスである。 - [ ] [B-Tree](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) + - [ ] [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 - メモリ階層モデル(ビデオ)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - - キャッシュに気付かないBツリー、非常に興味深いデータ構造 + - キャッシュに気付かないB木、非常に興味深いデータ構造 - 最初の37分は非常に技術的であり、スキップすることができます(Bはブロックサイズ、キャッシュラインサイズです) @@ -1765,7 +1773,7 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - 矩形または高次元のオブジェクトの点数を見つけるのに最適 - k最近接の隣人に適している - [ ] [Kd Trees(ビデオ)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [ ] [kNN K-dツリーアルゴリズム(ビデオ)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + - [ ] [kNN K-d木アルゴリズム(ビデオ)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ###リストをスキップする - 「これは多少のカルトデータ構造です」 - Skiena @@ -1786,7 +1794,7 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [中国の剰余定理(暗号で使用)(ビデオ)](https://www.youtube.com/watch?v=ru7mWZJlRQg) - ### - - バイナリ検索ツリーとヒープの組み合わせ + - 二分探索木とヒープの組み合わせ - [ ] [Treap](https://en.wikipedia.org/wiki/Treap) - [ ] [データ構造:Treaps説明(動画)](https://www.youtube.com/watch?v=6podLUYinH8) - [ ] [セット操作のアプリケーション](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) @@ -1837,13 +1845,13 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 ##追加科目の詳細     私は既に上記のいくつかのアイデアを強化するためにこれらを追加しましたが、それらを含めたくありませんでした -    それはちょうどあまりにも多くのためです。それは被験者にそれを過ごすのは簡単です。 +    それはちょうどあまりにも多くのためです。それは科目にそれを過ごすのは簡単です。     あなたは今世紀に雇われたかったですね。 - [ ] **連合検索** - [ ] [概要](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) - [ ] [Naive Implementation](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/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) @@ -1858,8 +1866,8 @@ Skienaの本(下記の書籍の節を参照)とインタビューの書籍 - [ ] [6.046:ダイナミックプログラミング(学生の暗唱)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) - [ ] **高度なグラフ処理**(ビデオ) - - [ ] [同期分散アルゴリズム:対称性を破る。ツリーにまたがる最短パス](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) - - [ ] [非同期分散アルゴリズム:ツリーにまたがる最短パス](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 **確率**(mathy、ゆっくりと進み、数学的なことに良い)(ビデオ): - [ ] [MIT 6.042J - 確率の紹介](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B) From 41efccb3392aa746a1383d5f0b5fe6bf3b43b9ae Mon Sep 17 00:00:00 2001 From: Evgeniy Ilyushin Date: Wed, 10 Jan 2018 07:56:18 +0300 Subject: [PATCH 027/263] GC, par prog --- translations/README-ru.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f56603d..6b6c6a4 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1629,16 +1629,15 @@ You're never really done. - [ ] [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) +- ### Сборка мусора (Garbage collection) + - [ ] [Компиляторы (видео)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) + - [ ] [Сборка мусора в Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI) + - [ ] [Глубокое погружение в Java: Сборка мусора - это здорово!](https://www.infoq.com/presentations/garbage-collection-benefits) + - [ ] [Глубокое погружение в Python: Сборка мусора в CPython (видео)](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) - ### Messaging, Serialization, and Queueing Systems - [ ] [Thrift](https://thrift.apache.org/) From 964b27f023e2f0a68c4ba60501952af548b16084 Mon Sep 17 00:00:00 2001 From: Evgeniy Ilyushin Date: Wed, 10 Jan 2018 08:43:46 +0300 Subject: [PATCH 028/263] Trees, BST --- translations/README-ru.md | 94 +++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 6b6c6a4..ac19eb4 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -739,59 +739,59 @@ Google не возьмёт тебя на работу. - [ ] абсолютные значения: - [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) + - in-order (DFS: левый, вершина, правый) + - post-order (DFS: левый, правый, вершина) + - pre-order (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) +- ### Бинарное дерево поиска(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 приложениями + - [ ] [Введение (видео)](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) + - [ ] [Поиск минимального и максимального элемента в BST (видео)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Нахождение высоты BST (видео)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) + - [ ] [Обход BST - breadth-first и depth-first стратегии (видео)](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) + - [ ] [Обход бинарного дерева: Pre-order, In-order, Post-order (видео)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Проверка - бинарное дерево BST или нет (видео)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Удаление узов в BST (видео)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) + - [ ] [In-order аналог в BST (видео)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] Реализация: + - [ ] insert // вставка значения в дерево + - [ ] get_node_count // получение количества хранящихся значений + - [ ] print_values // вывод значений, начиная с min к 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_in_tree // возвращает если переданное значение есть в дереве + - [ ] 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 если none - ### Heap / Priority Queue / Binary Heap - visualized as a tree, but is usually linear in storage (array, linked list) From 4c265461bb557ccd81b375fd4488ecd6c7d4ccb1 Mon Sep 17 00:00:00 2001 From: Evgeniy Ilyushin Date: Wed, 10 Jan 2018 09:05:19 +0300 Subject: [PATCH 029/263] Heap --- translations/README-ru.md | 54 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index ac19eb4..2f8e3e8 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -793,34 +793,34 @@ Google не возьмёт тебя на работу. - [ ] delete_value - [ ] get_successor // возвращает следующее максимальное значение в дереве после переданного, -1 если 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: +- ### Куча / Приоритетная очередь / Бинарная куча + - визуализируется как дерево, но обычно храниться в линейных структурах данных (массив, связанные список) + - [ ] [Куча](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 Лекция 24: Приоритетные очереди (видео)](https://www.youtube.com/watch?v=yIUFT6AKBGE&index=24&list=PL4BBB74C7D2A1049C) + - [ ] [Построение кучи за линейное время (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] Реализация 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). + - [ ] sift_up - необходима для вставки + - [ ] get_max - возвращает максимальный элемент, не удаляя его + - [ ] get_size() - возвращает количество хранящихся элементов + - [ ] is_empty() - возвращает true если куча пустая + - [ ] extract_max - возвращает максимальный элемент, удаляя его + - [ ] sift_down - необходима для extract_max + - [ ] remove(i) - удаляет элемент по индексу x + - [ ] heapify - создает кучу из элементов массива, необходима для heap_sort + - [ ] heap_sort() - берет не отсортированный массив и делает его отсортированным, не используя дополнительной памяти, кроме занимаемой самим массивом используя max heap + - важно: можно использовать min heap, но тогда понадобиться доболнительная память. ## Sorting From 95114a3a20fd619b7bf6dbbaa070841b3861dd28 Mon Sep 17 00:00:00 2001 From: Mikhail Usov Date: Wed, 10 Jan 2018 12:43:57 -0800 Subject: [PATCH 030/263] Final review, coding questions practice initial --- translations/README-ru.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f56603d..3feb598 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1290,15 +1290,15 @@ If you need more detail on this subject, see "Sorting" section in [Additional De --- -## 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. + В этом разделе вы найдете короткие видео, которые вы можете посмотреть достаточно быстро чтобы пересмотреть наиболее важные моменты. 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. - [ ] 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) +- [ ] Серия коротких 2-5 минутных видео - Michael Sambol (18 видео): + - [Видео](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) - [ ] [Sedgewick Videos - Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) - [ ] [01. Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) - [ ] [02. Analysis of Algorithms](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) @@ -1328,19 +1328,19 @@ If you need more detail on this subject, see "Sorting" section in [Additional De --- -## Coding Question Practice +## Практика: задачи по программированию -Now that you know all the computer science topics above, it's time to practice answering coding problems. +Теперь, когда вы узнали все вышерассмотренные темы по компютерным наукам, настало время попрактиковаться в решении задач по программированию. -**Coding question practice is not about memorizing answers to programming problems.** +**Решение задач по программированию - это не запоминание решений.** -Why you need to practice doing programming problems: -- problem recognition, and where the right data structures and algorithms fit in -- gathering requirements for the problem -- talking your way through the problem like you will in the interview -- coding on a whiteboard or paper, not a computer -- coming up with time and space complexity for your solutions -- testing your solutions +Для чего вам нужно практиковаться в решении задач по программированию: +- выявление проблем, и умение определять какие структуры данных и алгоритмы походят для их решения +- сбор требований для задачи +- проговаривание хода решения задачи, так же как вы будете это делать на интервью +- написание кода на доске или на бумаге, не на компьютере +- умение оценивать сложность вашего решения по расходу времени и памяти +- тестирование решений There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming interview books, too, but I found this outstanding: From e3270659e7dc94fba9b2b2781b74cca7accb206f Mon Sep 17 00:00:00 2001 From: Evgeniy Ilyushin Date: Thu, 11 Jan 2018 11:09:25 +0300 Subject: [PATCH 031/263] Sorting --- translations/README-ru.md | 124 +++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 2f8e3e8..517afa4 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -822,79 +822,79 @@ Google не возьмёт тебя на работу. - [ ] heap_sort() - берет не отсортированный массив и делает его отсортированным, не используя дополнительной памяти, кроме занимаемой самим массивом используя max heap - важно: можно использовать min heap, но тогда понадобиться доболнительная память. -## 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://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. +- Для пирамидальной сортировки, см. структуру данных "Куча" выше. Пирамидальная сортировка эффективна, но не устойчива. -- [ ] [Sedgewick - Mergesort (5 videos)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [1. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) - - [ ] [2. Bottom up Mergesort](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) - - [ ] [3. Sorting Complexity](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [4. Comparators](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [5. Stability](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) +- [ ] [Седжвик (Sedgewick) - Сортировка слиянием (5 видео)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [1. Сортировка слиянием](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) + - [ ] [2. Сортировка слиянием наизнанку](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) + - [ ] [3. Сложность сортировки](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [4. Компараторы](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) + - [ ] [5. Устойчивость](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) -- [ ] [Sedgewick - Quicksort (4 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [1. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [2. Selection](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [3. Duplicate Keys](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [4. System Sorts](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) +- [ ] [Седжвик (Sedgewick) - Быстрая сортировка (4 видео)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [1. Быстрая сортировка](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [2. Выбор](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [3. Дублирование ключей](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) + - [ ] [4. Системные сортировки](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - [ ] 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 (видео)](https://www.youtube.com/watch?v=EiUvYS2DT6I&list=PL4BBB74C7D2A1049C&index=29) + - [ ] [CS 61B Лекция 30: Сортировка II (видео)](https://www.youtube.com/watch?v=2hTY3t80Qsk&list=PL4BBB74C7D2A1049C&index=30) + - [ ] [CS 61B Лекция 32: Сортировка III (видео)](https://www.youtube.com/watch?v=Y6LOLpxg6Dc&index=32&list=PL4BBB74C7D2A1049C) + - [ ] [CS 61B Лекция 33: Сортировка V (видео)](https://www.youtube.com/watch?v=qNMQ4ly43p4&index=33&list=PL4BBB74C7D2A1049C) -- [ ] [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) +- [ ] [Пузырькова сортировка (видео)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [Анализ пузырьковой сортировки (видео)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [Сортировка вставками, Сортировка слиянием (видео)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [Сортировка вставками (видео)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [Сортировка слиянием (видео)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [Быстрая сортировка (видео)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [Сортировка выбором (видео)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) -- [ ] Merge sort code: - - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) - - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) -- [ ] Quick sort code: - - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) - - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) - - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) +- [ ] Код сортировки слиянием: + - [ ] [Использование выходного массива (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [Использование выходного массива (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [На одном массиве (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] Код быстрой сортировки: + - [ ] [Реализация (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Реализация (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Реализация (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) -- [ ] 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) + - Для пирамидальной сортировки, смотри структуру данных "Куча" выше. -- [ ] Not required, but I recommended them: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [1. Strings in Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) - - [ ] [2. Key Indexed Counting](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) - - [ ] [3. Least Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) - - [ ] [4. Most Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [5. 3 Way Radix Quicksort](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [6. Suffix Arrays](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1) - - [ ] [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) +- [ ] Не обязательно, но я рекомендую: + - [ ] [Седжвик (Sedgewick) - Поразрядная сортировка (6 видео)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [1. Строки в Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) + - [ ] [2. Ключевые индексные расчеты](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) + - [ ] [3. Наименьший значащий разряд первой строки поразрядной сортировки](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) + - [ ] [4. Наибольший значащий разряд первой строки поразрядной сортировки](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [5. 3 способа поразрядной сортировки](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) + - [ ] [6. Суффиксные массивы](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1) + - [ ] [Поразрядная сортировка](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) + - [ ] [Поразрядная сортировка (видео)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [Поразрядная сортировка, Сортировка подсчётом (линейные временные ограничения) (видео)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Рандомизация: Перемножение матриц, Быстрая сортировка, Алгоритм Фрейвальда (видео)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Сортировка за линейное время (видео)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) -If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +Если вам необходимо больше информации, смотрите секцию "Сортировка" в [Дополнительные детали о некоторых разделах](#additional-detail-on-some-subjects) ## Графы Графы могут быть использованы для представления многих задач в области CS, поэтому раздел включает в себя такие темы как деревья и сортировку. From 0c2e55877d996cb8595632af1a1e8eb7d8e71ce6 Mon Sep 17 00:00:00 2001 From: Mikhail Usov Date: Thu, 11 Jan 2018 15:37:31 -0800 Subject: [PATCH 032/263] Update README-ru.md Work in progress... --- translations/README-ru.md | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 3feb598..e4233ad 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1290,7 +1290,7 @@ If you need more detail on this subject, see "Sorting" section in [Additional De --- -## Финальный обзор +## Заключительный обзор В этом разделе вы найдете короткие видео, которые вы можете посмотреть достаточно быстро чтобы пересмотреть наиболее важные моменты. 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. @@ -1342,13 +1342,13 @@ If you need more detail on this subject, see "Sorting" section in [Additional De - умение оценивать сложность вашего решения по расходу времени и памяти - тестирование решений -There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming +Вот пример отличного введения в методичное, общительное решение задач на интервю. Вы так же найдете это в книгах по интервью для программистов, но мне кажется это изумительным: There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming interview books, too, but I found this outstanding: [Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) [My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/) -No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a +У вас нет доски дома? Логично. Я поехавший и у меня есть большая доска дома. Но вместо доски можно использователь No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. @@ -1392,20 +1392,20 @@ Challenge sites: Maybe: - [Mock interviewers from big companies](http://www.gainlo.co/) -## Once you're closer to the interview +## Когда вы уже ближе к интервью 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) - See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed -## Be thinking of for when the interview comes +## Подумайте об этом когда подходит время интервью Be thinking of for when the interview comes Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. Have a story, not just data, about something you accomplished. @@ -1423,7 +1423,7 @@ Have a story, not just data, about something you accomplished. - 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 +## Вопросы для интервьювера Have questions for the interviewer Some of mine (I already may know answer to but want their opinion or team perspective): @@ -1437,13 +1437,13 @@ Have a story, not just data, about something you accomplished. - What do you like about it? - What is the work life like? -## Once You've Got The Job +## Когда вы получили работу 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) +- [10 вещей которые я хотел бы знал в мой первый день в Google10 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. +Продолжайте учиться Keep learning. You're never really done. @@ -1452,6 +1452,9 @@ You're never really done. ***************************************************************************************************** ***************************************************************************************************** + Все что находится ниже - опционально. Это мои рекоммендации а не от Google. + Обучаюсь этому вы узнайте больше о компьютерных науках, и будуте лучше готовы для любой вакансии программиста. + Вы станете более всесторонне-развитым разработчиком. 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. You'll be a much more well-rounded software engineer. From 41545e6d9f303a4567e21b6f19a89c10c8a16365 Mon Sep 17 00:00:00 2001 From: Julia Date: Mon, 26 Feb 2018 23:47:02 +0000 Subject: [PATCH 033/263] Information Theory --- translations/README-ru.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 517afa4..95dcd44 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -110,7 +110,7 @@ - [Порядок следования байт](#endianness) - [Emacs и vi(m)](#emacs-and-vim) - [Командная строка Unix](#unix-command-line-tools) - - [Теория информации](#information-theory) + - [Теория информации](#Теория-информации) - [Четность & Код Хемминга](#parity--hamming-code) - [Энтропия](#entropy) - [Криптография](#cryptography) @@ -1560,13 +1560,13 @@ You're never really done. - [ ] [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. + - А также смотрите курс-сериал MIT 6.050J Information and Entropy в самом низу. - ### Parity & Hamming Code (videos) - [ ] [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) From 310c982e69e9dab9abf55d13edfd43dce56a5e09 Mon Sep 17 00:00:00 2001 From: Julia Date: Mon, 26 Feb 2018 23:50:01 +0000 Subject: [PATCH 034/263] Parity & Hamming Code --- translations/README-ru.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 95dcd44..e8ef602 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -111,7 +111,7 @@ - [Emacs и vi(m)](#emacs-and-vim) - [Командная строка Unix](#unix-command-line-tools) - [Теория информации](#Теория-информации) - - [Четность & Код Хемминга](#parity--hamming-code) + - [Чётность & Код Хемминга](#Чётность-и-Код-Хемминга) - [Энтропия](#entropy) - [Криптография](#cryptography) - [Сжатие](#compression) @@ -1568,13 +1568,13 @@ You're never really done. - [ ] [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 Information and Entropy в самом низу. -- ### 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) +- ### Чётность и Код Хемминга + - [ ] [Вступление](https://www.youtube.com/watch?v=q-3BctoUpHE) + - [ ] [Чётность](https://www.youtube.com/watch?v=DdMcAUlxh1M) + - [ ] Код Хемминга: + - [Обнаружение ошибок](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 From 1e7184ca9b04532d813906bc114a8cdfb68d17da Mon Sep 17 00:00:00 2001 From: Julia Date: Tue, 27 Feb 2018 00:04:45 +0000 Subject: [PATCH 035/263] Entropy --- translations/README-ru.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index e8ef602..ba22469 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -112,7 +112,7 @@ - [Командная строка Unix](#unix-command-line-tools) - [Теория информации](#Теория-информации) - [Чётность & Код Хемминга](#Чётность-и-Код-Хемминга) - - [Энтропия](#entropy) + - [Энтропия](#Энтропия) - [Криптография](#cryptography) - [Сжатие](#compression) - [Сети](#networking) (if you have networking experience or want to be a systems engineer, expect questions) @@ -1576,9 +1576,9 @@ You're never really done. - [Исправление ошибок](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) - ### Cryptography From e3ca59461f0e4be381f2dd8f15bab61fc1ad1970 Mon Sep 17 00:00:00 2001 From: Julia Date: Tue, 27 Feb 2018 00:09:00 +0000 Subject: [PATCH 036/263] Cryptography --- translations/README-ru.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index ba22469..675ffb7 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -113,7 +113,7 @@ - [Теория информации](#Теория-информации) - [Чётность & Код Хемминга](#Чётность-и-Код-Хемминга) - [Энтропия](#Энтропия) - - [Криптография](#cryptography) + - [Криптография](#Криптография) - [Сжатие](#compression) - [Сети](#networking) (if you have networking experience or want to be a systems engineer, expect questions) - [Компьютерная безопасность](#computer-security) @@ -1581,12 +1581,12 @@ You're never really done. - Затем посмотрите следующее видео - [ ] [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) + - [ ] [Криптография: Хеширование](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 From f39074cb383e7aa1bcc65600027e298679348bd1 Mon Sep 17 00:00:00 2001 From: Julia Date: Tue, 27 Feb 2018 00:23:07 +0000 Subject: [PATCH 037/263] Compression --- translations/README-ru.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 675ffb7..72f3279 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -114,7 +114,7 @@ - [Чётность & Код Хемминга](#Чётность-и-Код-Хемминга) - [Энтропия](#Энтропия) - [Криптография](#Криптография) - - [Сжатие](#compression) + - [Сжатие](#Сжатие) - [Сети](#networking) (if you have networking experience or want to be a systems engineer, expect questions) - [Компьютерная безопасность](#computer-security) - [Сборщики мусора](#garbage-collection) @@ -1588,17 +1588,17 @@ You're never really done. - [ ] [Криптография: Хеширование](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) - - [ ] [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) +- ### Сжатие + - Не забудьте сначала посмотреть видео теории информации + - [ ] Computerphile (видео на ютубе): + - [ ] [Сжатие](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) + - [ ] [Элегантное сжатие текста (LZ 77 Метод)](https://www.youtube.com/watch?v=goOa3DGezUA) + - [ ] [Сжатие текста и Теория Вероятностей](https://www.youtube.com/watch?v=cCDCfoHTsaU) + - [ ] [Compressor Head плейлист](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) + - [ ] [Разработчики Google вживую: GZIP не достаточно!](https://www.youtube.com/watch?v=whGwm0Lky2s) - ### Networking - **if you have networking experience or want to be a systems engineer, expect questions** From 790819c525b3da865be160cbcf2934a85057f773 Mon Sep 17 00:00:00 2001 From: Julia Date: Tue, 27 Feb 2018 01:02:49 +0000 Subject: [PATCH 038/263] Fixed typos, punctuation errors, explanations --- translations/README-ru.md | 44 +++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 72f3279..8369bdb 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1,17 +1,17 @@ # Google Interview University -Оригинальная версия: [Английский](../README.md) +Оригинальная версия: [Английский](../README.md) ## Для кого это? -Это мой учебный план рассчитанный на несколько месяцев для веб-разработчиков, не имеющих образования в Computer Science (CS) +Это мой учебный план, рассчитанный на несколько месяцев для веб-разработчиков, не имеющих образования в Computer Science (CS) и планирующих работать инженерами-программистами (software engineer) в компании Google. ![Кодирование на доске - из телесериала канала HBO Кремниевая Долина](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) За основу учебного плана я взял список вопросов **Google's coaching notes** и значительно расширил его. Тут вы найдёте -много полезных вещей, которые необходимо знать. Дополнительные вопросы я добавил в конец списка, их могут задавать на -интервью, так же они могут быть полезны в решении повседневных задач. Некоторые пункты я взял из поста Стива Йеги (Steve Yegge) +много полезных вещей, которые необходимо знать. Дополнительные вопросы я добавил в конец списка: их могут задавать на +интервью, a также они могут быть полезны в решении повседневных задач. Некоторые пункты я взял из поста Стива Йеги (Steve Yegge) "[Получить работу в Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)", а некоторые слово в слово соответствуют вопросам, разбираемых Google в их постах о подготовке. @@ -24,8 +24,8 @@ Если вы обладаете многолетним опытом разработки ПО, помните, что Google разделяет понятия инженер-программист и разработчик ПО/веб-разработчик. Первое требует знаний в области CS. -Если вы хотите быть инженерами обеспечивающими надежность ПО или системными инженерами, то уделить внимание вопросом из -опционального списка (разделы сеть, безопасность). +Если вы хотите быть инженерами обеспечивающими надежность ПО или системными инженерами, то уделите внимание вопросам из +опционального списка (разделы Сеть, Безопасность). --- @@ -156,7 +156,7 @@ ## Чем это полезно? Я следую этому плану, готовясь к собеседованию в Google. Я разрабатываю веб-приложения, сервисы и запускаю стартапы с -1997 года. У меня есть степень по экономике, но нет по CS. До сих пор у меня очень успешная карьера, но я хочу работать +1997 года. У меня есть степень по экономике, но нет по CS. На данные момент у меня очень успешная карьера, но я хочу работать в Google. Я хочу работать с большими системами и понять принципы их работы, изучить эффективность алгоритмов и различные структуры данных, узнать, как работают низкоуровневые языки программирования. Если ты не знаешь что-то из перечисленного, Google не возьмёт тебя на работу. @@ -173,11 +173,11 @@ Google не возьмёт тебя на работу. ## Как пользоваться -Ниже описан способ использования, вы должны выпонить пункты в описаном порядке. +Ниже описан способ использования, вы должны выполнить пункты в описанном порядке. -Я использую разметку Github, включая список задач для оценки прогресса. +Я использую разметку Github, включающую список задач для оценки прогресса. -- [x] Создай новую ветку и тогда вы сможете оставлять отметки у элементов списка, просто добавляя x внутрь скобок: [x] +- [x] Создай новую ветку и тогда ты сможешь оставлять отметки у элементов списка, просто добавляя x внутрь скобок: [x] Скопируй репозиторий и выполни команды перечисленные ниже @@ -215,7 +215,7 @@ Google не возьмёт тебя на работу. Моя история: [Почему я готовился в течении 8 месяцев для собеседования в Google](https://medium.com/@googleyasheck/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) -Я еще на пути к цели. Двигаемся вперед: +Я ещё на пути к цели. Двигаемся вперёд: - **Blog**: [GoogleyAsHeck.com](https://googleyasheck.com/) - Twitter: [@googleyasheck](https://twitter.com/googleyasheck) @@ -226,7 +226,7 @@ Google не возьмёт тебя на работу. ![John Washam - Google Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) ## Не переживайте о том, что вы не достаточно умны -- Инженеры в Google умные, но многие из них переживают что недостаточно, хотя там уже работают. +- Успешные инженеры умные, но многие из них переживают, что недостаточно умны. - [Миф о гениальных программистах](https://www.youtube.com/watch?v=0SARbwvhupQ) - [Это опасно, идти в одиночку: Сражаться с невидимыми монстрами в технологиях](https://www.youtube.com/watch?v=1i8ylq4j_EY) @@ -301,12 +301,12 @@ Google не возьмёт тебя на работу. - Java - Python -Так же подойдут: +Также подойдут: - JavaScript - Ruby -Для вас должно быть комфортно писать программы на выбранном языке и вы должны его хорошо знать. +Вы должны хорошо знать выбранный язык и уметь комфортно писать на нём программы. Подробнее о выборе: - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ @@ -319,12 +319,12 @@ Google не возьмёт тебя на работу. ## Список книг -Это краткий список, того чем я пользовался. Он сокращен, для того что-бы сэкономить ваше время. +Это краткий список того, чем я пользовался. Он сокращен для того, чтобы сэкономить ваше время. ### Подготовка к собеседованию - [ ] [Собеседование по программированию в подробнастях: Секреты получения твоей следующей работы, 2-е издание](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - ответы на C++ и Java + - ответы на C++ и Java - рекомендации Google по обучению кандидатов - это отличная разминка перед подробным разбором собеседования по программированию - не так уж и сложно, некоторые задачи проще чем вам кажутся на собеседовании (из того что я прочитал) @@ -338,7 +338,7 @@ Google не возьмёт тебя на работу. - [ ] [Элементы собеседования по программированию](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - весь код написан на C++, полезна если вы планируете использовать C++ на собеседовании - - хорошая книга, описывающая решения общих задач. + - хорошая книга, описывающая решения общих задач ### Архитектура компьютера @@ -405,7 +405,7 @@ Google не возьмёт тебя на работу. ### Опциональные книги -**Некоторые рекомендую эти книги, но я думаю это перебор, если только вы не инженер-программист с большим опытом работы и не ожидаете более сложного собеседования. +**Некоторые рекомендуют эти книги, но я думаю это перебор, если только вы не инженер-программист с большим опытом работы и не ожидаете более сложного собеседования. - [ ] [Руководство по разработке алгоритмов](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - Как обзор и описание проблем @@ -461,7 +461,7 @@ Google не возьмёт тебя на работу. ### 1. Вы не сможете сразу запомнить все Я смотрел часами видео делая заметки, но спустя несколько месяцев многое из этого я не помнил. После чего потратил -3 дня разбираясь в своих заметках и делая карточки-напоминания(flashcards), для того что бы потом можно было повторить пройденный материал. +3 дня разбираясь в своих заметках и делая карточки-напоминания (flashcards) для того, чтобы потом можно было повторить пройденный материал. Прочитайте пожалуйста эту статью, что бы не совершать моих ошибок: @@ -469,7 +469,7 @@ Google не возьмёт тебя на работу. ### 2. Используйте карточки-напоминания -Для решения этой проблемы я сделал не большой сайт, на котором можно добавлять карточки двух типов: общие и с кодом. +Для решения этой проблемы я сделал небольшой сайт, на котором можно добавлять карточки двух типов: общие и с кодом. Каждая карта имеет разный формат. Я сделал мобильную версию сайта и могу читать карточки на мобильном телефоне или планшете. @@ -484,7 +484,7 @@ Google не возьмёт тебя на работу. запомнить материал. В качестве альтернативы вы можете использовать сайт [Anki](http://ankisrs.net/), который мне рекомендовали много раз. Он использует систему повторений для того что бы помочь вам запомнить. -Это ресурс user-friendly, доступен на всех платформах и имеет возможность синхронизации с облаком. На платформе iOS стоит 25$ на других бесплатный. +Это ресурс user-friendly, доступен на всех платформах и имеет возможность синхронизации с облаком. На платформе iOS стоит 25$, на других бесплатный. Моя база данных в формате Anki: https://ankiweb.net/shared/info/25173560 (спасибо [@xiewenya](https://github.com/xiewenya)) @@ -543,7 +543,7 @@ Google не возьмёт тебя на работу. - [ ] **Изучайте C** - С используется везде. Вы встретите примеры в книгах, лекциях, видео, везде, пока вы будите учиться. - [ ] [Язык программирования С, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - Это не большая книга, но после ее прочтения вы получите необходимые знания по С и если будите практиковать, + - Это небольшая книга, но после ее прочтения вы получите необходимые знания по С и если будите практиковать, то достаточно быстро его освоите. Понимание С поможет вам понять как программы и память работают. - [ответы на вопросы](https://github.com/lekkas/c-algorithms) From 11a4d32f7a8d66d69328f63f098571fc05e322de Mon Sep 17 00:00:00 2001 From: Julia Date: Tue, 27 Feb 2018 13:40:54 +0000 Subject: [PATCH 039/263] Networking --- translations/README-ru.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 8369bdb..994f018 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -115,7 +115,7 @@ - [Энтропия](#Энтропия) - [Криптография](#Криптография) - [Сжатие](#Сжатие) - - [Сети](#networking) (if you have networking experience or want to be a systems engineer, expect questions) + - [Сети](#Сети-и-сетевые-протоколы) - [Компьютерная безопасность](#computer-security) - [Сборщики мусора](#garbage-collection) - [Параллельное программирование](#parallel-programming) @@ -1600,19 +1600,19 @@ You're never really done. - [ ] [Compressor Head плейлист](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) - [ ] [Разработчики Google вживую: GZIP не достаточно!](https://www.youtube.com/watch?v=whGwm0Lky2s) -- ### Networking - - **if you have networking experience or want to be a systems engineer, expect questions** - - otherwise, this is just good to know +- ### Сети и сетевые протоколы + - **Если у вас уже есть опыт с сетями или вы хотить стать системным инженером, то ждите вопросов на эти темы** + - В противном случае, это все равно полезно знать - [ ] [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) + - [ ] [UDP and TCP: Сравнение транспортных протоколов](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [Объяснение TCP/IP and модели 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/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) + - [ ] [Плейлис на ютубе про сети (21 видео)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Подсети без мифов - Часть 5 CIDR](https://www.youtube.com/watch?v=t5xYI0jzOf4) - ### Computer Security - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) From c113e5476887f366aac7d8f2e653f4fdfe548f14 Mon Sep 17 00:00:00 2001 From: Julia Date: Tue, 27 Feb 2018 13:54:49 +0000 Subject: [PATCH 040/263] Computer Security --- translations/README-ru.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 994f018..69d92d2 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -116,8 +116,8 @@ - [Криптография](#Криптография) - [Сжатие](#Сжатие) - [Сети](#Сети-и-сетевые-протоколы) - - [Компьютерная безопасность](#computer-security) - - [Сборщики мусора](#garbage-collection) + - [Компьютерная безопасность](#Компьютерная-безопасность) + - [Сборка мусора](#Сборка-мусора-(Garbage-collection)) - [Параллельное программирование](#parallel-programming) - [Сообщения, сериализация и системы очередей](#messaging-serialization-and-queueing-systems) - [Быстрое преобразование Фурье](#fast-fourier-transform) @@ -1592,7 +1592,7 @@ You're never really done. - Не забудьте сначала посмотреть видео теории информации - [ ] Computerphile (видео на ютубе): - [ ] [Сжатие](https://www.youtube.com/watch?v=Lto-ajuqW3w) - - [ ] [Энтропия в сжатие](https://www.youtube.com/watch?v=M5c_RFKVkko) + - [ ] [Энтропия в сжатии](https://www.youtube.com/watch?v=M5c_RFKVkko) - [ ] [Инвертированный деревья (Кодовые деревья Хаффмана)](https://www.youtube.com/watch?v=umTbivyJoiI) - [ ] [Экстра - Кодовые деревья Хаффмана](https://www.youtube.com/watch?v=DV8efuB3h2g) - [ ] [Элегантное сжатие текста (LZ 77 Метод)](https://www.youtube.com/watch?v=goOa3DGezUA) @@ -1614,20 +1614,20 @@ You're never really done. - [ ] [Плейлис на ютубе про сети (21 видео)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) - [ ] [Подсети без мифов - Часть 5 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 (23 видео)](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) - [ ] [Компиляторы (видео)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) From 2ed0a5b8eb8dfce4185af5c32a469a4028e06522 Mon Sep 17 00:00:00 2001 From: Armand Fardeau Date: Tue, 27 Feb 2018 21:11:16 +0100 Subject: [PATCH 041/263] Translate 'don't feel stupid' #Chunk 4 --- translations/README-fr.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/translations/README-fr.md b/translations/README-fr.md index 720e775..98d0397 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -1,6 +1,6 @@ # Google Interview University -Translations: +Traductions: - [中文版本](README-cn.md) - [Español (in progress)](README-es.md) [Issue #80](https://github.com/jwasham/google-interview-university/issues/80) - मानक हिन्दी (in progress) [Issue #81](https://github.com/jwasham/google-interview-university/issues/81) @@ -32,7 +32,7 @@ Si vous souhaitez devenir ingénieur de fiabilité, ou ingénieur systèmes, sui - [Se mettre dans l'humeur Googley](#get-in-a-googley-mood) - [J'ai décroché le 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) +- [Ne vous sentez pas stupide](#ne-vous-sentez-pas-stupide) - [A propos de Google](#about-google) - [A propos des ressources vidéo](#about-video-resources) - [Déroulement de l'entretien & préparations générales à l'entretien](#interview-process--general-interview-prep) @@ -220,10 +220,10 @@ I'm on the journey, too. Follow along: ![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) -- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) +## Ne vous sentez pas stupide +- Les ingénieurs de Google sont intelligents, mais beaucoup ont comme insécurité qu'ils ne sont pas suffisamment intelligents, même s'ils travaillent pour Google. +- [Le mythe du programmeur génie](https://www.youtube.com/watch?v=0SARbwvhupQ) +- [C'est dangereux de rester seul: Combattre les monstres invisibles dans la Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) ## About Google From 001365ea89449685436c4c3a29dfc5ab2fa55f9b Mon Sep 17 00:00:00 2001 From: Armand Fardeau Date: Tue, 27 Feb 2018 21:25:48 +0100 Subject: [PATCH 042/263] Translate 'About Google' #Chunk 4 --- translations/README-fr.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/translations/README-fr.md b/translations/README-fr.md index 98d0397..c9c2a1e 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -225,22 +225,22 @@ I'm on the journey, too. Follow along: - [Le mythe du programmeur génie](https://www.youtube.com/watch?v=0SARbwvhupQ) - [C'est dangereux de rester seul: Combattre les monstres invisibles dans la Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) -## About Google +## À propos de 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) +- [ ] Pour les étudiants - [Carrières Google: Guide de développement technique](https://www.google.com/about/careers/students/guide-to-technical-development.html) +- [ ] Comment marche la recherche: + - [ ] [L'évolution de la recherche (video)](https://www.youtube.com/watch?v=mTBShTwCnD4) + - [ ] [Comment la recherche fonctionne - l'histoire](https://www.google.com/insidesearch/howsearchworks/thestory/) + - [ ] [Comment la recherche fonctionne](https://www.google.com/insidesearch/howsearchworks/) + - [ ] [Comment la recherche fonctionne - Matt Cutts (video)](https://www.youtube.com/watch?v=BNHR6IQJGZs) + - [ ] [Comment Google améliore son algorithme de recherche (video)](https://www.youtube.com/watch?v=J5RZOU6vK4Q) +- [ ] Séries: + - [ ] [Comment la recherche Google Search fonctionne sur mobile](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9) + - [ ] [L'étude secrète de Google pour découvrir nos besoins](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf) + - [ ] [La recherche Google Search sera votre prochain cerveau](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523) + - [ ] [L'esprit profond de Demis Hassabis](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a) +- [ ] [Livre: Comment Google fonctionne](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344) +- [ ] [Annonce faite par Google - Oct 2016 (video)](https://www.youtube.com/watch?v=q4y0KOeXViI) ## About Video Resources From 7ac3c9b4f877c0203d8b1ce910e2d17c265ea25d Mon Sep 17 00:00:00 2001 From: Armand Fardeau Date: Tue, 27 Feb 2018 21:29:53 +0100 Subject: [PATCH 043/263] Translate 'About Video Resources' #Chunk 4 --- translations/README-fr.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/translations/README-fr.md b/translations/README-fr.md index c9c2a1e..596a073 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -242,13 +242,13 @@ I'm on the journey, too. Follow along: - [ ] [Livre: Comment Google fonctionne](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344) - [ ] [Annonce faite par Google - Oct 2016 (video)](https://www.youtube.com/watch?v=q4y0KOeXViI) -## About Video Resources +## À propos des ressources vidéos -Some videos are available only by enrolling in a Coursera, EdX, or Lynda.com class. These are called MOOCs. -Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. Lynda.com courses are not free. +Certaines vidéos sont disponibles uniquement en s'inscrivant à une classe Coursera, EdX ou Lynda.com. Ce sont des MOOC. +Parfois, les cours ne sont pas en session, alors vous devez attendre quelques mois, donc vous n'y avez pas accès. Les cours sur Lynda.com ne sont pas gratuits. - I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos. - I like using university lectures. + J'apprécierais votre aide pour ajouter des sources publiques gratuites et toujours disponibles, telles que des vidéos YouTube pour accompagner les vidéos de cours en ligne. + J'aime utiliser les cours universitaires. ## Interview Process & General Interview Prep From f78e00b366aa6fa01c0748e47d45ca7537527592 Mon Sep 17 00:00:00 2001 From: Mikhail Usov Date: Thu, 1 Mar 2018 18:58:58 -0800 Subject: [PATCH 044/263] Update README-ru.md --- translations/README-ru.md | 40 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index e4233ad..619f6cc 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1405,7 +1405,7 @@ Maybe: - See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed -## Подумайте об этом когда подходит время интервью Be thinking of for when the interview comes +## Подумайте об этом когда подходит время интервью Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. Have a story, not just data, about something you accomplished. @@ -1423,42 +1423,38 @@ Have a story, not just data, about something you accomplished. - 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 does 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? +- Сколько человек в команде? How large is your team? +- Как выглядит ваш цикл разработки? Работаете ли вы по agile, спринтам или водопад? +- Насколько часто бывают переработки и дедлайны? Или сроки достаточно гибкие? +- Как в вашей команде принимаются решения? +- Сколько встреч вы проводите в неделю? +- Располагает ли ваше рабочее окружение к концентрации? +- Над чем вы работаете? +- Что вам в этом нравится? +- Как в целом протекает работа? -## Когда вы получили работу Once You've Got The Job +## Когда вас приняли на работу Поздравляю! -- [10 вещей которые я хотел бы знал в мой первый день в Google10 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) +- [10 вещей которые я хотел бы знать в мой первый рабочий день в 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. +На самом деле это не конец. --- ***************************************************************************************************** ***************************************************************************************************** - Все что находится ниже - опционально. Это мои рекоммендации а не от Google. - Обучаюсь этому вы узнайте больше о компьютерных науках, и будуте лучше готовы для любой вакансии программиста. + Все что находится ниже этого места - опционально. Это мои рекоммендации, а не от Google. + Изучая все это вы узнаете больше о компьютерных науках, и будуте лучше готовы для любой вакансии программиста. Вы станете более всесторонне-развитым разработчиком. - 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. You'll be a much more well-rounded software engineer. - ***************************************************************************************************** ***************************************************************************************************** From 5b4d7a2c10b2bb3e209634910e8da8bd1c3038d2 Mon Sep 17 00:00:00 2001 From: Mikhail Usov Date: Thu, 1 Mar 2018 19:13:05 -0800 Subject: [PATCH 045/263] Update README-ru.md --- translations/README-ru.md | 46 +++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 619f6cc..ea56e18 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -89,8 +89,8 @@ - [Реализация системных вызовов](#implement-system-routines) - [Поиск в строке & манипуляции](#string-searching--manipulations) - [Проектирование систем, Масштабируемость, Обработка данных](#system-design-scalability-data-handling) (if you have 4+ years experience) -- [Финальный обзор](#final-review) -- [Практические вопросы по программированию](#coding-question-practice) +- [Заключительный обзор](#final-review) +- [Практика: задачи по программированию](#coding-question-practice) - [Упражнения по программированию](#coding-exerciseschallenges) - [Перед собеседованием](#once-youre-closer-to-the-interview) - [Ваше резюме](#your-resume) @@ -1370,15 +1370,15 @@ Supplemental: See [Book List above](#book-list) -## 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. +Как только вы наполнили свою голову знаниями, самое время применить их на практике. +Выполняйте упражнения по программированию каждый день, чем больше тем лучше. -- [ ] [How to Find a Solution](https://www.topcoder.com/community/data-science/data-science-tutorials/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/) -Challenge sites: +Сайты с упражнениями: - [LeetCode](https://leetcode.com/) - [TopCoder](https://www.topcoder.com/) - [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) @@ -1389,7 +1389,7 @@ Challenge sites: - [Geeks for Geeks](http://www.geeksforgeeks.org/) - [InterviewBit](https://www.interviewbit.com/invite/icjf) -Maybe: +Возможно: - [Mock interviewers from big companies](http://www.gainlo.co/) ## Когда вы уже ближе к интервью Once you're closer to the interview @@ -1401,27 +1401,27 @@ Maybe: ## Ваше резюме -- [Ten Tips for a (Slightly) Less Awful Resume](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html) -- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed +- [10 советов для подготовки (немного) менее ужасного резюме](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html) +- Загляните в раздел по подготовке резюме в книге Cracking The Coding Interview и в конце книги Programming Interviews Exposed ## Подумайте об этом когда подходит время интервью -Think of about 20 interview questions you'll get, along with 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 ответа на каждый вопрос Think of about 20 interview questions you'll get, along with 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? +- Почему вы хотите получить эту работу 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]? +- Лучгие/худшие решения с которыми вы сталкивались Best/worst designs seen? +- Идеи как улучшить существующий продукт от Google 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]? ## Приготовьте вопросы для интервьювера From 75a780745b4a6661b34258e0413981ab5e3e52da Mon Sep 17 00:00:00 2001 From: Mikhail Usov Date: Fri, 2 Mar 2018 18:08:34 -0800 Subject: [PATCH 046/263] Update README-ru.md --- translations/README-ru.md | 94 +++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 49 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index ea56e18..0129f72 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1292,30 +1292,30 @@ If you need more detail on this subject, see "Sorting" section in [Additional De ## Заключительный обзор - В этом разделе вы найдете короткие видео, которые вы можете посмотреть достаточно быстро чтобы пересмотреть наиболее важные моменты. 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. + В этом разделе вы найдете короткие видео, которые можно посмотреть достаточно быстро чтобы повторить наиболее важные моменты. + Полезно освежать свои знания чаще. -- [ ] Series of 2-3 minutes short subject videos (23 videos) - - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) +- [ ] Серия 2-3 минутных короткие видео по темам (23 видео) + - [Видео](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) - [ ] Серия коротких 2-5 минутных видео - Michael Sambol (18 видео): - [Видео](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) -- [ ] [Sedgewick Videos - Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) +- [ ] [Видео от Сэджвика - Алгоритмы I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) - [ ] [01. Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) - - [ ] [02. Analysis of Algorithms](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) - - [ ] [03. Stacks and Queues](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) - - [ ] [04. Elementary Sorts](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) + - [ ] [02. Анализ Алгоритмов](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) + - [ ] [03. Стэки и Очереди](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) + - [ ] [04. Элементарные сортировки](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) - [ ] [05. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - [ ] [06. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [07. Priority Queues](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) - - [ ] [08. Elementary Symbol Tables](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) - - [ ] [09. Balanced Search Trees](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) - - [ ] [10. Geometric Applications of BST](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) - - [ ] [11. Hash Tables](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) -- [ ] [Sedgewick Videos - Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50) - - [ ] [01. Undirected Graphs](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) - - [ ] [02. Directed Graphs](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) + - [ ] [07. Приоритетные очереди](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) + - [ ] [08. Элементарные таблицы символов](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) + - [ ] [09. Сбалансированные деревья поиска](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) + - [ ] [10. Геометрические применениния BST](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) + - [ ] [11. Хэш таблицы](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) +- [ ] [Видео от Сэджвика - Алгоритмы II](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50) + - [ ] [01. Ненаправленные графы](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) + - [ ] [02. Направленные графы](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) - [ ] [03. Minimum Spanning Trees](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj) - - [ ] [04. Shortest Paths](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) + - [ ] [04. Кратчайшие пути](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) - [ ] [05. Maximum Flow](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) - [ ] [06. Radix Sorts](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - [ ] [07. Tries](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) @@ -1338,28 +1338,25 @@ If you need more detail on this subject, see "Sorting" section in [Additional De - выявление проблем, и умение определять какие структуры данных и алгоритмы походят для их решения - сбор требований для задачи - проговаривание хода решения задачи, так же как вы будете это делать на интервью -- написание кода на доске или на бумаге, не на компьютере +- написание кода на доске или на бумаге, но не на компьютере - умение оценивать сложность вашего решения по расходу времени и памяти - тестирование решений -Вот пример отличного введения в методичное, общительное решение задач на интервю. Вы так же найдете это в книгах по интервью для программистов, но мне кажется это изумительным: There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming -interview books, too, but I found this outstanding: -[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) +Вот пример отличного введения в методичное, коммуникативное решение задач на интервью. Вы так же найдете это в книгах по интервью для программистов, но это подход мне кажется выдающимся: +[Схема создания алгоритма](http://www.hiredintech.com/algorithm-design/) [My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/) -У вас нет доски дома? Логично. Я поехавший и у меня есть большая доска дома. Но вместо доски можно использователь No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a -large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. +У вас нет доски дома? Не удивительно. Я не много неормальный и у меня есть большая доска дома. Но вместо доски можно использователь и планшет для рисования из магазина художественных товаров, и практиковаться сидя на диване. Это моя "диванная доска". На фото я положил ручку чтобы иметь представления о размерах. Если вы будете пользоваться ручкой, постоянно будет возникать желание что-то стереть, решение захламляется достаточно быстро. -![my sofa whiteboard](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) +![моя диванная доска](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) -Supplemental: +Дополнительно: -- [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://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) -- [Exercises for getting better at a given language](http://exercism.io/languages) +- [Математика для Топ-кодеров](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](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) +- [Упражнения по улучшению навыков для определенного языка](http://exercism.io/languages) **Read and Do Programming Problems (in this order):** @@ -1368,7 +1365,7 @@ Supplemental: - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - answers in Java -See [Book List above](#book-list) +См. [Список книг ниже](#book-list) ## Упражнения по программированию @@ -1390,9 +1387,9 @@ See [Book List above](#book-list) - [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): - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo) @@ -1407,27 +1404,27 @@ See [Book List above](#book-list) ## Подумайте об этом когда подходит время интервью -Подумайте как отвечать на приблихительно 20 вопросов, подготовьте 2-3 ответа на каждый вопрос Think of about 20 interview questions you'll get, along with 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? -- Идеи как улучшить существующий продукт от Google 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. +- Вы более продуктивны как часть команды или как иднивидуальный разработчик? +- Какие из ваших навыков или что из опыта будет наиболее ценным для данной позиции? +- Что вам больше всего понравилось в работе над [проектом Х/в компании Х]? +- Какие самые сложные задачи вы решали в [компании X/проекте Х]? +- С каким самым сложным багом вам приходилось сталкиваться в [компании X/проекте Х]? +- Чему вы научились в [компании X/проекте Х]? +- Что бы вы могли сделать лучше работая в [компании X/проекте Х]? ## Приготовьте вопросы для интервьювера Вот, некоторые из моих (возможно, я уже знаю ответ, но хочу я услышать мнение интервьювера или точку зрения команды): -- Сколько человек в команде? How large is your team? +- Сколько человек в команде? - Как выглядит ваш цикл разработки? Работаете ли вы по agile, спринтам или водопад? - Насколько часто бывают переработки и дедлайны? Или сроки достаточно гибкие? - Как в вашей команде принимаются решения? @@ -2020,4 +2017,3 @@ Sit back and enjoy. "Netflix and skill" :P - [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 a9e282b79f788da93777659f58104fff064c5f97 Mon Sep 17 00:00:00 2001 From: Mikhail Usov Date: Sat, 3 Mar 2018 23:48:30 -0800 Subject: [PATCH 047/263] Update README-ru.md --- translations/README-ru.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0129f72..475f10a 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1358,12 +1358,12 @@ If you need more detail on this subject, see "Sorting" section in [Additional De - [Материалы для интервью от MIT](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) - [Упражнения по улучшению навыков для определенного языка](http://exercism.io/languages) -**Read and Do Programming Problems (in this order):** +**Прочитайте и выполните упражнения (именно в этом порядке):** - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C, C++ and Java + - решения на C, C++ и Java - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - решения на Java См. [Список книг ниже](#book-list) @@ -1405,13 +1405,13 @@ If you need more detail on this subject, see "Sorting" section in [Additional De ## Подумайте об этом когда подходит время интервью Подумайте как отвечать приблизительно на 20 распостраненных вопросов которые задают на интервью, подготовьте 2-3 ответа на каждый из них. -Расскажите историю, а не просто сухие данные о том, чего вы добились. +Расскажите историю, а не просто сухой пересказ о том над чем вы работали. - Почему вы хотите получить эту работу? -- Какая самая сложная проблема которую вы решили? -- Самые большие задачи с которыми вам приходилось сталкиваться? +- Какая самая большая проблема которую вам приходилось решать? +- Самые сложные задачи с которыми вам приходилось сталкиваться? - Лучшие/худшие дизайн решения с которыми вы сталкивались? -- Идеи, как улучшить какой-нибудь существующий продукт от Google. +- Идеи как улучшить какой-нибудь существующий продукт от Google. - Вы более продуктивны как часть команды или как иднивидуальный разработчик? - Какие из ваших навыков или что из опыта будет наиболее ценным для данной позиции? - Что вам больше всего понравилось в работе над [проектом Х/в компании Х]? From 0efbdff3b2ecb93573eeda0ec8cc7d0273db5940 Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 8 Mar 2018 12:54:54 +0000 Subject: [PATCH 048/263] Typos, fixed hyperlinks --- translations/README-ru.md | 55 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 69d92d2..6336acd 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -37,33 +37,33 @@ - [Получи гугловское настроение](#Получи-гугловское-настроение) - [Получил ли я работу?](#Получил-ли-я-работу) - [Двигайся вместе со мной](#Двигайся-вместе-со-мной) -- [Не переживайте о том, что вы не достаточно умны](#Не-переживай-о-том-что-ты-не-достаточно-умный) +- [Не переживайте о том, что вы недостаточно умны](#Не-переживайте-о-том,-что-вы-недостаточно-умны) - [О Google](#О-google) - [О видео ресурсах](#О-видео-ресурсах) - [Процесс собеседования & Основное в подготовке к интервью](#Процесс-собеседования-Основное-в-подготовке-к-интервью) - [Выберите один язык для собеседования](#Выберите-один-язык-для-собеседования) - [Список книг](#Список-книг) - [Перед тем как вы начнете](#Перед-тем-как-вы-начнете) -- [Что еще не охвачено](#what-you-wont-see-covered) -- [Необходимые знания](#prerequisite-knowledge) -- [План на день](#the-daily-plan) -- [Сложность алгоритмов / 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) +- [Что еще не охвачено](#То,-что-не-охватывает-этот-учебный-план) +- [Необходимые знания](#Необходимые-знания) +- [План на день](#План-на-день) +- [Сложность алгоритмов / Big-O / Асимптотический анализ](#Сложность-алгоритмов,-Big-O,-Асимптотический-анализ) +- [Структуры данных](#Структуры-данных) + - [Массивы](#Массивы) + - [Связные списки](#Связные-списки-(Linked-Lists)) + - [Стек](#Стек) + - [Очередь](#Очередь) + - [Хеш-таблицы](#Хеш-таблица) +- [Дополнительно](#Дополнительно) + - [Двоичный поиск](#Бинарный-поиск) + - [Битовые операции](#Побитовые-операции) +- [Деревья](#Деревья) + - [Деревья](#Деревья,-Заметки-и-Основные-понятия) + - [Двоичное дерево поиска: BSTs](#Бинарное-дерево-поиска-(BST:-Binary-search-trees)) + - [Куча / Очередь с приоритетом / Двоичная куча](#Куча,-Приоритетная-очередь,-Бинарная-куча) - Сбалансированные деревья поиска (основная идея, без деталей) - Обходы: прямой, симметричный, обратный, BFS, DFS -- [Сортировка](#sorting) +- [Сортировка](#Сортировка) - выбором - вставками - пирамидальная @@ -225,7 +225,7 @@ Google не возьмёт тебя на работу. ![John Washam - Google Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) -## Не переживайте о том, что вы не достаточно умны +## Не переживайте о том, что вы недостаточно умны - Успешные инженеры умные, но многие из них переживают, что недостаточно умны. - [Миф о гениальных программистах](https://www.youtube.com/watch?v=0SARbwvhupQ) - [Это опасно, идти в одиночку: Сражаться с невидимыми монстрами в технологиях](https://www.youtube.com/watch?v=1i8ylq4j_EY) @@ -551,8 +551,7 @@ Google не возьмёт тебя на работу. - [ ] [Как CPU выполняет программы (video)](https://www.youtube.com/watch?v=42KTvGYQYnA) - [ ] [Коды машинных инструкций(video)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) -## Сложность алгоритмов / Big-O / Асимптотический анализ -- ничего не реализовывать +## Сложность алгоритмов, Big-O, Асимптотический анализ - [ ] [Harvard CS50 - Асимптотическая нотация (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) - [ ] [Big O нотация (основное, короткое руководство) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) - [ ] [Big O нотация (и Omega и Theta) - лучшее математическое объяснение (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) @@ -702,7 +701,7 @@ Google не возьмёт тебя на работу. - get(key) - remove(key) -## Больше знаний +## Дополнительно - ### Бинарный поиск - [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno) @@ -741,7 +740,7 @@ Google не возьмёт тебя на работу. ## Деревья -- ### Деревья - Заметки & Основные понятия +- ### Деревья, Заметки и Основные понятия - [ ] [Основы деревьев (видео)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - [ ] [Деревья (видео)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - базовые конструкции деревьев @@ -763,7 +762,7 @@ Google не возьмёт тебя на работу. - post-order (DFS: левый, правый, вершина) - pre-order (DFS: вершина, левый, правый) -- ### Бинарное дерево поиска(Binary search trees): BSTs +- ### Бинарное дерево поиска (BST: Binary search trees) - [ ] [Обзор бинарного дерева поиска (видео)](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 приложениями @@ -793,8 +792,8 @@ Google не возьмёт тебя на работу. - [ ] delete_value - [ ] get_successor // возвращает следующее максимальное значение в дереве после переданного, -1 если none -- ### Куча / Приоритетная очередь / Бинарная куча - - визуализируется как дерево, но обычно храниться в линейных структурах данных (массив, связанные список) +- ### Куча, Приоритетная очередь, Бинарная куча + - визуализируется как дерево, но обычно хранится в линейных структурах данных (массив, связанные список) - [ ] [Куча](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) @@ -802,7 +801,7 @@ Google не возьмёт тебя на работу. - [ ] [Замечания к высоте дерева (видео)](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://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) From e52ba2361b706b1f04b81ff0ed05a8cac16edd05 Mon Sep 17 00:00:00 2001 From: Julia Date: Fri, 9 Mar 2018 15:53:52 +0000 Subject: [PATCH 049/263] TESTING, API calls, SCHEDULING, BINARY SEARCH, partially PAPERS --- translations/README-ru.md | 115 +++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 6336acd..7512318 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -83,10 +83,10 @@ - [NP, NP-полные and Аппроксимирующие алгоритмы](#np-np-complete-and-approximation-algorithms) - [Кэш](#caches) - [Процессы и нити](#processes-and-threads) - - [Статьи](#papers) - - [Тестирование](#testing) - - [Планирование](#scheduling) - - [Реализация системных вызовов](#implement-system-routines) + - [Статьи](#Статьи) + - [Тестирование](#Тестирование) + - [Планирование](#Планирование) + - [Реализация системных вызовов](#Реализация-системных-вызовов) - [Поиск в строке & манипуляции](#string-searching--manipulations) - [Проектирование систем, Масштабируемость, Обработка данных](#system-design-scalability-data-handling) (if you have 4+ years experience) - [Финальный обзор](#final-review) @@ -118,7 +118,7 @@ - [Сети](#Сети-и-сетевые-протоколы) - [Компьютерная безопасность](#Компьютерная-безопасность) - [Сборка мусора](#Сборка-мусора-(Garbage-collection)) - - [Параллельное программирование](#parallel-programming) + - [Параллельное программирование](#Параллельное-программирование) - [Сообщения, сериализация и системы очередей](#messaging-serialization-and-queueing-systems) - [Быстрое преобразование Фурье](#fast-fourier-transform) - [Фильтр Блума](#bloom-filter) @@ -704,9 +704,9 @@ Google не возьмёт тебя на работу. ## Дополнительно - ### Бинарный поиск - - [ ] [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/) + - [ ] [Бинарный поиск (видео на ютубе)](https://www.youtube.com/watch?v=D5SrAga1pno) + - [ ] [Бинарный поиск (видео на khanacademy)](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/) - [ ] Реализация: - бинарный поиск (на отсортированном числовом массиве) - бинарный поиск с использованием рекурсии @@ -824,7 +824,7 @@ Google не возьмёт тебя на работу. ## Сортировка - [ ] Заметки: - - Реализуй сортировки и помни про лучшую/худую, среднюю сложность для каждой: + - Напиши код для разный сортировкок и помни про лучшую/худую, среднюю сложность для каждой: - не пузырьковая сортировка - она медленная - O(n^2), заисключением n <= 16 - [ ] устоичивость в алгоритмах сортировки ("Быстрая сортировка устойчива?") - [Устоичивость алгоритма сортировки](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) @@ -879,7 +879,7 @@ Google не возьмёт тебя на работу. - Сортировка выбором и сортировка вставками обе имеют среднюю и худшую сложность O(n^2) - Для пирамидальной сортировки, смотри структуру данных "Куча" выше. -- [ ] Не обязательно, но я рекомендую: +- [ ] Необязательно, но я рекомендую: - [ ] [Седжвик (Sedgewick) - Поразрядная сортировка (6 видео)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - [ ] [1. Строки в Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) - [ ] [2. Ключевые индексные расчеты](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) @@ -905,7 +905,7 @@ Google не возьмёт тебя на работу. - список смежности - Ознакомьтесь с каждым представлением, его преимуществами и недостатками - BFS и DFS - узнайте их вычислительную сложность, соотношение преимуществ и недостатков, способы реализации в коде - - Когда вы получили задачу, в первую очередь попробуйте построить свое решение с использованием графов, а затем двигайтесь дальше, если такого решения нет. + - Когда вы получили задачу, сначала попробуйте решить её с использованием графов, а затем двигайтесь дальше, если такого решения нет. - [ ] Лекции профессора Стивена Скина - хорошее введение: - [ ] [CSE373 2012 - Лекция 11 - Структуры данных для представления графов (видео)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) @@ -956,7 +956,7 @@ Google не возьмёт тебя на работу. - [ ] список сильно связных компонентов - [ ] проверку графа на двудольность -Вы найдете больше практических задач на графах в книге Стивена Скина (см раздел книги ниже) и в книгах о прохождении интервью. +Вы найдете больше практических задач на графах в книге Стивена Скина (см. раздел книги ниже) и в книгах о прохождении интервью. ## Еще больше знаний @@ -1095,58 +1095,57 @@ Google не возьмёт тебя на работу. - [ ] [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) -- ### 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) +- ### Статьи + - Здесь вы найдете статьи от Google, а также дургие известные статьи. + - У вас вряд ли будет время прочитать их все с начала до конца. Я рекоммендую выбирать статьи и главы в них - тратье время грамотно на то, что хотите изучить глубже. + - [Любите классические статьи?](https://www.cs.cmu.edu/~crary/819-f09/) + - [ ] [1978: Коммуникация последовательных процессов](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [разработка на языке Go](https://godoc.org/github.com/thomas11/csp) + - [ ] [2003: Файловая система Google](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) + - в 2012 заменена на Colossus + - [ ] [2004: MapReduce: Упрощенная обработка данных на крупных кластерах](http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) + - в основном заменена Cloud Dataflow + - [ ] [2007: Что каждый программист должен знать о памяти (очень длинная статья, и автор говорит пропускать некоторые разделы)](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) + - [ ] 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: Машинное обучение: The High-Interest Credit Card of Technical Debt](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) + - [ ] [2015: Continuous Pipelines в 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) + - [ ] [2015: Как разработчики ищут код: на примере](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) + - [ ] [2016: Borg, Omega, и 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) +- ### Тестирование + - Нужно пройти: + - модульное тестирование + - Mock-объекты (от англ. «объект-пародия», «объект-имитация») + - интеграционное тестирование + - внедрение зависимости + - [ ] [Гибкая методология разработки с James Bach (видео)](https://www.youtube.com/watch?v=SAhJf36_u5U) + - [ ] [Открытая лекция, данная James Bach на тему тестирования (видео)](https://www.youtube.com/watch?v=ILkT_HV9DVU) + - [ ] [Steve Freeman - разработка через тестирование (это не то, что мы имели в виду) (видео)](https://vimeo.com/83960706) + - [слайды](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) + - [ ] [Новая эра разработки через тестирование](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html) + - [ ] [Мертва ли разработка через тестирование? (видео)](https://www.youtube.com/watch?v=z9quxZsLcfo) + - [ ] [Видео-курс (152 видео) - нужны не все (видео)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g) + - [ ] [Вэб-разработка через тестирование на Питоне](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 +- ### Планирование + - как работает планирование (scheduling) в операционной системе + - можно найти информацию в видео про Операционные системы -- ### Implement system routines - - understand what lies beneath the programming APIs you use - - can you implement them? +- ### Реализация системных вызовов + - пойми, что находится под обложкой библиотек и программных интерфейсов (API), которые ты используешь + - можешь ли ты написать код для них? - ### String searching & manipulations - [ ] [Sedgewick - Suffix Arrays (video)](https://www.youtube.com/watch?v=HKPrVm5FWvg) From 1b018910eebf235f66f3bc0073fdd29cca05d702 Mon Sep 17 00:00:00 2001 From: Mikhail Usov Date: Sat, 10 Mar 2018 23:14:00 -0800 Subject: [PATCH 050/263] Update README-ru.md --- translations/README-ru.md | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 475f10a..3073c36 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -94,9 +94,9 @@ - [Упражнения по программированию](#coding-exerciseschallenges) - [Перед собеседованием](#once-youre-closer-to-the-interview) - [Ваше резюме](#your-resume) -- [О чем нужно думать на собеседовании](#be-thinking-of-for-when-the-interview-comes) -- [Вопросы к собеседующим](#have-questions-for-the-interviewer) -- [После того как вы получили работу](#once-youve-got-the-job) +- [Подумайте об этом когда подходит время собеседования](#be-thinking-of-for-when-the-interview-comes) +- [Приготовьте вопросы для интервьювера](#have-questions-for-the-interviewer) +- [Когда вас приняли на работу](#once-youve-got-the-job) ---------------- Все что ниже - опционально ---------------- @@ -1319,11 +1319,11 @@ If you need more detail on this subject, see "Sorting" section in [Additional De - [ ] [05. Maximum Flow](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) - [ ] [06. Radix Sorts](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - [ ] [07. Tries](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [08. Substring Search](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [09. Regular Expressions](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) - - [ ] [10. Data Compression](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) + - [ ] [08. Поиск подстроки](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [09. Регулярные выражения](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) + - [ ] [10. Сжатие данных](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) - [ ] [11. Reductions](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF) - - [ ] [12. Linear Programming](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) + - [ ] [12. Линейное программирование](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) - [ ] [13. Intractability](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) --- @@ -1337,17 +1337,17 @@ If you need more detail on this subject, see "Sorting" section in [Additional De Для чего вам нужно практиковаться в решении задач по программированию: - выявление проблем, и умение определять какие структуры данных и алгоритмы походят для их решения - сбор требований для задачи -- проговаривание хода решения задачи, так же как вы будете это делать на интервью +- проговаривание хода решения задачи, так же как вы будете это делать на собеседовании - написание кода на доске или на бумаге, но не на компьютере - умение оценивать сложность вашего решения по расходу времени и памяти - тестирование решений -Вот пример отличного введения в методичное, коммуникативное решение задач на интервью. Вы так же найдете это в книгах по интервью для программистов, но это подход мне кажется выдающимся: -[Схема создания алгоритма](http://www.hiredintech.com/algorithm-design/) +Вот пример отличного введения в методичное, коммуникативное решение задач на собеседовании. Вы так же найдете это в книгах по интервью для программистов, но это подход мне кажется однм из лучших: +[Схема разработки алгоритма](http://www.hiredintech.com/algorithm-design/) [My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/) -У вас нет доски дома? Не удивительно. Я не много неормальный и у меня есть большая доска дома. Но вместо доски можно использователь и планшет для рисования из магазина художественных товаров, и практиковаться сидя на диване. Это моя "диванная доска". На фото я положил ручку чтобы иметь представления о размерах. Если вы будете пользоваться ручкой, постоянно будет возникать желание что-то стереть, решение захламляется достаточно быстро. +У вас нет доски дома? Не удивительно. Я немного неормальный и у меня есть большая доска дома. Но вместо доски можно использователь и планшет для рисования из магазина художественных товаров, и практиковаться сидя на диване. Это моя "диванная доска". На фото я положил ручку чтобы иметь вы имели представление о масштабе. Если вы будете пользоваться ручкой, постоянно будет возникать желание что-то исправить и решение захламляется достаточно быстро. ![моя диванная доска](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) @@ -1369,11 +1369,11 @@ If you need more detail on this subject, see "Sorting" section in [Additional De ## Упражнения по программированию -Как только вы наполнили свою голову знаниями, самое время применить их на практике. +Как только вы заполнили свою голову знаниями, самое время применить их на практике. Выполняйте упражнения по программированию каждый день, чем больше тем лучше. - [ ] [Как найти решение](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/) +- [ ] [Как разбирать задачи из Topcoder](https://www.topcoder.com/community/data-science/data-science-tutorials/how-to-dissect-a-topcoder-problem-statement/) Сайты с упражнениями: - [LeetCode](https://leetcode.com/) @@ -1389,29 +1389,28 @@ If you need more detail on this subject, see "Sorting" section in [Additional De Возможно: - [Тестовые интервьюверы из больших компаний](http://www.gainlo.co/) -## Когда вы уже ближе к интервью +## Перед собеседованием -- [ ] Cracking The Coding Interview Set 2 (videos): +- [ ] Cracking The Coding Interview набор 2 (видео): - [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) + - [Спросите у меня что угодно: Gayle Laakmann McDowell (автор Cracking the Coding Interview)](https://www.youtube.com/watch?v=1fqxMuPmGak) ## Ваше резюме - [10 советов для подготовки (немного) менее ужасного резюме](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html) - Загляните в раздел по подготовке резюме в книге Cracking The Coding Interview и в конце книги Programming Interviews Exposed +## Подумайте об этом когда подходит время собеседования -## Подумайте об этом когда подходит время интервью - -Подумайте как отвечать приблизительно на 20 распостраненных вопросов которые задают на интервью, подготовьте 2-3 ответа на каждый из них. +Подумайте как отвечать приблизительно на 20 распостраненных вопросов которые задают на собеседовании, подготовьте 2-3 ответа на каждый из них. Расскажите историю, а не просто сухой пересказ о том над чем вы работали. - Почему вы хотите получить эту работу? - Какая самая большая проблема которую вам приходилось решать? - Самые сложные задачи с которыми вам приходилось сталкиваться? - Лучшие/худшие дизайн решения с которыми вы сталкивались? -- Идеи как улучшить какой-нибудь существующий продукт от Google. +- Идеи как улучшить какой-нибудь существующий продукт. - Вы более продуктивны как часть команды или как иднивидуальный разработчик? - Какие из ваших навыков или что из опыта будет наиболее ценным для данной позиции? - Что вам больше всего понравилось в работе над [проектом Х/в компании Х]? From a8016d5535b7143288a9b49387622fb470a98327 Mon Sep 17 00:00:00 2001 From: = <=> Date: Tue, 13 Mar 2018 10:41:20 +0000 Subject: [PATCH 051/263] Message serialisation --- translations/README-ru.md | 52 +++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 7512318..f260be5 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -119,9 +119,9 @@ - [Компьютерная безопасность](#Компьютерная-безопасность) - [Сборка мусора](#Сборка-мусора-(Garbage-collection)) - [Параллельное программирование](#Параллельное-программирование) - - [Сообщения, сериализация и системы очередей](#messaging-serialization-and-queueing-systems) - - [Быстрое преобразование Фурье](#fast-fourier-transform) - - [Фильтр Блума](#bloom-filter) + - [Сообщения, сериализация и системы очередей](#Сообщения,-сериализация-и-системы-очередей) + - [Быстрое преобразование Фурье](#Быстрое-преобразование-Фурье) + - [Фильтр Блума](#Фильтр Блума) - [HyperLogLog](#hyperloglog) - [Локально-чувствительное хеширование](#locality-sensitive-hashing) - [Дерево ван Эмде Боаса](#van-emde-boas-trees) @@ -824,15 +824,15 @@ Google не возьмёт тебя на работу. ## Сортировка - [ ] Заметки: - - Напиши код для разный сортировкок и помни про лучшую/худую, среднюю сложность для каждой: + - Напиши код для разных сортировкок и помни про лучшую/худую, среднюю сложность для каждой: - не пузырьковая сортировка - она медленная - O(n^2), заисключением n <= 16 - - [ ] устоичивость в алгоритмах сортировки ("Быстрая сортировка устойчива?") + - [ ] устойчивость в алгоритмах сортировки ("Быстрая сортировка устойчива?") - [Устоичивость алгоритма сортировки](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) - [Устоичивость в алгоритмах сортировки](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/) - Для пирамидальной сортировки, см. структуру данных "Куча" выше. Пирамидальная сортировка эффективна, но не устойчива. @@ -1032,8 +1032,7 @@ Google не возьмёт тебя на работу. - [ ] [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 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: @@ -1637,36 +1636,35 @@ You're never really done. - [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1) - [ ] [Эффективное использование Python для высокопроизводительных параллельных вычислений (видео)](https://www.youtube.com/watch?v=uY85GkaYzBk) -- ### Messaging, Serialization, and Queueing Systems - - [ ] [Thrift](https://thrift.apache.org/) - - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) +- ### Сообщения, сериализация и системы очередей + - [ ] [Apache Thrift - язык описания интерфейсов](https://thrift.apache.org/) + - [Урок по Thrift](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) + - [Уроки](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/) + - [gRPC для Java разработчиков (видео)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) + - [ ] [Redis — сетевое журналируемое хранилище данных](http://redis.io/) + - [Урок](http://try.redis.io/) - [ ] [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/) - - [ ] [RabbitMQ](https://www.rabbitmq.com/) - - [Get Started](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) + - [ ] [RabbitMQ - платформа для обмены сообщениями](https://www.rabbitmq.com/) + - [Урок](https://www.rabbitmq.com/getstarted.html) + - [ ] [Celery - распределенная очередь заданий](http://www.celeryproject.org/) + - [Первые шаги с Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html) + - [ ] [ZeroMQ - библиотека для передачи сообщений](http://zeromq.org/) + - [Вступление к ZeroMQ](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/) + - [ ] [Apache Kafka — распределённый программный брокер сообщений](http://kafka.apache.org/documentation.html#introduction) + - [ ] [MessagePack - компьютерный формат обмена данными](http://msgpack.org/index.html) + - [ ] [Apache Avro](https://avro.apache.org/) -- ### Fast Fourier Transform +- ### Быстрое преобразование Фурье - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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) From d10935ca720edee12785d1f8ea74e7d519bfcb3f Mon Sep 17 00:00:00 2001 From: = <=> Date: Tue, 13 Mar 2018 10:50:08 +0000 Subject: [PATCH 052/263] Bloom filter, fourier transform --- translations/README-ru.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f260be5..b4eafcc 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1658,21 +1658,21 @@ You're never really done. - [ ] [Apache Avro](https://avro.apache.org/) - ### Быстрое преобразование Фурье - - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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/) + - [ ] [Интерактивное руководство по преобразованию Фурье](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/) + - [ ] [Что такое преобразованию Фурье? Для чего оно нужно?](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) + - [ ] [Разделяй и властвуй: Быстрое преобразование Фурье (видео)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) + - [ ] [Объяснение Быстрого преобразования Фурье](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) - ### Фильтр Блума - - 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 битами и к хеширующими функциями, то вставка и тестирование на членство имеют сложность O(k) + - [Фильтры Блума](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Фильтры Блума | Добыча огромных наборов данных | Стэндфордский Университет](https://www.youtube.com/watch?v=qBTdukbzc78) + - [Урок](http://billmill.org/bloomfilter-tutorial/) + - [Как написать приложение фильтра Bloom](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/) - ### HyperLogLog - - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + - [Как посчитать миллиард различных объектов, когда у вас есть только 1.5KB памяти](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) - ### Locality-Sensitive Hashing - used to determine the similarity of documents From 8898205818211bc3b87ff14a1f333e718c63c23a Mon Sep 17 00:00:00 2001 From: Hello World Date: Sun, 2 Sep 2018 16:49:16 +0700 Subject: [PATCH 053/263] =?UTF-8?q?Fix=20l=E1=BB=97i=20tr=C3=AAn=20text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix chính tả - Fix các phần bị lỗi co phần nội dung (Arrays, Queue) - Sửa Lập trình linh hoạt (Dynamic Programming) thành Quy hoạch động --- translations/README-vi.md | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/translations/README-vi.md b/translations/README-vi.md index ce185d2..5585363 100644 --- a/translations/README-vi.md +++ b/translations/README-vi.md @@ -284,8 +284,8 @@ Bạn sẽ thấy vài tài liệu về C, C++ và Python bên dưới, vì tôi - Không quá khó, phần lớn các bài toán có lẽ dễ hơn nhiều so với những gì bạn thường thấy trong một buổi phỏng vấn (dựa theo những gì tôi đọc được) - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - Trả lời bằng Java -   - Được khuyến nghị trên [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/) -    - Nếu bạn thấy mọi người trích dẫn "The Google Resume", đó là một cuốn sách được thay thế bởi "Cracking the Coding Interview". + - Được khuyến nghị trên [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/) + - Nếu bạn thấy mọi người trích dẫn "The Google Resume", đó là một cuốn sách được thay thế bởi "Cracking the Coding Interview". Nếu bạn có nhiều thời gian hơn nữa: @@ -377,7 +377,7 @@ hoặc: - Nhiều câu chuyện thú vị từ kinh nghiệm của tác giả trong việc giải quyết các vấn đề thực tế và trong giới học thuật. - Code mẫu bằng C. - Nhược: -               - Cô đặc và có thể khó hiểu ngang với CLRS, và trong một số chủ đề, CLRS có thể là một tài liệu tốt hơn để tham khảo. + - Cô đặc và có thể khó hiểu ngang với CLRS, và trong một số chủ đề, CLRS có thể là một tài liệu tốt hơn để tham khảo. - Các chương 7, 8, 9 có thể rất vất vả để theo được, vì một vài phần không được giải thích rõ, hoặc là yêu cầu nhiều não hơn những gì tôi có. - Đừng hiểu lầm: Tôi thích Skiena, cách dạy học và phong các của ông ấy, nhưng tôi có lẽ không đủ khả năng để tốt nghiệp ở Stony Brook (nơi Skiena giảng dạy). - Danh mục thuật toán: @@ -402,7 +402,7 @@ hoặc: - Vài chương đầu trình bày những giải pháp thông minh để giải quyết các vấn đề lập trình (một số đã rất cũ, từ thời người ta còn sử dụng băng từ). Nhưng, đó chỉ là phần mở đầu. đây là một quyển sách về thiết kế và cấu trúc phần mềm, giống như Code Complete, nhưng ngắn hơn nhiều. - ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ -   - Sách tạm được, nhưng sau khi làm việc với các bài toán trong vài trang, tôi thấy nhức đầu với ngôn ngữ Pascal, do-while loop, mảng bắt đầu với số 1 (thay vì 0 như Java, C, C++, ...), và một vài thông tin không rõ ràng. + - Sách tạm được, nhưng sau khi làm việc với các bài toán trong vài trang, tôi thấy nhức đầu với ngôn ngữ Pascal, do-while loop, mảng bắt đầu với số 1 (thay vì 0 như Java, C, C++, ...), và một vài thông tin không rõ ràng. - Lẽ ra nên dành thời gian để giải toán từ các quyển sách khác hoặc làm toán lập trình online. ## Trước khi bắt đầu @@ -484,13 +484,13 @@ Tôi có lẽ không đủ thời gian để thử hết tất cả các bước Bạn có thể xem code của tôi ở các trang sau: - - [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) Bạn không cần phải ghi nhớ cặn kẽ từ giải thuật. -Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy tính. Chạy thử trên giấy với vài bộ dữ liệu mẫu, sau đó chạy thử thuật tóan của bạn trên một máy tính. +Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy tính. Chạy thử trên giấy với vài bộ dữ liệu mẫu, sau đó chạy thử thuật toán của bạn trên một máy tính. ## Kiến thức tiên quyết @@ -531,7 +531,7 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy ## Cấu trúc dữ liệu - ### Arrays -   - Cấp phát mảng vector tự động tùy biến kích cỡ. + - Cấp phát mảng vector tự động tùy biến kích cỡ. - [ ] Miêu tả, tên gốc được giữ nguyên kèm với bản dịch sang tiếng Việt: - [Arrays - Mảng (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays - Mảng tuyến tính và mảng đa chiều(video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) @@ -541,7 +541,7 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - [Jagged Arrays - Mảng trong mảng (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [Jagged Arrays - Mảng trong mảng (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) - [Resizing arrays - Mảng có thể tùy biến kích thước (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) - - [ ] Cấp phát vector (Mảng có thể thay đổi với khả năng tự điều chỉnh kích cỡ): + - [ ] Cấp phát vector (Mảng có thể thay đổi với khả năng tự điều chỉnh kích cỡ): - [ ] Tập sử dụng mảng và con trỏ, dùng phép toán con trỏ để nhảy tới một chỉ mục (index) thay vì sử dụng chỉ mục. - [ ] Tạo mảng mới với vùng nhớ được cấp phát sẵn - Có thể triển khai mảng số nguyên một cách nhanh chóng, nhưng không sử dụng các tính năng sẵn có @@ -565,7 +565,7 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - O(n) để thêm/xóa tại bất cứ đâu - [ ] Không gian - Liên tục trong bộ nhớ, giúp cải thiện hiệu suất - - Không gian cần thiết = (Kích cở của mảng, thường >= n)* kích thước của 1 phần tử, cho dù là 2n, vẫn xem như O(n) + - Không gian cần thiết = (Kích cỡ của mảng, thường >= n)* kích thước của 1 phần tử, cho dù là 2n, vẫn xem như O(n) - ### Linked Lists - [ ] Miêu tả: @@ -610,7 +610,7 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - [ ] [Queue (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - [ ] [Priority Queues - Hàng đợi ưu tiên (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) -   - [ ] Cài đặt sử dụng danh sách liên kết, áp dụng con trỏ đuôi: + - [ ] Cài đặt sử dụng danh sách liên kết, áp dụng con trỏ đuôi: - enqueue(value) - Thêm giá trị ở đuôi - dequeue() - Trả về giá trị của dữ liệu được thêm vào xa nhất (thông thường là dữ liệu đầu tiên trong danh sách) - empty() @@ -620,7 +620,7 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - empty() - full() - [ ] Chi phí: -       - Không cài đặt đúng việc sử dụng danh sách liên kết khi enqueue tại đầu và dequeue tại đuôi sẽ có chi phí là O(n) bởi vì bạn cần con trỏ next tới giá trị cuối cùng, khiến việc phải chạy qua toàn danh sách mỗi lần dequeue + - Không cài đặt đúng việc sử dụng danh sách liên kết khi enqueue tại đầu và dequeue tại đuôi sẽ có chi phí là O(n) bởi vì bạn cần con trỏ next tới giá trị cuối cùng, khiến việc phải chạy qua toàn danh sách mỗi lần dequeue - enqueue: O(1) (Không đáng kể, danh sách liên kết và mảng [probing]) - dequeue: O(1) (danh sách liên kết và mảng) - empty: O(1) (danh sách liên kết và mảng) @@ -633,7 +633,6 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - [ ] [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) - - [ ] Các khóa học online: - [ ] [Understanding Hash Functions - Hiểu hàm băm (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) - [ ] [Using Hash Tables - Sử dụng bảng băm (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html) @@ -645,8 +644,7 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - [ ] Phân phối bảng băm: - [Instant Uploads And Storage Optimization In Dropbox - Tải nhanh và tối ưu lưu trữ trong Dropbox (video)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) - [Distributed Hash Tables - Phân phối bảng băm(video)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) - -   - [ ] Cài đặt với mảng sử dụng thăm dò tuyến tính: + - [ ] Cài đặt với mảng sử dụng thăm dò tuyến tính: - hash(k, m) - m là kích thước của bảng băm - add(key, value) - nếu khóa đã tồn tại, cập nhật giá trị - exists(key) @@ -1385,7 +1383,7 @@ Không có bảng trắng ở nhà? Cũng hợp lý chứ. Tôi có chút khác Phụ lục: - [Toán học cho nhà lập trình hàng đầu (Mathematics for Topcoders)](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-topcoders/) -- [Lập trình linh hoạt - Từ cơ bản đến nâng cao (Dynamic Programming – From Novice to Advanced)](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/) +- [Quy hoạch động - Từ cơ bản đến nâng cao (Dynamic Programming – From Novice to Advanced)](https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/) - [Các tài liệu liên quan tới phỏng vấn của MIT (MIT Interview Materials)](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) - [Các bài tập để lập trình tốt hơn đối với ngôn ngữ được lựa chọn (Exercises for getting better at a given language)](http://exercism.io/languages) From fbe4818f31c48b1909673f3e336753f1af28f100 Mon Sep 17 00:00:00 2001 From: Mateusz Witkowski Date: Sun, 23 Sep 2018 23:16:30 +0200 Subject: [PATCH 054/263] fixed broken links from TopCoder --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index e517987..2801292 100644 --- a/README.md +++ b/README.md @@ -508,8 +508,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [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/) + - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) + - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) - [ ] [Cheat sheet](http://bigocheatsheet.com/) @@ -648,7 +648,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### 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/) + - [ ] [detail](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/) - [ ] Implement: - binary search (on sorted array of integers) - binary search using recursion @@ -1147,7 +1147,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [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/) + - [ ] [TopCoder - Using Tries](https://www.topcoder.com/community/competitive-programming/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) @@ -1234,7 +1234,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [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/) + - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/competitive-programming/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) @@ -1375,8 +1375,8 @@ I added the pen in the photo for scale. If you use a pen, you'll wish you could Supplemental: -- [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/) +- [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) +- [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) - [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) - [Exercises for getting better at a given language](http://exercism.io/languages) @@ -1394,8 +1394,8 @@ See [Book List above](#book-list) Once you've learned your brains out, put those brains to work. Take coding challenges every day, as many as you can. -- [ ] [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/) +- [ ] [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) +- [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) Coding Interview Question Videos: - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) @@ -1717,7 +1717,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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) - [ ] [Red-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/) + - [ ] [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/community/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) - [ ] **2-3 search trees** - In practice: From 7e8ee7663eaed82fa0c5c857333e94638453efb6 Mon Sep 17 00:00:00 2001 From: mfurga Date: Mon, 24 Sep 2018 09:39:02 +0200 Subject: [PATCH 055/263] Fixed broken link to queue data structure --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e517987..6ecb4c9 100644 --- a/README.md +++ b/README.md @@ -596,7 +596,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### 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) + - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - [ ] [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: From a263e218e857475aedcf6ee0b5f2ea2175d799f3 Mon Sep 17 00:00:00 2001 From: Akshat Agarwal Date: Mon, 1 Oct 2018 17:07:28 +0530 Subject: [PATCH 056/263] Adding Challenge sites --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0f1f75b..fbc6a15 100644 --- a/README.md +++ b/README.md @@ -1413,6 +1413,7 @@ Challenge sites: - [Geeks for Geeks](http://www.geeksforgeeks.org/) - [InterviewBit](https://www.interviewbit.com/invite/icjf) - [Sphere Online Judge (spoj)](http://www.spoj.com/) +- [Codechef](https://www.codechef.com/) Challenge repos: - [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) From 0ed7edf3c5e7c3ae0ca14b80f39b63c264f7a0d9 Mon Sep 17 00:00:00 2001 From: Sangseok Doe Date: Fri, 5 Oct 2018 15:28:20 -0400 Subject: [PATCH 057/263] Retranslated Korean with the updated statement(changed 'Google Interview University' to 'Coding Interview University') --- translations/README-ko.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 20d741b..5a91bde 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -1,12 +1,12 @@ -# 구글 인터뷰 대학(Google Interview University) +# 코딩 인터뷰 대학(Coding Interview University) > 나는 원래 이것을 소프트웨어 엔지니어가 되기 위한 짧은 연구 목록으로 만들었다. > 그러나 지금 당신이 볼수 있듯이 이 목록은 매우 커졌다. 이 목록을 숙지 한 후, > [나는 아마존에 소프트웨어 엔지니어로 채용됐다](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! -> 를 보면 당신은 아마 내가 한 것처럼 많이 공부할 필요는 없을 것이다. 어쨌든 당신이 필요로 하는 모든 것은 여기에 있다. +> 당신은 아마 내가 한 것처럼 많이 공부할 필요는 없을 것이다. 어쨌든 당신이 필요로 하는 모든 것은 여기에 있다. > -> 여기에 나열된 목록들은 거의 모든 소프트웨어 회사의 인터뷰를 준비하는데에 도움이 될것이다. -> 아마존, 페이스북, 구글, 마이크로소프트 같은 거대 기업을 포함. +> 여기에 나열된 목록들은 아마존, 페이스북, 구글, 마이크로소프트 같은 거대 기업을 포함한 거의 모든 소프트웨어 회사의 인터뷰를 준비하는데에 도움이 될것이다. +> > > *행운을 빈다!* @@ -26,9 +26,9 @@ - [브라질 포르투갈어](https://github.com/jwasham/google-interview-university/issues/113) - [한국어](https://github.com/jwasham/google-interview-university/issues/118) -## 구글 인터뷰 대학이란? +## 코딩 인터뷰 대학이란? -구글 인터뷰 대학은 웹 개발자(컴퓨터공학 학위 없이 독학한)에서 구글의 소프트웨어 엔지니어가 되기 위한 나의 몇 달 간의 공부 계획이다. +코딩 인터뷰 대학은 웹 개발자(컴퓨터공학 학위 없이 독학)에서 구글의 소프트웨어 엔지니어가 되기 위한 나의 몇 달 간의 공부 계획이다. ![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) @@ -46,7 +46,7 @@ ## Table of Contents -- [구글 인터뷰 대학이란?](#구글-인터뷰-대학이란) +- [코딩 인터뷰 대학이란?](#코딩-인터뷰-대학이란) - [Why use it?](#why-use-it) - [How to use it?](#how-to-use-it) - [구글 분위기 내기](#구글-분위기-내기) From 95b5f49ab12605b355c60948ef800166a9952f90 Mon Sep 17 00:00:00 2001 From: Daniel Larner Date: Sun, 7 Oct 2018 18:37:26 -0400 Subject: [PATCH 058/263] adds video on CPU processing --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e517987..8a51334 100644 --- a/README.md +++ b/README.md @@ -487,6 +487,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [answers to questions](https://github.com/lekkas/c-algorithms) - [ ] **How computers process a program:** + - [ ] [How CPU executes a program](https://www.youtube.com/watch?v=XM4lGflQFvA) - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) From abeb06cd55c575246e193d4a91696a6210ad98d3 Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Thu, 11 Oct 2018 09:26:37 +0400 Subject: [PATCH 059/263] translation --- translations/README-ru.md | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 996550f..2b04a93 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1703,19 +1703,15 @@ Google не возьмёт тебя на работу. - [ ] [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 и 2/3 деревья теперь в прошлом, и красно-черные деревья все больше набирают популярность. Довольно интересный саморегулирующийся тип это расширяющееся дерево, который использует для перемещения любого ключа к вершине" - Стивен Сол Лекена + - Из всех них я предпочел написать расширяющееся дерево. Из того, что я читал, писать реализации сбалансированного дерева поиска на интервью не понадобится. Но я хотел преодолеть еще одну задачу в програмировании, и будем честны, расширяющиеся деревья превосходны. И я прочитал довольно много про красно-черные деревья. + - расширяющееся дерево: вставка, поиска, и удаление + Если вы решите реализовать красно-черное дерево напишите: + - функции поиска и вставки, пропустите удаление + - Я хочу изучить побольше про B-деревья, т.к. они применимы при работе с очень большими данными + - [ ] [Сбалансированный поиск дерева](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - [ ] **AVL trees** - In practice: From 22884b94d7e161d324ae050639cad902bc2b7c65 Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Thu, 11 Oct 2018 09:29:42 +0400 Subject: [PATCH 060/263] Fixes --- translations/README-ru.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 2b04a93..4708dcd 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1705,8 +1705,8 @@ Google не возьмёт тебя на работу. - ### Сбалансированные деревья поиска - Знать как минимум один тип сбалансированного дерева поиска (и как его осуществить): - - "Среди сбалансированных деревьев поиска AVL и 2/3 деревья теперь в прошлом, и красно-черные деревья все больше набирают популярность. Довольно интересный саморегулирующийся тип это расширяющееся дерево, который использует для перемещения любого ключа к вершине" - Стивен Сол Лекена - - Из всех них я предпочел написать расширяющееся дерево. Из того, что я читал, писать реализации сбалансированного дерева поиска на интервью не понадобится. Но я хотел преодолеть еще одну задачу в програмировании, и будем честны, расширяющиеся деревья превосходны. И я прочитал довольно много про красно-черные деревья. + - "Среди сбалансированных деревьев поиска AVL и 2/3 деревья теперь в прошлом, а красно-черные деревья все больше набирают популярность. Довольно интересный саморегулирующийся тип это расширяющееся дерево, который использует вращения для перемещения любого ключа к вершине" - Стивен Сол Лекена + - Из всех них я предпочел написать расширяющееся дерево. Из того, что я читал, писать реализации сбалансированного дерева поиска во время интервью не понадобится. Но я хотел преодолеть еще одну задачу в програмировании, и будем честны, расширяющиеся деревья превосходны. Еще я прочитал довольно много про красно-черные деревья. - расширяющееся дерево: вставка, поиска, и удаление Если вы решите реализовать красно-черное дерево напишите: - функции поиска и вставки, пропустите удаление From bff56d5c0ff71924adeaa66bc969b12e93d26aa8 Mon Sep 17 00:00:00 2001 From: Eugene Ilyushin Date: Thu, 11 Oct 2018 11:47:30 +0300 Subject: [PATCH 061/263] Additional Books --- translations/README-ru.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 996550f..bd2bbf2 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1456,18 +1456,18 @@ Google не возьмёт тебя на работу. --- -## Additional Books +## Дополнительная литература -- [ ] [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) - - an oldie but a goodie -- [ ] [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - a modern option -- [ ] [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) -- [ ] [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns -- [ ] [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - - aka the "Gang Of Four" book, or GOF - - the canonical design patterns book +- [ ] [Среда программирования Unix](http://product.half.ebay.com/The-UNIX-Programming-Environment-by-Brian-W-Kernighan-and-Rob-Pike-1983-Other/54385&tg=info) + - проверенно временем +- [ ] [Командная строка Linux: введение](https://www.amazon.com/dp/1593273894/) + - современный вариант +- [ ] [Протокол TCP/IP с иллюстрациями(серия книг)](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [ ] [Погружение в шаблоны проектирования](https://www.amazon.com/gp/product/0596007124/) + - введение в шаблоны проектирования +- [ ] [Шаблоны проектирования: переиспользование компонент в ООП](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) + - аля книга "Банды четырех", или GOF + - каноническая книга про шаблоны проектирования - [ ] [Site Reliability Engineering](https://landing.google.com/sre/book.html) - [Site Reliability Engineering: How Google Runs Production Systems](https://landing.google.com/sre/) - [ ] [UNIX and Linux System Administration Handbook, 4th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/) From e523bf0793fa1ade89017530e0aad13e46ab2d85 Mon Sep 17 00:00:00 2001 From: Shireesha Bongarala Date: Sat, 20 Oct 2018 10:55:34 +0530 Subject: [PATCH 062/263] Fix broken links for Sedgewick and Wayne algorithms lectures. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 93472cb..c85f9ec 100644 --- a/README.md +++ b/README.md @@ -331,9 +331,9 @@ If you have a better recommendation for C++, please let me know. Looking for a c ### Java - [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - videos with book content (and Sedgewick!): - - [Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) - - [Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) + - videos with book content (and Sedgewick!) on coursera: + - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) + - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) OR: From 02bcfcb67a0659a9634357312490ebdbe8f7749f Mon Sep 17 00:00:00 2001 From: Roman Mysan Date: Sat, 20 Oct 2018 20:31:02 +0200 Subject: [PATCH 063/263] Update README.md --- README.md | 86 ++++++++++++++++++++----------------------------------- 1 file changed, 31 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index e517987..d7a0eb6 100644 --- a/README.md +++ b/README.md @@ -779,18 +779,18 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - For heapsort, see Heap data structure above. Heap sort is great, but not stable. -- [ ] [Sedgewick - Mergesort (5 videos)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [1. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) - - [ ] [2. Bottom up Mergesort](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) - - [ ] [3. Sorting Complexity](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [4. Comparators](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [5. Stability](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) +- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) -- [ ] [Sedgewick - Quicksort (4 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [1. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [2. Selection](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [3. Duplicate Keys](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [4. System Sorts](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) +- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) - [ ] UC Berkeley: - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) @@ -822,13 +822,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - For heapsort, see Heap data structure above. - [ ] Not required, but I recommended them: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [1. Strings in Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) - - [ ] [2. Key Indexed Counting](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) - - [ ] [3. Least Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) - - [ ] [4. Most Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [5. 3 Way Radix Quicksort](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [6. Suffix Arrays](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1) + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [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) @@ -1122,13 +1122,13 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - can you implement them? - ### String searching & manipulations - - [ ] [Sedgewick - Suffix Arrays (video)](https://www.youtube.com/watch?v=HKPrVm5FWvg) - - [ ] [Sedgewick - Substring Search (videos)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [1. Introduction to Substring Search](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [2. Brute-Force Substring Search](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) - - [ ] [3. Knuth-Morris Pratt](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [4. Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) - - [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) @@ -1137,10 +1137,10 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - 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. - - [ ] [Sedgewick - Tries (3 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [1. R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [2. Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [3. Character Based Operations](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) - [ ] [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) @@ -1320,32 +1320,8 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [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) -- [ ] [Sedgewick Videos - Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) - - [ ] [01. Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) - - [ ] [02. Analysis of Algorithms](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) - - [ ] [03. Stacks and Queues](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) - - [ ] [04. Elementary Sorts](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) - - [ ] [05. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [06. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [07. Priority Queues](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) - - [ ] [08. Elementary Symbol Tables](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) - - [ ] [09. Balanced Search Trees](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) - - [ ] [10. Geometric Applications of BST](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) - - [ ] [11. Hash Tables](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) -- [ ] [Sedgewick Videos - Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50) - - [ ] [01. Undirected Graphs](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) - - [ ] [02. Directed Graphs](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) - - [ ] [03. Minimum Spanning Trees](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj) - - [ ] [04. Shortest Paths](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) - - [ ] [05. Maximum Flow](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) - - [ ] [06. Radix Sorts](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [07. Tries](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [08. Substring Search](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [09. Regular Expressions](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) - - [ ] [10. Data Compression](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) - - [ ] [11. Reductions](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF) - - [ ] [12. Linear Programming](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) - - [ ] [13. Intractability](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) +- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) --- From 4b78627a6eeb11d545c1c62d5ac249d9f87dbc93 Mon Sep 17 00:00:00 2001 From: Roman Mysan Date: Sat, 20 Oct 2018 20:33:32 +0200 Subject: [PATCH 064/263] Update README.md --- README.md | 88 ++++++++++++++++++++----------------------------------- 1 file changed, 32 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index e517987..f6ef524 100644 --- a/README.md +++ b/README.md @@ -779,18 +779,18 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - For heapsort, see Heap data structure above. Heap sort is great, but not stable. -- [ ] [Sedgewick - Mergesort (5 videos)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [1. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) - - [ ] [2. Bottom up Mergesort](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) - - [ ] [3. Sorting Complexity](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [4. Comparators](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [5. Stability](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) +- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) -- [ ] [Sedgewick - Quicksort (4 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [1. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [2. Selection](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [3. Duplicate Keys](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [4. System Sorts](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) +- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) - [ ] UC Berkeley: - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) @@ -822,13 +822,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - For heapsort, see Heap data structure above. - [ ] Not required, but I recommended them: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [1. Strings in Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) - - [ ] [2. Key Indexed Counting](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) - - [ ] [3. Least Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) - - [ ] [4. Most Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [5. 3 Way Radix Quicksort](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [6. Suffix Arrays](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1) + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [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) @@ -1122,13 +1122,13 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - can you implement them? - ### String searching & manipulations - - [ ] [Sedgewick - Suffix Arrays (video)](https://www.youtube.com/watch?v=HKPrVm5FWvg) - - [ ] [Sedgewick - Substring Search (videos)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [1. Introduction to Substring Search](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [2. Brute-Force Substring Search](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) - - [ ] [3. Knuth-Morris Pratt](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [4. Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) - - [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) @@ -1137,10 +1137,10 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - 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. - - [ ] [Sedgewick - Tries (3 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [1. R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [2. Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [3. Character Based Operations](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) - [ ] [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) @@ -1320,32 +1320,8 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [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) -- [ ] [Sedgewick Videos - Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) - - [ ] [01. Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) - - [ ] [02. Analysis of Algorithms](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) - - [ ] [03. Stacks and Queues](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) - - [ ] [04. Elementary Sorts](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) - - [ ] [05. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [06. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [07. Priority Queues](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) - - [ ] [08. Elementary Symbol Tables](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) - - [ ] [09. Balanced Search Trees](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) - - [ ] [10. Geometric Applications of BST](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) - - [ ] [11. Hash Tables](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) -- [ ] [Sedgewick Videos - Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50) - - [ ] [01. Undirected Graphs](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) - - [ ] [02. Directed Graphs](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) - - [ ] [03. Minimum Spanning Trees](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj) - - [ ] [04. Shortest Paths](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) - - [ ] [05. Maximum Flow](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) - - [ ] [06. Radix Sorts](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [07. Tries](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [08. Substring Search](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [09. Regular Expressions](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) - - [ ] [10. Data Compression](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) - - [ ] [11. Reductions](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF) - - [ ] [12. Linear Programming](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) - - [ ] [13. Intractability](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) +- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) --- @@ -1777,7 +1753,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - ### Disjoint Sets & Union Find - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) - - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) + - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) - ### Math for Fast Processing - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) From 9f9179d6c7329320d99c3a2c496842efd4b3616a Mon Sep 17 00:00:00 2001 From: Roman Mysan Date: Sun, 21 Oct 2018 12:37:30 +0200 Subject: [PATCH 065/263] Update programming-language-resources.md added book to java section --- programming-language-resources.md | 1 + 1 file changed, 1 insertion(+) diff --git a/programming-language-resources.md b/programming-language-resources.md index ffdffe7..222486d 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -48,6 +48,7 @@ - [Software Construction In Java (video)](https://www.edx.org/course/software-construction-java-mitx-6-005-1x) - [Introduction To Programming In Java](http://introcs.cs.princeton.edu/java/home/) - [Algorithms 4th Ed - Algorithm Book In Java](http://algs4.cs.princeton.edu/home/) + - [Effective Java 3rd Edition](https://www.amazon.com/Effective-Java-Joshua-Bloch-ebook/dp/B078H61SCH) - Go - [The Go programming Language](https://golang.org/) - [The Go programming Language (book)](http://www.gopl.io/) From d34a578f520ab22b2a034f3140fe90096b5d77c8 Mon Sep 17 00:00:00 2001 From: Phil Wells Date: Thu, 25 Oct 2018 16:14:52 -0400 Subject: [PATCH 066/263] link to HLA wikipedia article --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fe01521..a5b404e 100644 --- a/README.md +++ b/README.md @@ -292,7 +292,7 @@ If short on time: - [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented HLA, so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - These chapters are worth the read to give you a nice foundation: - Chapter 2 - Numeric Representation - Chapter 3 - Binary Arithmetic and Bit Operations From f9244585c4f7edc974257d550887756360803aa4 Mon Sep 17 00:00:00 2001 From: Phondanai Khanti Date: Sun, 28 Oct 2018 20:19:36 +0700 Subject: [PATCH 067/263] Update Thai translation and fix some typos --- translations/README-th.md | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/translations/README-th.md b/translations/README-th.md index 25874d5..508a165 100644 --- a/translations/README-th.md +++ b/translations/README-th.md @@ -5,7 +5,7 @@ > > *ขอให้คุณโชคดี!* -การแปลภาษา: +ภาษาอื่นๆ: - [中文版本](translations/README-cn.md) - กำลังดำเนินการแปลภาษา: - [Español](https://github.com/jwasham/coding-interview-university/issues/80) @@ -32,7 +32,7 @@ ![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) -บทความนี้สำหรับคนที่อยากเป็น **วิศวกรซอฟต์แวร์** หรือต้องการเปลี่ยนมาจากนักพัฒนาซอฟต์แวร์หรือนักพัฒนาเว็บไซด์มาเป็นวิศวกรซอฟต์แวร์ (ผู้ซึ่งมีความรู้ความเข้าใจลึกซึ่งในหลักการของวิทยาการคอมพิวเตอร์) ถ้าคุณมีประสบการณ์หลายปีและมั่นใจในประสบการณ์การเป็นวิศวกรซอฟต์แวร์ของคุณ จะได้เจอการสัมภาษณ์ที่ยากขึ้นแน่นอน +บทความนี้สำหรับคนที่อยากเป็น **วิศวกรซอฟต์แวร์** หรือต้องการเปลี่ยนมาจากนักพัฒนาซอฟต์แวร์หรือนักพัฒนาเว็บไซด์มาเป็นวิศวกรซอฟต์แวร์ (ผู้ซึ่งมีความรู้ความเข้าใจลึกซึ้งในหลักการของวิทยาการคอมพิวเตอร์) ถ้าคุณมีประสบการณ์หลายปีและมั่นใจในประสบการณ์การเป็นวิศวกรซอฟต์แวร์ของคุณ จะได้เจอการสัมภาษณ์ที่ยากขึ้นแน่นอน ถ้าคุณมีประสบการณ์การพัฒนาซอฟต์แวร์หรือเว็บไซต์มาหลายปี แต่ในบริษัทซอฟต์แวร์ขนาดใหญ่ของโลกอย่าง Google Amazon Facebook และ Microsoft มองการพัฒนาซอฟต์แวร์ของวิศวกรซอฟต์แวร์ที่ต่างกันออกไปจากการพัฒนาซอฟต์แวร์หรือเว็บไซต์โดยทั่วๆไป และบริษัทที่กล่าวมานี้ก็ต้องการความรู้ทางวิทยาการคอมพิวเตอร์ที่เข้มข้นอย่างมาก @@ -202,7 +202,7 @@ บางวิดีโอนั้น สามารถเข้าถึงได้เฉพาะการลงทะเบียนเรียนใน Coursera, EdX หรือ Lynda.com ซึ่งเรียกว่า MOOCs บางครั้งคอร์สที่คุณต้องการเข้าไปดูวิดีโอนั้นยังไม่เปิด คุณจำเป็นต้องรอประมาณสองสามเดือน ส่วน Lynda.com นั้นต้องเสียเงิน - ผมยินดีหากคุณช่วยเพิ่มแหล่งความรู้ที่ฟรีและสามารถเข้าถึงได้แบบสาธารณะ เช่น วิดีโอใน YouTube ที่เป็นวิดีโอที่ใช้ในคอร์สเรียนนั้นๆ + ผมยินดีหากคุณช่วยเพิ่มแหล่งความรู้ที่ฟรีและสามารถเข้าถึงได้แบบสาธารณะ เช่น วิดีโอใน YouTube ที่เป็นวิดีโอที่ใช้ในคอร์สเรียนนั้นๆ ซึ่งผมชอบใช้บทเรียนที่มาจากมหาวิทยาลัยต่างๆ @@ -242,7 +242,7 @@ You need to be very comfortable in the language and be knowledgeable. [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. +คุณอาจจะเห็นแหล่งเรียนรู้เกี่ยวกับภาษา C, C++ และ Python ข้างใต้นี้ เพราะเราก็ยังคงศึกษาเรียนรู้กันอยู่ตลอด และมีหนังสือที่เกี่ยวข้องด้านล่าง ## รายชื่อหนังสือ @@ -262,7 +262,7 @@ You'll see some C, C++, and Python learning included below, because I'm learning - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - [ ] [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) -### สถาปัตยกรรม คอมพิวเตอร์ +### สถาปัตยกรรม คอมพิวเตอร์ หากคุณมีเวลาน้อย: @@ -367,7 +367,7 @@ You'll see some C, C++, and Python learning included below, because I'm learning - Would rather spend time on coding problems from another book or online coding problems. -## ก่อนที่จะเริ่มต้น +## ก่อนที่จะเริ่มต้น This list grew over many months, and yes, it kind of got out of hand. @@ -450,7 +450,7 @@ There are a lot of distractions that can take up valuable time. Focus and concen - [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. +คุณไม่จำเป็นต้องจำรายละเอียดทุกอย่างของทุกอัลกอริธึม เขียนโค้ดลงกระดานหรือกระดาษ ไม่ใช่ในเครื่องคอมพิวเตอร์ ทดสอบโดยใช้ข้อมูลตัวอย่าง จากนั้นลองรันจริงๆ ในเครื่องคอมพิวเตอร์ @@ -1320,17 +1320,17 @@ You'll get more graph practice in Skiena's book (see Books section below) and th ## Coding Question Practice -Now that you know all the computer science topics above, it's time to practice answering coding problems. +ขณะนี้คุณมีความรู้เกี่ยวกับวิทยการคอมพิวเตอร์ทุกหัวข้อด้านบนแล้ว ก็ถึงเวลาฝึกซ้อมตอบคำถามเกี่ยวกับปัญหาด้านการโค้ดดิ้ง -**Coding question practice is not about memorizing answers to programming problems.** +**การฝึกซ้อมนี้ ไม่เกี่ยวข้องกับการท่องจำตอบของโจทย์ด้านการเขียนโปรแกรม** -Why you need to practice doing programming problems: -- problem recognition, and where the right data structures and algorithms fit in -- gathering requirements for the problem -- talking your way through the problem like you will in the interview -- coding on a whiteboard or paper, not a computer -- coming up with time and space complexity for your solutions -- testing your solutions +ทำไมคุณจึงต้องฝึกซ้อม: +- เพื่อทดสอบความเข้าใจโจทย์ ว่า ควรใช้โครงสร้างช้อมูลใด และ อัลกอริธึมใด ที่เหมาะสมกับโจทย์ +- รวบรวมสิ่งที่โจทย์ต้องการ +- พูดคุยเป็นภาษาของคุณ เฉกเช่นเดียวกับเมื่อคุณไปสัมภาษณ์ +- เขียนโค้ดบนกระดาน, กระดาษ ไม่ใช่ในคอมพิวเตอร์ +- ได้คำตอบออกมา พร้อมกับประสิทธิภาพของคำตอบของคุณ +- ทดสอบคำตอบของคุณ There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming interview books, too, but I found this outstanding: @@ -1455,12 +1455,12 @@ You're never really done. ## Additional Books - [ ] [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) - - an oldie but a goodie + - หนังสือเก่า แต่ยังเก๋า - [ ] [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - a modern option - [ ] [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) - [ ] [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns + - แนะนำ design patterns ตั้งแต่เริ่มต้น - [ ] [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - aka the "Gang Of Four" book, or GOF - the canonical design patterns book @@ -1770,7 +1770,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - see videos below - ### การเรียนรู้ของเครื่อง (Machine Learning) - - [ ] Why ML? + - [ ] ทำไมต้อง 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) @@ -1788,8 +1788,8 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [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: - - Books: + - แหล่งเรียนรู้: + - หนังสือ: - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) From 2d46b2a8e9a87ef457559e5728224c12e3d017ff Mon Sep 17 00:00:00 2001 From: rimonmostafiz Date: Fri, 2 Nov 2018 01:24:04 +0600 Subject: [PATCH 068/263] Update all lynda.com course videos with archive.org videos --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index a5b404e..353b51e 100644 --- a/README.md +++ b/README.md @@ -218,8 +218,8 @@ I'm using Github's special markdown flavor, including tasks lists to check progr ## About Video Resources -Some videos are available only by enrolling in a Coursera, EdX, or Lynda.com class. These are called MOOCs. -Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. Lynda.com courses are not free. +Some videos are available only by enrolling in a Coursera or EdX class. These are called MOOCs. +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 to add free and always-available public sources, such as YouTube videos to accompany the online course videos. I like using university lectures. @@ -524,12 +524,12 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] Description: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - - [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) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -592,14 +592,14 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### 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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] 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) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -626,10 +626,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [(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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) From 443f1c82db6296b93baea7cfcaeafbf3aa8c2cc0 Mon Sep 17 00:00:00 2001 From: rimonmostafiz Date: Fri, 2 Nov 2018 01:30:20 +0600 Subject: [PATCH 069/263] Update translation files, Update all lynda.com videos with archive.org videos --- translations/README-ar.md | 49 ++++++++++++++++++------------------- translations/README-cn.md | 22 ++++++++--------- translations/README-es.md | 22 ++++++++--------- translations/README-fr.md | 22 ++++++++--------- translations/README-he.md | 22 ++++++++--------- translations/README-hi.md | 22 ++++++++--------- translations/README-id.md | 22 ++++++++--------- translations/README-ko.md | 22 ++++++++--------- translations/README-pl.md | 22 ++++++++--------- translations/README-ptbr.md | 22 ++++++++--------- translations/README-th.md | 22 ++++++++--------- translations/README-uk.md | 22 ++++++++--------- translations/README-vi.md | 22 ++++++++--------- 13 files changed, 156 insertions(+), 157 deletions(-) diff --git a/translations/README-ar.md b/translations/README-ar.md index 681ccd9..37dd36b 100644 --- a/translations/README-ar.md +++ b/translations/README-ar.md @@ -1,6 +1,6 @@ # الإعداد لجوجل -الترجمه: +الترجمه: - [中文版本](translations/README-cn.md) - الترجمات تحت الاعداد: - [Español](https://github.com/jwasham/google-interview-university/issues/80) @@ -175,7 +175,7 @@ **اصنع مسار جديد يمكن من خلاله أن تضع علامة [x]** - احصل على نسخة خاصة "fork" بك واتبع هذه الأوامر + احصل على نسخة خاصة "fork" بك واتبع هذه الأوامر `git checkout -b progress` @@ -215,7 +215,7 @@ Print out a "[future Googler](https://github.com/jwasham/google-interview-univer قصتي: [Why I Studied Full-Time for 8 Months for a Google Interview](https://medium.com/@googleyasheck/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) I'm on the journey, too. Follow along: - + - **المدونة**: [GoogleyAsHeck.com](https://googleyasheck.com) - تويتر: [@googleyasheck](https://twitter.com/googleyasheck) @@ -359,7 +359,7 @@ If short on time: - Chapter 7 - Composite Data Types and Memory Objects - Chapter 9 - CPU Architecture - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization + - Chapter 11 - Memory Architecture and Organization If you have more time (I want this book): @@ -380,7 +380,7 @@ If you have more time (I want this book): I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. -- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) - [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. @@ -452,7 +452,7 @@ OR: that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. - ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ - - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. + - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. - Would rather spend time on coding problems from another book or online coding problems. @@ -480,7 +480,7 @@ OR: اصنع واحدا منها لك مجانا: - [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) -- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): +- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): - [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.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. @@ -489,7 +489,7 @@ Keep in mind I went overboard and have cards covering everything from assembly l same card and answer it several times correctly before you really know it. Repetition will put that knowledge deeper in your brain. -An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. +An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) @@ -548,9 +548,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] **Learn C** - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - This is a short book, but it will give you a great handle on the C language and if you practice it a little + - This is a short book, but it will give you a great handle on the C language and if you practice it a little you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - - [answers to questions](https://github.com/lekkas/c-algorithms) + - [answers to questions](https://github.com/lekkas/c-algorithms) - [ ] **How computers process a program:** - [ ] [How does CPU execute program (video)](https://www.youtube.com/watch?v=42KTvGYQYnA) @@ -587,12 +587,12 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] Description: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -654,14 +654,14 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### 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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] 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) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -688,10 +688,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [(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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) @@ -1193,15 +1193,15 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [4. Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) - [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) --- ## System Design, Scalability, Data Handling - **You can expect system design questions if you have 4+ years of experience.** -- 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. +- 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. - Considerations from Yegge: - scalability @@ -2030,4 +2030,3 @@ Sit back and enjoy. "Netflix and skill" :P - [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) - diff --git a/translations/README-cn.md b/translations/README-cn.md index 19b3c09..73521ab 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -354,11 +354,11 @@ - 实现一个可自动调整大小的动态数组。 - [ ] 介绍: - [数组(视频)](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://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [多维数组(视频)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [动态数组(视频)](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) + - [不规则数组(视频)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [调整数组的大小(视频)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 实现一个动态数组(可自动调整大小的可变数组): - [ ] 练习使用数组和指针去编码,并且指针是通过计算去跳转而不是使用索引 - [ ] 通过分配内存来新建一个原生数据型数组 @@ -418,14 +418,14 @@ - ### 堆栈(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) + - [ ] [使用堆栈 —— 后进先出(视频)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] 可以不实现,因为使用数组来实现并不重要 - ### 队列(Queue) - - [ ] [使用队列 —— 先进先出(视频)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) + - [ ] [使用队列 —— 先进先出(视频)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [队列(视频)](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) + - [ ] [优先级队列(视频)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 使用含有尾部指针的链表来实现: - enqueue(value) —— 在尾部添加值 - dequeue() —— 删除最早添加的元素并返回其值(首部元素) @@ -451,10 +451,10 @@ - [ ] [(进阶)完美哈希(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) - - [ ] [哈希表的支持(视频)](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://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [使用哈希表(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [哈希表的支持(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [哈希表的语言支持(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [基本哈希表(视频)](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) diff --git a/translations/README-es.md b/translations/README-es.md index 08ec2e9..f84576d 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -508,12 +508,12 @@ Escriba código en un pizarrón o en papel no en la computadora. Pruebe con algu - [ ] Descripción: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] Implemente un vector (Arreglo mutable con redimensionamiento automático): - [ ] Practique codificar usando arreglos y apuntadores, y un apuntador matemático para saltar a un índice en lugar de utilizar la indexación. - [ ] Nueva arreglo de información primaria con memoria asignada @@ -574,14 +574,14 @@ Escriba código en un pizarrón o en papel no en la computadora. Pruebe con algu - No es necesario - ### Pila - [ ] [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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] No implementaré. Implementando con arreglos es trivial. - ### Cola o fila - - [ ] [Using Queues First-In First-Out(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] Implementar usando listas enlazadas, con el puntero de la cola: - enqueue(value) – Añade el valor en la posición de la cola - dequeue() – Regresa el valor y elimina el valor más recientemente añadido(frontal) @@ -608,10 +608,10 @@ Escriba código en un pizarrón o en papel no en la computadora. Pruebe con algu - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - [ ] Cursos en línea: - - [ ] [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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) diff --git a/translations/README-fr.md b/translations/README-fr.md index 720e775..219cefa 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -573,12 +573,12 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] Description: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -640,14 +640,14 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### 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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] 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) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -674,10 +674,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [(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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) diff --git a/translations/README-he.md b/translations/README-he.md index 3daf08d..d4192f5 100644 --- a/translations/README-he.md +++ b/translations/README-he.md @@ -567,12 +567,12 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] Description: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -634,14 +634,14 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### 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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] 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) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -668,10 +668,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [(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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) diff --git a/translations/README-hi.md b/translations/README-hi.md index 087cc8b..33ae4c9 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -413,11 +413,11 @@ memory" का एरर न दे, और तब मुजे कोई वै - एक स्वचालित रीसाइज़िंग वेक्टर को लागू करें - [ ] विवरण: - [एरे (विडियो)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [Basic Arrays (विडियो)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) - - [Multi-dim (विडियो)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html) + - [Basic Arrays (विडियो)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (विडियो)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (विडियो)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - - [Jagged Arrays (विडियो)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) - - [Resizing arrays (विडियो)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) + - [Jagged Arrays (विडियो)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (विडियो)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -479,14 +479,14 @@ memory" का एरर न दे, और तब मुजे कोई वै - ### Stack - [ ] [Stacks (विडियो)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - - [ ] [Using Stacks Last-In First-Out (विडियो)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html) + - [ ] [Using Stacks Last-In First-Out (विडियो)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] Will not implement. Implementing with array is trivial. - ### Queue - - [ ] [Using Queues First-In First-Out(विडियो)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) + - [ ] [Using Queues First-In First-Out(विडियो)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [Queue (विडियो)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - - [ ] [Priority Queues (विडियो)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) + - [ ] [Priority Queues (विडियो)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -513,10 +513,10 @@ memory" का एरर न दे, और तब मुजे कोई वै - [ ] [(Advanced) Perfect hashing (विडियो)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - [ ] Online Courses: - - [ ] [Understanding Hash Functions (विडियो](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) - - [ ] [Using Hash Tables (विडियो)](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) - - [ ] [Language Support Hash Tables (विडियो)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html) + - [ ] [Understanding Hash Functions (विडियो](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (विडियो)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (विडियो)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (विडियो)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [Core Hash Tables (विडियो)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) - [ ] [Data Structures (विडियो)](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) diff --git a/translations/README-id.md b/translations/README-id.md index de298c9..c1e4f51 100644 --- a/translations/README-id.md +++ b/translations/README-id.md @@ -539,12 +539,12 @@ Menulis kode pada papan tulis atau kertas, bukan komputer. Uji dengan beberapa s - [ ] Description: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -606,14 +606,14 @@ Menulis kode pada papan tulis atau kertas, bukan komputer. Uji dengan beberapa s - ### 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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] 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) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -640,10 +640,10 @@ Menulis kode pada papan tulis atau kertas, bukan komputer. Uji dengan beberapa s - [ ] [(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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) diff --git a/translations/README-ko.md b/translations/README-ko.md index 5a91bde..e67251d 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -617,12 +617,12 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] 설명: - [배열 (영상)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - 선형과 다차원 배열 (영상)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [배열 기본 (영상)](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://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [다차원 배열 (영상)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [동적 배열 (영상)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [가변 배열 (영상)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [가변 배열 (영상)](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) + - [가변 배열 (영상)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [배열 리사이징 (영상)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 벡터 구현하기 (자동 리사이징을 포함한 동적 배열): - [ ] 배열, 포인터 및 인덱싱 대신하여 특정 인덱스에 접근하는 포인터 연산을 통한 코딩 연습 - [ ] 메모리 할당을 포함한 새 배열 @@ -684,14 +684,14 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - ### 스택 - [ ] [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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] Will not implement. Implementing with array is trivial. - ### 큐 - - [ ] [Using Queues First-In First-Out(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -718,10 +718,10 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [(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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) diff --git a/translations/README-pl.md b/translations/README-pl.md index d356d33..d65d90c 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -525,12 +525,12 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] Description: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -592,14 +592,14 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### 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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] 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) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -626,10 +626,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [(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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index abf3cd4..c69a7b5 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -519,12 +519,12 @@ Escreva código em um quadro branco ou papel, não em um computador. Teste com u - [ ] Descrição: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) (Arrays lineares e multidimensionais - vídeo) - - [Basic Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) (Arrays básicos - vídeo) - - [Multi-dim (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html) (Multidimensionais - vídeo) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) (Arrays básicos - vídeo) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) (Multidimensionais - vídeo) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) (Arrays Dinâmicos - vídeo) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) (Arrays Multidimensionais - vídeo) - - [Jagged Arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) (Arrays Multidimensionais - vídeo) - - [Resizing arrays (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) (Arrays Dinâmicos) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) (Arrays Multidimensionais - vídeo) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) (Arrays Dinâmicos) - [ ] Implementar um vetor (array mutável com redimensionamento automático): - [ ] Praticar programação usando arrays e ponteiros, e matemática de ponteiros para pular para um índice ao invés de usar indexação. - [ ] novo array de dados brutos com memória alocada @@ -587,14 +587,14 @@ Escreva código em um quadro branco ou papel, não em um computador. Teste com u - ### 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) (Usando Stacks Último a Entrar Primeiro a Sair - vídeo) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) (Usando Stacks Último a Entrar Primeiro a Sair - vídeo) - [ ] Não implementarei. Implementar com array é trivial. - ### Queue (Fila) - - [ ] [Using Queues First-In First-Out(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) (Usando queues FIFO(Primeiro a entrar, último a sair) - vídeo) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) (Usando queues FIFO(Primeiro a entrar, último a sair) - vídeo) - [ ] [Queue (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) (Buffer circular/Primeiro a entrar, último a sair) - - [ ] [Priority Queues (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) (Queues com Prioridade - vídeo) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) (Queues com Prioridade - vídeo) - [ ] Implementar usando lista ligada, com ponteiro de cauda (aponta para o último elemento de uma lista): - enqueue(valor) - adiciona "valor" na posição na cauda (final da lista) - dequeue() - retorna um valor e remove o elemento menos recentemente adicionado (início da lista)) @@ -621,10 +621,10 @@ Escreva código em um quadro branco ou papel, não em um computador. Teste com u - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) ((Avançado) Hashing perfeito - vídeo) - [ ] Cursos Online: - - [ ] [Understanding Hash Functions (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) (Compreendendo Funções Hash - vídeo) - - [ ] [Using Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html) (Usando Tabelas Hash - vídeo) - - [ ] [Supporting Hashing (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html) (Hashing de Suporte - vídeo) - - [ ] [Language Support Hash Tables (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html) (Tabelas Hash de Suporte de Linguagem - vídeo) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) (Compreendendo Funções Hash - vídeo) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) (Usando Tabelas Hash - vídeo) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) (Hashing de Suporte - vídeo) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) (Tabelas Hash de Suporte de Linguagem - vídeo) - [ ] [Core Hash Tables (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) (Fundamentos de Tabelas Hash - vídeo) - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/3) (Estruturas de Dados - vídeo) - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) (Problema da Lista Telefônica (vídeo) ) diff --git a/translations/README-th.md b/translations/README-th.md index 508a165..4b8a3f8 100644 --- a/translations/README-th.md +++ b/translations/README-th.md @@ -498,12 +498,12 @@ There are a lot of distractions that can take up valuable time. Focus and concen - [ ] Description: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -565,14 +565,14 @@ There are a lot of distractions that can take up valuable time. Focus and concen - ### 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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] 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) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -599,10 +599,10 @@ There are a lot of distractions that can take up valuable time. Focus and concen - [ ] [(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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) diff --git a/translations/README-uk.md b/translations/README-uk.md index d4ac163..9f65299 100644 --- a/translations/README-uk.md +++ b/translations/README-uk.md @@ -496,12 +496,12 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] Description: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [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) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [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) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -563,14 +563,14 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### 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) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] 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) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [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) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -597,10 +597,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [(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) + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) diff --git a/translations/README-vi.md b/translations/README-vi.md index 5585363..cc4ed15 100644 --- a/translations/README-vi.md +++ b/translations/README-vi.md @@ -535,12 +535,12 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - [ ] Miêu tả, tên gốc được giữ nguyên kèm với bản dịch sang tiếng Việt: - [Arrays - Mảng (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UCBerkley CS61B - Linear and Multi-Dim Arrays - Mảng tuyến tính và mảng đa chiều(video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [Basic Arrays - Mảng cơ bản (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Basic-arrays/149042/177104-4.html) - - [Multi-dim - Đa chiều(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Multidimensional-arrays/149042/177105-4.html) + - [Basic Arrays - Mảng cơ bản (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim - Đa chiều(video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays - Mảng tùy biến (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays - Mảng trong mảng (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [Jagged Arrays - Mảng trong mảng (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Jagged-arrays/149042/177106-4.html) - - [Resizing arrays - Mảng có thể tùy biến kích thước (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Resizable-arrays/149042/177108-4.html) + - [Jagged Arrays - Mảng trong mảng (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays - Mảng có thể tùy biến kích thước (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] Cấp phát vector (Mảng có thể thay đổi với khả năng tự điều chỉnh kích cỡ): - [ ] Tập sử dụng mảng và con trỏ, dùng phép toán con trỏ để nhảy tới một chỉ mục (index) thay vì sử dụng chỉ mục. - [ ] Tạo mảng mới với vùng nhớ được cấp phát sẵn @@ -602,14 +602,14 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - ### Stack - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - - [ ] [Using Stacks Last-In First-Out - Sử dụng stack Vào-Cuối-Ra-Trước (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-stacks-last-first-out/149042/177120-4.html) + - [ ] [Using Stacks Last-In First-Out - Sử dụng stack Vào-Cuối-Ra-Trước (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4)   - [ ] Sẽ không cài đặt. Cài đặt với mảng là điều hiển nhiên. - ### Queue - - [ ] [Using Queues First-In First-Out - Sử dụng hàng đợi Vào-Trước-Ra-Trước(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-queues-first-first-out/149042/177122-4.html) + - [ ] [Using Queues First-In First-Out - Sử dụng hàng đợi Vào-Trước-Ra-Trước(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [Queue (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - - [ ] [Priority Queues - Hàng đợi ưu tiên (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Priority-queues-deques/149042/177123-4.html) + - [ ] [Priority Queues - Hàng đợi ưu tiên (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] Cài đặt sử dụng danh sách liên kết, áp dụng con trỏ đuôi: - enqueue(value) - Thêm giá trị ở đuôi - dequeue() - Trả về giá trị của dữ liệu được thêm vào xa nhất (thông thường là dữ liệu đầu tiên trong danh sách) @@ -634,10 +634,10 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - [ ] [(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) - [ ] Các khóa học online: - - [ ] [Understanding Hash Functions - Hiểu hàm băm (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Understanding-hash-functions/149042/177126-4.html) - - [ ] [Using Hash Tables - Sử dụng bảng băm (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Using-hash-tables/149042/177127-4.html) - - [ ] [Supporting Hashing - Hỗ trợ băm(video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Supporting-hashing/149042/177128-4.html) - - [ ] [Language Support Hash Tables - Ngôn ngữ hỗ trợ bảng băm (video)](https://www.lynda.com/Developer-Programming-Foundations-tutorials/Language-support-hash-tables/149042/177129-4.html) + - [ ] [Understanding Hash Functions - Hiểu hàm băm (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables - Sử dụng bảng băm (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing - Hỗ trợ băm(video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables - Ngôn ngữ hỗ trợ bảng băm (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [Core Hash Tables - Cơ bản về bảng băm (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) - [ ] [Data Structures - Cấu trúc dữ liệu (video)](https://www.coursera.org/learn/data-structures/home/week/3) - [ ] [Phone Book Problem - Vấn đề sổ điện thoại (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) From ca2b4b234e38c25a6b23f4a7809a2caf30c43898 Mon Sep 17 00:00:00 2001 From: Roman Mysan Date: Sat, 3 Nov 2018 14:47:02 +0100 Subject: [PATCH 070/263] Update README.md --- README.md | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index b8daeb0..11b73bf 100644 --- a/README.md +++ b/README.md @@ -689,21 +689,19 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - 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: + - [ ] [BFS(breadth-first search) and DFS(depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS notes: + - level order (BFS, using queue) + - time complexity: O(n) + - space complexity: best: O(1), worst: O(n/2)=O(n) + - DFS 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) + - 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) @@ -852,7 +850,11 @@ Graphs can be used to represent many problems in computer science, so this secti - 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. - + +- [ ] MIT(videos): + - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - [ ] [Depth-First Search]((https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + - [ ] 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) From 10114cfc928cdd67454ae906795574c1e64e2621 Mon Sep 17 00:00:00 2001 From: Dirk Van Bruggen Date: Sun, 11 Nov 2018 16:31:23 -0500 Subject: [PATCH 071/263] Fixes links to Bit Twiddler to use HTTPS All links to Bit Twiddler without HTTPS redirect to the homepage. --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0eecf8b..973eff8 100644 --- a/README.md +++ b/README.md @@ -664,8 +664,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [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) + - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://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) @@ -675,11 +675,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [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) + - [Round Up To Next Power Of Two](https://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) - [ ] swap values: - - [Swap](http://bits.stephan-brumme.com/swap.html) + - [Swap](https://bits.stephan-brumme.com/swap.html) - [ ] absolute value: - - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html) + - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) ## Trees From aaf511d0703b8719febb5eb56f8f230f3495b2bc Mon Sep 17 00:00:00 2001 From: lcreddy <25945246+lokanathchandrareddy@users.noreply.github.com> Date: Mon, 12 Nov 2018 13:38:34 -0500 Subject: [PATCH 072/263] Changed Spelling - Lern -> Learn --- programming-language-resources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programming-language-resources.md b/programming-language-resources.md index 222486d..5d092e5 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -65,7 +65,7 @@ - [Quick CSS Tutorial for Beginners](https://www.youtube.com/playlist?list=PLr6-GrHUlVf8JIgLcu3sHigvQjTw_aC9C) - [CSS Crash Course for absolute Beginners](https://www.youtube.com/watch?v=yfoY53QXEnI) - Javascript - - [Lern Javascript in 12 minutes](https://www.youtube.com/watch?v=Ukg_U3CnJWI) + - [Learn Javascript in 12 minutes](https://www.youtube.com/watch?v=Ukg_U3CnJWI) - [Javascript Beginner Tutorials](https://www.youtube.com/playlist?list=PL41lfR-6DnOrwYi5d824q9-Y6z3JdSgQa) - Other Language 1 - Other Language 2 From ef284d811f109078d95dd3697c538c424b958dd6 Mon Sep 17 00:00:00 2001 From: Aung Myo Kyaw Date: Fri, 16 Nov 2018 15:21:00 +0630 Subject: [PATCH 073/263] feat: collapsible sections --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0eecf8b..ed7b264 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,19 @@ > > *Best of luck to you!* -Translations: +
+Translations: + - [中文版本](translations/README-cn.md) - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) - [Português Brasileiro](translations/README-ptbr.md) -Translations in progress: +
+ +
+Translations in progress: + - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) - [עברית](https://github.com/jwasham/coding-interview-university/issues/82) - [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) @@ -35,6 +41,8 @@ Translations in progress: - [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) - [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257) +
+ ## What is it? This is my multi-month study plan for going from web developer (self-taught, no CS degree) to software engineer for a large company. From 48a1ad52b682720dc40f5f80cffce4c03d65e2c9 Mon Sep 17 00:00:00 2001 From: Aung Myo Kyaw Date: Fri, 16 Nov 2018 15:26:12 +0630 Subject: [PATCH 074/263] feat: table_of_contents/collapsible sections --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index ed7b264..fd04cb4 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,9 @@ If you want to be a reliability engineer or operations engineer, study more from ---------------- Everything below this point is optional ---------------- +
+Additional Resources + - [Additional Books](#additional-books) - [Additional Learning](#additional-learning) - [Compilers](#compilers) @@ -176,6 +179,8 @@ If you want to be a reliability engineer or operations engineer, study more from - [Video Series](#video-series) - [Computer Science Courses](#computer-science-courses) +
+ --- ## Why use it? From 7a1308d287005854699eb879bd325ec4f6de24a6 Mon Sep 17 00:00:00 2001 From: Aung Myo Kyaw Date: Fri, 16 Nov 2018 15:34:51 +0630 Subject: [PATCH 075/263] feat: Interview_Process_&_General_Interview_Prep/collapsible sections --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index fd04cb4..72ce03f 100644 --- a/README.md +++ b/README.md @@ -240,6 +240,9 @@ Sometimes the classes are not in session so you have to wait a couple of months, ## Interview Process & General Interview Prep +
+Interview Process & General Interview Prep + - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) @@ -256,6 +259,8 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] [Python for Data Structures, Algorithms, and Interviews! (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. +
+ ## Pick One Language for the Interview You can use a language you are comfortable in to do the coding part of the interview, but for large companies, these are solid choices: From 2625568ec03fa36b202aa4d27def40fa08e5135a Mon Sep 17 00:00:00 2001 From: Aung Myo Kyaw Date: Fri, 16 Nov 2018 16:14:55 +0630 Subject: [PATCH 076/263] feat: collapsible sections --- README.md | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 127 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 72ce03f..5b58ee6 100644 --- a/README.md +++ b/README.md @@ -196,6 +196,9 @@ It's a long plan. It may take you months. If you are familiar with a lot of this ## How to use it +
+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. @@ -223,6 +226,8 @@ I'm using Github's special markdown flavor, including tasks lists to check progr [More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +
+ ## Don't feel you aren't smart enough - Successful software engineers are smart, but many have an insecurity that they aren't smart enough. - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) @@ -297,21 +302,25 @@ This is a shorter list than what I used. This is abbreviated to save you time. - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - answers in Java -If you have tons of extra time: +
+If you have tons of extra time: - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - [ ] Elements of Programming Interviews (Java version) - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) -### Computer Architecture +
-If short on time: +### Computer Architecture - [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - These chapters are worth the read to give you a nice foundation: +
+ ...... + - Chapter 2 - Numeric Representation - Chapter 3 - Binary Arithmetic and Bit Operations - Chapter 4 - Floating-Point Representation @@ -322,11 +331,15 @@ If short on time: - Chapter 10 - Instruction Set Architecture - Chapter 11 - Memory Architecture and Organization -If you have more time (I want this book): +
+ +
+If you have more time (I want this book): - [ ] [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - For a richer, more up-to-date (2017), but longer treatment +
### Language Specific @@ -339,6 +352,9 @@ If you read though one of these, you should have all the data structures and alg ### C++ +
+C++ + I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) @@ -346,8 +362,13 @@ I haven't read these two, but they are highly rated and written by Sedgewick. He If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. +
+ ### Java +
+Java + - [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - videos with book content (and Sedgewick!) on coursera: - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) @@ -360,19 +381,28 @@ OR: - used as optional text for CS intro course at UC Berkeley - see my book report on the Python version below. This book covers the same topics. +
+ ### Python +
+Python + - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - by Goodrich, Tamassia, Goldwasser - I loved this book. It covered everything and more. - Pythonic code - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ +
### Optional Books **Some people recommend these, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:** +
+Optional Books + - [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - As a review and problem recognition - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. @@ -407,6 +437,7 @@ OR: - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. - Would rather spend time on coding problems from another book or online coding problems. +
## Before you Get Started @@ -497,6 +528,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Prerequisite Knowledge +
+Prerequisite Knowledge + - [ ] **Learn C** - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) @@ -511,7 +545,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) +
+ ## Algorithmic complexity / Big-O / Asymptotic analysis + +
+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) @@ -535,8 +575,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input 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 +
+Data Structures + - ### Arrays - Implement an automatically resizing vector. - [ ] Description: @@ -662,8 +707,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - get(key) - remove(key) +
+ ## More Knowledge +
+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) @@ -699,8 +749,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] absolute value: - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html) +
+ ## Trees +
+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) @@ -780,8 +835,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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). +
+ ## Sorting +
+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 @@ -855,8 +915,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +
+ ## Graphs +
+Graphs + Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. - Notes: @@ -917,8 +982,13 @@ Graphs can be used to represent many problems in computer science, so this secti You'll get more graph practice in Skiena's book (see Books section below) and the interview books +
+ ## Even More Knowledge +
+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) @@ -1204,7 +1274,13 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) +
+ ## System Design, Scalability, Data Handling + +
+System Design, Scalability, Data Handling + - **You can expect system design questions if you have 4+ years of experience.** - 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. @@ -1330,10 +1406,15 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [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/) +
+ --- ## Final Review +
+Final Review + This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. It's nice if you want a refresher often. @@ -1344,10 +1425,15 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) +
+ --- ## Coding Question Practice +
+Coding Question Practice + Now that you know all the computer science topics above, it's time to practice answering coding problems. **Coding question practice is not about memorizing answers to programming problems.** @@ -1386,8 +1472,13 @@ Supplemental: See [Book List above](#book-list) +
+ ## Coding exercises/challenges +
+Coding Question Practice + Once you've learned your brains out, put those brains to work. Take coding challenges every day, as many as you can. @@ -1420,6 +1511,8 @@ Mock Interviews: - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. +
+ ## Once you're closer to the interview - [ ] Cracking The Coding Interview Set 2 (videos): @@ -1487,6 +1580,9 @@ You're never really done. ## Additional Books +
+Additional Books + - [ ] [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - an oldie but a goodie - [ ] [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) @@ -1499,8 +1595,13 @@ You're never really done. - the canonical design patterns book - [ ] [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) +
+ ## Additional Learning +
+Additional Learning + These topics will likely not come up in an interview, but I added them to help you become a well-rounded software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox. @@ -1828,10 +1929,15 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - Data School: http://www.dataschool.io/ --- +
+ +--- ## Additional Detail on Some Subjects +
+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? @@ -1900,10 +2006,15 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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) +
+ ## Video Series Sit back and enjoy. "Netflix and skill" :P +
+Video Series + - [ ] [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) @@ -1964,7 +2075,18 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) +
+ ## Computer Science Courses +
+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) + +
+ +## LICENSE + +[CC-BY-SA-4.0](./LICENSE.txt) From 52baf7b74f71775448ed476e87948746e75c6261 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 03:12:31 +0900 Subject: [PATCH 077/263] Update all translations in progress --- translations/README-ko.md | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index e67251d..cd79950 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -11,20 +11,32 @@ > *행운을 빈다!* 번역: + +- [베트남어](translations/README-vi.md) +- [브라질 포르투갈어](translations/README-ptbr.md) +- [스페인어](translations/README-es.md) - [중국어](translations/README-cn.md) -- 진행 중인 번역: - - [스페인어](https://github.com/jwasham/google-interview-university/issues/80) - - [힌디어](https://github.com/jwasham/google-interview-university/issues/81) - - [히브리어](https://github.com/jwasham/google-interview-university/issues/82) - - [바하사 인도네시아어](https://github.com/jwasham/google-interview-university/issues/101) - - [아랍어](https://github.com/jwasham/google-interview-university/issues/98) - - [베트남어](https://github.com/jwasham/google-interview-university/issues/92) - - [터키어](https://github.com/jwasham/google-interview-university/issues/90) - - [프랑스어](https://github.com/jwasham/google-interview-university/issues/89) - - [러시아어](https://github.com/jwasham/google-interview-university/issues/87) - - [우크라이나어](https://github.com/jwasham/google-interview-university/issues/106) - - [브라질 포르투갈어](https://github.com/jwasham/google-interview-university/issues/113) - - [한국어](https://github.com/jwasham/google-interview-university/issues/118) + +진행 중인 번역 + +- [그리스어](https://github.com/jwasham/coding-interview-university/issues/166) +- [러시아어](https://github.com/jwasham/coding-interview-university/issues/87) +- [말라얄람어](https://github.com/jwasham/coding-interview-university/issues/239) +- [바하사 인도네시아어](https://github.com/jwasham/coding-interview-university/issues/101) +- [아랍어](https://github.com/jwasham/coding-interview-university/issues/98) +- [우르두어](https://github.com/jwasham/coding-interview-university/issues/140) +- [우크라이나어](https://github.com/jwasham/coding-interview-university/issues/106) +- [이탈리아어](https://github.com/jwasham/coding-interview-university/issues/170) +- [일본어](https://github.com/jwasham/coding-interview-university/issues/257) +- [태국어](https://github.com/jwasham/coding-interview-university/issues/156) +- [터키어](https://github.com/jwasham/coding-interview-university/issues/90) +- [텔루구어](https://github.com/jwasham/coding-interview-university/issues/117) +- [폴란드어](https://github.com/jwasham/coding-interview-university/issues/122) +- [프랑스어](https://github.com/jwasham/coding-interview-university/issues/89) +- [한국어](https://github.com/jwasham/coding-interview-university/issues/118) +- [히브리어](https://github.com/jwasham/coding-interview-university/issues/82) +- [힌디어](https://github.com/jwasham/coding-interview-university/issues/81) + ## 코딩 인터뷰 대학이란? From 185136434c73a88a95a2b52dc1a0cb4b9d011406 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 03:21:11 +0900 Subject: [PATCH 078/263] Sync with master branch --- translations/README-ko.md | 149 ++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 79 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index cd79950..44bd563 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -56,16 +56,12 @@ --- -## Table of Contents +## 목차 - [코딩 인터뷰 대학이란?](#코딩-인터뷰-대학이란) - [Why use it?](#why-use-it) - [How to use it?](#how-to-use-it) -- [구글 분위기 내기](#구글-분위기-내기) -- [Did I Get the Job](#did-i-get-the-job) -- [팔로우 하려면](#팔로우-하려면) - [당신은 충분히 똑똑합니다](#당신은-충분히-똑똑합니다) -- [구글에 대해](#구글에-대해) - [영상 자료에 관하여](#영상-자료에-관하여) - [인터뷰 과정 & 전반적인 인터뷰 준비 과정](#인터뷰-과정--전반적인-인터뷰-준비-과정) - [인터뷰를 위한 언어 고르기](#인터뷰를-위한-언어-고르기) @@ -172,10 +168,10 @@ - [기하학, 볼록 껍질](#geometry-convex-hull) - [이산수학](#discrete-math) - [기계학습](#machine-learning) - - [Go](#go) - [몇몇 주제에 대한 세부사항](#additional-detail-on-some-subjects) -- [영상 자료](#video-series) -- [컴퓨터 과학 강좌](#computer-science-courses) +- [영상 자료](#영상-자료) +- [컴퓨터 과학 강의들](#computer-science-courses) +- [라이센스](#라이센스) --- @@ -194,7 +190,7 @@ 하지만 이 공부 계획을 진행하면서 나는 내가 고용될 것이라는 자신감을 갖게 되었다. 이 것은 내게 여러 달이 필요한 긴 계획이다. 만약 당신이 이 중 많은 내용에 익숙하다면 시간은 훨씬 덜 들 것이다. -## How to use it +## How to use it? 아래의 모든 것은 대략적인 개요이며 당신은 위에서 아래 순서대로 진행해야 한다. @@ -222,59 +218,12 @@ [Github-flavored markdown에 대하여](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) -## 구글 분위기 내기 - -"[미래의 구글러](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'm in the queue right now. Hope to interview soon. - - Thanks for the referral, JP. - -## 팔로우 하려면 - -나의 이야기: [내가 구글 인터뷰를 풀 타임으로 8 개월 동안 공부한 이유](https://www.vobour.com/book/view/fiRGQMcmRkaw7pgpL) (원문 : [Why I Studied Full-Time for 8 Months for a Google Interview](https://medium.com/@googleyasheck/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)) - - -저의 구글로 향하는 여행 함께 해주세요! -- **블로그**: [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) - ## 당신은 충분히 똑똑합니다 - 구글 엔지니어들은 똑똑합니다. 하지만 그들 조차도 자신들의 지적 능력면에 대해서 불안감을 갖기 일쑤입니다. - [천재 프로그래머에 대한 미신(迷信)](https://www.youtube.com/watch?v=0SARbwvhupQ) - [위험한 홀로서기: 테크 산업의 보이지 않는 괴물들의 전쟁](https://www.youtube.com/watch?v=1i8ylq4j_EY) -## 구글에 대해 - -- [ ] 학생들을 위한 자료 - [구글 채용 정보: 기술 개발 가이드](https://www.google.com/about/careers/students/guide-to-technical-development.html) -- [ ] 검색 동작 원리: - - [ ] [검색의 진화 - 동영상](https://www.youtube.com/watch?v=mTBShTwCnD4) - - [ ] [검색 동작 원리 - 스토리](https://www.google.com/insidesearch/howsearchworks/thestory/) - - [ ] [검색 동작 원리](https://www.google.com/insidesearch/howsearchworks/) - - [ ] [검색 동작 원리 - 맷 커츠(Matt Cutts) - 동영상](https://www.youtube.com/watch?v=BNHR6IQJGZs) - - [ ] [구글의 검색 알고리즘 개선 방법 - 동영상](https://www.youtube.com/watch?v=J5RZOU6vK4Q) -- [ ] 시리즈: - - [ ] [구글 검색이 모바일을 처리하는 방법](https://backchannel.com/how-google-search-dealt-with-mobile-33bc09852dc9) - - [ ] [우리의 니즈를 발견하기 위한 구글의 비밀 연구](https://backchannel.com/googles-secret-study-to-find-out-our-needs-eba8700263bf) - - [ ] [구글 검색은 당신의 두뇌가 된다](https://backchannel.com/google-search-will-be-your-next-brain-5207c26e4523) - - [ ] [데미스 허사비스(Demis Hassabis)의 딥마인드](https://backchannel.com/the-deep-mind-of-demis-hassabis-156112890d8a) -- [ ] [책: 구글은 어떻게 일하는가](https://www.amazon.com/How-Google-Works-Eric-Schmidt/dp/1455582344) -- [ ] [구글 발표자료 - 2016.10 - 동영상](https://www.youtube.com/watch?v=q4y0KOeXViI) - -## 비디오 자료 - - ## 영상 자료에 관하여 몇몇 영상들은 Cousera, Edx, Lynda.com 클래스에 등록하여야만 시청이 가능합니다. 이것들은 MOOCs라고 불리는데요. @@ -940,22 +889,27 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [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) +As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) ## 그래프 그래프는 컴퓨터 과학의 여러 문제들을 표현하는 데 사용할 수 있다. 때문에 이 섹션은 트리나 정렬 섹션처럼 길다. -- Yegge의 노트: +- 노트: - 메모리에 그래프를 표시하는 세 가지 기본 방법이 있다: - 오브젝트와 포인터 - 행렬 - 인접 리스트 - 각각의 표현과 장단점을 숙지하라. - - 넓이우선탐색(BFS)와 깊이우선탐색(DFS) - 계산상의 복잡성, 장단점, 실제 코드로 구현하는 방법을 알아야 한다. + - 넓이 우선 탐색(BFS)와 깊이 우선 탐색(DFS) - 계산상의 복잡성, 장단점, 실제 코드로 구현하는 방법을 알아야 한다. - 질문을 받을 시 먼저 그래프 기반 솔루션을 찾고, 없을 경우에 다른 솔루션으로 넘어가라. -- [ ] Skiena의 강좌 - 훌륭한 인트로: +- [ ] MIT(영상): + - [ ] [너비 우선 탐색(BFS;Breadth-First Search)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - [ ] [깊이 우선 탐색(DFS;Depth-First Search)]((https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + +- [ ] Skiena의 강좌 - 시작하기 아주 좋습니다: - [ ] [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) @@ -973,21 +927,14 @@ If you need more detail on this subject, see "Sorting" section in [Additional De - [ ] [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) + - [ ] ~~[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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) - [ ] [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: 기회가 된다면, 더 멋진 알고리즘을 연구해 보라: - - [ ] 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) - - 내가 구현할 것: - [ ] DFS with adjacency list (recursive) - [ ] DFS with adjacency list (iterative with stack) @@ -1239,8 +1186,58 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +- ### 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. + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [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/competitive-programming/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) + +- ### Floating Point Numbers + - [ ] 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) + +- ### 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. + --- +- ### Networking + - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** + - otherwise, this is just good to know + - [ ] [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) + - [ ] Sockets: + - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + ## System Design, Scalability, Data Handling - **You can expect system design questions if you have 4+ years of experience.** - Scalability and System Design are very large topics with many topics and resources, since @@ -1924,16 +1921,6 @@ You're never really done. - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - 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 @@ -2070,7 +2057,11 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) -## 컴퓨터 공학 코스 +## Computer Science Courses - [온라인 CS 코스의 경로](https://github.com/open-source-society/computer-science) - [CS 코스의 경로 (많은 온라인 강의가 포함되어 있는 경로)](https://github.com/prakhar1989/awesome-courses) + +## 라이센스 + +[CC-BY-SA-4.0](./LICENSE.txt) \ No newline at end of file From 9558d9a41cd140d719543ba896268dcaab1bf993 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 03:25:02 +0900 Subject: [PATCH 079/263] Update titles and tables of contents (grammar and spell check) --- translations/README-ko.md | 45 ++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 44bd563..eeeb242 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -68,7 +68,7 @@ - [도서 목록](#도서-목록) - [시작하기 전에](#시작하기-전에) - [다루지 않을 것](#다루지-않을-것) -- [선수 과목](#선수-과목) +- [선수 지식](#선수-지식) - [하루 하루의 계획](#하루-하루의-계획) - [알고리즘 복잡도 / Big-O / 점근적 분석](#알고리즘-복잡도--big-o--점근적-분석) - [자료구조](#자료구조) @@ -78,40 +78,45 @@ - [큐](#큐) - [해쉬 테이블](#해쉬-테이블) - [추가 지식](#more-knowledge) - - [이진 검색](#binary-search) + - [이진 탐색/이진 검색](#binary-search) - [비트 연산](#bitwise-operations) - [트리](#trees) - [트리 - 배경지식](#trees---notes--background) - - [이진 탐색 트리: BSTs](#binary-search-trees-bsts) + - [이진 탐색 트리(BST)](#binary-search-trees-bsts) - [힙 / 우선순위 큐 / 이진 힙](#heap--priority-queue--binary-heap) - 균형 탐색 트리 (간단한 개념) - - 트리운행: 전위운행, 중위운행, 후위운행, 너비우선탐색(BFS), 깊이우선탐색(DFS) + - 트리 순회: 전위 순회, 중위 순회, 후위 순회, 너비 우선 탐색(BFS), 깊이 우선 탐색(DFS) - [정렬](#sorting) - - 선택정렬 - - 삽입정렬 - - 힙정렬 - - 퀵정렬 - - 병합정렬 + - 선택 정렬 + - 삽입 정렬 + - 힙 정렬 + - 퀵 정렬 + - 병합 정렬 - [그래프](#graphs) - 방향 그래프 - 무방향 그래프 - - 인접행렬 - - 인접리스트 - - 운행: 너비우선탐색(BFS), 깊이우선탐색(DFS) + - 인접 행렬 + - 인접 리스트 + - 그래프 순회: 너비 우선 탐색(BFS), 깊이 우선 탐색(DFS) - [더 많은 지식](#even-more-knowledge) - [재귀](#recursion) - [동적 프로그래밍](#dynamic-programming) - [객체 지향 프로그래밍](#object-oriented-programming) - [디자인 패턴](#design-patterns) - [조합 & 확률](#combinatorics-n-choose-k--probability) - - [NP, NP-완전 and 근사 알고리즘](#np-np-complete-and-approximation-algorithms) - - [캐쉬](#caches) + - [NP와 NP-완전, 그리고 근사 알고리즘](#np-np-complete-and-approximation-algorithms) + - [캐시](#caches) - [프로세스와 쓰레드](#processes-and-threads) - [논문](#papers) - - [테스팅](#testing) - - [스케쥴링](#scheduling) + - [테스트](#테스트) + - [스케줄링](#scheduling) - [시스템 루틴의 구현](#implement-system-routines) - [문자열 검색 & 조작](#string-searching--manipulations) + - [트라이](#tries) + - [부동 소수점](#floating-point-numbers) + - [유니코드](#unicode) + - [엔디언(Endianness)](#endianness) +- [네트워크](#networking) - [시스템 디자인, 확장성, 데이터 핸들링](#system-design-scalability-data-handling) (4년 이상 경력자를 위한 주제) - [최종 리뷰](#final-review) - [코딩 문제 연습](#coding-question-practice) @@ -534,7 +539,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info 컴퓨터에 코딩하지 말고 와이트보드나 종이에 적어보아라. 인풋 값으로 샘플 테스트를 해 보아라. 그리고 컴퓨터로 테스트해 보아라. -## 선수 과목 +## 선수 지식 - [ ] **Learn C** - C 는 어디에나 있다. 당신은 책이나 강의, 비디오 등 공부하는 동안 모든 곳에서 예제를 볼 것이다. @@ -1147,7 +1152,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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) -- ### 테스팅 +- ### 테스트 - 알아 두어야 할 것: - 유닛 테스트는 어떻게 작동하는지 - mock object 는 무엇인지 @@ -1892,7 +1897,7 @@ You're never really done. - [ ] [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? @@ -1993,7 +1998,7 @@ You're never really done. - [ ] [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) -## Video Series +## 영상 자료 Sit back and enjoy. "Netflix and skill" :P From 4706ca9584a5840c8e654321816d2632c1b17aec Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 04:10:56 +0900 Subject: [PATCH 080/263] Add tags details, summary --- translations/README-ko.md | 126 +++++++++++++++++++++++++++++++++++--- 1 file changed, 119 insertions(+), 7 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index eeeb242..6ea3ae6 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -10,14 +10,19 @@ > > *행운을 빈다!* -번역: + +
+번역: - [베트남어](translations/README-vi.md) - [브라질 포르투갈어](translations/README-ptbr.md) - [스페인어](translations/README-es.md) - [중국어](translations/README-cn.md) -진행 중인 번역 +
+ +
+진행 중인 번역: - [그리스어](https://github.com/jwasham/coding-interview-university/issues/166) - [러시아어](https://github.com/jwasham/coding-interview-university/issues/87) @@ -37,6 +42,7 @@ - [히브리어](https://github.com/jwasham/coding-interview-university/issues/82) - [힌디어](https://github.com/jwasham/coding-interview-university/issues/81) +
## 코딩 인터뷰 대학이란? @@ -197,6 +203,9 @@ ## How to use it? +
+How to use it? + 아래의 모든 것은 대략적인 개요이며 당신은 위에서 아래 순서대로 진행해야 한다. 진행상황을 확인하기 위한 목록를 포함하여, 나는 Github'special markdown flavor를 사용하고 있다. @@ -223,6 +232,7 @@ [Github-flavored markdown에 대하여](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +
## 당신은 충분히 똑똑합니다 - 구글 엔지니어들은 똑똑합니다. 하지만 그들 조차도 자신들의 지적 능력면에 대해서 불안감을 갖기 일쑤입니다. @@ -239,6 +249,9 @@ ## 인터뷰 과정 & 전반적인 인터뷰 준비 과정 +
+인터뷰 과정 & 전반적인 인터뷰 준비 과정 + - [ ] 비디오: - [ ] [구글에서 일하게 되는법: 기술 인터뷰 준비하기 (video)](https://www.youtube.com/watch?v=ko-KkSmp-Lk) @@ -273,6 +286,7 @@ - [ ] ['Big 4에 취업하는 방법 - Amazon, Facebook, Google & Microsoft' (영상)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [ ] [구글 인터뷰 실패기](http://alexbowe.com/failing-at-google-interviews/) +
## 인터뷰를 위한 언어 고르기 @@ -324,6 +338,8 @@ - Google Careers site에서 추천되었기 때문에 [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/) - 만일 당신이 다른 사람들의 "The Google Resume"를 참고자료로 봤다면, "Cracking the Coding Interview"는 그것을 대신할 수 있는 책이다. +
+만일 당신이 많은 여유 시간이 있다면: 만일 당신이 많은 여유 시간이 있다면: @@ -331,6 +347,7 @@ - 모든 코드가 C++로 되어있다, 만일 당신의 인터뷰에서 C++를 사용하길 고려한다면 정말 좋은 책이다. - 일반적인 문제들을 해결하기 위해 좋은 책이다. +
### 컴퓨터 구조 @@ -350,10 +367,16 @@ - Chapter 10 - Instruction Set Architecture - Chapter 11 - Memory Architecture and Organization -만약에 시간적 여유가 좀 더 있다면 아래 서적을 읽어보는 것을 권유합니다. + + +
+만약에 시간적 여유가 좀 더 있다면 아래 서적을 읽어보는 것을 권유합니다. + - [ ] [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/) - For a richer, more up-to-date (2011), but longer treatment +
+ ### 언어 구체적 **인터뷰를 위해 당신의 언어를 선택하여야 합니다 (윗글 참조)** 아래는 제가 추천하는 언어들입니다. 이 언어들중에 부연설명이나 부가 자료들이 있다면 나눠 주세요. @@ -401,6 +424,9 @@ OR: **어떤 사람들은 이 책들을 추천한다. 하지만 만약 당신이 소프트웨어 엔지니어링 분야에 오랜 경험이 있고, 그로 인해 훨씬 더 어려운 인터뷰를 볼 것이라 생각하지 않는다면, 나는 이 책들을 공부하는 것이 너무 과하다고 생각한다:** +
+Optional Books + - [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - As a review and problem recognition - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. @@ -446,6 +472,7 @@ OR: - Would rather spend time on coding problems from another book or online coding problems. +
## 시작하기 전에 @@ -541,6 +568,9 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info ## 선수 지식 +
+Prerequisite Knowledge + - [ ] **Learn C** - C 는 어디에나 있다. 당신은 책이나 강의, 비디오 등 공부하는 동안 모든 곳에서 예제를 볼 것이다. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) @@ -552,7 +582,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [How does CPU execute program (video)](https://www.youtube.com/watch?v=42KTvGYQYnA) - [ ] [Machine Code Instructions (video)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) +
+ ## 알고리즘 복잡도 / Big-O / 점근적 분석 + +
+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) @@ -576,8 +612,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info 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 + - ### 배열 - 자동 리사이징 벡터 구현하기 - [ ] 설명: @@ -702,8 +743,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - get(key) - remove(key) +
+ ## More Knowledge +
+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) @@ -739,8 +785,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] absolute value: - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html) +
+ ## Trees +
+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) @@ -822,8 +873,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] 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). +
+ ## Sorting +
+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 @@ -897,8 +953,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +
+ ## 그래프 +
+Graphs + 그래프는 컴퓨터 과학의 여러 문제들을 표현하는 데 사용할 수 있다. 때문에 이 섹션은 트리나 정렬 섹션처럼 길다. - 노트: @@ -958,6 +1019,8 @@ If you need more detail on this subject, see "Sorting" section in [Additional De Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그래프 실습을 할 수 있다. +
+ ## Even More Knowledge - ### Recursion @@ -1244,6 +1307,10 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) ## System Design, Scalability, Data Handling + +
+System Design, Scalability, Data Handling + - **You can expect system design questions if you have 4+ years of experience.** - 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. @@ -1367,10 +1434,15 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [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/) +
+ --- ## 최종 검토 +
+Final Review + 이 섹션에는 중요한 개념들을 빠르게 검토할 수 있는 짧은 영상들이 포함되어 있다. 복습을 하고자 한다면, 이 영상들이 도움이 될 것이다. @@ -1405,10 +1477,15 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [12. Linear Programming](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) - [ ] [13. Intractability](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) +
+ --- ## 코딩 문제 연습 +
+Coding Question Practice + 이제 당신은 위의 컴퓨터 과학 주제들을 모두 알고 있으므로, 코딩 문제에 답하는 것을 연습할 차례이다. **코딩 문제 연습은 프로그래밍 문제에 대한 답을 외우는 것이 아니다.** @@ -1448,8 +1525,13 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 [위의 도서 목록](#book-list)을 보라 +
+ ## Coding exercises/challenges +
+Coding Question Practice + Once you've learned your brains out, put those brains to work. Take coding challenges every day, as many as you can. @@ -1470,6 +1552,8 @@ Challenge sites: Maybe: - [Mock interviewers from big companies](http://www.gainlo.co/) +
+ ## Once you're closer to the interview - [ ] Cracking The Coding Interview Set 2 (videos): @@ -1543,7 +1627,10 @@ You're never really done. ## Additional Books -- [ ] [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) +
+Additional Books + +- [ ] [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - an oldie but a goodie - [ ] [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - a modern option @@ -1557,8 +1644,13 @@ You're never really done. - [Site Reliability Engineering: How Google Runs Production Systems](https://landing.google.com/sre/) - [ ] [UNIX and Linux System Administration Handbook, 4th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/) +
+ ## Additional Learning +
+Additional Learning + - ### Compilers - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - [ ] [Harvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo) @@ -1854,6 +1946,9 @@ You're never really done. - 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) +--- + +--- - ### k-D Trees - great for finding number of points in a rectangle or higher dimension object @@ -1999,8 +2094,18 @@ You're never really done. - [ ] [lecture begins at 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) ## 영상 자료 +
+ +## 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) @@ -2062,11 +2167,18 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) +
+ ## Computer Science Courses -- [온라인 CS 코스의 경로](https://github.com/open-source-society/computer-science) -- [CS 코스의 경로 (많은 온라인 강의가 포함되어 있는 경로)](https://github.com/prakhar1989/awesome-courses) +
+컴퓨터 과학 수업들 + +- [온라인 컴퓨터 과학 수업들](https://github.com/open-source-society/computer-science) +- [(많은 온라인 강의가 있는) 컴퓨터 과학 수업들](https://github.com/prakhar1989/awesome-courses) + +
## 라이센스 -[CC-BY-SA-4.0](./LICENSE.txt) \ No newline at end of file +[CC-BY-SA-4.0](./LICENSE.txt) From 1a9fe3c0702a19a3653843c93e1ff8062a714603 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 04:13:07 +0900 Subject: [PATCH 081/263] Add tags details and summaries --- translations/README-ko.md | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 6ea3ae6..9e0c25e 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -302,7 +302,6 @@ 아래 언어들을 사용할 수 있지만 주의하여야 합니다. - - JavaScript - Ruby @@ -315,12 +314,10 @@ - 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 - [프로그래밍 언어 참고목록](programming-language-resources.md) 제가 공부하고 있는 C, C++, Python 강의를 아래서 볼 수 있습니다. 아래를 보시면 관련된 책들이 몇 개 있습니다. - ## 도서 목록 아래의 목록은 내가 공부했던 책들보다는 적다. 당신의 시간을 절약하기 위해 몇몇 책들은 생략하였다. @@ -357,6 +354,9 @@ - 이 책은 2004년에 출판된 다소 구식의 책이지만, 간략히 컴퓨터를 이해하는 데에 훌륭한 자료입니다. - 이 책의 저자는 HLA를 발명했습니다. 그래서 회의적인 시선으로 HLA에 대해 언급하고 예로 듭니다. 널리 읽히지는 않지만, 어셈블리가 어떻게 생겼는 지를 보여주는 좋은 예입니다. - 이 장들은 당신에게 탄탄한 기초를 세워줄 것입니다: +
+ ...... + - Chapter 2 - Numeric Representation - Chapter 3 - Binary Arithmetic and Bit Operations - Chapter 4 - Floating-Point Representation @@ -389,6 +389,9 @@ ### C++ +
+C++ + 나는 아래의 두 책들을 읽지 않았습니다. 하지만 Sedgewick이 높게 평가한 책들입니다. 그는 정말 대단한 사람입니다. @@ -397,8 +400,13 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적인 자료를 찾고 있습니다. +
+ ### Java +
+Java + - [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - videos with book content (and Sedgewick!): - [Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) @@ -411,14 +419,20 @@ OR: - UC버클리 대학의 CS입문 과정의 선택 텍스트로 사용됨 - 아래에서 Python 버전에 대한 나의 책 보고서를 참조하십시오. 이 책은 동일한 주제를 다루고 있습니다. +
+ ### Python +
+Python + - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - by Goodrich, Tamassia, Goldwasser - 나는 이 책을 사랑한다. 이 책은 모든 것을 다룬다. - Pythonic code - 나의 열렬한 서적 보고서: https://googleyasheck.com/book-report-data-structures-and-algorithms-in-python/ +
### 선택 도서 @@ -1023,6 +1037,9 @@ 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) @@ -1287,7 +1304,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - Very technical talk for kernel devs. Don't worry if most is over your head. - The first half is enough. ---- - ### Networking - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** @@ -1306,6 +1322,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) +
+ ## System Design, Scalability, Data Handling
@@ -1498,7 +1516,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - 당신의 풀이의 시간, 공간 복잡도를 제시하기 - 당신의 해답을 테스팅하기 - 체계적이고 소통하는 인터뷰에서의 문제풀이에 관한 좋은 시작점이 있다. 당신은 프로그래밍 인터뷰 책에서 이 서식을 얻을 수도 있지만, 나는 이 것이 가장 좋다고 본다: [Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) [My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/) @@ -1619,7 +1636,6 @@ You're never really done. 당신은 이것들을 공부함으로써 더 많은 CS 개념들에 대해 알 수 있을 것이며, 소프트웨어 엔지니어링 직업을 준비하는 데에도 도움이 될 것 이다. 더불어 당신은 훨씬 더 균형 잡힌 소프트웨어 엔지니어가 될 것이다. - ***************************************************************************************************** ***************************************************************************************************** @@ -1946,9 +1962,7 @@ You're never really done. - 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) ---- ---- - ### k-D Trees - great for finding number of points in a rectangle or higher dimension object @@ -2021,10 +2035,15 @@ You're never really done. - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - Data School: http://www.dataschool.io/ --- +
+ +--- ## Additional Detail on Some Subjects +
+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? @@ -2100,7 +2119,6 @@ You're never really done.
---- Sit back and enjoy. "Netflix and skill" :P From a4558373a83ab96ad5be5bd868ab0bd22c3f0a12 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 04:16:52 +0900 Subject: [PATCH 082/263] Add A* algorithm --- translations/README-ko.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 9e0c25e..980ffa5 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -153,6 +153,7 @@ - [가비지 콜렉션](#garbage-collection) - [병렬 프로그래밍](#parallel-programming) - [메세징, 직렬화, 그리고 큐잉 시스템](#messaging-serialization-and-queueing-systems) + - [A* 알고리즘](#a) - [고속 푸리에 변환(FFT)](#fast-fourier-transform) - [블룸 필터](#bloom-filter) - [HyperLogLog](#hyperloglog) @@ -180,7 +181,7 @@ - [이산수학](#discrete-math) - [기계학습](#machine-learning) - [몇몇 주제에 대한 세부사항](#additional-detail-on-some-subjects) -- [영상 자료](#영상-자료) +- [영상 자료](#video-series) - [컴퓨터 과학 강의들](#computer-science-courses) - [라이센스](#라이센스) @@ -481,9 +482,7 @@ OR: that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. - ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ - - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. - - Would rather spend time on coding problems from another book or online coding problems.
@@ -1825,6 +1824,11 @@ You're never really done. - [ ] [MessagePack](http://msgpack.org/index.html) - [ ] [Avro](https://avro.apache.org/) +- ### 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) + - ### Fast Fourier Transform - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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/) @@ -2112,14 +2116,10 @@ You're never really done. - [ ] [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) -## 영상 자료 ## Video Series - - - Sit back and enjoy. "Netflix and skill" :P
From c47e63a12cbdb902984405700a0f74661d893e16 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 04:29:27 +0900 Subject: [PATCH 083/263] Removed google specific parts #201 and also yegge's --- translations/README-ko.md | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 980ffa5..59793b6 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -189,10 +189,6 @@ ## Why use it? -나는 구글 인터뷰를 준비하기 위해 이 계획을 따랐다. 1997년 부터 나는 웹과 서비스를 개발하고 스타트업을 세웠다. 나는 컴퓨터과학이 아닌 경제학 학위를 가지고 있다. -나의 커리어는 굉장히 성공적이어왔지만, 나는 구글에서 일하고 싶었다. 나는 더 큰 시스템을 다루고 컴퓨터 시스템, 알고리즘 효율, 자료구조 퍼포먼스, 저급 언어 등과 그 것들이 어떻게 작동하는지에 대하여 -이해하고 싶었다. 그리고 당신이 그런 것들을 모른다면 구글은 당신을 채용하지 않을 것이다. - 내가 이 프로젝트를 시작했을 때, 나는 힙스택, Big-O, 트리, 그래프 운행 등에 대하여 전혀 아는 바가 없었다. 만약 내가 정렬 알고리즘을 코딩해야했다면, 나는 그리 잘 하지 못했을 것이다. 모든 사용했던 모든 자료 구조는 언어 안에서 구현 되어 있던 것들이고, 나는 그 것들이 보이는 것 아래서 어떻게 작동하고 있는지 알지 못했다. @@ -328,19 +324,14 @@ - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - C++ 과 JAVA 문제의 답변을 위해서 - - 구글 지원자를 위해 추천되었기 때문에 - Cracking the Coding Interview 책을 위한 좋은 사전학습용 책이기 때문에 - 어렵지 않고, 당신이 인터뷰에서 마주할 대부분의 문제들 보다 쉽기 때문에 - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - JAVA 문제의 답변을 위해서 - - Google Careers site에서 추천되었기 때문에 [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/) - - 만일 당신이 다른 사람들의 "The Google Resume"를 참고자료로 봤다면, "Cracking the Coding Interview"는 그것을 대신할 수 있는 책이다.
만일 당신이 많은 여유 시간이 있다면: -만일 당신이 많은 여유 시간이 있다면: - - [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - 모든 코드가 C++로 되어있다, 만일 당신의 인터뷰에서 C++를 사용하길 고려한다면 정말 좋은 책이다. - 일반적인 문제들을 해결하기 위해 좋은 책이다. @@ -458,14 +449,7 @@ OR: - algorithm catalog: - this is the real reason you buy this book. - about to get to this part. Will update here once I've made my way through it. - - To quote Yegge: "More than any other book it helped me understand just how astonishingly commonplace - (and important) graph problems are – they should be part of every working programmer's toolkit. The book also - covers basic data structures and sorting algorithms, which is a nice bonus. But the gold mine is the second half - of the book, which is a sort of encyclopedia of 1-pagers on zillions of useful problems and various ways to solve - them, without too much detail. Almost every 1-pager has a simple picture, making it easy to remember. This is a - great way to learn how to identify hundreds of problem types." - Can rent it on kindle - - 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/) @@ -473,8 +457,6 @@ OR: - [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - To quote Yegge: "But if you want to come into your interviews *prepped*, then consider deferring your application until you've made your way through that book." - - Half.com is a great resource for textbooks at good prices. - aka CLR, sometimes CLRS, because Stein was late to the game - [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) @@ -538,8 +520,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info ## 다루지 않을 것 -이 큰 주제들은 모두 Google 인터뷰 코칭 노트에서 개인적인 to-do list로 시작되었다. -이 기술들은 널리 퍼져 있는 기술이지만, Google 인터뷰 코칭 노트에서 언급 되지 않았다: +이 기술들은 널리 퍼져 있는 기술이지만, 여기서 다루는 부분은 아닙니다: - SQL - Javascript @@ -1201,7 +1182,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) - ### 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) @@ -1303,7 +1283,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - Very technical talk for kernel devs. Don't worry if most is over your head. - The first half is enough. - - ### Networking - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - otherwise, this is just good to know @@ -1332,7 +1311,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - 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. -- Considerations from Yegge: +- Considerations: - scalability - Distill large data sets to single values - Transform one data set to another From 31b90c38c3e234f1c1701f4989c0394367cc6f91 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 04:33:44 +0900 Subject: [PATCH 084/263] Fixed all broken links (sync with master) --- translations/README-ko.md | 302 ++++++++++++++++---------------------- 1 file changed, 125 insertions(+), 177 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 59793b6..76c1338 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -332,9 +332,12 @@
만일 당신이 많은 여유 시간이 있다면: -- [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - 모든 코드가 C++로 되어있다, 만일 당신의 인터뷰에서 C++를 사용하길 고려한다면 정말 좋은 책이다. - 일반적인 문제들을 해결하기 위해 좋은 책이다. +- [ ] Elements of Programming Interviews (Java version) + - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews)
@@ -400,9 +403,9 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적 Java - [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - videos with book content (and Sedgewick!): - - [Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) - - [Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) + - videos with book content (and Sedgewick!) on coursera: + - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) + - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) OR: @@ -573,8 +576,11 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] **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) + - [ ] [How CPU executes a program](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) + - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) + - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k)
@@ -593,13 +599,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [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) +- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_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/) + - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) + - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) - [ ] [Cheat sheet](http://bigocheatsheet.com/) @@ -653,7 +659,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - ### 링크드 리스트 - [ ] 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) + - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [ ] [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: @@ -690,7 +697,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - ### 큐 - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - - [ ] [Queue (video)](https://www.coursera.org/learn/data-structures/lecture/EShpq/queue) + - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] Implement using linked-list, with tail pointer: @@ -747,13 +754,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - ### 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/) + - [ ] [detail](https://www.topcoder.com/community/competitive-programming/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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: @@ -762,8 +769,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [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) + - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://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) @@ -773,11 +780,11 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [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) + - [Round Up To Next Power Of Two](https://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) - [ ] swap values: - - [Swap](http://bits.stephan-brumme.com/swap.html) + - [Swap](https://bits.stephan-brumme.com/swap.html) - [ ] absolute value: - - [Absolute Integer](http://bits.stephan-brumme.com/absInteger.html) + - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html)
@@ -792,21 +799,19 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - 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: + - [ ] [BFS(breadth-first search) and DFS(depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS notes: + - level order (BFS, using queue) + - time complexity: O(n) + - space complexity: best: O(1), worst: O(n/2)=O(n) + - DFS 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) + - 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) @@ -852,7 +857,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [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) + - [ ] [CS 61B Lecture 24: Priority Queues (video)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) - [ ] Implement a max-heap: - [ ] insert @@ -888,24 +893,24 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - For heapsort, see Heap data structure above. Heap sort is great, but not stable. -- [ ] [Sedgewick - Mergesort (5 videos)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [1. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) - - [ ] [2. Bottom up Mergesort](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) - - [ ] [3. Sorting Complexity](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [4. Comparators](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [5. Stability](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) +- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) -- [ ] [Sedgewick - Quicksort (4 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [1. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [2. Selection](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [3. Duplicate Keys](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [4. System Sorts](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) +- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) - [ ] 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 Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) - [ ] [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) @@ -931,13 +936,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - For heapsort, see Heap data structure above. - [ ] Not required, but I recommended them: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [1. Strings in Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) - - [ ] [2. Key Indexed Counting](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) - - [ ] [3. Least Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) - - [ ] [4. Most Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [5. 3 Way Radix Quicksort](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [6. Suffix Arrays](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1) + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [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) @@ -1031,9 +1036,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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 - - **NOTE:** DP is a valuable technique, but it is not mentioned on any of the prep material Google provides. But you could get a problem where DP provides an optimal solution. So I'm including it. - - 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. + +- ### 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 @@ -1064,7 +1068,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [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) @@ -1106,6 +1109,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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) + - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) + - ### Combinatorics (n choose k) & Probability - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) @@ -1150,7 +1155,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - ### Processes and Threads - [ ] Computer Science 162 - Operating Systems (25 videos): - for processes and threads see videos 1-11 - - [Operating Systems and System Programming (video)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 @@ -1166,6 +1171,9 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - livelock - CPU activity, interrupts, context switching - Modern concurrency constructs with multicore processors + - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - [Scheduling (video)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) - 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 the 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. @@ -1183,9 +1191,9 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - ### 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. + - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - [ ] [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) @@ -1193,6 +1201,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) + - [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - The Dynamo paper kicked off the NoSQL revolution - [ ] [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) - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) @@ -1239,13 +1249,13 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - can you implement them? - ### String searching & manipulations - - [ ] [Sedgewick - Suffix Arrays (video)](https://www.youtube.com/watch?v=HKPrVm5FWvg) - - [ ] [Sedgewick - Substring Search (videos)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [1. Introduction to Substring Search](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [2. Brute-Force Substring Search](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) - - [ ] [3. Knuth-Morris Pratt](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [4. Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) - - [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) @@ -1324,7 +1334,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - simplicity and robustness - tradeoffs - performance analysis and optimization -- [ ] **START HERE**: [System Design from HiredInTech](http://www.hiredintech.com/system-design/) +- [ ] **START HERE**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] [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/) @@ -1356,7 +1367,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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/) + - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/competitive-programming/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) @@ -1397,10 +1408,11 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] 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. + - For even more, see "Mining Massive Datasets" video series in the [Video Series](#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) + - review: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/coding-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 @@ -1446,32 +1458,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) - [ ] 2-5분 분량의 주제별 짧은 영상 시리즈 - Michael Sambol (18 videos): - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) -- [ ] [Sedgewick Videos - Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) - - [ ] [01. Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) - - [ ] [02. Analysis of Algorithms](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) - - [ ] [03. Stacks and Queues](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) - - [ ] [04. Elementary Sorts](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) - - [ ] [05. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [06. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [07. Priority Queues](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) - - [ ] [08. Elementary Symbol Tables](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) - - [ ] [09. Balanced Search Trees](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) - - [ ] [10. Geometric Applications of BST](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) - - [ ] [11. Hash Tables](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) -- [ ] [Sedgewick Videos - Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50) - - [ ] [01. Undirected Graphs](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) - - [ ] [02. Directed Graphs](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) - - [ ] [03. Minimum Spanning Trees](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj) - - [ ] [04. Shortest Paths](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) - - [ ] [05. Maximum Flow](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) - - [ ] [06. Radix Sorts](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [07. Tries](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [08. Substring Search](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [09. Regular Expressions](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) - - [ ] [10. Data Compression](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) - - [ ] [11. Reductions](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF) - - [ ] [12. Linear Programming](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) - - [ ] [13. Intractability](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) +- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1506,8 +1494,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 보충: -- [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/) +- [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) +- [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) - [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) - [Exercises for getting better at a given language](http://exercism.io/languages) @@ -1530,22 +1518,34 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 Once you've learned your brains out, put those brains to work. Take coding challenges every day, as many as you can. -- [ ] [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/) +- [ ] [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) +- [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) + +Coding Interview Question Videos: +- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) Challenge sites: - [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) +- [HackerEarth](https://www.hackerearth.com/) - [HackerRank](https://www.hackerrank.com/) - [Codility](https://codility.com/programmers/) - [InterviewCake](https://www.interviewcake.com/) - [Geeks for Geeks](http://www.geeksforgeeks.org/) - [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Sphere Online Judge (spoj)](http://www.spoj.com/) +- [Codechef](https://www.codechef.com/) -Maybe: -- [Mock interviewers from big companies](http://www.gainlo.co/) +Challenge repos: +- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) + +Mock Interviews: +- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. +- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews +- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. @@ -1554,11 +1554,9 @@ Maybe: - [ ] 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) - See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed @@ -1598,8 +1596,6 @@ Maybe: 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. @@ -1634,9 +1630,7 @@ You're never really done. - [ ] [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - aka the "Gang Of Four" book, or GOF - the canonical design patterns book -- [ ] [Site Reliability Engineering](https://landing.google.com/sre/book.html) - - [Site Reliability Engineering: How Google Runs Production Systems](https://landing.google.com/sre/) -- [ ] [UNIX and Linux System Administration Handbook, 4th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/) +- [ ] [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) @@ -1645,29 +1639,17 @@ You're never really done.
Additional Learning +These topics will likely not come up in an interview, but I added them to help you become a well-rounded +software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox. + - ### Compilers - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - [ ] [Harvard 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) -- ### Floating Point Numbers - - [ ] 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) - -- ### 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 + - 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/) @@ -1688,7 +1670,7 @@ You're never really done. - [(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. + - I filled in the list below from good tools. - [ ] bash - [ ] cat - [ ] grep @@ -1741,20 +1723,6 @@ You're never really done. - [ ] [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 - - **if you have networking experience or want to be a systems engineer, expect questions** - - otherwise, this is just good to know - - [ ] [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) @@ -1771,7 +1739,6 @@ You're never really done. - [ ] [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) @@ -1835,28 +1802,10 @@ You're never really done. - [ ] [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) - -- ### 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. - - [ ] [Sedgewick - Tries (3 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [1. R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [2. Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [3. Character Based Operations](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) - - [ ] [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) + - [ ] [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) - ### Balanced search trees - - Know least one type of balanced binary tree (and know how it's implemented): + - Know at 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 @@ -1886,7 +1835,7 @@ You're never really done. 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) + - [ ] [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - [ ] MIT Lecture: Splay Trees: - Gets very mathy, but watch the last 10 minutes for sure. - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) @@ -1903,8 +1852,8 @@ You're never really done. 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/) + - [ ] [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) - [ ] **2-3 search trees** - In practice: @@ -1920,7 +1869,7 @@ You're never really done. 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) + - [ ] [CS 61B Lecture 26: Balanced Search Trees (video)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - [ ] [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) @@ -1946,7 +1895,6 @@ You're never really done. - the first 37 minutes are very technical, may be skipped (B is block size, cache line size) - - ### k-D Trees - great for finding number of points in a rectangle or higher dimension object - a good fit for k-nearest neighbors @@ -1959,13 +1907,13 @@ You're never really done. - [ ] [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 in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) - [ ] [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 - - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) - - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) + - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) - ### Math for Fast Processing - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) @@ -2112,7 +2060,7 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] [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) +- [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) - [ ] [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) @@ -2121,15 +2069,15 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] 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 (Spring 2014): Data Structures (25 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) -- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) +- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-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: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-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) +- [ ] ~~[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-) From f3a61e66e871442b94eeb6fd725e54e5c0ad8759 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 05:01:14 +0900 Subject: [PATCH 085/263] Fixed spells and grammars, and translate a few sentences --- translations/README-ko.md | 43 +++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 76c1338..0d2ce03 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -46,19 +46,19 @@ ## 코딩 인터뷰 대학이란? -코딩 인터뷰 대학은 웹 개발자(컴퓨터공학 학위 없이 독학)에서 구글의 소프트웨어 엔지니어가 되기 위한 나의 몇 달 간의 공부 계획이다. +코딩 인터뷰 대학은 웹 개발자(컴퓨터공학 학위 없이 독학)에서 구글의 소프트웨어 엔지니어가 되기 위한 나의 몇 달간의 공부 계획이다. ![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) -이 기나긴 리스트는 **구글 코칭 노트**에서 선별되고 확장된 것으로 여러분이 알아야 할 내용이다. 맨 아래에는 인터뷰에 등장하거나 문제를 푸는 데에 도움이 될 만한 추가적인 내용이 있다. 많은 내용이 Steve Yegge의 "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)"이라는 책에서 나왔으며, 때때로 구글 코칭 노트의 내용을 그대로 담고있기도 하다. +이 기나긴 리스트는 **구글 코칭 노트**에서 선별되고 확장된 것으로 여러분이 알아야 할 내용이다. 맨 아래에는 인터뷰에 등장하거나 문제를 푸는 데에 도움이 될 만한 추가적인 내용이 있다. 많은 내용이 Steve Yegge의 "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)"이라는 책에서 나왔으며, 때때로 구글 코칭 노트의 내용을 그대로 담고 있기도 하다. -나는 Yegge의 추천으로부터 여러분이 알아야만 할 내용들을 추려내었다. 구글과의 연락으로 얻은 정보를 바탕으로 그의 추천내용을 수정하였다. 이 리스트는 신입 소프트웨어 엔지니어, 혹은 소프트웨어/웹 개발에서 소프트웨어 엔지니어링(컴퓨터과학 지식이 필요한)으로 전환하는 사람들을 위한 것이다 +나는 Yegge의 추천내용 중 여러분이 알아야만 할 내용을 추려내었다. 구글과의 연락으로 얻은 정보를 바탕으로 그의 추천내용을 수정하였다. 이 리스트는 신입 소프트웨어 엔지니어, 혹은 소프트웨어/웹 개발에서 소프트웨어 엔지니어링(컴퓨터과학 지식이 필요한)으로 전환하는 사람들을 위한 것이다. 만약 당신이 여러 해의 소프트웨어 엔지니어링 경력이 있다면, 더 어려운 인터뷰가 예상된다. [더 보기](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/). 만약 당신이 여러 해의 소프트웨어/웹 개발 경험을 가지고 있다면, 구글은 소프트웨어 엔지니어링을 소프트웨어/웹 개발과 다르게 바라보고 있으며 컴퓨터과학 지식을 요구한다는 사실에 주목하도록 하자. -신뢰할만한 엔지니어, 혹은 시스템 엔지니어가 되고 싶다면 선택적 주제 목록(네트워크, 보안 등)을 더 공부하도록 하자. +믿음직한 엔지니어 혹은 시스템 엔지니어가 되고 싶다면, 선택적인 주제 목록(네트워크, 보안 등)을 더 공부하도록 하자. --- @@ -189,10 +189,13 @@ ## Why use it? -내가 이 프로젝트를 시작했을 때, 나는 힙스택, Big-O, 트리, 그래프 운행 등에 대하여 전혀 아는 바가 없었다. -만약 내가 정렬 알고리즘을 코딩해야했다면, 나는 그리 잘 하지 못했을 것이다. -모든 사용했던 모든 자료 구조는 언어 안에서 구현 되어 있던 것들이고, 나는 그 것들이 보이는 것 아래서 어떻게 작동하고 있는지 알지 못했다. -나는 진행 중인 프로세스가 메모리 부족 에러를 메세지를 보내지 않는 한 메모리를 관리할 필요가 없었고, 나는 회피방법을 찾아야만 했다. +나는 구글 인터뷰를 준비하기 위해 이 계획을 따랐다. 1997년부터 나는 웹과 서비스를 개발하고 스타트업을 세웠다. 나는 컴퓨터과학이 아닌 경제학 학위를 가지고 있다. +나의 커리어는 굉장히 성공적이어왔지만, 나는 구글에서 일하고 싶었다. 나는 더 큰 시스템을 다루고 컴퓨터 시스템, 알고리즘 효율, 자료구조 퍼포먼스, 저급 언어 등과 그것들이 어떻게 작동하는지에 대하여 이해하고 싶었다. 그리고 당신이 그런 것들을 모른다면 구글은 당신을 채용하지 않을 것이다. + +내가 이 프로젝트를 시작했을 때, 나는 힙이나 스택, 시간복잡도, 트리, 그래프 순회 등에 대하여 전혀 아는 바가 없었다. +만약 내가 정렬 알고리즘을 코딩해야 했다면, 나는 그리 잘하지 못했을 것이다. +모든 사용했던 모든 자료 구조는 언어 안에서 구현되어 있던 것들이고, 나는 그것들이 보이지 않는 곳에서 어떻게 작동하고 있는지 몰랐다. +나는 실행 중인 프로세스가 메모리 초과 에러를 메시지를 보내지 않는 한 메모리를 관리할 필요가 없었고, 나는 해결책을 찾아야만 했다. 나는 몇몇 다차원 배열이나 연관 배열을 사용해왔지만, 자료구조를 처음부터 구현해본 적은 없었다. 하지만 이 공부 계획을 진행하면서 나는 내가 고용될 것이라는 자신감을 갖게 되었다. 이 것은 내게 여러 달이 필요한 긴 계획이다. @@ -205,11 +208,11 @@ 아래의 모든 것은 대략적인 개요이며 당신은 위에서 아래 순서대로 진행해야 한다. -진행상황을 확인하기 위한 목록를 포함하여, 나는 Github'special markdown flavor를 사용하고 있다. +이 문서는 진행 상황을 확인하기 위한 목록 작성부터 다른 곳에도, Github식 마크다운 문법을 사용하고 있다. **새 브랜치를 만들어서 중괄호에 x표를 넣는 식으로 항목을 체크하라: [x]** - 브랜치를 포크하고 아래의 명령을 따라라 + 브랜치를 포크하고 아래의 명령을 따라라 `git checkout -b progress` @@ -227,7 +230,7 @@ `git push --force ` -[Github-flavored markdown에 대하여](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +[Github식 마크다운에 대하여](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
@@ -636,7 +639,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - 배열 메소드 등의 기능을 활용하지 않으면서 정수 배열에 메모리를 할당할 수 있어야 함 - 16으로 시작하거나 시작하는 숫자가 크다면 2의 제곱수(16, 32, 64, 128)로 시작 - [ ] size() - 항목의 개수 - - [ ] capacity() - 들어갈 수 있는 항목의 최대 개수number of items it can hold + - [ ] capacity() - 들어갈 수 있는 항목의 최대 개수 - [ ] is_empty() - [ ] at(index) - 인덱스에 있는 항목을 돌려주고, 인덱스가 범위 밖이면 에러를 냄 - [ ] push(item) @@ -1026,15 +1029,15 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 더 많은 지식 - ### 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) + - 꼬리 재귀를 사용하는 게 그렇지 않은 것보다 얼마나 나은가요? + - [ ] [꼬리 재귀가 무엇이고 왜 그게 좋지 않은지에 대하여](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) + - [ ] [꼬리 재귀 (영상)](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. @@ -1241,8 +1244,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [테스트 어떻게 작성하는지](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 + - 운영체제(OS)에서 어떻게 동작하는지 + - 운영 체제 관련 영상들에서 알아보실 수 있습니다. - ### Implement system routines - understand what lies beneath the programming APIs you use @@ -2047,8 +2050,8 @@ software engineer, and to be aware of certain technologies and algorithms, so yo ## Video Series +편하게 보세요. "Netflix and skill"이라니까요 :P -Sit back and enjoy. "Netflix and skill" :P
비디오 시리즈 @@ -2119,7 +2122,7 @@ Sit back and enjoy. "Netflix and skill" :P
컴퓨터 과학 수업들 -- [온라인 컴퓨터 과학 수업들](https://github.com/open-source-society/computer-science) +- [컴퓨터 과학 온라인 수업들](https://github.com/open-source-society/computer-science) - [(많은 온라인 강의가 있는) 컴퓨터 과학 수업들](https://github.com/prakhar1989/awesome-courses)
From 133e4aa4572077911da2758f781272b028c0746b Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 16:01:50 +0900 Subject: [PATCH 086/263] Removed google specific parts (find more) --- translations/README-ko.md | 74 ++++++++++----------------------------- 1 file changed, 18 insertions(+), 56 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 0d2ce03..5ccd7d5 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -46,17 +46,13 @@ ## 코딩 인터뷰 대학이란? -코딩 인터뷰 대학은 웹 개발자(컴퓨터공학 학위 없이 독학)에서 구글의 소프트웨어 엔지니어가 되기 위한 나의 몇 달간의 공부 계획이다. +코딩 인터뷰 대학은 (컴퓨터공학 학위 없이 독학한) 웹 개발자에서 큰 회사의 소프트웨어 엔지니어가 되기 위한 나의 몇 달간의 공부 계획이다. ![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) -이 기나긴 리스트는 **구글 코칭 노트**에서 선별되고 확장된 것으로 여러분이 알아야 할 내용이다. 맨 아래에는 인터뷰에 등장하거나 문제를 푸는 데에 도움이 될 만한 추가적인 내용이 있다. 많은 내용이 Steve Yegge의 "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)"이라는 책에서 나왔으며, 때때로 구글 코칭 노트의 내용을 그대로 담고 있기도 하다. +이 글은 **신입 소프트웨어 엔지니어** 혹은 소프트웨어/웹 개발에서 (컴퓨터과학 지식이 필요한) 소프트웨어 엔지니어링으로 전환자고자 하는 사람들을 위한 글입니다. 만약 당신이 여러 해의 소프트웨어 엔지니어링 경력이 있다면, 더 어려운 인터뷰가 예상된다. -나는 Yegge의 추천내용 중 여러분이 알아야만 할 내용을 추려내었다. 구글과의 연락으로 얻은 정보를 바탕으로 그의 추천내용을 수정하였다. 이 리스트는 신입 소프트웨어 엔지니어, 혹은 소프트웨어/웹 개발에서 소프트웨어 엔지니어링(컴퓨터과학 지식이 필요한)으로 전환하는 사람들을 위한 것이다. - -만약 당신이 여러 해의 소프트웨어 엔지니어링 경력이 있다면, 더 어려운 인터뷰가 예상된다. [더 보기](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/). - -만약 당신이 여러 해의 소프트웨어/웹 개발 경험을 가지고 있다면, 구글은 소프트웨어 엔지니어링을 소프트웨어/웹 개발과 다르게 바라보고 있으며 컴퓨터과학 지식을 요구한다는 사실에 주목하도록 하자. +만약 당신이 여러 해의 소프트웨어/웹 개발 경험을 가지고 있다면, 구글과 아마존, 페이스북 그리고 마이크로소프트과 같은 큰 규모의 소프트웨어 회사들은 소프트웨어 엔지니어링을 소프트웨어/웹 개발과 다르게 바라보고 있으며 컴퓨터과학 지식을 요구한다는 사실에 주목하도록 하자. 믿음직한 엔지니어 혹은 시스템 엔지니어가 되고 싶다면, 선택적인 주제 목록(네트워크, 보안 등)을 더 공부하도록 하자. @@ -189,9 +185,6 @@ ## Why use it? -나는 구글 인터뷰를 준비하기 위해 이 계획을 따랐다. 1997년부터 나는 웹과 서비스를 개발하고 스타트업을 세웠다. 나는 컴퓨터과학이 아닌 경제학 학위를 가지고 있다. -나의 커리어는 굉장히 성공적이어왔지만, 나는 구글에서 일하고 싶었다. 나는 더 큰 시스템을 다루고 컴퓨터 시스템, 알고리즘 효율, 자료구조 퍼포먼스, 저급 언어 등과 그것들이 어떻게 작동하는지에 대하여 이해하고 싶었다. 그리고 당신이 그런 것들을 모른다면 구글은 당신을 채용하지 않을 것이다. - 내가 이 프로젝트를 시작했을 때, 나는 힙이나 스택, 시간복잡도, 트리, 그래프 순회 등에 대하여 전혀 아는 바가 없었다. 만약 내가 정렬 알고리즘을 코딩해야 했다면, 나는 그리 잘하지 못했을 것이다. 모든 사용했던 모든 자료 구조는 언어 안에서 구현되어 있던 것들이고, 나는 그것들이 보이지 않는 곳에서 어떻게 작동하고 있는지 몰랐다. @@ -235,9 +228,10 @@
## 당신은 충분히 똑똑합니다 -- 구글 엔지니어들은 똑똑합니다. 하지만 그들 조차도 자신들의 지적 능력면에 대해서 불안감을 갖기 일쑤입니다. +- 성공한 소프트웨어 엔지니어들은 똑똑합니다. 하지만 그들 조차도 자신들의 지적 능력면에 대해서 불안감을 갖기 일쑤입니다. - [천재 프로그래머에 대한 미신(迷信)](https://www.youtube.com/watch?v=0SARbwvhupQ) - [위험한 홀로서기: 테크 산업의 보이지 않는 괴물들의 전쟁](https://www.youtube.com/watch?v=1i8ylq4j_EY) +- [Believe you can change](http://www.aaronsw.com/weblog/dweck) ## 영상 자료에 관하여 @@ -252,54 +246,32 @@
인터뷰 과정 & 전반적인 인터뷰 준비 과정 -- [ ] 비디오: - - - [ ] [구글에서 일하게 되는법: 기술 인터뷰 준비하기 (video)](https://www.youtube.com/watch?v=ko-KkSmp-Lk) - - [ ] [구글에서 일하게 되는법: 코딩/기술 인터뷰 예시 (video)](https://www.youtube.com/watch?v=XKu_SEDAykw) - - [ ] [구글에서 일하게 되는법 - 지원자 코칭 시간 (video)](https://www.youtube.com/watch?v=oWbUtlUhwa8&feature=youtu.be) - - [ ] [구글 리크루터들이 공유한 기술 인터뷰 팁들 (video)](https://www.youtube.com/watch?v=qc1owf2-220&feature=youtu.be) - - [ ] [구글에서 일하게 되는법: 기술 레쥬메 준비 (video)](https://www.youtube.com/watch?v=8npJLXkcmu8) - -- [ ] 읽을 거리들: - - - [ ] [구글러 되기 3단계](http://www.google.com/about/careers/lifeatgoogle/hiringprocess/) - - [ ] [구글에서 그 직업 갖기](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html) - - 이 글에서 저자가 언급한 당신이 알아야 할 모든 것들은 이 리스트 아래에 소개되어 있습니다. - - [ ] _(아주 오래됨)_ [구글에 취업하는 방법, 인터뷰 질문들, 채용 절차](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) - +- [ ] [ABC: 항상 코딩 하라](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [ ] [화이트 보드 쓰기](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [ ] [코딩 인터뷰에서 화이트 보드 효율적으로 쓰기](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] 코딩 인터뷰 정복 Set 1: + - [ ] [Gayle L McDowell - 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [저자와 함께하는 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=aClxtDcdpsQ) +- [ ] Big 4에 취업하는 방법: + - [ ] ['Big 4에 취업하는 방법 - Amazon, Facebook, Google & Microsoft' (영상)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [ ] 준비 코스: - [ ] [소프트웨어 엔지니어 인터뷰 대공개 (유료 강좌)](https://www.udemy.com/software-engineer-interview-unleashed): - 전직 구글 엔지니어로부터 당신이 어떻게 소프트웨어 엔지니어 인터뷰를 준비해야 하는지 배우게 됩니다. - -- [ ] 부가물 (구글이 추천하지않은 내가 더한 것들): - - [ ] [ABC: 항상 코딩 하라](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - - [ ] [학위 없이 구글에 들어가기 4단계](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) - - [ ] [화이트 보드 쓰기](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) - - [ ] [채용, 관리, 문화에 대한 구글의 생각](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture) - - [ ] [코딩 인터뷰에서 화이트 보드 효율적으로 쓰기](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - - [ ] 코딩 인터뷰 정복 Set 1: - - [ ] [Gayle L McDowell - 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) - - [ ] [저자와 함께하는 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=aClxtDcdpsQ) - - [ ] Big 4에 취업하는 방법: - - [ ] ['Big 4에 취업하는 방법 - Amazon, Facebook, Google & Microsoft' (영상)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - - [ ] [구글 인터뷰 실패기](http://alexbowe.com/failing-at-google-interviews/) + - [ ] [자료 구조, 알고리즘 그리고 면접을 위한 파이썬! (유료 강좌)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - 자료 구조와 알고리즘, 모의 면접 등을 다루는 파이썬 중점 면접의 준비 강좌입니다.
## 인터뷰를 위한 언어 고르기 -인터뷰때 사용할 언어 고르는 법에 대해 짧은 글을 하나 썼습니다: [구글 인터뷰를 위한 언어 고르기](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/) - -인터뷰때에 당신이 쓰기에 편한 언어를 선택해도 되지만, 구글 인터뷰에 선호되는 언어들은 다음과 같습니다. - +인터뷰때에 당신이 쓰기에 편한 언어를 선택해도 되지만, 큰 기업들은 보통 아래의 언어들을 선택합니다. - C++ - Java - Python - 아래 언어들을 사용할 수 있지만 주의하여야 합니다. - JavaScript @@ -312,7 +284,6 @@ - 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 [프로그래밍 언어 참고목록](programming-language-resources.md) @@ -392,7 +363,6 @@ 나는 아래의 두 책들을 읽지 않았습니다. 하지만 Sedgewick이 높게 평가한 책들입니다. 그는 정말 대단한 사람입니다. - - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) - [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) @@ -506,8 +476,6 @@ OR: **flashcard에 대한 참고사항:** 답을 할 수 있더라도 처음부터 안다고 표시하지 말자. 정확히 알기 전까지는 같은 카드를 보고 여러 번 답변할 수 있어야한다. 반복 학습을 통해 해당 지식은 당신의 뇌에 깊이 각인될 것이다. - - 나의 flashcard site를 사용하는 대신 [Anki](http://ankisrs.net/)를 사용해도 된다. 나는 이 것을 여러 번 추천받았다. 이것은 당신이 기억하는 것을 돕기 위해 반복적인 시스템을 사용한다. 이것은 사용자 친화적이며, 모든 플랫폼에서 사용가능하다. 또한 클라우드 동기화 시스템을 제공한다. 이것은 iOS에서는 $25이지만 다른 플랫폼에서는 무료로 사용 가능하다. @@ -556,12 +524,10 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info 모든 주제에 대한 모든 것을 할 수 없지만 나는 노력했다. 나의 코드를 여기서 확인하세요: - - [C] (https://github.com/jwasham/practice-c) - [C++] (https://github.com/jwasham/practice-cpp) - [Python] (https://github.com/jwasham/practice-python) - 당신은 모든 알고리즘에 대해서 기억할 필요는 없다. 컴퓨터에 코딩하지 말고 와이트보드나 종이에 적어보아라. 인풋 값으로 샘플 테스트를 해 보아라. 그리고 컴퓨터로 테스트해 보아라. @@ -577,7 +543,6 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - 이 책은 분량이 적은 책이지만 C 를 잘 다룰 수 있게 해 줄 것이다. 또한 조금만 연습하더라도 연습량에 비해 빠르게 배울 수 있을 것이다. C 를 이해하는 것은 프로그램과 메모리가 어떻게 돌아가는지 이해하는 것을 도와준다. - [answers to questions](https://github.com/lekkas/c-algorithms) - - [ ] **How computers process a program:** - [ ] [How CPU executes a program](https://www.youtube.com/watch?v=XM4lGflQFvA) - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) @@ -1487,8 +1452,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 체계적이고 소통하는 인터뷰에서의 문제풀이에 관한 좋은 시작점이 있다. 당신은 프로그래밍 인터뷰 책에서 이 서식을 얻을 수도 있지만, 나는 이 것이 가장 좋다고 본다: [Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) -[My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/) - 집에 화이트보드가 없는가? 그럴 수 있다. 나는 커다란 화이트보드를 가진 괴짜이다. 화이트보드 대신에 상점에서 큰 도화지를 사오자. 소파에 앉아서 연습할 수 있다. 이 것은 내 "소파 화이트보드"이다. 크기 비교를 위해 사진에 펜을 추가하였다. 펜을 쓰면, 곧 지우고 싶어질 것이다. 금방 지저분해 진다. @@ -1608,8 +1571,7 @@ You're never really done. ***************************************************************************************************** ***************************************************************************************************** - - 아래의 모든 것들은 선택 사항이다. 이 것들은 Google의 권장사항이 아니라, 나의 추천사항이다. + 아래의 모든 것들은 선택 사항이다. 당신은 이것들을 공부함으로써 더 많은 CS 개념들에 대해 알 수 있을 것이며, 소프트웨어 엔지니어링 직업을 준비하는 데에도 도움이 될 것 이다. 더불어 당신은 훨씬 더 균형 잡힌 소프트웨어 엔지니어가 될 것이다. From 1c1efc61e4360948f8da4185de4ac86a6c94c571 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 16:03:27 +0900 Subject: [PATCH 087/263] Fixed wrongs --- translations/README-ko.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 5ccd7d5..0f9bbaa 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -209,7 +209,7 @@ `git checkout -b progress` -`git remote add jwasham https://github.com/jwasham/google-interview-university` +`git remote add jwasham https://github.com/jwasham/coding-interview-university` `git fetch --all` @@ -258,7 +258,7 @@ - [ ] 준비 코스: - [ ] [소프트웨어 엔지니어 인터뷰 대공개 (유료 강좌)](https://www.udemy.com/software-engineer-interview-unleashed): - - 전직 구글 엔지니어로부터 당신이 어떻게 소프트웨어 엔지니어 인터뷰를 준비해야 하는지 배우게 됩니다. + - 전직 구글 면접관이 당신이 어떻게 소프트웨어 엔지니어 인터뷰를 준비해야 하는지 알려줍니다. - [ ] [자료 구조, 알고리즘 그리고 면접을 위한 파이썬! (유료 강좌)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - 자료 구조와 알고리즘, 모의 면접 등을 다루는 파이썬 중점 면접의 준비 강좌입니다. @@ -317,8 +317,6 @@ ### 컴퓨터 구조 -준비기간이 짧을 때, - - [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - 이 책은 2004년에 출판된 다소 구식의 책이지만, 간략히 컴퓨터를 이해하는 데에 훌륭한 자료입니다. - 이 책의 저자는 HLA를 발명했습니다. 그래서 회의적인 시선으로 HLA에 대해 언급하고 예로 듭니다. 널리 읽히지는 않지만, 어셈블리가 어떻게 생겼는 지를 보여주는 좋은 예입니다. @@ -336,7 +334,7 @@ - Chapter 10 - Instruction Set Architecture - Chapter 11 - Memory Architecture and Organization - +
만약에 시간적 여유가 좀 더 있다면 아래 서적을 읽어보는 것을 권유합니다. @@ -398,7 +396,7 @@ OR: - by Goodrich, Tamassia, Goldwasser - 나는 이 책을 사랑한다. 이 책은 모든 것을 다룬다. - Pythonic code - - 나의 열렬한 서적 보고서: https://googleyasheck.com/book-report-data-structures-and-algorithms-in-python/ + - 나의 열렬한 서적 보고서: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/
@@ -457,7 +455,7 @@ OR: 꼭 읽고 내가 한 실수들을 반복하지 않길 바란다. -[Retaining Computer Science Knowledge](https://googleyasheck.com/retaining-computer-science-knowledge/) +[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/) ### 2. Flashcard를 사용하자. @@ -500,7 +498,6 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - Javascript - HTML, CSS, 그리고 다른 프론트엔드 기술들 - ## 하루 하루의 계획 어떤 주제들은 하루가 걸리고, 어떤 것들은 며칠이 걸릴 것이다. From 49b911265eae9bc98bb9c7e94e3354f7a77205db Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 16:55:17 +0900 Subject: [PATCH 088/263] Update headers and links which refers them --- translations/README-ko.md | 75 +++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 0f9bbaa..6de9aac 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -61,8 +61,8 @@ ## 목차 - [코딩 인터뷰 대학이란?](#코딩-인터뷰-대학이란) -- [Why use it?](#why-use-it) -- [How to use it?](#how-to-use-it) +- [이걸 왜 써야하죠?](#이걸-왜-써야하죠) +- [어떻게 쓰면 되나요?](#어떻게-쓰면-되나요) - [당신은 충분히 똑똑합니다](#당신은-충분히-똑똑합니다) - [영상 자료에 관하여](#영상-자료에-관하여) - [인터뷰 과정 & 전반적인 인터뷰 준비 과정](#인터뷰-과정--전반적인-인터뷰-준비-과정) @@ -70,7 +70,7 @@ - [도서 목록](#도서-목록) - [시작하기 전에](#시작하기-전에) - [다루지 않을 것](#다루지-않을-것) -- [선수 지식](#선수-지식) +- [먼저 알아야 할 지식](#먼저-알아야-할-지식) - [하루 하루의 계획](#하루-하루의-계획) - [알고리즘 복잡도 / Big-O / 점근적 분석](#알고리즘-복잡도--big-o--점근적-분석) - [자료구조](#자료구조) @@ -78,8 +78,8 @@ - [링크드 리스트](#링크드-리스트) - [스택](#스택) - [큐](#큐) - - [해쉬 테이블](#해쉬-테이블) -- [추가 지식](#more-knowledge) + - [해시 테이블](#해시-테이블) +- [추가 지식](#추가-지식) - [이진 탐색/이진 검색](#binary-search) - [비트 연산](#bitwise-operations) - [트리](#trees) @@ -120,16 +120,16 @@ - [엔디언(Endianness)](#endianness) - [네트워크](#networking) - [시스템 디자인, 확장성, 데이터 핸들링](#system-design-scalability-data-handling) (4년 이상 경력자를 위한 주제) -- [최종 리뷰](#final-review) -- [코딩 문제 연습](#coding-question-practice) -- [코딩 연습 / 도전](#coding-exerciseschallenges) -- [인터뷰가 얼마 남지 않았을 때](#once-youre-closer-to-the-interview) -- [이력서](#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-youve-got-the-job) +- [최종 검토](#최종-검토) +- [코딩 문제 연습](#코딩-문제-연습) +- [코딩 연습/도전](#코딩-연습도전) +- [인터뷰가 얼마 남지 않았을 때](#인터뷰가-얼마-남지-않았을-때) +- [이력서](#이력서) +- [인터뷰가 다가오면 생각해보기](#인터뷰가-다가오면-생각해보기) +- [면접관에게 받았던 질문들](#면접관에게-받았던-질문들) +- [취직했다면](#취직했다면) ----------------- Everything below this point is optional ---------------- +---------------- 여기부터는 선택사항입니다. ---------------- - [추가 도서](#additional-books) - [추가 주제](#additional-learning) @@ -139,7 +139,7 @@ - [엔디언](#endianness) - [Emacs 와 vi(m)](#emacs-and-vim) - [유닉스 명령어 도구](#unix-command-line-tools) - - [정보 이론](#information-theory) + - [정보 이론](#information-theory-videos) - [패리티 & 해밍코드](#parity--hamming-code) - [엔트로피](#entropy) - [암호기법](#cryptography) @@ -176,14 +176,14 @@ - [기하학, 볼록 껍질](#geometry-convex-hull) - [이산수학](#discrete-math) - [기계학습](#machine-learning) -- [몇몇 주제에 대한 세부사항](#additional-detail-on-some-subjects) +- [몇몇 주제에 대한 세부사항](#몇몇-주제에-대한-세부사항) - [영상 자료](#video-series) -- [컴퓨터 과학 강의들](#computer-science-courses) +- [컴퓨터 과학 강의들](#컴퓨터-과학-강의들) - [라이센스](#라이센스) --- -## Why use it? +## 이걸 왜 써야하죠? 내가 이 프로젝트를 시작했을 때, 나는 힙이나 스택, 시간복잡도, 트리, 그래프 순회 등에 대하여 전혀 아는 바가 없었다. 만약 내가 정렬 알고리즘을 코딩해야 했다면, 나는 그리 잘하지 못했을 것이다. @@ -194,7 +194,7 @@ 하지만 이 공부 계획을 진행하면서 나는 내가 고용될 것이라는 자신감을 갖게 되었다. 이 것은 내게 여러 달이 필요한 긴 계획이다. 만약 당신이 이 중 많은 내용에 익숙하다면 시간은 훨씬 덜 들 것이다. -## How to use it? +## 어떻게 사용하면 되나요?
How to use it? @@ -293,7 +293,6 @@ 아래의 목록은 내가 공부했던 책들보다는 적다. 당신의 시간을 절약하기 위해 몇몇 책들은 생략하였다. - ### 인터뷰 준비를 위해서 - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) @@ -529,7 +528,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info 컴퓨터에 코딩하지 말고 와이트보드나 종이에 적어보아라. 인풋 값으로 샘플 테스트를 해 보아라. 그리고 컴퓨터로 테스트해 보아라. -## 선수 지식 +## 먼저 알아야 할 지식
Prerequisite Knowledge @@ -681,8 +680,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - dequeue: O(1) (linked list and array) - empty: O(1) (linked list and array) -- ### 해쉬 테이블 - - [ ] 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) @@ -690,7 +689,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [(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://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) @@ -711,7 +710,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
-## More Knowledge +## 추가 지식
More Knowledge @@ -915,7 +914,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [Sorting in Linear Time (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). -If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +If you need more detail on this subject, see "Sorting" section in [몇몇 주제에 대한 세부사항](#몇몇-주제에-대한-세부사항)
@@ -1210,8 +1209,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - 운영 체제 관련 영상들에서 알아보실 수 있습니다. - ### Implement system routines - - understand what lies beneath the programming APIs you use - - can you implement them? + - 당신이 사용하는 프로그래밍 API들이 어떤 이점을 가져오는지 이해하기 + - 그리고 그것들을 구현할 수 있는가? - ### String searching & manipulations - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) @@ -1469,11 +1468,11 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - answers in Java -[위의 도서 목록](#book-list)을 보라 +[위의 도서 목록](#도서-목록)을 보라
-## Coding exercises/challenges +## 코딩 연습/도전
Coding Question Practice @@ -1512,13 +1511,13 @@ Mock Interviews:
-## 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) -## Your Resume +## 이력서 - See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed @@ -1541,7 +1540,7 @@ Mock Interviews: - 무엇을 배웠는가 [job x / project y]? - 무엇이 향상되었는가 [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): @@ -1932,7 +1931,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo --- -## Additional Detail on Some Subjects +## 몇몇 주제에 대한 세부사항
Additional Detail on Some Subjects @@ -2076,13 +2075,13 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
-## Computer Science Courses +## 컴퓨터 과학 강의들
-컴퓨터 과학 수업들 +Computer Science Courses -- [컴퓨터 과학 온라인 수업들](https://github.com/open-source-society/computer-science) -- [(많은 온라인 강의가 있는) 컴퓨터 과학 수업들](https://github.com/prakhar1989/awesome-courses) +- [컴퓨터 과학 온라인 강의들](https://github.com/open-source-society/computer-science) +- [(많은 온라인 강의가 있는) 컴퓨터 과학 강의들](https://github.com/prakhar1989/awesome-courses)
From 1ea7d4ae3c9022fdfc49e5a93eeffdc16aa5b3f3 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Sun, 2 Dec 2018 17:16:16 +0900 Subject: [PATCH 089/263] Tranlsate into korean --- translations/README-ko.md | 143 +++++++++++++++++++------------------- 1 file changed, 70 insertions(+), 73 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 6de9aac..1b5a43e 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -119,7 +119,7 @@ - [유니코드](#unicode) - [엔디언(Endianness)](#endianness) - [네트워크](#networking) -- [시스템 디자인, 확장성, 데이터 핸들링](#system-design-scalability-data-handling) (4년 이상 경력자를 위한 주제) +- [시스템 디자인, 확장성, 데이터 핸들링](#시스템-디자인-확장성-데이터-핸들링) (4년 이상 경력자를 위한 주제) - [최종 검토](#최종-검토) - [코딩 문제 연습](#코딩-문제-연습) - [코딩 연습/도전](#코딩-연습도전) @@ -277,11 +277,9 @@ - JavaScript - Ruby +당신은 당신의 언어에 매우 익숙하고 그 언어에 대해 잘 알아야 합니다. -당신은 당신의 언어에 익숙하고 그 언어에 대해 잘 알아야 합니다. - -언어 선택을 도와줄 만한 읽을 거리들 - +언어 선택을 도움이 될 만한 읽을 거리들 - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ - http://blog.codingforinterviews.com/best-programming-language-jobs/ @@ -458,17 +456,18 @@ OR: ### 2. Flashcard를 사용하자. -이 문제를 해결하기 위해 나는 2가지 종류(일반적인 내용, 코드)의 flashcard를 보관하고 추가할 수 있는 작은 사이트를 만들었다. 각 카드는 다른 서식을 가지고 있다. +이 문제를 해결하기 위해 나는 2가지 종류(일반적인 내용, 코드)의 flashcard를 보관하고 추가할 수 있는 작은 사이트를 만들었다. +각 카드는 다른 서식을 가지고 있다. 이 사이트는 모바일에 최적화 되어있기 때문에 내 전화기나 태블릿 어디에서든 이를 확인할 수 있다. -당신만의 카드를 만들어보자(무료로): +당신만의 카드를 무료로 만들어보자: - [Flashcard 사이트 repo](https://github.com/jwasham/computer-science-flash-cards) - [내 flashcard 데이터베이스 (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): - [내 flashcard 데이터베이스 (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db): -앞에서도 언급했듯이 나는 불필요하게 많은 것을 공부하려고 했고, 내 카드의 내용들은 어셈블리 언어와 Python의 자잘한 지식들부터 기계 학습과 통계학까지 넘나들게 되었다. 결국 구글이 요구하는 것보다 훨씬 멀리 가버리고 말았다. +앞에서도 언급했듯이 나는 불필요하게 많은 것을 공부하려고 했고, 내 카드의 내용들은 어셈블리 언어와 Python의 자잘한 지식들부터 기계 학습과 통계학까지 넘나들게 되었다. 결국 기업이 요구하는 것보다 훨씬 멀리 가버리고 말았다. **flashcard에 대한 참고사항:** 답을 할 수 있더라도 처음부터 안다고 표시하지 말자. 정확히 알기 전까지는 같은 카드를 보고 여러 번 답변할 수 있어야한다. 반복 학습을 통해 해당 지식은 당신의 뇌에 깊이 각인될 것이다. @@ -533,18 +532,18 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
Prerequisite Knowledge -- [ ] **Learn C** +- [ ] **C언어 배우기** - C 는 어디에나 있다. 당신은 책이나 강의, 비디오 등 공부하는 동안 모든 곳에서 예제를 볼 것이다. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - 이 책은 분량이 적은 책이지만 C 를 잘 다룰 수 있게 해 줄 것이다. 또한 조금만 연습하더라도 연습량에 비해 빠르게 배울 수 있을 것이다. C 를 이해하는 것은 프로그램과 메모리가 어떻게 돌아가는지 이해하는 것을 도와준다. - - [answers to questions](https://github.com/lekkas/c-algorithms) + - 이 책은 분량이 적은 책이지만 C언어를 잘 다룰 수 있게 해 줄 것이다. 또한 조금만 연습하더라도 연습량에 비해 빠르게 배울 수 있을 것이다. C언어를 이해하는 것은 프로그램과 메모리가 어떻게 돌아가는지 이해하는 것을 도와준다. + - [질의 응답](https://github.com/lekkas/c-algorithms) -- [ ] **How computers process a program:** - - [ ] [How CPU executes a program](https://www.youtube.com/watch?v=XM4lGflQFvA) - - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) - - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) - - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) - - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) +- [ ] **컴퓨터가 프로그램을 어떻게 처리하는 지:** + - [ ] [CPU는 프로그램을 어떻게 실행하는 지 (영상)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [컴퓨터의 계산 방법 - ALU (영상)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [레지스터와 RAM (영상)](https://youtu.be/fpnE6UAfbtU) + - [ ] [중앙처리장치(CPU) (영상)](https://youtu.be/FZGugFqdr60) + - [ ] [명렁어와 프로그램 (영상)](https://youtu.be/zltgXvg6r3k)
@@ -553,13 +552,13 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info
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) + - [동영상](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [슬라이드 자료](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) @@ -573,8 +572,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [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. + 일부 강의가 너무 수학적이라면, 아래로 가서 이산 수학에 대한 동영상을 보며 배경 지식을 쌓아보세요.
@@ -701,9 +699,9 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [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 + - [ ] Linear probing을 사용하여 배열로 구현해보기 + - hash(k, m) - m은 해시 테이블의 크기 + - add(key, value) - 키가 이미 존재한다면, 값을 갱신한다. - exists(key) - get(key) - remove(key) @@ -1222,12 +1220,11 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + 이 주제를 더 자세히 알고 싶으시다면, [몇몇 주제에 대한 세부사항](#몇몇-주제에-대한-세부사항)에서 "문자열 매칭" 섹션을 읽어보세요. - ### 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. + - 트라이에는 여러 종류가 있다는 것을 유의하라. 어떤 건 접두사가 있는 데, 어떤 건 그렇지 않고 또 어떤 것은 경로 추적을 위해 비트 대신에 문자열을 사용한다. + - 나는 코드만 읽었고, 구현은 안 했다. - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) @@ -1258,8 +1255,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - The first half is enough. - ### Networking - - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - - otherwise, this is just good to know + - **만약 당신이 네트워크에 대한 경험이 있거나 operations engineer 또는 믿음직한 엔지니어가 되고 싶다면 받을 수 있는 질문들** + - 즉, 알면 좋은 것들이다. - [ ] [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) @@ -1270,22 +1267,22 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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) - - [ ] Sockets: + - [ ] 소켓: - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) -## System Design, Scalability, Data Handling +## 시스템 디자인, 확장성, 데이터 핸들링
System Design, Scalability, Data Handling -- **You can expect system design questions if you have 4+ years of experience.** +- **4년 이상의 경력자라면 이런 시스템 디자인 질문들을 받을 수 있다.** - 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. -- Considerations: +- 고려사항: - scalability - Distill large data sets to single values - Transform one data set to another @@ -1298,13 +1295,13 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - simplicity and robustness - tradeoffs - performance analysis and optimization -- [ ] **START HERE**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] **여기서 시작하세요**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [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. +- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - 여기에 리소스가 정말 많이 있습니다. 글과 예제들을 살펴보세요. 일부는 아래에도 적어놓았습니다. - [ ] [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) @@ -1449,8 +1446,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 체계적이고 소통하는 인터뷰에서의 문제풀이에 관한 좋은 시작점이 있다. 당신은 프로그래밍 인터뷰 책에서 이 서식을 얻을 수도 있지만, 나는 이 것이 가장 좋다고 본다: [Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) 집에 화이트보드가 없는가? 그럴 수 있다. 나는 커다란 화이트보드를 가진 괴짜이다. 화이트보드 대신에 상점에서 큰 도화지를 사오자. -소파에 앉아서 연습할 수 있다. 이 것은 내 "소파 화이트보드"이다. 크기 비교를 위해 사진에 펜을 추가하였다. 펜을 쓰면, 곧 지우고 싶어질 것이다. -금방 지저분해 진다. +소파에 앉아서 연습할 수 있다. 이 것은 내 "소파 화이트보드"이다. +크기 비교를 위해 사진에 펜을 추가하였다. 펜을 쓰면, 곧 지우고 싶어질 것이다. 금방 지저분해 진다. ![my sofa whiteboard](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) @@ -1464,11 +1461,11 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 **읽고 프로그래밍 문제 풀기 (순서대로):** - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C, C++ and Java + - C, C++, Java로 답변 - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - Java로 답변 -[위의 도서 목록](#도서-목록)을 보라 +[위의 도서 목록](#도서-목록)을 보세요.
@@ -1477,13 +1474,13 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그
Coding Question Practice -Once you've learned your brains out, put those brains to work. -Take coding challenges every day, as many as you can. +공부하는 게 머리에 잘 안 들어올 때, 한번 해보세요. +가능한 한 매일 코딩 챌린지를 하는겁니다. - [ ] [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) - [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) -Coding Interview Question Videos: +코딩 인터뷰 질문들 영상: - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) @@ -1504,7 +1501,7 @@ Challenge sites: Challenge repos: - [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) -Mock Interviews: +모의 면접: - [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. @@ -1528,11 +1525,11 @@ Mock Interviews: 당신이 성취한 것에 대해 데이터 뿐만 아니라 스토리를 만들어라. - 왜 이 직업을 원합니까? -- 당신이 풀었던 문제중 힘들었던 문제는? +- 당신이 풀었던 문제 중 힘들었던 문제는? - 큰 도전에 직면한 적은? -- 최고의/최악의 디자인을 본적이 있는가? -- 현존하는 구글 제품들에 대해 향상시킬수 있는 아이디어 -- 개인적으로 일할 때 가장 잘 일하는가? 아니면 팀원으로서 있을 때? +- 최고의/최악의 디자인을 본 적이 있는가? +- 현존하는 제품을 향상시킬 수 있는 아이디어 +- 개인적으로 일할 때 가장 잘 일 하는가? 아니면 팀원으로서 있을 때? - 어떤 기술과 경험들이 당신의 역할에서 자산이 되었으며 그 이유는? - 어떤 것이 가장 즐거웠는가 [job x / project y]? - 무엇이 가장 큰 도전이었는가 [job x / project y]? @@ -1542,25 +1539,25 @@ Mock Interviews: ## 면접관에게 받았던 질문들 - Some of mine (I already may know answer to but want their opinion or team perspective): + 내 경우에는 이랬다. (I already may know answer to but want their opinion or team perspective): -- How large is your team? -- What does 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? +- 어떤 Work life를 생각하시나요? -## Once You've Got The Job +## 취직했다면 -Congratulations! +축하드립니다! -Keep learning. +꾸준히 공부하시길 바랍니다. -You're never really done. +끝난게 아니니까요. --- @@ -1973,26 +1970,26 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) -- [ ] **String Matching** - - [ ] Rabin-Karp (videos): - - [Rabin Karps Algorithm](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm) +- [ ] **문자열 매칭 + - [ ] 라빈-카프(Rabin-Karp) (동영상): + - [라빈 카프 알고리즘](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) + - [최적화: 구현과 분석](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): - - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) - - [ ] Boyer–Moore string search algorithm + - [The Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - [ ] 보이어-무어(Boyer–Moore) 문자열 검색 알고리즘 - [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) - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be - - nice explanation of tries - - can be skipped + - 트라이(tries)에 대해서 잘 설명하고 있다. + - 이건 생략 가능 -- [ ] **Sorting** +- [ ] **정렬** - - [ ] 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/): From 175e156e7673e93446ce7af5e85ec0be5e1fbccd Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Wed, 12 Dec 2018 17:51:17 +0900 Subject: [PATCH 090/263] translate a little --- translations/README-ko.md | 46 +++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 1b5a43e..f528caf 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -144,7 +144,7 @@ - [엔트로피](#entropy) - [암호기법](#cryptography) - [압축](#compression) - - [네트워크](#networking) (if you have networking experience or want to be a systems engineer, expect questions) + - [네트워크](#networking) (만약 당신이 네트워크에 대한 경험이 있거나 시스템 엔지이너가 되고 싶다면 받을 수 있는 질문들) - [컴퓨터 보안](#computer-security) - [가비지 콜렉션](#garbage-collection) - [병렬 프로그래밍](#parallel-programming) @@ -341,7 +341,7 @@
-### 언어 구체적 +### 특정 언어 관련 **인터뷰를 위해 당신의 언어를 선택하여야 합니다 (윗글 참조)** 아래는 제가 추천하는 언어들입니다. 이 언어들중에 부연설명이나 부가 자료들이 있다면 나눠 주세요. @@ -619,21 +619,21 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n) - ### 링크드 리스트 - - [ ] Description: - - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] 설명: + - [ ] [단일 연결 리스트 (영상)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - 연결 리스트 1 (영상)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - 연결 리스트 2 (영상)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [ ] [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: + - 전체 영상은 아니고, 노드 구조와 메모리 할당에 대한 부분입니다. + - [ ] 연결 리스트 vs 배열: - [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: + - [실세계에서의 연결 리스트 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) + - [ ] 짚고가기: 이중 포인터에 대한 지식이 필요하다면: (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): + - [ ] 구현 (저는 tail 포인터가 있는 것과 없는 것 모두 구현했었습니다.): - [ ] 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) @@ -648,9 +648,9 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] 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/jpGKD/doubly-linked-lists) + - 구현할 필요는 없습니다. - ### 스택 - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) @@ -662,16 +662,16 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - - [ ] 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) + - [ ] tail 포인터가 있는 연결 리스트를 사용하여 구현하기: + - enqueue(value) - tail이 가리키는 곳에 value를 추가한다 + - dequeue() - value를 반환하고 가장 최근에 추가된 원소(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 + - [ ] 고정 길이 배열을 사용하여 구현하기: + - enqueue(value) - 사용 가능한 저장 공간의 끝에 item을 추가한다. + - dequeue() - value를 반환하고 가장 최근에 추가된 원소를 제거한다. - 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]) From 4526dcddbdf0960bc3cbc192f6bccbf20cc1af20 Mon Sep 17 00:00:00 2001 From: Joona Yoon Date: Thu, 13 Dec 2018 01:29:12 +0900 Subject: [PATCH 091/263] translate Algorithms, Graphs, BST, Bits, Trees, Heap, Sortings, OOP(a little) --- translations/README-ko.md | 333 +++++++++++++++++++------------------- 1 file changed, 168 insertions(+), 165 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index f528caf..db74a9b 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -82,19 +82,19 @@ - [추가 지식](#추가-지식) - [이진 탐색/이진 검색](#binary-search) - [비트 연산](#bitwise-operations) -- [트리](#trees) +- [트리](#트리) - [트리 - 배경지식](#trees---notes--background) - [이진 탐색 트리(BST)](#binary-search-trees-bsts) - [힙 / 우선순위 큐 / 이진 힙](#heap--priority-queue--binary-heap) - 균형 탐색 트리 (간단한 개념) - 트리 순회: 전위 순회, 중위 순회, 후위 순회, 너비 우선 탐색(BFS), 깊이 우선 탐색(DFS) -- [정렬](#sorting) +- [정렬](#정렬) - 선택 정렬 - 삽입 정렬 - 힙 정렬 - 퀵 정렬 - 병합 정렬 -- [그래프](#graphs) +- [그래프](#그래프) - 방향 그래프 - 무방향 그래프 - 인접 행렬 @@ -347,7 +347,7 @@ 이 중 하나를 읽으려면 코딩 문제 푸는 데 필요한 데이터 구조 및 알고리즘 지식이 있어야합니다. -**You can skip all the video lectures in this project**, unless you'd like a review. +검토(review)를 좋아하지 않는다면, **이 프로젝트의 모든 영상은 생략해도 됩니다.** [Additional language-specific resources here.](programming-language-resources.md) @@ -375,7 +375,7 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적 - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) -OR: +또는: - [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - by Goodrich, Tamassia, Goldwasser @@ -406,37 +406,37 @@ OR: - [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: + - 알고리즘 카탈로그 부분은 면접에서 다루는 난이도의 범주를 훨씬 넘깁니다. + - 이 책은 2개의 파트가 있습니다: - class textbook on data structures and algorithms - - pros: + - 장점: - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. + - 산학과 연구에서 문제들을 해결한 그의 경험을 이야기하는 것이 좋음 + - 예제 코드가 C언어 + - 단점: + - CLRS처럼 너무 함축되어 있어서 헤아리기 힘들 수 있다. 그래서 어떤 주제는 CLRS를 읽는 게 더 나을 수도 있다. + - 7, 8, 9장은 따라가기 힘들 수 있다. 어떤 항목들은 설명이 잘 안되어있거나 더 많은 배경 지식이 필요하기 때문이다. + - (오해하지 마세요) 전 Skiena씨와 그 분의 교육 스타일과 매너리즘은 좋아합니다만, 스토니브룩 대학의 자료는 그렇지 않더군요. + - 알고리즘 카탈로그: + - 이게 이 책을 사는 진짜 이유 - about to get to this part. Will update here once I've made my way through it. - - Can rent it on kindle + - 아마존 킨들에서 도서 대여 가능 - 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) - [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - aka CLR, sometimes CLRS, because Stein was late to the game + - **중요:** 이 책을 읽으면 특별한 가치를 얻을 수 있습니다. 이 책은 알고리즘과 자료구조를 훌륭하게 살피고 있지만, 좋은 코드를 작성하는 법을 알려주지는 않습니다. 괜찮은 솔루션을 코드로 효율적으로 옮겨적을 줄 알아야합니다. + - CLR 또는 CLRS로 알려져있습니다. (역: 저자들 이름의 첫글자를 따서 CLRS라고 불리지만, 초판에는 Stein이 없었습니다.) - [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + - 처음 두 장은 (데이터 테이프를 사용한 아주 오래된) 문제를 프로그래밍하는 기발한 솔루션을 보여줍니다. 하지만, that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. - ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ - - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. - - Would rather spend time on coding problems from another book or online coding problems. + - 좋은 책. 하지만 몇 페이지 넘기면서 문제를 해결한 후에 파스칼, do while 반복문, 1-indexed 배열, unclear post-condition satisfaction results를 보고 좌절했다. + - 다른 책이나 온라인 코딩 문제에 있는 코딩 문제를 보는 게 나을 것 같다. @@ -608,15 +608,15 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] 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) + - [ ] resize(new_capacity) // private 함수 + - 용량이 꽉 차면, 그 두배로 크기를 조정한다. + - item을 하나 꺼낼 때, 용량이 1/4이라면, 용량을 절반으로 줄인다. + - [ ] 시간 복잡도 + - 접근, 수정, 끝에 추가/삭제하는 데 O(1) + - 다른 곳에 추가/삭제하는 데 O(n) + - [ ] 공간 복잡도 + - 메모리에 연속적으로 있어서, 근접성이 성능을 향상시킨다. + - 필요한 공간 = (n 이상인 배열의 용량) * item의 크기, 하지만 2n 크기에서는 여전히 O(n) - ### 링크드 리스트 - [ ] 설명: @@ -716,16 +716,16 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - ### 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/competitive-programming/tutorials/binary-search/) - - [ ] Implement: - - binary search (on sorted array of integers) - - binary search using recursion + - [ ] [자세한 내용](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/) + - [ ] 구현: + - (정수가 정렬된 배열에서) 이진 탐색 + - 재귀를 사용한 이진 탐색 - ### Bitwise operations - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: + - [ ] 비트 연산자(&, |, ^, ~, >>, <<) 제대로 이해하기 + - [ ] [워드](https://en.wikipedia.org/wiki/Word_(computer_architecture)) + - [ ] 시작하기 좋은 곳: [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) @@ -733,10 +733,10 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) - - [ ] 2s and 1s complement + - [ ] 2의 보수와 1의 보수 - [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) + - [1의 보수](https://ko.wikipedia.org/wiki/1의_보수) + - [2의 보수](https://ko.wikipedia.org/wiki/2의_보수) - [ ] 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) @@ -750,7 +750,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info -## Trees +## 트리
Trees @@ -758,22 +758,24 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - ### 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) and DFS(depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - - BFS notes: - - level order (BFS, using queue) - - time complexity: O(n) - - space complexity: best: O(1), worst: O(n/2)=O(n) - - DFS 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) + - 트리 기초 형태 만들기 + - 순회 + - 알고리즘 다루기 + - [ ] [BFS(너비-우선 탐색;breadth-first search) and DFS(깊이-우선 탐색;depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS 노트: + - level order (BFS, 큐를 사용하여) + - 시간 복잡도: O(n) + - 공간 복잡도: + 최고: O(1) + 최악: O(n/2)=O(n) + - DFS 노트: + - 시간 복잡도: O(n) + - 공간 복잡도: + 최고: O(log n) - 평균적으로, 트리의 높이이다. + 최악: O(n) + - 중위(inorder) (DFS: 왼쪽, 자신, 오른쪽) + - 후위(postorder) (DFS: 왼쪽, 오른쪽, 자신) + - 전위(preorder) (DFS: 자신, 왼쪽, 오른쪽) - ### Binary search trees: BSTs - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) @@ -782,78 +784,78 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [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) + - [ ] [이진 탐색 트리 - 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) + - [ ] [이진 트리: Level Order Traversal (video)](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) - [ ] [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 + - [ ] 구현: + - [ ] 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 // 주어진 값이 트리 안에 있는 지를 반환 + - [ ] 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) + - 트리처럼 보여지지만, 보통은 선형으로 저장됩니다. (배열, 링크드리스트처럼) + - [ ] [힙(Heap)](https://en.wikipedia.org/wiki/Heap_(data_structure)) + - [ ] [소개 (영상)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) + - [ ] [Naive한 구현들 (영상)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) + - [ ] [이진 트리 (영상)](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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) - - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) - - [ ] Implement a max-heap: + - [ ] [기본 연산들 (영상)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) + - [ ] [완전 이진 트리 (영상)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) + - [ ] [의사 코드(Pseudocode) (영상)](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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [선형 시간에 힙 만들기 (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] 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). + - [ ] sift_up - `insert` 하려면 필요 + - [ ] get_max - 최대 원소를 반환하되, 삭제는 하지 않는다. + - [ ] get_size() - 저장된 원소들의 개수를 반환 + - [ ] is_empty() - 힙에 원소를 하나도 없는 지 반환 + - [ ] extract_max - 최대 원소를 반환하고, 그걸 삭제한다. + - [ ] sift_down - `extract_max` 하려면 필요하다 + - [ ] remove(x) - x번째 원소를 삭제 + - [ ] heapify - 배열에 있는 원소들로 힙을 만든다. `heap_sort` 하려면 필요 + - [ ] heap_sort() - 정렬되지 않은 배열을 받아서 정렬된 배열로 만든다. 추가 메모리 없이 제자리에서 max-heap을 사용한다. + - 노트: min-heap을 사용하면 연산을 줄일 수 있지만, 공간이 두 배로 필요합니다. (제자리에서 못 하기 때문에)
-## Sorting +## 정렬
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/) + - 정렬들 구현 & 각 정렬의 최적의 경우/최악의 경우, 평균적인 복잡도를 알기: + - 버블 소트 쓰지 마세요 - 끔찍하니까요 - n이 16이하 제외하고 O(n^2) + - [ ] 정렬 알고리즘들의 안정성 ("퀵소트는 안정적인가?") + - [정렬 알고리즘의 안정성](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) + - [정렬 알고리즘들의 안정성](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. +- 힙소트의 경우, 위의 힙 데이터 구조를 보세요. 힙 정렬은 훌륭하지만 안정적이지 못합니다. - [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) @@ -874,31 +876,31 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) -- [ ] [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) +- [ ] [Bubble Sort (영상)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [Analyzing Bubble Sort (영상)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [삽입 정렬과 병합 정렬 (영상)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [삽입 (영상)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [병합 정렬 (영상)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [퀵 정렬 (영상)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [선택 정렬 (영상)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) -- [ ] Merge sort code: +- [ ] 병합 정렬 코드: - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) -- [ ] Quick sort code: - - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) - - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) - - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) +- [ ] 퀵 정렬 코드: + - [ ] [구현 (C언어)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [구현 (C언어)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [구현 (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) -- [ ] 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) + - 힙 정렬의 경우, 위의 힙 데이터 구조를 보세요. -- [ ] Not required, but I recommended them: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) +- [ ] 필요한 건 아니지만, 아래도 추천합니다: + - [ ] [Sedgewick - 기수 정렬(Radix Sorts) (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) @@ -911,8 +913,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [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) -As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). -If you need more detail on this subject, see "Sorting" section in [몇몇 주제에 대한 세부사항](#몇몇-주제에-대한-세부사항) +개략적으로 보자면, 여기에 시각적으로 나타낸 [15가지 정렬 알고리즘들](https://www.youtube.com/watch?v=kPRA0W1kECg)을 보세요. +이 주제에 대해서 더 자세히 알고 싶다면, [몇몇 주제에 대한 세부사항](#몇몇-주제에-대한-세부사항)에서 "정렬" 섹션를 보세요.
@@ -963,22 +965,22 @@ If you need more detail on this subject, see "Sorting" section in [몇몇 주제 - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - 내가 구현할 것: - - [ ] 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 with 인접 리스트 (재귀) + - [ ] DFS with 인접 리스트 (스택을 쓴 비재귀) + - [ ] DFS with 인접 행렬 (재귀) + - [ ] DFS with 인접 행렬 (스택을 쓴 비재귀) + - [ ] BFS with 인접 리스트 + - [ ] BFS with 인접 행렬 + - [ ] 단일 출발지 최단 경로 (다익스트라) + - [ ] 최소 신장 트리 (MST;minimum spanning tree) + - DFS-기반 알고리즘들 (위의 Aduni 영상들을 보세요): + - [ ] 사이클 검사/확인 (위상 정렬할 때 필요합니다. 시작하기 전에 검사해야 하거든요.) + - [ ] 위상 정렬 + - [ ] 그래프 내의 연결 요소(Connected Component)들 개수 + - [ ] 강연결요소(SCC;Strongly Connected Component)들 나열하기 + - [ ] 이분 그래프 확인하기 -Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그래프 실습을 할 수 있다. +Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그래프 실습을 할 수 있습니다. @@ -993,23 +995,24 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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 + - 재귀는 언제 사용해야 하는 지 - 꼬리 재귀를 사용하는 게 그렇지 않은 것보다 얼마나 나은가요? - [ ] [꼬리 재귀가 무엇이고 왜 그게 좋지 않은지에 대하여](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) - [ ] [꼬리 재귀 (영상)](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. +- ### Dynamic Programming + - 이 주제는 아주 어렵습니다. DP로 풀리는 각 문제마다 어떤 점화식을 정의해야 하는데 그게 까다롭습니다. + - 얽혀있는 패턴들을 확실히 이해할 때까지, 많은 DP 예시 문제들을 찾아보기를 권합니다. - [ ] 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씨의 영상들은 따라가기 힘듭니다. 가끔 화이트보드를 사용하시는 데 너무 작아서 보기가 힘들거든요. + - [ ] [Skiena: CSE373 2012 - Lecture 19 - 동적 프로그래밍 소개 (영상)](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) + - [ ] [Skiena: CSE373 2012 - Lecture 21 - 동적 프로그래밍 예제들 (영상)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena: CSE373 2012 - Lecture 22 - 동적 프로그래밍의 활용 (영상)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Simonson: Dynamic Programming 0 (59:18부터 시작) (영상)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson: Dynamic Programming I - Lecture 11 (영상)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: Dynamic programming II - Lecture 12 (영상)](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: @@ -1025,24 +1028,24 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - ### Object-Oriented Programming - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] Object-Oriented Software Engineering: Software Dev Using UML and Java (21 videos): + - [ ] 객체 지향 소프트웨어 공학: UML과 JAVA를 사용한 소프트웨어 개발 (21개의 영상): - 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 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) + - [더 알아보기](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) + - [더 알아보기](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) + - [더 알아보기](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) + - [더 알아보기](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) + - [더 알아보기](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) - ### Design patterns - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) From 2619d23408bb8de5edbc69f2aa6847e5361cded6 Mon Sep 17 00:00:00 2001 From: John Washam Date: Sun, 16 Dec 2018 13:18:40 -0800 Subject: [PATCH 092/263] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39bdc67..247bdab 100644 --- a/README.md +++ b/README.md @@ -295,7 +295,7 @@ This is a shorter list than what I used. This is abbreviated to save you time. ### Interview Prep -- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) +- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4nd Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - answers in C++ and Java - this is a good warm-up for Cracking the Coding Interview - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) From 0423ffc144f32f1bfe989099b3ad25ef0780577d Mon Sep 17 00:00:00 2001 From: John Washam Date: Sun, 16 Dec 2018 13:52:46 -0800 Subject: [PATCH 093/263] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 247bdab..0836368 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ This is my multi-month study plan for going from web developer (self-taught, no CS degree) to software engineer for a large company. -![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) This is meant for **new software engineers** or those switching from software/web development to software engineering (where computer science knowledge is required). If you have @@ -1454,7 +1454,7 @@ No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. -![my sofa whiteboard](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) +![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) Supplemental: From cc09ce4b16fb18772d62478792a89892112fa71c Mon Sep 17 00:00:00 2001 From: John Washam Date: Thu, 27 Dec 2018 20:46:05 -0800 Subject: [PATCH 094/263] Removes broken link. --- programming-language-resources.md | 1 - 1 file changed, 1 deletion(-) diff --git a/programming-language-resources.md b/programming-language-resources.md index 5d092e5..1037a64 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -35,7 +35,6 @@ - [Python Cheat Sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/python-cheat-sheet-v1.pdf) - [Python in One Video](https://www.youtube.com/watch?v=N4mEzFDjqtA) - [Series on 3.4 (video)](https://www.youtube.com/playlist?list=PL6gx4Cwl9DGAcbMi1sH6oAMk4JHw91mC_) - - [Zero to Hero (video)](https://www.youtube.com/watch?v=TV9tSHFAFjg) - [Statistics for Hackers (video)](https://www.youtube.com/watch?v=Iq9DzN6mvYA) - [Faster Python (video)](https://www.youtube.com/watch?v=JDSGVvMwNM8) - [CPython Walk (video)](https://www.youtube.com/watch?v=LhadeL7_EIU&list=PLzV58Zm8FuBL6OAv1Yu6AwXZrnsFbbR0S&index=6) From e5df9b18007ec650b124464197a78058c174a5a8 Mon Sep 17 00:00:00 2001 From: amanjakhetiya7 Date: Sun, 30 Dec 2018 00:32:18 +0530 Subject: [PATCH 095/263] added a video link to ##Don'feel you aren't smart enough --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0836368..2cacaf0 100644 --- a/README.md +++ b/README.md @@ -233,6 +233,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) - [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) - [Believe you can change](http://www.aaronsw.com/weblog/dweck) +- [Think you're not smart enough to work at Google? Well, think again](https://www.youtube.com/watch?v=uPOJ1PR50ag) ## About Video Resources From e1cb1f641fb439509ae4fccea51a7e39094b6b2d Mon Sep 17 00:00:00 2001 From: Zeeshan Ahmad Date: Sat, 12 Jan 2019 22:34:47 +0400 Subject: [PATCH 096/263] Fix urls and update repo name --- programming-language-resources.md | 8 +++---- translations/README-ar.md | 38 +++++++++++++++---------------- translations/README-cn.md | 14 ++++++------ translations/README-fr.md | 18 +++++++-------- translations/README-he.md | 12 +++++----- translations/README-hi.md | 4 ++-- translations/README-id.md | 12 +++++----- translations/README-ko.md | 36 ++++++++++++++--------------- translations/README-pl.md | 36 ++++++++++++++--------------- translations/README-ptbr.md | 4 ++-- translations/README-uk.md | 4 ++-- translations/README-vi.md | 2 +- 12 files changed, 94 insertions(+), 94 deletions(-) diff --git a/programming-language-resources.md b/programming-language-resources.md index 1037a64..2ee8e58 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -1,7 +1,7 @@ ## Programming Language Resources - C - - [ANSI C Cheat Sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/C%20Reference%20Card%20(ANSI)%202.2.pdf) + - [ANSI C Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/C%20Reference%20Card%20(ANSI)%202.2.pdf) - K&R C book (ANSI C) - [Make, Clang (video)](https://www.youtube.com/watch?v=U3zCxnj2w8M) - GDB: @@ -11,8 +11,8 @@ - [Let us C](https://books.google.co.in/books/about/Let_Us_C.html?id=7HrjAAAACAAJ) - C++ - - [C++ Cheat Sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/Cpp_reference.pdf) - - [STL Cheat Sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/STL%20Quick%20Reference%201.29.pdf) + - [C++ Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/Cpp_reference.pdf) + - [STL Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/STL%20Quick%20Reference%201.29.pdf) - basics - pointers - functions @@ -32,7 +32,7 @@ - [Let us C++](https://books.google.co.in/books/about/Let_Us_C++.html?id=6HrjAAAACAAJ) - Python - - [Python Cheat Sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/python-cheat-sheet-v1.pdf) + - [Python Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/python-cheat-sheet-v1.pdf) - [Python in One Video](https://www.youtube.com/watch?v=N4mEzFDjqtA) - [Series on 3.4 (video)](https://www.youtube.com/playlist?list=PL6gx4Cwl9DGAcbMi1sH6oAMk4JHw91mC_) - [Statistics for Hackers (video)](https://www.youtube.com/watch?v=Iq9DzN6mvYA) diff --git a/translations/README-ar.md b/translations/README-ar.md index 37dd36b..357b36e 100644 --- a/translations/README-ar.md +++ b/translations/README-ar.md @@ -3,19 +3,19 @@ الترجمه: - [中文版本](translations/README-cn.md) - الترجمات تحت الاعداد: - - [Español](https://github.com/jwasham/google-interview-university/issues/80) - - [हिन्दी](https://github.com/jwasham/google-interview-university/issues/81) - - [עברית](https://github.com/jwasham/google-interview-university/issues/82) - - [Bahasa Indonesia](https://github.com/jwasham/google-interview-university/issues/101) - - [Arabic](https://github.com/jwasham/google-interview-university/issues/98) - - [Vietnamese](https://github.com/jwasham/google-interview-university/issues/92) - - [Turkish](https://github.com/jwasham/google-interview-university/issues/90) - - [French](https://github.com/jwasham/google-interview-university/issues/89) - - [Russian](https://github.com/jwasham/google-interview-university/issues/87) - - [Ukrainian](https://github.com/jwasham/google-interview-university/issues/106) - - [Brazilian Portuguese](https://github.com/jwasham/google-interview-university/issues/113) - - [Korean](https://github.com/jwasham/google-interview-university/issues/118) - - [Polish](https://github.com/jwasham/google-interview-university/issues/122) + - [Español](https://github.com/jwasham/coding-interview-university/issues/80) + - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) + - [עברית](https://github.com/jwasham/coding-interview-university/issues/82) + - [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) + - [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) + - [Vietnamese](https://github.com/jwasham/coding-interview-university/issues/92) + - [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) + - [French](https://github.com/jwasham/coding-interview-university/issues/89) + - [Russian](https://github.com/jwasham/coding-interview-university/issues/87) + - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) + - [Brazilian Portuguese](https://github.com/jwasham/coding-interview-university/issues/113) + - [Korean](https://github.com/jwasham/coding-interview-university/issues/118) + - [Polish](https://github.com/jwasham/coding-interview-university/issues/122) ## ماهذا؟ هي خطة من عدة أشهر من مطور تطبيقات ويب (قائمة على التعليم الذاتي، ومبدون درجة علمية في علوم الحاسب) لمنصب مهندس برمجيات بجوجل @@ -179,7 +179,7 @@ `git checkout -b progress` -`git remote add jwasham https://github.com/jwasham/google-interview-university` +`git remote add jwasham https://github.com/jwasham/coding-interview-university` `git fetch --all` @@ -197,9 +197,9 @@ ## الدخول في مزاج جوجلي -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. +Print out a "[future Googler](https://github.com/jwasham/coding-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) +[![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/coding-interview-university/blob/master/extras/future-googler.pdf) ## هل حصلت على الوظيفة بجوجل؟ @@ -224,7 +224,7 @@ I'm on the journey, too. Follow along: - لينكدإن: [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) +![John Washam - Coding Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) ## هل تشعر أنك لست بالذكاء الكافي - مهندسوا جوجل أذكياء، وربما لديهم عدم الأمان لأنهم ليسوا بالذكاء الكافي، حتى وهي في جوجل @@ -717,7 +717,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - 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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: @@ -1292,7 +1292,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - 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) + - [cheat sheet](https://github.com/jwasham/coding-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 diff --git a/translations/README-cn.md b/translations/README-cn.md index 73521ab..257824c 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -1,6 +1,6 @@ -# [译] Google Interview University 一套完整的学习手册帮助自己准备 Google 的面试 +# [译] Coding Interview University 一套完整的学习手册帮助自己准备 Google 的面试 -> * 原文地址:[Google Interview University](https://github.com/jwasham/google-interview-university) +> * 原文地址:[Coding Interview University](https://github.com/jwasham/coding-interview-university) * 原文作者:[John Washam](https://github.com/jwasham) * 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner) * 译者:[aleen42](https://github.com/aleen42),[Newton](https://github.com/Newt0n),[bobmayuze](https://github.com/bobmayuze),[Jaeger](https://github.com/laobie),[sqrthree](https://github.com/sqrthree) @@ -133,9 +133,9 @@ ## 拥有一名 Googler 的心态 -把一个(或两个)印有“[future Googler](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)”的图案打印出来,并用你誓要成功的眼神盯着它。 +把一个(或两个)印有“[future Googler](https://github.com/jwasham/coding-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) +[![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/coding-interview-university/blob/master/extras/future-googler.pdf) ## 我得到了工作吗? @@ -156,7 +156,7 @@ - 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) +![John Washam - Coding Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) ## 不要妄自菲薄 @@ -480,7 +480,7 @@ - 迭代式二分查找 - ### 按位运算(Bitwise operations) - - [ ] [Bits 速查表](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) + - [ ] [Bits 速查表](https://github.com/jwasham/coding-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)) @@ -1021,7 +1021,7 @@ - 更多内容可以查看视频部分的『大规模数据挖掘』视频系列。 - [ ] 系统设计问题练习:下面有一些指导原则,每一个都有相关文档以及在现实中该如何处理。 - 复习: [HiredInTech 的系统设计](http://www.hiredintech.com/system-design/) - - [cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) + - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) - 流程: 1. 理解问题和范围: - 在面试官的帮助下定义用例 diff --git a/translations/README-fr.md b/translations/README-fr.md index 219cefa..f21e43b 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -1,9 +1,9 @@ -# Google Interview University +# Coding Interview University Translations: - [中文版本](README-cn.md) -- [Español (in progress)](README-es.md) [Issue #80](https://github.com/jwasham/google-interview-university/issues/80) -- मानक हिन्दी (in progress) [Issue #81](https://github.com/jwasham/google-interview-university/issues/81) +- [Español (in progress)](README-es.md) [Issue #80](https://github.com/jwasham/coding-interview-university/issues/80) +- मानक हिन्दी (in progress) [Issue #81](https://github.com/jwasham/coding-interview-university/issues/81) ## C'est quoi? @@ -178,7 +178,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr `git checkout -b progress` -`git remote add jwasham https://github.com/jwasham/google-interview-university` +`git remote add jwasham https://github.com/jwasham/coding-interview-university` `git fetch --all` @@ -196,9 +196,9 @@ I'm using Github's special markdown flavor, including tasks lists to check progr ## 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. +Print out a "[future Googler](https://github.com/jwasham/coding-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) +[![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/coding-interview-university/blob/master/extras/future-googler.pdf) ## Did I Get the Job? @@ -218,7 +218,7 @@ I'm on the journey, too. Follow along: - 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) +![John Washam - Coding 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. @@ -703,7 +703,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - 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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: @@ -1248,7 +1248,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - 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) + - [cheat sheet](https://github.com/jwasham/coding-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 diff --git a/translations/README-he.md b/translations/README-he.md index d4192f5..067b904 100644 --- a/translations/README-he.md +++ b/translations/README-he.md @@ -172,7 +172,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr `git checkout -b progress` -`git remote add jwasham https://github.com/jwasham/google-interview-university` +`git remote add jwasham https://github.com/jwasham/coding-interview-university` `git fetch --all` @@ -190,9 +190,9 @@ I'm using Github's special markdown flavor, including tasks lists to check progr ## 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. +Print out a "[future Googler](https://github.com/jwasham/coding-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) +[![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/coding-interview-university/blob/master/extras/future-googler.pdf) ## האם קיבלתי את העבודה? @@ -212,7 +212,7 @@ Print out a "[future Googler](https://github.com/jwasham/google-interview-univer - גוגל+: [+Googleyasheck](https://plus.google.com/+Googleyasheck) - לינקדאין: [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) +![John Washam - Coding Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) ## אל תרדגישו שאתם לא חכמים מספיק - Google engineers are smart, but many have an insecurity that they aren't smart enough, even though they work at Google. @@ -697,7 +697,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - 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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: @@ -1242,7 +1242,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - 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) + - [cheat sheet](https://github.com/jwasham/coding-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 diff --git a/translations/README-hi.md b/translations/README-hi.md index 33ae4c9..8e27ef1 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -549,7 +549,7 @@ memory" का एरर न दे, और तब मुजे कोई वै - 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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: @@ -1123,7 +1123,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - 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) + - [cheat sheet](https://github.com/jwasham/coding-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 diff --git a/translations/README-id.md b/translations/README-id.md index c1e4f51..e4e2b24 100644 --- a/translations/README-id.md +++ b/translations/README-id.md @@ -1,4 +1,4 @@ -# Google Interview University +# Coding Interview University Version original: [Bahasa Inggris](README.md) @@ -165,7 +165,7 @@ Saya menggunakan markdown spesial dari Github, termasuk daftar tugas untuk menge `git checkout -b progress` -`git remote add jwasham https://github.com/jwasham/google-interview-university` +`git remote add jwasham https://github.com/jwasham/coding-interview-university` `git fetch --all` @@ -183,9 +183,9 @@ Saya menggunakan markdown spesial dari Github, termasuk daftar tugas untuk menge ## Masuk ke Mode Googley -Print satu atau beberapa foto dari "[future Googler](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)" (untuk ditempel tentunya) sebagai reminder anda apa hasil usaha yang anda akan dapatkan. +Print satu atau beberapa foto dari "[future Googler](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)" (untuk ditempel tentunya) sebagai reminder anda apa hasil usaha yang anda akan dapatkan. -[![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) +[![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/coding-interview-university/blob/master/extras/future-googler.pdf) ## Jangan merasa anda kurang pintar - Para engineers/programmer di google adalah orang-orang pintar, tapi banyak dari mereka berpikir bahwa mereka tidak cukup pintar, walaupun mereka bekerja di Google. @@ -669,7 +669,7 @@ Menulis kode pada papan tulis atau kertas, bukan komputer. Uji dengan beberapa s - 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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: @@ -1219,7 +1219,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - 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) + - [cheat sheet](https://github.com/jwasham/coding-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 diff --git a/translations/README-ko.md b/translations/README-ko.md index e67251d..7f15b43 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -13,18 +13,18 @@ 번역: - [중국어](translations/README-cn.md) - 진행 중인 번역: - - [스페인어](https://github.com/jwasham/google-interview-university/issues/80) - - [힌디어](https://github.com/jwasham/google-interview-university/issues/81) - - [히브리어](https://github.com/jwasham/google-interview-university/issues/82) - - [바하사 인도네시아어](https://github.com/jwasham/google-interview-university/issues/101) - - [아랍어](https://github.com/jwasham/google-interview-university/issues/98) - - [베트남어](https://github.com/jwasham/google-interview-university/issues/92) - - [터키어](https://github.com/jwasham/google-interview-university/issues/90) - - [프랑스어](https://github.com/jwasham/google-interview-university/issues/89) - - [러시아어](https://github.com/jwasham/google-interview-university/issues/87) - - [우크라이나어](https://github.com/jwasham/google-interview-university/issues/106) - - [브라질 포르투갈어](https://github.com/jwasham/google-interview-university/issues/113) - - [한국어](https://github.com/jwasham/google-interview-university/issues/118) + - [스페인어](https://github.com/jwasham/coding-interview-university/issues/80) + - [힌디어](https://github.com/jwasham/coding-interview-university/issues/81) + - [히브리어](https://github.com/jwasham/coding-interview-university/issues/82) + - [바하사 인도네시아어](https://github.com/jwasham/coding-interview-university/issues/101) + - [아랍어](https://github.com/jwasham/coding-interview-university/issues/98) + - [베트남어](https://github.com/jwasham/coding-interview-university/issues/92) + - [터키어](https://github.com/jwasham/coding-interview-university/issues/90) + - [프랑스어](https://github.com/jwasham/coding-interview-university/issues/89) + - [러시아어](https://github.com/jwasham/coding-interview-university/issues/87) + - [우크라이나어](https://github.com/jwasham/coding-interview-university/issues/106) + - [브라질 포르투갈어](https://github.com/jwasham/coding-interview-university/issues/113) + - [한국어](https://github.com/jwasham/coding-interview-university/issues/118) ## 코딩 인터뷰 대학이란? @@ -194,7 +194,7 @@ `git checkout -b progress` -`git remote add jwasham https://github.com/jwasham/google-interview-university` +`git remote add jwasham https://github.com/jwasham/coding-interview-university` `git fetch --all` @@ -212,10 +212,10 @@ ## 구글 분위기 내기 -"[미래의 구글러](https://github.com/jwasham/google-interview-university/blob/master/extras/future-googler.pdf)"를 인쇄하고 +"[미래의 구글러](https://github.com/jwasham/coding-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) +[![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/coding-interview-university/blob/master/extras/future-googler.pdf) ## Did I Get the Job? @@ -235,7 +235,7 @@ I'm in the queue right now. Hope to interview soon. - 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) +![John Washam - Coding Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) ## 당신은 충분히 똑똑합니다 @@ -747,7 +747,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - 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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: @@ -1323,7 +1323,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - 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) + - [cheat sheet](https://github.com/jwasham/coding-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 diff --git a/translations/README-pl.md b/translations/README-pl.md index d65d90c..604b620 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -1,6 +1,6 @@ -# Google Interview University - Uniwersytet przygotowujący do rozmowy kwalifikacyjnej w Google +# Coding Interview University - Uniwersytet przygotowujący do rozmowy kwalifikacyjnej w Google -Oryginał (angielski): https://github.com/jwasham/google-interview-university +Oryginał (angielski): https://github.com/jwasham/coding-interview-university >**Pierwotnie, to była mała lista rzeczy do nauki, ale urosła ona do dużych rozmiarów, jak to można dzisiaj zobaczyć. Praca w Google była główną motywacją, stąd nazwa. [Nie dostałem się do Google'a](https://googleyasheck.com/i-didnt-get-hired-heres-why/), @@ -12,19 +12,19 @@ wliczając w to gigantów: Amazon, Microsoft, Google i Facebook.** Tłumaczenia: - [中文版本](translations/README-cn.md) - Niekompletne tłumaczenia: - - [Español](https://github.com/jwasham/google-interview-university/issues/80) - - [हिन्दी](https://github.com/jwasham/google-interview-university/issues/81) - - [עברית](https://github.com/jwasham/google-interview-university/issues/82) - - [Bahasa Indonesia](https://github.com/jwasham/google-interview-university/issues/101) - - [Arabic](https://github.com/jwasham/google-interview-university/issues/98) - - [Vietnamese](https://github.com/jwasham/google-interview-university/issues/92) - - [Turkish](https://github.com/jwasham/google-interview-university/issues/90) - - [French](https://github.com/jwasham/google-interview-university/issues/89) - - [Russian](https://github.com/jwasham/google-interview-university/issues/87) - - [Ukrainian](https://github.com/jwasham/google-interview-university/issues/106) - - [Brazilian Portuguese](https://github.com/jwasham/google-interview-university/issues/113) - - [Korean](https://github.com/jwasham/google-interview-university/issues/118) - - [Polish](https://github.com/jwasham/google-interview-university/issues/122) + - [Español](https://github.com/jwasham/coding-interview-university/issues/80) + - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) + - [עברית](https://github.com/jwasham/coding-interview-university/issues/82) + - [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) + - [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) + - [Vietnamese](https://github.com/jwasham/coding-interview-university/issues/92) + - [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) + - [French](https://github.com/jwasham/coding-interview-university/issues/89) + - [Russian](https://github.com/jwasham/coding-interview-university/issues/87) + - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) + - [Brazilian Portuguese](https://github.com/jwasham/coding-interview-university/issues/113) + - [Korean](https://github.com/jwasham/coding-interview-university/issues/118) + - [Polish](https://github.com/jwasham/coding-interview-university/issues/122) ## Co to jest? Jest to mój wielomiesięczny program nauczania mający na celu awans z poziomu web developera (samouka, bez studiów informatycznych) @@ -192,7 +192,7 @@ Używam specjalniej, GitHubowej odmiany markdowna. `git checkout -b progress` -`git remote add jwasham https://github.com/jwasham/google-interview-university` +`git remote add jwasham https://github.com/jwasham/coding-interview-university` `git fetch --all` @@ -655,7 +655,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - 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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: @@ -1233,7 +1233,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - 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) + - [cheat sheet](https://github.com/jwasham/coding-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 diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index c69a7b5..03c11d3 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -14,7 +14,7 @@ - [Acompanhe o progresso da tradução aqui!](https://github.com/jwasham/coding-interview-university/pull/115) -**Tradutores**: [Marlon Aviz](https://github.com/avizmarlon) ([Contribuições](https://github.com/avizmarlon/google-interview-university/commits/ptbr-translation/translations/README-ptbr.md?author=avizmarlon)), [marceloogeda](https://github.com/marceloogeda) ([Contribuições](https://github.com/avizmarlon/google-interview-university/commits/ptbr-translation/translations/README-ptbr.md?author=marceloogeda)), [laris151](https://github.com/laris151) ([Contribuições](https://github.com/avizmarlon/google-interview-university/commits/ptbr-translation/translations/README-ptbr.md?author=laris151)) +**Tradutores**: [Marlon Aviz](https://github.com/avizmarlon) ([Contribuições](https://github.com/avizmarlon/coding-interview-university/commits/ptbr-translation/translations/README-ptbr.md?author=avizmarlon)), [marceloogeda](https://github.com/marceloogeda) ([Contribuições](https://github.com/avizmarlon/coding-interview-university/commits/ptbr-translation/translations/README-ptbr.md?author=marceloogeda)), [laris151](https://github.com/laris151) ([Contribuições](https://github.com/avizmarlon/coding-interview-university/commits/ptbr-translation/translations/README-ptbr.md?author=laris151)) Traduções: - [中文版本](translations/README-cn.md) @@ -650,7 +650,7 @@ Escreva código em um quadro branco ou papel, não em um computador. Teste com u - busca binária usando recursividade - ### Lógica binária - - [ ] [Bits cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) (Folha de consultas sobre Bits) - você deve conhecer várias das potências de 2 de (2^1 até 2^16 e 2^32) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) (Folha de consultas sobre Bits) - você deve conhecer várias das potências de 2 de (2^1 até 2^16 e 2^32) - [ ] Consiga um bom entendimento sobre manipulação de bits com: &, |, ^, ~, >>, << - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) (palavras) - [ ] Boa introdução: diff --git a/translations/README-uk.md b/translations/README-uk.md index 9f65299..97e58a9 100644 --- a/translations/README-uk.md +++ b/translations/README-uk.md @@ -1,4 +1,4 @@ -# Google Interview University +# Coding Interview University Original: [англійською](README.md) @@ -171,7 +171,7 @@ Original: [англійською](README.md) `git checkout -b progress` -`git remote add jwasham https://github.com/jwasham/google-interview-university` +`git remote add jwasham https://github.com/jwasham/coding-interview-university` `git fetch --all` diff --git a/translations/README-vi.md b/translations/README-vi.md index cc4ed15..9cc1d04 100644 --- a/translations/README-vi.md +++ b/translations/README-vi.md @@ -197,7 +197,7 @@ Ok, bây giờ bạn có thể bắt đầu: - Fork repo này. - Clone bản fork của bạn về máy tính cá nhân. ``` - git clone https://github.com//google-interview-university + git clone https://github.com//coding-interview-university ``` - Chạy các dòng lệnh sau - Tạo một branch mới để đánh dấu tiến độ của bạn: From 240a2863d12972722031d6cd5958cf6aa4fe92bd Mon Sep 17 00:00:00 2001 From: Kerollos Magdy Date: Wed, 16 Jan 2019 22:18:59 +0200 Subject: [PATCH 097/263] fix redundant parentheses removed redundant parentheses in graphs MIT DFS video --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2cacaf0..af81ff1 100644 --- a/README.md +++ b/README.md @@ -937,7 +937,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] MIT(videos): - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - - [ ] [Depth-First Search]((https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) - [ ] Skiena Lectures - great intro: - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) From 8b86340901c1aee517a98eaae15164dc7a29d90a Mon Sep 17 00:00:00 2001 From: akashgiricse Date: Wed, 16 Jan 2019 09:53:20 +0530 Subject: [PATCH 098/263] Fix coursera link --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2cacaf0..6d765d9 100644 --- a/README.md +++ b/README.md @@ -561,12 +561,12 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [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) +- [ ] [Orders of Growth (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) +- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) - [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) - [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_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) +- [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) - [ ] TopCoder (includes recurrence relations and master theorem): - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) From 1ea8ec8620fe54459c899e602740490855756be1 Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 26 Jan 2019 15:55:32 -0800 Subject: [PATCH 099/263] Added link to old article about why I studied. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e03fba5..09cfff9 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ > I originally created this as a short to-do list of study topics for becoming a software engineer, > but it grew to the large list you see today. After going through this study plan, [I got hired > as a Software Development Engineer at Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! -> You probably won't have to study as much as I did. Anyway, everything you need is here. +> You probably won't have to study as much as I did. Anyway, everything you need is here. This was my story: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) > > The items listed here will prepare you well for an interview at just about any software company, > including the giants: Amazon, Facebook, Google or Microsoft. From 74f55943b11bfb48936c2a0cbc958fd01f55f1de Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 26 Jan 2019 16:24:36 -0800 Subject: [PATCH 100/263] Cleaning up the project. --- README.md | 106 ++++++++++++++++++++++++------------------------------ 1 file changed, 46 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index 09cfff9..319d0b6 100644 --- a/README.md +++ b/README.md @@ -111,10 +111,8 @@ If you want to be a reliability engineer or operations engineer, study more from - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms) - [Caches](#caches) - [Processes and Threads](#processes-and-threads) - - [Papers](#papers) - [Testing](#testing) - [Scheduling](#scheduling) - - [Implement system routines](#implement-system-routines) - [String searching & manipulations](#string-searching--manipulations) - [Tries](#tries) - [Floating Point Numbers](#floating-point-numbers) @@ -175,6 +173,7 @@ If you want to be a reliability engineer or operations engineer, study more from - [Geometry, Convex hull](#geometry-convex-hull-videos) - [Discrete math](#discrete-math) - [Machine Learning](#machine-learning) +- [Papers](#papers) - [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - [Video Series](#video-series) - [Computer Science Courses](#computer-science-courses) @@ -306,6 +305,8 @@ This is a shorter list than what I used. This is abbreviated to save you time.
If you have tons of extra time: +Choose one: + - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - [ ] Elements of Programming Interviews (Java version) - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) @@ -334,17 +335,12 @@ This is a shorter list than what I used. This is abbreviated to save you time.
-
-If you have more time (I want this book): - -- [ ] [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - - For a richer, more up-to-date (2017), but longer treatment - -
### Language Specific -**You need to choose a language for the interview (see above).** Here are my recommendations by language. I don't have resources for all languages. I welcome additions. +**You need to choose a language for the interview (see above).** + +Here are my recommendations by language. I don't have resources for all languages. I welcome additions. If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. **You can skip all the video lectures in this project**, unless you'd like a review. @@ -430,14 +426,13 @@ OR: - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - aka CLR, sometimes CLRS, because Stein was late to the game +- [ ] [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) + - For a richer, more up-to-date (2017), but longer treatment + - [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. -- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ - - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. - - Would rather spend time on coding problems from another book or online coding problems. - ## Before you Get Started @@ -981,8 +976,6 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] 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 @@ -1002,6 +995,7 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) - ### Dynamic Programming + - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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: @@ -1154,38 +1148,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [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) -- ### 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. - - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - - [implemented in Go](https://godoc.org/github.com/thomas11/csp) - - [ ] [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? - - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) - - [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - - The Dynamo paper kicked off the NoSQL revolution - - [ ] [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) - - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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 @@ -1209,10 +1171,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - 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 - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) @@ -1282,7 +1240,8 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
System Design, Scalability, Data Handling -- **You can expect system design questions if you have 4+ years of experience.** +**You can expect system design questions if you have 4+ years of experience.** + - 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. @@ -1311,10 +1270,9 @@ 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: - - [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) +- [ ] Consensus Algorithms: + - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: @@ -1334,7 +1292,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [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/competitive-programming/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) @@ -1348,7 +1305,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [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) @@ -1357,7 +1313,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - [ ] [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) @@ -1943,6 +1898,37 @@ software engineer, and to be aware of certain technologies and algorithms, so yo 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? +- Papers + - Be selective on which papers you read and how much you read. + - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) + - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) + - [ ] [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? + - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) + - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) + - [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - The Dynamo paper kicked off the NoSQL revolution + - [ ] [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) + - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) + - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) - [ ] **Union-Find** - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) From aff0dc4d10931533912b022a3907ecac58e2a5da Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 26 Jan 2019 16:32:06 -0800 Subject: [PATCH 101/263] Cleaning up the project. --- README.md | 84 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 319d0b6..cde931d 100644 --- a/README.md +++ b/README.md @@ -175,6 +175,7 @@ If you want to be a reliability engineer or operations engineer, study more from - [Machine Learning](#machine-learning) - [Papers](#papers) - [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +- [More Books](#more-books) - [Video Series](#video-series) - [Computer Science Courses](#computer-science-courses) @@ -393,47 +394,6 @@ OR:
-### Optional Books - -**Some people recommend these, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:** - -
-Optional Books - -- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - Can rent it on kindle - - 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) - -- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - aka CLR, sometimes CLRS, because Stein was late to the game - -- [ ] [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - - For a richer, more up-to-date (2017), but longer treatment - -- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. - -
## Before you Get Started @@ -1995,6 +1955,48 @@ software engineer, and to be aware of certain technologies and algorithms, so yo +### More Books + +**Some people recommend these for interview prep, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:** + +
+More Books + +- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - Can rent it on kindle + - 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) + +- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - aka CLR, sometimes CLRS, because Stein was late to the game + +- [ ] [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) + - For a richer, more up-to-date (2017), but longer treatment + +- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. + +
+ ## Video Series Sit back and enjoy. "Netflix and skill" :P From f5c10988d26229ac55866cbac8df3bfc99cbdbcb Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 26 Jan 2019 16:41:16 -0800 Subject: [PATCH 102/263] Cleaning up the project. --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index cde931d..56834f1 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,9 @@ > I originally created this as a short to-do list of study topics for becoming a software engineer, > but it grew to the large list you see today. After going through this study plan, [I got hired > as a Software Development Engineer at Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! -> You probably won't have to study as much as I did. Anyway, everything you need is here. This was my story: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> You probably won't have to study as much as I did. Anyway, everything you need is here. +> +> I studied about 8-12 hours a day, for several months. This is my story: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) > > The items listed here will prepare you well for an interview at just about any software company, > including the giants: Amazon, Facebook, Google or Microsoft. @@ -468,7 +470,7 @@ You don't need all these. You need only [one language for the interview](#pick-o 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)) +- Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python or Java)) - 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. @@ -508,7 +510,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
Algorithmic complexity / Big-O / Asymptotic analysis -- nothing to implement +- Nothing to implement +- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review. +- 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. - [ ] [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) @@ -528,9 +532,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [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 @@ -1236,6 +1237,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: + - You don't need all of these. Just pick a few that interest you. - [ ] [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) From ae2f61f66757c2c36738a9c6db6f3bcc09a39721 Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 26 Jan 2019 16:43:39 -0800 Subject: [PATCH 103/263] Cleaning up the project. --- README.md | 89 +++++++++++++++++++++++++------------------------------ 1 file changed, 40 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index 56834f1..55e7528 100644 --- a/README.md +++ b/README.md @@ -177,7 +177,6 @@ If you want to be a reliability engineer or operations engineer, study more from - [Machine Learning](#machine-learning) - [Papers](#papers) - [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) -- [More Books](#more-books) - [Video Series](#video-series) - [Computer Science Courses](#computer-science-courses) @@ -1501,17 +1500,51 @@ You're never really done.
Additional Books -- [ ] [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) +- [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - an oldie but a goodie -- [ ] [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) +- [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - a modern option -- [ ] [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) -- [ ] [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) +- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - a gentle introduction to design patterns -- [ ] [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) +- [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - aka the "Gang Of Four" book, or GOF - the canonical design patterns book -- [ ] [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) +- [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) +- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - Can rent it on kindle + - 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) + +- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - aka CLR, sometimes CLRS, because Stein was late to the game + +- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) + - For a richer, more up-to-date (2017), but longer treatment + +- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. + +
@@ -1957,48 +1990,6 @@ software engineer, and to be aware of certain technologies and algorithms, so yo -### More Books - -**Some people recommend these for interview prep, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:** - -
-More Books - -- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - Can rent it on kindle - - 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) - -- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - aka CLR, sometimes CLRS, because Stein was late to the game - -- [ ] [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - - For a richer, more up-to-date (2017), but longer treatment - -- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. - -
- ## Video Series Sit back and enjoy. "Netflix and skill" :P From c7dae5dbcf9dfc97c8523da049c868369f1291f7 Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 26 Jan 2019 16:46:31 -0800 Subject: [PATCH 104/263] Cleaning up the project. --- README.md | 71 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 55e7528..4716eb0 100644 --- a/README.md +++ b/README.md @@ -175,10 +175,10 @@ If you want to be a reliability engineer or operations engineer, study more from - [Geometry, Convex hull](#geometry-convex-hull-videos) - [Discrete math](#discrete-math) - [Machine Learning](#machine-learning) -- [Papers](#papers) - [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - [Video Series](#video-series) - [Computer Science Courses](#computer-science-courses) +- [Papers](#papers) @@ -1893,37 +1893,6 @@ software engineer, and to be aware of certain technologies and algorithms, so yo 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? -- Papers - - Be selective on which papers you read and how much you read. - - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - - [implemented in Go](https://godoc.org/github.com/thomas11/csp) - - [ ] [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? - - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) - - [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - - The Dynamo paper kicked off the NoSQL revolution - - [ ] [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) - - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) - [ ] **Union-Find** - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) @@ -2061,12 +2030,44 @@ Sit back and enjoy. "Netflix and skill" :P ## Computer Science Courses -
-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) +## Papers + +
+Papers + +- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) +- [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) +- [ ] [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? +- [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) +- [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) +- [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - The Dynamo paper kicked off the NoSQL revolution +- [ ] [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) +- [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) +- [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) +
## LICENSE From 23c56f4350c3ace5a20424eb85d4d437637f2811 Mon Sep 17 00:00:00 2001 From: xindoo Date: Tue, 29 Jan 2019 16:42:04 +0800 Subject: [PATCH 105/263] Add the video identity for some youtube videos --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 4716eb0..92c914c 100644 --- a/README.md +++ b/README.md @@ -496,7 +496,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [answers to questions](https://github.com/lekkas/c-algorithms) - [ ] **How computers process a program:** - - [ ] [How CPU executes a program](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) @@ -718,7 +718,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - basic tree construction - traversal - manipulation algorithms - - [ ] [BFS(breadth-first search) and DFS(depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - [ ] [BFS(breadth-first search) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - BFS notes: - level order (BFS, using queue) - time complexity: O(n) @@ -984,7 +984,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - [ ] Object-Oriented Software Engineering: 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) + - [OOSE: Software Dev Using UML and Java (video)](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 Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) @@ -1159,7 +1159,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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/competitive-programming/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) + - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - ### Floating Point Numbers - [ ] 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) @@ -1180,15 +1180,15 @@ Graphs can be used to represent many problems in computer science, so this secti - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - otherwise, this is just good to know - [ ] [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) + - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) + - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) + - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) + - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) + - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) - [ ] Sockets: - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) @@ -1698,8 +1698,8 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - ### 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) + - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) From 37333b64877a310b265fdf352b2ca22735b13a02 Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 2 Feb 2019 10:58:31 -0800 Subject: [PATCH 106/263] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 92c914c..e2a1929 100644 --- a/README.md +++ b/README.md @@ -1233,6 +1233,8 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] Consensus Algorithms: - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: From ab257eb8f4a6a1c156499fa230584f6dd783c391 Mon Sep 17 00:00:00 2001 From: Christoph Bachhuber Date: Mon, 11 Feb 2019 11:26:19 +0100 Subject: [PATCH 107/263] Remove broken link to Garbage Collection-Compilers Youtube reports that this link does not exist anymore. Did not find convincing alternative, removed link. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index e2a1929..51ce653 100644 --- a/README.md +++ b/README.md @@ -1655,7 +1655,6 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - ### Garbage collection - - [ ] [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) From 7fca187a1e2c620890e3373f578281380707e4cb Mon Sep 17 00:00:00 2001 From: arora-aditya <10962267+arora-aditya@users.noreply.github.com> Date: Sat, 23 Mar 2019 15:28:40 -0400 Subject: [PATCH 108/263] fix Endian link #414 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 51ce653..87bdd52 100644 --- a/README.md +++ b/README.md @@ -889,11 +889,11 @@ Graphs can be used to represent many problems in computer science, so this secti - 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. - + - [ ] MIT(videos): - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) - + - [ ] 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) @@ -1170,7 +1170,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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 And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. From b64e17e6069e5f582230c02c46b6c4e6c6b791b2 Mon Sep 17 00:00:00 2001 From: MoazMansour Date: Mon, 1 Apr 2019 17:49:28 -0400 Subject: [PATCH 109/263] Add 2 more video resources for data structures --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 87bdd52..412a85a 100644 --- a/README.md +++ b/README.md @@ -265,6 +265,10 @@ Sometimes the classes are not in session so you have to wait a couple of months, - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. - [ ] [Python for Data Structures, Algorithms, and Interviews! (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. + - [ ] [Intro to Data Structures and Algorithms using Python! (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - A free Python centric data structures and algorithms course. + - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios.
From 049164baa2965cb9d246a13e59ee5d2783af218d Mon Sep 17 00:00:00 2001 From: Howard Hung Date: Thu, 25 Apr 2019 15:35:39 +0800 Subject: [PATCH 110/263] Update translations image link --- translations/README-ar.md | 2 +- translations/README-cn.md | 2 +- translations/README-es.md | 2 +- translations/README-fr.md | 2 +- translations/README-he.md | 2 +- translations/README-hi.md | 2 +- translations/README-id.md | 2 +- translations/README-ko.md | 2 +- translations/README-pl.md | 2 +- translations/README-ptbr.md | 2 +- translations/README-th.md | 2 +- translations/README-uk.md | 2 +- translations/README-vi.md | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/translations/README-ar.md b/translations/README-ar.md index 357b36e..1c63222 100644 --- a/translations/README-ar.md +++ b/translations/README-ar.md @@ -21,7 +21,7 @@ هي خطة من عدة أشهر من مطور تطبيقات ويب (قائمة على التعليم الذاتي، ومبدون درجة علمية في علوم الحاسب) لمنصب مهندس برمجيات بجوجل -![HBO كتابة الكود علي السبورة - من وادي السيليكون](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![HBO كتابة الكود علي السبورة - من وادي السيليكون](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) هذه القائمة الطويلة تم إعدادها من ملاحظات الإعداد لجوجل، لذلك هي الأشياء مطالب بمعرفتها. هناك أشياء إضافية أضفتها في آخر القائمة التي ربما تأتي في المقابلة الشخصية أو تساعد في حل المشاكل البرمجية. كتيرا من العناصر من: كتاب ستيف ياج "[احصل على وظيفة بجوجل](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" ومن حين لآخر ملاحظات الإعداد لجوجل. diff --git a/translations/README-cn.md b/translations/README-cn.md index 257824c..ab78b21 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -11,7 +11,7 @@ 这是我为了从 web 开发者(自学、非计算机科学学位)蜕变至 Google 软件工程师所制定的计划,其内容历时数月。 -![白板上编程 ———— 来自 HBO 频道的剧集,“硅谷”](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![白板上编程 ———— 来自 HBO 频道的剧集,“硅谷”](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) 这一长列表是从 **Google 的指导笔记** 中萃取出来并进行扩展。因此,有些事情你必须去了解一下。我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题。这些额外项大部分是来自于 Steve Yegge 的“[得到在 Google 工作的机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)”。而在 Google 指导笔记的逐字间,它们有时也会被反映出来。 diff --git a/translations/README-es.md b/translations/README-es.md index f84576d..53592d2 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -38,7 +38,7 @@ Traducciones: Este es mi plan de estudios de varios meses para pasar de ser un Desarrollador Web (Autodidacta, sin título) a un Ingeniero de Software para una gran compañía. -![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) Esto es para los **nuevos Ingenieros de Software** o aquellos que quieren cambiar del Desarrollo de Software/Web a Ingeniero de Software (Donde el conocimiento de las Ciencias de Computación es requerido). Si tiene varios años de experiencia y clama tenerlos como Ingeniero de Software, espere una entrevista más ardua. diff --git a/translations/README-fr.md b/translations/README-fr.md index f21e43b..56f1a32 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -9,7 +9,7 @@ Translations: C'est un plan d'études de plusieurs mois pour aller d'un développeur web (Autodidacte, sans diplôme en informatique) à ingénieur logiciel google. -![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) Cette longue liste a été extraite et étendue de **Google's coaching notes**, ce sont donc des choses que vous devez savoir. En bas, j'ai rajouté des unités supplémentaires qui peuvent être soulevées pendant l'entretien, ou qui peuvent être utiles pour résoudre des problèmes. Plusieurs unités proviennent de diff --git a/translations/README-he.md b/translations/README-he.md index 067b904..708a8f7 100644 --- a/translations/README-he.md +++ b/translations/README-he.md @@ -1,7 +1,7 @@ ## על מה מדובר כאן? זוהי התוכנית הפעולה אותה הגיתי על מנת להפוך בהצלחה ממפתח אתרים, ללא תואר במדעי המחשב, למהנדס תוכנה בחברת גוגל. -![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) רשימת המשימות הארוכה המצורפת להלן, הוצאה מקובץ האימון האישי אותו מפרסמת גוגל לעזור למועמדים פוטנציאליים **Google's coaching notes**. לפני שאתם מתחילים במשימה ישנם מספר דברים שעליכם לדעת. ישנם מספר דברים בתחתית הרשימה שמעוד יועילו בהכנה לראיון עצמו לאחר שצלחתם את חומר הלימוד, diff --git a/translations/README-hi.md b/translations/README-hi.md index 8e27ef1..9ca52a3 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -8,7 +8,7 @@ ## यह क्या है? यह एक बड़ी कंपनी के लिए सॉफ्टवेयर इंजीनियर को वेब डेवलपर (स्वयं सिखाया, कोई सीएस डिग्री नहीं) से जाने के लिए मेरी बहु-महीने की अध्ययन योजना है -![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) यह नए सॉफ़्टवेयर इंजीनियरों या सॉफ़्टवेयर / वेब विकास से सॉफ़्टवेयर इंजीनियरिंग (जहां कंप्यूटर साइंस ज्ञान आवश्यक है) से स्विच करने के लिए है। यदि आपके पास कई वर्षों का अनुभव है और कई वर्षों के सॉफ्टवेयर इंजीनियरिंग अनुभव का दावा कर रहे हैं, तो एक कठिन साक्षात्कार की अपेक्षा करें। diff --git a/translations/README-id.md b/translations/README-id.md index e4e2b24..9956f62 100644 --- a/translations/README-id.md +++ b/translations/README-id.md @@ -6,7 +6,7 @@ Version original: [Bahasa Inggris](README.md) Ini adalah ringkasan studi saya selama beberapa bulan dari web developer (otodidak, tanpa gelar sarjana informatika) hingga menjadi *software engineer Google*. -![Menulis kode di papan tulis - dikutip dari serial TV Silicon Valley oleh HBO](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Menulis kode di papan tulis - dikutip dari serial TV Silicon Valley oleh HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) Saya telah mengupas catatan **Google's Coaching Note** dan berikut adalah hal-hal penting dari catatan tersebut. Ada beberapa poin yang saya tambahkan pada bagian akhir yang mungkin muncul dalam wawancara atau dapat berguna dalam proses penyelesaian masalah. Banyak poin berasal dari artikel Steve Yegge "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" yang berisi poin-poin dari **Google's Coaching Note**. diff --git a/translations/README-ko.md b/translations/README-ko.md index bc8447d..973d063 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -46,7 +46,7 @@ 코딩 인터뷰 대학은 (컴퓨터공학 학위 없이 독학한) 웹 개발자에서 큰 회사의 소프트웨어 엔지니어가 되기 위한 나의 몇 달간의 공부 계획이다. -![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) 이 글은 **신입 소프트웨어 엔지니어** 혹은 소프트웨어/웹 개발에서 (컴퓨터과학 지식이 필요한) 소프트웨어 엔지니어링으로 전환자고자 하는 사람들을 위한 글입니다. 만약 당신이 여러 해의 소프트웨어 엔지니어링 경력이 있다면, 더 어려운 인터뷰가 예상된다. diff --git a/translations/README-pl.md b/translations/README-pl.md index 604b620..be5389a 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -30,7 +30,7 @@ Tłumaczenia: Jest to mój wielomiesięczny program nauczania mający na celu awans z poziomu web developera (samouka, bez studiów informatycznych) do poziomu inżyniera oprogramowania w Google. -![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) Znajdziesz tutaj wiele rzeczy związanych z Google, ale starałem się uogólnić tę listę, aby była przydatna dla każdego. diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index 03c11d3..0f0c724 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -44,7 +44,7 @@ Traduções em progresso: Esse é o meu plano de estudo mensal para ir de desenvolvedor web (autodidata, sem formação em Ciência da Computação) à engenheiro de software para uma grande empresa. -![Programando no quadro branco - do Vale do Silício da HBO](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Programando no quadro branco - do Vale do Silício da HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) Essa longa lista foi extraída e expandida a partir das **anotações de treinamento da Google**, então essas são as coisas que você precisa saber. Eu adicionei alguns itens extras no final que podem aparecer na entrevista ou serem úteis para resolver um problema. Muitos itens são da obra “[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)” (Consiga aquele trabalho na Google) de Steve Yegge's e às vezes são expressados palavra-por-palavra nas anotações de treinamento da Google. diff --git a/translations/README-th.md b/translations/README-th.md index 4b8a3f8..da47e7b 100644 --- a/translations/README-th.md +++ b/translations/README-th.md @@ -30,7 +30,7 @@ นี่เป็นแผนการศึกษาหลายเดือนของผมจากนักพัฒนาเว็บไซต์ (ด้วยการศึกษาด้วยตัวเอง โดยไม่ได้จบวิทยาการคอมพิวเตอร์) เพื่อจะเป็นวิศวกรซอฟต์แวร์ในบริษัทขนาดใหญ่ที่หลายๆ คนต้องการเข้าทำงานด้วย -![Coding at the whiteboard - from HBO's Silicon Valley](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) บทความนี้สำหรับคนที่อยากเป็น **วิศวกรซอฟต์แวร์** หรือต้องการเปลี่ยนมาจากนักพัฒนาซอฟต์แวร์หรือนักพัฒนาเว็บไซด์มาเป็นวิศวกรซอฟต์แวร์ (ผู้ซึ่งมีความรู้ความเข้าใจลึกซึ้งในหลักการของวิทยาการคอมพิวเตอร์) ถ้าคุณมีประสบการณ์หลายปีและมั่นใจในประสบการณ์การเป็นวิศวกรซอฟต์แวร์ของคุณ จะได้เจอการสัมภาษณ์ที่ยากขึ้นแน่นอน diff --git a/translations/README-uk.md b/translations/README-uk.md index 97e58a9..6bfc7dd 100644 --- a/translations/README-uk.md +++ b/translations/README-uk.md @@ -7,7 +7,7 @@ Original: [англійською](README.md) Це мій багатомісячний навчальний план для перетворення з веб-розробника (самоучки без ступеню з CS) на розробника програмного забезпечення у Google. -![Програмування у дошки — з серіалу «Silicon Valley» HBO](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Програмування у дошки — з серіалу «Silicon Valley» HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) Цей довгий список був видобутий і розширений з **тренувальних нотаток Google**, отже це речі, які ви повинні знати. Тут є додаткові пункти, які я додав знизу — вони можуть зустрітися в інтерв’ю або бути корисними у вирішенні завдань. diff --git a/translations/README-vi.md b/translations/README-vi.md index 9cc1d04..e125cef 100644 --- a/translations/README-vi.md +++ b/translations/README-vi.md @@ -33,7 +33,7 @@ Ghi chú riêng cho việc duy trì và cập nhật bản dịch tiếng Việt Đây là kế hoạch học tập trong nhiều tháng của tôi, để từ một nhà phát triển web (tự học, không có bằng cấp về Khoa Học Máy Tính - KHMT) trở thành một kỹ sư phần mềm ở Google. -![Viết code trên bảng - ảnh trích từ bộ phim Silicon Valley của HBO](https://dng5l3qzreal6.cloudfront.net/2016/Aug/coding_board_small-1470866369118.jpg) +![Viết code trên bảng - ảnh trích từ bộ phim Silicon Valley của HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) Danh sách dài này được trích và mở rộng từ **Ghi chú huấn luyện của Google**, vậy nên đây là những gì bạn cần biết. Một vài mục tôi thêm vào ở cuối danh sách có thể xuất hiện trong cuộc phỏng vấn hoặc hữu ích cho việc giải quyết các bài toán về lập trình. Nhiều mục đến từ bài viết [Lấy được việc ở Google (Get that job at Google)](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" của Steve Yegge. From d45db46187cc1ba5fe45869d30907f2a745e423f Mon Sep 17 00:00:00 2001 From: littlepoint Date: Thu, 9 May 2019 23:09:01 +0800 Subject: [PATCH 111/263] Fix syntax error --- translations/README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index ab78b21..747517b 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -198,7 +198,7 @@ - [ ] [得到在 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) + - [ ] [电话面试的问题](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) From 2bbb69378a3999b7b249a54524bbaa6ad1ac9649 Mon Sep 17 00:00:00 2001 From: littlepoint Date: Fri, 10 May 2019 16:24:16 +0800 Subject: [PATCH 112/263] Update indentation --- programming-language-resources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programming-language-resources.md b/programming-language-resources.md index 2ee8e58..682396c 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -7,7 +7,7 @@ - GDB: - [Harvard CS50 - GDB (video)](https://www.youtube.com/watch?v=USPvePv1uzE) - [Harvard CS50 - GDB (video)](https://www.youtube.com/watch?v=y5JmQItfFck) - - [Valgrind (video)](https://www.youtube.com/watch?v=fvTsFjDuag8) + - [Valgrind (video)](https://www.youtube.com/watch?v=fvTsFjDuag8) - [Let us C](https://books.google.co.in/books/about/Let_Us_C.html?id=7HrjAAAACAAJ) - C++ From edade0b8b042598d70d2327c8f4bc960c651a1d5 Mon Sep 17 00:00:00 2001 From: littlepoint Date: Fri, 10 May 2019 16:29:37 +0800 Subject: [PATCH 113/263] Remove trailing spaces and unnecessary new lines --- programming-language-resources.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/programming-language-resources.md b/programming-language-resources.md index 2ee8e58..d16ca4c 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -9,7 +9,6 @@ - [Harvard CS50 - GDB (video)](https://www.youtube.com/watch?v=y5JmQItfFck) - [Valgrind (video)](https://www.youtube.com/watch?v=fvTsFjDuag8) - [Let us C](https://books.google.co.in/books/about/Let_Us_C.html?id=7HrjAAAACAAJ) - - C++ - [C++ Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/Cpp_reference.pdf) - [STL Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/STL%20Quick%20Reference%201.29.pdf) @@ -30,7 +29,6 @@ - [Efficiency with Algorithms, Performance with Data Structures (video)](https://youtu.be/fHNmRkzxHWs) - [Review of C++ concepts (video)](https://www.youtube.com/watch?v=Rub-JsjMhWY) - [Let us C++](https://books.google.co.in/books/about/Let_Us_C++.html?id=6HrjAAAACAAJ) - - Python - [Python Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/python-cheat-sheet-v1.pdf) - [Python in One Video](https://www.youtube.com/watch?v=N4mEzFDjqtA) @@ -41,12 +39,11 @@ - [10 Tips for Pythonic Code (video)](https://www.youtube.com/watch?v=_O23jIXsshs) - [Beyond PEP 8 -- Best practices for beautiful intelligible code (video)](https://www.youtube.com/watch?v=wf-BqAjZb8M) - [Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) - - Java - [Stanford CS106A - Programming Methodology (video)](https://see.stanford.edu/Course/CS106A) - [Software Construction In Java (video)](https://www.edx.org/course/software-construction-java-mitx-6-005-1x) - [Introduction To Programming In Java](http://introcs.cs.princeton.edu/java/home/) - - [Algorithms 4th Ed - Algorithm Book In Java](http://algs4.cs.princeton.edu/home/) + - [Algorithms 4th Ed - Algorithm Book In Java](http://algs4.cs.princeton.edu/home/) - [Effective Java 3rd Edition](https://www.amazon.com/Effective-Java-Joshua-Bloch-ebook/dp/B078H61SCH) - Go - [The Go programming Language](https://golang.org/) From 0404206e16e2250b4ddb0f613669d02431b128a9 Mon Sep 17 00:00:00 2001 From: littlepoint Date: Fri, 10 May 2019 17:27:25 +0800 Subject: [PATCH 114/263] Remove trailing spaces inside codes --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 412a85a..2f0799e 100644 --- a/README.md +++ b/README.md @@ -217,13 +217,13 @@ I'm using Github's special markdown flavor, including tasks lists to check progr Mark all boxes with X after you completed your changes -`git add . ` +`git add .` -`git commit -m "Marked x" ` +`git commit -m "Marked x"` -`git rebase jwasham/master ` +`git rebase jwasham/master` -`git push --force ` +`git push --force` [More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) From f7d5099cfad6841a71afdaac2816398b2e57dc38 Mon Sep 17 00:00:00 2001 From: littlepoint Date: Fri, 10 May 2019 17:50:47 +0800 Subject: [PATCH 115/263] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 412a85a..a26a6cd 100644 --- a/README.md +++ b/README.md @@ -348,7 +348,7 @@ Choose one: Here are my recommendations by language. I don't have resources for all languages. I welcome additions. -If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. +If you read through one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. **You can skip all the video lectures in this project**, unless you'd like a review. [Additional language-specific resources here.](programming-language-resources.md) From 6083bff34026252b075f7355eacd0776c91543e5 Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 25 May 2019 19:56:00 -0700 Subject: [PATCH 116/263] Added link to article on choosing a language --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 23c383e..e136576 100644 --- a/README.md +++ b/README.md @@ -285,6 +285,8 @@ You could also use these, but read around first. There may be caveats: - JavaScript - Ruby +Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) + You need to be very comfortable in the language and be knowledgeable. Read more about choices: From 3a790e6984ec2da9e0cea3ad85458a6ce3f00164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20R=C3=AAgo?= Date: Wed, 26 Jun 2019 10:50:58 -0300 Subject: [PATCH 117/263] Remove broken garbage collector youtube link from translations files. --- translations/README-ar.md | 1 - translations/README-es.md | 1 - translations/README-fr.md | 1 - translations/README-he.md | 1 - translations/README-hi.md | 1 - translations/README-id.md | 1 - translations/README-pl.md | 1 - translations/README-ptbr.md | 1 - translations/README-th.md | 1 - translations/README-uk.md | 1 - translations/README-vi.md | 1 - 11 files changed, 11 deletions(-) diff --git a/translations/README-ar.md b/translations/README-ar.md index 1c63222..fd54d76 100644 --- a/translations/README-ar.md +++ b/translations/README-ar.md @@ -1639,7 +1639,6 @@ You're never really done. - [ ] [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) diff --git a/translations/README-es.md b/translations/README-es.md index 53592d2..0995f5b 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -1568,7 +1568,6 @@ Es probable que estos temas no aparezcan en una entrevista, pero los añadí par - [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - ### Recolección de basura - - [ ] [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) diff --git a/translations/README-fr.md b/translations/README-fr.md index 56f1a32..690cd98 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -1621,7 +1621,6 @@ You're never really done. - [ ] [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) diff --git a/translations/README-he.md b/translations/README-he.md index 708a8f7..efdec4b 100644 --- a/translations/README-he.md +++ b/translations/README-he.md @@ -1616,7 +1616,6 @@ You're never really done. - [ ] [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) diff --git a/translations/README-hi.md b/translations/README-hi.md index 9ca52a3..bd8f86d 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -960,7 +960,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th - Pages 1048 - 1140 in CLRS if you have it. - ### Garbage collection - - [ ] [Garbage collection (Java); Augmenting data str (विडियो)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25) - [ ] [Compilers (विडियो)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) - [ ] [GC in Python (विडियो)](https://www.youtube.com/watch?v=iHVs_HkjdmI) - [ ] [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits) diff --git a/translations/README-id.md b/translations/README-id.md index 9956f62..e04e3d5 100644 --- a/translations/README-id.md +++ b/translations/README-id.md @@ -1591,7 +1591,6 @@ You're never really done. - [ ] [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) diff --git a/translations/README-pl.md b/translations/README-pl.md index be5389a..a657f1e 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -1585,7 +1585,6 @@ You're never really done. - [ ] [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) diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index 0f0c724..c2c7dd3 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -1598,7 +1598,6 @@ Esses tópicos provavelmente não aparecerão em uma entrevista, mas eu adicione - [ ] [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) (Ataques Side-Channel) - ### Coleta de lixo - - [ ] [Garbage collection (Java); Augmenting data str (video)](https://www.youtube.com/watch?v=StdfeXaKGEc&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=25) (Coleta de lixo - Java) - [ ] [Compilers (video)](https://www.youtube.com/playlist?list=PLO9y7hOkmmSGTy5z6HZ-W4k2y8WXF7Bff) (Compiladores - vídeo) - [ ] [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI) (Coleta de lixo em Python - vídeo) - [ ] [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits) (Mergulhando Fundo em Java: Coleta de Lixo é Bom) diff --git a/translations/README-th.md b/translations/README-th.md index da47e7b..be3064f 100644 --- a/translations/README-th.md +++ b/translations/README-th.md @@ -1568,7 +1568,6 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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) diff --git a/translations/README-uk.md b/translations/README-uk.md index 6bfc7dd..5dc1fe7 100644 --- a/translations/README-uk.md +++ b/translations/README-uk.md @@ -1569,7 +1569,6 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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) diff --git a/translations/README-vi.md b/translations/README-vi.md index e125cef..2cbde8a 100644 --- a/translations/README-vi.md +++ b/translations/README-vi.md @@ -1605,7 +1605,6 @@ Bạn không bao giờ thực sự học xong! - ### Trình dọn rác > Trình dọn rác (garbage collection) là một tính năng của các ngôn ngữ lập trình cấp cao, trong đó hệ thông tự động thu hồi vùng nhớ của các data (biến, đối tượng) không còn được sử dụng nữa, và cấp phát chúng cho các data mới. Trước khi có tính năng này, lập trình viên phải quản lý vùng nhớ thủ công, tự xin cấp phát và tự giải phóng. - - [ ] [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) From 6f44d2933eb3a695bf5ff3c605ca5bb5b56f9286 Mon Sep 17 00:00:00 2001 From: akashgiricse Date: Sun, 30 Jun 2019 23:23:58 +0530 Subject: [PATCH 118/263] Add a link to Learning how to Learn course on Coursera --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e136576..ba919b6 100644 --- a/README.md +++ b/README.md @@ -415,7 +415,9 @@ through my notes and making flashcards so I could review. Read please so you won't make my mistakes: -[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/) +[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). + +Here is another great course on Coursera for [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn). ### 2. Use Flashcards From c3ca28cd870c0c7114fee41090e94d4f64d3cd15 Mon Sep 17 00:00:00 2001 From: rene Date: Tue, 2 Jul 2019 23:32:12 +0200 Subject: [PATCH 119/263] table of contents translated to german --- translations/README-de.md | 2084 +++++++++++++++++++++++++++++++++++++ 1 file changed, 2084 insertions(+) create mode 100644 translations/README-de.md diff --git a/translations/README-de.md b/translations/README-de.md new file mode 100644 index 0000000..6d48bd6 --- /dev/null +++ b/translations/README-de.md @@ -0,0 +1,2084 @@ +# Coding Interview University + +> I originally created this as a short to-do list of study topics for becoming a software engineer, +> but it grew to the large list you see today. After going through this study plan, [I got hired +> as a Software Development Engineer at Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> You probably won't have to study as much as I did. Anyway, everything you need is here. +> +> I studied about 8-12 hours a day, for several months. This is my story: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> +> The items listed here will prepare you well for an interview at just about any software company, +> including the giants: Amazon, Facebook, Google or Microsoft. +> +> *Best of luck to you!* + +
+Übersetzungen: + +- [中文版本](translations/README-cn.md) +- [Tiếng Việt - Vietnamese](translations/README-vi.md) +- [Español](translations/README-es.md) +- [Português Brasileiro](translations/README-ptbr.md) + +
+ +
+Übersetzungen in Bearbeitung: + +- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) +- [עברית](https://github.com/jwasham/coding-interview-university/issues/82) +- [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) +- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) +- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) +- [French](https://github.com/jwasham/coding-interview-university/issues/89) +- [Russian](https://github.com/jwasham/coding-interview-university/issues/87) +- [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) +- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) +- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) +- [Polish](https://github.com/jwasham/coding-interview-university/issues/122) +- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) +- [Thai](https://github.com/jwasham/coding-interview-university/issues/156) +- [Greek](https://github.com/jwasham/coding-interview-university/issues/166) +- [Italian](https://github.com/jwasham/coding-interview-university/issues/170) +- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) +- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257) + +
+ +## Worum es geht + +Das ist mein mehrmonatiger Lernplan um vom Web Developer (Selbststudium, kein Abschluss in Informatik) zum Software Engineer bei einer großen Firma zu wechseln. + +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) + +Dies ist gedacht für **neue Software Engineure** oder solche die von der Software/Web Entwicklung zum Software +Engineering wechseln wollen (wobei Informatikkenntnisse benötigt werden). Falls du behauptest mehrere Jahre an Erfahrung +als Software Engineer zu haben, erwartet dich ein hartes Vorstellungsgespräch. + +Falls du schon mehrere Jahre Erfahung in der Software/Webenteicklung hast, muss dir klar sein, dass große Software +Unternehmen wie Google, Amazon, Facebook oder Microsoft Software Engineering und Software Entwicklung +als unterschiedliche Dinge ansehen, und sie setzen Informatikkenntnisse voraus. + +Falls du ein Reliability Engineer oder Operations Engineer werden möchtest, solltest du dir besonders die optionale +Liste (Netzwerke, Sicherheit) ansehen. + +--- + +## Inhaltsverzeichnis + +- [Worum es geht](#what-is-it) +- [Warum solltest du das hier lesen?](#why-use-it) +- [Wie man dies hier benutzt](#how-to-use-it) +- [Glaub nicht, dass du nicht klug genug bist](#dont-feel-you-arent-smart-enough) +- [Über Video Resourcen](#about-video-resources) +- [Ablauf von Vorstellungsgesprächen und allgemeine Vorbereitung darauf](#interview-process--general-interview-prep) +- [Wähle eine Sprache für das Vorstellungsgespräch](#pick-one-language-for-the-interview) +- [Buchliste](#book-list) +- [Bevor du anfängst](#before-you-get-started) +- [Was hier nicht behandelt wird](#what-you-wont-see-covered) +- [Vorausgesetztes Wissen](#prerequisite-knowledge) +- [Der Tagesplan](#the-daily-plan) +- [Komplexitätstheorie / Big-O (Groß-O Notation) / Asymptotische Analyse](#algorithmic-complexity--big-o--asymptotic-analysis) +- [Datenstrukturen](#data-structures) + - [Arrays (Felder)](#arrays) + - [Linked Lists (verkettete Listen)](#linked-lists) + - [Stack (Stapel)](#stack) + - [Queue (Wartenschlangen)](#queue) + - [Hash table (Hashtabellen)](#hash-table) +- [Sonstiges](#more-knowledge) + - [Binärsuche](#binary-search) + - [Bitweise Operationen](#bitwise-operations) +- [Trees (Bäume)](#trees) + - [Trees - Notizen und Hintergrund](#trees---notes--background) + - [Binärer Suchbaum](#binary-search-trees-bsts) + - [Heap / Vorrangwarteschlange / Binärer Heap](#heap--priority-queue--binary-heap) + - balancierte Suchbäume (allgemeines Konzept, keine Details) + - Traversierung: preorder, inorder, postorder, Breitensuche, Tiefensuche +- [Sortierung](#sorting) + - Auswahl + - Insertion Sort + - Heap Sort + - Quick Sort + - Merge Sort +- [Graphen](#graphs) + - gerichtet + - ungerichtet + - Adjazenzmatrix + - Adjazenzliste + - Traversierung: Breitensuche, Tiefensuche +- [Sonstiges](#even-more-knowledge) + - [Rekursion](#recursion) + - [Dynamische Programmierung](#dynamic-programming) + - [Object-orientierte Programmierung](#object-oriented-programming) + - [Design Patterns (Entwurfsmuster)](#design-patterns) + - [Kombinatorik (n über k) und Wahrscheinlichkeiten](#combinatorics-n-choose-k--probability) + - [NP, NP-Vollständig und Heuristiken](#np-np-complete-and-approximation-algorithms) + - [Caches](#caches) + - [Proczsse und Threads](#processes-and-threads) + - [Testen](#testing) + - [Scheduling](#scheduling) + - [Stringsuche und -manipulationen](#string-searching--manipulations) + - [Tries (Präfixbäume)](#tries) + - [Fließkommazahlen](#floating-point-numbers) + - [Unicode](#unicode) + - [Byte-Reihenfolge](#endianness) +- [Netzwerke](#networking) +- [Systementwurf, Skalierbarkeit, Datenverarbeitung](#system-design-scalability-data-handling) (if you have 4+ years experience) +- [Abschließende Prüfung](#final-review) +- [Coding Fragen Übung](#coding-question-practice) +- [Programmieraufgaben/Wettbewerbe](#coding-exerciseschallenges) +- [Wenn das Vorstellungsgespräch bald ansteht](#once-youre-closer-to-the-interview) +- [Dein Lebenslauf](#your-resume) +- [Denk dran wenn das Vorstellungsgespräch kommt](#be-thinking-of-for-when-the-interview-comes) +- [Stell fragen an den Interviewer](#have-questions-for-the-interviewer) +- [Wenn du den Job bekommst](#once-youve-got-the-job) + +---------------- Alles unter der Linie ist optional ---------------- + +
+Additional Resources + +- [Zusätzliche Bücher](#additional-books) +- [Zusätzliches Wissen](#additional-learning) + - [Compilers (Übersetzer)](#compilers) + - [Emacs und vi(m)](#emacs-and-vim) + - [Unix Kommandozeilenwerkzeuge](#unix-command-line-tools) + - [Informationstheorie](#information-theory-videos) + - [Parität und Hamming Code](#parity--hamming-code-videos) + - [Entropie](#entropy) + - [Kryptographie](#cryptography) + - [Kompression](#compression) + - [Sicherheit](#computer-security) + - [Garbage collection (automatische Speicherverwaltung)](#garbage-collection) + - [Parallelisierung](#parallel-programming) + - [Messaging, Serialisierung und Queueing Systems](#messaging-serialization-and-queueing-systems) + - [A*](#a) + - [Fast Fourier Transform](#fast-fourier-transform) + - [Bloom Filter](#bloom-filter) + - [HyperLogLog](#hyperloglog) + - [Locality-Sensitive Hashing](#locality-sensitive-hashing) + - [van Emde Boas Trees](#van-emde-boas-trees) + - [Augmentierte Datenstrukturen](#augmented-data-structures) + - [Balancierte Suchbäume](#balanced-search-trees) + - AVL Bäume + - Splay Bäume + - Rot-Schwarz-Bäume + - 2-3 Suchbäume + - 2-3-4 Bäume (aka 2,4 Bäume) + - N-fache (K-fache, M-fache) Bäume + - B-Bäume + - [k-D Bäume](#k-d-trees) + - [Skip-Listen](#skip-lists) + - [Netwerk Flüsse und Schnitte](#network-flows) + - [Disjunkte Mengen & Union Find](#disjoint-sets--union-find) + - [Mathematik für schnelle Berechnungen](#math-for-fast-processing) + - [Treap](#treap) + - [Lineare Programmierung](#linear-programming-videos) + - [Geometrie, Konvexe Hülle](#geometry-convex-hull-videos) + - [Diskrete Mathematik](#discrete-math) + - [Machine Learning (maschinelles Lernen)](#machine-learning) +- [Weitere Details für ausgewählte Themen](#additional-detail-on-some-subjects) +- [Videoreihen](#video-series) +- [Infomatikkurse](#computer-science-courses) +- [Wissenschaftliche Abhandlungen](#papers) + +
+ +--- + +## Warum solltest du das hier lesen? + +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 multidimensional arrays in my life and +thousands of associative arrays, but I've never created data structures from scratch. + +It's a long plan. It may take you months. If you are familiar with a lot of this already it will take you a lot less time. + +## How to use it + +
+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. + +**Create a new branch so you can check items like this, just put an x in the brackets: [x]** + + + Fork a branch and follow the commands below + +`git checkout -b progress` + +`git remote add jwasham https://github.com/jwasham/coding-interview-university` + +`git fetch --all` + + Mark all boxes with X after you completed your changes + +`git add .` + +`git commit -m "Marked x"` + +`git rebase jwasham/master` + +`git push --force` + +[More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + +
+ +## Don't feel you aren't smart enough +- Successful software engineers are smart, but many have an insecurity that they aren't smart enough. +- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) +- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) +- [Believe you can change](http://www.aaronsw.com/weblog/dweck) +- [Think you're not smart enough to work at Google? Well, think again](https://www.youtube.com/watch?v=uPOJ1PR50ag) + +## About Video Resources + +Some videos are available only by enrolling in a Coursera or EdX class. These are called MOOCs. +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 to add free and always-available public sources, such as YouTube videos to accompany the online course videos. + I like using university lectures. + + +## Interview Process & General Interview Prep + +
+Interview Process & General Interview Prep + +- [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] 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) + +- [ ] Prep Course: + - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): + - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. + - [ ] [Python for Data Structures, Algorithms, and Interviews! (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. + - [ ] [Intro to Data Structures and Algorithms using Python! (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - A free Python centric data structures and algorithms course. + - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. + +
+ +## Pick One Language for the Interview + +You can use a language you are comfortable in to do the coding part of the interview, but for large companies, these are solid choices: + +- C++ +- Java +- Python + +You could also use these, but read around first. There may be caveats: + +- JavaScript +- Ruby + +Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) + +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/ + +[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. + +## Book List + +This is a shorter list than what I used. This is abbreviated to save you time. + +### Interview Prep + +- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4nd Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - answers in C++ and Java + - this is a good warm-up for Cracking the Coding Interview + - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - answers in Java + +
+If you have tons of extra time: + +Choose one: + +- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] Elements of Programming Interviews (Java version) + - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) + +
+ +### Computer Architecture + +- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - These chapters are worth the read to give you a nice foundation: +
+ ...... + + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization + +
+ + +### Language Specific + +**You need to choose a language for the interview (see above).** + +Here are my recommendations by language. I don't have resources for all languages. I welcome additions. + +If you read through one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. +**You can skip all the video lectures in this project**, unless you'd like a review. + +[Additional language-specific resources here.](programming-language-resources.md) + +### C++ + +
+C++ + +I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. + +- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. + +
+ +### Java + +
+Java + +- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - videos with book content (and Sedgewick!) on coursera: + - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) + - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +OR: + +- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - by Goodrich, Tamassia, Goldwasser + - used as optional text for CS intro course at UC Berkeley + - see my book report on the Python version below. This book covers the same topics. + +
+ +### Python + +
+Python + +- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - by Goodrich, Tamassia, Goldwasser + - I loved this book. It covered everything and more. + - Pythonic code + - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-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 + +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. + +Read please so you won't make my mistakes: + +[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/) + +### 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, wherever I am. + +Make your own for free: + +- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) +- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): +- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.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. + +**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. + +An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. +It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. + +My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) + +### 3. Review, review, review + +I keep a set of cheat sheets 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 are hard. + +## What you won't see covered + +These are prevalent technologies but not part of this study plan: + +- 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. + +You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). + +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 or Java)) +- 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 or paper, not a computer. Test with some sample inputs. Then test it out on a computer. + +## Prerequisite Knowledge + +
+Prerequisite Knowledge + +- [ ] **Learn C** + - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. + - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - This is a short book, but it will give you a great handle on the C language and if you practice it a little + you'll quickly get proficient. Understanding C helps you understand how programs and memory work. + - [answers to questions](https://github.com/lekkas/c-algorithms) + +- [ ] **How computers process a program:** + - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) + - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) + - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) + +
+ +## Algorithmic complexity / Big-O / Asymptotic analysis + +
+Algorithmic complexity / Big-O / Asymptotic analysis + +- Nothing to implement +- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review. +- 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. +- [ ] [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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) +- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) +- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) +- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) +- [ ] TopCoder (includes recurrence relations and master theorem): + - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) + - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) +- [ ] [Cheat sheet](http://bigocheatsheet.com/) + + +
+ +## Data Structures + +
+Data Structures + +- ### Arrays + - Implement an automatically resizing vector. + - [ ] Description: + - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) + - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) + - [ ] 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 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [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://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) + - [ ] Will not implement. Implementing with array is trivial. + +- ### Queue + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) + - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) + - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) + - [ ] 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://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [ ] [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 + +
+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/competitive-programming/tutorials/binary-search/) + - [ ] Implement: + - binary search (on sorted array of integers) + - binary search using recursion + +- ### Bitwise operations + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://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](https://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) + - [ ] swap values: + - [Swap](https://bits.stephan-brumme.com/swap.html) + - [ ] absolute value: + - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) + +
+ +## Trees + +
+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) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS notes: + - level order (BFS, using queue) + - time complexity: O(n) + - space complexity: best: O(1), worst: O(n/2)=O(n) + - DFS 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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [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). + +
+ +## Sorting + +
+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. + +- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) + +- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) + +- [ ] UC Berkeley: + - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + +- [ ] [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) + +- [ ] Merge sort code: + - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] Quick sort code: + - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + +- [ ] 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. + +- [ ] Not required, but I recommended them: + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [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) + +As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). +If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + +
+ +## Graphs + +
+Graphs + +Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. + +- Notes: + - There are 4 basic ways to represent a graph in memory: + - objects and pointers + - adjacency matrix + - adjacency list + - adjacency map + - 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. + +- [ ] MIT(videos): + - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + +- [ ] 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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [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) + +- 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 + +
+ +## Even More Knowledge + +
+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 + - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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) + +- ### Object-Oriented Programming + - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] Object-Oriented Software Engineering: 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 (video)](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 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 but 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) + +- ### 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) + - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) + + +- ### 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-Completeness (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 Norvig 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 processes and threads see videos 1-11 + - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 + - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - [Scheduling (video)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) + - 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 the 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) + +- ### 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 + +- ### String searching & manipulations + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) + - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + +- ### 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. + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [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/competitive-programming/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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + +- ### Floating Point Numbers + - [ ] 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) + +- ### 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://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. + +- ### Networking + - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** + - otherwise, this is just good to know + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) + - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) + - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) + - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) + - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) + - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] Sockets: + - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + +
+ +## System Design, Scalability, Data Handling + +
+System Design, Scalability, Data Handling + +**You can expect system design questions if you have 4+ years of experience.** + +- 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. +- Considerations: + - 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**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] [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/) +- [ ] Consensus Algorithms: + - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) +- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) +- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) +- [ ] Scalability: + - You don't need all of these. Just pick a few that interest you. + - [ ] [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/competitive-programming/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 (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) + - [ ] [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) + - [ ] [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](#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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/coding-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 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/) + +
+ +--- + +## Final Review + +
+Final Review + + This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. + It's nice if you want a refresher often. + +- [ ] 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) +- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +
+ +--- + +## Coding Question Practice + +
+Coding Question Practice + +Now that you know all the computer science topics above, it's time to practice answering coding problems. + +**Coding question practice is not about memorizing answers to programming problems.** + +Why you need to practice doing programming problems: +- problem recognition, and where the right data structures and algorithms fit in +- gathering requirements for the problem +- talking your way through the problem like you will in the interview +- coding on a whiteboard or paper, not a computer +- coming up with time and space complexity for your solutions +- testing your solutions + +There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming +interview books, too, but I found this outstanding: +[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) + +No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a +large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". +I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. + +![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) + +Supplemental: + +- [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) +- [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) +- [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) +- [Exercises for getting better at a given language](http://exercism.io/languages) + +**Read and Do Programming Problems (in this order):** + +- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - answers in C, C++ and Java +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - answers in Java + +See [Book List above](#book-list) + +
+ +## Coding exercises/challenges + +
+Coding Question Practice + +Once you've learned your brains out, put those brains to work. +Take coding challenges every day, as many as you can. + +- [ ] [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) +- [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) + +Coding Interview Question Videos: +- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + +Challenge sites: +- [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) +- [HackerEarth](https://www.hackerearth.com/) +- [HackerRank](https://www.hackerrank.com/) +- [Codility](https://codility.com/programmers/) +- [InterviewCake](https://www.interviewcake.com/) +- [Geeks for Geeks](http://www.geeksforgeeks.org/) +- [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Sphere Online Judge (spoj)](http://www.spoj.com/) +- [Codechef](https://www.codechef.com/) + +Challenge repos: +- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) + +Mock Interviews: +- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. +- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews +- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. + +
+ +## 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) + +## Your Resume + +- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed + + +## Be thinking of for when the interview comes + +Think of about 20 interview questions you'll get, along with 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 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 does 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! + +Keep learning. + +You're never really done. + +--- + + ***************************************************************************************************** + ***************************************************************************************************** + + Everything below this point is optional. + By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for + any software engineering job. You'll be a much more well-rounded software engineer. + + ***************************************************************************************************** + ***************************************************************************************************** + +--- + +## Additional Books + +
+Additional Books + +- [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) + - an oldie but a goodie +- [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) + - a modern option +- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) + - a gentle introduction to design patterns +- [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) + - aka the "Gang Of Four" book, or GOF + - the canonical design patterns book +- [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) +- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - Can rent it on kindle + - 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) + +- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - aka CLR, sometimes CLRS, because Stein was late to the game + +- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) + - For a richer, more up-to-date (2017), but longer treatment + +- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. + +
+ + + +## Additional Learning + +
+Additional Learning + +These topics will likely not come up in an interview, but I added them to help you become a well-rounded +software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox. + +- ### Compilers + - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [ ] [Harvard 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) + +- ### Emacs and vi(m) + - 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 + - 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) + +- ### 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 + - [ ] [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) + +- ### 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 Started](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/) + +- ### 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) + +- ### Fast Fourier Transform + - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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 (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) + +- ### HyperLogLog + - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + +- ### Locality-Sensitive Hashing + - used to determine the similarity of documents + - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) + +- ### 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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) + +- ### Balanced search trees + - Know at 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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - [ ] MIT Lecture: Splay Trees: + - Gets very mathy, but watch the last 10 minutes for sure. + - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + + - [ ] **Red/black trees** + - these are a translation of a 2-3 tree (see below) + - 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) + - [ ] [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) + + - [ ] **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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [ ] [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) + + - [ ] **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) + + - [ ] **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) + + +- ### k-D Trees + - great for finding number of points in a rectangle or higher dimension object + - a good fit for k-nearest neighbors + - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + +- ### 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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [ ] [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 + - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + +- ### 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) + - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) + +- ### 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: + - Books: + - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) + - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) + - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) + - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - Data School: http://www.dataschool.io/ + +
+ +--- + +## Additional Detail on Some Subjects + +
+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? + +- [ ] **Union-Find** + - [ ] [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) + +- [ ] **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) + +- [ ] **String Matching** + - [ ] 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): + - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - [ ] 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) + - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be + - nice explanation of tries + - can be skipped + +- [ ] **Sorting** + + - [ ] 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) + +
+ +## Video Series + +Sit back and enjoy. "Netflix and skill" :P + +
+Video Series + +- [ ] [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](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) + +- [ ] [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) + +- [ ] [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) + +- [ ] 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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) + +- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) + +- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-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) + +- [ ] [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) + +- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) + +- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) + - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) + +- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) + +- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) + +
+ +## 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) + +## Papers + +
+Papers + +- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) +- [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) +- [ ] [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? +- [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) +- [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) +- [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - The Dynamo paper kicked off the NoSQL revolution +- [ ] [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) +- [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) +- [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) + +
+ +## LICENSE + +[CC-BY-SA-4.0](./LICENSE.txt) From ff05386f3f7e472daf3268b3cadf8d4695f2d5e4 Mon Sep 17 00:00:00 2001 From: rene Date: Wed, 3 Jul 2019 22:46:37 +0200 Subject: [PATCH 120/263] - german translation --- translations/README-de.md | 110 ++++++++++++++++++++------------------ 1 file changed, 57 insertions(+), 53 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index 6d48bd6..faf1897 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -1,16 +1,17 @@ # Coding Interview University -> I originally created this as a short to-do list of study topics for becoming a software engineer, -> but it grew to the large list you see today. After going through this study plan, [I got hired -> as a Software Development Engineer at Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! -> You probably won't have to study as much as I did. Anyway, everything you need is here. +> Ursprünglich habe ich dies als eine kurze To-Do Liste von Studienthemen angefangen um SOftware Engineer zu werden, +> aber es ist zu der riesigen Liste herangewachsen die man heute sehen kann. Nachdem ich diesen Lehrplan durchgezogen +> habe, [wurde ich als Software Entwickler bei Amazon eingestellt.](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> Wahrscheinlich wirst du nicht so viel lernen brauchen wie ich es getan habe. Aber egal, alles was du brauchst, findest +> du hier. > -> I studied about 8-12 hours a day, for several months. This is my story: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> Ich habe ungefähr 8-12 Stunden am Tag gelernt, und das für mehrere Monate. Hier ist meine Geschichte: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) > -> The items listed here will prepare you well for an interview at just about any software company, -> including the giants: Amazon, Facebook, Google or Microsoft. +> Die Einträge in dieser Liste werden dich gut auf ein Vorstellungsgepräch bei so gut wie jeder Software Firma vorbereiten, +> so bei den Giganten: Amazon, Facebook, Google oder Micrososft. > -> *Best of luck to you!* +> *Viel Glück!*
Übersetzungen: @@ -69,8 +70,8 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Worum es geht](#what-is-it) - [Warum solltest du das hier lesen?](#why-use-it) - [Wie man dies hier benutzt](#how-to-use-it) -- [Glaub nicht, dass du nicht klug genug bist](#dont-feel-you-arent-smart-enough) -- [Über Video Resourcen](#about-video-resources) +- [Halt dich nicht für dümmer als du bist](#dont-feel-you-arent-smart-enough) +- [Über Videoquellen](#about-video-resources) - [Ablauf von Vorstellungsgesprächen und allgemeine Vorbereitung darauf](#interview-process--general-interview-prep) - [Wähle eine Sprache für das Vorstellungsgespräch](#pick-one-language-for-the-interview) - [Buchliste](#book-list) @@ -136,7 +137,7 @@ Liste (Netzwerke, Sicherheit) ansehen. ---------------- Alles unter der Linie ist optional ----------------
-Additional Resources +Zusätzliche Materialien - [Zusätzliche Bücher](#additional-books) - [Zusätzliches Wissen](#additional-learning) @@ -188,28 +189,30 @@ Liste (Netzwerke, Sicherheit) ansehen. ## Warum solltest du das hier lesen? -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 multidimensional arrays in my life and -thousands of associative arrays, but I've never created data structures from scratch. +Als ich dieses Projekt angefangen habe, konnte ich einen Stack nicht von einem Heap unterscheiden, wusste nichts von +Groß-O, nichts über Bäume, oder wie man einen Graphen durchläuft. Wenn ich einen Sortieralgorithmuss hätte schreiben sollen, +dann wäre der nicht besonders gut geworden, so viel kann ich dir sagen. Jede Datenstruktur die jemals benutzt habe war +direkt in der Programmiersprache eingebaut, und ich hatte keine Ahnung wie sie funktioniert haben. Ich muss niemals +Speichermanagement betreiben, außer einer der Prozesse die ich ausgeführt hatte hat einen "out of memory" Fehler gehabt. +Und wenn das passiert ist, musste ich einen Umweg finden. Ich habe ein paar mehrdimensionale Arrays in meinen Leben benutzt +und ein paar tausend assoziative Arrays, aber ich habe nie selbst eine Datenstruktur von Grund auf neu geschrieben. -It's a long plan. It may take you months. If you are familiar with a lot of this already it will take you a lot less time. +Es ist ein großer Plan. Es könnte mehrere Monate dauern. Falls dir schon vieles von dem bekannt ist, wird es dich viel +weniger Zeit kosten. -## How to use it +## Wie man dies hier benutzt
-How to use it +Wie man dies hier benutzt -Everything below is an outline, and you should tackle the items in order from top to bottom. +Alles hier drunter ist ein Umriss, und du solltest die Aufgaben von oben nach untern abarbeiten. -I'm using Github's special markdown flavor, including tasks lists to check progress. +Ich benutze GitHub's spezielle Version von Markdown, das beinhält Aufgabenliste um den Fortschritt zu prüfen. -**Create a new branch so you can check items like this, just put an x in the brackets: [x]** +**Erstelle einen neuen Branch. Damit du Einträge abhaken kannst, füge einfach nur ein x in eckigen Klammern ein: [x]** - Fork a branch and follow the commands below + Erstelle einen Fork dieses Projekts und gib die folgenden Kommandos ein `git checkout -b progress` @@ -217,7 +220,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr `git fetch --all` - Mark all boxes with X after you completed your changes + Hake alle Kästchen mit x ab nachdem du die Änderungen vollzogen hast `git add .` @@ -227,25 +230,26 @@ I'm using Github's special markdown flavor, including tasks lists to check progr `git push --force` -[More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +[Mehr über die Markdown Version von GitHub](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
-## Don't feel you aren't smart enough -- Successful software engineers are smart, but many have an insecurity that they aren't smart enough. +## Halt dich nicht für dümmer als du bist +- Erfolgreiche Software Engineers sind klug, aber viele sind sich unsicher ob sie klug genug sind. - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) - [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) - [Believe you can change](http://www.aaronsw.com/weblog/dweck) - [Think you're not smart enough to work at Google? Well, think again](https://www.youtube.com/watch?v=uPOJ1PR50ag) -## About Video Resources +## Über Videoquellen -Some videos are available only by enrolling in a Coursera or EdX class. These are called MOOCs. -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 to add free and always-available public sources, such as YouTube videos to accompany the online course videos. - I like using university lectures. +Auf manche Videos kann man nur zugreifen indem man sich bei einem Coursera- oder EdX-Kurs einschreibt. Das sind so +genannte MOOCS. Manchmal werden die Kurse gerade nicht angeboten und man muss ein paar Monate warten. Man hat dann +keinen Zugriff darauf. + Ich würde mich sehr freuen wenn du mir dabei hilfst kostenlose und immer verfügbare öffentliche Quellen hinzuzufügen, + wie z.B. YouTube Videos um die Online Kurse zu ergänzen. + Ich benutze gerne Vorlesungen von Hochschulen. ## Interview Process & General Interview Prep @@ -381,10 +385,10 @@ If you have a better recommendation for C++, please let me know. Looking for a c - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) -OR: +ODER: - [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - - by Goodrich, Tamassia, Goldwasser + - von Goodrich, Tamassia, Goldwasser - used as optional text for CS intro course at UC Berkeley - see my book report on the Python version below. This book covers the same topics. @@ -396,7 +400,7 @@ OR: Python - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - - by Goodrich, Tamassia, Goldwasser + - von Goodrich, Tamassia, Goldwasser - I loved this book. It covered everything and more. - Pythonic code - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ @@ -449,7 +453,7 @@ I keep a set of cheat sheets on ASCII, OSI stack, Big-O notations, and more. I s Take a break from programming problems for a half hour and go through your flashcards. -### 4. Focus +### 4. Fokus There are a lot of distractions that can take up valuable time. Focus and concentration are hard. @@ -459,7 +463,7 @@ These are prevalent technologies but not part of this study plan: - SQL - Javascript -- HTML, CSS, and other front-end technologies +- HTML, CSS, und andere Front-end Technologien ## The Daily Plan @@ -525,7 +529,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [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) + - [Folien](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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) - [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) @@ -652,7 +656,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [(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: + - [ ] Online Kurse: - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) @@ -993,7 +997,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] Object-Oriented Software Engineering: 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 (video)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - - [ ] SOLID OOP Principles: + - [ ] SOLID OOP Prinzipien: - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) - [ ] [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) @@ -1226,7 +1230,7 @@ Graphs can be used to represent many problems in computer science, so this secti - simplicity and robustness - tradeoffs - performance analysis and optimization -- [ ] **START HERE**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] **HIER ANFANGEN**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [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/) @@ -1245,10 +1249,10 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) -- [ ] Scalability: +- [ ] Skalierbarkeit: - You don't need all of these. Just pick a few that interest you. - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) - - [ ] Short series: + - [ ] Kurzreihen: - [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) @@ -1301,7 +1305,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) - For even more, see "Mining Massive Datasets" video series in the [Video Series](#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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - Review: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) - flow: @@ -1615,7 +1619,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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) +- ### Parität und Hamming Code (videos) - [ ] [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) - [ ] [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M) - [ ] Hamming Code: @@ -2033,7 +2037,7 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) -- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) +- [ ] [Graph Theory von Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd)
@@ -2042,14 +2046,14 @@ Sit back and enjoy. "Netflix and skill" :P - [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) -## Papers +## Paper
-Papers +Paper - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - - [implemented in Go](https://godoc.org/github.com/thomas11/csp) + - [implementiert in Go](https://godoc.org/github.com/thomas11/csp) - [ ] [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) @@ -2063,7 +2067,7 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) - [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) - - paper not available + - Paper nicht verfügbar - [ ] 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) @@ -2079,6 +2083,6 @@ Sit back and enjoy. "Netflix and skill" :P
-## LICENSE +## Lizenz [CC-BY-SA-4.0](./LICENSE.txt) From 1ade90332d63121f289c8195c7c35bfef9916d8c Mon Sep 17 00:00:00 2001 From: rene Date: Fri, 5 Jul 2019 23:54:19 +0200 Subject: [PATCH 121/263] - german translation --- translations/README-de.md | 292 +++++++++++++++++++------------------- 1 file changed, 147 insertions(+), 145 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index faf1897..fbc0b28 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -1,10 +1,9 @@ # Coding Interview University -> Ursprünglich habe ich dies als eine kurze To-Do Liste von Studienthemen angefangen um SOftware Engineer zu werden, +> Ursprünglich habe ich dies als eine kurze To-Do Liste von Studienthemen angefangen um Software Engineer zu werden, > aber es ist zu der riesigen Liste herangewachsen die man heute sehen kann. Nachdem ich diesen Lehrplan durchgezogen > habe, [wurde ich als Software Entwickler bei Amazon eingestellt.](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! -> Wahrscheinlich wirst du nicht so viel lernen brauchen wie ich es getan habe. Aber egal, alles was du brauchst, findest -> du hier. +> Wahrscheinlich wirst du nicht so viel lernen müssen wie ich. Aber egal, alles was man brauchst, findest man hier. > > Ich habe ungefähr 8-12 Stunden am Tag gelernt, und das für mehrere Monate. Hier ist meine Geschichte: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) > @@ -53,8 +52,8 @@ Das ist mein mehrmonatiger Lernplan um vom Web Developer (Selbststudium, kein Ab ![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) Dies ist gedacht für **neue Software Engineure** oder solche die von der Software/Web Entwicklung zum Software -Engineering wechseln wollen (wobei Informatikkenntnisse benötigt werden). Falls du behauptest mehrere Jahre an Erfahrung -als Software Engineer zu haben, erwartet dich ein hartes Vorstellungsgespräch. +Engineering wechseln wollen (wobei Informatikkenntnisse benötigt werden). Falls man behauptet mehrere Jahre an Erfahrung +als Software Engineer zu haben, erwartet einen ein hartes Vorstellungsgespräch. Falls du schon mehrere Jahre Erfahung in der Software/Webenteicklung hast, muss dir klar sein, dass große Software Unternehmen wie Google, Amazon, Facebook oder Microsoft Software Engineering und Software Entwicklung @@ -77,7 +76,7 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Buchliste](#book-list) - [Bevor du anfängst](#before-you-get-started) - [Was hier nicht behandelt wird](#what-you-wont-see-covered) -- [Vorausgesetztes Wissen](#prerequisite-knowledge) +- [Voraussetzungen](#prerequisite-knowledge) - [Der Tagesplan](#the-daily-plan) - [Komplexitätstheorie / Big-O (Groß-O Notation) / Asymptotische Analyse](#algorithmic-complexity--big-o--asymptotic-analysis) - [Datenstrukturen](#data-structures) @@ -181,7 +180,7 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Weitere Details für ausgewählte Themen](#additional-detail-on-some-subjects) - [Videoreihen](#video-series) - [Infomatikkurse](#computer-science-courses) -- [Wissenschaftliche Abhandlungen](#papers) +- [Paper (Wissenschaftliche Artikel)](#papers)
@@ -251,127 +250,128 @@ keinen Zugriff darauf. wie z.B. YouTube Videos um die Online Kurse zu ergänzen. Ich benutze gerne Vorlesungen von Hochschulen. -## Interview Process & General Interview Prep +## Ablauf von Vorstellungsgesprächen und allgemeine Vorbereitung darauf
-Interview Process & General Interview Prep +Ablauf von Vorstellungsgesprächen und allgemeine Vorbereitung darauf - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) -- [ ] Cracking The Coding Interview Set 1: +- [ ] Cracking The Coding Interview Teil 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: +- [ ] Wie man einen Job bei den Großen 4 bekommt: - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) -- [ ] Prep Course: - - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. - - [ ] [Python for Data Structures, Algorithms, and Interviews! (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. - - [ ] [Intro to Data Structures and Algorithms using Python! (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): - - A free Python centric data structures and algorithms course. - - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): - - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. +- [ ] Vorbereitungskurse: + - [ ] [Software Engineer Interview Unleashed (kostenpflichtiger Kurs)](https://www.udemy.com/software-engineer-interview-unleashed): + - Hier lernt von einem ehemaligen Google Interviewer wie man sich auf ein Vorstellungsgespräch als Software Engineer vorbereitet. + - [ ] [Python for Data Structures, Algorithms, and Interviews! (kostenpflichtiger Kurs)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - Ein auf Python zugeschnittener Kurs welcher Datenstrukturen, Algorithme, Testinterviews und noch viel mehr behandelt. + - [ ] [Intro to Data Structures and Algorithms using Python! (kostenloser Kurs auf Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - Ein kostenloser auf Python zentrierter Kurs über Datenstrukturen und Algorithmen. + - [ ] [Data Structures and Algorithms Nanodegree! (kostenpflichtiges Nandegree Kurs auf Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - Hol dir praktische Erfahrungen im Umgang mit über 100 Datenstrukturen und Algorithmen unter der Führung eines engagierten Mentors der dir dabei hilft dich auf Vorstellungsgespräche und Beispiele aus den Berufsleben vorzubereiten.
-## Pick One Language for the Interview +## Wähle eine Sprache für das Vorstellungsgespräch -You can use a language you are comfortable in to do the coding part of the interview, but for large companies, these are solid choices: +Man sollte eine Sprache wählen mit der man sich wohl fühlt beim Codingteil des Vorstellungsgesprächs. +Aber für große Firmen sind das valide Optionen: - C++ - Java - Python -You could also use these, but read around first. There may be caveats: +Man könnte auch diese verwenden, aber pass auf. Es könnte eineige Vorbehalte geben: - JavaScript - Ruby -Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) +Hier ist ein Artikel den ich über die Auswahl der Programmiersprache für das Vorstellungsgespräch geschrieben habe: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) -You need to be very comfortable in the language and be knowledgeable. +Du musst dich mit der Sprache wohl fühlen und auskennen. -Read more about choices: +Hier kannst du mehr über die Wahl lesen: - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ - http://blog.codingforinterviews.com/best-programming-language-jobs/ -[See language resources here](programming-language-resources.md) +[Siehe language resources](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. +Unten sind ein paar Materialien zu C, C++ und Python zu finden, weil ich das gerade lerne. Es gehören einige Bücher dazu, siehe unten. -## Book List +## Buchliste -This is a shorter list than what I used. This is abbreviated to save you time. +Die Liste ist kürzer als die, die ich tatsächlich benutzt habe. Ich habe es etwas abgekürzt um euch Zeit zu sparen. -### Interview Prep +### Vorbereitung auf das Vorstellungsgespräch - [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4nd Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - - answers in C++ and Java - - this is a good warm-up for Cracking the Coding Interview - - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) + - Antworten in C++ und Java + - eine gute Aufwärmübung für Cracking the Coding Interview + - nicht allzu schwer, die meisten Probelem sind einfacher als das was ihr in Vorstellungsgesprächen sehen werdet (von dem was ich so gelesen habe) - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - Antworten in Java
-If you have tons of extra time: +Wenn man extrem viel Zeit hat: -Choose one: +Such dir eins aus: - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - [ ] Elements of Programming Interviews (Java version) - - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [Buch](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews)
-### Computer Architecture +### Rechnerarchitektur - [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - - These chapters are worth the read to give you a nice foundation: + - Das Buch wurde 2004 veröffentlicht und ist etwas veraltet, aber es ist eine hervorragende Quelle um Computer in Kürze zu verstehen. + - Der Autor hat [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly) erfunden, also sollte man die Erwähnungen und Beispiele in HLA mit Vorsicht genießen. Nicht weit verbreitet, aber ein nettes Beispiel wie Assembly Code aussehen kann. + - Diese Kapitel sind es wert zu lesen um euch eine gute Grundlage zu geben:
...... - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization + - Kapitel 2 - Numeric Representation + - Kapitel 3 - Binary Arithmetic and Bit Operations + - Kapitel 4 - Floating-Point Representation + - Kapitel 5 - Character Representation + - Kapitel 6 - Memory Organization and Access + - Kapitel 7 - Composite Data Types and Memory Objects + - Kapitel 9 - CPU Architecture + - Kapitel 10 - Instruction Set Architecture + - Kapitel 11 - Memory Architecture and Organization
-### Language Specific +### Sprachspezifisch -**You need to choose a language for the interview (see above).** +**Man muss sich für das Vorstellungsgespräch für eine Programmiersprache entschieden haben (siehe oben).** -Here are my recommendations by language. I don't have resources for all languages. I welcome additions. +Hier sind meine Empfehlungen geordnet nach Sprache. Ich habe nicht für alle Sprachen Material. Ich begrüße Ergänzugen. -If you read through one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. -**You can skip all the video lectures in this project**, unless you'd like a review. +Wenn du dich durch eins davon durchgelsen hast, solltest du genügende Wissen über Datenstrukturen und Algorithmen haben um Coding Probleme lösen zu können. +**Man kann alle Videolektionen in diesen Projekt überspringen**, außer du willst eine Auffrischung. -[Additional language-specific resources here.](programming-language-resources.md) +[Zusätzliches sprachspezifisches Material hier.](programming-language-resources.md) ### C++
C++ -I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. +Ich habe diese beiden zwar nicht gelesen, aber sie sind gut bewertet und von Sedgewick geschrieben. Er ist super. - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) - [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) -If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. +Wenn du eine bessere Empfehlung für C++ hast, bitte lass es mich wissen. Ich suche nach umfassenden Material.
@@ -380,8 +380,8 @@ If you have a better recommendation for C++, please let me know. Looking for a c
Java -- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - videos with book content (and Sedgewick!) on coursera: +- [ ] [Algorithms (Sedgewick und Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - Videos mit Buchinhalt (und Sedgewick!) auf Coursera: - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -389,8 +389,8 @@ ODER: - [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - von Goodrich, Tamassia, Goldwasser - - used as optional text for CS intro course at UC Berkeley - - see my book report on the Python version below. This book covers the same topics. + - wird bei der UC Berkeley als Zusatzmaterial für den Informatik Einstieg benutzt + - siehe Zusammenfassung zur Python Version, dieses Buch behandelt die selben Themen.
@@ -401,114 +401,116 @@ ODER: - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - von Goodrich, Tamassia, Goldwasser - - I loved this book. It covered everything and more. - - Pythonic code - - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ + - Ich habe dieses Buch gelibet. Es hat alles behandelt und mehr. + - Python-hafter Code + - meine feurige Rezension: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ -## Before you Get Started +## Bevor du anfängst -This list grew over many months, and yes, it kind of got out of hand. +Diese Liste ist über mehrere Monate gewachsen. Und ja, sie ist etwas aus dem Ruder gelaufen. -Here are some mistakes I made so you'll have a better experience. +Hier einige Fehler die ich gemacht habe, damit ihr ein besseres Erlebnis haben könnt. -### 1. You Won't Remember it All +### 1. Du wirst dich nicht an alles erinnern können -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. +Ich habe stundelang Videos gesehen und reichlich Notizen geschrieben. Monate später gab es viel an das ich mich nicht mehr erinnern konnte. +Ich habe 3 Tage damit verbracht meine Notizen durchzugehen und daraus Lernkarten zu erstellen, damit ich alles nochmal wiederholen konnte. -Read please so you won't make my mistakes: +Bitte lesen damit ihr nicht meine Fehler wiederholt: [Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/) -### 2. Use Flashcards +### 2. Benutz Lernkarten -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. +Um das Problem zu lösen, habe ich eine kleine Webseite erstellt wo ich 2 Arten von Lernkarten anlegen kann: Allgemein und Code. +Jede Karte hat ihr eigenes Format. -I made a mobile-first website so I could review on my phone and tablet, wherever I am. +Ich habe eine mobile-first Webseite gemacht, damit ich auf meinen Smart Phone oder Tablet lernen kann, egal wo ich mich befinde. -Make your own for free: +Erstell kostenlos deine eigenen Lernkarten: -- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) -- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): -- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db): +- [Lernkarten-Webseiten Repo](https://github.com/jwasham/computer-science-flash-cards) +- [Meine Lernkarten Databank (alt - 1200 Karten)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): +- [Meine Lernkarten Databank (neu - 1800 Karten)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.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. +Achtung, ich habe es übertrieben und Lernkarten über alles erstellt, von Assembly und Python Trivia bis hin zu Machine Learning und Statistik. Das ist viel mehr als eigentlich notwendig. -**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. +**Anmerkung zu Lernkarten:** Wenn man sich einmal an eine Antwort erinnert, sollte man das nicht als Wissen ansehen. +Man muss sich die Karte mehrmals ansehen und richtig beantworten bevor man es tatsächlich weiß. Wiederholung wird das +Wissen tiefer in euren Verstand verankern. -An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. -It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. +Eine Alternative zu Lernkarten ist [Anki](http://ankisrs.net/), was mir schon öfters empfohlen wurde. +Es benutzt ein Erinnerungssystem um einen dabei zu helfen sich zu erinnern. +Es ist benutzerfreundlich, auf allen Plattformen erhaältlich und kann sich mit der Cloud synchronisieren. +Es kostet 25$ auf iOS aber es ist kostenlos für andere Plattformen. -My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) +Meine Lernkarten Sammlung im Anki Format: https://ankiweb.net/shared/info/25173560 (Danke [@xiewenya](https://github.com/xiewenya)) -### 3. Review, review, review +### 3. Wiederholen, wiederholen , wiederholen -I keep a set of cheat sheets on ASCII, OSI stack, Big-O notations, and more. I study them when I have some spare time. +Ich behalte eine Reihe von Spickzetteln über ASCII, OSI Stack, Groß-O Notation, und mehr. Ich lerne sie in meiner Freizeit. -Take a break from programming problems for a half hour and go through your flashcards. +Nimm dir eine Pause vom Programmieren für eine halbe Stunde und gehe deine Lernkarten durch. ### 4. Fokus -There are a lot of distractions that can take up valuable time. Focus and concentration are hard. +Es gibt eine Menge Ablenkungen die dir deine kostbare Zeit stehlen können. Fokussiert und konzentriert zu bleiben ist schwer. -## What you won't see covered +## Was hier nicht behandelt wird -These are prevalent technologies but not part of this study plan: +Das sind weit verbreitete Technologien aber nicht Teil des Lehrplans: - SQL - Javascript - HTML, CSS, und andere Front-end Technologien -## The Daily Plan +## Der Tagesplan -Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement. +Einige der Themen brauchen einen Tag, für andere braucht man mehrere Tage. Manche sind reines Lernen ohne das man was implementiert. -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. +Jeden Tag nehme ich mir ein Thema aus der Liste unten vor, schaue Videos über das Thema, und schreibe eine Implementierung in: +- C - mit structs and Funktionen die ein struct Pointer und und etwas anderes als Argumente benutzen. +- C++ - ohne vorgefertigte Typen +- C++ - mit vorgefertigte Typen, wie STL's std::list für verkettete Listen +- Python - mit vorgefertigte Typen (um Python weiterhin zu üben) +- und ich schreibe Tests um sicher zu gehen, dass ich richitg liege, manchmal sind das nur einfache assert() Statements +- Du könntest auch Java oder etwas anderes machen, das ist nur das was ich tue. -You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). +Man brauchst nicht alles davon. Man braucht nur [eine Sprache für das Vorstellungsgepräch](#pick-one-language-for-the-interview). -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 or Java)) -- 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) +Warum ich in all diesen Sprachen programmiere? +- Üben, üben, üben, bis ich kotzen muss und es im Schlaf beherrsche (manche Probleme haben viele Sonderfälle und Wissen an das man sich erinnern muss) +- Unter erschwerten Voraussetzungen arbeiten können (Speicher allokieren/freigeben ohne die Hilfe einer Garbage Collection (Ausnahmen sind Python oder Java)) +- Vorgefertigte Typen verwenden damit ich Erfahrung im Umgang für echte Anwendungsfälle haben (ich werde sich meine eigene verkettete Liste im Alltag implementieren) -I may not have time to do all of these for every subject, but I'll try. +Vielleicht habe ich nicht die Zeit um das alles für jedes Thema zu machen, aber ich werde es versuchen. -You can see my code here: +Man findet meinen Code hier: - [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. +Man muss sich nicht bei jeden Algorithmus an alle Details erinnern können. -Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then test it out on a computer. +Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit ein paar einfachen Eingaben. Dann kannst du es am Computer testen. -## Prerequisite Knowledge +## Voraussetzungen
-Prerequisite Knowledge +Voraussetzungen -- [ ] **Learn C** - - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. +- [ ] **Lerne C** + - C ist überall. Du wirst Beispiele in Büchern, Vorlesungen, Videos, und generell *überall* finden während du lernst. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - This is a short book, but it will give you a great handle on the C language and if you practice it a little - you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - - [answers to questions](https://github.com/lekkas/c-algorithms) + - Das ist ein kurzes Buch, aber es wird dich viel über die C Sprache lehren und wenn du ein bisschen übst, + wirst du schnell darin bewandert sein. C zu Verstehen hilft dir zu verstehen wie Programme und Speicher funktionieren. + - [Antworten auf Fragen](https://github.com/lekkas/c-algorithms) -- [ ] **How computers process a program:** - - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) +- [ ] **Wie Computer einen Prozess ausführen:** + - [ ] [Wie der Prozessor ein Programm ausführt (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) @@ -545,10 +547,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
-## Data Structures +## Datenstrukturen
-Data Structures +Datenstrukturen - ### Arrays - Implement an automatically resizing vector. @@ -580,10 +582,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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 + - [ ] Zeit - O(1) to add/remove at end (amortized for allocations for more space), index, or update - O(n) to insert/remove elsewhere - - [ ] Space + - [ ] Speicher - contiguous in memory, so proximity helps performance - space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n) @@ -619,12 +621,12 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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 + - gibt keinen Grund das zu implementieren - ### Stack - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - - [ ] Will not implement. Implementing with array is trivial. + - [ ] Werde ich nicht implementieren. Implementierung mittels Array ist trivial. - ### Queue - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) @@ -851,11 +853,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [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) -- [ ] Merge sort code: +- [ ] Merge Sort code: - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) -- [ ] Quick sort code: +- [ ] Quick Sort code: - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) @@ -885,14 +887,14 @@ If you need more detail on this subject, see "Sorting" section in [Additional De
-## Graphs +## Graphen
-Graphs +Graphen Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. -- Notes: +- Bemerkungen: - There are 4 basic ways to represent a graph in memory: - objects and pointers - adjacency matrix @@ -1956,7 +1958,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - nice explanation of tries - can be skipped -- [ ] **Sorting** +- [ ] **Sortierung** - [ ] Stanford lectures on sorting: - [ ] [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) @@ -1972,12 +1974,12 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
-## Video Series +## Videoreihen -Sit back and enjoy. "Netflix and skill" :P +Lehn dich zurück und genieße. "Netflix and skill" :P
-Video Series +Videoreihen - [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) @@ -1989,9 +1991,9 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) -- [ ] [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) +- [ ] [Discrete Mathematics von Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) -- [ ] [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) +- [ ] [Discrete Mathematics Part 1 von Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) - [ ] CSE373 - Analysis of Algorithms (25 videos) - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) @@ -2032,7 +2034,7 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) -- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) +- [ ] [Introduction to Cryptography von Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) - [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) @@ -2046,23 +2048,23 @@ Sit back and enjoy. "Netflix and skill" :P - [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) -## Paper +## Paper (Wissenschaftliche Artikel)
-Paper +Paper (Wissenschaftliche Artikel) -- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) +- [Liebst du klassische Paper?](https://www.cs.cmu.edu/~crary/819-f09/) - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - [implementiert in Go](https://godoc.org/github.com/thomas11/csp) - [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) - - replaced by Colossus in 2012 + - ersetzt durch 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? + - größtenteils ersetzt durch Cloud Dataflow? - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) - [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - - The Dynamo paper kicked off the NoSQL revolution + - Das Dynamo Paper hat die NoSQL Revolution ausgelöst. - [ ] [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) - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) From 955b0f32568c118a6c3c98da0b7b5493ea07afc4 Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 6 Jul 2019 22:19:47 +0200 Subject: [PATCH 122/263] - german translation --- translations/README-de.md | 294 +++++++++++++++++++------------------- 1 file changed, 147 insertions(+), 147 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index fbc0b28..2bc9328 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -78,14 +78,14 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Was hier nicht behandelt wird](#what-you-wont-see-covered) - [Voraussetzungen](#prerequisite-knowledge) - [Der Tagesplan](#the-daily-plan) -- [Komplexitätstheorie / Big-O (Groß-O Notation) / Asymptotische Analyse](#algorithmic-complexity--big-o--asymptotic-analysis) +- [Algorithmische Komplexität / Big-O (Groß-O Notation) / Asymptotische Analyse](#algorithmic-complexity--big-o--asymptotic-analysis) - [Datenstrukturen](#data-structures) - [Arrays (Felder)](#arrays) - [Linked Lists (verkettete Listen)](#linked-lists) - [Stack (Stapel)](#stack) - [Queue (Wartenschlangen)](#queue) - - [Hash table (Hashtabellen)](#hash-table) -- [Sonstiges](#more-knowledge) + - [Hash table (Hashtabelle)](#hash-table) +- [Mehr](#more-knowledge) - [Binärsuche](#binary-search) - [Bitweise Operationen](#bitwise-operations) - [Trees (Bäume)](#trees) @@ -518,17 +518,17 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit
-## Algorithmic complexity / Big-O / Asymptotic analysis +## Algorithmische Komplexität / Big-O (Groß-O Notation) / Asymptotische Analyse
-Algorithmic complexity / Big-O / Asymptotic analysis +Algorithmische Komplexität / Big-O (Groß-O Notation) / Asymptotische Analyse -- Nothing to implement -- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review. -- 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. +- nichts zum Implementieren +- Es sind eine Menge Videos hier aufgelistet. Schau dir einfach so viele an bis du es verstanden hast. Man kann immer wieder zurückgehen und nochmal anschauen. +- Falls einige der Vorträge zu mathemtaisch sind, kann man ans untere Ende springen und sich Videos über diskrete Mathematik anschauen um das notwendige Hintergrundwissen zu bekommen. - [ ] [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) +- [ ] [Big O Notations (kleines Tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] [Big O Notation (and Omega and Theta) - beste mathematische Erklärung (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) - [Folien](http://www3.cs.stonybrook.edu/~algorith/video-lectures/2007/lecture2.pdf) @@ -539,10 +539,10 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) - [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) - [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) -- [ ] TopCoder (includes recurrence relations and master theorem): +- [ ] TopCoder (beinhält Differenzgleichungen und Master Theorem - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) -- [ ] [Cheat sheet](http://bigocheatsheet.com/) +- [ ] [Spickzettel](http://bigocheatsheet.com/)
@@ -552,9 +552,9 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit
Datenstrukturen -- ### Arrays - - Implement an automatically resizing vector. - - [ ] Description: +- ### Arrays (Felder) + - implementiere ein automatisch mitwachsenden Vektor + - [ ] Beschreibung: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) @@ -563,93 +563,93 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - - [ ] 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 + - [ ] Implementiere ein Vektor (veränderbares Array was automatisch seine Größe verändert): + - [ ] Übe Arrays und Pointer (Zeiger) zu coden, und benutze Pointerberechnung um ein Element aus einem Array auszuwählen statt den Index zu benutzen. + - [ ] neues Rohdaten-Array mit allokierten Speicher + - man kann intern ein int Array dafür verwenden, aber nicht die Features davon + - fang an mit der Größe 16, oder wenn die Startnummer schön größer ist, benutze 2er-Potenzen - 16, 32, 64, 128 + - [ ] size() - Anzahl der Elmente + - [ ] capacity() - Anzahl der Elemente die es enthalten kann - [ ] is_empty() - - [ ] at(index) - returns item at given index, blows up if index out of bounds + - [ ] at(index) - gibt das Element an der gegebenen Index zurück, expolodiert wenn der Index außerhalb der Grenzen ist - [ ] 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 + - [ ] insert(index, item) - fügt ein Element an der Index-Position ein, schiebt den ursprünglichen Wert vom Index und alle nachfolgenden Elemente eins nach rechts weiter + - [ ] prepend(item) - ist dasselbe wie oben mit Index 0 + - [ ] pop() - entfernt das letzte Element und gibt dessen Wert zurürck + - [ ] delete(index) - lösche das Element an der Indexposition und verschiebe jedes Element danach eins nach links + - [ ] remove(item) - sucht den Wert und entfernt den Index der ihn enthält (auch wenn es mehrere Stellen sind) + - [ ] find(item) - sucht den Wert und gibt den ersten Index mit diesen Wert, -1 wenn der Wert nicht gefunden wird - [ ] 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 + - wenn man die Kapazität erreicht hat, verdopple die Kapazität + - wenn du ein Element löscht und die Größe ist nur 1/4 der Kapazität, halbiere die Kapazität - [ ] Zeit - - O(1) to add/remove at end (amortized for allocations for more space), index, or update + - O(1) um am Ende etwas hinzuzufügen/zu löschen (amortisiert bei Verwendung von zusätzlichen Speicher), Indexzugriff, oder update - O(n) to insert/remove elsewhere - [ ] Speicher - - contiguous in memory, so proximity helps performance - - space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n) + - zusammenhängend im Speicher, Nähe hilft der Performance + - benötigter Speicher = (Array Kapazität, welche >= n ist) * Größe eines Elements, aber selbst bei 2n, immer noch O(n) -- ### Linked Lists +- ### Linked Lists (verkettete Listen) - [ ] Description: - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - - not the whole video, just portions about Node struct and memory allocation. + - nicht das ganze Video nur die Teile über Knotenstruktur und Speicherverwaltung. - [ ] 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. + - [ ] Achtung: du brauchst Wissen über Pointer von Pointern: + (für den Fall, dass man einen Pointer an eine Funktion übergibt und die Funktion die Adresse verändern kann zu der der Pointer zeigt) + Diese Seite ist dafür Pointer von Pointern grob zu verstehen. Ich würde diese Art der Listentraversierung nicht empfehlen. Lesbarkeit und Wartbarkeit leiden darunter wenn man versucht clever zu sein. - [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) + - [ ] Implementierung (ich habe es mit Tail-Pointern gemacht und ohne): + - [ ] size() - gibt Anzahl der Datenelemente in der Liste zurück + - [ ] empty() - bool gibt true zurück wenn leer + - [ ] value_at(index) - gibt den Wert an der Stelle index zurück (angefangen bei 0 für das erste ELement) + - [ ] push_front(value) - fügt eine Element an den Anfang der List ein + - [ ] pop_front() - löscht das erste Element und gibt dessen Wert zurück + - [ ] push_back(value) - fügt ein Element ans Ende ein + - [ ] pop_back() - löscht das letzte Element und gibt dessen Wert zurück + - [ ] front() - hole den Wert des ersten Elements + - [ ] back() - hole den Wert des letzten Elements + - [ ] insert(index, value) - fügt Wert an der Indexposition ein, das neue Element an der Stelle zeigt auf das aktuelle Element an der Stelle + - [ ] erase(index) - löscht das Element an der gegebenen Stelle + - [ ] value_n_from_end(n) - gibt den Wert an der nten Position von hinten zurück + - [ ] reverse() - kehrt die Liste um + - [ ] remove_value(value) - entfernt das erste Element aus der Liste mit diesen Wert + - [ ] Doubly-linked List (doppelt verkettete Listen) + - [Erklärung (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) - gibt keinen Grund das zu implementieren -- ### Stack +- ### Stack (Stapel) - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] Werde ich nicht implementieren. Implementierung mittels Array ist trivial. -- ### Queue +- ### Queue (Warteschlangen) - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - - [ ] 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) + - [ ] Implementierung mittels verketteten Listen, mit Tail-Pointer: + - enqueue(value) - fügt Wert am Ende ein + - dequeue() - gibt das älteste Element (am Anfang der Liste) zurück und löscht es - empty() - - [ ] Implement using fixed-sized array: - - enqueue(value) - adds item at end of available storage - - dequeue() - returns value and removes least recently added element + - [ ] Implementierung mittels Arrays fester Größe: + - enqueue(value) - fügt ein Element am Ende des verfügbaren Speicherplatzes ein + - dequeue() - gibt das älteste Element zurück und löscht es - 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) + - [ ] Kosten: + - eine schlechte Implementierung wo man am Kopf einreiht und am Schwanz ausreiht wäre O(n) + weil man das vorletzte Element braucht, wodurch man die Liste komplett durchgehen muss + - enqueue: O(1) (amortisiert, verkettete Liste und Array) + - dequeue: O(1) (verkettete Liste und Array) + - empty: O(1) (verkettete Liste und Array) -- ### Hash table +- ### Hash table (Hashtabelle) - [ ] 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) @@ -666,37 +666,37 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [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: + - [ ] verteilte Hashtabellen: - [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 + - [ ] Implementierung mit Array und linear probing + - hash(k, m) - m ist die Größe der Hashtabelle + - add(key, value) - falls key schon existiert, wird Wert überschrieben - exists(key) - get(key) - remove(key)
-## More Knowledge +## Mehr
-More Knowledge +Mehr -- ### Binary search +- ### Binärsuche - [ ] [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/competitive-programming/tutorials/binary-search/) - - [ ] Implement: - - binary search (on sorted array of integers) - - binary search using recursion + - [ ] [Details](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/) + - [ ] Implementierung: + - Binärsuche (auf einen sortierten Array von Ganzzahlen) + - Binärsuche mittles Rekursion -- ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: +- ### Bitweise Operationen + - [ ] [Bits Spickzettel](https://github.com/jwasham/coding-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) + - [ ] Erhalte sehr gutes Verständnis Bits zu manipulieren mit: &, |, ^, ~, >>, << + - [ ] [Wörter](https://en.wikipedia.org/wiki/Word_(computer_architecture)) + - [ ] Gute Einführung: [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) @@ -704,52 +704,52 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) - - [ ] 2s and 1s complement + - [ ] Zweier- und Einerkomplement - [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 + - [ ] Bits zählen - [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: + - [ ] zur nächsten Zweierpotenz runden: - [Round Up To Next Power Of Two](https://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) - - [ ] swap values: + - [ ] Werte tauschen: - [Swap](https://bits.stephan-brumme.com/swap.html) - - [ ] absolute value: + - [ ] Absolutwert: - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html)
-## Trees +## Trees (Bäume)
-Trees +Trees (Bäume) -- ### Trees - Notes & Background +- ### Trees - Notizen und Hintergrund - [ ] [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 + - generell Baumerstellung + - Traversieren + - Algorithmen zum Manipulieren - [ ] [BFS(breadth-first search) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - - BFS notes: - - level order (BFS, using queue) - - time complexity: O(n) - - space complexity: best: O(1), worst: O(n/2)=O(n) - - DFS 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) + - BFS (Breitensuche) Notizen: + - Ebenenreihenfolge (BFS, mittels Queue) + - Zeitkomplexität: O(n) + - Speicherkomplexität: beste: O(1), schlechteste: O(n/2)=O(n) + - DFS (Tiefensuche) Notizen: + - Zeitkomplexität: O(n) + - Speicherkomplexität: + beste: O(log n) - durchschnittliche Höhe eines Baumes + schlechteste: O(n) + - inorder (DFS: links, selber, rechts) + - postorder (DFS: links, rechts, selber) + - preorder (DFS: selber, links, rechts) -- ### Binary search trees: BSTs +- ### Binary search trees: BSTs (Binäre Suchbäume) - [ ] [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 + - startet mit Symboltabelle und geht durch die BST Anwendungen - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) - [ ] [MIT (video)](https://www.youtube.com/watch?v=9Jry5-82I68) - C/C++: @@ -764,20 +764,20 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [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 + - [ ] insert // füge Wert in Baum ein + - [ ] get_node_count // gibt ANzahl gespeicherter Werte + - [ ] print_values // gibt die Werte im Baum aus, vom Minimum zum Maximum - [ ] 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 // gibt true zurück wenn der gegebene Wert im Baum vorkommt + - [ ] get_height // gibt die Höhe in Knoten zurück (Höhe eines einzelnen Knotens ist 1) + - [ ] get_min // gibt den kleinsten Wert zurück der im Baum gespeichert ist + - [ ] get_max // gibt den größten Wert zurück der im Baum gespeichert ist - [ ] is_binary_search_tree - [ ] delete_value - - [ ] get_successor // returns next-highest value in tree after given value, -1 if none + - [ ] get_successor // gibt vom gegebenen Wert den nächstgrößeren Wert im Baum zurück, -1 wenn der nicht existiert -- ### Heap / Priority Queue / Binary Heap - - visualized as a tree, but is usually linear in storage (array, linked list) +- ### Heap (Haufen) / Priority Queue (Prioritätswarteschlange) / Binary Heap (Binärer Haufen) + - visualisiert als Baum, aber wächst üblicherweise linear im Speicher (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) @@ -792,39 +792,39 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) - - [ ] Implement a max-heap: + - [ ] Implementierung eines 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). + - [ ] sift_up - gebraucht fürs Einfügen + - [ ] get_max - gibt den größten Wert zurück, ohne ihn zu löschen + - [ ] get_size() - gibt Anzahl gespeicherter Element zurück + - [ ] is_empty() - gibt true zurück wenn der Heap keine Elemente enthält + - [ ] extract_max - gibt das Max-Element zurück, löscht es + - [ ] sift_down - gebraucht für extract_max + - [ ] remove(i) - entfernt Element an Position i + - [ ] heapify - erstellt einen Heap aus einen Array, gebraucht für heap_sort + - [ ] heap_sort() - nimmt ein unsortiertes Array und verwandelt es in ein sortiertes Array (in-place) mittles Max Heap + - Bemerkung: stattdessen einen Min Heap zu verwenden würde weniger Operationen brauchen, aber den Speicherbedarf verdoppeln (kann man nicht in-place machen).
-## Sorting +## Sortierung
-Sorting +Sortierung -- [ ] 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?") +- [ ] Bemerkungen: + - Implementiere Sortierungen und weiß best case/worst case, durchschnittliche Komplexität von jeden: + - kein Bubble Sort - es ist furchtbar - O(n^2), außer wenn n <= 16 + - [ ] Stabilität in Sortieralgorithmen ("Ist Quicksort stabil?") - [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. + - [ ] Welche Algorithmen können mit verketteten Listen genutzt werden? Welche mit Arrays? Welche bei beiden? + - Ich würde nicht empfehlen verkettete Listen zu sortieren, aber Merge Sort ist machbar. - [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. +- Für Heap Sort, siehe Heap Datenstruktur oben. Heap Sort ist toll, aber nicht stabil. - [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) @@ -853,18 +853,18 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [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) -- [ ] Merge Sort code: +- [ ] Merge Sort Code: - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) -- [ ] Quick Sort code: +- [ ] Quick Sort Code: - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) -- [ ] Implement: - - [ ] Mergesort: O(n log n) average and worst case - - [ ] Quicksort O(n log n) average case +- [ ] Implementierung: + - [ ] Mergesort: O(n log n) Durchschnitt und worst case + - [ ] Quicksort O(n log n) Durchschnitt - Selection sort and insertion sort are both O(n^2) average and worst case - For heapsort, see Heap data structure above. From 820013c040a5ed165727ee8db690f649818b9009 Mon Sep 17 00:00:00 2001 From: rene Date: Sun, 7 Jul 2019 14:03:40 +0200 Subject: [PATCH 123/263] - german translation --- translations/README-de.md | 242 +++++++++++++++++++------------------- 1 file changed, 121 insertions(+), 121 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index 2bc9328..b1ac880 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -106,7 +106,7 @@ Liste (Netzwerke, Sicherheit) ansehen. - Adjazenzmatrix - Adjazenzliste - Traversierung: Breitensuche, Tiefensuche -- [Sonstiges](#even-more-knowledge) +- [Noch mehr](#even-more-knowledge) - [Rekursion](#recursion) - [Dynamische Programmierung](#dynamic-programming) - [Object-orientierte Programmierung](#object-oriented-programming) @@ -868,7 +868,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - Selection sort and insertion sort are both O(n^2) average and worst case - For heapsort, see Heap data structure above. -- [ ] Not required, but I recommended them: +- [ ] Nicht vorgeschrieben, aber würde ich empfehlen: - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) @@ -882,8 +882,8 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [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) -As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). -If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +Als Zusammenfassung hier ist eine grafische Darstellung von [15 Sortieralgorithmen](https://www.youtube.com/watch?v=kPRA0W1kECg). +Falls du noch mehr zu dem Thema wissen willst, schau dir "Sortierung" unter [Weitere Details für ausgewählte Themen](#additional-detail-on-some-subjects) an
@@ -892,17 +892,17 @@ If you need more detail on this subject, see "Sorting" section in [Additional De
Graphen -Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. +Graphen können genutzt werden um damit viele verschiedene Probleme in der Informatik darzustellen. Deswegen ist dieser Abschnitt so lang wie Bäume und Sortierung. - Bemerkungen: - - There are 4 basic ways to represent a graph in memory: - - objects and pointers - - adjacency matrix - - adjacency list + - Es gibt 4 verschiedene Arten einen Graph im Speicher zu repräsentieren: + - Objekte und Pointer + - Adjazenzmatrix + - Adjazenzliste - adjacency map - - 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. + - bekanntmachen mit jeder dieser Repräsentationen und ihrer Vor- und Nachteile + - BFS und DFS - kenne Komplexität, ihre Kompromisse, und wie man sie mit echten Code umsetzt + - Wenn eine Frage gestellt wird, suche zuerst nach einer graphbasierten Lösung, dann geh weiter wenn es keine gibt. - [ ] MIT(videos): - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) @@ -931,59 +931,59 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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: +- Kompletter Coursera Kurs: - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) -- 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 +- werde ich implementieren: + - [ ] DFS mit Adjazenzliste (rekursiv) + - [ ] DFS mit Adjazenzliste (iterativ mit Stack) + - [ ] DFS mit Adjazenzmatrix (rekursiv) + - [ ] DFS mit Adjazenzmatrix(iterativ mit Stack) + - [ ] BFS mit Adjazenzliste + - [ ] BFS mit Adjazenzmatrix + - [ ] Kürzester Pfad (Dijkstra) + - [ ] minimaler Spannbaum + - DFS-basierte Algorithmen (siehe Aduni Videos oben): + - [ ] auf Zyklus prüfen (für Topologische Sortierung benötigt, wir prüfen auf Zyklen bevor wir anfangen) + - [ ] Topologische Sortierung + - [ ] zähle Zusammenhangskomponenten in einen Graph + - [ ] liste starke Zusammenhangskomponenten auf + - [ ] prüfe ob es ein bipartiter Graph ist
-## Even More Knowledge +## Noch mehr
-Even More Knowledge +Noch mehr -- ### Recursion - - [ ] Stanford lectures on recursion & backtracking: +- ### Rekursion + - [ ] Stanford Vorlesung über Recursion und 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? + - wann sollte man es benutzen + - Wann ist Endrekursion gut? - [ ] [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 - - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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. +- ### Dynamische Programming + - Wahrscheinlich wirst du im Vorstellungsgespräch nichts mit dynamischer Programmierung zu tun haben, aber es ist wert zu erkennen wann ein Problem für dynaische Programmierung geeignet ist. + - Dieses Thema kann ziemlich schwer sein. Jedes DP Problem muss als Rekursion dargestellt werden, und darauf zu kommen kann schwer sein. + - Ich schlage vor, dass man sich viele DP Probleme ansieht bis man ein gutes Verständnis vom zugrundeliegenden Muster hat. - [ ] Videos: - - the Skiena videos can be hard to follow since he sometimes uses the whiteboard, which is too small to see + - die Skiena Videos kann man manchmal schwer folgen, weil er manchmal auf einer Tafel schreibt was zu klein zum Lesen ist - [ ] [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 0 (fängt an bei 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): + - [ ] Liste einzelnen DP Problemen (jedes Problem ist klein): [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - - [ ] Yale Lecture notes: + - [ ] Yale Vorlesungsnotizen: - [ ] [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) @@ -994,71 +994,71 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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) -- ### Object-Oriented Programming +- ### Objekt-Orientierte Programmierung - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - [ ] Object-Oriented Software Engineering: Software Dev Using UML and Java (21 videos): - - Can skip this if you have a great grasp of OO and OO design practices. + - kann man überspringen wenn man gutes Wissen über OO und OO Design Patterns hat - [OOSE: Software Dev Using UML and Java (video)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) - [ ] SOLID OOP Prinzipien: - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) - [ ] [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) + - [mehr dazu](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 but 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) + - [mehr dazu](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) + - [mehr dazu](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) + - [mehr dazu](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) + - [mehr dazu](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) -- ### Design patterns +- ### Design Patterns (Entwurfsmuster) - [ ] [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 + - [ ] Learn diese Patterns: + - [ ] Strategy + - [ ] Singleton + - [ ] Adapter + - [ ] Prototype + - [ ] Decorator + - [ ] Visitor (Besucher) + - [ ] Factory (Fabrik), abstract factory (abstrakte Fabrik) + - [ ] Facade + - [ ] Observer (Beobachter) + - [ ] Proxy + - [ ] Delegate + - [ ] Command + - [ ] State + - [ ] Memento + - [ ] Iterator + - [ ] Composite + - [ ] Flyweight (Fliegengewicht) - [ ] [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. + - Ich weiß das anerkannte Buch ist "Design Patterns: Elements of Reusable Object-Oriented Software", aber Head First ist großartig wenn man mit OO einsteigt. - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) -- ### Combinatorics (n choose k) & Probability +- ### Kombinatorik (n über k) und Wahrscheinlichkeit - [ ] [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: + - Kursstruktur: - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) - - Just the videos - 41 (each are simple and each are short): + - Nur die Videos - 41 (jedes ist kurz und leicht zu verstehen): - [ ] [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. +- ### NP, NP-vollständig und Heuristiken + - Kenne die bekanntesten NP-vollständigen Probleme, wie z.B. Traveling Salesman und das Rucksackproblem, + und sei in der Lage die zu erkennen wenn ein Interviewer heimlich danach frägt. + - Wissen was NP-vollständig bedeutet. - [ ] [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) @@ -1072,9 +1072,9 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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 Norvig discusses near-optimal solutions to traveling salesman problem: + - Peter Norvig beschreibt annähernd optimale Lösungen für das Traveling Salesman Problem: - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) - - Pages 1048 - 1140 in CLRS if you have it. + - Seite 1048 - 1140 in CLRS falls man es besitzt. - ### Caches - [ ] LRU cache: @@ -1085,49 +1085,49 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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 +- ### Prozesse und Threads - [ ] Computer Science 162 - Operating Systems (25 videos): - - for processes and threads see videos 1-11 + - für Prozesse und Threads siehe Videos 1-11 - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 + - behandelt: + - Prozesse, Threads, Concurrency issues (Probleme von Parallelität) + - Unterschied zwischen Prozessen und Threads + - Prozesse + - Threads + - Locks + - Mutexe + - Semaphoren + - Monitore + - wie sie funtionieren + - Deadlock + - Livelock + - CPU Äktivität, Interrupts, Kontextwechsel + - Moderne Parallelität mit Multicore Prozessoren - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - [Scheduling (video)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) - - 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 the 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 + - Prozess-Ressourcenverwaltung (Speicher: Code, statischer Speicher, Stack, Heap, und auch Datei-Handle, I/O) + - Thread-Ressourcenverwaltung (teilt sich das obere (minus Stack) mit anderen Threads in selben Prozess aber jeder mit einzelnen Befehlszähler, Stackzähler, Registern, und Stack) + - Forking ist einfach Copy on Write (nur lesend) bis der neue Prozess in den Speicher schreibt, dann wird eine komplette Kopie erstellt. + - Kontextwechsel + - Wie wird Kontextwechsel vom Betriebssystem und der zugrundeliegenden Hardware gehandhabt - [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) - - [ ] concurrency in Python (videos): + - [ ] Parallelität 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) + - [Referenz](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) -- ### Testing - - To cover: - - how unit testing works - - what are mock objects - - what is integration testing - - what is dependency injection +- ### Testen + - zu behandeln: + - wie Unit Tests funktionieren + - was sind Mockobjekte + - was ist ein Integration Test + - Was ist 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) @@ -1142,10 +1142,10 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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 + - in einen Betriebssystem, wie funktioniert es + - kann von Betriebssystem Videos gelernt werden -- ### String searching & manipulations +- ### Stringsuche und -manipulation - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) @@ -1161,12 +1161,12 @@ Graphs can be used to represent many problems in computer science, so this secti - 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. - - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [Sedgewick - Tries (3 Videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) - [ ] [Notes on Data Structures and Programming Techniques](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries) - - [ ] Short course videos: + - [ ] Kurze Kursvideos: - [ ] [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) @@ -1244,7 +1244,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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/) -- [ ] Consensus Algorithms: +- [ ] Consensus Algorithmen: - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) - [ ] [Easy-to-read paper](https://raft.github.io/) @@ -1252,7 +1252,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Skalierbarkeit: - - You don't need all of these. Just pick a few that interest you. + - Das braucht man nicht alles. Sucht euch einfach die paar Themen raus die euch interessieren. - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) - [ ] Kurzreihen: - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) @@ -1916,7 +1916,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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) -- [ ] **More Dynamic Programming** (videos) +- [ ] **Mehr Dynamische Programmierung** (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) @@ -1981,7 +1981,7 @@ Lehn dich zurück und genieße. "Netflix and skill" :P
Videoreihen -- [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) +- [ ] [Liste einzelnen Dynamische Programmierung Probleme (jedes ist kurz)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - [ ] [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) @@ -1996,7 +1996,7 @@ Lehn dich zurück und genieße. "Netflix and skill" :P - [ ] [Discrete Mathematics Part 1 von Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) - [ ] CSE373 - Analysis of Algorithms (25 videos) - - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) + - [Skiena Vorlesungen vom 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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) @@ -2035,7 +2035,7 @@ Lehn dich zurück und genieße. "Netflix and skill" :P - [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) - [ ] [Introduction to Cryptography von Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) - - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) + - [KurswWebseite mit Folien und Problemstellungen](http://www.crypto-textbook.com/) - [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) @@ -2043,10 +2043,10 @@ Lehn dich zurück und genieße. "Netflix and skill" :P
-## Computer Science Courses +## Informatikkurse -- [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) +- [Liste von Online Informatkkursen](https://github.com/open-source-society/computer-science) +- [Liste von Informatkkursen (viele mit Online Vorlesungen)](https://github.com/prakhar1989/awesome-courses) ## Paper (Wissenschaftliche Artikel) From 39bb290dc5d71fada0b9787e7b2b1b9a141da550 Mon Sep 17 00:00:00 2001 From: rene Date: Mon, 8 Jul 2019 23:56:42 +0200 Subject: [PATCH 124/263] - german translation --- translations/README-de.md | 374 +++++++++++++++++++------------------- 1 file changed, 188 insertions(+), 186 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index b1ac880..010bc13 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -121,16 +121,16 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Tries (Präfixbäume)](#tries) - [Fließkommazahlen](#floating-point-numbers) - [Unicode](#unicode) - - [Byte-Reihenfolge](#endianness) + - [Endianness (Byte-Reihenfolge)](#endianness) - [Netzwerke](#networking) -- [Systementwurf, Skalierbarkeit, Datenverarbeitung](#system-design-scalability-data-handling) (if you have 4+ years experience) -- [Abschließende Prüfung](#final-review) -- [Coding Fragen Übung](#coding-question-practice) +- [Systementwurf, Skalierbarkeit, Datenverarbeitung](#system-design-scalability-data-handling) (wenn du 4+ Jahre erfahrung hast) +- [Finaler Rückblick](#final-review) +- [Übungen zu Programmieraufgaben](#coding-question-practice) - [Programmieraufgaben/Wettbewerbe](#coding-exerciseschallenges) - [Wenn das Vorstellungsgespräch bald ansteht](#once-youre-closer-to-the-interview) - [Dein Lebenslauf](#your-resume) - [Denk dran wenn das Vorstellungsgespräch kommt](#be-thinking-of-for-when-the-interview-comes) -- [Stell fragen an den Interviewer](#have-questions-for-the-interviewer) +- [Stell Fragen an den Interviewer](#have-questions-for-the-interviewer) - [Wenn du den Job bekommst](#once-youve-got-the-job) ---------------- Alles unter der Linie ist optional ---------------- @@ -177,7 +177,7 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Geometrie, Konvexe Hülle](#geometry-convex-hull-videos) - [Diskrete Mathematik](#discrete-math) - [Machine Learning (maschinelles Lernen)](#machine-learning) -- [Weitere Details für ausgewählte Themen](#additional-detail-on-some-subjects) +- [Weitere Details zu ausgewählten Themen](#additional-detail-on-some-subjects) - [Videoreihen](#video-series) - [Infomatikkurse](#computer-science-courses) - [Paper (Wissenschaftliche Artikel)](#papers) @@ -1155,12 +1155,12 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + Wer noch mehr Details zu diesen Thema erfahren möchte, sollte sich den "String Matching" Abschnitt unter [Weitere Details zu ausgewählten Themen](#additional-detail-on-some-subjects) ansehen -- ### 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. +- ### Tries (Präfixbäume) + - Achtung, es gibt mehrere Arten von Tries. Manche haben Präfixe, manche nicht, und manche benutzen Strings anstelle von Bits + um den Pfad zu markieren. + - Ich habe mir den Code durchgelesen, aber werde es nicht selber implementieren. - [ ] [Sedgewick - Tries (3 Videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) @@ -1175,24 +1175,24 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) -- ### Floating Point Numbers - - [ ] 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) +- ### Fließkommazahlen + - [ ] 8 Bit: [Representation of Floating Point Numbers - 1 (Video - es gibt einen Fehler in den Berechnungen - siehe Videobeschreibung)](https://www.youtube.com/watch?v=ji3SfClm8TU) + - [ ] 32 Bit: [IEEE754 32-bit floating point binary (video)](https://www.youtube.com/watch?v=50ZYcZebIec) - ### 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 +- ### Endianness (Byte-Reihenfolge) - [ ] [Big And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. + - Sehr technischer Vortrag für Kernel-Devs. Keine Sorge wenn du das meiste nicht verstehst. + - Die erste Hälfte ist ausreichend. -- ### Networking - - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - - otherwise, this is just good to know +- ### Netzwerke + - **Wenn man Erfahrungen mit Netzwerken hat oder Reliability Engineer oder Operations Engineer werden will, erwartet Fragen dazu** + - ansonsten, ist es nur gut zu wissen - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) @@ -1209,36 +1209,36 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor
-## System Design, Scalability, Data Handling +## Systementwurf, Skalierbarkeit, Datenverarbeitung
-System Design, Scalability, Data Handling +Systementwurf, Skalierbarkeit, Datenverarbeitung -**You can expect system design questions if you have 4+ years of experience.** +**Man kann mit Fragen über Systementwurf rechnen, falls man 4+ Erfahrung hat.** -- 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. -- Considerations: - - 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 +- Skalierbarkeit und Systementwurf sind sehr große Themengebiete mit vielen verschiedenen Themen und Quellen, + weil es so viel zu beachten gibt wenn man eine Software/Hardware baut die skalierbar ist. + Erwarte viel Zeit damit zu verbringen. +- Überlegungen: + - Skalierbarkeit + - vereinfache große Datenmengen zu Einzelwerten + - Transformiere einen Datensatz in einen anderen + - gehe mit absurd großen Datenmenegen um + - Systementwurf + - Feature Sets + - Schnittstelen + - Klassenhierarchien + - entwerfe System unter bestimmte Vorgaben + - Einfachheit und Robustheit + - Kompromisse + - Performance Analyse und Optimierung - [ ] **HIER ANFANGEN**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [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. +- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - Es gibt hier viele Quellen. Sieh dir Artikel und Beispiel an. Ich habe ein paar davon unten hingeschrieben. - [ ] [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) @@ -1301,59 +1301,59 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [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 + - [ ] Siehe "Messaging, Serialization und Queueing Systems" weiter unten für Infos über manche Technologien die Services miteinander verbinden können - [ ] 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](#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: + - Für sogar noch mehr, siehe "Mining Massive Datasets" Videoreihen im [Videoreihen](#video-series) Abschnitt. +- [ ] Übe den Prozess des Systementwurfs: Hier sind ein paar Ideen die man auf Papier durchspielen kann, jede mit einer Dokumentation wie es in der echten Welt umgesetzt wurde: - Review: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - - [cheat sheet](https://github.com/jwasham/coding-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 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/) + - [Spickzettel](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) + - Ablauf: + 1. Verstehe das Problem und den Umfang: + - definiere den Anwendungsfall , was dem Interviewer helfen wird + - schlage zusätzliche Funktionen vor + - entferne Elemente die laut Interviewer nicht zum Umfang passen + - nimme an das hohe Erreichbarkeit gefordert ist, füge das zu den Anwendungsfällen hinzu + 2. Denke über Beschränkungen nach: + - frag wie viele Anfragen im Monat es gibt + - frag wie viele Anfragen in der Sekunde es gibt (sie sagen es entweder freiwillig oder du solltest es selbst ausrechnen) + - schätze prozentuales Verhältnis zwischen Lese- und Schreibzugriffe + - denk an die 80/20 Regel in mind bei der Schätzung + - wie viel Daten pro Sekunde geschrieben werden + - absoluter Speicherverbrauch für 5 Jahre + - wie viele Daten pro Sekunde gelesen werden + 3. Abstrakter Entwurf: + - Ebenen (Service, Daten, Caching) + - Infrastruktur: Load Balancing, Messaging + - grobe Übersicht einiger Schlüsselalgorithmen die den Service antreiben + - berücksichtige Flaschenhalse und finde Lösungen + - Übungen: + - [Entwerfe ein CDN Netzwerk: alter Artikel](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) + - [Entwerfe ein System um zufällige einmalige IDs zu generieren](https://blog.twitter.com/2010/announcing-snowflake) + - [Entwerfe ein Online Multiplayer Kartenspiel](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html) + - [Entwerfe eine Key-Value Datenbank](http://www.slideshare.net/dvirsky/introduction-to-redis) + - [Entwerfe einen System um Bilder zu teilen](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) + - [Entwerfe ein Empfehlungssystem](http://ijcai13.org/files/tutorial_slides/td3.pdf) + - [Entwerfe ein URL-Shortener System: von oben kopiert](http://www.hiredintech.com/system-design/the-system-design-process/) + - [Entwerfe ein Cache System](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/)
--- -## Final Review +## Finaler Rückblick
-Final Review +Finaler Rückblick - This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. - It's nice if you want a refresher often. + Dieser Abschnitt enthält kürzere Videos die man sich ziemlich schnell anschauen kann um die wichtigsten Konzepte nochmal zu wiederholen. + Das ist ganz gut falls man sein Wissen öfter mal auffrischen möchte. -- [ ] Series of 2-3 minutes short subject videos (23 videos) +- [ ] Reihe mit kurzen 2-3 Minuten 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): +- [ ] Reihe mit kurzen 2-5 Minuten Videos - Michael Sambol (18 videos): - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1362,67 +1362,68 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor --- -## Coding Question Practice +## Übungen zu Programmieraufgaben
-Coding Question Practice +Übungen zu Programmieraufgaben -Now that you know all the computer science topics above, it's time to practice answering coding problems. +Jetzt da ihr alle Informatikfragen von oben kennt, wird es Zeit Antworten auf Codingfragen zu üben. -**Coding question practice is not about memorizing answers to programming problems.** +**Bei den Übungen geht es nicht darum sich die Antworten zu merken.** -Why you need to practice doing programming problems: -- problem recognition, and where the right data structures and algorithms fit in -- gathering requirements for the problem -- talking your way through the problem like you will in the interview -- coding on a whiteboard or paper, not a computer -- coming up with time and space complexity for your solutions -- testing your solutions +Warum du üben musst Programmieraufgaben zu lösen: +- Probleme wiedererkennen, und welche Datenstrukturen und Algorithmen sich dazu eignen +- Anforderungen an das Problem sammeln +- das Problem zu besprechen wie man es im Vorstellungsgespräch tun würde +- auf der Tafel oder dem Papier zu entwickeln, nicht auf den Computer +- die Zeit- und Speicherkomplexität zu ermittlen +- sein Lösung zu testen -There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming -interview books, too, but I found this outstanding: -[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) +Es gibt eine großartige Einführung für das methodische, kommunikative Problem lösen in einem Vorstellungsgespräch. +Das kann man auch von Büchern über Vorstellungsgespräche lernen, aber das fand ich herausragend: +[Algorithm Design Canvas](http://www.hiredintech.com/algorithm-design/) -No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a -large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. +Keine Tafel zu hause? Macht Sinn. Ich bin ein Spinner und habe eine große Tafel. +Anstelle einer Tafel hol dir ein großes Zeichenbrett aus dem Kunstladen. Du kannst auf dem Sofa sitzen und üben. +Das ist meine "Sofatafel". Ich habe auf den Foto ein Stift dazu gelegt um die Größenverhältnisse darzustellen. +Wenn man mit Stift schreibt, wünscht man sich man könnte löschen. Wird schnell sehr unordentlich. -![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) +![meine Sofatafel](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) -Supplemental: +Zusatz: - [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) - [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) - [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) - [Exercises for getting better at a given language](http://exercism.io/languages) -**Read and Do Programming Problems (in this order):** +**Lese und löse Programmieraufgaben (in dieser Reihenfolge):** - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C, C++ and Java + - Antworten in C, C++ und Java - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - Antworten in Java -See [Book List above](#book-list) +Siehe [Buchliste oben](#book-list)
-## Coding exercises/challenges +## Programmieraufgaben/Wettbewerbe
-Coding Question Practice +Programmieraufgaben/Wettbewerbe -Once you've learned your brains out, put those brains to work. -Take coding challenges every day, as many as you can. +Nachdem du dir die grauen Zellen weg gelernt hast, lass die grauen Zellen arbeiten. +Nimm jeden Tag eine Herausforderung an, so viele wie du kannst. - [ ] [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) - [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) -Coding Interview Question Videos: +Videos über Codingfragen im Vorstellungsgespräch: - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) -Challenge sites: +Wettbewerbsseiten: - [LeetCode](https://leetcode.com/) - [TopCoder](https://www.topcoder.com/) - [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) @@ -1436,7 +1437,7 @@ Challenge sites: - [Sphere Online Judge (spoj)](http://www.spoj.com/) - [Codechef](https://www.codechef.com/) -Challenge repos: +Wettbewerbsrepos: - [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) Mock Interviews: @@ -1446,119 +1447,120 @@ Mock Interviews:
-## Once you're closer to the interview +## Wenn das Vorstellungsgespräch bald ansteht -- [ ] Cracking The Coding Interview Set 2 (videos): +- [ ] Cracking The Coding Interview Teil 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) -## Your Resume +## Dein Lebenslauf -- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed +- Siehe Lebenslauf Vorbereitung in Cracking The Coding Interview und den hinteren Teil von Programming Interviews Exposed -## Be thinking of for when the interview comes +## Denk dran wenn das Vorstellungsgespräch kommt -Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. -Have a story, not just data, about something you accomplished. +Rechne mit 20 Interviewfragen die dir gestellt werden, zusammen mit den unteren Zeilen. Bereite 2 - 3 Antworten für jede vor. +Bereite ein Geschichte vor, nicht nur ein paar Infos, über etwas das du erreicht hast. -- 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 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]? +- Warum möchtest du den Job? +- Was ist ein schweres Problem das du gelöst hast? +- Die größte Herausforderung vor der du standest? +- Bester/schlechtester Entwurf den du gesehen hast? +- Ideen um ein bestehendes Produkt zu verbessern. +- Wie arbeitest du am Besten, als Individuum und als Teil eines Teams? +- Welche deiner Fertigkeiten und Erfahrungen würden dir in der Rolle helfen und warum? +- Was hat dir am meisten Spaß gemacht an [Job x / Projekt y]? +- Was war die größte Herausforderung im [Job x / Projekt y]? +- Was war der schwerste Bug den du bearbeitet hast in [Job x / Projekt y]? +- Was hast du in [Job x / Projekt y] gelernt? +- Was hättest du gerne besser gemacht in [Job x / Projekt y]? -## Have questions for the interviewer +## Stell Fragen an den Interviewer - Some of mine (I already may know answer to but want their opinion or team perspective): + Einige von meinen (ich weiß vielleicht schon die Antwort aber möchte gerne ihre Meinung oder die Meinung des Teams hören): -- How large is your team? -- What does 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? +- Wie groß ist das Team? +- Wie sieht der Entwicklungszyklus aus? Macht ihr Wasserfall/Sprints/agil? +- Wird oft zu Abgabeterminen gehetzt? Oder seid ihr flexibel? +- Wie werden Entscheidungen in euren Team getroffen? +- Wie viele Meetings habt ihr pro Woche? +- Hilft dir die Arbeitsumgebung dich zu konzentrieren? +- Woran arbeitet ihr gerade? +- Was gefällt dir daran? +- Wie ist das Arbeitsleben so? -## Once You've Got The Job +## Wenn du den Job bekommst -Congratulations! +Gratulation! -Keep learning. +Lerne weiter. -You're never really done. +Man ist nie wirklich fertig. --- ***************************************************************************************************** ***************************************************************************************************** - Everything below this point is optional. - By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for - any software engineering job. You'll be a much more well-rounded software engineer. + Alles unterhalb hiervon ist optional. + Wenn man das studiert, bekommt man mehr Wissen zu Informatikkonzepten, und wird besser auf + einen Software Engineer Job vorbereitet sein. + Everything below this point is optional. Man ist dann ein abgerundeterer Software Engineer. ***************************************************************************************************** ***************************************************************************************************** --- -## Additional Books +## Zusätzliche Bücher
-Additional Books +Zusätzliche Bücher - [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - - an oldie but a goodie + - alt aber gut - [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - a modern option + - eine moderne Variante - [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) - [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns + - eine behutsame Einführung zu Design Patterns - [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - - aka the "Gang Of Four" book, or GOF - - the canonical design patterns book + - auch bekannt als das "Gang Of Four" Buch, oder GOF + - das anerkannte Buch zu Design Patterns - [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - Can rent it on kindle - - 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/) + - Als ein Rückblick und zur Problemerkennung + - Der Katalog an Algorithmen ist weit über den Schwierigkeitsgrad den man in Vorstellungsgesprächen hat. + - Dieses Buch besteht aus 2 Teilen: + - Textbuch über Datenstrukturen und Algorithmen + - Vorteile: + - guter Rückblick wie jedes Algorithmen Textbuch es wäre + - nette Erfahrungsberichte wie er Probleme gelöst hat aus der Industrie oder in der akademischen Welt + - Codebeispiele in C + - Nachteile: + - kann so vollgestopft und unzugänglich sein wie CLRS, und bei einigen Themen wäre CLRS die bessere Wahl + - Kapitel 7, 8, 9 sind extrem schwer zu folgen, weil einige Dinge nicht gur erklärt werden oder ich einfach zu dumm bin + - versteh mich nicht falsch: Ich mag Skiena, seine Art zu Unterrichten, seine Eigenheiten, aber ich mag nicht das Stony Brook Material. + - Algorithmenkatalog: + - Das ist der eigentliche Grund weswegen ich dieses Buch gekauft habe. + - muss mich noch einlesen. Werde das hier ergänzen sobald ich durch bin. + - kann man auf den Kindle ausleihen + - Antworten: + - [Lösungen](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) + - [Lösungen](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) - [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - aka CLR, sometimes CLRS, because Stein was late to the game + - **Wichtig:** Das Buch zu lesen ist nur eingschränkt von Nutzen. Das Buch ist ein toller Rückblick auf Algorithmen und Datenstrukturen, aber man lernt dadurch nicht guten Code zu schreiben. Man muss in der Lage sein effizient vernünftigen Code zu schreiben. + - aka CLR, manchmal CLRS, weil Stein erst später dazu kam - [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - - For a richer, more up-to-date (2017), but longer treatment + - Für eine tiefere, aktuellere (2017), aber auch längere Behandlung - [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. + - Die ersten paar Kapitel beinhalten clevere Lösungen auf Programmieraufgaben (einige sehr alte mit Datenkasetten) aber + es reicht aus für eine Einführung. Das ist ein Ratgeber zu Programmentwurf und -architektur, vergleichbar mit Code Complete, aber viel kürzer.
@@ -1572,18 +1574,18 @@ You're never really done. These topics will likely not come up in an interview, but I added them to help you become a well-rounded software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox. -- ### Compilers +- ### Compiler - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - [ ] [Harvard 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) -- ### Emacs and vi(m) +- ### Emacs und vi(m) - 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: + - Reihe mit 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) @@ -1591,7 +1593,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [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): + - Reihe mit 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) @@ -1869,7 +1871,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - see videos below - ### Machine Learning - - [ ] Why ML? + - [ ] Warum 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) @@ -1878,9 +1880,9 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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: + - Kurse: - [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning) - - [videos only](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) + - [nur Videos](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) @@ -1899,10 +1901,10 @@ software engineer, and to be aware of certain technologies and algorithms, so yo --- -## Additional Detail on Some Subjects +## Weitere Details zu ausgewählten Themen
-Additional Detail on Some Subjects +Weitere Details zu ausgewählten Themen 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. @@ -1976,7 +1978,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo ## Videoreihen -Lehn dich zurück und genieße. "Netflix and skill" :P +Zurücklehnen und genießen. "Netflix and skill" :P
Videoreihen From 2cdf63096b57d6b4276794aa2113727d34d5ea30 Mon Sep 17 00:00:00 2001 From: rene Date: Wed, 10 Jul 2019 23:11:11 +0200 Subject: [PATCH 125/263] - german translation --- translations/README-de.md | 236 +++++++++++++++++++------------------- 1 file changed, 119 insertions(+), 117 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index 010bc13..d742543 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -149,9 +149,9 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Kryptographie](#cryptography) - [Kompression](#compression) - [Sicherheit](#computer-security) - - [Garbage collection (automatische Speicherverwaltung)](#garbage-collection) + - [Garbage collection (automatische Speicherbereinigung)](#garbage-collection) - [Parallelisierung](#parallel-programming) - - [Messaging, Serialisierung und Queueing Systems](#messaging-serialization-and-queueing-systems) + - [Messaging, Serialisierung und Queueing Systeme](#messaging-serialization-and-queueing-systems) - [A*](#a) - [Fast Fourier Transform](#fast-fourier-transform) - [Bloom Filter](#bloom-filter) @@ -159,17 +159,17 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Locality-Sensitive Hashing](#locality-sensitive-hashing) - [van Emde Boas Trees](#van-emde-boas-trees) - [Augmentierte Datenstrukturen](#augmented-data-structures) - - [Balancierte Suchbäume](#balanced-search-trees) + - [Balanced search trees (Balancierte Suchbäume)](#balanced-search-trees) - AVL Bäume - Splay Bäume - Rot-Schwarz-Bäume - - 2-3 Suchbäume + - 2-3 Bäume - 2-3-4 Bäume (aka 2,4 Bäume) - N-fache (K-fache, M-fache) Bäume - B-Bäume - [k-D Bäume](#k-d-trees) - - [Skip-Listen](#skip-lists) - - [Netwerk Flüsse und Schnitte](#network-flows) + - [Skip Listen](#skip-lists) + - [Netzwerkflüsse](#network-flows) - [Disjunkte Mengen & Union Find](#disjoint-sets--union-find) - [Mathematik für schnelle Berechnungen](#math-for-fast-processing) - [Treap](#treap) @@ -1566,13 +1566,14 @@ Man ist nie wirklich fertig.
-## Additional Learning +## Zusätzliches Wissen
-Additional Learning +Zusätzliches Wissen -These topics will likely not come up in an interview, but I added them to help you become a well-rounded -software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox. +Diese Themen werden vermutlich nicht in einen Vorstellungsgepräch aufkommen, aber ich habe sie trotzdem hinzugeüfgt +um euch dabei zu helfen ein vollständiger Software Engineer zu werden und damit ihr über bestimmte Technologien und +Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt. - ### Compiler - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) @@ -1581,7 +1582,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU) - ### Emacs und vi(m) - - Familiarize yourself with a unix-based code editor + - macht euch bekannt mit Unix-basierten Code Editoren - 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/) @@ -1601,8 +1602,8 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [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 - - I filled in the list below from good tools. +- ### Unix Kommandozeilenwerkzeuge + - Ich habe in die Liste unten nützliche Werkzeuge gepackt. - [ ] bash - [ ] cat - [ ] grep @@ -1615,13 +1616,13 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [strace](https://en.wikipedia.org/wiki/Strace) - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/) -- ### Information theory (videos) +- ### Informationstheorie (Videos) - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory) - - [ ] more about Markov processes: + - [ ] mehr über Markov-Prozesse: - [ ] [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. + - für mehr, siehe "MIT 6.050J: Information and Entropy" weiter unten. - ### Parität und Hamming Code (videos) - [ ] [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) @@ -1631,20 +1632,20 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [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 +- ### Entropie + - siehe Videos unten + - stell sicher, dass du zuerst die Informationstheorie Videos gesehen hast - [ ] [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 +- ### Kryptographie + - siehe Videos unten + - stell sicher, dass du zuerst die Informationstheorie Videos gesehen hast - [ ] [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 +- ### Kompression + - stell sicher, dass du zuerst die Informationstheorie Videos gesehen hast - [ ] Computerphile (videos): - [ ] [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w) - [ ] [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko) @@ -1655,7 +1656,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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) -- ### Computer Security +- ### Sicherheit - [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) @@ -1670,16 +1671,16 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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 (automatische Speicherbereinigung) - [ ] [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 +- ### Parallelisierung - [ ] [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) -- ### Messaging, Serialization, and Queueing Systems +- ### Messaging, Serialisierung und Queueing Systeme - [ ] [Thrift](https://thrift.apache.org/) - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) - [ ] [Protocol Buffers](https://developers.google.com/protocol-buffers/) @@ -1714,7 +1715,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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) + - Gegeben ein Bloom Filter mit m Bits und k Hashingfunktionen, beides insertion und membership-Tests sind O(k) - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](https://www.youtube.com/watch?v=qBTdukbzc78) - [Tutorial](http://billmill.org/bloomfilter-tutorial/) @@ -1732,143 +1733,144 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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 +- ### Augmentierte Datenstrukturen - [ ] [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) -- ### Balanced search trees - - Know at least one type of balanced binary tree (and know how it's implemented): +- ### Balanced search trees (Balancierte Suchbäume) + - mind. 1 Art von Balancierten Suchbäumen kennen (und wissen wie es implementiert wird) - "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. + - Ich habe mich dazu entschieden einen Splay Tree zu implementieren. Von dem was ich gelesen habe, wird man kein + balanciereten Suchbaum in einem Vorstellungsgespräch implementieren. ABer ich wollte die Erfahrung machen selber einen zu coden + und seien wir mal ehrlich, Splay Trees sind Alleskönner. Ich habe eine Menge Code für Rot-Schwarz Bäume gelesen. + - Splay Tree: insert, search, delete Funktionen + Falls man mit einen Rot-Schwarz Baum endet, versuch das: + - search und insertion Funktionen, delete überspringen + - Ich möchte mehr über B-Bäume lernen da sie so weit verbreitet sind bei riesigen Datenmengen. - [ ] [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). + - [ ] **AVL Trees** + - In der Praxis: + Meines Wissens nach werden sie nicht so oft in der Praxis verwendet, aber ich könnte mir vorstellen wo sie verwendet werden: + Der AVL Tree ist eine weitere Datenstruktur die O(log n) Suchen, Einfügen und Löschen unterstützt. + Sie sind strenger balanciert als Rot-Schwarz Bäume, was das EInfügen und Löschen verlangsamt aber das Auslesen beschleunigt. + Das macht sie attraktiv für Datenstrukturen die nur einmal aufgebaut und geladen werden ohne Umbau, + so wie Wörterbücher für Sprachen (oder für Programme, wie z.B. der Opcode eines Assemblers oder Interpreters). - [ ] [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. + - [ ] **Splay Trees** + - In der Praxis: + Splay Trees werden typischerweise bei der Implementierung von Caches, Speicherverwaltung, Routers, Garbage Collectoren, + Datenkompression, Ropes (Ersatz für String, gebraucht für lange Texte), in Windows NT (im virtuellen Speicher, + Netzwerk und Dateisystem Code) etc. verwendet - [ ] [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - - [ ] MIT Lecture: Splay Trees: - - Gets very mathy, but watch the last 10 minutes for sure. + - [ ] MIT Vorlesung: Splay Trees: + - Wird sehr mathematisch, aber man sollte sich auf jeden Fall die letzten 10 Minuten ansehen. - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - - [ ] **Red/black trees** - - these are a translation of a 2-3 tree (see below) - - 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) + - [ ] **Red/black trees (Rot-Schwarz Bäume)** + - sind eine umgewandelte Form von 2-3 Bäumen (siehe unten) + - In der Praxis: + Rot-Schwarz Bäume bieten eine worst-case Laufzeitgarantie für Einfügen, Löschen und suchen. + Das macht sie nicht nur wertvoll für zeitkritische Anwendungen wie Echtzeitanwendungen, + sondern es macht sie auch zu wertvollen Bausteinen in andere Datenstrukturen mit worst-case Garantien. + Z.B. viele Datenstrukturen aus der algorithmischen Geometrie können auf Rot-Schwarz Bäumen basieren, + und der Completely Fair Scheduler der in aktuellen Linux Kernels verwendet wird benutzt Rot-Schwaz Bäume. + In Java 8 wurde die Collection Hashmao so angepasst, dass anstelle einer verketteten Listen ein Rot-Schwarz Baum + benutzt wird um identische Elemente mit schlechten Hashwerten zu speichern. + - [ ] [Aduni - Algorithms - Lecture 4 (Link springt direkt zum Anfang) (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) - [ ] [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) - - [ ] **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. + - [ ] **2-3 Bäume** + - In der Praxis: + Bei 2-3 Suchbäumen kann man schneller einfügen zu Lasten von langsameren Suchen (weil die Höhe größer ist verglichen mit AVL Trees). + - Man würde einen 2-3 Tree nur sehr selten verwenden, weil deren Implementierung mehrere verschiedene Arten von Knoten umfasst. Stattdessen benutzt man Rot-Schwarz Bäume. - [ ] [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**. + - [ ] **2-3-4 Bäume (aka 2-4 Bäume)** + - In der Praxis: + Für jeden 2-4 Baum exist ein Rot-Schwarz Baum mit Datenelementen in der selben Reihenfolge. + Das Einfügen und Löschen auf 2-4 Bäumen ist äquivalent zum Farbwechsel und Rotation im Rot-Schwarz Baum. + Das macht 2-4 Bäume zu einen wichtigen Werkzeug um die Logik hinter Rot-Schwarz Bäumen zu verstehen, + und deswegen führen viele Algorithmen Bücher für Einsteiger 2-4 Bäume direkt vor Rot-Schwarz Bäumen ein + selbst obwohl **2-4 trees nicht oft in der Praxis benutzt werden**. - [ ] [CS 61B Lecture 26: Balanced Search Trees (video)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - [ ] [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) - - [ ] **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 + - [ ] **N-fache (K-fache, M-fache) Bäume** + - Notiz: das N oder K ist der Verzweigungsgrad (max Zweige) + - Binärbäume sind 2-fache Bäume, mit Verzweigungsgrad = 2 + - 2-3 Trees sind 3-fache - [ ] [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - - [ ] **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-Bäume** + - Fun Fact: Es ist ein Mysterium, aber das B könnte für Boeing, Balanciert, oder Bayer (Co-Erfinder) stehen + - In der Praxis: + B-Bäume sind weit verbreitet in Datenbanken. Die meisten modernen Dateisysteme sind B-Bäume (oder Varianten davon). + Zusätzlich zum Einsatz in Datenbanken, werden B-Bäume auch in Dateisystemen benutzt um schnellen Zugriff auf einen + beliebigen Block in einer bestimmten Datei zu ermöglichen. + Das Grundproblem ist es die Adresse eines Dateiblockes in die Adresse eines Diskblocks (oder eines Zylinder-Kopf-Sektors) zu verwandeln. - [ ] [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) + - behandelt cache-oblivious B-Bäume, sehr interessante Datenstrukturen + - die ersten 37 Minuten sind sehr technisch, können übersprungen werden (B ist Blockgröße, Cache Zeilen Länge) -- ### k-D Trees - - great for finding number of points in a rectangle or higher dimension object - - a good fit for k-nearest neighbors +- ### k-D Bäume + - großartig um mehrere Punkte in einem Rechteck oder höherdimensionalen Objekten zu finden + - gut geeignet für k-nearest neighbors - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) -- ### Skip lists +- ### Skip Listen - "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 +- ### Netzwerkflüsse - [ ] [Ford-Fulkerson in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) - [ ] [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 +- ### Disjunkte Mengen & Union Find - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) -- ### Math for Fast Processing +- ### Mathematik für schnelle Berechnungen - [ ] [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 + - Kombination eines binären Suchbaums mit eine 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) +- ### Lineare Programmierung (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) - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) -- ### Geometry, Convex hull (videos) +- ### Geometrie, Konvexe Hülle (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 +- ### Diskrete Mathematik + - siehe Videos unten - ### Machine Learning - [ ] Warum ML? @@ -1883,14 +1885,14 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - Kurse: - [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning) - [nur Videos](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) - - see videos 12-18 for a review of linear algebra (14 and 15 are duplicates) + - siehe Videos 12-18 für einen Auffrisung von Linearer Algebra (14 und 15 sind Duplikate) - [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: - - Books: + - Quellen: + - Bücher: - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) @@ -1906,9 +1908,9 @@ software engineer, and to be aware of certain technologies and algorithms, so yo
Weitere Details zu ausgewählten Themen - 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? + Ich habe das hinzugefügt um eine Ideen weiter oben zu verstärken, aber ich wollte sie nicht + oben hinzufügen weil es sonst zu viel wäre. Es ist leicht es mit einen Thema zu übertreiben. + Ihr wollt doch noch in diesen Jahrhundert eingestellt werden, oder? - [ ] **Union-Find** - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) @@ -1927,11 +1929,11 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [ ] [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) +- [ ] **Fortgeschrittene Graphbearbeitung** (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 **Wahrscheinlichkeit** (mathematisch, es wird langsam angegangen was gut bei Mathe ist) (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) @@ -1951,28 +1953,28 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [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): - - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - [The Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) - [ ] 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) - - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be - - nice explanation of tries - - can be skipped + - fängt großartig an, wird aber nach KMP viel schwieriger als es sein müsste + - gute Erklärung von Tries + - kann übersprungen werden - [ ] **Sortierung** - - [ ] Stanford lectures on sorting: + - [ ] Stanford Vorlesungen über Sortierung: - [ ] [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) + - [ ] Steven Skiena Vorlesungen über Sortierung: + - [ ] [Vorlesung beginnt ab 26:46 (video)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) + - [ ] [Vorlesung beginnt ab 27:40 (video)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [Vorlesung beginnt ab 35:00 (video)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [Vorlesung beginnt ab 23:50 (video)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10)
From 7fd3e7a0b9df31e5e3b926b01dfc475d3e2a5035 Mon Sep 17 00:00:00 2001 From: rene Date: Fri, 12 Jul 2019 23:34:16 +0200 Subject: [PATCH 126/263] - german translation - some typos and grammar errors --- translations/README-de.md | 98 +++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index d742543..528a991 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -1,14 +1,14 @@ # Coding Interview University -> Ursprünglich habe ich dies als eine kurze To-Do Liste von Studienthemen angefangen um Software Engineer zu werden, -> aber es ist zu der riesigen Liste herangewachsen die man heute sehen kann. Nachdem ich diesen Lehrplan durchgezogen -> habe, [wurde ich als Software Entwickler bei Amazon eingestellt.](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! -> Wahrscheinlich wirst du nicht so viel lernen müssen wie ich. Aber egal, alles was man brauchst, findest man hier. +> Ursprünglich habe ich dies als eine kurze To-do Liste von Studienthemen angefangen, um Software Engineer zu werden, +> aber es ist zu der riesigen Liste herangewachsen, die man heute sehen kann. Nachdem ich diesen Lehrplan durchgezogen +> habe, [wurde ich als Software Entwickler bei Amazon eingestellt](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> Wahrscheinlich wirst du nicht so viel lernen müssen wie ich. Aber egal, alles was man braucht, findest man hier. > > Ich habe ungefähr 8-12 Stunden am Tag gelernt, und das für mehrere Monate. Hier ist meine Geschichte: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) > -> Die Einträge in dieser Liste werden dich gut auf ein Vorstellungsgepräch bei so gut wie jeder Software Firma vorbereiten, -> so bei den Giganten: Amazon, Facebook, Google oder Micrososft. +> Die Einträge in dieser Liste werden dich gut auf ein Vorstellungsgespräch bei so gut wie jeder Software Firma vorbereiten, +> so bei den Giganten: Amazon, Facebook, Google oder Microsoft. > > *Viel Glück!* @@ -47,15 +47,15 @@ ## Worum es geht -Das ist mein mehrmonatiger Lernplan um vom Web Developer (Selbststudium, kein Abschluss in Informatik) zum Software Engineer bei einer großen Firma zu wechseln. +Das ist mein mehrmonatiger Lehrplan um sich vom Web Developer (Selbststudium, kein Abschluss in Informatik) zum Software Engineer bei einer großen Firma zu entwickeln. ![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) -Dies ist gedacht für **neue Software Engineure** oder solche die von der Software/Web Entwicklung zum Software +Dies ist gedacht für **neue Software Engineers** oder solche die von der Software/Web Entwicklung zum Software Engineering wechseln wollen (wobei Informatikkenntnisse benötigt werden). Falls man behauptet mehrere Jahre an Erfahrung als Software Engineer zu haben, erwartet einen ein hartes Vorstellungsgespräch. -Falls du schon mehrere Jahre Erfahung in der Software/Webenteicklung hast, muss dir klar sein, dass große Software +Falls du schon mehrere Jahre Erfahrung in der Software/Webentwicklung hast, muss dir klar sein, dass große Software Unternehmen wie Google, Amazon, Facebook oder Microsoft Software Engineering und Software Entwicklung als unterschiedliche Dinge ansehen, und sie setzen Informatikkenntnisse voraus. @@ -189,12 +189,12 @@ Liste (Netzwerke, Sicherheit) ansehen. ## Warum solltest du das hier lesen? Als ich dieses Projekt angefangen habe, konnte ich einen Stack nicht von einem Heap unterscheiden, wusste nichts von -Groß-O, nichts über Bäume, oder wie man einen Graphen durchläuft. Wenn ich einen Sortieralgorithmuss hätte schreiben sollen, +Groß-O, nichts über Bäume, oder wie man einen Graphen durchläuft. Wenn ich einen Sortieralgorithmus hätte schreiben sollen, dann wäre der nicht besonders gut geworden, so viel kann ich dir sagen. Jede Datenstruktur die jemals benutzt habe war direkt in der Programmiersprache eingebaut, und ich hatte keine Ahnung wie sie funktioniert haben. Ich muss niemals -Speichermanagement betreiben, außer einer der Prozesse die ich ausgeführt hatte hat einen "out of memory" Fehler gehabt. +Speichermanagement betreiben, außer einer der Prozesse, die ich ausgeführt hatte hat einen "out of memory" Fehler gehabt. Und wenn das passiert ist, musste ich einen Umweg finden. Ich habe ein paar mehrdimensionale Arrays in meinen Leben benutzt -und ein paar tausend assoziative Arrays, aber ich habe nie selbst eine Datenstruktur von Grund auf neu geschrieben. +und ein paar Tausend assoziative Arrays, aber ich habe nie selbst eine Datenstruktur von Grund auf neu geschrieben. Es ist ein großer Plan. Es könnte mehrere Monate dauern. Falls dir schon vieles von dem bekannt ist, wird es dich viel weniger Zeit kosten. @@ -206,7 +206,7 @@ weniger Zeit kosten. Alles hier drunter ist ein Umriss, und du solltest die Aufgaben von oben nach untern abarbeiten. -Ich benutze GitHub's spezielle Version von Markdown, das beinhält Aufgabenliste um den Fortschritt zu prüfen. +Ich benutze GitHub's spezielle Version von Markdown, das beinhält Aufgabenliste, um den Fortschritt zu prüfen. **Erstelle einen neuen Branch. Damit du Einträge abhaken kannst, füge einfach nur ein x in eckigen Klammern ein: [x]** @@ -219,7 +219,7 @@ Ich benutze GitHub's spezielle Version von Markdown, das beinhält Aufgabenliste `git fetch --all` - Hake alle Kästchen mit x ab nachdem du die Änderungen vollzogen hast + Hake alle Kästchen mit x ab, nachdem du die Änderungen vollzogen hast `git add .` @@ -234,7 +234,7 @@ Ich benutze GitHub's spezielle Version von Markdown, das beinhält Aufgabenliste
## Halt dich nicht für dümmer als du bist -- Erfolgreiche Software Engineers sind klug, aber viele sind sich unsicher ob sie klug genug sind. +- Erfolgreiche Software Engineers sind klug, aber viele sind sich unsicher, ob sie klug genug sind. - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) - [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) - [Believe you can change](http://www.aaronsw.com/weblog/dweck) @@ -242,12 +242,12 @@ Ich benutze GitHub's spezielle Version von Markdown, das beinhält Aufgabenliste ## Über Videoquellen -Auf manche Videos kann man nur zugreifen indem man sich bei einem Coursera- oder EdX-Kurs einschreibt. Das sind so +Auf manche Videos kann man nur zugreifen, indem man sich bei einem Coursera- oder EdX-Kurs einschreibt. Das sind so genannte MOOCS. Manchmal werden die Kurse gerade nicht angeboten und man muss ein paar Monate warten. Man hat dann keinen Zugriff darauf. - Ich würde mich sehr freuen wenn du mir dabei hilfst kostenlose und immer verfügbare öffentliche Quellen hinzuzufügen, - wie z.B. YouTube Videos um die Online Kurse zu ergänzen. + Ich würde mich sehr freuen, wenn du mir dabei hilfst kostenlose und immer verfügbare öffentliche Quellen hinzuzufügen, + wie z.B. YouTube Videos, um die Online Kurse zu ergänzen. Ich benutze gerne Vorlesungen von Hochschulen. ## Ablauf von Vorstellungsgesprächen und allgemeine Vorbereitung darauf @@ -269,7 +269,7 @@ keinen Zugriff darauf. - [ ] [Software Engineer Interview Unleashed (kostenpflichtiger Kurs)](https://www.udemy.com/software-engineer-interview-unleashed): - Hier lernt von einem ehemaligen Google Interviewer wie man sich auf ein Vorstellungsgespräch als Software Engineer vorbereitet. - [ ] [Python for Data Structures, Algorithms, and Interviews! (kostenpflichtiger Kurs)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - - Ein auf Python zugeschnittener Kurs welcher Datenstrukturen, Algorithme, Testinterviews und noch viel mehr behandelt. + - Ein auf Python zugeschnittener Kurs welcher Datenstrukturen, Algorithmen, Testinterviews und noch viel mehr behandelt. - [ ] [Intro to Data Structures and Algorithms using Python! (kostenloser Kurs auf Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): - Ein kostenloser auf Python zentrierter Kurs über Datenstrukturen und Algorithmen. - [ ] [Data Structures and Algorithms Nanodegree! (kostenpflichtiges Nandegree Kurs auf Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): @@ -279,21 +279,21 @@ keinen Zugriff darauf. ## Wähle eine Sprache für das Vorstellungsgespräch -Man sollte eine Sprache wählen mit der man sich wohl fühlt beim Codingteil des Vorstellungsgesprächs. +Man sollte eine Sprache wählen mit der man sich wohlfühlt beim Codingteil des Vorstellungsgesprächs. Aber für große Firmen sind das valide Optionen: - C++ - Java - Python -Man könnte auch diese verwenden, aber pass auf. Es könnte eineige Vorbehalte geben: +Man könnte auch diese verwenden, aber pass auf. Es könnte einige Vorbehalte geben: - JavaScript - Ruby Hier ist ein Artikel den ich über die Auswahl der Programmiersprache für das Vorstellungsgespräch geschrieben habe: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) -Du musst dich mit der Sprache wohl fühlen und auskennen. +Du musst dich mit der Sprache wohlfühlen und auskennen. Hier kannst du mehr über die Wahl lesen: - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ @@ -305,14 +305,14 @@ Unten sind ein paar Materialien zu C, C++ und Python zu finden, weil ich das ger ## Buchliste -Die Liste ist kürzer als die, die ich tatsächlich benutzt habe. Ich habe es etwas abgekürzt um euch Zeit zu sparen. +Die Liste ist kürzer als die, die ich tatsächlich benutzt habe. Ich habe es etwas abgekürzt, um euch Zeit zu sparen. ### Vorbereitung auf das Vorstellungsgespräch - [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4nd Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - Antworten in C++ und Java - eine gute Aufwärmübung für Cracking the Coding Interview - - nicht allzu schwer, die meisten Probelem sind einfacher als das was ihr in Vorstellungsgesprächen sehen werdet (von dem was ich so gelesen habe) + - nicht allzu schwer, die meisten Probleme sind einfacher als das, was ihr in Vorstellungsgesprächen sehen werdet (von dem, was ich so gelesen habe) - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - Antworten in Java @@ -331,7 +331,7 @@ Such dir eins aus: ### Rechnerarchitektur - [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - Das Buch wurde 2004 veröffentlicht und ist etwas veraltet, aber es ist eine hervorragende Quelle um Computer in Kürze zu verstehen. + - Das Buch wurde 2004 veröffentlicht und ist etwas veraltet, aber es ist eine hervorragende Quelle, um Computer in Kürze zu verstehen. - Der Autor hat [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly) erfunden, also sollte man die Erwähnungen und Beispiele in HLA mit Vorsicht genießen. Nicht weit verbreitet, aber ein nettes Beispiel wie Assembly Code aussehen kann. - Diese Kapitel sind es wert zu lesen um euch eine gute Grundlage zu geben:
@@ -354,10 +354,10 @@ Such dir eins aus: **Man muss sich für das Vorstellungsgespräch für eine Programmiersprache entschieden haben (siehe oben).** -Hier sind meine Empfehlungen geordnet nach Sprache. Ich habe nicht für alle Sprachen Material. Ich begrüße Ergänzugen. +Hier sind meine Empfehlungen geordnet nach Sprache. Ich habe nicht für alle Sprachen Material. Ich begrüße Ergänzungen. -Wenn du dich durch eins davon durchgelsen hast, solltest du genügende Wissen über Datenstrukturen und Algorithmen haben um Coding Probleme lösen zu können. -**Man kann alle Videolektionen in diesen Projekt überspringen**, außer du willst eine Auffrischung. +Wenn du dich durch eins davon durchgelesen hast, solltest du genügende Wissen über Datenstrukturen und Algorithmen haben, um Coding Probleme lösen zu können. +**Man kann alle Videolektionen in diesem Projekt überspringen**, außer du willst eine Auffrischung. [Zusätzliches sprachspezifisches Material hier.](programming-language-resources.md) @@ -390,7 +390,7 @@ ODER: - [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - von Goodrich, Tamassia, Goldwasser - wird bei der UC Berkeley als Zusatzmaterial für den Informatik Einstieg benutzt - - siehe Zusammenfassung zur Python Version, dieses Buch behandelt die selben Themen. + - siehe Zusammenfassung zur Python Version, dieses Buch behandelt dieselben Themen.
@@ -401,7 +401,7 @@ ODER: - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - von Goodrich, Tamassia, Goldwasser - - Ich habe dieses Buch gelibet. Es hat alles behandelt und mehr. + - Ich habe dieses Buch geliebt. Es hat alles behandelt und mehr. - Python-hafter Code - meine feurige Rezension: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ @@ -416,8 +416,8 @@ Hier einige Fehler die ich gemacht habe, damit ihr ein besseres Erlebnis haben k ### 1. Du wirst dich nicht an alles erinnern können -Ich habe stundelang Videos gesehen und reichlich Notizen geschrieben. Monate später gab es viel an das ich mich nicht mehr erinnern konnte. -Ich habe 3 Tage damit verbracht meine Notizen durchzugehen und daraus Lernkarten zu erstellen, damit ich alles nochmal wiederholen konnte. +Ich habe stundenlang Videos gesehen und reichlich Notizen geschrieben. Monate später gab es viel, an das ich mich nicht mehr erinnern konnte. +Ich habe 3 Tage damit verbracht meine Notizen durchzugehen und daraus Lernkarten zu erstellen, damit ich alles noch mal wiederholen konnte. Bitte lesen damit ihr nicht meine Fehler wiederholt: @@ -425,10 +425,10 @@ Bitte lesen damit ihr nicht meine Fehler wiederholt: ### 2. Benutz Lernkarten -Um das Problem zu lösen, habe ich eine kleine Webseite erstellt wo ich 2 Arten von Lernkarten anlegen kann: Allgemein und Code. +Um das Problem zu lösen, habe ich eine kleine Webseite erstellt, wo ich 2 Arten von Lernkarten anlegen kann: Allgemein und Code. Jede Karte hat ihr eigenes Format. -Ich habe eine mobile-first Webseite gemacht, damit ich auf meinen Smart Phone oder Tablet lernen kann, egal wo ich mich befinde. +Ich habe eine mobile-first Webseite gemacht, damit ich auf meinen Smartphone oder Tablet lernen kann, egal wo ich mich befinde. Erstell kostenlos deine eigenen Lernkarten: @@ -439,13 +439,13 @@ Erstell kostenlos deine eigenen Lernkarten: Achtung, ich habe es übertrieben und Lernkarten über alles erstellt, von Assembly und Python Trivia bis hin zu Machine Learning und Statistik. Das ist viel mehr als eigentlich notwendig. **Anmerkung zu Lernkarten:** Wenn man sich einmal an eine Antwort erinnert, sollte man das nicht als Wissen ansehen. -Man muss sich die Karte mehrmals ansehen und richtig beantworten bevor man es tatsächlich weiß. Wiederholung wird das +Man muss sich die Karte mehrmals ansehen und richtig beantworten, bevor man es tatsächlich weiß. Wiederholung wird das Wissen tiefer in euren Verstand verankern. Eine Alternative zu Lernkarten ist [Anki](http://ankisrs.net/), was mir schon öfters empfohlen wurde. Es benutzt ein Erinnerungssystem um einen dabei zu helfen sich zu erinnern. -Es ist benutzerfreundlich, auf allen Plattformen erhaältlich und kann sich mit der Cloud synchronisieren. -Es kostet 25$ auf iOS aber es ist kostenlos für andere Plattformen. +Es ist benutzerfreundlich, auf allen Plattformen erhältlich und kann sich mit der Cloud synchronisieren. +Es kostet 25$ auf iOS, aber es ist kostenlos für andere Plattformen. Meine Lernkarten Sammlung im Anki Format: https://ankiweb.net/shared/info/25173560 (Danke [@xiewenya](https://github.com/xiewenya)) @@ -457,11 +457,11 @@ Nimm dir eine Pause vom Programmieren für eine halbe Stunde und gehe deine Lern ### 4. Fokus -Es gibt eine Menge Ablenkungen die dir deine kostbare Zeit stehlen können. Fokussiert und konzentriert zu bleiben ist schwer. +Es gibt eine Menge Ablenkungen, die deine kostbare Zeit stehlen können. Fokussiert und konzentriert zu bleiben ist schwer. ## Was hier nicht behandelt wird -Das sind weit verbreitete Technologien aber nicht Teil des Lehrplans: +Das sind weitverbreitete Technologien aber nicht Teil des Lehrplans: - SQL - Javascript @@ -472,21 +472,21 @@ Das sind weit verbreitete Technologien aber nicht Teil des Lehrplans: Einige der Themen brauchen einen Tag, für andere braucht man mehrere Tage. Manche sind reines Lernen ohne das man was implementiert. Jeden Tag nehme ich mir ein Thema aus der Liste unten vor, schaue Videos über das Thema, und schreibe eine Implementierung in: -- C - mit structs and Funktionen die ein struct Pointer und und etwas anderes als Argumente benutzen. +- C - mit structs und Funktionen die ein struct Pointer und und etwas anderes als Argumente benutzen. - C++ - ohne vorgefertigte Typen - C++ - mit vorgefertigte Typen, wie STL's std::list für verkettete Listen - Python - mit vorgefertigte Typen (um Python weiterhin zu üben) -- und ich schreibe Tests um sicher zu gehen, dass ich richitg liege, manchmal sind das nur einfache assert() Statements -- Du könntest auch Java oder etwas anderes machen, das ist nur das was ich tue. +- und ich schreibe Tests um sicherzugehen, dass ich richtig liege, manchmal sind das nur einfache assert() Statements +- Du könntest auch Java oder etwas anderes machen. Das ist nur das, was ich tue. -Man brauchst nicht alles davon. Man braucht nur [eine Sprache für das Vorstellungsgepräch](#pick-one-language-for-the-interview). +Man braucht nicht alles davon. Man braucht nur [eine Sprache für das Vorstellungsgespräch](#pick-one-language-for-the-interview). Warum ich in all diesen Sprachen programmiere? -- Üben, üben, üben, bis ich kotzen muss und es im Schlaf beherrsche (manche Probleme haben viele Sonderfälle und Wissen an das man sich erinnern muss) +- Üben, üben, üben, bis ich kotzen muss und es im Schlaf beherrsche (manche Probleme haben viele Sonderfälle und Wissen, an das man sich erinnern muss) - Unter erschwerten Voraussetzungen arbeiten können (Speicher allokieren/freigeben ohne die Hilfe einer Garbage Collection (Ausnahmen sind Python oder Java)) - Vorgefertigte Typen verwenden damit ich Erfahrung im Umgang für echte Anwendungsfälle haben (ich werde sich meine eigene verkettete Liste im Alltag implementieren) -Vielleicht habe ich nicht die Zeit um das alles für jedes Thema zu machen, aber ich werde es versuchen. +Vielleicht habe ich nicht die Zeit, um das alles für jedes Thema zu machen, aber ich werde es versuchen. Man findet meinen Code hier: - [C](https://github.com/jwasham/practice-c) @@ -503,10 +503,10 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit Voraussetzungen - [ ] **Lerne C** - - C ist überall. Du wirst Beispiele in Büchern, Vorlesungen, Videos, und generell *überall* finden während du lernst. + - C ist überall. Du wirst Beispiele in Büchern, Vorlesungen, Videos, und generell *überall* finden, während du lernst. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - Das ist ein kurzes Buch, aber es wird dich viel über die C Sprache lehren und wenn du ein bisschen übst, - wirst du schnell darin bewandert sein. C zu Verstehen hilft dir zu verstehen wie Programme und Speicher funktionieren. + wirst du schnell darin bewandert sein. C zu verstehen, hilft dir zu verstehen, wie Programme und Speicher funktionieren. - [Antworten auf Fragen](https://github.com/lekkas/c-algorithms) - [ ] **Wie Computer einen Prozess ausführen:** @@ -524,8 +524,8 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit Algorithmische Komplexität / Big-O (Groß-O Notation) / Asymptotische Analyse - nichts zum Implementieren -- Es sind eine Menge Videos hier aufgelistet. Schau dir einfach so viele an bis du es verstanden hast. Man kann immer wieder zurückgehen und nochmal anschauen. -- Falls einige der Vorträge zu mathemtaisch sind, kann man ans untere Ende springen und sich Videos über diskrete Mathematik anschauen um das notwendige Hintergrundwissen zu bekommen. +- Es sind eine Menge Videos hier aufgelistet. Schau dir einfach so viele an, bis du es verstanden hast. Man kann immer wieder zurückgehen und noch mal anschauen. +- Falls einige der Vorträge zu mathematisch sind, kann man ans untere Ende springen und sich Videos über diskrete Mathematik anschauen, um das notwendige Hintergrundwissen zu bekommen. - [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) - [ ] [Big O Notations (kleines Tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) - [ ] [Big O Notation (and Omega and Theta) - beste mathematische Erklärung (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) From 49765f60b9e5d509bde743907f40c98fcdc3a055 Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 13 Jul 2019 18:52:05 +0200 Subject: [PATCH 127/263] - german translation - some typos and grammar errors - some parts were still not translated --- translations/README-de.md | 252 +++++++++++++++++++------------------- 1 file changed, 126 insertions(+), 126 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index 528a991..7c21459 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -530,7 +530,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [Big O Notations (kleines Tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) - [ ] [Big O Notation (and Omega and Theta) - beste mathematische Erklärung (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) + - [Video](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - [Folien](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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) @@ -539,7 +539,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) - [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) - [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) -- [ ] TopCoder (beinhält Differenzgleichungen und Master Theorem +- [ ] TopCoder (beinhält Differenzgleichungen und Master-Theorem) - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) - [ ] [Spickzettel](http://bigocheatsheet.com/) @@ -553,7 +553,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit Datenstrukturen - ### Arrays (Felder) - - implementiere ein automatisch mitwachsenden Vektor + - implementiere einen automatisch mitwachsenden Vektor - [ ] Beschreibung: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) @@ -563,52 +563,52 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - - [ ] Implementiere ein Vektor (veränderbares Array was automatisch seine Größe verändert): - - [ ] Übe Arrays und Pointer (Zeiger) zu coden, und benutze Pointerberechnung um ein Element aus einem Array auszuwählen statt den Index zu benutzen. + - [ ] Implementiere ein Vektor (veränderbares Array, das automatisch seine Größe verändert): + - [ ] Übe Arrays und Pointer (Zeiger) zu coden, und benutze Pointerberechnung, um ein Element aus einem Array auszuwählen statt den Index zu benutzen. - [ ] neues Rohdaten-Array mit allokierten Speicher - man kann intern ein int Array dafür verwenden, aber nicht die Features davon - - fang an mit der Größe 16, oder wenn die Startnummer schön größer ist, benutze 2er-Potenzen - 16, 32, 64, 128 - - [ ] size() - Anzahl der Elmente + - fang an mit der Größe 16, oder wenn die Startnummer schön größer ist, benutze Zweier-Potenzen - 16, 32, 64, 128 + - [ ] size() - Anzahl der Elemente - [ ] capacity() - Anzahl der Elemente die es enthalten kann - [ ] is_empty() - - [ ] at(index) - gibt das Element an der gegebenen Index zurück, expolodiert wenn der Index außerhalb der Grenzen ist + - [ ] at(index) - gibt das Element an der gegebenen Index zurück, explodiert wenn der Index außerhalb der Grenzen ist - [ ] push(item) - [ ] insert(index, item) - fügt ein Element an der Index-Position ein, schiebt den ursprünglichen Wert vom Index und alle nachfolgenden Elemente eins nach rechts weiter - [ ] prepend(item) - ist dasselbe wie oben mit Index 0 - - [ ] pop() - entfernt das letzte Element und gibt dessen Wert zurürck + - [ ] pop() - entfernt das letzte Element und gibt dessen Wert zurück - [ ] delete(index) - lösche das Element an der Indexposition und verschiebe jedes Element danach eins nach links - - [ ] remove(item) - sucht den Wert und entfernt den Index der ihn enthält (auch wenn es mehrere Stellen sind) + - [ ] remove(item) - sucht den Wert und entfernt den Index, der ihn enthält (auch wenn es mehrere Stellen sind) - [ ] find(item) - sucht den Wert und gibt den ersten Index mit diesen Wert, -1 wenn der Wert nicht gefunden wird - - [ ] resize(new_capacity) // private function + - [ ] resize(new_capacity) // private Funktion - wenn man die Kapazität erreicht hat, verdopple die Kapazität - wenn du ein Element löscht und die Größe ist nur 1/4 der Kapazität, halbiere die Kapazität - [ ] Zeit - O(1) um am Ende etwas hinzuzufügen/zu löschen (amortisiert bei Verwendung von zusätzlichen Speicher), Indexzugriff, oder update - - O(n) to insert/remove elsewhere + - O(n) um an eine andere Stelle hinzuzufügen oder zu löschen - [ ] Speicher - zusammenhängend im Speicher, Nähe hilft der Performance - benötigter Speicher = (Array Kapazität, welche >= n ist) * Größe eines Elements, aber selbst bei 2n, immer noch O(n) - ### Linked Lists (verkettete Listen) - - [ ] Description: + - [ ] Erklärung: - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - nicht das ganze Video nur die Teile über Knotenstruktur und Speicherverwaltung. - - [ ] Linked List vs Arrays: + - [ ] Linked Lists 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) - - [ ] Achtung: du brauchst Wissen über Pointer von Pointern: - (für den Fall, dass man einen Pointer an eine Funktion übergibt und die Funktion die Adresse verändern kann zu der der Pointer zeigt) - Diese Seite ist dafür Pointer von Pointern grob zu verstehen. Ich würde diese Art der Listentraversierung nicht empfehlen. Lesbarkeit und Wartbarkeit leiden darunter wenn man versucht clever zu sein. + - [ ] Achtung: du brauchst Wissen über Pointer auf Pointer: + (für den Fall, dass man einen Pointer an eine Funktion übergibt und die Funktion die Adresse verändern kann, zu der der Pointer zeigt) + Diese Seite ist dafür Pointer auf Pointer grob zu verstehen. Ich würde diese Art der Listentraversierung nicht empfehlen. Lesbarkeit und Wartbarkeit leiden darunter wenn man versucht clever zu sein. - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) - [ ] Implementierung (ich habe es mit Tail-Pointern gemacht und ohne): - [ ] size() - gibt Anzahl der Datenelemente in der Liste zurück - [ ] empty() - bool gibt true zurück wenn leer - - [ ] value_at(index) - gibt den Wert an der Stelle index zurück (angefangen bei 0 für das erste ELement) - - [ ] push_front(value) - fügt eine Element an den Anfang der List ein + - [ ] value_at(index) - gibt den Wert an der Stelle index zurück (angefangen bei 0 für das erste Element) + - [ ] push_front(value) - fügt ein Element an den Anfang der List ein - [ ] pop_front() - löscht das erste Element und gibt dessen Wert zurück - [ ] push_back(value) - fügt ein Element ans Ende ein - [ ] pop_back() - löscht das letzte Element und gibt dessen Wert zurück @@ -616,11 +616,11 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] back() - hole den Wert des letzten Elements - [ ] insert(index, value) - fügt Wert an der Indexposition ein, das neue Element an der Stelle zeigt auf das aktuelle Element an der Stelle - [ ] erase(index) - löscht das Element an der gegebenen Stelle - - [ ] value_n_from_end(n) - gibt den Wert an der nten Position von hinten zurück + - [ ] value_n_from_end(n) - gibt den Wert an der n-ten Position von hinten zurück - [ ] reverse() - kehrt die Liste um - [ ] remove_value(value) - entfernt das erste Element aus der Liste mit diesen Wert - [ ] Doubly-linked List (doppelt verkettete Listen) - - [Erklärung (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) + - [Erklärung (Video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) - gibt keinen Grund das zu implementieren - ### Stack (Stapel) @@ -649,7 +649,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - dequeue: O(1) (verkettete Liste und Array) - empty: O(1) (verkettete Liste und Array) -- ### Hash table (Hashtabelle) +- ### Hash table (Hash-Tabelle) - [ ] 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) @@ -666,12 +666,12 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [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) - - [ ] verteilte Hashtabellen: + - [ ] verteilte Hash-Tabellen: - [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) - [ ] Implementierung mit Array und linear probing - - hash(k, m) - m ist die Größe der Hashtabelle + - hash(k, m) - m ist die Größe der Hash-Tabelle - add(key, value) - falls key schon existiert, wird Wert überschrieben - exists(key) - get(key) @@ -689,11 +689,11 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) - [ ] [Details](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/) - [ ] Implementierung: - - Binärsuche (auf einen sortierten Array von Ganzzahlen) - - Binärsuche mittles Rekursion + - Binärsuche (auf einem sortierten Array von Ganzzahlen) + - Binärsuche mittels Rekursion - ### Bitweise Operationen - - [ ] [Bits Spickzettel](https://github.com/jwasham/coding-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) + - [ ] [Bits Spickzettel](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - man sollte viele der Zweierpotenzen kennen (von 2^1 über 2^16 und 2^32) - [ ] Erhalte sehr gutes Verständnis Bits zu manipulieren mit: &, |, ^, ~, >>, << - [ ] [Wörter](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] Gute Einführung: @@ -712,7 +712,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [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) - - [ ] zur nächsten Zweierpotenz runden: + - [ ] zur nächsten Zweierpotenz aufrunden: - [Round Up To Next Power Of Two](https://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) - [ ] Werte tauschen: - [Swap](https://bits.stephan-brumme.com/swap.html) @@ -730,14 +730,14 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [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) - generell Baumerstellung - - Traversieren - - Algorithmen zum Manipulieren + - Traversieren (Durchlaufen) + - Algorithmen zur Manipulation - [ ] [BFS(breadth-first search) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - - BFS (Breitensuche) Notizen: + - BFS (Breitensuche) Bemerkungen: - Ebenenreihenfolge (BFS, mittels Queue) - Zeitkomplexität: O(n) - Speicherkomplexität: beste: O(1), schlechteste: O(n/2)=O(n) - - DFS (Tiefensuche) Notizen: + - DFS (Tiefensuche) Bemerkungen: - Zeitkomplexität: O(n) - Speicherkomplexität: beste: O(log n) - durchschnittliche Höhe eines Baumes @@ -749,7 +749,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - ### Binary search trees: BSTs (Binäre Suchbäume) - [ ] [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) - - startet mit Symboltabelle und geht durch die BST Anwendungen + - startet mit Symboltabelle und geht durch die Anwendungsgebiete für BST - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) - [ ] [MIT (video)](https://www.youtube.com/watch?v=9Jry5-82I68) - C/C++: @@ -765,7 +765,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [Inorder Successor in a binary search tree (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) - [ ] Implement: - [ ] insert // füge Wert in Baum ein - - [ ] get_node_count // gibt ANzahl gespeicherter Werte + - [ ] get_node_count // gibt Anzahl gespeicherter Werte zurück - [ ] print_values // gibt die Werte im Baum aus, vom Minimum zum Maximum - [ ] delete_tree - [ ] is_in_tree // gibt true zurück wenn der gegebene Wert im Baum vorkommt @@ -777,7 +777,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] get_successor // gibt vom gegebenen Wert den nächstgrößeren Wert im Baum zurück, -1 wenn der nicht existiert - ### Heap (Haufen) / Priority Queue (Prioritätswarteschlange) / Binary Heap (Binärer Haufen) - - visualisiert als Baum, aber wächst üblicherweise linear im Speicher (Array, Linked list) + - visualisiert als Baum, aber wächst üblicherweise linear im Speicher (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) @@ -801,9 +801,9 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] extract_max - gibt das Max-Element zurück, löscht es - [ ] sift_down - gebraucht für extract_max - [ ] remove(i) - entfernt Element an Position i - - [ ] heapify - erstellt einen Heap aus einen Array, gebraucht für heap_sort + - [ ] heapify - erstellt einen Heap aus einem Array, gebraucht für heap_sort - [ ] heap_sort() - nimmt ein unsortiertes Array und verwandelt es in ein sortiertes Array (in-place) mittles Max Heap - - Bemerkung: stattdessen einen Min Heap zu verwenden würde weniger Operationen brauchen, aber den Speicherbedarf verdoppeln (kann man nicht in-place machen). + - Bemerkung: stattdessen einen Min Heap zu verwenden, würde weniger Operationen brauchen, aber den Speicherbedarf verdoppeln (kann man nicht in-place machen).
@@ -813,7 +813,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit Sortierung - [ ] Bemerkungen: - - Implementiere Sortierungen und weiß best case/worst case, durchschnittliche Komplexität von jeden: + - Implementiere Sortierungen und kenne best case/worst case, durchschnittliche Komplexität von jeden: - kein Bubble Sort - es ist furchtbar - O(n^2), außer wenn n <= 16 - [ ] Stabilität in Sortieralgorithmen ("Ist Quicksort stabil?") - [Sorting Algorithm Stability](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) @@ -821,7 +821,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [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) - [ ] Welche Algorithmen können mit verketteten Listen genutzt werden? Welche mit Arrays? Welche bei beiden? - - Ich würde nicht empfehlen verkettete Listen zu sortieren, aber Merge Sort ist machbar. + - Ich würde nicht empfehlen, verkettete Listen zu sortieren, aber Mergesort ist machbar. - [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) - Für Heap Sort, siehe Heap Datenstruktur oben. Heap Sort ist toll, aber nicht stabil. @@ -853,11 +853,11 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [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) -- [ ] Merge Sort Code: +- [ ] Mergesort Code: - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) -- [ ] Quick Sort Code: +- [ ] Quicksort Code: - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) @@ -865,8 +865,8 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] Implementierung: - [ ] Mergesort: O(n log n) Durchschnitt und worst case - [ ] Quicksort O(n log n) Durchschnitt - - Selection sort and insertion sort are both O(n^2) average and worst case - - For heapsort, see Heap data structure above. + - Selection Sort und Insertion Ssort sind beide O(n^2) im Durchschnitt und worst case + - Für Heap Sort, siehe Heap Datenstruktur oben. - [ ] Nicht vorgeschrieben, aber würde ich empfehlen: - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) @@ -882,7 +882,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - [ ] [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) -Als Zusammenfassung hier ist eine grafische Darstellung von [15 Sortieralgorithmen](https://www.youtube.com/watch?v=kPRA0W1kECg). +Als Zusammenfassung ist hier eine grafische Darstellung von [15 Sortieralgorithmen](https://www.youtube.com/watch?v=kPRA0W1kECg). Falls du noch mehr zu dem Thema wissen willst, schau dir "Sortierung" unter [Weitere Details für ausgewählte Themen](#additional-detail-on-some-subjects) an
@@ -892,23 +892,23 @@ Falls du noch mehr zu dem Thema wissen willst, schau dir "Sortierung" unter [Wei
Graphen -Graphen können genutzt werden um damit viele verschiedene Probleme in der Informatik darzustellen. Deswegen ist dieser Abschnitt so lang wie Bäume und Sortierung. +Graphen können genutzt werden, um damit viele verschiedene Probleme in der Informatik darzustellen. Deswegen ist dieser Abschnitt so lang wie Bäume und Sortierung. - Bemerkungen: - - Es gibt 4 verschiedene Arten einen Graph im Speicher zu repräsentieren: + - Es gibt 4 verschiedene Arten einen Graphen im Speicher zu repräsentieren: - Objekte und Pointer - Adjazenzmatrix - Adjazenzliste - adjacency map - bekanntmachen mit jeder dieser Repräsentationen und ihrer Vor- und Nachteile - BFS und DFS - kenne Komplexität, ihre Kompromisse, und wie man sie mit echten Code umsetzt - - Wenn eine Frage gestellt wird, suche zuerst nach einer graphbasierten Lösung, dann geh weiter wenn es keine gibt. + - Wenn eine Frage gestellt wird, suche zuerst nach einer graphbasierten Lösung, dann geh weiter, wenn es keine gibt. - [ ] MIT(videos): - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) -- [ ] Skiena Lectures - great intro: +- [ ] Skiena Vorlesungen - tolle Einführung: - [ ] [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) @@ -916,7 +916,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [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): +- [ ] Graphen (Besprechung und mehr): - [ ] [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) @@ -938,7 +938,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] DFS mit Adjazenzliste (rekursiv) - [ ] DFS mit Adjazenzliste (iterativ mit Stack) - [ ] DFS mit Adjazenzmatrix (rekursiv) - - [ ] DFS mit Adjazenzmatrix(iterativ mit Stack) + - [ ] DFS mit Adjazenzmatrix (iterativ mit Stack) - [ ] BFS mit Adjazenzliste - [ ] BFS mit Adjazenzmatrix - [ ] Kürzester Pfad (Dijkstra) @@ -958,7 +958,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor Noch mehr - ### Rekursion - - [ ] Stanford Vorlesung über Recursion und Backtracking: + - [ ] Stanford Vorlesung über Rekursion und 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) @@ -969,11 +969,11 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) - ### Dynamische Programming - - Wahrscheinlich wirst du im Vorstellungsgespräch nichts mit dynamischer Programmierung zu tun haben, aber es ist wert zu erkennen wann ein Problem für dynaische Programmierung geeignet ist. + - Wahrscheinlich wirst du im Vorstellungsgespräch nichts mit dynamischer Programmierung zu tun haben, aber es ist wert zu erkennen, wann ein Problem für dynamische Programmierung geeignet ist. - Dieses Thema kann ziemlich schwer sein. Jedes DP Problem muss als Rekursion dargestellt werden, und darauf zu kommen kann schwer sein. - - Ich schlage vor, dass man sich viele DP Probleme ansieht bis man ein gutes Verständnis vom zugrundeliegenden Muster hat. + - Ich schlage vor, dass man sich viele DP Probleme ansieht bis man ein gutes Verständnis vom zugrunde liegenden Muster hat. - [ ] Videos: - - die Skiena Videos kann man manchmal schwer folgen, weil er manchmal auf einer Tafel schreibt was zu klein zum Lesen ist + - die Skiena Videos kann man manchmal schwer folgen, weil er manchmal auf einer Tafel schreibt, was zu klein zum Lesen ist - [ ] [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) @@ -981,7 +981,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [Simonson: Dynamic Programming 0 (fängt an bei 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) - - [ ] Liste einzelnen DP Problemen (jedes Problem ist klein): + - [ ] Liste von einzelnen DP Problemen (jedes Problem ist klein): [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - [ ] Yale Vorlesungsnotizen: - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) @@ -1002,22 +1002,22 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] SOLID OOP Prinzipien: - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) - [ ] [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) + - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Eine einzige Zuständigkeit für jedes Objekt](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) - [mehr dazu](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 but not for modification](https://en.wikipedia.org/wiki/Open/closed_principle) + - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [Darüber dass Objekte bereit zur Erweiterung aber zur Veränderung sind](https://en.wikipedia.org/wiki/Open/closed_principle) - [mehr dazu](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) + - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Basisklasse und erbende Klasse folgen dem "IST EIN(E)"-Prinzip](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) - [mehr dazu](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) | Verbraucher sollten nicht dazu gezwungen werden ein Interface zu implementieren, dass sie nicht benutzen - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) - [mehr dazu](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. + - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduziere Abhängigkeiten beim Zusammenbau von Objekten. - [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) - [mehr dazu](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) - ### Design Patterns (Entwurfsmuster) - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) - - [ ] Learn diese Patterns: + - [ ] Lerne diese Muster: - [ ] Strategy - [ ] Singleton - [ ] Adapter @@ -1040,7 +1040,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [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) - - Ich weiß das anerkannte Buch ist "Design Patterns: Elements of Reusable Object-Oriented Software", aber Head First ist großartig wenn man mit OO einsteigt. + - Ich weiß das legitime Buch ist "Design Patterns: Elements of Reusable Object-Oriented Software", aber Head First ist großartig wenn man mit OO einsteigt. - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) @@ -1052,12 +1052,12 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] Khan Academy: - Kursstruktur: - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) - - Nur die Videos - 41 (jedes ist kurz und leicht zu verstehen): + - Nur die 41 Videos (jedes ist kurz und leicht zu verstehen): - [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) - ### NP, NP-vollständig und Heuristiken - Kenne die bekanntesten NP-vollständigen Probleme, wie z.B. Traveling Salesman und das Rucksackproblem, - und sei in der Lage die zu erkennen wenn ein Interviewer heimlich danach frägt. + und sei in der Lage die zu erkennen, wenn ein Interviewer heimlich danach fragt. - Wissen was NP-vollständig bedeutet. - [ ] [Computational Complexity (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) - [ ] Simonson: @@ -1111,7 +1111,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - Thread-Ressourcenverwaltung (teilt sich das obere (minus Stack) mit anderen Threads in selben Prozess aber jeder mit einzelnen Befehlszähler, Stackzähler, Registern, und Stack) - Forking ist einfach Copy on Write (nur lesend) bis der neue Prozess in den Speicher schreibt, dann wird eine komplette Kopie erstellt. - Kontextwechsel - - Wie wird Kontextwechsel vom Betriebssystem und der zugrundeliegenden Hardware gehandhabt + - Wie wird Kontextwechsel vom Betriebssystem und der zugrunde liegenden Hardware gehandhabt - [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) - [ ] Parallelität in Python (Videos): - [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1) @@ -1127,22 +1127,22 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - wie Unit Tests funktionieren - was sind Mockobjekte - was ist ein Integration Test - - Was ist dependency injection + - Was ist 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) + - [Folien](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: + - [ ] 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 einen Betriebssystem, wie funktioniert es + - in einem Betriebssystem, wie funktioniert es - kann von Betriebssystem Videos gelernt werden - ### Stringsuche und -manipulation @@ -1155,10 +1155,10 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - Wer noch mehr Details zu diesen Thema erfahren möchte, sollte sich den "String Matching" Abschnitt unter [Weitere Details zu ausgewählten Themen](#additional-detail-on-some-subjects) ansehen + Wer noch mehr Details zu diesem Thema erfahren möchte, sollte sich den "String Matching" Abschnitt unter [Weitere Details zu ausgewählten Themen](#additional-detail-on-some-subjects) ansehen - ### Tries (Präfixbäume) - - Achtung, es gibt mehrere Arten von Tries. Manche haben Präfixe, manche nicht, und manche benutzen Strings anstelle von Bits + - Achtung, es gibt mehrere Arten von Tries. Manche haben Präfixe, manche nicht, und manche benutzen Strings anstelle von Bits, um den Pfad zu markieren. - Ich habe mir den Code durchgelesen, aber werde es nicht selber implementieren. - [ ] [Sedgewick - Tries (3 Videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) @@ -1191,7 +1191,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - Die erste Hälfte ist ausreichend. - ### Netzwerke - - **Wenn man Erfahrungen mit Netzwerken hat oder Reliability Engineer oder Operations Engineer werden will, erwartet Fragen dazu** + - **Wenn man Erfahrungen mit Netzwerken hat, oder Reliability Engineer oder Operations Engineer werden will, erwartet Fragen dazu** - ansonsten, ist es nur gut zu wissen - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) @@ -1217,16 +1217,16 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor **Man kann mit Fragen über Systementwurf rechnen, falls man 4+ Erfahrung hat.** - Skalierbarkeit und Systementwurf sind sehr große Themengebiete mit vielen verschiedenen Themen und Quellen, - weil es so viel zu beachten gibt wenn man eine Software/Hardware baut die skalierbar ist. + weil es so viel zu beachten gibt, wenn man eine Software/Hardware baut, die skalierbar ist. Erwarte viel Zeit damit zu verbringen. - Überlegungen: - Skalierbarkeit - vereinfache große Datenmengen zu Einzelwerten - Transformiere einen Datensatz in einen anderen - - gehe mit absurd großen Datenmenegen um + - gehe mit absurd großen Datenmengen um - Systementwurf - Feature Sets - - Schnittstelen + - Schnittstellen - Klassenhierarchien - entwerfe System unter bestimmte Vorgaben - Einfachheit und Robustheit @@ -1238,7 +1238,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [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) - Es gibt hier viele Quellen. Sieh dir Artikel und Beispiel an. Ich habe ein paar davon unten hingeschrieben. +- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - Es gibt hier viele Quellen. Sieh dir Artikel und Beispiele an. Ich habe ein paar davon unten hingeschrieben. - [ ] [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) @@ -1252,7 +1252,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Skalierbarkeit: - - Das braucht man nicht alles. Sucht euch einfach die paar Themen raus die euch interessieren. + - Das braucht man nicht alles. Sucht euch einfach die paar Themen raus, die euch interessieren. - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) - [ ] Kurzreihen: - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) @@ -1272,7 +1272,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [ ] [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) + - [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) @@ -1306,13 +1306,13 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - [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) - Für sogar noch mehr, siehe "Mining Massive Datasets" Videoreihen im [Videoreihen](#video-series) Abschnitt. -- [ ] Übe den Prozess des Systementwurfs: Hier sind ein paar Ideen die man auf Papier durchspielen kann, jede mit einer Dokumentation wie es in der echten Welt umgesetzt wurde: +- [ ] Übe den Prozess des Systementwurfs: Hier sind ein paar Ideen, die man auf Papier durchspielen kann, jede mit einer Dokumentation wie es in der echten Welt umgesetzt wurde: - Review: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - [Spickzettel](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) - Ablauf: 1. Verstehe das Problem und den Umfang: - - definiere den Anwendungsfall , was dem Interviewer helfen wird + - definiere den Anwendungsfall, was dem Interviewer helfen wird - schlage zusätzliche Funktionen vor - entferne Elemente die laut Interviewer nicht zum Umfang passen - nimme an das hohe Erreichbarkeit gefordert ist, füge das zu den Anwendungsfällen hinzu @@ -1320,7 +1320,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - frag wie viele Anfragen im Monat es gibt - frag wie viele Anfragen in der Sekunde es gibt (sie sagen es entweder freiwillig oder du solltest es selbst ausrechnen) - schätze prozentuales Verhältnis zwischen Lese- und Schreibzugriffe - - denk an die 80/20 Regel in mind bei der Schätzung + - denk an die 80/20 Regel bei der Schätzung - wie viel Daten pro Sekunde geschrieben werden - absoluter Speicherverbrauch für 5 Jahre - wie viele Daten pro Sekunde gelesen werden @@ -1328,7 +1328,7 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor - Ebenen (Service, Daten, Caching) - Infrastruktur: Load Balancing, Messaging - grobe Übersicht einiger Schlüsselalgorithmen die den Service antreiben - - berücksichtige Flaschenhalse und finde Lösungen + - berücksichtige Flaschenhälse und finde Lösungen - Übungen: - [Entwerfe ein CDN Netzwerk: alter Artikel](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) - [Entwerfe ein System um zufällige einmalige IDs zu generieren](https://blog.twitter.com/2010/announcing-snowflake) @@ -1348,8 +1348,8 @@ Graphen können genutzt werden um damit viele verschiedene Probleme in der Infor
Finaler Rückblick - Dieser Abschnitt enthält kürzere Videos die man sich ziemlich schnell anschauen kann um die wichtigsten Konzepte nochmal zu wiederholen. - Das ist ganz gut falls man sein Wissen öfter mal auffrischen möchte. + Dieser Abschnitt enthält kürzere Videos, die man sich ziemlich schnell anschauen kann, um die wichtigsten Konzepte noch mal zu wiederholen. + Das ist ganz gut, falls man sein Wissen öfter mal auffrischen möchte. - [ ] Reihe mit kurzen 2-3 Minuten Videos (23 videos) - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) @@ -1376,17 +1376,17 @@ Warum du üben musst Programmieraufgaben zu lösen: - Anforderungen an das Problem sammeln - das Problem zu besprechen wie man es im Vorstellungsgespräch tun würde - auf der Tafel oder dem Papier zu entwickeln, nicht auf den Computer -- die Zeit- und Speicherkomplexität zu ermittlen -- sein Lösung zu testen +- die Zeit- und Speicherkomplexität zu ermitteln +- seine Lösung zu testen Es gibt eine großartige Einführung für das methodische, kommunikative Problem lösen in einem Vorstellungsgespräch. Das kann man auch von Büchern über Vorstellungsgespräche lernen, aber das fand ich herausragend: [Algorithm Design Canvas](http://www.hiredintech.com/algorithm-design/) -Keine Tafel zu hause? Macht Sinn. Ich bin ein Spinner und habe eine große Tafel. +Keine Tafel zu Hause? Macht Sinn. Ich bin ein Spinner und habe eine große Tafel. Anstelle einer Tafel hol dir ein großes Zeichenbrett aus dem Kunstladen. Du kannst auf dem Sofa sitzen und üben. -Das ist meine "Sofatafel". Ich habe auf den Foto ein Stift dazu gelegt um die Größenverhältnisse darzustellen. -Wenn man mit Stift schreibt, wünscht man sich man könnte löschen. Wird schnell sehr unordentlich. +Das ist meine "Sofatafel". Ich habe auf den Foto ein Stift dazu gelegt, um die Größenverhältnisse darzustellen. +Wenn man mit Stift schreibt, wünscht man sich, man könnte löschen. Wird schnell sehr unordentlich. ![meine Sofatafel](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) @@ -1441,9 +1441,9 @@ Wettbewerbsrepos: - [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) Mock Interviews: -- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. -- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews -- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. +- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - Das habe ich benutzt und es hat mir dabei geholfen vor den Telefon- und Vor-Ort-Gesprächen besser zu entspannen. +- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer Modell um Vorstellungsgespräche zu üben +- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - hilft auch Kandidaten den Prozess zu beschleunigen indem mehrere Vorstellungsgespräche bei Techfirmen übersprungen werden.
@@ -1455,13 +1455,13 @@ Mock Interviews: ## Dein Lebenslauf -- Siehe Lebenslauf Vorbereitung in Cracking The Coding Interview und den hinteren Teil von Programming Interviews Exposed +- Siehe Lebenslaufvorbereitung in Cracking The Coding Interview und den hinteren Teil von Programming Interviews Exposed ## Denk dran wenn das Vorstellungsgespräch kommt Rechne mit 20 Interviewfragen die dir gestellt werden, zusammen mit den unteren Zeilen. Bereite 2 - 3 Antworten für jede vor. -Bereite ein Geschichte vor, nicht nur ein paar Infos, über etwas das du erreicht hast. +Bereite eine Geschichte vor, nicht nur ein paar Infos, über etwas das du erreicht hast. - Warum möchtest du den Job? - Was ist ein schweres Problem das du gelöst hast? @@ -1483,7 +1483,7 @@ Bereite ein Geschichte vor, nicht nur ein paar Infos, über etwas das du erreich - Wie groß ist das Team? - Wie sieht der Entwicklungszyklus aus? Macht ihr Wasserfall/Sprints/agil? - Wird oft zu Abgabeterminen gehetzt? Oder seid ihr flexibel? -- Wie werden Entscheidungen in euren Team getroffen? +- Wie werden Entscheidungen in eurem Team getroffen? - Wie viele Meetings habt ihr pro Woche? - Hilft dir die Arbeitsumgebung dich zu konzentrieren? - Woran arbeitet ihr gerade? @@ -1506,7 +1506,7 @@ Man ist nie wirklich fertig. Alles unterhalb hiervon ist optional. Wenn man das studiert, bekommt man mehr Wissen zu Informatikkonzepten, und wird besser auf einen Software Engineer Job vorbereitet sein. - Everything below this point is optional. Man ist dann ein abgerundeterer Software Engineer. + Man ist dann ein abgerundeterer Software Engineer. ***************************************************************************************************** ***************************************************************************************************** @@ -1531,7 +1531,7 @@ Man ist nie wirklich fertig. - [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - Als ein Rückblick und zur Problemerkennung - - Der Katalog an Algorithmen ist weit über den Schwierigkeitsgrad den man in Vorstellungsgesprächen hat. + - Der Katalog an Algorithmen ist weit über den Schwierigkeitsgrad, den man in Vorstellungsgesprächen hat. - Dieses Buch besteht aus 2 Teilen: - Textbuch über Datenstrukturen und Algorithmen - Vorteile: @@ -1540,19 +1540,19 @@ Man ist nie wirklich fertig. - Codebeispiele in C - Nachteile: - kann so vollgestopft und unzugänglich sein wie CLRS, und bei einigen Themen wäre CLRS die bessere Wahl - - Kapitel 7, 8, 9 sind extrem schwer zu folgen, weil einige Dinge nicht gur erklärt werden oder ich einfach zu dumm bin - - versteh mich nicht falsch: Ich mag Skiena, seine Art zu Unterrichten, seine Eigenheiten, aber ich mag nicht das Stony Brook Material. + - Kapitel 7, 8, 9 sind extrem schwer zu folgen, weil einige Dinge nicht gut erklärt werden oder ich einfach zu dumm bin + - versteh mich nicht falsch: Ich mag Skiena, seine Art zu unterrichten, seine Eigenheiten, aber ich mag nicht das Stony Brook Material. - Algorithmenkatalog: - - Das ist der eigentliche Grund weswegen ich dieses Buch gekauft habe. - - muss mich noch einlesen. Werde das hier ergänzen sobald ich durch bin. + - Das ist der eigentliche Grund, weswegen ich dieses Buch gekauft habe. + - muss mich noch einlesen. Werde das hier ergänzen, sobald ich durch bin. - kann man auf den Kindle ausleihen - Antworten: - [Lösungen](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) - [Lösungen](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) - - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) + - [Korrekturverzeichnis](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) - [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Wichtig:** Das Buch zu lesen ist nur eingschränkt von Nutzen. Das Buch ist ein toller Rückblick auf Algorithmen und Datenstrukturen, aber man lernt dadurch nicht guten Code zu schreiben. Man muss in der Lage sein effizient vernünftigen Code zu schreiben. + - **Wichtig:** Das Buch zu lesen ist nur eingeschränkt von Nutzen. Das Buch ist ein toller Rückblick auf Algorithmen und Datenstrukturen, aber man lernt dadurch nicht guten Code zu schreiben. Man muss in der Lage sein effizient vernünftigen Code zu schreiben. - aka CLR, manchmal CLRS, weil Stein erst später dazu kam - [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) @@ -1571,9 +1571,9 @@ Man ist nie wirklich fertig.
Zusätzliches Wissen -Diese Themen werden vermutlich nicht in einen Vorstellungsgepräch aufkommen, aber ich habe sie trotzdem hinzugeüfgt +Diese Themen werden vermutlich nicht in einen Vorstellungsgespräch aufkommen, aber ich habe sie trotzdem hinzugefügt um euch dabei zu helfen ein vollständiger Software Engineer zu werden und damit ihr über bestimmte Technologien und -Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt. +Algorithmen Bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt. - ### Compiler - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) @@ -1725,8 +1725,8 @@ Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) - ### Locality-Sensitive Hashing - - used to determine the similarity of documents - - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - wird benutzt um die Ähnlichkeit von Dokumenten zu bestimmen + - Das Gegenteil von MD5 oder SHA, die benutzt werden, um festzustellen ob 2 Dokumente/Strings genau gleich sind. - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### van Emde Boas Trees @@ -1742,19 +1742,19 @@ Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt A particularly interesting self-organizing data structure is the splay tree, which uses rotations to move any accessed key to the root." - Skiena - Ich habe mich dazu entschieden einen Splay Tree zu implementieren. Von dem was ich gelesen habe, wird man kein - balanciereten Suchbaum in einem Vorstellungsgespräch implementieren. ABer ich wollte die Erfahrung machen selber einen zu coden + balancierten Suchbaum in einem Vorstellungsgespräch implementieren. Aber ich wollte die Erfahrung machen selber einen zu coden und seien wir mal ehrlich, Splay Trees sind Alleskönner. Ich habe eine Menge Code für Rot-Schwarz Bäume gelesen. - Splay Tree: insert, search, delete Funktionen Falls man mit einen Rot-Schwarz Baum endet, versuch das: - search und insertion Funktionen, delete überspringen - - Ich möchte mehr über B-Bäume lernen da sie so weit verbreitet sind bei riesigen Datenmengen. + - Ich möchte mehr über B-Bäume lernen, da sie so weit verbreitet sind bei riesigen Datenmengen. - [ ] [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - [ ] **AVL Trees** - In der Praxis: Meines Wissens nach werden sie nicht so oft in der Praxis verwendet, aber ich könnte mir vorstellen wo sie verwendet werden: Der AVL Tree ist eine weitere Datenstruktur die O(log n) Suchen, Einfügen und Löschen unterstützt. - Sie sind strenger balanciert als Rot-Schwarz Bäume, was das EInfügen und Löschen verlangsamt aber das Auslesen beschleunigt. + Sie sind strenger balanciert als Rot-Schwarz Bäume, was das Einfügen und Löschen verlangsamt aber das Auslesen beschleunigt. Das macht sie attraktiv für Datenstrukturen die nur einmal aufgebaut und geladen werden ohne Umbau, so wie Wörterbücher für Sprachen (oder für Programme, wie z.B. der Opcode eines Assemblers oder Interpreters). - [ ] [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) @@ -1780,8 +1780,8 @@ Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt sondern es macht sie auch zu wertvollen Bausteinen in andere Datenstrukturen mit worst-case Garantien. Z.B. viele Datenstrukturen aus der algorithmischen Geometrie können auf Rot-Schwarz Bäumen basieren, und der Completely Fair Scheduler der in aktuellen Linux Kernels verwendet wird benutzt Rot-Schwaz Bäume. - In Java 8 wurde die Collection Hashmao so angepasst, dass anstelle einer verketteten Listen ein Rot-Schwarz Baum - benutzt wird um identische Elemente mit schlechten Hashwerten zu speichern. + In Java 8 wurde die Collection Hashmap so angepasst, dass anstelle einer verketteten Listen ein Rot-Schwarz Baum + benutzt wird, um identische Elemente mit schlechten Hashwerten zu speichern. - [ ] [Aduni - Algorithms - Lecture 4 (Link springt direkt zum Anfang) (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) - [ ] [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) @@ -1797,17 +1797,17 @@ Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt - [ ] **2-3-4 Bäume (aka 2-4 Bäume)** - In der Praxis: - Für jeden 2-4 Baum exist ein Rot-Schwarz Baum mit Datenelementen in der selben Reihenfolge. + Für jeden 2-4 Baum existiert ein Rot-Schwarz Baum mit Datenelementen in derselben Reihenfolge. Das Einfügen und Löschen auf 2-4 Bäumen ist äquivalent zum Farbwechsel und Rotation im Rot-Schwarz Baum. - Das macht 2-4 Bäume zu einen wichtigen Werkzeug um die Logik hinter Rot-Schwarz Bäumen zu verstehen, - und deswegen führen viele Algorithmen Bücher für Einsteiger 2-4 Bäume direkt vor Rot-Schwarz Bäumen ein - selbst obwohl **2-4 trees nicht oft in der Praxis benutzt werden**. + Das macht 2-4 Bäume zu einem wichtigen Werkzeug, um die Logik hinter Rot-Schwarz Bäumen zu verstehen. + Und deswegen führen viele Algorithmen Bücher für Einsteiger 2-4 Bäume direkt vor Rot-Schwarz Bäumen ein + selbst obwohl **2-4 Trees nicht oft in der Praxis benutzt werden**. - [ ] [CS 61B Lecture 26: Balanced Search Trees (video)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - [ ] [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) - [ ] **N-fache (K-fache, M-fache) Bäume** - - Notiz: das N oder K ist der Verzweigungsgrad (max Zweige) + - Notiz: das N oder K ist der Verzweigungsgrad (max. Zweige) - Binärbäume sind 2-fache Bäume, mit Verzweigungsgrad = 2 - 2-3 Trees sind 3-fache - [ ] [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) @@ -1816,7 +1816,7 @@ Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt - Fun Fact: Es ist ein Mysterium, aber das B könnte für Boeing, Balanciert, oder Bayer (Co-Erfinder) stehen - In der Praxis: B-Bäume sind weit verbreitet in Datenbanken. Die meisten modernen Dateisysteme sind B-Bäume (oder Varianten davon). - Zusätzlich zum Einsatz in Datenbanken, werden B-Bäume auch in Dateisystemen benutzt um schnellen Zugriff auf einen + Zusätzlich zum Einsatz in Datenbanken werden B-Bäume auch in Dateisystemen benutzt, um schnellen Zugriff auf einen beliebigen Block in einer bestimmten Datei zu ermöglichen. Das Grundproblem ist es die Adresse eines Dateiblockes in die Adresse eines Diskblocks (oder eines Zylinder-Kopf-Sektors) zu verwandeln. - [ ] [B-Tree](https://en.wikipedia.org/wiki/B-tree) @@ -1853,7 +1853,7 @@ Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt - [ ] [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg) - ### Treap - - Kombination eines binären Suchbaums mit eine Heap + - Kombination eines binären Suchbaums mit einem 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) @@ -1885,7 +1885,7 @@ Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt - Kurse: - [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning) - [nur Videos](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) - - siehe Videos 12-18 für einen Auffrisung von Linearer Algebra (14 und 15 sind Duplikate) + - siehe Videos 12-18 für eine Auffrischung zu Linearer Algebra (14 und 15 sind Duplikate) - [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) @@ -1908,9 +1908,9 @@ Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt
Weitere Details zu ausgewählten Themen - Ich habe das hinzugefügt um eine Ideen weiter oben zu verstärken, aber ich wollte sie nicht - oben hinzufügen weil es sonst zu viel wäre. Es ist leicht es mit einen Thema zu übertreiben. - Ihr wollt doch noch in diesen Jahrhundert eingestellt werden, oder? + Ich habe das hinzugefügt, um einige Ideen weiter oben zu verstärken, aber ich wollte sie nicht + oben hinzufügen, weil es sonst zu viel wäre. Es ist leicht es mit einen Thema zu übertreiben. + Ihr wollt doch noch in diesem Jahrhundert eingestellt werden, oder? - [ ] **Union-Find** - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) @@ -1933,7 +1933,7 @@ Algorithmen bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt - [ ] [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 **Wahrscheinlichkeit** (mathematisch, es wird langsam angegangen was gut bei Mathe ist) (Videos): +- [ ] MIT **Wahrscheinlichkeit** (mathematisch, es wird langsam angegangen, was gut bei Mathe ist) (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) @@ -2049,8 +2049,8 @@ Zurücklehnen und genießen. "Netflix and skill" :P ## Informatikkurse -- [Liste von Online Informatkkursen](https://github.com/open-source-society/computer-science) -- [Liste von Informatkkursen (viele mit Online Vorlesungen)](https://github.com/prakhar1989/awesome-courses) +- [Liste von Online Informatikkursen](https://github.com/open-source-society/computer-science) +- [Liste von Informatikkursen (viele mit Online Vorlesungen)](https://github.com/prakhar1989/awesome-courses) ## Paper (Wissenschaftliche Artikel) From fa018d1ecf1c31f1506def72b8ee6c651fa032ac Mon Sep 17 00:00:00 2001 From: rene Date: Fri, 2 Aug 2019 19:05:08 +0200 Subject: [PATCH 128/263] - german translation - some typos and grammar errors - some parts were still not translated --- translations/README-de.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/translations/README-de.md b/translations/README-de.md index 7c21459..bf272e9 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -1,6 +1,6 @@ # Coding Interview University -> Ursprünglich habe ich dies als eine kurze To-do Liste von Studienthemen angefangen, um Software Engineer zu werden, +> Ursprünglich habe ich dies als eine kurze To-do Liste von Studienthemen angefangen, um Softwareingenieur zu werden, > aber es ist zu der riesigen Liste herangewachsen, die man heute sehen kann. Nachdem ich diesen Lehrplan durchgezogen > habe, [wurde ich als Software Entwickler bei Amazon eingestellt](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! > Wahrscheinlich wirst du nicht so viel lernen müssen wie ich. Aber egal, alles was man braucht, findest man hier. @@ -47,13 +47,13 @@ ## Worum es geht -Das ist mein mehrmonatiger Lehrplan um sich vom Web Developer (Selbststudium, kein Abschluss in Informatik) zum Software Engineer bei einer großen Firma zu entwickeln. +Das ist mein mehrmonatiger Lehrplan um sich vom Web Developer (Selbststudium, kein Abschluss in Informatik) zum Softwareingenieur bei einer großen Firma zu entwickeln. ![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) -Dies ist gedacht für **neue Software Engineers** oder solche die von der Software/Web Entwicklung zum Software +Dies ist gedacht für **neue Softwareingenieure** oder solche die von der Software/Web Entwicklung zum Software Engineering wechseln wollen (wobei Informatikkenntnisse benötigt werden). Falls man behauptet mehrere Jahre an Erfahrung -als Software Engineer zu haben, erwartet einen ein hartes Vorstellungsgespräch. +als Softwareingenieur zu haben, erwartet einen ein hartes Vorstellungsgespräch. Falls du schon mehrere Jahre Erfahrung in der Software/Webentwicklung hast, muss dir klar sein, dass große Software Unternehmen wie Google, Amazon, Facebook oder Microsoft Software Engineering und Software Entwicklung @@ -73,7 +73,7 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Über Videoquellen](#about-video-resources) - [Ablauf von Vorstellungsgesprächen und allgemeine Vorbereitung darauf](#interview-process--general-interview-prep) - [Wähle eine Sprache für das Vorstellungsgespräch](#pick-one-language-for-the-interview) -- [Buchliste](#book-list) +- [Literaturliste](#book-list) - [Bevor du anfängst](#before-you-get-started) - [Was hier nicht behandelt wird](#what-you-wont-see-covered) - [Voraussetzungen](#prerequisite-knowledge) @@ -109,12 +109,12 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Noch mehr](#even-more-knowledge) - [Rekursion](#recursion) - [Dynamische Programmierung](#dynamic-programming) - - [Object-orientierte Programmierung](#object-oriented-programming) + - [Objektorientierte Programmierung](#object-oriented-programming) - [Design Patterns (Entwurfsmuster)](#design-patterns) - [Kombinatorik (n über k) und Wahrscheinlichkeiten](#combinatorics-n-choose-k--probability) - [NP, NP-Vollständig und Heuristiken](#np-np-complete-and-approximation-algorithms) - [Caches](#caches) - - [Proczsse und Threads](#processes-and-threads) + - [Prozesse und Threads](#processes-and-threads) - [Testen](#testing) - [Scheduling](#scheduling) - [Stringsuche und -manipulationen](#string-searching--manipulations) @@ -140,7 +140,7 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Zusätzliche Bücher](#additional-books) - [Zusätzliches Wissen](#additional-learning) - - [Compilers (Übersetzer)](#compilers) + - [Compiler (Übersetzer)](#compilers) - [Emacs und vi(m)](#emacs-and-vim) - [Unix Kommandozeilenwerkzeuge](#unix-command-line-tools) - [Informationstheorie](#information-theory-videos) @@ -180,7 +180,7 @@ Liste (Netzwerke, Sicherheit) ansehen. - [Weitere Details zu ausgewählten Themen](#additional-detail-on-some-subjects) - [Videoreihen](#video-series) - [Infomatikkurse](#computer-science-courses) -- [Paper (Wissenschaftliche Artikel)](#papers) +- [Paper (Wissenschaftliche Veröffentlichtungen)](#papers)
@@ -234,7 +234,7 @@ Ich benutze GitHub's spezielle Version von Markdown, das beinhält Aufgabenliste
## Halt dich nicht für dümmer als du bist -- Erfolgreiche Software Engineers sind klug, aber viele sind sich unsicher, ob sie klug genug sind. +- Erfolgreiche Softwareingenieure sind klug, aber viele sind sich unsicher, ob sie klug genug sind. - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) - [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) - [Believe you can change](http://www.aaronsw.com/weblog/dweck) @@ -303,7 +303,7 @@ Hier kannst du mehr über die Wahl lesen: Unten sind ein paar Materialien zu C, C++ und Python zu finden, weil ich das gerade lerne. Es gehören einige Bücher dazu, siehe unten. -## Buchliste +## Literaturliste Die Liste ist kürzer als die, die ich tatsächlich benutzt habe. Ich habe es etwas abgekürzt, um euch Zeit zu sparen. @@ -1404,7 +1404,7 @@ Zusatz: - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - Antworten in Java -Siehe [Buchliste oben](#book-list) +Siehe [Literaturliste oben](#book-list)
@@ -1505,8 +1505,8 @@ Man ist nie wirklich fertig. Alles unterhalb hiervon ist optional. Wenn man das studiert, bekommt man mehr Wissen zu Informatikkonzepten, und wird besser auf - einen Software Engineer Job vorbereitet sein. - Man ist dann ein abgerundeterer Software Engineer. + einen Softwareingenieur Job vorbereitet. + Man ist dann ein abgerundeterer Softwareingenieur. ***************************************************************************************************** ***************************************************************************************************** @@ -1572,7 +1572,7 @@ Man ist nie wirklich fertig. Zusätzliches Wissen Diese Themen werden vermutlich nicht in einen Vorstellungsgespräch aufkommen, aber ich habe sie trotzdem hinzugefügt -um euch dabei zu helfen ein vollständiger Software Engineer zu werden und damit ihr über bestimmte Technologien und +um euch dabei zu helfen ein vollständiger Softwareingenieur zu werden und damit ihr über bestimmte Technologien und Algorithmen Bescheid wisst, sodass ihr eine größere Auswahl an Werkzeugen habt. - ### Compiler @@ -2052,10 +2052,10 @@ Zurücklehnen und genießen. "Netflix and skill" :P - [Liste von Online Informatikkursen](https://github.com/open-source-society/computer-science) - [Liste von Informatikkursen (viele mit Online Vorlesungen)](https://github.com/prakhar1989/awesome-courses) -## Paper (Wissenschaftliche Artikel) +## Paper (Wissenschaftliche Veröffentlichtungen)
-Paper (Wissenschaftliche Artikel) +Paper (Wissenschaftliche Veröffentlichtungen) - [Liebst du klassische Paper?](https://www.cs.cmu.edu/~crary/819-f09/) - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) From 0f4b744943ca425629c48341d347c3c802efcdc0 Mon Sep 17 00:00:00 2001 From: OhIAmFine <845782625@qq.com> Date: Tue, 6 Aug 2019 13:59:26 +0800 Subject: [PATCH 129/263] docs: remove future google sign img --- translations/README-cn.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 747517b..dbf0bad 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -135,8 +135,6 @@ 把一个(或两个)印有“[future Googler](https://github.com/jwasham/coding-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/coding-interview-university/blob/master/extras/future-googler.pdf) - ## 我得到了工作吗? 我还没去应聘。 From 34e6b9889304b29862e4cda007537e015d6a7db6 Mon Sep 17 00:00:00 2001 From: OhIAmFine <845782625@qq.com> Date: Thu, 8 Aug 2019 10:33:04 +0800 Subject: [PATCH 130/263] docs: still remove google img --- translations/README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index dbf0bad..3568726 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -133,7 +133,7 @@ ## 拥有一名 Googler 的心态 -把一个(或两个)印有“[future Googler](https://github.com/jwasham/coding-interview-university/blob/master/extras/future-googler.pdf)”的图案打印出来,并用你誓要成功的眼神盯着它。 +把一个(或两个)印有 “future Googler” 的图案打印出来,并用你誓要成功的眼神盯着它。 ## 我得到了工作吗? From 7ab4c2898ee8fe90cb735a71a8518535ada1003b Mon Sep 17 00:00:00 2001 From: OhIAmFine <845782625@qq.com> Date: Thu, 8 Aug 2019 13:19:49 +0800 Subject: [PATCH 131/263] docs: remove text related useless google img --- translations/README-cn.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 3568726..62e4038 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -131,10 +131,6 @@ [更多关于 Github-flavored markdown 的详情](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) -## 拥有一名 Googler 的心态 - -把一个(或两个)印有 “future Googler” 的图案打印出来,并用你誓要成功的眼神盯着它。 - ## 我得到了工作吗? 我还没去应聘。 From 878e5448d9740779d13162f6b6d13ae2f98c3b9f Mon Sep 17 00:00:00 2001 From: Max K Date: Sat, 10 Aug 2019 22:53:10 -0700 Subject: [PATCH 132/263] Fixed broken link for MIT"s 6.004 Computation Structures lecture recordings. New link is for videos from the Fall 2018 course. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e136576..d5b33a1 100644 --- a/README.md +++ b/README.md @@ -2000,7 +2000,7 @@ Sit back and enjoy. "Netflix and skill" :P - [ ] ~~[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-) +- [ ] [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) - [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) From f8611d96a9bcce081d0d2b8bc9151ae599975214 Mon Sep 17 00:00:00 2001 From: tan zhixiang Date: Tue, 20 Aug 2019 11:12:55 +0900 Subject: [PATCH 133/263] Update README-ar.md fix the Chinese version link --- translations/README-ar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ar.md b/translations/README-ar.md index fd54d76..8346fb1 100644 --- a/translations/README-ar.md +++ b/translations/README-ar.md @@ -1,7 +1,7 @@ # الإعداد لجوجل الترجمه: -- [中文版本](translations/README-cn.md) +- [中文版本](README-cn.md) - الترجمات تحت الاعداد: - [Español](https://github.com/jwasham/coding-interview-university/issues/80) - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) From df95f82a1781cade0c143fc00c77015305061d4d Mon Sep 17 00:00:00 2001 From: Max K Date: Tue, 20 Aug 2019 19:47:44 -0700 Subject: [PATCH 134/263] Fix link to networking section in table of contents --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d5b33a1..1b80601 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ If you want to be a reliability engineer or operations engineer, study more from - [Floating Point Numbers](#floating-point-numbers) - [Unicode](#unicode) - [Endianness](#endianness) -- [Networking](#networking) + - [Networking](#networking) - [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) - [Final Review](#final-review) - [Coding Question Practice](#coding-question-practice) From 77d30f6517b0bb2cb8e7ff89a367a11f2fa338dc Mon Sep 17 00:00:00 2001 From: MahzadK Date: Mon, 7 Oct 2019 18:35:18 +0330 Subject: [PATCH 135/263] [French Translation]Typo correction --- translations/README-fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/README-fr.md b/translations/README-fr.md index 690cd98..65fb769 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -27,7 +27,7 @@ Si vous souhaitez devenir ingénieur de fiabilité, ou ingénieur systèmes, sui ## Table of Contents - [C'est quoi?](#what-is-it) -- [Pourquoi l'utilisier?](#why-use-it) +- [Pourquoi l'utiliser?](#why-use-it) - [Comment s'en servir](#how-to-use-it) - [Se mettre dans l'humeur Googley](#get-in-a-googley-mood) - [J'ai décroché le Job?](#did-i-get-the-job) @@ -37,7 +37,7 @@ Si vous souhaitez devenir ingénieur de fiabilité, ou ingénieur systèmes, sui - [A propos des ressources vidéo](#about-video-resources) - [Déroulement de l'entretien & préparations générales à l'entretien](#interview-process--general-interview-prep) - [Choisir un langage pour l'entretien](#pick-one-language-for-the-interview) -- [List de livres](#book-list) +- [Liste de livres](#book-list) - [Avant de commencer](#before-you-get-started) - [What you Won't See Covered](#what-you-wont-see-covered) - [Prerequisite Knowledge](#prerequisite-knowledge) From ed0d2a47ab646c646e0d654610a4823f252b84ea Mon Sep 17 00:00:00 2001 From: Nikita S Date: Thu, 10 Oct 2019 12:15:43 +0300 Subject: [PATCH 136/263] Translated Emacs, vim, Unix tools part, small fixes happy hacktoberfest! --- translations/README-ru.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 12e4f1d..efb2d23 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1502,7 +1502,7 @@ Google не возьмёт тебя на работу. - [ ] [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk) - [ ] [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU) -- ### Floating Point Numbers +- ### Числа с плавающей точкой - [ ] 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) @@ -1510,36 +1510,36 @@ Google не возьмёт тебя на работу. - [ ] [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 +- ### Порядок байт (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 +- ### Emacs и vi(m) + - предложено Yegge, из старого поста по найму в Amazon: 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 01 - Установка, настройка и Режимы (видео на англ.)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) - [VIM Adventures](http://vim-adventures.com/) - - set of 4 videos: + - Набор из 4 видео: - [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) + - [Использование 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 Руководство (видео на англ.)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) + - набор из 3 (видео на англю): - [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=JWD1Fpdd4Pc) + - [Написание программ на языке C в Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) + - [(возможно) Погружение в Org режим: Управляя структурой (видео на англ.)](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 + - предложено Yegge, из старого поста по найму в Amazon. Я создал список ниже с хорошими утилитами. - [ ] bash - [ ] cat - [ ] grep From 5dc5457b26e7d538485ad95476888a23af23bcde Mon Sep 17 00:00:00 2001 From: Nikita S Date: Fri, 11 Oct 2019 22:51:21 +0300 Subject: [PATCH 137/263] additional resource for B-tree Found a good intro to B-trees --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1b80601..a814bf4 100644 --- a/README.md +++ b/README.md @@ -1808,6 +1808,7 @@ software engineer, and to be aware of certain technologies and algorithms, so yo 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) + - [ ] [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) - [ ] [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) From 18a0d39e58ce3979e45362dd236d4d8c9f941620 Mon Sep 17 00:00:00 2001 From: Nikita S Date: Fri, 11 Oct 2019 23:33:18 +0300 Subject: [PATCH 138/263] grammar fixes, bit of translate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Опечатки, орфография и чуть перевода от начала до деревьев happy hacktoberfest --- translations/README-ru.md | 54 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index efb2d23..f6cf63f 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -156,7 +156,7 @@ ## Чем это полезно? Я следую этому плану, готовясь к собеседованию в Google. Я разрабатываю веб-приложения, сервисы и запускаю стартапы с -1997 года. У меня есть степень по экономике, но нет по CS. На данные момент у меня очень успешная карьера, но я хочу работать +1997 года. У меня есть степень по экономике, но нет по CS. На данный момент у меня очень успешная карьера, но я хочу работать в Google. Я хочу работать с большими системами и понять принципы их работы, изучить эффективность алгоритмов и различные структуры данных, узнать, как работают низкоуровневые языки программирования. Если ты не знаешь что-то из перечисленного, Google не возьмёт тебя на работу. @@ -254,7 +254,7 @@ Google не возьмёт тебя на работу. прежде чем получите к ним доступ. Курсы на Lynda.com платные. Я был бы вам благодарен за помощь в добавлении бесплатных, всегда доступных публичных ресурсов, таких - как видео с YouTube сопровождающих онлайн курсы. Мне нравяться использовать университетские лекции. + как видео с YouTube сопровождающих онлайн курсы. Мне нравится использовать университетские лекции. ## Процесс собеседования & Основное в подготовке к интервью @@ -275,11 +275,11 @@ Google не возьмёт тебя на работу. - [ ] Подготовительные курсы: - [ ] [Собеседование инженера-программиста (платный курс)](https://www.udemy.com/software-engineer-interview-unleashed): - - Как самостоятельно подготовиться r собеседованию на позицию инженера-программиста от бывшего сотрудника Google + - Как самостоятельно подготовиться к собеседованию на позицию инженера-программиста от бывшего сотрудника Google - [ ] Дополнительно (это не рекомендация Google, а моя собственная): - [ ] [ABC: Программируй всегда](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - - [ ] [4 шага в Google без образованияв CS](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) + - [ ] [4 шага к Google без образования в CS](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx) - [ ] [Кодирование на доске](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) - [ ] [Что думает Google о найме, управлении и культуре](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture) - [ ] [Эффективное кодирование на доске в процессе собеседования](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) @@ -315,7 +315,7 @@ Google не возьмёт тебя на работу. [Ресурсы по языкам программирования вы можете найти тут](../programming-language-resources.md) -Вы найдете кое-что по С, С++ и Python ниже, потому-что я еще в процессе обучения. +Вы найдете кое-что по С, С++ и Python ниже, потому что я еще в процессе обучения. ## Список книг @@ -323,7 +323,7 @@ Google не возьмёт тебя на работу. ### Подготовка к собеседованию -- [ ] [Собеседование по программированию в подробнастях: Секреты получения твоей следующей работы, 2-е издание](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) +- [ ] [Собеседование по программированию в подробностях: Секреты получения твоей следующей работы, 2-е издание](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - ответы на C++ и Java - рекомендации Google по обучению кандидатов - это отличная разминка перед подробным разбором собеседования по программированию @@ -346,11 +346,11 @@ Google не возьмёт тебя на работу. - [ ] [Писать отличный код: Том 1: Понимание компьютера](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - Книга была опубликована в 2004 и отчасти она устарела, но благодаря ей вы быстро поймете как устроены компьютеры. - - Автор придумал HLA, поэтому скептически отнеситесь к примерам и упоминаниям HLA. Широко не используется, но содержит ряд примеров, демострирующих assembler. + - Автор придумал HLA, поэтому скептически отнеситесь к примерам и упоминаниям HLA. Широко не используется, но содержит ряд примеров, демонстрирующих assembler. - Чтение следующих глав не займет много времени и даст хорошую основу: - Глава 2 - Представление в числовой форме - Глава 3 - Двоичная арифметика и битовые операции - - Глава 4 - Представление числа с плавующей запятой + - Глава 4 - Представление числа с плавающей точкой - Глава 5 - Представление символа - Глава 6 - Организация памяти и доступа - Глава 7 - Составные типы данных и объекты в памяти @@ -358,7 +358,7 @@ Google не возьмёт тебя на работу. - Глава 10 - Набор инструкций - Глава 11 - Архитектура и организация памяти -Если вы рапологаете свободным временем (я хочу купить эту книгу): +Если вы располагаете свободным временем (я хочу купить эту книгу): - [ ] [Архитектура компьютера, 5-е издание: Количественный подход](https://www.amazon.com/dp/012383872X/) @@ -378,7 +378,7 @@ Google не возьмёт тебя на работу. - [ ] [Алгоритмы на C++, Части 1-4: Основы, Структуры данных, Сортировка, Поиск](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) - [ ] [Алгоритмы на C++ Часть 5: Алгоритмы графов](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) -Если вы можете порекоммендовать литературу по C++, которая лучше, сообщите мне об этом. Я ищу лучшие книги. +Если вы можете порекомендовать литературу по C++, которая лучше, сообщите мне об этом. Я ищу лучшие книги. ### Java @@ -417,12 +417,12 @@ Google не возьмёт тебя на работу. - автор описывает реальный опыт решения задач как академических, так и промышленных - примеры кода написаны на C - недостатки: - - местами изложение может быть не очевидным и не понятным как в CLRS (Cormen, Leiserson, Rivest, Stein), некоторые темы лучше описаны в CLRS + - местами изложение может быть неочевидным и непонятным как в CLRS (Cormen, Leiserson, Rivest, Stein), некоторые темы лучше описаны в CLRS - главы 7, 8, 9 сложно понять, некоторые вещи плохо разъяснены или требуют больших знаний чем есть у меня - - не поймите меня не правильно: Мне нравиться Skiena, ее стиль и манера изложения, но я не могу стать физически Stony Brook. + - не поймите меня неправильно: Мне нравится Skiena, его стиль и манера изложения, но я не могу стать физически Stony Brook. - каталог алгоритмов: - это реальная причина, почему следует купить эту книгу. - - о том как дойти до этой части. Обновлю, когда изучу этот раздел. + - о том, как дойти до этой части. Обновлю, когда изучу этот раздел. - Цитата Йеги: "Больше чем какая-либо другая книга, эта помогла мне понять насколько банальны задачи на графы - они должны быть в инструментарии каждого программиста. Книга так же включает в себя разбор базовых структур данных и алгоритмов сортировки, что является приятным бонусом. Но важнейшей частью стала вторая часть книги, которая написана как энциклопедия, описывающая большое @@ -465,7 +465,7 @@ Google не возьмёт тебя на работу. Прочитайте пожалуйста эту статью, что бы не совершать моих ошибок: -[Как сохранить знания в CS](https://googleyasheck.com/retaining-computer-science-knowledge/) +[Как сохранить знания в CS](https://startupnextdoor.com/retaining-computer-science-knowledge/) ### 2. Используйте карточки-напоминания @@ -477,7 +477,7 @@ Google не возьмёт тебя на работу. Сделай свой собственный бесплатно: - [Репозиторий сайта Flashcards](https://github.com/jwasham/computer-science-flash-cards) -- [Моя база данных с карточками](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Имейте ввиду, я зделал больше чем требуется в Google, описав все начиная с assembler и заканчивая Python с машиным обучением и статистикой. +- [Моя база данных с карточками](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Имейте в виду, я сделал больше чем требуется в Google, описав все начиная с assembler и заканчивая Python с машиным обучением и статистикой. **Заметка о карточках:** в первый раз вы сразу вспомните ответ, но не помечайте эту карточку как изученную. Нужно просмотреть много раз карточку и ответить правильно прежде чем вы действительно ее запомните. Повторение позволяет мозгу надолго @@ -541,10 +541,10 @@ Google не возьмёт тебя на работу. ## Необходимые знания - [ ] **Изучайте C** - - С используется везде. Вы встретите примеры в книгах, лекциях, видео, везде, пока вы будите учиться. + - С используется везде. Вы встретите примеры в книгах, лекциях, видео, везде, пока вы будете учиться. - [ ] [Язык программирования С, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - Это небольшая книга, но после ее прочтения вы получите необходимые знания по С и если будите практиковать, - то достаточно быстро его освоите. Понимание С поможет вам понять как программы и память работают. + - Это небольшая книга, но после ее прочтения вы получите необходимые знания по С и если будете практиковать, + то достаточно быстро его освоите. Понимание С поможет вам понять как работают программы и память. - [ответы на вопросы](https://github.com/lekkas/c-algorithms) - [ ] **Как компьютеры выполняют программу:** @@ -599,9 +599,9 @@ Google не возьмёт тебя на работу. - [ ] insert(index, item) - вставка элемента по индексу, сдвигает значение по индексу и следующие за ним элементы вправо - [ ] prepend(item) - может вставить элемент выше индекса 0 - [ ] pop() - удалить последний элемент, вернуть значение - - [ ] delete(index) - удаляет элемент по индексу, сдвигает все следующие за ним элементы в лево + - [ ] delete(index) - удаляет элемент по индексу, сдвигает все следующие за ним элементы влево - [ ] remove(item) - ищет элементы по значению и удаляет их, даже если их несколько - - [ ] find(item) - ищет элемент по значению и возвращает индекс первого найденного элемента, возвращает -1 если ничего не найденно + - [ ] find(item) - ищет элемент по значению и возвращает индекс первого найденного элемента, возвращает -1 если ничего не найдено - [ ] resize(new_capacity) // private function - когда массив полностью заполнен, увеличивает его размер вдвое - при добавлении элемента, если размер массива 1/4 от общего размера, увеличиваем на половину @@ -622,10 +622,10 @@ Google не возьмёт тебя на работу. - [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) - - [ ] Ага, попался: тебе нужны знания указетелей на указатели: + - [ ] Ага, попался: тебе нужны знания указателей на указатели: (для тех случаев, когда ты передаешь указатель функции, которая может менять адрес, куда указывает указатель) Это страница просто для того, чтобы понять указатели на указатели. Читабельность и обслуживаемость страдает - из-за искусность. + из-за искусности. - [Указатели на указатели](https://www.eskimo.com/~scs/cclass/int/sx8.html) - [ ] воплотить в жизнь (я сделал это с помощью указателя на хвост и без): - [ ] size() - возвращает количество элементов в листе @@ -661,13 +661,13 @@ Google не возьмёт тебя на работу. - enqueue(value) - добавляет элемент в конец очереди - dequeue() - возвращает значение и удаляет из очереди последний добавленный элемент(front) - empty() - - [ ] Реализация с приминением массива фиксированного размера: + - [ ] Реализация с применением массива фиксированного размера: - enqueue(value) - добавляет элемент в конец очереди - dequeue() - возвращает значение и удаляет из очереди последний добавленный элемент - empty() - full() - [ ] Затраты: - - плохая реализация с приминением связанного списка когда элемент добавляется в начало очереди и удаляется с конца очереди за O(n), + - плохая реализация с применением связанного списка когда элемент добавляется в начало очереди и удаляется с конца очереди за O(n), операция dequeue в таком случае будет требовать каждый раз обхода всего списка - enqueue: O(1) (amortized, связанный список и массив [probing]) - dequeue: O(1) (связанный список и массив) @@ -694,7 +694,7 @@ Google не возьмёт тебя на работу. - [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) - - [ ] реализация с помощью массива и приминением linear probing + - [ ] реализация с помощью массива и применением linear probing - hash(k, m) - m размер хеш-таблицы - add(key, value) - если ключ уже существует обновляем значение - exists(key) @@ -712,8 +712,8 @@ Google не возьмёт тебя на работу. - бинарный поиск с использованием рекурсии - ### Побитовые операции - - [ ] [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) - - [ ] Даст отличное понимание манипуляции битами с помощью: &, |, ^, ~, >>, << + - [ ] [Bits cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - ты должен знать сколько степеней двойки от (2^1 до 2^16 и 2^32) + - [ ] Даст отличное понимание манипуляций битами с помощью: &, |, ^, ~, >>, << - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] Хорошее введение: [Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I) From b745d90157189c20b790955a388d1a741ad7f8ce Mon Sep 17 00:00:00 2001 From: Sanket <53693680+firefire-iceice@users.noreply.github.com> Date: Sun, 13 Oct 2019 00:47:19 +0530 Subject: [PATCH 139/263] Added a resource for c++ Added the link to a popular c++ book recommended by many --- programming-language-resources.md | 1 + 1 file changed, 1 insertion(+) diff --git a/programming-language-resources.md b/programming-language-resources.md index bf77825..c4d93f8 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -29,6 +29,7 @@ - [Efficiency with Algorithms, Performance with Data Structures (video)](https://youtu.be/fHNmRkzxHWs) - [Review of C++ concepts (video)](https://www.youtube.com/watch?v=Rub-JsjMhWY) - [Let us C++](https://books.google.co.in/books/about/Let_Us_C++.html?id=6HrjAAAACAAJ) + - [C++ Primer](https://books.google.co.in/books/about/C++_Primer.html?id=J1HMLyxqJfgC&redir_esc=y) - Python - [Python Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/python-cheat-sheet-v1.pdf) - [Python in One Video](https://www.youtube.com/watch?v=N4mEzFDjqtA) From 3593a8da452a24007fafd8933241ff513ed910df Mon Sep 17 00:00:00 2001 From: Bhargav Date: Sat, 19 Oct 2019 19:47:19 -0600 Subject: [PATCH 140/263] Add Cracking Fb Interview Added links to two videos of Gayle Laakman (CTCI) demonstrating and explaining the Facebook interview process --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a814bf4..92a87b8 100644 --- a/README.md +++ b/README.md @@ -259,7 +259,9 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] [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) - +- [ ] Cracking the Facebook Coding Interview + - [] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) - [ ] Prep Course: - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. From 4a62da67b64217d146abed02d0c67cb2db895c05 Mon Sep 17 00:00:00 2001 From: Oxana Kostikova Date: Tue, 29 Oct 2019 00:25:47 +0300 Subject: [PATCH 141/263] Add translation of system design section --- translations/README-ru.md | 244 +++++++++++++++++++------------------- 1 file changed, 121 insertions(+), 123 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f6cf63f..abe3b8f 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1,4 +1,4 @@ -# Google Interview University +https://twitter.com/home# Google Interview University Оригинальная версия: [Английский](../README.md) @@ -1160,130 +1160,128 @@ Google не возьмёт тебя на работу. --- -## System Design, Scalability, Data Handling -- **You can expect system design questions if you have 4+ years of experience.** -- 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. -- 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) -- [ ] 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) +## Проектирование систем, Масштабируемость, Обработка данных +- **Вы можете ожидать вопросов по проектированию систем если у вас 4+ лет опыта.** +- Масштабируемость и Проектирование систем это очень большие темы с большим количеством разделов и ресурсов, так как нужно многое учитывать при создании расширяемой программной/аппаратной системы. На освоение этого может уйти немало времени. +- Заметки от Стива Йеги: + - масштабируемость + - Извленечние отдельных значений из больших наборов данных + - Преобразование одних наборы данных в другие + - Обработка неприлично больших объёмов данных + - проектирование систем + - наборы функций + - интерфейсы + - иерархии классов + - проектирование системы удовлетворяющей определённым ограничениям + - простота и надёжность + - компромиссы + - анализ производительности и оптимизации +- [ ] **НАЧНИТЕ С ЭТОГО**: [Проектирование систем от 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 (видео)](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) +- [ ] [Транзакции через центры обработки данных (видео)](https://www.youtube.com/watch?v=srOgpXECblk) +- [ ] [Простое английское введение в теорему CAP](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) +- [ ] Алгоритм Паксос: + - [короткое видео](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [более длинное видео со сценарием использования и мульти-паксосом](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) +- [ ] Масштабируемость: + - [ ] [Большой обзор (видео)](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) + - [ ] [Масштабируемая Веб-архитектура и Распределённые системы](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) + - [дополнительно: обработка графиков Google Pregel](http://horicky.blogspot.com/2010/07/google-pregel-graph-processing.html) + - [ ] [Джефф Дин - создание программных систем в Google и извлечённые уроки (видео)](https://www.youtube.com/watch?v=modXC5IWTJI) + - [ ] [Введение в проектирование расширяемых систем](http://lethain.com/introduction-to-architecting-systems-for-scale/) + - [ ] [Масштабирование мобильных игр для глобальной аудитории с использованием App Engine и Cloud Datastore (видео)](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [Как Google разрабатывает планетарное масштабирование для инфраструктуры планетарного масштаба (видео)](https://www.youtube.com/watch?v=H4vMcD7zKM0) + - [ ] [Важность алгоритмов](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), "Разработка для миллиарда пользователей" (видео)](https://www.youtube.com/watch?v=oodS71YtkGU) + - [ ] [Проектирование для "долгой игры" - Основной принцип Астрид Аткинсон (видео)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) + - [ ] [7 лет уроков масштабирования с YouTube за 30 минут](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) + - [видео](https://www.youtube.com/watch?v=G-lGCC4KKok) + - [ ] [Как PayPal расширили для миллиардов транзакций в день используя всего лишь 8 виртуальных машин](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 с Джоном Кови (видео)](https://www.youtube.com/watch?v=3vV4YiqKm1o) + - [ ] [Что привело Amazon к созданию собственной микросервисной архитектуры](http://thenewstack.io/led-amazon-microservices-architecture/) + - [ ] [Сжимать или не сжимать - такой вопрос стоял перед Uber](https://eng.uber.com/trip-data-squeeze/) + - [ ] [Asyncio Tarantool Queue, вставай в очередь](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: уроки, извлеченные при построении и масштабировании многопетабайтной распределенной системы](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) + - [ ] [Руководство для начинающих по масштабированию до 11 миллионов пользователей на Amazon AWS](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 Counter угрозу существованию 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 - 50 миллионов пользователей в месяц и более](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) + - [ ] [Архитектура TripAdvisor - 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 - Как они обрабатывают 1.3 миллиарда транзакций в день](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) + - [ ] [Архитектура ESPN в процессе расширения - работа со скоростью 100,000 Duh Nuh Nuhs в секунду](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/) - - [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/) + - [O'Reilly MySQL CE 2011: Джереми Койл, "Большие и маленькие данные в @Twitter" (видео)](https://www.youtube.com/watch?v=5cKTP36HVgI) + - [Timelines в процессе расширения](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) + - Чтобы узнать ещё больше, посмотрите серию видео "Mining Massive Datasets" в разделе "Серии видео". +- [ ] Практика в проектировании систем: несколько идей чтобы проработать их с небольшим количеством информации о том, как это было сделано в действительности: + - обзор: [Проектирование систем с HiredInTech](http://www.hiredintech.com/system-design/) + - [шпаргалка](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) + - процесс работы: + 1. Поймите проблему и контекст: + - определите сценарии использования с помощью интервьера + - предложите дополнительные функции + - уберите детали, которые интервьюер посчитает выходящими за рамки + - предположите что нужна очень высокая доступность, добавьте соответствующий сценарий использования + 2. Подумайте об ограничениях: + - спросите сколько предполагается запросов в месяц + - спросите сколько предполагается запросов в секунду (вам могут просто сказать или предложить посчитать самостоятельно) + - ожидаемое соотношение чтений и записей + - держите в голове правило 80/20 когда оцениваете + - как много данных записывается в секунду + - общее количество памяти, необходимое через 5 лет + - как много запросов на чтение происходит в секунду + 3. Проектирование абстракций: + - слои (сервисный, данные, кэширование) + - инфраструктура: балансировка нагрузки, обмен сообщениями + - грубая оценка одного из ключевых алгоритмов которые управляют сервисом + - примите во внимание "бутылочные горлышки" и определите как от них избавиться + - Упражнения: + - [Спроектируйте CDN network: старая статья](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) + - [Спроектируйте базу данных ключ-значение](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) + - [Спроектируйте систему укорачивания URL: скопировано из верхней части](http://www.hiredintech.com/system-design/the-system-design-process/) + - [Спроектируйте кэш-систему](https://www.adayinthelifeof.nl/2011/02/06/memcache-internals/) --- From 69f31bd7e28f714c4db10bd2de3b82644fbfa882 Mon Sep 17 00:00:00 2001 From: Oxana Kostikova Date: Tue, 29 Oct 2019 00:29:05 +0300 Subject: [PATCH 142/263] Delete an unintentionally added link --- translations/README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index abe3b8f..fc444df 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1,4 +1,4 @@ -https://twitter.com/home# Google Interview University +# Google Interview University Оригинальная версия: [Английский](../README.md) From 4a04315df44430673c53679c98884ad8034dd509 Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Tue, 29 Oct 2019 22:34:29 +0400 Subject: [PATCH 143/263] translate 234 trees --- translations/README-ru.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f6cf63f..97f87e7 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1755,14 +1755,12 @@ Google не возьмёт тебя на работу. - [ ] [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) + - На практике: + На каждое 2-4 дерево, существуют соответствующие красно-чёрные деревья с элементами данных в таком же порядке. Операции вставки и удаления на 2-4 деревьях эквивалентны изменению цвета и ротациям в красно-чёрных деревьях. + Таким образом, 2-4 деревья являются важным инструментом в понимании логики красно-чёрных деревьев, именно поэтому много вводных учебников по алгоритмам начинают с 2-4 деревьев прямо перед красно-черными, несмотря на то, что **2-4 деревья редко используются на практике**. + - [ ] [CS 61B Лекция 26: Сбалансированные деревья поиска (видео)](https://www.youtube.com/watch?v=zqrqYXkth6Q&index=26&list=PL4BBB74C7D2A1049C) + - [ ] [234-Деревья Снизу Вверх (видео)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [234-Деревья Сверху Вниз (видео)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) - [ ] **N-ary (K-ary, M-ary) trees** - note: the N or K is the branching factor (max branches) From e86e096ce2396b83ea202cbba44994e67cb6ed76 Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Tue, 29 Oct 2019 22:40:37 +0400 Subject: [PATCH 144/263] translate n-ary trees --- translations/README-ru.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f6cf63f..eb41149 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1764,11 +1764,11 @@ Google не возьмёт тебя на работу. - [ ] [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) - - [ ] **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 + - 2-3 деревья 3-ичные + - [ ] [K-ичные деревья (en)](https://en.wikipedia.org/wiki/K-ary_tree) - [ ] **B-Trees** - fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor) From d0d1a6fa1e16ae43327380493fc1bbe2f7bde591 Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Tue, 29 Oct 2019 22:58:22 +0400 Subject: [PATCH 145/263] translated b trees --- translations/README-ru.md | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f6cf63f..72c1322 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1770,21 +1770,18 @@ Google не возьмёт тебя на работу. - 2-3 trees are 3-ary - [ ] [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - - [ ] **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 здесь может значить Boeing, сБалансированный, или Байер (фамилия ко-создателя) + - На практике: + B-Деревья очень широко используются в базах данных. Большинство современных файловых систем используют B-деревья (или вариации, B+ и B* деревья). + В дополнение к использованию в базах данных, B-дерево также применяют в файловых системах для быстрого рандомного доступа к произвольному блоку в конкретном файле. Основная проблема это превратить адрес i файлового блока в адрес дискового блока или, например, в CHS (цилиндр-голова-сектор). + - [ ] [B-Деревья (en)](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 - Модели Иерархии Памяти (видео)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + - включает кэш-агностические B-Деревья, крайне интересные структуры данных + - первые 37 минут очень технические, можно пропустить (B это размер блока, размер кэша) - ### k-D Trees - great for finding number of points in a rectangle or higher dimension object From 6f60da42d4a39d89a463f2acd602d30cbb2c9b0d Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Tue, 29 Oct 2019 23:24:03 +0400 Subject: [PATCH 146/263] translated kd trees --- translations/README-ru.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f6cf63f..eb37bb4 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1786,11 +1786,11 @@ Google не возьмёт тебя на работу. - the first 37 minutes are very technical, may be skipped (B is block size, cache line size) -- ### k-D Trees - - great for finding number of points in a rectangle or higher dimension object - - a good fit for k-nearest neighbors - - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) +- ### k-D Деревья + - прекрасны для нахождения всех точек в прямоугольнике или более многомерном объекте + - хорошо подходят для k-ближайших соседей + - [ ] [Kd Деревья (видео)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [ ] [kNN Алгоритм K-d дерева (видео)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ### Skip lists - "These are somewhat of a cult data structure" - Skiena From aeed865ed80f75d2f21c5e84a7281dc8f39e2446 Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Tue, 29 Oct 2019 23:29:58 +0400 Subject: [PATCH 147/263] translated skip lists --- translations/README-ru.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index f6cf63f..9f1b1eb 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1792,10 +1792,10 @@ Google не возьмёт тебя на работу. - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) -- ### 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) +- ### Список с пропусками + - "А это что-то из разряда культа в мире структур данных" - Стивен Скиена + - [ ] [Рандомизация: Список с пропусками (видео)](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) From 9b943b42a7f75010ef55843241c21086cb8cb8bd Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Wed, 30 Oct 2019 21:32:51 +0400 Subject: [PATCH 148/263] network flows translated --- translations/README-ru.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0864fa9..9de25c3 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1790,10 +1790,10 @@ Google не возьмёт тебя на работу. - [ ] [Рандомизация: Список с пропусками (видео)](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 минут (видео)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [ ] [Алгоритм Форд — Фалкерсона (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [ ] [Транспортные сети (видео)](https://www.youtube.com/watch?v=2vhN4Ice5jI) - ### Disjoint Sets & Union Find - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) From 74402f2630c67cc9171e0e820d9e6f8b3300375e Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Wed, 30 Oct 2019 21:37:07 +0400 Subject: [PATCH 149/263] translated disjoint sets --- translations/README-ru.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0864fa9..a7c4d41 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1795,9 +1795,9 @@ Google не возьмёт тебя на работу. - [ ] [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 - - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) - - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) +- ### Непересекающиеся Множества и Система Непересекающихся Множеств + - [ ] [UCB 61B - Непересекающиеся Множества; Сортировка и выборка (видео)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) + - [ ] [Алгоритмы Седжвика - Система непересекающихся множеств (6 видео)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) - ### Math for Fast Processing - [ ] [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) From 10778a6e56fcd193cb7025bf99aa33d3529d2c3b Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Wed, 30 Oct 2019 21:40:07 +0400 Subject: [PATCH 150/263] translated fast math --- translations/README-ru.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0864fa9..36b0256 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1799,9 +1799,9 @@ Google не возьмёт тебя на работу. - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) -- ### 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) +- ### Математика для Быстрой Обработки + - [ ] [Арифметика целых чисел, Умножение Карацубы (видео)](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 From 5808a3f8051cf3c30918ca2600de58f96586d555 Mon Sep 17 00:00:00 2001 From: Javid Askerov Date: Wed, 30 Oct 2019 21:43:50 +0400 Subject: [PATCH 151/263] translated heap --- translations/README-ru.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0864fa9..f40e0e0 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1803,11 +1803,11 @@ Google не возьмёт тебя на работу. - [ ] [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) +- ### Декартово дерево + - Комбинация бинарного поискового дерева и структуры данных "куча" + - [ ] [Декартово дерево](https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B2%D0%BE_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE) + - [ ] [Структуры данных: Декартово Дерево на пальцах (видео)](https://www.youtube.com/watch?v=6podLUYinH8) + - [ ] [Применения в множествах](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) - ### Linear Programming (videos) - [ ] [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ) From 801d7688e890577eaa02611662988eb74cc33369 Mon Sep 17 00:00:00 2001 From: Yuriy Kiselyov Date: Thu, 31 Oct 2019 16:20:15 +0300 Subject: [PATCH 152/263] Locality-Sensitive Hashing translate --- translations/README-ru.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0864fa9..4d64d5d 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1667,10 +1667,10 @@ Google не возьмёт тебя на работу. - ### HyperLogLog - [Как посчитать миллиард различных объектов, когда у вас есть только 1.5KB памяти](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) -- ### Locality-Sensitive Hashing - - used to determine the similarity of documents - - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. - - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) +- ### Хэширование с учетом локальных особенностей + - используется для определения сходства документов + - противоположность MD5 или SHA, которые используются для определения, являются ли 2 документа / строки одинаковыми. + - [Simhashing (надеюсь) стало проще](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### van Emde Boas Trees - [ ] [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) From 582dc313d9b2c412547b5aadb957c0935197d32e Mon Sep 17 00:00:00 2001 From: Yuriy Kiselyov Date: Thu, 31 Oct 2019 16:32:39 +0300 Subject: [PATCH 153/263] "van Emde Boas Trees" translation --- translations/README-ru.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0864fa9..93be539 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1672,9 +1672,9 @@ Google не возьмёт тебя на работу. - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) -- ### 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) +- ### Деревья ван Эмде Боаса + - [ ] [Разделяй и властвуй: Деревья ван Эмде Боаса (видео)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) + - [ ] [Конспект лекций МТИ(Массачусетский технологический институт)](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) From 670796240be16cc963783cdb4b59f027be1e76d8 Mon Sep 17 00:00:00 2001 From: Yuriy Kiselyov Date: Thu, 31 Oct 2019 16:36:30 +0300 Subject: [PATCH 154/263] Augmenting Data Structures translation --- translations/README-ru.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0864fa9..97f72cb 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1676,8 +1676,8 @@ Google не возьмёт тебя на работу. - [ ] [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) +- ### Расширенные структуры данных + - [ ] [CS 61B Лекция 39: Расширение структур данных](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) - ### Tries - Note there are different kinds of tries. Some have prefixes, some don't, and some use string instead of bits From 9439647484a8a2effde712b16775c0da6566f1e6 Mon Sep 17 00:00:00 2001 From: Yuriy Kiselyov Date: Thu, 31 Oct 2019 16:42:37 +0300 Subject: [PATCH 155/263] Geometry, Convex hull translation --- translations/README-ru.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 0864fa9..9157c18 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1815,10 +1815,10 @@ Google не возьмёт тебя на работу. - [ ] [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik) - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) -- ### 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) +- ### Геометрия, Выпуклая оболочка (видео) + - [ ] [Graph Alg. IV: Введение в геометрические алгоритмы - Лекция 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164) + - [ ] [Геометрические алгоритмы: Грэм и Джарвис - Лекция 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Разделяй и властвуй: Выпуклая оболочка, Медианный поиск](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) - ### Discrete math - see videos below From d567b8500850433ec8e29f213e6a882665a9d942 Mon Sep 17 00:00:00 2001 From: Eugene Ilyushin Date: Tue, 19 Nov 2019 17:02:32 +0300 Subject: [PATCH 156/263] Additional Learning, Compilers --- translations/README-ru.md | 257 +++++++++++++++++++------------------- 1 file changed, 128 insertions(+), 129 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 96e5a16..b643245 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1021,78 +1021,78 @@ Google не возьмёт тебя на работу. - Я знаю, что классической книгой для изучения паттернов является "Приемы объектно-ориентированного проектирования. Паттерны проектирования" (Джон Влиссидес, Ральф Джонсон, Ричард Хелм, Эрих Гамма), но "Паттерны проектирования" отлично подходят для тех, кто только начал изучать ООП. - [ ] [Удобный справочник: 101 шаблон проектирования и советы для разработчиков](https://sourcemaking.com/design-patterns-and-tips) -- ### 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) +- ### Комбинаторика (n выбрать k) & Вероятность + - [ ] [Math Математические навыки: Как найти факториал, перестановки и комбинации (видео)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) + - [ ] [Make School: Вероятность (видео)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) + - [ ] [Make School: Больше про вероятность и цепи Маркова (видео)](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) + - Макет курса: + - [ ] [Базовые основы теории вероятностей](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) + - Только видео - 41 (простые и короткие): + - [ ] [Объяснение вероятности (видео)](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) +- ### NP, NP-полные и аппрпоксимирующие алгоритмы + - Наиболее популярные NP-полные задачи, таких как задача коммивояжора и задача о рюкзаке, и то как их нужно идетифицировать на собеседованиях. + - Что означает NP-полная задача. + - [ ] [Вычислительная сложность (видео)](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 полноту (видео)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [NP полнота II & Понижение (видео)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP полнота III (видео)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP полнота IV (видео)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] Skiena: - - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-Completeness (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 Norvig discusses near-optimal solutions to traveling salesman problem: + - [ ] [CSE373 2012 - Лекция 23 - Введение в NP-полноту (видео)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - Лекция 24 - NP-полнота доказательства (видео)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Лекция 25 - NP-полнота сложности (видео)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [Сложность: P, NP, NP-полная, понижение (видео)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [Сложность: Аппроксимирующие алгоритмы (видео)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) + - [ ] [Сложность: Алгортимы с фиксированными параметрами (видео)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - Peter Norvig обсуждает близкое к оптимальному решение задачи коммивояжера: - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) - - Pages 1048 - 1140 in CLRS if you have it. + - Страницы 1048 - 1140 в CLRS если у тебя она есть. -- ### 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-) +- ### Кэш + - [ ] LRU кэш: + - [ ] [Волшебство LRU кэша (100 дней Google Dev) (видео)](https://www.youtube.com/watch?v=R5ON3iwx78M) + - [ ] [Реализация LRU (видео)](https://www.youtube.com/watch?v=bq6N7Ym81iI) + - [ ] [LeetCode - 146 LRU кэш (C++) (видео)](https://www.youtube.com/watch?v=8-FZRAjR7qU) + - [ ] CPU кэш: + - [ ] [MIT 6.004 L15: Иерархия памяти (видео)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) + - [ ] [MIT 6.004 L16: Вопросы кэширования (видео)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) -- ### Processes and Threads - - [ ] Computer Science 162 - Operating Systems (25 videos): - - for processes 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 +- ### Процессы и треды + - [ ] Компьтерные науки 162 - Операционные системы (25 видео): + - видео 1-11 про процес сы и треды + - [Операционные системы и системное программирование (видео)](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) + - Покрытие: + - Процессы, треды, конкурентность + - разница между процессами и тредами + - процессы + - треды + - блокировки + - мьютексы + - семафоры + - мониторы + - как они работают + - взаимная блокировка - 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 the 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) + - CPU активность, прерывания, преключение контекста + - Современные конкурирующие конструкции и многоядерные процессоры + - Ресурсы процесса (память: код, статическое хранилище, стек, куча, и файловые дискрипторы, i/o) + - Ресурсы треда (указанные выше (минус стек) с другими тредами одного процесса, но каждый имеет собственный pc, счетчик стека, регистры, и стек) + - Форк действительно копируется при записи (только для чтения), пока новый процесс не запишет в память, а затем сделает полную копию. + - Переключение контекста + - Как переключение контекста инициируется операционной системой и соответствующим оборудованием + - [ ] [треды в 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 с нуля: LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4) + - [ ] [Основная мысль David Beazley - Интересные темы (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU) + - [ ] [Мьютексы в Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) - ### Статьи - Здесь вы найдете статьи от Google, а также дургие известные статьи. @@ -1146,18 +1146,17 @@ Google не возьмёт тебя на работу. - пойми, что находится под обложкой библиотек и программных интерфейсов (API), которые ты используешь - можешь ли ты написать код для них? -- ### String searching & manipulations - - [ ] [Sedgewick - Suffix Arrays (video)](https://www.youtube.com/watch?v=HKPrVm5FWvg) - - [ ] [Sedgewick - Substring Search (videos)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [1. Introduction to Substring Search](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [2. Brute-Force Substring Search](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) - - [ ] [3. Knuth-Morris Pratt](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [4. Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) +- ### Строковый поиск & манипуляции + - [ ] [Sedgewick - Суффиксные массивы (видео)](https://www.youtube.com/watch?v=HKPrVm5FWvg) + - [ ] [Sedgewick - Поиск подстроки (видео)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) + - [ ] [1. Введение в поиск подстроки](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) + - [ ] [2. Поиск подстроки грубой силой](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) + - [ ] [3. Кнут-Моррис Пратт](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) + - [ ] [4. Бойер-Мур](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) - [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + - [ ] [Шаблон поиска в тексте (текст)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - + Если вам нужно больше подробностей по этому вопросу, см. Раздел «Соответствие строк» в [Дополнительная информация по некоторым предметам](#additional-detail-on-some-subjects) --- ## Проектирование систем, Масштабируемость, Обработка данных @@ -1340,7 +1339,7 @@ Google не возьмёт тебя на работу. Вот пример отличного введения в методичное, коммуникативное решение задач на собеседовании. Вы так же найдете это в книгах по интервью для программистов, но это подход мне кажется однм из лучших: [Схема разработки алгоритма](http://www.hiredintech.com/algorithm-design/) -[My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/) +[Мой процесс подготовки к собеседованию по программированию (Книга) Упражнения](https://googleyasheck.com/my-process-for-coding-interview-exercises/) У вас нет доски дома? Не удивительно. Я немного неормальный и у меня есть большая доска дома. Но вместо доски можно использователь и планшет для рисования из магазина художественных товаров, и практиковаться сидя на диване. Это моя "диванная доска". На фото я положил ручку чтобы иметь вы имели представление о масштабе. Если вы будете пользоваться ручкой, постоянно будет возникать желание что-то исправить и решение захламляется достаточно быстро. @@ -1463,55 +1462,55 @@ Google не возьмёт тебя на работу. - [ ] [Шаблоны проектирования: переиспользование компонент в ООП](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - аля книга "Банды четырех", или GOF - каноническая книга про шаблоны проектирования -- [ ] [Site Reliability Engineering](https://landing.google.com/sre/book.html) - - [Site Reliability Engineering: How Google Runs Production Systems](https://landing.google.com/sre/) +- [ ] [Инженерия надежности сайта](https://landing.google.com/sre/book.html) + - [Инженерия надежности сайта: Как Google запускает продакшен системы](https://landing.google.com/sre/) - [ ] [UNIX and Linux System Administration Handbook, 4th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/) -## Additional Learning +## Дополнительная литература -- ### 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) +- ### Динамическое программирование + - Этот вопрос может быть довольно сложным, поскольку каждая разрешимая DP задача должна быть определена как рекурсивное отношение, и придумать его может быть сложно. + - Я предлагаю рассмотреть много примеров проблем с DP, пока у вас не будет четкого понимания паттерна. + - [ ] Видео: + - the Skiena видео может быть не удобно смотреть, так как он иногда использует доску, которая слишком мала + - [ ] [Skiena: CSE373 2012 - Лекция 19 - Введение в динамическое программирование (видео)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) + - [ ] [Skiena: CSE373 2012 - Лекция 20 - Изменить расстояние (видео)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) + - [ ] [Skiena: CSE373 2012 - Лекция 21 - Примеры динамического программирования (видео)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena: CSE373 2012 - Лекция 22 - Приложения динамического программирования (видео)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Simonson: Динамическое программирование 0 (начиная с 59:18) (видео)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson: Динамическое программирование I - Лекция 11 (видео)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: Динамическое программирование II - Лекция 12 (видео)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] Список проблем диннамического программирования: + [Динамическое программирование (видео)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + - [ ] Йельские лекции: + - [ ] [Динамическое программирование](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) + - [ ] [Проблема вторичной структуры РНК (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) + - [ ] [Алгоритм динамического программирования (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) + - [ ] [Иллюстрация алгоритма динамического программирования (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [Время исполнения алгоритма динамического программирования (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) + - [ ] [DP и рекурсивная имплементация (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) + - [ ] [Глобальное парное выравнивание последовательностей (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) + - [ ] [Локальное попарное выравнивание последовательностей (видео)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) -- ### Compilers - - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - - [ ] [Harvard 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) + - [ ] [Harvard CS50 - Компиляторы (видео)](https://www.youtube.com/watch?v=CSZLNYF4Klo) + - [ ] [C++ (видео)](https://www.youtube.com/watch?v=twodd1KFfGk) + - [ ] [Понимание оптимизаций компилятора (C++) (видео)](https://www.youtube.com/watch?v=FnGCDLhaxKU) - ### Числа с плавающей точкой - - [ ] 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 (video - есть ошибка в рассчетах - смотри описание видео)](https://www.youtube.com/watch?v=ji3SfClm8TU) + - [ ] 32 bit: [IEEE754 32-bit двоичный файл с плавающей точкой (видео)](https://www.youtube.com/watch?v=50ZYcZebIec) - ### 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) + - [ ] [Big Endian Vs Little Endian (видео)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [ ] [Big And Little Endian Inside/Out (видео)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) - Очень техническая беседа для разработчиков ядер. Не переживайте, если что-то выше вашего понимания. - Первой половины достаточно. @@ -1679,23 +1678,23 @@ Google не возьмёт тебя на работу. - ### Расширенные структуры данных - [ ] [CS 61B Лекция 39: Расширение структур данных](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) -- ### 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. - - [ ] [Sedgewick - Tries (3 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [1. R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [2. Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [3. Character Based Operations](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) - - [ ] [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) +- ### Префиксные деревья + - Обратите внимание, что есть разные виды префиксных деревьев. Некоторые имеют префиксы, некоторые нет, а некоторые используют строку вместо битов +         для отслеживания пути. + - Я читаю код, но не буду реализовывать. + - [ ] [Sedgewick - Префиксные деревья (3 видео)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [1. R путь префиксных деревьев](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [2. Троичный поиск в префиксных деревьях](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) + - [ ] [3. Символьные операции](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) + - [ ] [Примечания о структурах данных и методах программирования](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#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) + - [ ] [TopCoder - использование префиксных деревьев](https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/) + - [ ] [Stanford лекция (использование в реальной жизни) (видео)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) + - [ ] [MIT, сложные структуры данных, строки (может быть неясным до половине)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - ### Сбалансированные деревья поиска - Знать как минимум один тип сбалансированного дерева поиска (и как его осуществить): From c70e4f2bce786ceeb7be93163c3e741c79a170c6 Mon Sep 17 00:00:00 2001 From: gainauntu Date: Wed, 11 Dec 2019 03:42:20 +0900 Subject: [PATCH 157/263] Create README-bn.md Initial Creation --- translations/README-bn.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 translations/README-bn.md diff --git a/translations/README-bn.md b/translations/README-bn.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/translations/README-bn.md @@ -0,0 +1 @@ + From 139d6e80b12ff41e4705f879da4e50243f173ba7 Mon Sep 17 00:00:00 2001 From: gainauntu Date: Sun, 15 Dec 2019 02:02:32 +0900 Subject: [PATCH 158/263] Update README-bn.md Bengali Translation of the README.md file has been created --- translations/README-bn.md | Bin 1 -> 285802 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/translations/README-bn.md b/translations/README-bn.md index 8b137891791fe96927ad78e64b0aad7bded08bdc..826e9884a303e2edcb87669c2819cff98fb762a8 100644 GIT binary patch literal 285802 zcmdSC*^gdTn(i4lg%s%Y<+*9K`a~t_OtPxN^F%2#DQ1&^nUld?$K?szU}NI}Y;=@T zW(z{}4Hw8zMRLkzVT@&rv8)!@Qi`EUEsjKGOMTH7ecMu>%C7T2bocXHPrQED+IxRr zd|^izjzSUf4STP>);mw@UH{+zd)w5>>F=gbPk%N2+v%C9E7M<2pPc@~^cVVnM*mOh z|0R8XLEnF__ZRf@)%01t`b^(k*5BVx|2I>&PR&g5_ZRyA=JZ8fF*Eh{^r`ayyso`8 z{gFQXwtRYW{_`u-pXk*)Wdx7LbLOW1Ue|x1JJ0Et(f$0Z^H=)a2l|$KW~Sbl{HS^!hKZt^3UURk7|jwF;ndzN}a#M&h3S8qzADJJ zPh$2nQ)hL>yZR0|o!8&X`aP%Dd!`Og?Vfr~uzh=aPVa}-e7?-=Zn%DV4 z0pRVFt{si%g!o@;R<}>>ojR(YLsLhl{&H%ievatfc0uIm)G>YfvLJI@uXjxy)X(9m z6;nI)|A4OBH}$H%o1NOBzq@tatnS)5^@{G=SKzs;e0QRJen8*7uKQlreRt{!hjr!8 z^}A13|8(k4ui@C(ghRaEi(1X6!aMkc?hVt6djDO4-04EUpX(hMG2IxySLdmP&v)q? z@G>XL_)cSkjd&9D%y-=Tl_>5Ty)s9ElkW=bO-oS6ySfrw%xO$xD)1Ft2_=7CMl()N z>NWGeqW>QkT8Qz_=y_-L3kCX#U(WN$Cc$j=)Edq5Z}lzsWPUAG);z-ck}CpA@6FTd zUl!VfQ~6|+1TtqQ-^Y5u1T);EQDPnEr~gqa`GdH6Ry28We%7PsH%w;-L^Zn#1so7n zy-;XoccHFb`evsn=78vLMWMPqqMO%5sZi5C{X(P1%H51HtGka)?bpw&KHsPNpvxD^ zowJ(xtUiJEj%tJ>)i>MqdXK(2sK5JlPYav>t;ncLTH{XrY|zgd{og%xhbVrB@UvEw z+tNVNM=O0k73`7urs6r_^IJhJWG9$}e%~p$`J~{xE48mkcOX?i5+y*fKpp7{7R)O_ z&wf|S;vs$0#rCHf_p&%GB(dp{C!W#VnKu#{+D>`=fv$$e;Rwr|E8;Jxtt-3Ww@-BM z6^#HSc%SrmK_i&9<_eT92^vT`#_V$0pXtt6DR4-7{ahn|s{4_c@cf_Z%0DakvF7}l z=w!DjV7usJzo_6B<-4Eh)iF^A^69Xs>ld2)IgP}e&X%?OtVqQ68nEtBXC>8Vre?Ry z?Vg$1eE2W+n9}Pp63Z)fK#!+fAn$d*exh_*J0X(dfw9$(bN|-i%S|G+XI{7oq?ycYiOZ$NZ8vUEY(j6+^!tN zZhX6V%tOQPmHECW>i=qDO1NYC>8yADRB~^j~SkhT=?5!|o9cB8!e`J*iJ$l!V(Z zNbW6?Z>6Z?pjNd{G_psu!vCY9;KS0o`}F@ceRfQrSqmT5eT;cRxZkJOP&HUtDe1Sm zqOO^#|Lafw_dogLpZuSH@~?m5*=^Qcwf4Wcb6Zo*4W7HIU+h8b7o^JBA{o)BVXJ!9 zU7O`*&U*FKss^TS7RmV4JT-rxGrL3BPL786tRH?Db6Zu-?UN!2t_Z8&KR!1}qbJmm zP)Tj)eh~B9Sj}%v+5uYvuj1UiSM~kF5T4jj%@T_yydvxa{EV5Y|MCAg@ag~Zzs~5o zAHs}Rceus=AbReHF}oV;=LJu6=I1|%xvh~UoE-C3kuqn0AaGkJO3b-oFVFoTV79*D z58D=Bi<5r{w1#h!Fq@ObgE#O)kj<;7Ha7UgioL8~`yITx_yd688u@~?4#6|Rl14sb z`6B!N@7;f~=kNdLAA;mtGqqk&HNL|_9%nz_Hg#KxE<}vv&dRGw&-H@*31V#a9I=_d zke2#~0tI`U!_lkZIF;|foBN&g+{~2y;cw-aIa10upBHcMl3)yk9dn$WLU%j9`jzMy zPc!F;y@8)IGetDkJowf0Pj$^ldWt>gZu~Ai%zlLBg6vh|MUIPj&fO?TKW=EB){w_b z-Kr?)ck>iYY~VuCoqrHKSvj+J?08mKn45lI-{U(u3Sdv_WYMsn3f{~f&dn7K%a>iE z*cTE+*!Ou*c6CUwpN5wyfDG2YM zyB%EsF251XpkXNGGmQu=9oK-y7$3PujJS?0;Oj>;q8pXL&#ozRI1;-Ux_6G?_7cmE zSR-?Ew1>z5u|Vbr6?~wT{Jq{sTt43iA0j6m!~E%#qo70_S?PBrBEU%KNNAsx21Q>G z-(g|${Tqs_#Iu0V%+#eqt;DOL(6>dA&TI@tr-!k_IvvsQTFgh|pL$l$X4N&$9Lc>@ zVrLoiIw`s1xax4W#p?=5Wv=&FZu-w|;%AkmMzfzvwjme@jO_2X^kF(PkWS|5$a(f4%uBiEhsiFh7* z9PD=ULC)9IG*)xyQgB5d&(K$3Ibvs@iYh)6{LvVn73(PY>*Vx5OAlQxI>?gdjiUMC zozII*8HO7xb)MpVt=qE4ct%bV-F{!sBL4-Ag*^t%pzEN$z!1`a7%&_K4O|iZUebGK z7+c*&q=G1OS4Ra+)zFxgoSv;TJyrl?zpp2q*WB?y+c;=Q?URDWo%0@^Er+j47Vv9n zTJ9jqiM(OeaSyS<&qV3Oe~<_fZ9X?R68FxE^Xhw?XM}h2DKR=T%Gh>$U;QlW%686i z-|+LmS^Y#}&(Q1DBHbcZZJNTyz$Su=(Lrz^xa0jf-4{>y7+#N8N<4dZKJE=H+q-8) zuQ_(E9;uDx;JiZS53EVs{6RcB@8K!+JuM|k-^-O$jZn$(h4MQwtGI)wIT9DoW3Bl- zC@Y>d+j$O8i6{BG`boJmtX^lR;hR(X#m+t{O#uzXjN&SIuYZ+Co6%a8O_P3z`J+c; zg!;4Y_4qu0r*Th;7c$p6#0^7Nw!9IUuI@8p-q3TzZID7x+V?c8-(8~$zw18PpCTV@HN#18&Zo+d z!gul9_BuE?uj!82u73zpWVM+aIdE1)tN~u*e>|}rWeAG1^P|9Xz!&=J&V}dLVzzv6 zECUUPT(Im$$3SbAA?YVdFUA|*HC>)KDpAbY0V0sm9Q;(*U>Pr9n-v|uv+=?jnXt@v)z8J*Kyh{fOqeyqPAiUwR`8c>8I zp<;O2_VC%l+xXkv^+82x5rE&@WuZe+j`jw<20xmg?M2p}3iN7Eu(ndWqZ6TJPUj^Z zT)lu4z)p6(R*uk}C-pHa7FgQ`?@>s>VDq8&(so_s-Yj`FU9csyOMN%`GAVYb*D@dR)`JU-WXbnLL8h#Z~R zADIM4{Oc(8x~V_ccXi~tALEY*bi(0%@q+8ESp&W`HbF>+?}|N>80lUOb@Z>!(KF8# z`UYN6eaYcT?jou?M^eo~#*eYRl;?)sxfacWF3b1__l7je*puT(*zQ=C{*S)G?sV)Y*Pi3nF_O{aqJ`RVk()Vg&bX$M z4+QZGf_PdoNChw-aLKE&iAG(WqYuvzUI9LaX|B|GLcvT=pf`C zQYQ9g;BApN&dkW@r}-Ou3jCeC`Wp`gtqX_p^fn4UqmkGlGp-)|4c*s{L5w!A-u)Jz zdTw58Ir7!LJ1ZJey7ouOt3K@MK-NH1vW{BCCxJuzpj+iBhjnpM7)YCi%)pz)|Lw_w(+3L)qFkR~hT+ zUkNtbtY%A5WE8M1kiM24znx#_)oW1t;2JGm7L=K-A#t?_v9N#Pe|&BBOj-UW^jiPB ze@ECP-8;HaVb3Odm^~4ZzqRbZlIGcPLs%I04qa_=QV@ZY!q2E})PQ6=I;$Q%c6w4V zGG0|{nRaLYwjlFo*W|#-9wa}}>}@%-{|5|4J`Rh>G;5oJ$_X$S)qJ<<`nY$tcP~+J zXBps#ytg|)GQF4eT&(s_^lWydx_%}glvnVS`ikyY@ami>9%~LinBN#>=)3OyzyX^& zYPOLUrbD#wS$%GcmB_5^P$YW#2$#jX=;EN>_OA2*d{_7BQ5%L__1+)!EtO_SU_&$I zL0%12c&8A0imLcu$!V||=3jfD+V61g>LvUk8X==ZQ6;nfaQP1wLDQs|S ztQ;YHhT3b6*nHqDqSWCp)YnD?zJ8+Pl4PgemMuz57`fnhe@dgg%HP;KM0(&=3|$9@ zGZJxp-p~W zG3&0DA7{mpUm(hW1%aiHPJc_Uur`nb=n`jsx2oc*d-ZH}t?ftjL00W_p@Gz8_dFEA zGr&hcF0jzQ2Ki@9b;m=#qhX*kBo{gx2&SIOD{PJD6&}l+ZElN78EDe|B+yD--=@w6 zawWE2+MVGYqMvdU>}l`jhnicD%2$$I^ec~-vrA|qy=^glaE)g3+q9=XnAc5S8`=m< zd{nKj{Q=;T@!lbum-S>e${vF6%DGy?eW2$VyMfd0=YdBgEFSF8j@a6dw`) zTMpJ8qbum@y#did;Ik5eL0;j(o5P|;#^beBMDBwDU!0l0Ge#o9;X9z&Gm1x^*N9oW z-+m9@!)es-AW5K8R~a!j(2W|KpcUrlE0OzHjrbE>9oiC0zpjA;m!>oBMTYZ9U2TZ; zx==KK&MtkhpmxhWo*43amtJS=79STZn0DMNfTy)tXh!pz>nxD(!5U-i=#Bvgva*0} zRD}B}bZ_yMws?VDR8zhyxz9cfV*i#{XaOMQ`q3EC{aDfhgeJq58%;;XKAiV$rMr37 z7y9*_z$Bbt85-4=zLOb+4-OXb;8=N!6Jlb9N8ZKN36DMD~~+7<)E#O(DTSuD8cgy8n9;@b)``i&huC!Yaz}F6(WJLmu;QZ zd3%r1r2^*9+Tf{+C2LLX1r&+goSFKOW@2s6+@YBkzB~cS^ju6oN$X%8|CKqm)@nTu zyqTG)2d92gddegmbA1tCHV<_52lxOIo@tvA_3VaZR?wQ)V;EeORA#kN0mH0+JN>t! zc&wF=HOt^J#swNRE`S&Jo1e{#>@rCiWjs-jl$^mGVWos`#JF`gB+IU^nw<&3kqPay zqH{RoZ#BL#AClJmnOvN)duS)%8GD&nMf7!nK5AJIl%9Q;oMB?$;8(iK{i47Vk#^vP z-3wiq2EHuS$}vBp@5qmX2@rxhbe4` z3Rqj-J87giVBboXq49Y#+H-v5IHKT&(Qx!T@qDT1J}8h~LdlUeR*BYjJI%Z$jmcd+ zC22CAZJa>0wikgkvIr8Y z@E`Hkp?`ZRDKd*rpPER2VmXDzcG&Bkj>mgyu4Elg`i7i^5kH<^EbHyO+-2v`E!6Ci1un`{7>JAH!^y8Wl?fq!*PO!E^ zR~{)?Yq7ObBk_&9+zdhUkZ6SdIKa}~z39gk@T8hCqy@eio-YxfIxc8ysg)Uho8DD{ z_NDs$T^PqxL%v?|HK&-i}(^Pod?J z^m9eVF<;x)+-n~ftN5xUBeELJSLec!%-9`#FXRnlSyE=;nlQio65QyUUJi_f$lBSzg>Jy#HLi51v%NuqSlY zYkE(|s6$haSG^jL;6MRCH=>sIZO@DH(YGgyHoy)D3#_)#-q2P5B-w3E47|aQb0kQ0 zR&}{VNXdS%rmdPq+c9dfYg#QD-y{g^SFgx*lGxkS3+=gTP1f<|UT~1~*_Do#VO<^C zLf$yhkf#q$O-fC^Bb+d?ptJ)q#odDsAtC zHPF&L6wSWInJIQD6P#k)9(jp^W$bxz=An)5aNb2^8hY%mg{fB9}kmtr~!@oC=vSPH@Y2{QxSMeXK zldBksJM4|x1LjjA6G`)MfVr8mLT~b1-e1&}?`SkEH7qEe=#k9*>6O*5Vh%AH>vpXd zqlPbTDT>UQ)2E@${p2CfihV7vxF(`e)3AG%A`@9nZDE=w!t*qg$Q(mU*^RVoR}deu zHO7kPM0LzNG0@`3)&sc!;+whpusM(bxkM z<^V^)S&#Qw*H8(FB8zxF5%SOUBxF6GSw??eC^X=C;hLQvHkM(LvV~V|mt~K3q0r!& z5(ih&wykerT);=eRbw%4aGB8|Xf?Vi)VpKGkAZxN-Lc7uqdZwMpSFX( zo~EDl__1$fel>pTIWFW2ql>L;s4xIi%+g<bgp!jB6lVv5KcLEG651vmyDh$Fm+BuS=63 z(EHRaUhAkXFqvKHYTn@${gvi{rF^L5lG}3;BjaJ1o=giFxj|bZK|T||!NrrWzSZc)6@4-B4USeiJ@xq- zVPv(|u~Pr}OSig}vN~SS4|<;NH|}Nq%t%=6()fq_?%zqbVktq%gVn^US`MmoFqOnj=!$j;NH`+2^@hWo4N4wO-t?bO?$UjR!3AQ-YCot zi&B0mu6v08Mm^Ls!F`>|a)*?8d5&K)R)#v@V( z9YiOn(K5S*NliO9ZntmO>i3sk@b`*mkTFND!66`ktfr^^I_VW;cN-lgq6C%Du`74+ zN6rvf#yDGx)L-mK^DdIn4}C%-+*oj0|g)#d6?tqNV2r z$)`n4$EUXF)vJ=gwe1}+uzYRxCNyB{d6>uW$YaN~Aps2y`{Sdj$WKN>lj|prbi45J ztzMl|EIs$v=WG_@HF~uZucO~rXkK=!z93#g`x4)n)h|*MS;~n5hxG}shq@lqJIuY3 ziHrQSkvQf_S8AOsR1mfn)Q6=64<;21%Q)*NSM_J4yrpL%Y2G~ve=Y^=E!i?o-lYL^ zbYv790Rcyj`$lZL<)ra>CO9Ivrp+4HmMCy@{*~Ann!7(!c<3X+mY#OE&s*hZ1#L$n zZ;VzBiE`*M=l*fg*?*U4fR64y4*&}QT^><4TWs|AM{jfYfnwur7flgM>(iEXb+7VAByD+mgfA2lo(TKxSh*khA|*^;YAxF)$y-G;vqD_VXSf!`#Fuw6WR*8EZN2V44iH;m!NER%FS7PYjXe95I z%&Q}Y67jIe9u7;bu51rEg5=Lyj&EeMQ~3!0XB4@6Z~Nq7eP+&w=BW2&j(A8^ED`Y~ z3yIA`#U4>H$HJ&NpzotDqH(7EIwI(ph@<4L914x}nVy_B+R)sFq2_k8(Zrc|nOM zXgX>DEFGg7VjSJnSP1S;YDB)cTPrc(h?;{vW|XzJ#ADwr*E-rp6@Jp=(mX$_@4KEk z@f&;rY`F0!k8v`Td)**|sT(*Xtxm>fw%CYBVsfYW6UX#_Pm#@GHy$lgyN)za18=(n z8X$A=mSD58@ykMz0kwcEJU%lO6_H?`Y(|$Kf%12yb}V8fAyMh@y1jBtGOB zmG#Ui^fc6y90i@WnHVwlv$hPZ@I@teum>m#d?yL)Q1oc{$L|GNO2%O`L~gOb%J_IcqYjP!zNg^(1Yyu1_H^ zYLz>5m*?Ub{?=>Q2J^KPtm`vsUPc?)BeRuanKQIYAo@GTsL;oUz4MtokCc8O&IwYS&Zoy>)KL9dfcbrAJ? zDR;qv{anj!=3PG-tq^zBvLIvH@cwT~-IU>&BeGW(9plO#@2%*rccDyC?L(#xiD=PQ zNd?ERqPiUDxCf2n93>W62LQGiv@khyFOjd&d*_JM;iW}V>luRy+ z^TMFsP09*wlE+F`EF#gShM?HoqZZVP1R9lL?)Jy1rDg1A=Ie7ZtSti0Bnc14bG2uH zhF>UtF-#X=A)f@tao*z)&cXMPGz-pTXX{5rf`m`ao+ADS^&!yE|*46)l?nOk#S zz>=6Ca9k_Sqh?@jkNfO>*}lg&aMht<9Q!)h!#Fo@)t~|VEwxgX|Fv9hH3Suc)a$se z3fiRZkE);WPKd(zb94-^TUi!x99=^wyk!sZyZ(u;S$D&}MZ>P%i-~uHe-3=8!XhVG%e1toY)5&owRHovkdbS_ zE_zp-?5;KcQtYJM`)b(Z_5DYUKMb|V91c_GGlHG#HfB{7OmvaRbZ7$nu%`tfAV4%z z^5xcxw|;PI_6B5KSTn7kJn6!voD8=x@mrxyqm&7P90WmKY|eS3Kbg8|i+n&U}Ge*AMJ+20jRb6wPzh0X0% zX11QXOP^R}U&l6;Vo0!u zwyB4OJ?c*O>-Aj)i?>W~(8;l@bb{>q>0js+*`H2fU*LtzX%=_1#deFe^q$EuS2#t?gbp|Y0$qG>kdn-_OIN#zpj4t9DN<~#`k38 zlKqH4kxB^1i^C&h-wCIu@NGS#7Ej(e9H*AJ&NDPwdK~@OHn9(~bWi{>9p@s^$=H~6 z6fEs#bSm(|mxMyYN`PYgGi>$5xBTy)D!oFK5I+l5zttm=#YRell{12q?V%PD)Z_nF z7PI{U+X!F~tI50QY!}tzQYm4t&Cr~Y3_z1uW*`xP(tCPuU)5EbK|9Rml)i5}v`_Ms zb$W_DO-H-1T}-=Y22?mM44S9p#DkU#aeOgm9D& ztYO@TFqtd&Tt-Kp&aDAKjq;VmFj z@#dn_I%9jcVE8hYHluvmu5OCRSU#!E4_Q*X{u|pj_GyMUj3lFz4ky~RJNj}&=l+-x zSq!iNk1-SLYfE)xvn$r?h$TC2E|?FJ94Mpds|Z@@C_KT7WaoB zcWRwL?=VgqU=;twI_yJ(afZ5d*voCHAoq53E9O13eqSZ($DqrI*0i};&U``YM@?)^ zYqi7)zBEOJo~!-tr0c()uM#l*kB+|wO-FZ~DZ@TjC>ZVA~By0Pt>$E9mGCq6c#foC*&FMPAZ3=%iix z%)4)RwxvBZL$;yj()5?=wNd*yMBB{RS#6@Iv+^tOqil20Yu$RAtHyH>S75EU|A|NK zo<_i%pN{940H50Kzr?#}m&+9>D5|)2nYp%tXpldK4@Z){bWl*xM zgz@qpehZA%P{(>WE6k2x)o{e^Ucu4T#82vfznXYhCp@BP4)qb+OB}~h^wXj$dP0Td zbH0#$RvU#S_TOx}Chv`{_CEC4nPR;o{Vc2ajI;cRO`N_KyRfz2>Uzr%#w8m4mi$ue zmEbVq##mu|${7GY8!K#7;&E7z@FJYh%3G>Jjte%?sR}D2`He_ky+brJ@-i&c$fzvzJwozS65SDC2GEG%T^Eu5LS?;Q*wl<-*Y$lQ0Ie)K@ zzmrPtymxZho%aBro6jS|oKbUNY7}|}=X{B%xOWeGyolZfmkdX!Z6T~toEmFsW3eOJ z74W15vP(MtclB7G6R-fgd9X?A>UKyA9V|6;YMJP({!JGfh7=qa;C1SR0%R6&5NsrAM(GtD_fPE4Y7_ zkLOW8+g9gl*%>@LI=PvmiDm!~{Kl-qAa0QG4KAtS`M0_cJ;KVI$U`W$z zn`j`>68t&nC}#*nl3Trs%uK{u+125k0vR)Bn9$;RW!q&8=riBIwd>r5<2kIr*CAP0 zO^xTir(>x^Jh6R7&_J%Hra*XuJAhMdy^*2r=UCCMbquS19cLg$-K+VRRgB7$PAa{S zS=eu6j-yh>dkxtQ?_GrK6q5%%edqLlrySdVuN>R$(nj_CRyNkE`D9JulTlbiayVav z1b~`Z4G>O#iP)K`kazCx5Yd;&KOuF32GjGjx8mr_XBvOhOyCNxC3lMjS@(|&j)Jo3 zY-b*iXRXn5Ygsnx3D8XLE$Gu8+J_m$X|5?lt>sLcskK5X12;Ir7U!GdmN?%QT0*V> zIo4NKlGc+d(Qn#>i%cc@!lMKK_e~%tu7bV@I$^hx)3r1+?!L9k3P{n z;GK{L(U%y#PTmA=zaHK;Wbk7nW64NJ(AcBXQUDZL^Dds(C_LAcWSpQQshAx0tcEK< zy8YdTxRKp>M9t`wL030wvfbltr(RJ%QuimQp<2sS%jTMfsJ?MMi~HoTBNbf(J~_Q$ zb&0{T3oGUEsMyB!udbFd!)sfqdUN_t?T|-EZ7b4_nvRu%NUVRh)7Nl?pt3`9%Gd;t zHv*UFdI?OZLt1W_OoH+2feQP_@lMeLL}FVg*^&&s-`X}IJKibv4n(8u0V9v_x@(P( zWI~1nH(QpYAF~4{Iv{cid1YAs$O31C=u8{_eb%K?iw~tnwuw1pWs$2WpmaE$`tFzs zG6erSYXL&Lg!Un)5*8+N46Rf1Kv%+s9Jv)Nte|VHu|-X1KIAiSt9FBv05x zwrR*=T$<0sTFatg`nfN9Un51i8X50s2RSp>e7I*{WEvwA=(|`4^~G&>%r=(M{T9tv z+eEe<>z>7qMR*m?>)Pgb{2^sd;xC|w^sX&%+Z6V2?4^)%Pm4I#dPQ+hdz88Auw9v7 zSYAZN^K5GLHIZFl^9P-gg=OG4c=#3XiAvoEfmK6|tc}&%`t_=zr^tUsCDn?mB6pO8 zsv!~D*jB-iRb^P9`J(<2FY70&ETTq>lZ&D6R!6zwn!RAuUmcNrpmQfZCXSXU95z>a z2VucQ?wcJY?A!C_rm)PUyLu!1Jo_5JI&c|&njzXsAJYc0Wk(E5hrrm+s`)DF2S(%2 zRa;mSNT(s#MUU*5TYHW1@U=7}YsKRFSgQs$we(>9;mMr3c4ikeG28(ztudnU$j-N9 zL`v{n@t? zXUM8*?M%}cRya}^?+5C!9XAP;x0cCJye4SXT`7}Rv5T+?=y|fT_&Dr?TUj7LEipNf z4Ml(7E^FSa2AiCEv~}vQ1SRl6WEZ{TQy7uxqdc!+yXSbZ*qGbP+Ap|Wc1XnKkO%gd z))tRx$f|{+7V~-fP@$#oQcu)-l(~4Y)JB>zpb;p^acuB$vd}Krj8i`Nmi<>mgxJdy zcuxr&5-;^vXiM`dS^&?AJ>}pVYD)@7j`FQ-3v`}+xsWK16FNQuR*>`NE^q);=mW)P zu~J6NSw^)RSEKEa6s=}`v-n*zQyGb2hABrZy}ES}o&(Ua6wGcnK#%Bxy&K0s!rBPQ z#uFCO<<>&Xo7M4@w)Vp`vu@tY_BnTWAgr+UqXRPu73N4!NuUnJd$zR<3F)4Gk|kUX zdu%D=*ijUpae(KBTx2e>ZeZ(*MCbr+YU?3bOGeb7AJ&022&8JOfG5>9L{fUayWKc@ zzfkQNjo|m`g)@FgytYm@=)`tm=u09v%p|HXyr--63z4&%)E$^cy~T@;>@ad zNxDLgU3F9*qq(VvqE6bn!&xS0ngWJ>$qWTuD)=J6aCdDlz{YE#W=v7Gg0tE zz0SNg_!!NYnICvJVtZIzK#W<(JmW4?23Hf=@YCWxv?KRLbu$=+^W$Eg2n9hWyfRiS zJK`E-7kFv;1e<{vLF~(fOe>>jG3YZyt}Z@W(LhNQdHOl{=lB8$M|8cteqM$YG^H&!e_J9V9U`swCz>P zG-Pq^Wj1Zt`c8;k|MarTrVd^sh8BtF{`@2|yDnI;+3t0`t<`y!Dj6Wjuq( zc~tjr6`#Ss3-zW;*%MJ2JjBo~8PT}CRCi7~qIWX5Zk%;Qe--ScpH9`1+IpGQ2G$Kt z$Ha|aI>MVfy3`z25Y%zK-+d;S8BQMx+LkAwE#98T?Hj@er?z-kzOM<-wvKZLm!upF z57G7`HJQ$UqSul}S{i~vIXMA13-apfSGI=v4&wA^tg6QpUaCF%M7_Zo?HP_;*9e3XPUR{A;cluWH}z+MaF2|9&J zBBXm>%S`aofWTz>u$C(C6?@osMsF2(1c(4RD5CbA^SNo;MJz0=)-K#?UjZ8EQheH{ zJPl5B#;TR)=|hB6px=Ubz(BQ(oIUlCQ>j66)|O|Uac$3ay&j^7k&7aGfwk1e?8fgb z?&g&aO>MsQ-`@J~wEK1Ed@LeHwT-k?V;@pYOvncMt%Mb_G~?HOBU`FSE!d@ty7CI| z=dAd{6oO{tEJLEQ-^jKOxt=sKq;tWnGbN+?v4>1S*1cDF1L~khSkQS|GX2T`dz-C) zbWU^T9_VaN|A}#)(rdh$u;5zTDJ3i;VS!!JU5-tszUe+4&K??v&rPAsqSo7ZnCF#U zMHXFlx9>Rk>#06piG-CNYn|w^&Gv(KqZLcu7B07En_#T%{RQ1+-h) zGF0EyU3tVq`dk>6dqfP)0hZtHEr!%e9LKY56A-2Mj^*}=>CX*4v3rh!qXFi=*b&&R zkPS|s^aQPEb>87R)onabDpnrX9@7UP<4kWf@UKpV^(Yr)-?f?|k< zT;DA37rY)&z2F|<^c6+J4wsDDFlNI~LF&=Tf@m$fiNYi8Q)goS`eygKXzr-y_N?e_ zk7jmQdLd4!i=C(o^~D*o86DI9plA_Je#aJL-xVHmw8sjb=2Zj2Z97jZ+fc6iy=)o_)qV{>`E zV;otOwwQglh;xSy@7jN?4EsHM<3^tRBYg_RII>jxov~`i3DCx|lNBz{>d>^lnQ_!< zN6y3XL-cfAxdjxmrW85rd>?u>@sr$X2##8H*q*NUb?;0pxYHU9&TzJiy}iU&3{i7T zO_#0~M{h4+YDt?PMfOAGGj zv_S9qv2MSth{p1)=2wz;2egh~X%$aPx6wN(^havjSPhX5IJnOEGp~@%?-WlNdpqSd zw2AEdsqhxO@|`|G4xsnAy6%S)l=|*Gj+bZM^i9JO*rwi6Cxp%CROR^E)Q?O32mQZ} z>zvp%dcR+vkiq%6c3wX$_}nd(xXBbq%ib+2p}a#D|JMu#;2 zg;xEjuHLUTJfc;d&>gcH0lK+E+MK<^uWPJ_^gX9A?bMjh>YAs@{{8#)Ej6{REy}u) z8+7yQcE77Tc~bAPv(%M=0Xp2B&}ej>W`+}-l&ceXc;6&p?W!6*-apKC#-dxF6Ii8L#!oIK^brf?kGLh$v z-a(x(9oj|B4qo>)XWvM6U0tmi(`7!o>_yK)R>+y%-o3s-)cKI^dbYQ^z(iN}TdpR@ zjI!v1XKs9Le$#f z?UNUCzkA!$aiws&Q}dxBp0nlQffGd%a$YkP^6=X>@%V$17wg2=_lo8?-_NZ7nt1j%B)<;z#rT3Ojs$v`8!D#(4~B(3c%v zk%4&QqnM4iOB$Kcv^dEzfDCYb;$H{P(~-Ojqg(cKZ3mH+SL5G5E&tM?dqe&!p&T zDfS4)sjxn84k>B8TrWh{Tqi{Ag$H)g$oOuK$>NU_TO#IxZs+$?$@G5IA-jJMTkOb* zb~Jk>$P%K{Jj2myN0;5B<>b8Q@<+w1|2Ut=413YMNnD0}#Hmii(w2ki|DbTp$;e=a z`eshis!#C^xZ5t{@Aw_#{IX9L7IC3}3Yg@rpfFt6LL*=Bgr zwWXPsmwgs6?EDWFobml;vBBVCvRJNMz%!v99qB;iiL+#h1Dw+Ph?sFV(d;^FRzKU` zEd1+Qh^PfMttZ8YHRG7UB-(K@`vpsY?l$AQ3_za|Z==qDes)mpN>R<-(nj~|6(b=L zILkZern`zsI-<~@$`Wn1Wc_(AP_zuLWh?n5D1?j-z3WpGPY$J}wS=CLWZfhQi0{8m zb@I>a=RQFL-;~Zt2lNV0h<(sm>Fsz2zHqzujEv|gNRm&%%0L?|o;D_3H90UkfIK7F zfQ)!fYda=p!ILN397y%o<;G zD%RAb@tNyg(~Kx~;Z@Py7JVKxXNtoHB!a}}H6HkUh3o+92To)jwPvIxd3S1St{0n2 z%jvDB%Sr9837;>^MnX!QDB2sH?`&3Lchm~0;CZjHlPBlSSlOhu@oMeW#nO9R_S|!# zwWG4;_l$)7jm+$NscjMtq60Ex(Ym3~V zqa$$)%W%O z!#mDa_>F8+*B#V!m34(fv(H?_jQDeJ74z#tq^-EDv;Xc17<=bgdDe=ityn`eZLWAq z{GV0qoqkweH5E8?#Ak)b=$%;!vK*h*&ZF-yq$_ ze>ysB(tme}j=fnP4-ROl6-w-{D>xx|3?3yL!2Uw-tqrcrIgcL28M%w1R@Uy3BB%GU zI2vri*HIhl+#a7sPwB-!ccyrn?4_Z)h-Z$TA6;aTLFPf$Y2PtVZIADmQ_jU$`lQe+ z^UA^gdKA1{AQDn0zhh0^ao|6DLXq*~@WanK$ak>X3x?Ce!885L#*AM8SzrrEu(9MjFn-B8YwEwxD z`Gwx4-$9m*^#Z$~ry6#n$E9ZUclxz$9vE}x4(!4A)61*0+;4ao|9Y^bi-3ETgc{t z@!H>^z8*d#{%y<6wc>E}-gfn&|S?=R` z6QzJ+&_aC2{w$w-kUJOq&rZqrnKT5nkoAu2&&_85i+`3S#I6~B%}=Sr$gnv-^NsS? zrYYNTwVedULYAeKX$l|Gl{r7GKJQdZY?}&+HrLOK-3XSswqt!|)Qb>n<+Q2jAl9z4 zYY)U4J%+P~9}5D+B;cG@%ZGN4S@dB(tIPpBLN8@38RQkTHXJ8+)Ra?jEMtHz8p%7F zu??;P7*@O^Gb?J+usM(p@9$ zbfknUl!j|)N6p314@m*fNAIGaYt6T7)jTn@LrrPWC*KhH<=TKI73)dk#$C`L_e5p& z8pSBEUM)GfKlXCE$_6Q%ku~N&TjImFO|Z)-Y=vBPU}xbNF0z`l%uW^#S$IcNJPT+o zRlb_I#U%0GZWQPx)v)YUEaf3d2t0JMX!{inqH4lxcBj%?fL7_gy0?9!E5-FWZ# zUC#*y+7FD@@<7 zXxeVQdaYS$P`>NMk@?<$rRcXN!+YhT1zl0n>#ETY&xo!DjjQ-aP_s3Nw zvt7T@3(FN;z#a@ZzyDgn9$BJVFD!(ElqzsjTHdyq7l!vJn8MTE84uqR>u|q_rP`J9 zoU#r_B%>Zw-j6lz5#6>DDptlx5~uWZ>Nvx%@al%*rCD*^wN{6&w)d6R){x9Vo1`}r z{!RK3=@((y+m_64ho9;`P4<_;8TMOL$YX``u8k;%f89nixU=q&9DZp3srEV|D~*rs z&Ww(s0L^Q?S*MGuA~|=2)-H!WiXqM&i^1q8_%~-8bD`#Z5t+@<-)9J_j%l zJw}HQeAW-k7_L*`UHAI;bst)jyLr03M0a)gw2VD&*Bo@`$QSi-moyW13owpbT%GLH zrNplDunfoqQ4IhoDZ*^#4dk~G*; zZKV60=$QCjdUJ3FD~YJ>P!x$#{5f%_xFfxHqNo|&j4Ve$pr(Y72{BhJ#m}d=m0o($ z35}1(U7S|xDC7_|jb69oCV^XXW&2q> zo0e{Q;^?t+-&Y%zzy1;XF{R`+yqu)rh-5*h*^d$FF`QSio#dz=BhjIV9nkc9DW(X6~QQH z9H*SEpPi%Bl0PGMKqq4aH?|{WGQYR)$-XE*_yI+g?v)j@OE%B3QUSC02-}c#V=6i; zTChC_b;a&k?_7=uXv9LW-%nPY7SJcw<7kPmSnMu`rHC2yVTT|3kfH~V7YmR|^PRFC z+ZbfM0xWKN%0z}C>5^&#c2z=8^*Y1a!WO~;YU>%Gzey-)(pco;>Mqw`tDkyOR&T6* zW-ZTy%P^v3aB0vX8Pc}~=`V2wj?fa}qmKRt-v`<7!^PfOt(<)-j(}hcqHo(keZB6!v`DBt@XaXh3dy&sa7Ww{QThaVonv zM~x|GY{siq-G9Ae2C!&N(l8 z13tB9M%h(3@#O|S0mu9wQA(&i`!$-v+Nc?$GjG@6#mPiz8RO@ghM*76C8^Dnka@*^ zBo~f$9M@51k1*O(!&kI4BNtHDzl0YLl$h1R7*7bdTu!%4D4rAf*p2wtgV2onQzR0d zHlUdPoUV5kHGK!(W~V}q@f>5?wLiCC_iE!gwJjOF^2iSm(FF>Z2W-pq0K?iJ)$dYp?ClRc z`hV!2ur)ta+#zB)KJVqjLdWJ+Dw$?ge+@2>4a)(WyVa}aQSAUapp`wSl^vCJw5hX} zJC+<)L4h@N5;pD`Mf?UI2+4T4NJlsvF9mM~Zl$kJbYQ~LCH8tV=;^Sm$X%*$xmTEf zQP5i>7(!3@9MSJ)sJp<8QrLK?QI$3)7(gk1oc_<#|Ds=H2C*RW6i6)g2#|?mXP$RQ zqoJU|<)E#5#7_^2n>H!m^t%4vCH`56FX(pdNb8wW9f;LP6ot=D7pY4}3Ge=9bz|QB@N+Y51sAuow};p`kREame$LSy~Y~^8+IJiEzt9+sh@o=Mh394~Q*=q)lMz4u({paI@yWPv_bR!eUpI!w5`ANvJ!_T$z)ikk62 z$ZCH$s26Lwaau6qtOIx3_nru{jO3J~y2_S1Q3$%Yo)&b&S~JCD{EJ;5*!grW!FmnL z@B5&lZngitvdgy1XX0FRWGeY0Bo0|4q%UWtZ{qs;^0#$E z!!HyI^V2aL$?!S0mRR!myA~(mCXIyMtBBQ; zTKQe_y0**vqTl_&Mz)NeW4)%u&F&@XBqSqQcO>F&!T*GEX;>M1#QE48GeCzH*V0=mkm6}$9FZ~4aNX{Y{t2wjWmrJCW_%S}ox5d_syds`@WG!8>O}4zw$0Ep`acNa;ttyoaVC$u(^7Bn}# zXvfi5%q{i_;?H&E?~Tn4`@WX%JYic$!Y@3-kLKx_GrWiA6Z-j(MzSK*$;hZ5`SK zjpKdv-d$&_rLNqqq1;*(NPgr7If5(tX;1V;g5YbOE7pO%Kja=KjuQ1E`}WQBPt>Up z-D$0uy^7g4jh}!;F;p>&2e~{lbieW>Pl;MzRYq=~GQY?5n^}^82LFNTzZ6&k(H4Hg zyfLX3dsMuDhmVD_QMxR=0Ad70>#&GM@oM6DDQEPQB<;cZ`5c*GMnQ2h)>FnW=X z_om@wXJorLhFU|C(fg-9a}6$|v!%6G)a?+d7{*3wnmBW9v$AK$^m|ZxbBl76hb6zG zhkuQE<34nJI}7Y|(`NUay5*IOw@Keq$qQ{*6CIIe#At`6?>W(idB0Gs`qwI192KXbSFzi% zMefk=8bz-i)y7Z2<8+^R!zFi_zg%Rz&!!;S_=2uO3t{_zb?YgeMvQ!Ar~j-*be<3j zrphU*?&|f{5DnUo8ZleSq1mBP^C+*7gmFUFkWI;0T{)TKW}ie?!quZWb~Q}-i_%hNSI5tR!xZll3F@48m z@j%}&nqeR9|DG{R!M2sGyC6NPS0 z-Vh1KZ<{wH5`ncldUp{OrU8S1`ORMY=&afuij#7-CK1C?Yq_Y7cH|n!4#o=L72*oS z$K#AiTTzb9SlS=axcjR(0TuM4JZMe@q!$LzqK^1t6`4<(LQB7`ogTJwV+Xk7{?=Re zeWMp)MyJu@VJA}+R*&+Y==f_rnb>DkzIudylzX`>)nlsvd01BJ{jyZ{3McEO#p2Yb zuC>xa!8|!6b$uUMQ6h|Js5b>$_r|!rc#r`F@+`SuWynS!j%DT(E|y4&anL=H#+A%< zpS5;Hyz?xhPh58dEEM!1UP{&md)5~e#qll-@<3V1p4ZX=4jv%J<}Pv`W0V))(#JyZ z_1tfC{o^5!^0g1S_@suBAr41D_0FErcmMZgf1bJ6xFVwY2mM0(lRae|yeGjlEA5^x zS3?}U;W1n+**|FaLV4wWytQo>E06#1?sxJ~@idW6+yT|!Ug|)D*4yztsws&lEi}HX za>tLJbIx_Nvj@@{sb46w7IN1!cdtBR4~ef@LM}WSSqDe0?de)3*C)*`Mnk3NHU6x! zmr#?;St*kVxL_u@b#uL*H6oT@hE3 zX^0$|qfOWq&PYX81CEW%e)|M!l6cw>-8(+wE?zukF%-NM_GNz``hB9pouYFr#!=X* zrA<;NeWAS%Zm}zwlo#(P@et0ioh{V#pg5(iSVtf8bo8cQ{rS|ND?^a5Px^?gPa9Dj zsu6&CEJ26I@8XSJY|s`X+lt{8G(f~**dLBco=IUrjrQ}3t8A1fe3xX&UP+pldNu5v zXS7{5+C7q856ChjTR}g}XY~0mOJoVT#HmPl&imAT;7Rf5qk4xFdaP5a&G`s5?uTHR za(;OIwwQpYyDy}DdsUcoulL-=WcwG+`c~A1>|<1HDk@z@W$G3S%e{gJ=j@)4l%^(c zl~(`YvcvL@1z?%`94DdBu#SixME5J7Ivw&X_V~u0?}$#uPSdu6g#CU|(^TVQX{h&U z(Hya|mqdeG^s`3P);$4qt-kN-)f=Vf@zgsS;sITxd~JL3{$|2$n_@@U4v&bR*Xz|` z*$zjR97^r}4EDT?hg+9ELt2L1^zI+;D-BN-x%iQw7t~pMz_n)!gzN84%CG;tc-_ZH<0Q-Xxgqk)C)_x`u8Id&I?k&R)CZu)Hw}?L!Bcn(iDkvR8)3RYRBeqrA7Jmzwlr z-K5=CPfK?bZ#f{n-G?oo?3XSlkMVQqaQ497m=!P{whKv3+X3V2DecuqoQ~QU?=Efa zVRr|x_lH$aH&C*;p{tgLf=|dtdrfxG1A;Kt&{Lvdcpqz+DD`ncb*-fD&4qGT#`a@; zA#M9Iv99P!Y!M+kE$C&(xut>M9{CSXi|U>g95*U+y-#-PYfBETElIsP@$7G*xk^O#Hw0BS(eOHeXH!eABYkm*^4ybi~ znQ?xVts)}sWLl%Iu`NoUXA>}v3|ClE-Fv7~9qqr7hdL_xMx`{|=}HCXTI1xLE9C?c zd)e`{kT{XOcO~KI=fEZS9PF}bI|#O`aU6g-M`Qqt9Q}e-Zi_tYE5j!LZa$uA*~Zn} zj)?1V zh5cObTEOFt^Gk@!f=^d&vctkTd!E4=>(l~_>rfe3r7qSr14pH44Qb1*fUajy+vIT) zSe!w{St&lR#CP^1$W*=7G~bmTF&p~(J1S3nA?dfJufQpEOy-D+qu7yQiy}O((LGg+ zpM36iX`NVqJlB+#dr5|8k(4!V4l@P&lVIkm>ZLA=zFH}|O}Hj%P0j8?w1;d=om2DD zFs*WZK!W`tbj>Drc|;sfG^&O16*zkr8#VZnJK|(4q)X5Y_t+yta>2>{eOk%o?a4=s&((iduwQqh zLJBws`(=}%2%WOEtOf`T>&r=N)i#SBsH$+qb?k8E9c!}xW9=2MhpVo0UQr=Hr!rre4(H56Fm7LWWn`<)rYHe@NK;K-gd}0Nm?}tmxd=mj%K3 zq4$PYUF(KcC(`L1S?4VI_W=cDH(d|v3euJGu+~er(SaswIcDW~rQY{>EZ!6NQlqDn zu91So`^ogQJBHwr@1LGmNrSDHeY#((+#z~q#}KE_b8-;1Yr_@#xxUyH6Lo)mO<~Lj zb^H+4%;{?D#liF_#d6KcYHAo;{+zvLuf__7=^GrsC7p(pTl`5~OCzghrvBSoAG-Cn zTP=Mzi*_Fu9yz^<-mUb!#Z%*1_#>m%0WbceWUwt1pn=^!C&*+*68q5hE!vzOTIgwO zXLpi~&nLro=9Z$`m^o5qd_W%hdPO=OmCt_P)Sbdy9Y4BXF{hXH`NN8d+@U)Tm74U& z<&_@SYU%z%e)~z~Pu3Kl|8C_|o|6PWsxhC`*gw`QVkYbbYAx-g@U)e%QM`9;vQ;gw zCL#v(y5jAR3cpAt>$w%6@N&dn8o%R7gkX!{$WOuPeLOhCKq}npn}3QGe{8j=eXrYrCzdU0M7l*P6d1 zDuxzL$X=#$dWU3{_o{BwXYAa&Uy^{TmxsjF4~V0O@!$6l*kv>)IgfUtKP9zHSLIzf zs~a9x<{wQT3!POkDHS{-+C3o|bx<*K_OTz96dFG5G5Is*lwM!TA$yca-0Znb{Ayg( z3;B;+KtGL-TR|tE2tudiFSCz#RyE;q7xknwWmgiE5FV&!!d@kxD4t&7=y(NjgY<0^ z^4YK0ah^C89C)Obv3E<%C-jcbe#!UaIy|>A3@o141s$lGt{CBY5<_Y;(P04q13%Aw zj_bV+qu1`37JHO9lkvp0=LKG^PxCCewx6|ETzBEf7?$b55iR^~#}0_@EELDd-QVnz z^X|;ROTsc}aWs||hIUew&)i~P2mQv8DO57yAwpAhd@}7tZL_biHInC1)jW`tHzOTE z{Wvma*O=NGRsej=}^@SW4_sPVvO_g$lLY`Fpd*kbZ~Vo>f6$ViiL zP)m2dCuKuae9?PgID-;2MSP{!??{P-W?#=Xc%ptbxrN*n-_8XuJ~$Fw0^!J`_o*nf z@Nj)JcOnB~uYKKhKJ_-IP1bWT7rA=v!@|Mv!0@_LIyrt${NdERAL=YCGAH;6SSK7} z2WMb3AwIMk?5fuL3t8eg+vkP;ft-0ZRzU>LeSsoQHj3`COSzwUKw+#1UB`1i)O$K! z*APq#KDt;qX86;o`oxfh_se+Z-|87(m*1Ap4>sFR)s zb7Rgty?a%Ti)AxYYS#J{=*H5J~W zxgN?3I^z>`D0B$@{Ya2x=Q+FMLmI}_T=$itgI^0ick0U8u1hZ6dX3ZTy)Bl^&~`nF zp`0{jYyx;s%PjqN@;?`hdDp^jm{{1dEP@6SJ=bMK#&R%Le@lkm1DcT4En)_?+pXbs^F2=b8kgqgHGw z7j!kW-tfA~%+Ry(i2N@59`QaqNZr_)R!&5xfz6t8U2EE>*rD}A7s^ATB-Z4vv&7~0 z$}-10-l_lDF9HvWjv7?6(=G5o`M*xJBCGZ8i2iTVci!vlv(S#}(;@t>kfpjy(5q=S z^tV!$a78y?LTl$t@yP)5ggEgJKrqH`F zQ~m?(g=g1Vl*u_B-<1vZ3_|Y>QQKm;$GIRXpuf;ByO7+&&Q{B8HS^Q@78tP>XReZW zz!AENd}3;b)=mbN#wk`C!Fg1I2>TbUx$An8%7py?6W6f6-GyYk#GCzEVBILJ^0_ z;>3MTgd9MA5CK?SxPPI}w!!Cg@z|xAJ|d|?*FEHqBaAKeL>IH5pQV~WZIH zWcL-Vf^Hw}oQ5RTR-J0V3W!dyv(bD1okdT~VEOazR7Z#2taUx6Rc%p3%Xt{;sp!ve zKzJiJr9KO{{Mjw{-4d`LUguib?p-^xD-F6f!p&OWaYgO+YfbkTO=AiQdjVP@Dgv&L z57R^#_6 zu3J$9v|`tHNk?e&%z zu=KhjE&NaORheIF_TSI^pB409RJLZ9;J-`IJ$LKLTQA>=tf4nfR`;AR^{_I<56gNuF6(rIu-En^TP)_* z_Ev|t1YNoo>gH4DE8^Togtv9Fk51_CTCFvE?$zAt&TtpRq4qMbr&eLooaSSqrB#CY zF9r2yls|i2bg{FO*LJ1lm!{hbLZLGXZweE3$% zwD1_OJ11THL&ESn#V}vd`tQ=;CxoYN4MTs|+|txABqj7=(?%OwI7Eb_OCd`Gk)47E z=O1ns-EI_3JS8vW@eb{;SpwRR*m@nuSq=<8pml7QJ+Qj?pxB+yPk`aYQg?UM5U#jYkfv!%S{z|RI@_jI{g-1@0X?A4z{Tj*dwfdYm!}e=22Yi$| zB0*KC_sGQO^g154_Q$W4-0EC8*KO2_iN_2}rOD0%I5f5S)_;5Jzf(`nLxK!B0muGF z_4@}N*#FzEt(n!XpT2W?lkA*2_rF5%Z7_v};h1z{n4O2tv7%{R$!tG?t|p_Rn2TM} zPOa&Xur+Ee!}E6atMSLq6SC3mx=ew!<>dVTHzo2r%mc%ejudeGpI2lCTvOsFw0K=Q zT3#tCPCBNKx-&RL!`KN-G>w|3tlh4o2%~9vF{_EV;o@;R8lM^IsHt=4)5Wi$=EN2+ z*SnI*_-$zRH8ygkWZO<$lQK1R4&h~p9#cX`1P)Ivd&p7knH}udbw&rfy82;MFFK_7 zg+l36pv_1cB2{+}$c7;;zwiuPV^K>Q)*Mw1_3NxAV%G><9=mw!t1=T9H4v_Kh$@K1 zt(|%>GF;R$kbA7>c{B1>eqK!xbtMb(jhvV>pVSG~na9X>l6@l=<_e8(q@Bsq;Vs#^ z{8rHZYGhoe&1qel{x>tO)gx;a)pBXqSszeO@_ppD)<|Q7MKC(@8(G%WX^sHnGgHIl z{IVl>V4V{`ysmD&NLnY8bk!Z7n`7?Xj2EXkZ&q}Q^8&H%s4t-so}3=9W)-R2uJ5;B zlO3_Pq4;q04W>W9`@$WZ;GO2fQgOLgw?AX z2VQ#=eLAiR{09WD1A-1Tws?3sgSWP5Sl5JfsRPN{t$6!>R=iW|dr9kDuNAM=YU%aP zId}D{(^8p?UUroXrg_CRkJdo7zxVyD_9@BB)$;kD(Q2t5eL+9w1o8%~d35%sWNz3ip@onubrn&K0oHIy_3ZB!`HLKJmuRY;>uw-dROx{&%sC32ritx?|GgZs znJx0OR%<`f^Xe+JLt1&Sv~f4u)Q=1=O?1?{uZFO#GA!fM1p;~UF`hu|s0e))mYZwD z!9vKZ@E`b$y+F{_oa`cx@BLF)L&589Ro`;Jd8cCTcZ<^YE2ej^;Jvm)Fxs7T{TSE~ zoaq|4QL{4|E7mTpoqga>==Hi%^SeVD;#rOQ zLMOJpTHgm`@JiVKWFLtdKI-R)p#T@WBVOa9K}&Cocd1UN3X96Jtbwb&x5&5+QCBO4 z!*>rWbQB_b1@h0kN&($*<&_eWO`%W!%p!T@eWvQaz840v4!V zj4^?hSM(!&mL9bs{3CtKmH0dFmD(dqQrAl&FNdGa$}P|1^>ZRHzMaK1Yyp?#nR_Bnx#u!Jld z=%f>SAAq*~$)T9{aJ@6QM{iLjk<`;-iZeF;F#WfMPNw0YkfKvdgj8k#OvDg`oxg+E2&|Fhhv5SE<0p_w*h|=GAgi9oFM@!-^{<|_6&hS%*_2AHbNH%nvF|eXqz>M)*Llyl<}Vbyi77 z4c2TpK`*)U*%TS^FK|@vuBz7@`<`M?f=8oX0KTE;P4GNAi|4xX!(+2H-vRwHo7_Q= z{4iT|2b>?&hMd5g_HM}Gp3DKaOOiv_T3+)xRfL;9>TX^<_dU%u^oaLa4ppPqeGt0V zZ_Qz8L3(}Gaj}PP)X656<9m4S1j?6tDK ziJEY}_-g%Sp9s>*r%kgHk$pTG0v7;H<9xl_-&_a4O|qmqpD<2+zsR#)ElQ*F2?>Ue@<(2Iz8B z51Pfn5176$*+F(^;S;#Jl3{81dXM<;RjrbK+efr^Vj9#ev^5G#4ZpTedC;}b&YPV6 zh>+FvH{^#b57ekX2s;JiRn<+%O>=(M0D&kINMwd{HpFSFn3ryiAnz8R>~`e2~5O%SDaY zzaa-}y5g)y^f=aIeNtK2=Z;SNRMpV7pldritR*UdS4{oqY5&+BwpWM!>+|!_*=<$9 z?_|55k~P7u2(r+ewNd-h%R|j~iJCd(>lIm9dqv6QP4An4ns3zd9HQn8f?5qXysi&q z&(zk<@<72|@E%d5^C4;HRg#O?on6`3r^e-g!d6lJ3e91a{u6QGgplyesV@6ObOME* z7JV#-g?CWa8QGzo;>z{1%O2FbzJ+q5EAPT~;|R~A%S)5c1hF2xOrZB=vG&4tCmOjl zcHBLs_TX`8fmh^R?U5b3vG7f6$1OFKM&*z=ZvdDOVd&@cQHDoJxJsjwLIVhSv3Y=~8l>R>} zzw%XSp02Lx^R|0v(oc^*na73cd-Qu;x}X2Y^gAT`7mtbPNJLk2Jj~hV6j7i_gf(JP zyeFDXy~Y(`3m=ilv{m2boFx3^}UkN zR0185Rewaj_Cum>_8Kh)UX%2Ktv!UrOCX=PJtNPX2sN7Pqavl8N8Rc?e+Y<-FUj6mdueHYX z-e+VfaJB(*BH~A67j73XZ4#}n5=Yei@S4r^vq2E3xr?=8M5CtAFy_{c9cZge4Dr&Rz6 zojI$YA*mbQ?l9O=f((bK&U2A0T*d{@Sb3wNWOQZIm;)if@{IHZ~ zbzS`oC7`1npUm9XBh^VBRNr&?&IG-~ZDOSkxz^JA7r);}SA$T?ll3BsIvx>0j6RdS^Lfn?2{r=pb?9%yzHSpM(e7#$}Q#0ydVqwPfzf<;AV|M!HzAhbQ_eaq0{9 zJQV`$)w!y*0)1YCW9a`vlWm`sws()KI**q7Q^;#w7_9Xko$rKBpc_tz!n#UJ4XCi! z>zqcV(t}I^964l%T<`ed8DobNVYs61%~&DV^VIM$yH!vgb7@w#xMwWo>gpVIz^S&Y z`&y;N$@rO%ABlYEQ2eJ`9Tc%2B0skmT56*o!;}LzxAok^(!X9|jm>^$c8J%Rk?U%p z^SI)4p){3PW2m#olYwF{Nx!*PDl*K_Fi#!wPT@H3;zz!bqmHTy z`?b!5^QnC*JRvGU*!AK%2_%8D*kKJJ8~KFs-c%-;b;b;%8lgYS3k^SaS2%v|iIMJo zLmBkRby?PovLfI(`bp@^8EJ0zPas`61LVY_^(QcEIc$;>&&Img~lQBbI)q1G4CD5frdS`&2$aK%hVx5`#5BfEy zdEWzkgJvZT1WwsagIqeJd)>2mIV?|Tb*(($1G1yN$~4wJ&y68lc@bO5b?;^tfslZH)JVCE!XwI#ou67ge8J zTi47D_qL799MMvG&5n|@NK>BVRlF_vH8VwJHu8-#QK-T@r~bLlA#9e`JSy0BtF75F zMBjw%%Hz2A;Y#H<=`4Iy*q|51tX{eAyU$A7sXOS^xUcBo*>W}ekbEt9d+%186>qbD zt%iP|7DvNyIb_enqJ|esH0S}vZ;xvQuWQvYL$qw1uE~k);EoEasB|6HBG&J$44;jf za`0mR_EXUec&Y2ju?NF?#LIGjdn_i`G@?J96LK&0(b}ucxKgkAuAat7}RH8feu7G;x^_)zZ_HD74@hX8$z0=2|8y?I&=-GQ*u^aGz>HJ&6 zIjgB%OCOvZXF>mip2OO&R`8%E(-{ePBiz+saj4UiGM^X^`1!Q&)Yd?eQ)LX~;m zv&YM`sAD#Xg&O9pmVG%?84@!gCU$imkEVQkLyQW?GFSG+bH31Ahk7hw(+iB~(Xed^ z{dOxV`}cZwDw z4#vWlwFF@Q2VKlvsgbg$uWL*p0P7Ev_?SG8X&ayQb3jJTB>#NPtX+LGb9O} zAk0ec6plqMAygD5phG8__P4;HJOY;7n{@B zC2rp#+NJ;G!_q_e+5JrXjni+PSq3%>(J+w(yaA-?^NpR#N^j7GWu>cc*ax+Ec+rKpTl0a} zw>;FgO3->;ndBGcn{HFJ&7f-;DiQxX9TRfHqv3)0uSr=ZrK6{L>2o>%wV(b*`f&5WBS=9+TX07 zd*wfGljJxeN%f%Q?sKxe4mU84Nby{;XB{hP^>lxqYQQG$T?~ZUYRQ}1-2=<%WkKnH z=z6F4#3I=k8LVP7PyOJe+VLqjuoXChu(#3||%bZjwVjoL?83=Lgx z_8SNgHQHOe!I#QkPJN~`7QSG6x`DIc^fiA%^h3WF?xaWm;Q~>jNxL;78J}H(@L@rk z-RpTukgEw|jpMj{t8^(j2|SI-ti!NnuD?6RazL@$U+ghyBH+V`I-ITDQX_pu$(Yf5 z77B$%;~ehpDR1MUm$GpZxU_yc_~9H*&ZTcTwHuSX84x=tt#hBMfuKoF_S-K_+)wU`^7grG9&R~=&_dPL45t0XS#{yBZh?s&dCrSE=dkbGJ- zh#N(18w5%6ss~G^VZUHW?r5JV^fmoOYgl)Xh@$vhby_>Kxnd*wa9s*dfCDtF6i0-Gf(nb-4r*U#NPAp80S zMT=gQAGuAhdG)xwK(= zi&l?Fdb}jb`;cS?a)X^Q$7Gj2sBiBQZNDh`>hePHf zGskCW!YjHUyyXciSo!1tJ?>j&fI-r;B+8rSLhJJe#5);cccE+ zxbMyz-hdvW3Y9D$QjGj3-h(+h*3)_st-pUz&>}ZUodUW(r8b|qb`blZ`-I5DlE;tk zG0+iK64_x}SJBmzC@gg|TYIsf>~n>r8MU5qD~OKJ*!Qd?&%(~Nxc>^L!4mQG85meM zbi*B9XILlh1QU>)t!O0ImijjE6#v0d)EU~ZBOleSCcHZI7pGXS&zu!jiy$rdQS_xf8l-*WFQUU$MbXy>g$ z-Ov^}JtP*EqI*cS5-a4ODGHjTe&(FCTWGs(b+O0tsTiTb$dO~Gk|RGea3_0@e&2yX zU=vKODE2j-zRCAfIYb4~9?>6mH}Rg8!j7@(^IHsyUBYBSV+dc1p)X@)A?m{00vo$E zPdotg(&0)TysG)`*37A6xKmgCT=v+HHBY$c=lb-xUW3iU<%%C`4Ep7AKF4l-Pc1Uu z#gB#U!}`v5LBr2T4nC*xo)d+>ESv5=L1>G7=to4mk4P7yD<9E&D0+*ozF(i%VqB&F zPf2gCl@-Y6FP8UomLdkbS3eKvXSGKDv0lHf*ZcH(2%e!^v4eSyhGi!%d$gc4s)V2r zbS1xU6-rtfZg7P8B|(Z^b$Gh$)Zd}M^bs=UI5IV!JCOQ#sODFC%B9UmUX6MW`r5+9 z^))|{gqkbX7T5noQrezaUz-2_?7iEsT~(ImY1IRgQNQ&=ORZMPNhm9v*?D|BzE%Yp z4Yn~D+Zb%j#VQ^73byeDU+_hxkP-pQ`k2%+6?_-~{iL6q|IzIdCz4lsjjydKS-?+}`_nMg-?aF)enzLNU&}2^V z%i)GI&KKNdTaznomvDj+S-k7@vqG;KBbA_$S!YjYn^r+5Nvg$L7O!3W@Sra0TlN3( zcM+%9UDB>Ns^4q$n@9z_=%~DU)B3%u!5!Om4VKlm+1>V>KHskEc56qni;!h#lIQgg z4HPl zJ1F)M!*~>})qwmZow72#&+UThK z7%xgIU21k5JMlSbQnEC#2>2VlhJM@H>`FdAE7Y(>e;?83oB>OP?!VKg2YX(R+Nbyc z*rgF^`b>NSue;s@^n+E&-ktA0j7xv>tfz!=VkJ~68!GE+LSPd^guj`wRx8TO6! zpX;NTMW8xnK-8H%LLMp_EP7Z6uhqZD)1}-u&cY2Vfn5yRO#PdGM@+5%be29Tc(2-Y ztuWIXN%;+hHg!fUR*YkdvEoz8%_rUz-q$b07crYDp#nTd#1ffR{sv|DoiRg3S^p<} z+!%C+;^S+r&dT1WDLqmGU>VLjkS zy0ZIZm$tt+GLy0OZ!0&|x^NO6<7r8Y@p7rNdkw;*P-AM_k<>4>onb8}YqbQ{qz`9uX&|*n{ed1-cjK)v@N`HL{nIjxHcf zuMECuYR~LNtZORJ=W~%K8F`9sHrs?PcS-|3B#Ux|{zo3Z(8=DMuYW$e*-R^!Ir~hP z(z88tx@@((gHexmU39#rj3;-i&stmiAAcvRB3-G=Auh;k{9bt3zt(H43f}Sl!*b?I zc$7S{_!KQqPdGknOBmj>4~=_ZpMB9>M;r=o2(|O*hqBKWjcX-ez0MP84i z!h_FC-nV--!X;!{auxtoamF-g^+CO}Qy6)^t68FxA-JLGc$v`<0?YTN6)WCH5BmC_>{J*ZVveN2`Al-SAX0I=rcUky9k;Qemk6 zO3#!fbrgGCJclmlR2&e~;WyEoHNtkpbXMs9KJJQmh|eAHiu!fnGxLEtENjhf4S1bn z-;uqxPe_Sew~T@ieWcPf;x#__OQ1{1HC_D&T>(b2H`y^ zSI#6}haBl2bN_kY$29um8WnL8qHe@D=+}5iJ7U}%4vPw>HJ2Af3#h=%exV;nM>shE z8abP2^u1#C##;Oz71@D`iNR9?x>QfGN1`vM7-SEp5uuID3f}gknu2X%;|+e-X|X+d+s`QK4FWw{?c2-voy+7656@5=U_jvOiWY$^z z#mU-a8@N+6qYjA@v$YiyxU}pB7E*IcJm&f_BbTzm$NDFBboXsQa*S((69!`?*|(TWTQ~fdf}gS z`X4;FUO!}9WoNaly1)a;-&??L+PwV4MRdRr@>zeX) z%nXFWINayaTEq8`5&l)tDK;U4TXcJ-IDGw3@Xjk&!q zS|I7@z8U*~zp%*BanX^&IF1|w@?^-)r(Z#x@d&2z+V`zDId}MjtWjSa-Ii!j?(N!N9X(BsV? zsyp5+eK?=G<5iMLM2JdCcIgycIz)@EKPz^08JC*`Ry!nYc2*Ri>)Z1}1qb!hJ?UiV z9DsYL-u&q0zI)LzXA*QdEQ&lUjl)R?yS2jS zDRy*9G$AAVMg891(c<%^Lfb!9*Y$_|F%Hk_1FWY}(h865T+ekwI*!sVft~D+v~4vv zig)GJ<3d1>3-^%G@PfE*ztB$C(?0*c5@4*Add>>zmeKp~?kL4cZo!#dJ#1-j{0im* zyG&xo((&aXN%}QHjL&NIUX(0rd%%5uQH?m~OV{~OvfBxT6Wzwqk_sfS9X6NiX(mI_ z3zC65g+x}18_zeI`PpW#m%eK~OMy5@dhm$`;{9;cpx;WI46Rnn4xo9zoY6iTxAW#py;7Dzhnze8 z`lK1>NAk_9vhlFz!cxB7cz)tNbcD~p zPV0~;2hYMn;B1M^mEq|>G$$U=&!=DebIQQijg9_^o`iqV-9SE-g?*)ERX9KDgmiG3 zt-nlbaZWq>qOdal^zOrsZK8+FSEBmwMJr+yrVZyl;4PpNVOYCSRT#D|6be5# zYlt3srzhWlJbp$&eJl2}uf(<=qB0&j>Zyjl$H<89e6Ra0ZSvd5&2cY5{08ugtGIZN ztdO~Oo(eBuBC9&?*!E99C7tzzd{EO`hx6K7_?os?E751cmGkPWnzz^5YcL6X!?`$X zHEPa>KCTh3)aV}@GingRRq^<3d2->O)w%=Lbvc)EZCM$3aLJKP|Ta{3cY`;P#H)r6_1;sDQ zsZgxlYq}1PGCSC32(TNVGxZ7R&!xJKx&_DfORD$F=(&zO^ez%PqrZ9o_?)p?D_M#= zZ!>3I^4GZ8l(kmvd3xMshbz-#E>dNH9t3n*k>zkZqU0GJAm{UNomge?&FHA>v z*Nss{cUb>GKdwC>*MRvR5@nzh?-DO_oe-6{T){O&=7^#38CZxrwEMM_6Yre4x$|!D zA$DC-r+k;#%->4Bhqs2k=04tWRhL_nYe%n4KC!M8YOlrJK4H}L`OHyQF(1R+Z@-LoobLQ>vyIHYv=Vu53n8ja-Q=luL{z$&Uhg5Ozw@b{is>I zChW>gM`ixz^PFY-nZD7VzuZL|-~wk`aHcGAHF(XjJ^K^PBe!OA&Al^27hZ00kW8VYL-%y;jgmo6NcvLy zeOmwa2{mq%hn{>vPBT6yiMvh6XGV89EWEH**X|HDA_jCw@3-yeQWEFNaJG*v(8(Y_ zPNl))i;mx_pS6u=t&RK^cCK}#ubeCO7UUqls&$^k%1#NZofAqqE-iRa^QKcv+bhf8 zHSV47?E6=?U!Iez&yIEHt=NU^dO9{ZC&xPgX<+P&J;hEk8Z#31PLB7mDcE!EtFAQf zye$qR(~(bO?~!GASu(-?6?!II*Zu?ne%D-gMAwordUC+#OWojeVs15d4H=7;N}hc^ zFXYE%J+Y56T#3&sati#r)U+Y(LN@u7Ex)_8@e=uI_>4+Qktu_J0;@ls9homs5s8QX zc&}L(svAJeNarp!(GuSXO*1+pYOXQu11&o*Bj{X@r1qZl^G)QE##r0fKe>a^JC2Rz zO)eF4;oLmFi=XWCW~Age#OY(y8nF9rHIm%tdz9aHh99~5P=Q^V8AZ--&s<#S>aN{T zAt)Rtog|iYc2!2?z0PFe#Z#<%!)p{0gWr++oI1~|ORu_NjTd(S=Y2Pu5tpl<_p-Kw zPI)&*H_jG{)iuA;(}WX6zLnq4IhNS=ymzgWeeBpfpMpdpi`eLccTCUJt6|Ieq-lFf zSQYpa3GrUzX~9beHSvJTjy*}C4 zBGgmTz2LNdUX*9@Nxi>S*Kuw_?G1|=vj&$XC+Psgnq$k}5Z9V3(?0CaM~l1c?ZN7i z>(f5_lcxk#M`r*I`ToY$9IRA?W~FHIu;{c>@z;l>qxNY2_y@N(HRH#myPg(>)(Tgg z5*1$%eaK8ZDJ!o&@hf>evK*6QrQ96K@V;Br^svUgPWWc0#=2iK*q{;DD>r&XAVPO8 zvDUdQTM3R|y6C6H|FHOv`nlJxZf*a~6B-}(^D7$P9^ruPqGO$Z9wUw4a0^nr&b_aB zz`pvR8XcRlMycA!ocJw5SK9_OW~`Ds1-c^~I_bSe4pM`SFDJCiHBpA%fUG2TlciVe z2;>Dh@s?a)EdKcZAMd|)|9AI;7sBrNvqpCE4X%wd>DSz&1ZdNkjt87I{)DLfqNuz< zyL+6!&pB>Xq0lR_O93<&G@$kZ$(;5xTvBrPYt78*AAskc|KD6N?xAA&u=eRu?Ku3N zcou4Zamh7~L*&?4Co}aZ*b3fn+tcV2Y<1g>poUtTjJQ#)`C8MU^v-_h^dE(sk43Zw3*+1Crh3A>~-UXsc_K%T2`9{GCn8-o>Hpz*nnS5==vKawF&|t!rP>EPAu$L18q`y< z>VaFScQZQUj52hT@dDo@L-gA@M+%AQQf+jy&=BjjZmzpqCnPj{-VwXbk{sWDO;c+k zx(-qqK&?PoHAqJZ`bYay`%H-%6V2zW0&2;ob;X(HJy$I)m-HsqO!u!x8jq=~zD|h# zyY(La=uLY6NOQ#ry*?yO^Iz`&_WmpPe9R^Klp+IDO1l(w3A%l4<+H)?Z4CO&~|NEb#RtukLrn>4;r0F_Gt!G zn=aEx4>dGlro6(}?79y8$Tdw(wbi29S$!ApviqDtJy&Rw^XuOFP}<$jp(vDt^2F)0 zLt-h90~d^&`L9Lsdau@8aj&}NlK7GCZWk061i2s3+MFC%okZOwR%TqpIH~sTS|Q}< z;p0N1cfA6j`^)-d5;Hp?t+`d}b4tH2NRG^Cg}YJDhvebAATB>I{IW}06+L@QSe&f* zLqa(-(z*Ne$z#HMyL9Ddy|Y8UzQ=@y*J@o$D?a(SL9|V&zWw_2q~@BO`3qf(L}|~-)mliuQm3}H zZhtH#_&a&0p3S}T?PJ0~o5XWdk}cHHJu4d2b!L4ytwcwx3uxiZUinI&TFZe`q6xd& zw58uGuc-;$FWS)$5xKBWzw@k!a_7^jlgwqJm&=-;(UPF#kZt#i#E z3q5}FZimKSBGC7Ria_LLza0E9RMSx7<4)l|vo>_@+;HXiD7A4)a$3aQN-GMC8FmIV zwXP>y2>+oab2*>z;Nfin1KUGJ1rfc}shmo$Dn1JC#Ll3i9nTv0Gse*;_wkrs)4qD6 zvDCufMRnrm&4_rS?}~+bcajop;8U&9Ze>SXcaEi2o0E0g=f4m~MN*s=UvrWSS4Xuo zbl)Lf8&evtN}C4F5Ei*jy?1r=ij+ z>75foJ9LBIFAAL#Md)MdUIEe5G&XHqG1b_Ujyw{-B@#vl#&2bW}==RY7Rh*u*uVqgo-6o0kpRl~i>p?F)@VJ-W-cziIRgcyT6lsOOS z2XSP+-yTD7Ly3Oq6+!Md(axk8-A3t0X#C_SdNgpoIpibFj;^iDy1WZi3`-vChI72Q zPx;Du&CtqO`$RPTE$G{KZOjU}iABkEuivpd^HWBNKZsFT=f-&ftZ$pG|_>A#%IQkqh)!__q>_qCv>t}_{ z)y7)&IxLmG@3Yu{9=&?+$ckNv9l@@HYW1wVMnBIS+A@g>HX=?wPmqjG&ZI^5pc#>4 zvB#2g%FeCEMb0c>7qKVcnXb*z-B*8_8Dn!3Uwd3q7zyjMO?{SWEtTg=1EZgJnwdvu zJuEu+Y;h)9M(DAw{xmZ`s@2^g+_OhB$G%6S($n5lm}D8e~8;q~}MwPX7z@ugNDonvXq>&Pog+kUjS zsVfuMOKn;4bE6piLq6M&%85%2GNDfrebzY>0fb5B>k07@HfLMDP)m)U>##lpGlEBr zZ${Z_bKQA0&4Po-9YYdL!t*d1^9@m}>|o|BweUouC+TbLcX!GU|B@_Pyc9{Tep;vJ zZf=q~vzx5*i4E0g5X@p-^sk3<{d4c~8Pz_oXwS2QlX66}$Z&DQ1ph!-{?4^G<@)yX z-dSV>mB>*@>e0iNcz?v?MoYk2X0>fzJQM6Lq*i*oAshs85usJlTo& zIPIFV^N}+WtcZ(VuwKeTfr9AGPq`+iJun$9hNW&`BPY_o?>0d+Q}aA*btl zqdT!wN~vdDi{}$`UshBbHxm8EDzW1P+zyxefAagl4@oCjY%E4tKKvV5&k^q&(KS!+k7Jr0Rq z$ao+^dRY1dOBXbndY8Y^MLwkvo8W0(&)?Q)X%EDn$0kl4W0@J5`hl%Vn+Lw}uA&#a z5kJL}zp zW@zcCOB=Se*;~sR9>5kh0?ED=u586BB>RXH9_YP5-*GyUZqWanA&7mLGY)REElU4o zvUY5V{`=-0AfK>09fv&LJYmHwZapqq9nfo^A?utZTc?{eQgEUv=QA5sHQG>sssi?I zoU`7~o$Ox_ewRW>Nn{$*091QbNT>h0Nyxjc+I2gG-dD&YL&t-cWG$Y&qgCr2mUHk) z+*nXF*b)hIALzA`*i?ijRL8;SSxdU~L%B>-+v&nISG9WYh z6f;Y>pw4IsAA5ff>(Q3#xDL``(P62DL@(cSOcLpaS2?^zTp2!C^g?=uh9m$81L^Ks zuc&H*3S{u`E?6((BwsiDYl{0sDswx0!uba`_4(cUiRNm*;Z>*4$ZjFk&5{g{$+E5c z3MO(W#~+f4bF;vhF-K=1fnmuq#p}SyU0h*Xz3flT?qy!C&2k>&I-l? zAL2Gf;UDk}wZTx5u}^M%PsyK0->m0lJG>%lKBF<-%?kgtc-f+Vm=Nvg1MrA43UQ9#@aJS*ZPlWa=jI?9<}fnZ`bTL0oWB{QHD( z`4Qo-6Z&~h-k)>&i=JLjHW?)=R3X)mjh(+`NdgwJ*9=s1Sv+I}Ne&>nj>as=Bzg-$ z8)Py%$x&X%tR{Ju*;zgLg68*_IRB{D@(Inp&hU#JOLusrFhtNqznyj&9~+N0{ygpY1?i`Crd+@Z83NXX0+gvZSE| zd6)S9@vdB~DA7gvtJPHxJoBzlf^DH8G;f>576KS(6h(tSMq%#SM~&4J=o?zHGwh$j z-YTh(C}Z>pK<~sE(#yhKoa0p9qwclADO=8^;JZ-9UXSv-j)D+Dh+nPlv0 z$hU`X9PR)xdS=F&AZlxQLdpL9{d;dz#4Pr8MwCeE4v>icMZxr zI$5t&SeQ9)XXyJX+r;^dh=b%f*+Cw2&LjMI-d(j_=I7a8oHH!tYsoA1?rpCRzC+fA zm36EjxFbgI)y^HCUQ_pD!9F%s$Y>k7Kd7gU0~u2@V{FE-EV<54ZlBdX`Wde^KH!^@ zCpYi-FJsTqDT#HrMaC@2uq#IsdE{8Dw#K{?IUA_WT4WcixF6OW5huQv*9R}~z5k}M zvCo{D__>~J8und{^bMQj4;p1(&#$TCbQ-9NOo57=RR-7FyG{(D?+M{=pnt2!#CX1I z{3rN-sL#M>0mV4i^*h}UYLz>9SaW!l`YAyq;AV60lr|r#OD<8=vy1*~^GV-`@p&*e zIxv3TJ116)J{NeVIEThQ7ia-(kkeo34*694Cs3J)1R4+D1-2Yd58PtS@Y}|dVG7iJ zN1VUORgUb8mQdc$Jc}m|wYCPccLU!o^&TPCXAX*jl1d`D7@H2H0)DnY+c>>3@?N;w7;H6r9Ooza!{R@JLY#VM-{2RM!tdD_k;F|{2p zB1<8BS==jnWm6FwE5z@}-H9AoBfZ>pNed2wA2H631EB23OmBgd@dcJxgmY&3LI=>HR~ zEOEQLAnMr4bI+2S`{o}ppmBQ<4x!c+Nx?kZQlvW;PJaf!fI9H5&~YAl=6dpwqC_5u zreH;^y7Owfd6hDF_3Yo1u#cXWW%``FNzch6xK6g+E>+%z2W0+ST+=-AsrqF%(vLkx z22H%WBs+7o^iH32>{`y?HmXEI)qQ1=Wr1CH!5zf!r z16K7TT@^X@StY?;LNcRgBVrU78m{e^T9FY{$P+FI); zq%F};=i!z4VU__a@5lhMc9GZK;hadxDmweE+}Fs3T1t0Uue+11S~-(<&OJ)?Il+n~@nQ4={B60kc{`Y3sQ@S5YZLZ3$OIBQgETl(u* zXIyWt3JVGTL1VPFu4kXpo+v-reXK5?kBsztZISGbYRB4U{|PV_ltE(>1Hx}|teL0R zALQk~p_?N{)J3)PF_OPSR)X~t(<3#@7z5bUCtzbmO+pr)(W*TmIe$u?;LVByL9b&S ztc6DZ?W~8N*epIqYyr3v&MeVCD4yuatNMgaT*M_mQ#KC~5%gFsAH7P)L|d{4mNl4^ zJa{lFI}v_`ztFKS>8~@AlYv`?D{1NXeX3a}q^fhek86GH1B+E~7K!`c-O>o((fF`x zm={{>ZO!0Y&GSa(os4g@M;-rxb8qX1Px4*AN7OoF;>6WmLy-OB|Db2!8JpDlu9yFh z^Aw*KeP0nB&)m^)i)~}crvnQO4yos-i-cjQq1wB_UTX*XjI?Ol8&*j*i)bZPLd*rs!ywg zrQ?bpv^hD_srTUptmWmxG@JrUjE9a(oZdl)4st<^2g{SjqbmWp&T#`*A(~%6T39%o zH*WmEjvbN;fdXtX&36tPGzZShU8Cnu%RYslhvpC&TvM_;eMVXxIs8d_fY0#5T2@d; z(C2^iIBeOmYt_+Ri?z*EIAx(%xOX&<>1+QwmtCWg4q%HGk8@fG=v_FBb+Na?0-J zHF5&H>g+MTJ*p$0?YqE_)Tv{)fTPE4|;g&hellEsa=x1@>egw}%W)xw(8m zvWC{6pLCgFn`>r#LicI1yF-_9XJ_-ZQCCQ+c1@#shj_%N`e&)}Nn=-k*vRfLwF>EH z`(_pqaw;B(|8gS(*0dRXOXossEYwB3wYsBRyb!d***XyB-z~HLV`(SN`Hx=2-et|}#*A31;r6;m0uwQc5*j`-7N>|&eQ<4(L z8~X|j9QF251Ky1$pf^jck^F&mT2^|)3sL1-&pPxUaZTzW`|x_sJgh)RbnMk!uTiYk z596JZ{J{QW{Ad=ue(t|_O7lX(7)gfLH*E0zdLK)@?dc7=+_(6DQ;qYo#s8Q1naVD{ z4;~$db{ygN8MoN#%jfS;5`YvY(Qsy&&m8Pn#KC%jpy^D=zht zd{`HhBZ?N@q`OQ@4{wol-KyXFlwHhK^ewNehx@JTy^H=)CqWPwV)ogqsf-g*wSbm> zqp=B+)9U;nq$(ACUX^v?l`<2~uNQ8I!rjX?bM`BHbe(n%z2ng5_~N~nY7IqHwNDC6 zHApYIP}`Hwj-S>l(TNT$;jV+F6|$s~P$jO-?BjaA_o_d)XcRALg*WQoYH5haHM{V` zx2+&5)>#K^n_7c@sB9uuIP$fO)g3u!#N^wxB?I?B+ZkoxiN=Dm1hFqG{w|{t<^W?i zqJf-r<$HY7WB~du#;G-h<|DJIjwkYtkCAvhQkp0nw%f(#fAD*7KpBI#2L~T27IShB z_z~HEM*9;z8I?a=fqcitquW&3%Yl=`$H{J=SPuQ2HInELTmz-ZI6=!}qvHLqSCVWf zP!O4j;33warekngXf^a4NZFA%H1MfH>j$Nbh?yri-#snJ>iAe)=WpKc$O@du9>X3o z6}TH34m*8FYrofcO_&FW_p-)aOVvPVWHz`4n20s@4!A8PPU7cbSN;lk`;+&>U9lW#GXN`dDlcn zoxM)b0?!QBT-Fu#NI^G{A8{Jnq+L79z8iBFT`lmD_+Df!*)xK_xTb=4q%jGx(eqkm zRvhp7vS!D)n+=iNeVQxh^RSC7H;GT+<6-xZk3gO;yQgb)(KVUgD*dRB6(xI%UPEoI z@47}`@qHEhw)C?1JWv97h&@9cDc=nH)b_mdx|S@WAK=XvC1OuG-ndNr+%fLNknVFs zY%$Ou^2V80heVg*`O$mC=)-*|s25|D-sjka_Exdp#J`yZd&#`Pn!X{;OI~5$>S5j9 zJqETsMZ@xwo<*djquiE`NR5+{3RAN)CC_ZCkq=Q38JM=bVw{Y8U2}1!f9NdF{dU8t zP=?rX*9&t+9*{1=4Nibgt_kVS2$&D0z$2X4y;!3H3gU-*vI+5M#boL z=PJ^%6ihz}dzB>R#q0=S7?jU{(YuaR<> z#Yueb9o_bE;~CC8l0309EPw6@2ZE$(Pfy>s`k%3ot7419-UIfzJ&ewNg4@u4#AfVi zq<^X7_s9%OfOa1-XzlD#V_JB)drf#KIeB0-S6T`}du(7R!tOPyh-}PQjWSOewgmyESu%Dll1HH`a>DiEVQrbGhhlNjyK|xW z7s*1D*!fn>n%NlJ4dFNFg2uy3Hkt$BHoUQDr7xPU2V^~v`)MSK=5hUyISnZa+KJ4F z690#t1TU9_4~F)j1egO!lLemL@!4JDdNp!PBeb z>tc^O3Ok7z``oz5?c#h@sw~)p>@)92Y_8BFmP}w3Fib?%xz=8<@$1~SKm$RtOF@F1 zI7ogH)FG40e#27Iy8;#|7Lls9cNuPE5Am%sA|Do7sp&xt@EElqAM1`(W#Rn=FI-zt z9A!Nb`Dt(zn42uV5UwH7G4~{P+H15J$LhModW^F%)Zz&~K=wZBODY^I@p8{HyJVHEf zL}Tr5LK~mZ-{k9!#x>ca#TE)NK{yRAB7++43+oy#L~5mU!=d)j>qQ`@;zv03&r(vMulfZF(d^ssnSCe)T+JJX`SG=#pj4F zMlV|G;TH=3a9IZet)goR8a(tQI@}xvo&All9j#UEM~+Gqc(1O^%j%%{`7ms`1hXNL(9`N z?ZqL}3U56YB~-$zTfQca?_J&QnPcA^_62wg2?YK>-;BGA>c;2U88Xo;CzUeG@v?^e zWbYm#u(sO37_20@C#<}CZGeqfb*#3u3chS+R@Mu7{>FQFVmXy9ZNSp%=+myu*PI@9 zP}BnO3Ht}D3JYtQsNoUg^O}kbWG`(>-Czd{m;9ti7t)wy$m9#YjZ-S)y zXhJ4`%<4mJr|VljrsUQfWX1HgamnixT-qrTz6s`DOk=u{@%Azialh`vtrv zO=+*9D^-~b9p;%EwpSl*?-jd3GiQ0DPsw*fYQLx-{D<}!wDWE3`HdNIRtwdQ)Krrz zOFvnnaQ35>vAum-Q!)fWLlM~^8l&@KHMi{QG`g=ObyKD__QrFd`}0vVg8Au=h?Ze{ zxnpYh*3i_^+lkyxbO7|G-U2R1SK#xm(fAOj!_!@Khy}w+zNmXeR1q1Lh^JqNhaK{X zkoh%nD?AHV5A)=dq#G#55ns6dJ^ftOH;~A#)re2ojmR?B5_)BbG1H%yZ@$rdhe)~W zufgb<&$f`<&l(_A!Y)R-VnyNc1gTq|c*cBoP?V<%5S!|N z{*JugL}KH;Io@YcRa-{Ev6{SZCLt|+QUtY}SjEAm!xZV$Kt3(>ruJZ*F#vWM+QW`M zxkFBg=D^e875t-Q>Oblp&Lj$tmd`E7>P1rtX&lHP!m{y4a zjlkKTcmnavIC=nrz-BD{fMo;%n;cm^ZZ}g0hJ{VXM0y>w4~KWM?HOCsXiIeEUp4>R ziuu0rtm1pc!|LBZ>h+KM%Y16YhDFa^?2&^{vrjBI-x<~m<(IV%V?PtK0DW?<5%P3+ z_lDOsJQ-L-K3#=RjPv+D7{hdc7RXsLe?jcz@Z|4tc-I{Hm1shgI8YljVnwcKg(6eo zbxBSTTjXQ3PmHi6tv%$noxB1i&SjN7v93eDc zgQufnk5OONjIC`~Hr;TDJrI+}s|G^7Es4MkA82f%cq*$9{^6Ki^iU7_O)6V)jdt?m z%Cy_r*bI*<*Ml6sQks^zU|>t{PsR+*=;LE#*+wgoVGtQ7a5d8D<;rHkH_*;U@*V&` zoY9WjEgKO1=IX>L{q24}phJ6$shrGyN9EX!3pooT=veb1Yr#n#-`=q*g7=~(_7}yc z&Z378-fK=yK?^v87iv5(o5d2bKyWqD5AF!+uJfX9HD_@4KiT^!xi|Wp#i=A^Wr4jr zASA4}kb_2(v4glDd(m;LFJ%l>`qqx34g(%<8U0imBN-NRhkCRi- zsLUlS&bkvaD-g2Va^i~iqJ1&9G*0VUR|I&JwQlyc{Ti1iXV+zRFS3QZgbjhzu@qz{ z`^?pAdWT#M>kqt1SZ{pi>q)^Lz30z?_Kh zGOFm(VObAH^o@}2*YQMfb#zOjI}Ky$%20MGnA@MDFUE75eI$&F`-YCfZ~T$|!jccZ zVFsf|92^|_1TE6F1@7)S{SCVd z&g5OZw|W@M(Uyg(2=i> zSMx6X&zc3E?UO-{ zcYiP12e$5x1&cFdvrv^thP@(=?gm0ODs3bCl&5eq`Df_o7-2}~K12ozb95;DghZYX z2+2_05f%Rjn*4y}jYp9vElA1ei2u1Bg!OA79mnS!e|u0khx~w5s?W-AfQcS#{-#cn ztb!whHf7R;(;&#VC7Xh{Vf6Ax55S9-n1RMeA?%=4O^ra-;Td11QI@u4#?sPb?u=71 zL>>R3mimn7LS&K{wY#D9N%4BUk>p_~+k+4}#z-3W8gj`}+(?6LvZxKT)`4Hr((9jN zjlsdU;BRbf#tI(I*@sOL5n*S0xC;{));>fskoacZi35t@@jv?@d*ayB4#uZ*lKY{8T^5hc3+?Q0iC1g7}d1p`6t2A zUrN7cA`GrlHRu58;cfp}~{vp;j_MofuKAFYA*L7{+Dx^K%?W2$} zmo2BvJi@!+Zshir)|OS>BQ9(*Kf(Dv$muVenI{H82D$SFGq64ez0z9*o(&7I+i5ON zzhE8FY+#R&2CM=0H#mkpfR_zSPwz3}iS2rIc82}T;QpT$bB(E!D-fK?8uGmSq#yOf zj;X826Z5otd7PFeI4wE4N&Per$jh}-|97kUk1JxZU!Of8EqX%xX@~0e&o#CDJM|u? z?rjpHT%+B%vFV90qj#UywVNcDPf1$WRsD3M^SpwBt28%kx-Nx+r;|I;z;TL8Qp5h5 zpr`Q#wWgp*Q493G4^PF0VR^v?H=l&LoyDq7FM=awH&RpFv_t~&A?i|KkMJBEyNuCP~F8Lt75#(Wnk^i^|K)Lie47WkDox+~91O^_8L#A?6R4<|hYDzUT* zKeMx~oi|4O)3HW8-~w)z7{bg@P0X;coKS&yVR#rWGso#YD!vD z_*?1Ea+W{!;H8xI$tLAqQUNoAwOVG0qIi(Fi&#(G%B5$DVqF+cX>caoV@*`q-tN)5001Y6^| z-|JK7zLJLxCa{0b`u2+arJj9!zu)siR?$^`ml@cjR*xuYk-j{8!oxGo3GF;HD)D>{ z57A)GCt?PS+!29(Z$I;a`#>^qXUq(Y5#LK1F`}r|g0A+Ma*r#`8NuuWtbb#JL>tr> z+gct14iro>BX46no|vlVV|AE#|Y0mrt8MX@97 zJ%IPxygNMiE`~#AX8-p33^ej^lYfTxVxAlnND<4{T*RD*<_HIUDwG-f_swRGaZYud zGhv)ge+B2LVpV+JtPym!=K;Hrlb3ng-paR{nzQRou}$Lhf=2fk9v9c`A_3Qd5KHAu zrsa3+L`DdoVO^C3dvb{qvG$CfXjRfFvIt&lIEVhIXswVt$#ao+ zGxS_medsgqC41$grt*ho-OBsZr4akUoFCD)yu$g2$h(YXlwN=s;cJWkv*yVu64nGr zr)xzAZKN8!c60VRsL3g9{O;3{U27?=8|Y|B{eVVwTNV-Y9-_ko%28)6gZj+F_?loxJu?Pi7Sa|U~cRmrtT=Mpn;a`)b5rhzfWQKuiJ;$u20Yv+_~q2qexJdU*u*2X4_ z9^UTnU=KW5AN24xrk;`Ab+UPVQ2o^Ci#((IEz`YDX`h94$hufo5v7EK-qv2bawi9X z&#@t{N;4V>F)!?CBvR^$h++26CTvT5e|^0eed05c+1(>}f@$kdI4c4l7utrO&tw-5 zN!U0$x_eSM*}Z&fd08!q1wkO?0);IstN3Dz$l(sECYr0|E_s01wP&4CW(Cd`$pI*Yq z8FEgLsp{U|K2I&V$h`caWKj6gzGq5P6bp9^ogYBT9{Z`_sKqtsiw00dgW%c~dQfb=DnhCp(lhMd?z{g$N zHtD+7LA|C9{AKbe{py=e#$nJ9B+{WyZ3(CeWX9X-3&;#g>v?M^8KWP?T zCG2Nwwl0s>Q8!|W_(mLMr8^H@l;XXO^6@-Wy|Y`Naq0=X+5J+Yzw<`zqbYGQXC1f) zD%Dc!)Jd~HzTym3#*GJYiB52)f;~_Vb~ij`O_(-y>{B?3GY-Pe7~ZR1SIbT^C!HU# zRu6N$#3@mSG4yE< z5VJio=m=IHjYBM8gQNo#MnILzmh0~TQcdl(}>^!&#dyY5)ec-7!0>|M2Gl%r?ReJ^ z!U`NP7hKS%-TRS2of$wBm3#v70bDKkQiCQOD~~-hH2WH1GXL6tf~OFfeZ9eJmL8Tf z-nrOs|2P%(`CiY1*_%!e2) zGk#EYC)>nL#})Z_M6&%6;TO(m+#xGwr{cF4^!`5S&X;xdI^F4cML^Ezljo#cSLo9j zVVbB`f$#8H(_MwR;c2zzUb^U?@5~VzAwiJ2wzuzfu8|Yrof8=*?5&H^Bb=^8UyR6$ zi5Z_!29>kIU()<$M2CZ-0@+ic!yarj(7)4Fpmb;i?MmIyCxze%e25|aa?P3T)mhuF zU$(%5XamqNdLcD%BG`KO_TOim6&M`NN|{&V%y=U(GAM{Am@~uTr2hamKBsztCb8v) z*39VXsOCU@;vq>V=0??V*v^(<<*CQ4hp)FBdvF$m#ommZA4ct6nCN`8r!446WR>_? z&^4(VXVN+2%buVQ2JIi{3+~&ef9@?qUXr~5<=Nsx_m9j2`;kVkAy0`8Htvi{hg@b< zpDt;Nux`kZ{(G7Z;9qcVqGIC|b3$oNd;gZ)a=BT5$C;38Z-@tor1w8B_>i@(@gdnB zP_Az#_KS4A1mxi1bsoLebl^Lrd(&Op@zMA@E!13>AqkES9I9^_o)vYvN~VG zO6(Qq;*hyh^P06_pX4J(#3)nZ;kUc27zQ3=pQS>^1v8E83s>Zg*Qu6E-KU0>?VnSB zCDKskR&r@nRoj0PyT+D}vjynC1v-G+LN1vyH?$kTOnvrpQifg@>?M4iSL89r?}qIh zKIX94i2uYKk;bF$-ab2~=8e9S=Q+bWe8mwZ>G$js$w>P(uC;gC_@2uCh&9_fw~oL| z9(Hf&M!2D$LbYGeHpd5gHr^O8r!8hG0F5aeXXF!S;n_o+dd-%Xy`9jPZ*nz0i#(YG zssFB?ke)&;Q%2~n@uR8E4h?TsdpDs6K~-g6e5l^G6Z@%At~@q!$cg9^T)qcyP=#=F zHV(*%y6kp3;bMJ$+3?q>ndCY_RXk*%{;y;Qpy`KJtj%>n0W{)ap%~{nmr^8r0vUI} z-oW|`Z+B82I~7Z9)Cd^2BUjJ|-m)e`&JaP(buMEH?r##FlkwbD#vaD|1p4jk{#7>5 zn+K5^@FKhI9jzs^d0iSW|KZs1Pp;o;P@M#xyL{YRz(wX^n6L`IvRGQmxbA z+7^zpPR<;_g_+Z4X^l0FEqYM1p}vC{lQD@`7q3$3i(yV*Xq;r)Q8AwWBQSY-MTX`c z^4F^r-nTB^8%05LDH7-1S$*DJb9Q3vKD>JHF1Aoz>`>=ko8|6BGW39P5e+DLq`uHQ4~M@-nyjLsP7-R?YiH<228rSznMe7tAf zhaxQd{y79~(U|rc5E1qI;1}~8GX_X5=CpQidX9N^W>uv}?={^Kk0V+*wWM{jvuCp2 zzDp}8<}QL!-xe8C`28|+&dHh})Tl>+6HYKAYZgPHjReGvQYV&^j^U8U~y@t9#cM+x6!r5ZfK#?`}?VT|>a!Cx{2%+vR?dne| zh1+=@_B!)DkRK}*BTFh;2O@`<4fFj(x|hEr&O(QJucIYXazy5C2LehSFrs6(M%Iq` z9=RQoAxH6Hqjli!*CcPK0;#K(+n!YD#k`P~(Y1mVj`@{x>_e?Jh{CANnN_dJyBoE| zykBCT$mFty0bhoHEOUeGSqk3$uo*8qFXv{Ci}CDL3;}QQ1#vKI=v{_qnz5lLFE%z7 zk}PT1<)5f!b)QOVMn01y&NBpA1n($9F|BC+}BQ`0d#>gH93mZ||=52xG0fqnpdBc|{zp06}$E;cn(g z#~M~4$Kw09W5r0FGP8x(@#Jwj%t*r>4RTMLGsBBq_RB4`qa$OPCzSGhsm5%Xd%4;9 zi&WW!I;)_)s~iM2gs5nW8tlKzgRsz=T)N28IKmTUE%?r%Dxk$HmUc4WV}PXfE1_utWd z`9_Qg3o6#onXl}l=rnd~ZZ*&8e$!)z-oDn9 z3d(!5)(C-Z(D2A*G)m0Ll;bYQ_WV5eQop4i<0(-EQ3O9L>i0^G^zI#=LSjW_Jv_n4 zV?@xzGy9}Lxp=yHr{;rlUhiooK#*J&{Fl5Ajz`vXBdsyE%oQ!OobwLWjvwm@jOF9S ze^%@yOE`1CYrxvLEBC=IttLpqozaYz$#jXiecQrobp@SejI&0_9GT?5pYJKAvgbC* z8O6PS?wOVI%eq2y64qAOH`d_rz58x$Zt~VRH;fDpyrM5iGSXiKSr@q8bo=ccyarzU zsNpeWq<2JnZ-vf8Vo?cF)*P0&FRrt^NJ+)6L4Ne_nnZlBxGRgwiZs0G z(cd#{1Mi?RR%nio9DF!?w70B3)9j!;PRBXK=z*P@H_^6{5Mbk=qoHQ87MHHQqD#xk-*- zk5I8xb3&{`+yP26FJdo_d2%}8ttJZ7_JGzgH`h_w@AH~ud-^7(7QLwvMNJ!g3x(}# zvexL+P}YW^Vk|lM9iIL>;rx4{ZSC1|ET=uksU{Dz{WPwvJ-pR&`D!8|u|TP)|C7t4&O=6}DrOGKNo28Of#*>hz5(|6OSF=tfo=_XF|tfcI= z1~HzKe{D*A2FhNj-sS9h`UFq)j*A+I)Bv28vQGcj=wC`lBuUJ>T}5A0JnB#AP!1|( zRcfBEW90pFdr0va&VZ#-14MjWGb^7%Cxcl3d=CBsdqX%qn^Q-uqjL9#7rEwOx*l+1 z43cV{=1-p#_m=5?zvk$aQ2m`df~VO1+zXCHYP4&LOMfr?X)HP1xgfY7DaU$*=QuQ1 z)Pd#rhN2)y%#52vr%7mo3S5LIz6a(v;Iajf+OoFLz(N*SA852t+|XF znGEtI4jaFRzeillIAHjiqzU&X8xsrGy%U%X9$5PFaUN4>rkDlN25%ryqpx)x8ZP}@ zAp_FdXZO;{6916x_4YH3s_h$K7rL`co7Qa`yTqv7k<4Z8;ZKM-@j9JBK}S^n-=H7o z(9km&RF3X4n(XVA4waw_m@+CJvBBFE;@-Bxeb4ZTWc)X(!_xm6-o&>Wsyi0un3&@( z?sH)Lkbe65Oxo}Sv}-6#Wou3(n7a*wCCDF}3l;rDds?Z!2A7n6Tl)^UqkE=D%m7IQ zmsoD{DYRin!GY{mbB_Q1Nbkan!C!Ts0G?_u4!HyARpq^iGnCK0s;l@6%90tt=y__1 zVLf8xM7@UT$&6jZ?^=7M#B1xWKItF#iO2;bOTA)E!U&-eqa+8x`D*-qz0yc=ulOAr z%9_Y~mAy!R6rRG}z2k`=u&b%zvusSSG7^xhK2f$46#Z}di%~}0&rxT`4$6}P@Jd;; zaV?xsdiRi2j*oB+Gs1Tc-xH&8^e4IngoG)*XIKHQv+UPW;5cM?MD9l;vo;0;dy>hG zkK;sxGpR|99;(s%AgxvWnB>%7&{eJq#e$_z-Hftu+IK(GShOX|!@}*udAz?=aiF?W z67SZiy2NU^`r|2(T|(*M#Ody2)bolw@W`eopPDRV<5aq61_ctedj8S<0TfU5FjdG@ zIFuDc)FQ_jRn+k=Z}}zYpNpySxx-Wcb$Kt10CF~FKpKd%ut7Q+A+%wh0U+mp-hXi;pJNe&AkM&EXqmSf=^3)m8Vh~p{z$BbHAn50FEdk+q*y4<{Y`ue z=Dw-tqvuMw#i#=NMGioogp>NIPr{}bqC{OrA#~$%j4oc4*MJ6Vv|`J|dF4wMQK^ZY z;Tb!Ek4|vJ&zT^`53zsnhJwD!PGWGbaR8pCuy=UwS536PTU}gxPwfvz#$VU|@CrLt zO)k>Vi7TVMd+8ydN|>J4^cTQKQ16mJq^uPlJ0j%fytEMFn%cj*wAp;xo=C`6RDK;!P9IqT66tAM!C^RqyozX3NGJyx&8_o<>JlD?lS+OCUk^ZOj|rk3A1TCw4t{HJMF} zDWYqU%gEV(H-#Or$K10A?^@a;%za9n$G^yfFTG^oKagmBvV-&GvGZ%(@EcvZQa|A{ zcNC>t8&PJo`tCz@K69;ScuW?@MoHTO zT%$Rx8uVi=jTKxFbb%{5bJU)AaLDB*p6191m6b7O``GL182Ui|t-iA`<9|dtd5czm zljuoR?*+}`={w^uIs9_7%h*M+A7U3XK73KEHr!hyo^}+8t8IaUQ`iN@sj-Xkg@tb= z5igR$F-P{Q5uCgGSQ;UbE#tlZRJbx8?3>K>Obwe|vAJT2PzHO?6%*x1kg-#WBI6xp zz3^ACPDnA=Fd#wk_JMuG(H%C34_;AT!%0!&uYA>qP8|{$NWMZNBgO`!?T~5xkO<;;EeI9kG(!8AfnK_eXon_TKS| zI5r!+>#>(BPc+c62jud??6zH6srB;k91_L1i_Yui(Ws?G%rbr>dBcx$HzQuPKqG!c zJoAM9trM3#rr-O-6`OlGVZI}tUZ4>_FRidyd*XmRXfu*-+coCs0up1af8Q&OS1-_r zS85MFr=7>HKCd4r{ZKEB87XqOjMU*(if(4e#?Ryp=(j_xGukIxhxWBs?4qcJMV6j0 zy8O^}2LBs%vz%Y;zo-%99Xe$2DgF7U^&1Z!em^{+V3Xszj-FQdW}-XiOjGkYQ%F`$ zyqZxi$xI`&?Z@Hl=~4zDi9P$iT@H1yQqUE67|_3{9f|JsJYov1hs*dk$ZGXv5W)BT@__k>TkNak~M{1 zh1Sl{K*NERxeCvq<6PK!ncGDS*jh4ma(s^`pv{fB^S%osSI?=3#S;yNS*QKJNfcgv z=M03PQ~kT#N%N%|m5;$x0RJu)zW-)VfX5uQMw4cuAd_pBG zBX|y(M1%lIMK)CMY0!%M7@u;^#lp~th{G<)$#v zGnhrh5^JmP4aq1d@`F~HYt0|tKekq5c0qTram0IX>zn8TUx~j14=Z+gTY@YMHMWXl zHc3i6B7VW4PvdkG9yw~l$rqk!?5~;GaeD93 zV{S%~L;A*y(oZ2{kSxtE8_s7udA61nIEqSUdW()Dw06`4_XjC81wwoyA^=SPA(O?n23x=_SkF zCs`K)rO-Q2$#H~?GI`%bukiATw!zsg<>|Mq6Fi5+as1ewO1zHoY0Bm99nsg%-V)96)1ad=->aWefuN5y9u(rmM81jZ zAJ<5;!#PF!b9uv2`Tgax zxA1wrpdYUVcjbgj`sN+ew_nj;*fN}1%gLqe3htbzfR^@2DgT-K-hx^`G%GTiUJ*6% z$;Z}|tQy+VQscXU-5NajuYsmmu+->ntZ2##(eE;Qn8sQy9JNics6tty?wEJSuS;Zq zdY9mtM0OBc``6FKo8_fDDz1E46tBBn-W@MbHT&TuaXwuCqVC8JeL=5EF6S(R@0th; z@-g#AmMBAHnXm&;%W_^{Jh@zHBM*T}@nqT6)S)t20%r?nQ3w!CF2Ph%Df^W;s^H+X^{(o3ai zkBM$Dob&VX0ePxH)apGdAMMF%G`WKHSm37aNmdK9y61()9~CCwqfuRw z96c!sn||XG@w9hXiEVP%rr*5V-^xhUl9Vh9tj)k4HIA~j%6lbl$2y=#NExBwKDn>U zahWga&)kRB>_Gx8U(+49D>gpe2kb$qB?|8$PdJ(7WBm^v0iAr?T%GwE8MnvZa$R>0 zI~!Zzs=hHdD=WEtnbrt|u~i6Rt0eKXY-9RRgI2ezuQR=x$=+FehnvcE3ycQcIRz=~ zPCBucwEEY+hW)r1%o%ci^p2Pmh6dfyJpim2C*P29d-2X{lolGjoQ;|L)&mes0J z#}kDdS|}OxxVYzK`7@stCmqxeF|q@lXdZHYwdB;aKHDM7eWy5Uy5X>Agid$qy~C0e z8};oin&ojx50LYDU2{_JoN7f2r^TtI%uOjbjuJ?myk_C3ut9M$`Yf)}m><>n_i1-M z)){p-$~j-U1Qp8N>9esw7Wk>k{rL0C$!t8mMn3 zORnY=`$4Hg!|MPxpei^1FKc}kYE7tPAOb!uANUr{?2@qdaGcirEN2wscV(L~hdnWP zLEZ6_Ic3fZ77dK-%F{nM4}O(2;Wl}uFKADk(Jt63>Ti}dKdU`W<;6xx8Z_P(&1JiG%SHXY zL!Yja-Y9o?^4U^d|5DLE2)cq^sj##+7;np$cYH3+R1e?wXH8rOu7vYGX>y-z&3-Nf z%L&|$ruxL)KO69PhR0^Evh}=n&=yJ4dIB)vFCr0((__HkE3P+b82B9|Gf1?#!g zVq_?mcKlMEY(|}kvygL*?{z1QTjf5Ty-IR=m3G=uMRK<_nM#|qs!xeKR%qv~5+6Jz z{c=L@)!vD&R4Fs2u@Ao1O4D;3iXdgM3feXJ_bRuyi1&_b#GF7zobr-ZY;_B@%nh?F z-29RB#22iqnD?ui_v^E$?S`x$#}p%P0*lGE?R8y;t&b<>-u8DJA*_{7J1?s25QWx= zR!?d*PtFP3-VHtKOgMTKB)50@gBVQ2?%$M`7XLMUwS49){ssEYr-f(<=vonwFJ}rZ z40R4lnmwtVeOeTHN_2tSADS?ArpHjnv*k<-v=NbYOGtNLqkef|=Dt=E9NCU{W3w_5 zx9R7F*3Mxk)%szwk|QgokeCZI&-KDZFH2MHl17`7y+$;>Eg{zY?DGs9OGbBOyjxCC z)r}q?o@C$Z!q8!lR(X#Q+iJ=0^WySdLR3#L_`GXLkiM6Y0yWyP_n#U>a2S<3vA-8u zPjF((F|GW=+Tq~JgW`S8J|iaLir@!Do1d54%h^X3FT3B-cIW4$kFTVUF{-;AEDU#S z7G<6kP4Hc;lpK7bL4Y-V*8j}(!H0##M@5!%*CT_8zsM1ATSQu+{r`Dcq z`D4-$>03A{N|b)U*R}WIdn)CKKjM+Fr~d1fJp~tVjv@5=Kv(0>z+!Z5 zPwlB&7>+q28L>we$Bcd-lht%kNUHW2rTy#fUi5-vd}wy^i$K2kwnxn}G7rP5eNmW|+($g!d50&(;HAMU?$ z|Bv_6hZMboUkeXJiR(wrF4uwiu?E=du`Z+MJBhX0sd=oIbYG$0+l2%UO4ps~aPUFN z{KLXW8%2Thx^|D~@`U!lGx~p**7=Nd;)_C(GeXLognC4G*(B=i(r$Q2`lHqsiStX2 z#sfv942uu{0DCzkTEw6nSx*ZpDeasf;%meL*%3Y$5bp_f{^R@wbIVpC2lupijBJD# zB=whT)~-n)f5#^&F4z10-0+5c_Cz9?mn}PIz}s)j*ga$ZHU&(D+KU1fCQraI&#aV< z9u2;`_j=nCzcBmzoa8^}k5h}aPp>ZtA@#?AiP^Fu$Qz%%9?>`Fwz#J(zANxb+O?c{ zL*AfqKi_el;1A-FzSVbr%(t?Yhfbw*4#^R5F(**&(;AW+M}M2liYr$wP&pjdU!_sg z(w!2^r;xWo_ZW9Z#LKr#d_xz4gL;=IlVRXm7o-l|TTbYIDp_2!LT?wO7rAC9_3fx& zDaV;RAodC|TeQD3I_*uMb_HH&`)k4XoZ`p{Th3FXQU)sk{&w{ZJA<=S&GpR3l5k2g z;GF1bDT>4_$91>#3#q-ZBMJ)p?BjAR(qCEIU2rP7KS*Wxu5XpYUrLvWQ=-PQMr#bu zKQtOzj@&zNiX}jJb8E?t4nz);E!rLrl`&L^*5eB5#mMIB$z3DfI^H0AY~FS9Ydb`G%j75m2Lm5-zK-RxDO@ZOWd_s;!Ara0NpmQ(m+u(RB!A6e4>-_bhyc$0)F4?7>s+$U7Tb1V)6g7#GV;P@{rZ`T))xU zBW+$JLv_FY(H-`9g~G}wmGUA_yqlZHclZfp$#eZRc#QT?pEub&1) zHLz8kDGM)waNDP%dxXSQ=}!+8=zgls6r((HL5Ck&oia>9nypzaQ&l#)^j;i;316zYsM(m`1D~R)Y;WOJ-!{2RNj>#G3gT6E9qxV)n|B{P^_r?B{3);U}G3;4u z+^`|6g~=gAbAouNwW1OoS;MzW=|`2zIeo^yN9I!VYRhR#9OH@|uqd@kNF(lbrul?Q zn_5>S7j>!hg|r^leg%a%R|KgLv~xE)x{a<75??MPARp@KW{<_)33H``gtd4F;|;~+2DUi>h*LrZDMuDU5nMlU4i zlY*Q;5T)k_4CUxQ)qasN@9dGxh_*h$9&H|57I{p-mZWTUU=7&m{PgQ%If`Z*Gx1eMG*z zqq5?=zL8O*`cI-vWS?RK;KPsV24rS*V0=saj~&SMQT1!jr*)n?xUny(toT&_d~PS# z+-#^f83gjOyqCMh-^BIkNp(Peko6sT(vOL1iRL|nrTdcpQ3cBH#IW8eSTu*5&#dv- z6}6u*_eJ=oM$tb|4!t_+jt<0z-)eZZoii09#qalmM#xw}lVrBjA(hwGM3?kwt%25R z-_q3tKX-V*&r1$lKcAN#Mn<5q(MUOGv=bDGSyPG4SvIi)N*UlhG5g3s&-|3TpQ?!L z&rCN(5I?@LW%5fy2R;RtprSy2(f7ytnrIl(z_J92u}|Ssc=S`<*{Hzx=bk>_ zAtH-yn!m05EJx(}I4*c?OP0VlPNYEim@0x{7nW;T-q}$&N3>Yi~=}nXYpg zYhcExF^zqXJiXEMNTs6+&*aoG6KSY0I^KR6(=j z&**7_k|x z;WcyqmvccuZ*zOvWV8oz@+nblt74<{F4`|lI=9@hd&hNk?pRtjP}(Q4Ao<9UjE>~& z8}dTh-u3W`5YyrGGV}oPF|2`e;u1@W)8Y|ZYxXfB6Oi(jSyTE9?ycSD{nZO3EOAcp6d-+c56JZ)7BArrF{-DL&=%?&%bCXuu~MBT3r{ zyED5kOzED{A=<4I?S=ds?%h?>HTaeN>~D;00`S z^uIljiC$P0{DJ5SEO%=7u>0vwVZOL1DiHsIxd2cjXQnA~!EUKJJN)jjkL{xB%Na*#Cq=&C-FWAriz4W&&2l7pj)=2Y|NzOmv zL_9D6U0dDnx%31uQun#GUmOibovaZ>dH|p_f4O50cdYxrPU&n#a!5R);W@^7GJ_k+ zHbJ)jFk5qs--^m3X6upuw0L=QvW9J0*NgEf_#4XvUz5(>5EsQa;Dwvg(bm^^<=a(e z(G7v z)kgZPJn>>@fPJAS+?~u|W^rak%rHFyJQ@1XHP4uf&sgP8^d5T|PRaAhd{zjv>6=IF zF?!{P2MW&cUjAOY^0wBJ-%#%B+4Ixgr>}2KLlz(j{$Agt8q{~gX8IfP+V|DUdAGi! zcX{H_PPcUQoXxl8TKDZ_^K5sgp`F@(5_Vr#y76x5nSlzNqSsHy&xLlOP;!~)Vy)el zT#ga=+{%>9a7;)X_}?5DoWKbQN!@O<~XrVb;6FUY;!c0?Ufq5t(|eTMw`T0cGqJak)}3=*dfq^z|cC#VA_ zvFG9hAnYd7i>f~QeT9BZDspc6kd*@taVNM>HK#TX;NG>a?xQhXIxQpmQO#THGfvzD@VhN!3;iy2Q~JGXE?~}cltDD-hL_f%O z_&Ro2@UDBW#CUv88kh`?;@nLn5$D|)3FJvzeS0qG#GXl-hUTY_7B~(M5?6r1hNMw< ze}?qtj0CT8R4B6FSo05bN9!YcU9;z~x-3IWgo4hAeHJ_Oick%m>~g<2a@6I4oMTA6 z|8)sE3fz`>%~Cuy6T8&tl2!Ofn8aE$U(IdCJjo{=T3*m6)+ehWXOYL5~A@ zZAlcl8H_gTbILOulQyY9EJ-+$D~`;1;!yXUT5+DN0& zciF86zbA6K{1#lmoIG0gm`_l{>f~M56L~K~7qs2&hC9D%c!#?o->>QVzgX0d3c{ML zeG%o(3~5JXsC=LOWlL!?o|;GGnK`7GJh8XOWs^Rm_~G1o*{qc1N*ATG`p$E*{nsky zIHPFElzah4W$mufU02C2epIjPY{%MD6Z{*RfLixHiFG$|p3*}@1U&6^{1w>p)g11*CP1&XI%S%mWvl2 z*E}DV7q2^0_f&6>Iy8LDoZq>!iQVaPl5zvYj@}4=Ez+|eu|!;aVOF?3UrtDPSRS^` znlHXG#~jkzM&H-<8fnZjB~#4NI3{*;&KD`UkVvM!v!9pp52=An#K!}|1Op=7!THA2 zW&8)Zj-Dc~lJ9)iT*JGZ!oWLxXH*qVelICfa)4ix6A5CxCi%%qgFCnXKf-7$$Vf7s|5P#LG~qUnEJ{5$=H=JJ{Kpn=eq;8>p8)|H9q zjMs<0VXG1($`x@k;a}YGh;}K$JAGA)VPV^Mg*|w=p#j&cb>}w@A8DTl}oN+UKQ>wrU?f*Gt8iRjpTDAOC(6?{dW) zH0!gC{R3_f@oZHRE%sVS0->5u%e}2c3JF0 z3ps+l%^58CTizTa4d6Dh@N*{btMv2BnJ zmY=ufl|fe7$6$*rP;l20ukX;7FSqoZ(mtU_BhnX-8#R7NZvJLewxQ_9Po*m-MH)E| zd6t7_u^QMOKCu+L(v>#0M`C{cQR&R5sQV3+*g3K+sT9BqgVaJw4ShE#Zt0&VO2ZA| zjYThn^<%&2U-ftcVwP!D$9!{^wr@>MC`lbrsXamqq|G#Le0ZB~>Q3PiMNiz64viHl zM{e6{)Joe=gWZqi#=Pgg_WxldO*q2@P5})d3E>=aJK^Na%!vL&NUHFrl->;MK6o2j zey+3&@9L68eS6M3!F~MjTk~Xm@@Q=PA_F6)Y|6EcS8=))C=$NGp2o{!|FmTmnxB#5 z@!-@@dyBgB3y)#ML-0mg;>T{McP-T!$P)IyWlA?rRNmWHdPev>u;`3+mdNfxhP>LW z3|A198_nZoRl6yeIU}L1KADviXvU8VUkcxij?AWU`lce{fi(Ma)ls zn4LGz0o~2T5=;ybosL(^GM`pn@Crrc>8yENIT$C^=@_d9i}yicfo-zbHwhJN)~hXw zMw8J>7wacw^N~@!Nt$+pY@%JlVykr3I=#l;$L?RFcaO`q=T6h&<8|^P^y}*If7~tY z$WEHe+`}qN8jS9PN`A^J&G%8^%ZsvcAJNFWUC!oD88R)%5V#-;)hEq&`KrsM3+25h z6X)QfKiBH5(*K;;{^wd#keD@=b>fvCKYfgn-?;a^?u7A#g>8pXR z>n~1g?mP7@o=bK|v{p*fpAP1LrqHyU8jJu(A z@wxl-K4b6bBH{RZL}P~hu^BH7E6>@2KZvh$4nf(p|5J}gq~4wnw43u0>;qs-c%7LM zu}W|zqXscDpU|5h>D|b}c~4i7kMw>MsrJqYWMd6M?r6OFy1BBuuew?^P)BlD?CRjO zy-hdKsg7Odx*z;P|F69IVS9v?1CjtU{@;z3o`jU%C>ga&JL{nI79C{INE>xK3_c{u zx=o)S*Jo6dp{@4o?Y)no@8! z>-v^f(zXB|H&(e_!5g_`cdM{c9Nzw|ft0-LqobR)jEevNmNdm7ZqT@|~jl-pB_ z{z<%0%0eXEo7(jtJZRYd94alOBu}5DRR^FXXUoF9kXVEGvSmqZhs%81`3sa|rYU!#HgXXzP5B`Dos z@Uf)5^2Or+tQB!*S$Ci!w>;!s7oP~9g915Lp4C{N`k0iU@;mgNHD-DR(#}c0 zPiY;6?>$D$-|$&zy7c?p3mr`Rs6cpqRs#pc%Y6u^J9~;u2=Cdx>umFuu@vK=G7lv2 zL1{(WTjhKA`FTTL^n2vlGo=-|O8#1B^@BmM!)@v33ispi;Ig^s=Y{p+Uy`2U#Ixrl zkB><@zo;416{)dzlM?Cu<)re}+R1k_{=3y2n=~Fy<$6xo{T1nsi~4D6j)lh?p*dpq z{7wqMS4hsU8h;SD7@8R4{v0%c&(;Y;?GbHw%}K%wPlGxiAT8tE^Fa~sOd^HpZL!tq zN>OtE_}iKb?~DINkD7N<(hTWU+a^Z1-plMXo{7w~4+?2Yg%Q5_kXi9J^0d^8=y+r& z@{~BN>!IT6{`GI$)a|jSmOx5{N8Ob0wU%hMP~us5FT=VAzcbPYHMdpz37acv9vnG! z$BK*H$7$fUbR%1_?_1&J!AkKu*vsy_^jr6H%|Lwo&Io2COR%dCjkTTYY*6z1hdAIy zlVbyQekUs7*)RuKVw8*MeL8~Si7=M@ocgd_V1>o{#yGuIg0h>YSznI ztE|z0f4&wCefl_eBBlvX<754s#!@8f8?KBjtiBboZe_$^k?`t|&KInymb)h~AeJw^ z3B%HyYj!KwQy)%VHZvmg@OAAD`%;N048^%~4E5O9XWpN5k7F+wN7}0jwNf*u-(6ajNkq*rbIwpTPI#X8HdhNNY^q^4NLWVr? z3^E-<9ysFR?vgdiOG?xjg*q|nozIVqAms@0dn4J%GO)xf*NvwT0R!(ko(F!qF}r7= zB0D8&{gWo~JvidBt}uc__xU^adk}YlLhwp_1IpM}a$WolE_Lh--y9yp?yd+am)v8E zqG$n-vwo)395dwMBl1cBhj0`dn&UG%ioFy`r^8F6`E> zH9ZLmoe^H&FX|kW2WE?SgKlMtgSER{Wpmqq*yCSa3P-sX{xy-tZ}BUAwY5yv|015f5Vi(Fw&E@HOdq z@T+yV@k5Clq5Z3}^Ss*p1)g+;foG7uv&fNf<^w3Z9INdh5EHd8?+XWoe9=KFMQinW?~uGA4)FRRlUw#%pHHPANsmakp_%pM<`bXiLp+VfC=Xu!ZVw`B6`Xr2bO7 zEPdWJx{avZTs;xH#Q#TxZs>jCJepFHg$zU5UAWOy%r|J2&q}+V6(78!{Fb`zC1pZ(G3$=MmIsrS z2CoRW?-BQMe%&!)imgHxLnmsFU%ScBb(JXjqG-BW$cGLv)KTRLF{Q+MO?EK;|2kR& z$GNhTQzFH%dhQo=| zU7j6Jcnx^pbyRcFRSO%B*e-iyvuu-RWxa7q>(k=dq;4%)n9()K-2cD2Gx^Q(%F;Mn zOTFuDtA(mI^ujSVcp%Ckz|5E-5KLf!h|LttXuuG)YEe>klvOWE>2#+eMNx*1B2pFA zBEzavy-7<^{~M{KTI%{2`uV+&Pwu_%cfToo23nTE0o_L_31v|!@?ZRej8YFUdrQ2#)TlGh^D#w5R{cys&G!~ zr>Pz$!&~E_#G5&u0t-FQ$=g&@ zIZ*m%gKjSyrVBFcM9FLKG;v`t1d%K3nC-sNDtQIh)|%pEJ$yUd6D2ooAmy|K8<10s(nAV^3Ns6e}P3pTf(8n)y8IZiU;3$=g*Qj>aJoF zF>CEt($dV$qK+1=$HpC~P6a6QwjBH9D@D7Isb^*1s>wrj=RsguNmMX?#ro1C|-C0vD8?ZE)FW zo^nc>b+@#_4&Bq5cxktuxcdfs@GUwZGNsYSQQA{1P`Bx9!9#;maZb;-QwV-ew(`DE zz&7!EH?J1%jvaw;O6q~=ym?UBH|w@Cd1ido{kYr!=Kyzs7rd|3a^i>tetgJJjy6Vf zFWbdE#AO$C=2@Z5Y3c5CZn!)Amv%Q0R{BlZ7h)WqQtB8*sfB9tk?a%M9nQp@DDsiq z`$tWtwf)!Hm@CB!f~pad0;jm=l75V`^K-NKuTHnbC($c$S`^tSNqR{-=7?x=P@k=B zSg*vSo6Mn?NJQng0wjjc~cy_Ag^zuXQiep=UnDND(%_MHH4q4w32NkKmDyROY$i5S9Wv; zkI~U!I1{V%>k39AZphD(u^`X=VkL*0Y#jQ4N!V1|vAX~*3I^%^7oD%>35?8)8~K>L zE+`9$iCJCctCo|*`5opR;itfF;IcYTurHO(J)S0hU1)~cpebh>lc@6@gX2wfX}rOi zCL&y!8{{9?_I6^@kyr)P&X=hFNd2R@Mnxg4ci+{at zV{Bc837pC}5wEVz*dfoQ1n_2H^{FC(oQR zJH2!fK0i_c|8N>K4>2cCih$RxQYO%T>gL>Yv3-0~d}-WXk8$ILVb!Q?jH$Sm(iBsIx8Zch z@!n{pc8jV>nNmWpTlkn!4QJcPPM18Y^vz2&<1y$!})rF2<)kZZCIgmQ05b96gVSV=#7Hv|Ooao(Gb zS$nqaZL@9JpsEMd+ujY6pK3yx|6{tPPCU%cmSrKAZ7utrc;{@BiLi$e^N;*l_gm_Q z!_dJSb;5qq-?@(h9clds-bd1?si#++e)iH6;b)gcBX;a{yJPeplZwHX?#xE>TZZbm zbhPwX)(PC{-|Y#xF)X-aY@al!6aR(h42_TE(j9>YB*G2$OtQ8^=Lf-Cd-t|zSQs!A z@9d4muBAFzPm&~y;Th^iJyaM+=D@ku=&)uENFH4yrv}B{Aw-1nKjk~s?bSme%G!5w zE>BqD=i90J7Vl$)-Cby;)w^}zw!@+fdEV=yj=kFx`U?IsUaGe}jw>q1=lHhlg=BIk zJF+GvxpR`;>E>;+k>b*p#|h(qv@29|4$ZRoj&3;3>ksNX&TD;()PB{(DRU}$XP)C~ zuD2sD;#xZDH2P_-I<@9?KK6;Qf$s0d7RLU5?1ix{;))YGJ=lht>&yDC|E_cJ_8*Ws zNBSaOo#;fxr~cc_qIQEIvfx;klQI|Z@>}Y zH}G74PD*EJ%Mz3P(B{EM#Koxz#e>~08f|M~!kjY0c;210ech>7r&76F(lMI}p&u%* zZs_fls4>x?qkfSe{0}l@><0oFBXvk1-bucvsI25kC(k7V34+IoKws9Y-H|+&cpj?^ zA6sg9QsQ0Q-o&~dLz_LP&#*pegU$=tcgOW~cFf;{nu-M`#HTDdp5CL-;BMW6F%DCq_g=0{e8}At>Vtz{G>tUm<7)? zPjW*s>D2v&?rfnVAT(On4j=o z6XM~~?S@rMKTl;5uMFis6W#oG@>h4P36z@bSAHI21Sk|8^3lJYy2_(-jJ_glwI_5F zaWMyQ#`x{uH0R83-r9&8W!4I)+eahHxEvLAsSsY3L|j(P?4IJ;)Z$0v-qRgxmG{HcEVlFbrT;$~N|Hf=DSE4`49Y#yHX`Ff< za(|?pplw=40@FOega;pEOZ9edMesD1wi`55{%;E`E4abfxJ-pp1NC z6i@I+<%rsKGkM-8kPsWzem{o);_fsMCwu0}d%Y{EYoEz~3+xk>)}xUhrpNDFq)Hs zcX#Mk7i5QS2?<}6zeRK)*Hg^qd_3G7d#FKJbYhdS0XvQ6thXeo*BYEZrL&%pR()Mx zX`i(d<&6GT>yjIp1*(lkbK+^~<13O@=D^NLVi$GhPL$s7d~FIP?>pZ`=p5- z{*(T9u956VyXy%J#YUO7O&`s&YIKvELj8MXnVz6u*m)LgdCV^SYMBz9o|8v@?8HvseX4gR3CvmdtlD6Bz z^K&{`!v6$$_});iha1bpr9-;G^~_=|_f-$e)vejYue-W-X_fYBb>^ zddDM|@+9bTS=#oDvL;JC=~6ofv$60nTr>PD6-dbuUA7mxE|6F-oJ3r5 zI4&8KDr>Sr*TvzdCCgidoe#+Nc5b8^EmgM3(&fAn{vkH$Bk>U#7-BMkBuyRiSf0I& zM@8StKPc{-^m0&`S3?Tl9P+h@@$|L>wK&pfcyn4BXjXJTr1xdn#g`P-xlyGN5=eB( z@&3QvjL%L-bLZ1{&falFUF{TgDn4xf5*rD*lR^K=Fjj2P*;l(njR(@mx2xO4{A}l1 z_s8e9t?y{V7*UFR_FK+>Ip+j*+F5}%Zq!$A!Gk$hHyBx}&J@MfrF2Tp%48QJDlL^+!RsJjU8v zHU>j3ohXAEO!v~bP6%)4lCshLW)Hdqy=|XdP~a92`|w z__yI1SO&eTH&unvL5UWRSU0lE7IJE<$e5tlJ)N8w7B-I-V|qCHua6>l8uncTe^=! zvLH8fr{rdtNz$&X>C9z4Udj-ge^y!+o+)Y2DLtNT+HH=@uzYh;Tysm-b)UE&D|=Tw z)EQ%aRBDubnEMhSwB9{7^wgxjW;B(%X5P*EWT=31{r5vzZ16TcD4z*GGs`P_6sXSl zMblgH-ue^=BHDOhP}#ZfkDIT2+2F@tG}U6n4-!&+PMV{$8>q7*r~bt5u~`+B+3!q* z^ueaQ%O;SBdjQ*$j)tlIMW15>z|i;`;9;UjM9ttaV_aw6s9v$n?5wM3caRQRq1CUa z{%z>JqYvP|>(C|RTO9(c82>+9i5$C(Nv@(;)IC`6Me&m3p%` zi?&-gao4=kq-3Uj=lGP4%(tg!#}taBCEIl;j!?iqP_v{=*>wrpzbI)Yrt_-w;1x;! zvUt@QlnLop@32o<6nZn5fj}q5xU3a3S1vRk=W!vTI(`jjVTb_IOPV^A`TlA{1y5lm z8$~<_e)riySht0mm|J#1nz?g&O(}Eui^kLT8HvW*V{A{<`c%_2K595B(USQa^y*vl zZoFP$Zw)&#w(EUGr`{{<%UqMK(yo_;jrK~f9#eMioOJGXeRNb>d0MnSq@Q>od{E~+ zM@~K6m&aa{83`m9o-uaSkPBAvOK^!=q8J)*_d{zMGZBmwY2r%#y2fl5gp)b_W1 zlQZJ2*Th*@MX$@^u4U=5&I-veCuuf5spu6Mg+)S~e5^K^=NF{HnrN+gl%%fliwdW=t6S87+)M;r; zdiCy!+UKP0c8a^NORC3ZQI6{`?$B+#CZ66Yjc`m~W0u!zjb2!;@^vrj?Gj3YrjCk! z+DLt13AV%yMzw8?M(nQ(M^7&%Ht{wq+1{;x=Ou$XCI3{N(gFGNxCu_<6OP)IUj{+1=O*;wMyso{(N*JIU6DPxk70m!vaKNE@z-!)i48t+F20h0uZS zT(B8aQxlp%W1;=wA8=NCE*sXhHcJvIWKu5rlKmf#%aUR@i9elF_H{`g@0a|oO0uYe zIV5_Ki8|Myn-h|@{o(d(pa$bx?FXq8Sc>-l@hSJ)IH^V2#n)U2Vty62Pp98muI zqFH_3k#!yPBoZ+ydbaJs%c2QYL$63PkzJe>9ow-go}e9TzA6r!7tfuOOl}pW4~n{M zyu6}+kINoUHkM_#^xmQ<4#K%Bi$lDRJ?~VW|4MJRp(TwwQam*C|Ire42 zd4C!EtEf3DO7-&&<|S(@I?Ze1yJO;|8`AXjwK2(lS?7hS%*dM7cNXRi>^X?=V} zl-MoKV1oXvByyYRv|BWrlr%01)xN6#=f#7EM5~(iYWE>@az+i;MeM-&?wB+L0yD>K z&b*k_4U{u-QYUolJLONp87Fn(ji}gRLM0u1*TkFCiknkcz9NlyVIZ1Dr{RxdymixS z=s#Od<}&xwUq6ifFhZ$p>#x@vE;}WD+bTZWud_}{v$wSszB};~5Cs|8X<3SSaUZiI z=kz`Zzq#*an|>N?PgdKtr%>RbP(7J1c2fMl`3^BYJp3GefneY|<_A7LJyoj$+a@n_ zuc)<48tJ|yj~dZa`s|80lU*Sf8ohp59D8L5+C)!KH@+#OAojS@w7l>}yHTy1A67?X z!^YkZ>sAhnb6%Aurwj9tr094DAN8y29)yoV#`137n&vWn=*@F4hP%Vdnp3#x$FaX` zpnOe9vc{#W79~4}MUmU$-Ok)qoyVBCw**4J6{$Jd=hWtJY%Rr0EE5ePG7BSwkic~!QOos)JV zn(#m$Mb*`d`r7jil4PdroM_2F~rAV7UP#ev;F- zH#m-}*E-IYP8J_|F4T-}a$4N;iq3Ogl)fiv*|Tnire%}x@X#P9BuA%o=hVMU$_qIq zKD#KI1rJ2DoZBb&$3B2Oe6ECky#&_tR=XIM)`ud#SXLSFkL@P80m~e-_ zcSQ8Nsjt?l)hj2J&lK@S2qXe|E@gQ}@-#Ys>8?&j)Sfx-x5crS65y*QS#!sZ|B~tyQS&EAl?<{b6-ZHMHvlahHJNqk@{)rECdH! zZny>CVNUO4!^!t>)melU03Jxh%&H((QGtWNKF@F*(*&0zQDB z+CPzA6FOo$Tw~#WVWNvXL822#?vK(xo?rioX3v@nqK3MiXY96j)$_*Ds}rIP6dIT2 zX9K{*x@Jg~L4224?AUs4nx~{MJ@TSFQJ{dZe*Rv1?msm3WJpG;D{I%`x!Qp(uT&S@ zZuI+|Oux5l7J`=64##x6X>%-_V9*pqM&kL~J7dGT(XkZI&vU0IB(D-(BGDnVMO;-* z+@e1htiGgYMVDL>4eNYK2QR!ww$VF)xS#N+6UB+(Q_BR!p`mwDctatyE-`7T2ZD;x zP0Lf|`yN7{LQSTyqZM*0BN^go{=KPApG>hxSGZ%QDJ;BDoJl0P)_KmW3xNwmfGZ?Xg4bN^%J zLXti-EZ8pi*U@OEvN2uT(Zqxuf_Kt{t*7@!;63+UyH*G-NPQqTPQJE&GtoW8Bx+Zh z1g*T+El^b2?={$6g>-p>cKgVj>=51{o8mJY-Wm9@+zKKW(@=< zz-Pwj*wuHN&+|xmd5fW0sS|L8)svJgW(81r#MA&PuJT(X8gf%Nn*86S=|Y#7s?_wo zv98BK6wvH9x?`y0nntGNf1t0@1?Ol&w<$tPdX5|N&Z$Vt^-aXmwejLul00%XUit`Mn2R>Y%CzM_peO^Ju30Bo&VDCENA?ke%2=p?G68a z-28UFE5VzRv9@fBK_O|r1n}&R6Z)wjd0$;*E-qPakX!Mff7jQ3J9kwu!%uwGL_y!-0j~xqvV)S%bsZq^-E+yxKa@>V$C9tn^lH^Xyq-4~fx$ zxF>#!w^&DoM#8G3?)KD)?#&{(j)}jAOoVPnHoz{RV|2Bnvz~6vL=*H3Kc6H9T*lTB zq}!WV&@Ski^7qk5@IPpmIQLt69s8<*CE^4n<-#&N35?W>M`m?L)P9v3CoIO9eWURfT=D<^g$A>V#Zh6I`*$Jt!AYh;cWeYz5}%l- zz*oq=XMb4sqXUXPWOXm8)FXj5O!FK!(c|=A;x?>`=Y^N_4lVn%VGA|~&PZwp<2w9H zdYIClb9fQ%!xG1Yg}ZrO|D7vfk!~;&os8E`_^(a zWnlKr`c1qy{Iv9SYt89__z;g0zr&sjJo1^asnL9FwqqkOTvMOT^lb~nfNlfv5T`?< z)z1C&aTAq5;QZe58*wk^OW$rhyWciwpZWHw_Mhktp4{i68=2Sk%+#knK*g>wv zHaD1}f6mQWB0L)B*NjB?*Lf%;$unQx(Es@P|E&LsY;Il8l{_PRyjhvh1FC>wV$ccw Ni%gJJwr%Fs{tt%m;4%OJ literal 1 Icmd-A000XB3jhEB From 45dd41b73b0fdbcb9e739f1e402495683e37231d Mon Sep 17 00:00:00 2001 From: tinyboy186 Date: Tue, 28 Jan 2020 15:53:05 +0700 Subject: [PATCH 159/263] [Vietnamese Translation] Update dead link --- translations/README-vi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-vi.md b/translations/README-vi.md index 2cbde8a..0a92d0e 100644 --- a/translations/README-vi.md +++ b/translations/README-vi.md @@ -277,7 +277,7 @@ Bạn sẽ thấy vài tài liệu về C, C++ và Python bên dưới, vì tôi ### Chuẩn bị phỏng vấn -- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) +- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4nd Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - Có câu trả lời bằng C++ và Java - Được khuyến khích bởi các khóa hướng dẫn của Google. - Đây là một phần luyện tập tốt trước khi bắt đầu với quyển Cracking the Coding Interview From fb4c8873ab130fe0eba8c27982c9b24d6782f2df Mon Sep 17 00:00:00 2001 From: John Washam Date: Tue, 11 Feb 2020 21:31:16 -0800 Subject: [PATCH 160/263] Removed collapsing arrows. Was really nice for a while but makes links in table of contents not work. Also hides scope. --- .gitignore | 2 + README.md | 699 ++++++++++++++++++++++------------------------------- 2 files changed, 292 insertions(+), 409 deletions(-) diff --git a/.gitignore b/.gitignore index e16a64c..fdcbfa0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .idea personal-9894.md +*.iml # Targets Windows & Unix temporary files ~$* @@ -14,3 +15,4 @@ personal-9894.md .Trashes ehthumbs.db Thumbs.db + diff --git a/README.md b/README.md index a814bf4..fd536ff 100644 --- a/README.md +++ b/README.md @@ -133,8 +133,7 @@ If you want to be a reliability engineer or operations engineer, study more from ---------------- Everything below this point is optional ---------------- -
-Additional Resources +## Additional Resources - [Additional Books](#additional-books) - [Additional Learning](#additional-learning) @@ -180,8 +179,6 @@ If you want to be a reliability engineer or operations engineer, study more from - [Computer Science Courses](#computer-science-courses) - [Papers](#papers) -
- --- ## Why use it? @@ -197,9 +194,6 @@ It's a long plan. It may take you months. If you are familiar with a lot of this ## How to use it -
-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. @@ -227,14 +221,12 @@ I'm using Github's special markdown flavor, including tasks lists to check progr [More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) -
## Don't feel you aren't smart enough + - Successful software engineers are smart, but many have an insecurity that they aren't smart enough. - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) - [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) -- [Believe you can change](http://www.aaronsw.com/weblog/dweck) -- [Think you're not smart enough to work at Google? Well, think again](https://www.youtube.com/watch?v=uPOJ1PR50ag) ## About Video Resources @@ -247,9 +239,6 @@ Sometimes the classes are not in session so you have to wait a couple of months, ## Interview Process & General Interview Prep -
-Interview Process & General Interview Prep - - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) @@ -263,15 +252,13 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] Prep Course: - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. - - [ ] [Python for Data Structures, Algorithms, and Interviews! (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. - - [ ] [Intro to Data Structures and Algorithms using Python! (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): - A free Python centric data structures and algorithms course. - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. -
- ## Pick One Language for the Interview You can use a language you are comfortable in to do the coding part of the interview, but for large companies, these are solid choices: @@ -310,8 +297,7 @@ This is a shorter list than what I used. This is abbreviated to save you time. - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - answers in Java -
-If you have tons of extra time: +### If you have tons of extra time: Choose one: @@ -320,30 +306,6 @@ Choose one: - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) -
- -### Computer Architecture - -- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - - These chapters are worth the read to give you a nice foundation: -
- ...... - - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization - -
- - ### Language Specific **You need to choose a language for the interview (see above).** @@ -357,9 +319,6 @@ If you read through one of these, you should have all the data structures and al ### C++ -
-C++ - I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) @@ -367,13 +326,8 @@ I haven't read these two, but they are highly rated and written by Sedgewick. He If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. -
- ### Java -
-Java - - [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - videos with book content (and Sedgewick!) on coursera: - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) @@ -386,21 +340,14 @@ OR: - used as optional text for CS intro course at UC Berkeley - see my book report on the Python version below. This book covers the same topics. -
- ### Python -
-Python - - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - by Goodrich, Tamassia, Goldwasser - I loved this book. It covered everything and more. - Pythonic code - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ -
- ## Before you Get Started @@ -441,15 +388,25 @@ It's user-friendly, available on all platforms and has a cloud sync system. It c My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) -### 3. Review, review, review +### 3. While you're learning data structures and algorithms, start doing coding questions. + +You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, +and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding +linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem, +or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge, +but how you apply the knowledge. There are several books and sites I recommend. +See here for more: [Coding Question Practice](#coding-question-practice) + +### 4. Review, review, review I keep a set of cheat sheets 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 +### 5. Focus -There are a lot of distractions that can take up valuable time. Focus and concentration are hard. +There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music +without lyrics and you'll be able to focus pretty well. ## What you won't see covered @@ -491,9 +448,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Prerequisite Knowledge -
-Prerequisite Knowledge - - [ ] **Learn C** - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) @@ -508,13 +462,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) -
- ## Algorithmic complexity / Big-O / Asymptotic analysis -
-Algorithmic complexity / Big-O / Asymptotic analysis - - Nothing to implement - There are a lot of videos here. Just watch enough until you understand it. You can always come back and review. - 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. @@ -536,14 +485,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) - [ ] [Cheat sheet](http://bigocheatsheet.com/) - -
- ## Data Structures -
-Data Structures - - ### Arrays - Implement an automatically resizing vector. - [ ] Description: @@ -669,13 +612,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - get(key) - remove(key) -
- ## More Knowledge -
-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) @@ -704,20 +642,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [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](https://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) - [ ] swap values: - [Swap](https://bits.stephan-brumme.com/swap.html) - [ ] absolute value: - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) -
- ## Trees -
-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) @@ -797,13 +728,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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). -
- ## Sorting -
-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 @@ -877,13 +803,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) -
- ## Graphs -
-Graphs - Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. - Notes: @@ -942,13 +863,8 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] list strongly connected components - [ ] check for bipartite graph -
- ## Even More Knowledge -
-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) @@ -988,24 +904,7 @@ Graphs can be used to represent many problems in computer science, so this secti - ### Object-Oriented Programming - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] Object-Oriented Software Engineering: 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 (video)](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 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 but 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) + - [ ] SOLID OOP Principles: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) - ### Design patterns - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) @@ -1124,10 +1023,6 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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) @@ -1199,13 +1094,8 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) -
- ## System Design, Scalability, Data Handling -
-System Design, Scalability, Data Handling - **You can expect system design questions if you have 4+ years of experience.** - Scalability and System Design are very large topics with many topics and resources, since @@ -1331,15 +1221,10 @@ Graphs can be used to represent many problems in computer science, so this secti - [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/) -
- --- ## Final Review -
-Final Review - This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. It's nice if you want a refresher often. @@ -1350,15 +1235,10 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) -
- --- ## Coding Question Practice -
-Coding Question Practice - Now that you know all the computer science topics above, it's time to practice answering coding problems. **Coding question practice is not about memorizing answers to programming problems.** @@ -1377,7 +1257,8 @@ interview books, too, but I found this outstanding: No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. +I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil +and eraser. ![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) @@ -1397,18 +1278,14 @@ Supplemental: See [Book List above](#book-list) -
## Coding exercises/challenges -
-Coding Question Practice - Once you've learned your brains out, put those brains to work. Take coding challenges every day, as many as you can. -- [ ] [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) -- [ ] [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) +- [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) +- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) Coding Interview Question Videos: - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) @@ -1436,11 +1313,10 @@ Mock Interviews: - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. -
## Once you're closer to the interview -- [ ] Cracking The Coding Interview Set 2 (videos): +- 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) @@ -1480,6 +1356,7 @@ Have a story, not just data, about something you accomplished. - What are you working on? - What do you like about it? - What is the work life like? +- How is work/life balance? ## Once You've Got The Job @@ -1505,8 +1382,7 @@ You're never really done. ## Additional Books -
-Additional Books + These are here so you can dive into a topic you find interesting. - [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - an oldie but a goodie @@ -1540,7 +1416,19 @@ You're never really done. - [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) - +- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - These chapters are worth the read to give you a nice foundation: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization - [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - aka CLR, sometimes CLRS, because Stein was late to the game @@ -1550,25 +1438,18 @@ You're never really done. - [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. - -
- -
+ that is just an intro. This a guidebook on program design and architecture. ## Additional Learning - -
-Additional Learning - -These topics will likely not come up in an interview, but I added them to help you become a well-rounded -software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox. + + I added them to help you become a well-rounded software engineer, and to be aware of certain + technologies and algorithms, so you'll have a bigger toolbox. - ### Compilers - - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - - [ ] [Harvard 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 a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard 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) - ### Emacs and vi(m) - Familiarize yourself with a unix-based code editor @@ -1593,115 +1474,115 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - ### Unix command line tools - 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/) + - 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) + - [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: + - [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) + - [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) + - [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) + - [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) + - 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) - ### 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) + - [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 - - [ ] [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) + - [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) + - [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) - ### Messaging, Serialization, and Queueing Systems - - [ ] [Thrift](https://thrift.apache.org/) + - [Thrift](https://thrift.apache.org/) - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) - - [ ] [Protocol Buffers](https://developers.google.com/protocol-buffers/) + - [Protocol Buffers](https://developers.google.com/protocol-buffers/) - [Tutorials](https://developers.google.com/protocol-buffers/docs/tutorials) - - [ ] [gRPC](http://www.grpc.io/) + - [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/) + - [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/) + - [Amazon SQS (queue)](https://aws.amazon.com/sqs/) + - [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/) + - [RabbitMQ](https://www.rabbitmq.com/) - [Get Started](https://www.rabbitmq.com/getstarted.html) - - [ ] [Celery](http://www.celeryproject.org/) + - [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/) + - [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/) + - [ActiveMQ](http://activemq.apache.org/) + - [Kafka](http://kafka.apache.org/documentation.html#introduction) + - [MessagePack](http://msgpack.org/index.html) + - [Avro](https://avro.apache.org/) - ### 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) + - [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) - ### Fast Fourier Transform - - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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/) + - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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) @@ -1719,11 +1600,11 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### 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) + - [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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) + - [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) - ### Balanced search trees - Know at least one type of balanced binary tree (and know how it's implemented): @@ -1737,31 +1618,31 @@ software engineer, and to be aware of certain technologies and algorithms, so yo 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) + - [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - - [ ] **AVL trees** + - **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) + - [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** + - **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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - - [ ] MIT Lecture: Splay Trees: + - [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - MIT Lecture: Splay Trees: - Gets very mathy, but watch the last 10 minutes for sure. - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - - [ ] **Red/black trees** + - **Red/black trees** - these are a translation of a 2-3 tree (see below) - In practice: Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time. @@ -1771,48 +1652,48 @@ software engineer, and to be aware of certain technologies and algorithms, so yo 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) - - [ ] [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) + - [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) + - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) - - [ ] **2-3 search trees** + - **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) + - [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)** + - **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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - - [ ] [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) + - [CS 61B Lecture 26: Balanced Search Trees (video)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [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) - - [ ] **N-ary (K-ary, M-ary) 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) + - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - - [ ] **B-Trees** + - **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) - - [ ] [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) - - [ ] [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) + - [B-Tree](https://en.wikipedia.org/wiki/B-tree) + - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) + - [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) @@ -1820,57 +1701,57 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - ### k-D Trees - great for finding number of points in a rectangle or higher dimension object - a good fit for k-nearest neighbors - - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ### 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) + - [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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) - - [ ] [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) - - [ ] [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) + - [Ford-Fulkerson in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [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 - - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) - - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) - ### 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) + - [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) + - [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) - - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) + - [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) + - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) - ### 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) + - [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/) + - 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) @@ -1888,153 +1769,157 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - Data School: http://www.dataschool.io/ -
- --- ## Additional Detail on Some Subjects -
-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? -- [ ] **Union-Find** - - [ ] [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) +- **SOLID** + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] 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 but 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) -- [ ] **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) +- **Union-Find** + - [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) -- [ ] 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) +- **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) -- [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) +- **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) -- [ ] **String Matching** - - [ ] Rabin-Karp (videos): +- 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) + +- **String Matching** + - 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): + - Knuth-Morris-Pratt (KMP): - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) - - [ ] Boyer–Moore string search algorithm + - 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) + - [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be - nice explanation of tries - can be skipped -- [ ] **Sorting** +- **Sorting** - - [ ] 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) - -
+ - 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) ## Video Series Sit back and enjoy. "Netflix and skill" :P -
-Video Series +- [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) -- [ ] [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) -- [ ] [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) -- [ ] [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) -- [ ] [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](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) -- [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) +- [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) -- [ ] [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) +- [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) -- [ ] [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) - -- [ ] CSE373 - Analysis of Algorithms (25 videos) +- 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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) +- [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) -- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) +- [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) -- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) +- [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-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: 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)~~ +- ~~[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=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) +- [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) -- [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) +- [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.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.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.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.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.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.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.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.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) -- [ ] [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) +- [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) -- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) +- [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) -- [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) +- [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) -- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) +- [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) -- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) +- [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) -- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) - -
+- [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) ## Computer Science Courses @@ -2043,40 +1928,36 @@ Sit back and enjoy. "Netflix and skill" :P ## Papers -
-Papers - - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) -- [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) +- [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - [implemented in Go](https://godoc.org/github.com/thomas11/csp) -- [ ] [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) +- [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) +- [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? -- [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) +- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) -- [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) -- [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) +- [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) +- [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - The Dynamo paper kicked off the NoSQL revolution -- [ ] [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) -- [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) -- [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) -- [ ] [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) +- [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) +- [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) +- [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) +- [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) - paper not available -- [ ] 2012: AddressSanitizer: A Fast Address Sanity Checker: +- 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: +- 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) +- [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) -
## LICENSE From c0bd1541567a7b3e0e6a1b91a08975d282d57f8a Mon Sep 17 00:00:00 2001 From: John Washam Date: Tue, 11 Feb 2020 21:40:33 -0800 Subject: [PATCH 161/263] Minor edits. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fd536ff..ea40cf0 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ > > I studied about 8-12 hours a day, for several months. This is my story: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) > -> The items listed here will prepare you well for an interview at just about any software company, -> including the giants: Amazon, Facebook, Google or Microsoft. +> The items listed here will prepare you well for a technical interview at just about any software company, +> including the giants: Amazon, Facebook, Google, and Microsoft. > > *Best of luck to you!* @@ -388,7 +388,7 @@ It's user-friendly, available on all platforms and has a cloud sync system. It c My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) -### 3. While you're learning data structures and algorithms, start doing coding questions. +### 3. Start doing coding interview questions while you're learning data structures and algorithms, You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding From fff91bad3575b72eb927d8659b6815e4779f283c Mon Sep 17 00:00:00 2001 From: John Washam Date: Tue, 11 Feb 2020 21:41:09 -0800 Subject: [PATCH 162/263] Added iml. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index fdcbfa0..7224727 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ .idea -personal-9894.md *.iml +personal-9894.md # Targets Windows & Unix temporary files ~$* From f69e696a394ebc73c3bf5dbcd93b27ec5cece50f Mon Sep 17 00:00:00 2001 From: John Washam Date: Tue, 11 Feb 2020 21:44:48 -0800 Subject: [PATCH 163/263] Minor edit. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ea40cf0..944c691 100644 --- a/README.md +++ b/README.md @@ -290,7 +290,7 @@ This is a shorter list than what I used. This is abbreviated to save you time. ### Interview Prep -- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4nd Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) +- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - answers in C++ and Java - this is a good warm-up for Cracking the Coding Interview - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) From d0a3f4b2b30a47b1172cd60620c9b85e9685a0f1 Mon Sep 17 00:00:00 2001 From: John Washam Date: Tue, 11 Feb 2020 21:47:40 -0800 Subject: [PATCH 164/263] Added book for programming interview questions in Python. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 944c691..278e396 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,7 @@ This is a shorter list than what I used. This is abbreviated to save you time. Choose one: - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) - [ ] Elements of Programming Interviews (Java version) - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) From 6073450963a44aa437a0de28363d48288602d392 Mon Sep 17 00:00:00 2001 From: John Washam Date: Tue, 11 Feb 2020 22:15:38 -0800 Subject: [PATCH 165/263] Updates link text. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dbf1afd..1c4553e 100644 --- a/README.md +++ b/README.md @@ -367,7 +367,7 @@ Read please so you won't make my mistakes: [Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). -Here is another great course on Coursera for [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn). +A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) ### 2. Use Flashcards From dac6c5760cf45d71ec5a325445737577e61f0de2 Mon Sep 17 00:00:00 2001 From: John Washam Date: Tue, 11 Feb 2020 22:19:14 -0800 Subject: [PATCH 166/263] Moved links. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1c4553e..fa37517 100644 --- a/README.md +++ b/README.md @@ -243,11 +243,11 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] 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) - [ ] 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) - [ ] Cracking the Facebook Coding Interview - [] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) - [] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) From 4f1a0c5508a170e94fa47ef934b2dfec29b91952 Mon Sep 17 00:00:00 2001 From: John Washam Date: Tue, 11 Feb 2020 22:23:26 -0800 Subject: [PATCH 167/263] Fixed checkboxes. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fa37517..481d56a 100644 --- a/README.md +++ b/README.md @@ -249,8 +249,8 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] [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) - [ ] Cracking the Facebook Coding Interview - - [] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) - - [] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) + - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) - [ ] Prep Course: - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. From fd7be76829ec5f01efe349e4c983498a41b7ffa9 Mon Sep 17 00:00:00 2001 From: loustler Date: Mon, 24 Feb 2020 21:41:23 +0900 Subject: [PATCH 168/263] Fix markdown syntax typo in korean translation --- translations/README-ko.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 973d063..b67b075 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -1,12 +1,12 @@ # 코딩 인터뷰 대학(Coding Interview University) > 나는 원래 이것을 소프트웨어 엔지니어가 되기 위한 짧은 연구 목록으로 만들었다. -> 그러나 지금 당신이 볼수 있듯이 이 목록은 매우 커졌다. 이 목록을 숙지 한 후, +> 그러나 지금 당신이 볼수 있듯이 이 목록은 매우 커졌다. 이 목록을 숙지 한 후, > [나는 아마존에 소프트웨어 엔지니어로 채용됐다](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! > 당신은 아마 내가 한 것처럼 많이 공부할 필요는 없을 것이다. 어쨌든 당신이 필요로 하는 모든 것은 여기에 있다. > > 여기에 나열된 목록들은 아마존, 페이스북, 구글, 마이크로소프트 같은 거대 기업을 포함한 거의 모든 소프트웨어 회사의 인터뷰를 준비하는데에 도움이 될것이다. -> +> > > *행운을 빈다!* @@ -893,7 +893,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] 구현: - [ ] 병합 정렬: 평균과 최악의 경우 O(n log n) - - [ ] 퀵 정렬: 평균적인 경우 O(n log n) + - [ ] 퀵 정렬: 평균적인 경우 O(n log n) - 선택 정렬과 삽입 정렬은 둘 다 평균과 최악의 경우에 O(n^2) - 힙 정렬의 경우, 위의 힙 데이터 구조를 보세요. @@ -934,7 +934,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] MIT(영상): - [ ] [너비 우선 탐색(BFS;Breadth-First Search)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - - [ ] [깊이 우선 탐색(DFS;Depth-First Search)]((https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + - [ ] [깊이 우선 탐색(DFS;Depth-First Search)](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) - [ ] Skiena의 강좌 - 시작하기 아주 좋습니다: - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) From eddd1d557939d4ba7dd3e88c856e7953f427067d Mon Sep 17 00:00:00 2001 From: Tony Date: Sun, 1 Mar 2020 13:30:22 -0600 Subject: [PATCH 169/263] Removed broken video link. --- README.md | 2375 +++++++++++++++++++++++++++-------------------------- 1 file changed, 1223 insertions(+), 1152 deletions(-) diff --git a/README.md b/README.md index 481d56a..be2fc2c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ > The items listed here will prepare you well for a technical interview at just about any software company, > including the giants: Amazon, Facebook, Google, and Microsoft. > -> *Best of luck to you!* +> _Best of luck to you!_
Translations: @@ -78,49 +78,49 @@ If you want to be a reliability engineer or operations engineer, study more from - [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) + - [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) + - [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) - - balanced search trees (general concept, not details) - - traversals: preorder, inorder, postorder, BFS, DFS + - [Trees - Notes & Background](#trees---notes--background) + - [Binary search trees: BSTs](#binary-search-trees-bsts) + - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) + - balanced search trees (general concept, not details) + - traversals: preorder, inorder, postorder, BFS, DFS - [Sorting](#sorting) - - selection - - insertion - - heapsort - - quicksort - - merge sort + - selection + - insertion + - heapsort + - quicksort + - merge sort - [Graphs](#graphs) - - directed - - undirected - - adjacency matrix - - adjacency list - - traversals: BFS, DFS + - directed + - undirected + - adjacency matrix + - adjacency list + - traversals: BFS, DFS - [Even More Knowledge](#even-more-knowledge) - - [Recursion](#recursion) - - [Dynamic Programming](#dynamic-programming) - - [Object-Oriented Programming](#object-oriented-programming) - - [Design Patterns](#design-patterns) - - [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) - - [Testing](#testing) - - [Scheduling](#scheduling) - - [String searching & manipulations](#string-searching--manipulations) - - [Tries](#tries) - - [Floating Point Numbers](#floating-point-numbers) - - [Unicode](#unicode) - - [Endianness](#endianness) - - [Networking](#networking) + - [Recursion](#recursion) + - [Dynamic Programming](#dynamic-programming) + - [Object-Oriented Programming](#object-oriented-programming) + - [Design Patterns](#design-patterns) + - [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) + - [Testing](#testing) + - [Scheduling](#scheduling) + - [String searching & manipulations](#string-searching--manipulations) + - [Tries](#tries) + - [Floating Point Numbers](#floating-point-numbers) + - [Unicode](#unicode) + - [Endianness](#endianness) + - [Networking](#networking) - [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) - [Final Review](#final-review) - [Coding Question Practice](#coding-question-practice) @@ -137,43 +137,43 @@ If you want to be a reliability engineer or operations engineer, study more from - [Additional Books](#additional-books) - [Additional Learning](#additional-learning) - - [Compilers](#compilers) - - [Emacs and vi(m)](#emacs-and-vim) - - [Unix command line tools](#unix-command-line-tools) - - [Information theory](#information-theory-videos) - - [Parity & Hamming Code](#parity--hamming-code-videos) - - [Entropy](#entropy) - - [Cryptography](#cryptography) - - [Compression](#compression) - - [Computer Security](#computer-security) - - [Garbage collection](#garbage-collection) - - [Parallel Programming](#parallel-programming) - - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - - [A*](#a) - - [Fast Fourier Transform](#fast-fourier-transform) - - [Bloom Filter](#bloom-filter) - - [HyperLogLog](#hyperloglog) - - [Locality-Sensitive Hashing](#locality-sensitive-hashing) - - [van Emde Boas Trees](#van-emde-boas-trees) - - [Augmented Data Structures](#augmented-data-structures) - - [Balanced search trees](#balanced-search-trees) - - AVL trees - - Splay trees - - Red/black trees - - 2-3 search trees - - 2-3-4 Trees (aka 2-4 trees) - - N-ary (K-ary, M-ary) trees - - B-Trees - - [k-D Trees](#k-d-trees) - - [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-videos) - - [Geometry, Convex hull](#geometry-convex-hull-videos) - - [Discrete math](#discrete-math) - - [Machine Learning](#machine-learning) + - [Compilers](#compilers) + - [Emacs and vi(m)](#emacs-and-vim) + - [Unix command line tools](#unix-command-line-tools) + - [Information theory](#information-theory-videos) + - [Parity & Hamming Code](#parity--hamming-code-videos) + - [Entropy](#entropy) + - [Cryptography](#cryptography) + - [Compression](#compression) + - [Computer Security](#computer-security) + - [Garbage collection](#garbage-collection) + - [Parallel Programming](#parallel-programming) + - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) + - [A\*](#a) + - [Fast Fourier Transform](#fast-fourier-transform) + - [Bloom Filter](#bloom-filter) + - [HyperLogLog](#hyperloglog) + - [Locality-Sensitive Hashing](#locality-sensitive-hashing) + - [van Emde Boas Trees](#van-emde-boas-trees) + - [Augmented Data Structures](#augmented-data-structures) + - [Balanced search trees](#balanced-search-trees) + - AVL trees + - Splay trees + - Red/black trees + - 2-3 search trees + - 2-3-4 Trees (aka 2-4 trees) + - N-ary (K-ary, M-ary) trees + - B-Trees + - [k-D Trees](#k-d-trees) + - [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-videos) + - [Geometry, Convex hull](#geometry-convex-hull-videos) + - [Discrete math](#discrete-math) + - [Machine Learning](#machine-learning) - [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - [Video Series](#video-series) - [Computer Science Courses](#computer-science-courses) @@ -200,7 +200,6 @@ I'm using Github's special markdown flavor, including tasks lists to check progr **Create a new branch so you can check items like this, just put an x in the brackets: [x]** - Fork a branch and follow the commands below `git checkout -b progress` @@ -221,7 +220,6 @@ I'm using Github's special markdown flavor, including tasks lists to check progr [More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) - ## Don't feel you aren't smart enough - Successful software engineers are smart, but many have an insecurity that they aren't smart enough. @@ -236,7 +234,6 @@ Sometimes the classes are not in session so you have to wait a couple of months, I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos. I like using university lectures. - ## Interview Process & General Interview Prep - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) @@ -244,22 +241,22 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) - [ ] 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) + - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [ ] 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) + - [ ] [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) - [ ] Cracking the Facebook Coding Interview - - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) - - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) + - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) - [ ] Prep Course: - - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. - - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. - - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): - - A free Python centric data structures and algorithms course. - - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): - - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. + - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): + - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. + - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. + - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - A free Python centric data structures and algorithms course. + - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. ## Pick One Language for the Interview @@ -279,6 +276,7 @@ Here is an article I wrote about choosing a language for the interview: [Pick On 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/ @@ -293,11 +291,11 @@ This is a shorter list than what I used. This is abbreviated to save you time. ### Interview Prep - [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - - answers in C++ and Java - - this is a good warm-up for Cracking the Coding Interview - - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) + - answers in C++ and Java + - this is a good warm-up for Cracking the Coding Interview + - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - answers in Java ### If you have tons of extra time: @@ -306,8 +304,8 @@ Choose one: - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) - [ ] Elements of Programming Interviews (Java version) - - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) + - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) ### Language Specific @@ -332,25 +330,24 @@ If you have a better recommendation for C++, please let me know. Looking for a c ### Java - [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - videos with book content (and Sedgewick!) on coursera: - - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) - - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) + - videos with book content (and Sedgewick!) on coursera: + - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) + - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) OR: - [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - - by Goodrich, Tamassia, Goldwasser - - used as optional text for CS intro course at UC Berkeley - - see my book report on the Python version below. This book covers the same topics. + - by Goodrich, Tamassia, Goldwasser + - used as optional text for CS intro course at UC Berkeley + - see my book report on the Python version below. This book covers the same topics. ### Python - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - - by Goodrich, Tamassia, Goldwasser - - I loved this book. It covered everything and more. - - Pythonic code - - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ - + - by Goodrich, Tamassia, Goldwasser + - I loved this book. It covered everything and more. + - Pythonic code + - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ ## Before you Get Started @@ -389,17 +386,17 @@ same card and answer it several times correctly before you really know it. Repet your brain. An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. -It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. +It's user-friendly, available on all platforms and has a cloud sync system. It costs \$25 on iOS but is free on other platforms. My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) -### 3. Start doing coding interview questions while you're learning data structures and algorithms, +### 3. Start doing coding interview questions while you're learning data structures and algorithms, -You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, -and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding -linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem, -or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge, -but how you apply the knowledge. There are several books and sites I recommend. +You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, +and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding +linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem, +or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge, +but how you apply the knowledge. There are several books and sites I recommend. See here for more: [Coding Question Practice](#coding-question-practice) ### 4. Review, review, review @@ -410,7 +407,7 @@ Take a break from programming problems for a half hour and go through your flash ### 5. Focus -There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music +There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music without lyrics and you'll be able to focus pretty well. ## What you won't see covered @@ -426,7 +423,8 @@ These are prevalent technologies but not part of this study 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 - 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) @@ -436,6 +434,7 @@ Each day I take one subject from the list below, watch videos about that subject You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). 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 or Java)) - 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) @@ -443,9 +442,10 @@ Why code in all of these? 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) + +- [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. @@ -454,18 +454,19 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Prerequisite Knowledge - [ ] **Learn C** - - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. - - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - This is a short book, but it will give you a great handle on the C language and if you practice it a little - you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - - [answers to questions](https://github.com/lekkas/c-algorithms) + + - C is everywhere. You'll see examples in books, lectures, videos, _everywhere_ while you're studying. + - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - This is a short book, but it will give you a great handle on the C language and if you practice it a little + you'll quickly get proficient. Understanding C helps you understand how programs and memory work. + - [answers to questions](https://github.com/lekkas/c-algorithms) - [ ] **How computers process a program:** - - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) - - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) - - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) - - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) - - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) + - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) + - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) + - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) ## Algorithmic complexity / Big-O / Asymptotic analysis @@ -476,8 +477,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [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) + - [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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) - [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) @@ -486,287 +487,300 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) - [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) - [ ] TopCoder (includes recurrence relations and master theorem): - - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) - - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) + - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) + - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) - [ ] [Cheat sheet](http://bigocheatsheet.com/) ## Data Structures - ### Arrays - - Implement an automatically resizing vector. - - [ ] Description: - - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) - - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - - [ ] 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) + + - Implement an automatically resizing vector. + - [ ] Description: + - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) + - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) + - [ ] 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 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - - [ ] [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: + + - [ ] Description: + - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [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 + - [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://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - - [ ] Will not implement. Implementing with array is trivial. + + - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) + - [ ] Will not implement. Implementing with array is trivial. - ### Queue - - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - - [ ] 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) + + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) + - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) + - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) + - [ ] 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://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - - [ ] [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) + - [ ] Videos: - - [ ] 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) + - [ ] [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://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [ ] [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/competitive-programming/tutorials/binary-search/) - - [ ] Implement: - - binary search (on sorted array of integers) - - binary search using recursion + + - [ ] [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/competitive-programming/tutorials/binary-search/) + - [ ] Implement: + - binary search (on sorted array of integers) + - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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](https://bits.stephan-brumme.com/) - - [ ] [The Bit Twiddler Interactive](https://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) - - [ ] swap values: - - [Swap](https://bits.stephan-brumme.com/swap.html) - - [ ] absolute value: - - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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]() + - [ ] 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](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://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) + - [ ] swap values: + - [Swap](https://bits.stephan-brumme.com/swap.html) + - [ ] absolute value: + - [Absolute Integer](https://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) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - - BFS notes: - - level order (BFS, using queue) - - time complexity: O(n) - - space complexity: best: O(1), worst: O(n/2)=O(n) - - DFS 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) + + - [ ] [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) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS notes: + - level order (BFS, using queue) + - time complexity: O(n) + - space complexity: best: O(1), worst: O(n/2)=O(n) + - DFS 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 + + - [ ] [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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) - - [ ] [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). + - visualized as a tree, but is usually linear in storage (array, linked list) + - [ ] [Heap]() + - [ ] [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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [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). ## 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/) + + - 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. - [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) - - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) - - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) - - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) - - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) + + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) - [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) - - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) - - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) - - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) + + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) - [ ] UC Berkeley: - - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) - - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) - - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) - - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + + - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) - [ ] [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) @@ -777,33 +791,35 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Selection Sort (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) - [ ] Merge sort code: - - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) - - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) + - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) - [ ] Quick sort code: - - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) - - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) - - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + + - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) - [ ] 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. + + - [ ] 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. - [ ] Not required, but I recommended them: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) - - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) - - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) - - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) - - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) - - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) - - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - - [ ] [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) + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [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) As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) @@ -813,312 +829,328 @@ If you need more detail on this subject, see "Sorting" section in [Additional De Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. - Notes: - - There are 4 basic ways to represent a graph in memory: - - objects and pointers - - adjacency matrix - - adjacency list - - adjacency map - - 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. + + - There are 4 basic ways to represent a graph in memory: + - objects and pointers + - adjacency matrix + - adjacency list + - adjacency map + - 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. - [ ] MIT(videos): - - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + + - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) - [ ] 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) + + - [ ] [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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) - - [ ] [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 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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [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) + + - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - 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 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 ## 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 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 - - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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) + + - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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) - ### Object-Oriented Programming - - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] SOLID OOP Principles: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + + - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] SOLID OOP Principles: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) - ### 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) - - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-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) + - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) +* ### Combinatorics (n choose k) & Probability -- ### 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) + - [ ] [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-Completeness (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 Norvig 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. +* ### NP, NP-Complete and Approximation Algorithms -- ### 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-) + - 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-Completeness (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 Norvig 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. -- ### Processes and Threads - - [ ] Computer Science 162 - Operating Systems (25 videos): - - for processes and threads see videos 1-11 - - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 - - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - - [Scheduling (video)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) - - 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 the 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) +* ### Caches -- ### 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) - - [ ] 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) + - [ ] 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-) -- ### Scheduling - - in an OS, how it works - - can be gleaned from Operating System videos +* ### Processes and Threads -- ### String searching & manipulations - - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) - - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) - - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) - - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) - - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + - [ ] Computer Science 162 - Operating Systems (25 videos): + - for processes and threads see videos 1-11 + - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 + - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - 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 the 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) - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +* ### Testing -- ### 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. - - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) - - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) - - [ ] [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/competitive-programming/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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + - 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) + - [ ] 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) -- ### Floating Point Numbers - - [ ] 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) +* ### Scheduling -- ### 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/) + - in an OS, how it works + - can be gleaned from Operating System videos -- ### Endianness - - [ ] [Big And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. +* ### String searching & manipulations -- ### Networking - - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - - otherwise, this is just good to know - - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) - - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) - - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) - - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) - - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) - - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) - - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) - - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) - - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) - - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) - - [ ] Sockets: - - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) + - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + +* ### 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. + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [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/competitive-programming/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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + +* ### Floating Point Numbers + + - [ ] 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) + +* ### 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://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. + +* ### Networking + - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** + - otherwise, this is just good to know + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) + - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) + - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) + - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) + - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) + - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] Sockets: + - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) ## System Design, Scalability, Data Handling **You can expect system design questions if you have 4+ years of experience.** - 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. + 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. - Considerations: - - 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 + - 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**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [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) @@ -1132,99 +1164,99 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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/) - [ ] Consensus Algorithms: - - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) - - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) - - [ ] [Easy-to-read paper](https://raft.github.io/) - - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) + - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: - - You don't need all of these. Just pick a few that interest you. - - [ ] [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/competitive-programming/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 (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) - - [ ] [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) - - [ ] [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](#video-series) section. + - You don't need all of these. Just pick a few that interest you. + - [ ] [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/competitive-programming/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 (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) + - [ ] [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) + - [ ] [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](#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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - - [cheat sheet](https://github.com/jwasham/coding-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 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/) + - review: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/coding-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 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/) --- @@ -1234,9 +1266,9 @@ Graphs can be used to represent many problems in computer science, so this secti It's nice if you want a refresher often. - [ ] Series of 2-3 minutes short subject videos (23 videos) - - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) + - [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) + - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1249,6 +1281,7 @@ Now that you know all the computer science topics above, it's time to practice a **Coding question practice is not about memorizing answers to programming problems.** Why you need to practice doing programming problems: + - problem recognition, and where the right data structures and algorithms fit in - gathering requirements for the problem - talking your way through the problem like you will in the interview @@ -1262,7 +1295,7 @@ interview books, too, but I found this outstanding: No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil +I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil and eraser. ![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) @@ -1277,13 +1310,12 @@ Supplemental: **Read and Do Programming Problems (in this order):** - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C, C++ and Java + - answers in C, C++ and Java - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - answers in Java See [Book List above](#book-list) - ## Coding exercises/challenges Once you've learned your brains out, put those brains to work. @@ -1293,10 +1325,12 @@ Take coding challenges every day, as many as you can. - [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) Coding Interview Question Videos: + - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) Challenge sites: + - [LeetCode](https://leetcode.com/) - [TopCoder](https://www.topcoder.com/) - [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) @@ -1311,25 +1345,25 @@ Challenge sites: - [Codechef](https://www.codechef.com/) Challenge repos: + - [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) Mock Interviews: + - [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. - ## 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) + - [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) ## Your Resume - See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed - ## Be thinking of for when the interview comes Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. @@ -1390,389 +1424,421 @@ You're never really done. These are here so you can dive into a topic you find interesting. - [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - - an oldie but a goodie + - an oldie but a goodie - [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - a modern option + - a modern option - [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) - [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns + - a gentle introduction to design patterns - [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - - aka the "Gang Of Four" book, or GOF - - the canonical design patterns book + - aka the "Gang Of Four" book, or GOF + - the canonical design patterns book - [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - Can rent it on kindle - - 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) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - Can rent it on kindle + - Answers: + - [Solutions]() + - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) + - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) - [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - - These chapters are worth the read to give you a nice foundation: - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - These chapters are worth the read to give you a nice foundation: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization - [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - aka CLR, sometimes CLRS, because Stein was late to the game + + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - aka CLR, sometimes CLRS, because Stein was late to the game - [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - - For a richer, more up-to-date (2017), but longer treatment + + - For a richer, more up-to-date (2017), but longer treatment - [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture. + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture. ## Additional Learning - - I added them to help you become a well-rounded software engineer, and to be aware of certain + + I added them to help you become a well-rounded software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox. - ### Compilers - - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - - [Harvard 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 a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard 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) - ### Emacs and vi(m) - - 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) + + - 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 - - 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/) + + - 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. + + - [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) + + - [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) + + - 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) + + - 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) + + - 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) - ### 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 (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 - - [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) + + - [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) + + - [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) - ### 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 Started](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/) -- ### 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) + - [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 Started](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/) + +- ### 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) - ### Fast Fourier Transform - - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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/) + + - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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 (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) - - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) + + - Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k) + - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) - ### HyperLogLog - - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + + - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) - ### Locality-Sensitive Hashing - - used to determine the similarity of documents - - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. - - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) + + - used to determine the similarity of documents + - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### 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) + + - [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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) + + - [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) - ### Balanced search trees - - Know at 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) + - Know at 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) - - **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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - - MIT Lecture: Splay Trees: - - Gets very mathy, but watch the last 10 minutes for sure. - - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + - **AVL trees** - - **Red/black trees** - - these are a translation of a 2-3 tree (see below) - - 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) - - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-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) - - **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) + - **Splay trees** - - **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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - - [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) + - 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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - MIT Lecture: Splay Trees: + - Gets very mathy, but watch the last 10 minutes for sure. + - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - - **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) + - **Red/black trees** - - **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) - - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) - - [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) + - these are a translation of a 2-3 tree (see below) + - 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) + - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) + - **2-3 search trees** -- ### k-D Trees - - great for finding number of points in a rectangle or higher dimension object - - a good fit for k-nearest neighbors - - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + - 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) -- ### 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) + - **2-3-4 Trees (aka 2-4 trees)** -- ### Network Flows - - [Ford-Fulkerson in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) - - [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) - - [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) + - 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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [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) -- ### Disjoint Sets & Union Find - - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) - - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + - **N-ary (K-ary, M-ary) trees** -- ### 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) + - 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) -- ### 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) + - **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) + - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) + - [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) -- ### 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) - - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) +* ### k-D Trees -- ### 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) + - great for finding number of points in a rectangle or higher dimension object + - a good fit for k-nearest neighbors + - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) -- ### Discrete math - - see videos below +* ### Skip lists -- ### 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: - - Books: - - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) - - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) - - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - - Data School: http://www.dataschool.io/ + - "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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [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 + + - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + +* ### 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) + - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) + +* ### 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: + - Books: + - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) + - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) + - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) + - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - Data School: http://www.dataschool.io/ --- @@ -1782,85 +1848,89 @@ 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? -- **SOLID** - - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) - - [ ] 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 but 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) +- **SOLID** + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] 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 but 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) +* **Union-Find** -- **Union-Find** - - [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) + - [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) -- **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) +* **More Dynamic Programming** (videos) -- **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) + - [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) -- 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) +* **Advanced Graph Processing** (videos) -- [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) + - [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) -- **String Matching** - - 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): - - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) - - 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) - - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be - - nice explanation of tries - - can be skipped +* MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos): -- **Sorting** + - [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) - - 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) +* [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) + +* **String Matching** + + - 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): + - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - 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) + - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be + - nice explanation of tries + - can be skipped + +* **Sorting** + + - 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) ## Video Series @@ -1881,7 +1951,8 @@ Sit back and enjoy. "Netflix and skill" :P - [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) - CSE373 - Analysis of Algorithms (25 videos) - - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) + + - [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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) @@ -1920,7 +1991,8 @@ Sit back and enjoy. "Netflix and skill" :P - [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) - [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) - - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) + + - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) - [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) @@ -1935,35 +2007,34 @@ Sit back and enjoy. "Netflix and skill" :P - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - - [implemented in Go](https://godoc.org/github.com/thomas11/csp) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) - [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? + - 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? - [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) + - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) - [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - - The Dynamo paper kicked off the NoSQL revolution + - The Dynamo paper kicked off the NoSQL revolution - [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) - [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) - [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) - - paper not available + - 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) + - [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) + - [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: 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) - ## LICENSE [CC-BY-SA-4.0](./LICENSE.txt) From f312a5335558b9ec55f64b827998ec7b4f4b383c Mon Sep 17 00:00:00 2001 From: Tony Date: Sun, 1 Mar 2020 13:32:16 -0600 Subject: [PATCH 170/263] Revert "Removed broken video link." This reverts commit eddd1d557939d4ba7dd3e88c856e7953f427067d. --- README.md | 2375 ++++++++++++++++++++++++++--------------------------- 1 file changed, 1152 insertions(+), 1223 deletions(-) diff --git a/README.md b/README.md index be2fc2c..481d56a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ > The items listed here will prepare you well for a technical interview at just about any software company, > including the giants: Amazon, Facebook, Google, and Microsoft. > -> _Best of luck to you!_ +> *Best of luck to you!*
Translations: @@ -78,49 +78,49 @@ If you want to be a reliability engineer or operations engineer, study more from - [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) + - [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) + - [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) - - balanced search trees (general concept, not details) - - traversals: preorder, inorder, postorder, BFS, DFS + - [Trees - Notes & Background](#trees---notes--background) + - [Binary search trees: BSTs](#binary-search-trees-bsts) + - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) + - balanced search trees (general concept, not details) + - traversals: preorder, inorder, postorder, BFS, DFS - [Sorting](#sorting) - - selection - - insertion - - heapsort - - quicksort - - merge sort + - selection + - insertion + - heapsort + - quicksort + - merge sort - [Graphs](#graphs) - - directed - - undirected - - adjacency matrix - - adjacency list - - traversals: BFS, DFS + - directed + - undirected + - adjacency matrix + - adjacency list + - traversals: BFS, DFS - [Even More Knowledge](#even-more-knowledge) - - [Recursion](#recursion) - - [Dynamic Programming](#dynamic-programming) - - [Object-Oriented Programming](#object-oriented-programming) - - [Design Patterns](#design-patterns) - - [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) - - [Testing](#testing) - - [Scheduling](#scheduling) - - [String searching & manipulations](#string-searching--manipulations) - - [Tries](#tries) - - [Floating Point Numbers](#floating-point-numbers) - - [Unicode](#unicode) - - [Endianness](#endianness) - - [Networking](#networking) + - [Recursion](#recursion) + - [Dynamic Programming](#dynamic-programming) + - [Object-Oriented Programming](#object-oriented-programming) + - [Design Patterns](#design-patterns) + - [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) + - [Testing](#testing) + - [Scheduling](#scheduling) + - [String searching & manipulations](#string-searching--manipulations) + - [Tries](#tries) + - [Floating Point Numbers](#floating-point-numbers) + - [Unicode](#unicode) + - [Endianness](#endianness) + - [Networking](#networking) - [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) - [Final Review](#final-review) - [Coding Question Practice](#coding-question-practice) @@ -137,43 +137,43 @@ If you want to be a reliability engineer or operations engineer, study more from - [Additional Books](#additional-books) - [Additional Learning](#additional-learning) - - [Compilers](#compilers) - - [Emacs and vi(m)](#emacs-and-vim) - - [Unix command line tools](#unix-command-line-tools) - - [Information theory](#information-theory-videos) - - [Parity & Hamming Code](#parity--hamming-code-videos) - - [Entropy](#entropy) - - [Cryptography](#cryptography) - - [Compression](#compression) - - [Computer Security](#computer-security) - - [Garbage collection](#garbage-collection) - - [Parallel Programming](#parallel-programming) - - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - - [A\*](#a) - - [Fast Fourier Transform](#fast-fourier-transform) - - [Bloom Filter](#bloom-filter) - - [HyperLogLog](#hyperloglog) - - [Locality-Sensitive Hashing](#locality-sensitive-hashing) - - [van Emde Boas Trees](#van-emde-boas-trees) - - [Augmented Data Structures](#augmented-data-structures) - - [Balanced search trees](#balanced-search-trees) - - AVL trees - - Splay trees - - Red/black trees - - 2-3 search trees - - 2-3-4 Trees (aka 2-4 trees) - - N-ary (K-ary, M-ary) trees - - B-Trees - - [k-D Trees](#k-d-trees) - - [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-videos) - - [Geometry, Convex hull](#geometry-convex-hull-videos) - - [Discrete math](#discrete-math) - - [Machine Learning](#machine-learning) + - [Compilers](#compilers) + - [Emacs and vi(m)](#emacs-and-vim) + - [Unix command line tools](#unix-command-line-tools) + - [Information theory](#information-theory-videos) + - [Parity & Hamming Code](#parity--hamming-code-videos) + - [Entropy](#entropy) + - [Cryptography](#cryptography) + - [Compression](#compression) + - [Computer Security](#computer-security) + - [Garbage collection](#garbage-collection) + - [Parallel Programming](#parallel-programming) + - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) + - [A*](#a) + - [Fast Fourier Transform](#fast-fourier-transform) + - [Bloom Filter](#bloom-filter) + - [HyperLogLog](#hyperloglog) + - [Locality-Sensitive Hashing](#locality-sensitive-hashing) + - [van Emde Boas Trees](#van-emde-boas-trees) + - [Augmented Data Structures](#augmented-data-structures) + - [Balanced search trees](#balanced-search-trees) + - AVL trees + - Splay trees + - Red/black trees + - 2-3 search trees + - 2-3-4 Trees (aka 2-4 trees) + - N-ary (K-ary, M-ary) trees + - B-Trees + - [k-D Trees](#k-d-trees) + - [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-videos) + - [Geometry, Convex hull](#geometry-convex-hull-videos) + - [Discrete math](#discrete-math) + - [Machine Learning](#machine-learning) - [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - [Video Series](#video-series) - [Computer Science Courses](#computer-science-courses) @@ -200,6 +200,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr **Create a new branch so you can check items like this, just put an x in the brackets: [x]** + Fork a branch and follow the commands below `git checkout -b progress` @@ -220,6 +221,7 @@ I'm using Github's special markdown flavor, including tasks lists to check progr [More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + ## Don't feel you aren't smart enough - Successful software engineers are smart, but many have an insecurity that they aren't smart enough. @@ -234,6 +236,7 @@ Sometimes the classes are not in session so you have to wait a couple of months, I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos. I like using university lectures. + ## Interview Process & General Interview Prep - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) @@ -241,22 +244,22 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) - [ ] 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) + - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [ ] 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) + - [ ] [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) - [ ] Cracking the Facebook Coding Interview - - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) - - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) + - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) - [ ] Prep Course: - - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. - - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. - - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): - - A free Python centric data structures and algorithms course. - - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): - - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. + - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): + - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. + - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. + - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - A free Python centric data structures and algorithms course. + - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. ## Pick One Language for the Interview @@ -276,7 +279,6 @@ Here is an article I wrote about choosing a language for the interview: [Pick On 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/ @@ -291,11 +293,11 @@ This is a shorter list than what I used. This is abbreviated to save you time. ### Interview Prep - [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - - answers in C++ and Java - - this is a good warm-up for Cracking the Coding Interview - - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) + - answers in C++ and Java + - this is a good warm-up for Cracking the Coding Interview + - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - answers in Java ### If you have tons of extra time: @@ -304,8 +306,8 @@ Choose one: - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) - [ ] Elements of Programming Interviews (Java version) - - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) + - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) ### Language Specific @@ -330,24 +332,25 @@ If you have a better recommendation for C++, please let me know. Looking for a c ### Java - [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - videos with book content (and Sedgewick!) on coursera: - - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) - - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) + - videos with book content (and Sedgewick!) on coursera: + - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) + - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) OR: - [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - - by Goodrich, Tamassia, Goldwasser - - used as optional text for CS intro course at UC Berkeley - - see my book report on the Python version below. This book covers the same topics. + - by Goodrich, Tamassia, Goldwasser + - used as optional text for CS intro course at UC Berkeley + - see my book report on the Python version below. This book covers the same topics. ### Python - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - - by Goodrich, Tamassia, Goldwasser - - I loved this book. It covered everything and more. - - Pythonic code - - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ + - by Goodrich, Tamassia, Goldwasser + - I loved this book. It covered everything and more. + - Pythonic code + - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ + ## Before you Get Started @@ -386,17 +389,17 @@ same card and answer it several times correctly before you really know it. Repet your brain. An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. -It's user-friendly, available on all platforms and has a cloud sync system. It costs \$25 on iOS but is free on other platforms. +It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) -### 3. Start doing coding interview questions while you're learning data structures and algorithms, +### 3. Start doing coding interview questions while you're learning data structures and algorithms, -You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, -and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding -linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem, -or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge, -but how you apply the knowledge. There are several books and sites I recommend. +You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, +and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding +linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem, +or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge, +but how you apply the knowledge. There are several books and sites I recommend. See here for more: [Coding Question Practice](#coding-question-practice) ### 4. Review, review, review @@ -407,7 +410,7 @@ Take a break from programming problems for a half hour and go through your flash ### 5. Focus -There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music +There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music without lyrics and you'll be able to focus pretty well. ## What you won't see covered @@ -423,8 +426,7 @@ These are prevalent technologies but not part of this study 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 - 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) @@ -434,7 +436,6 @@ Each day I take one subject from the list below, watch videos about that subject You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). 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 or Java)) - 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) @@ -442,10 +443,9 @@ Why code in all of these? 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) + - [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. @@ -454,19 +454,18 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Prerequisite Knowledge - [ ] **Learn C** - - - C is everywhere. You'll see examples in books, lectures, videos, _everywhere_ while you're studying. - - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - This is a short book, but it will give you a great handle on the C language and if you practice it a little - you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - - [answers to questions](https://github.com/lekkas/c-algorithms) + - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. + - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - This is a short book, but it will give you a great handle on the C language and if you practice it a little + you'll quickly get proficient. Understanding C helps you understand how programs and memory work. + - [answers to questions](https://github.com/lekkas/c-algorithms) - [ ] **How computers process a program:** - - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) - - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) - - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) - - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) - - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) + - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) + - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) + - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) ## Algorithmic complexity / Big-O / Asymptotic analysis @@ -477,8 +476,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [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) + - [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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) - [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) @@ -487,300 +486,287 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) - [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) - [ ] TopCoder (includes recurrence relations and master theorem): - - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) - - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) + - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) + - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) - [ ] [Cheat sheet](http://bigocheatsheet.com/) ## Data Structures - ### Arrays - - - Implement an automatically resizing vector. - - [ ] Description: - - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) - - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - - [ ] 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) + - Implement an automatically resizing vector. + - [ ] Description: + - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) + - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) + - [ ] 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 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - - [ ] [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: + - [ ] Description: + - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [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 + - [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://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - - [ ] Will not implement. Implementing with array is trivial. + - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) + - [ ] Will not implement. Implementing with array is trivial. - ### Queue - - - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - - [ ] 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) + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) + - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) + - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) + - [ ] 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) - - [ ] Videos: + - [ ] Online Courses: + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [ ] [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) - - [ ] [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://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - - [ ] [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) + - [ ] 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/competitive-programming/tutorials/binary-search/) - - [ ] Implement: - - binary search (on sorted array of integers) - - binary search using recursion + - [ ] [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/competitive-programming/tutorials/binary-search/) + - [ ] Implement: + - binary search (on sorted array of integers) + - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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]() - - [ ] 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](https://bits.stephan-brumme.com/) - - [ ] [The Bit Twiddler Interactive](https://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) - - [ ] swap values: - - [Swap](https://bits.stephan-brumme.com/swap.html) - - [ ] absolute value: - - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://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) + - [ ] swap values: + - [Swap](https://bits.stephan-brumme.com/swap.html) + - [ ] absolute value: + - [Absolute Integer](https://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) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - - BFS notes: - - level order (BFS, using queue) - - time complexity: O(n) - - space complexity: best: O(1), worst: O(n/2)=O(n) - - DFS 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) + - [ ] [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) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS notes: + - level order (BFS, using queue) + - time complexity: O(n) + - space complexity: best: O(1), worst: O(n/2)=O(n) + - DFS 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 + - [ ] [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]() - - [ ] [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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) - - [ ] [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). + - 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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [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). ## 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/) + - 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. - [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - - - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) - - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) - - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) - - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) - - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) - [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - - - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) - - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) - - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) - - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) - [ ] UC Berkeley: - - - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) - - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) - - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) - - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) - [ ] [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) @@ -791,35 +777,33 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Selection Sort (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) - [ ] Merge sort code: - - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) - - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) + - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) - [ ] Quick sort code: - - - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) - - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) - - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) - [ ] 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. + - [ ] 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. - [ ] Not required, but I recommended them: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) - - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) - - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) - - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) - - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) - - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) - - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - - [ ] [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) + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [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) As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) @@ -829,328 +813,312 @@ If you need more detail on this subject, see "Sorting" section in [Additional De Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. - Notes: - - - There are 4 basic ways to represent a graph in memory: - - objects and pointers - - adjacency matrix - - adjacency list - - adjacency map - - 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. + - There are 4 basic ways to represent a graph in memory: + - objects and pointers + - adjacency matrix + - adjacency list + - adjacency map + - 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. - [ ] MIT(videos): - - - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) - [ ] 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) + - [ ] [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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) - - [ ] [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 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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [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) + - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - 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 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 ## 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 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 - - - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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) + - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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) - ### Object-Oriented Programming - - - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] SOLID OOP Principles: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] SOLID OOP Principles: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) - ### 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) - - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-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) + - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) -* ### 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) +- ### 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 +- ### 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-Completeness (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 Norvig 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. - - 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-Completeness (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 Norvig 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-) -* ### Caches +- ### Processes and Threads + - [ ] Computer Science 162 - Operating Systems (25 videos): + - for processes and threads see videos 1-11 + - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 + - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - [Scheduling (video)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) + - 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 the 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) - - [ ] 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-) +- ### 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) + - [ ] 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) -* ### Processes and Threads +- ### Scheduling + - in an OS, how it works + - can be gleaned from Operating System videos - - [ ] Computer Science 162 - Operating Systems (25 videos): - - for processes and threads see videos 1-11 - - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 - - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - - 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 the 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) +- ### String searching & manipulations + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) + - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) -* ### Testing + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - - 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) - - [ ] 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) +- ### 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. + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [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/competitive-programming/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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) -* ### Scheduling +- ### Floating Point Numbers + - [ ] 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) - - in an OS, how it works - - can be gleaned from Operating System videos +- ### 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/) -* ### String searching & manipulations +- ### Endianness + - [ ] [Big And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. - - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) - - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) - - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) - - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) - - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - -* ### 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. - - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) - - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) - - [ ] [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/competitive-programming/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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - -* ### Floating Point Numbers - - - [ ] 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) - -* ### 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://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. - -* ### Networking - - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - - otherwise, this is just good to know - - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) - - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) - - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) - - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) - - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) - - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) - - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) - - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) - - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) - - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) - - [ ] Sockets: - - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) +- ### Networking + - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** + - otherwise, this is just good to know + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) + - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) + - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) + - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) + - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) + - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] Sockets: + - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) ## System Design, Scalability, Data Handling **You can expect system design questions if you have 4+ years of experience.** - 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. + 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. - Considerations: - - 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 + - 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**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [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) @@ -1164,99 +1132,99 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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/) - [ ] Consensus Algorithms: - - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) - - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) - - [ ] [Easy-to-read paper](https://raft.github.io/) - - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) + - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: - - You don't need all of these. Just pick a few that interest you. - - [ ] [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/competitive-programming/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 (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) - - [ ] [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) - - [ ] [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](#video-series) section. + - You don't need all of these. Just pick a few that interest you. + - [ ] [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/competitive-programming/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 (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) + - [ ] [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) + - [ ] [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](#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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - - [cheat sheet](https://github.com/jwasham/coding-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 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/) + - review: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/coding-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 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/) --- @@ -1266,9 +1234,9 @@ Graphs can be used to represent many problems in computer science, so this secti It's nice if you want a refresher often. - [ ] Series of 2-3 minutes short subject videos (23 videos) - - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) + - [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) + - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) @@ -1281,7 +1249,6 @@ Now that you know all the computer science topics above, it's time to practice a **Coding question practice is not about memorizing answers to programming problems.** Why you need to practice doing programming problems: - - problem recognition, and where the right data structures and algorithms fit in - gathering requirements for the problem - talking your way through the problem like you will in the interview @@ -1295,7 +1262,7 @@ interview books, too, but I found this outstanding: No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil +I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil and eraser. ![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) @@ -1310,12 +1277,13 @@ Supplemental: **Read and Do Programming Problems (in this order):** - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C, C++ and Java + - answers in C, C++ and Java - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - answers in Java See [Book List above](#book-list) + ## Coding exercises/challenges Once you've learned your brains out, put those brains to work. @@ -1325,12 +1293,10 @@ Take coding challenges every day, as many as you can. - [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) Coding Interview Question Videos: - - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) Challenge sites: - - [LeetCode](https://leetcode.com/) - [TopCoder](https://www.topcoder.com/) - [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) @@ -1345,25 +1311,25 @@ Challenge sites: - [Codechef](https://www.codechef.com/) Challenge repos: - - [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) Mock Interviews: - - [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. + ## 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) + - [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) ## Your Resume - See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed + ## Be thinking of for when the interview comes Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. @@ -1424,421 +1390,389 @@ You're never really done. These are here so you can dive into a topic you find interesting. - [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - - an oldie but a goodie + - an oldie but a goodie - [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - a modern option + - a modern option - [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) - [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns + - a gentle introduction to design patterns - [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - - aka the "Gang Of Four" book, or GOF - - the canonical design patterns book + - aka the "Gang Of Four" book, or GOF + - the canonical design patterns book - [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - Can rent it on kindle - - Answers: - - [Solutions]() - - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) - - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - Can rent it on kindle + - 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) - [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - - These chapters are worth the read to give you a nice foundation: - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - These chapters are worth the read to give you a nice foundation: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization - [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - aka CLR, sometimes CLRS, because Stein was late to the game + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - aka CLR, sometimes CLRS, because Stein was late to the game - [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - - - For a richer, more up-to-date (2017), but longer treatment + - For a richer, more up-to-date (2017), but longer treatment - [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture. + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture. ## Additional Learning - - I added them to help you become a well-rounded software engineer, and to be aware of certain + + I added them to help you become a well-rounded software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox. - ### Compilers - - - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - - [Harvard 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 a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard 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) - ### Emacs and vi(m) - - - 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) + - 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 - - - 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/) + - 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. + - [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) + - [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) + - 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) + - 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) + - 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) - ### 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 (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 - - - [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) + - [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) + - [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) - ### 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 Started](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/) - - [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 Started](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/) - -- ### 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) +- ### 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) - ### Fast Fourier Transform - - - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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/) + - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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 (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) - - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) + - Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k) + - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) - ### HyperLogLog - - - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) - ### Locality-Sensitive Hashing - - - used to determine the similarity of documents - - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. - - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) + - used to determine the similarity of documents + - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### 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) + - [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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) + - [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) - ### Balanced search trees + - Know at 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) - - Know at 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) - - **AVL trees** + - **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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - MIT Lecture: Splay Trees: + - Gets very mathy, but watch the last 10 minutes for sure. + - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - - 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) + - **Red/black trees** + - these are a translation of a 2-3 tree (see below) + - 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) + - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) - - **Splay trees** + - **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) - - 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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - - 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-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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [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) - - **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) - - these are a translation of a 2-3 tree (see below) - - 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) - - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) + - **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) + - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) + - [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) - - **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) +- ### k-D Trees + - great for finding number of points in a rectangle or higher dimension object + - a good fit for k-nearest neighbors + - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - - **2-3-4 Trees (aka 2-4 trees)** +- ### 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) - - 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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - - [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) +- ### Network Flows + - [Ford-Fulkerson in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) - - **N-ary (K-ary, M-ary) trees** +- ### Disjoint Sets & Union Find + - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) - - 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) +- ### 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) - - **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) - - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) - - [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) +- ### 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) -* ### k-D Trees +- ### 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) + - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) - - great for finding number of points in a rectangle or higher dimension object - - a good fit for k-nearest neighbors - - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) +- ### 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) -* ### Skip lists +- ### Discrete math + - see videos below - - "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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) - - [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 - - - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) - - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) - -* ### 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) - - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) - -* ### 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: - - Books: - - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) - - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) - - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - - Data School: http://www.dataschool.io/ +- ### 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: + - Books: + - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) + - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) + - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) + - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - Data School: http://www.dataschool.io/ --- @@ -1848,89 +1782,85 @@ 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? -- **SOLID** - - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) - - [ ] 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 but 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) +- **SOLID** + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] 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 but 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) -* **Union-Find** - - [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) +- **Union-Find** + - [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) -* **More Dynamic Programming** (videos) +- **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) - - [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) -* **Advanced Graph Processing** (videos) +- 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) - - [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) +- [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) -* MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos): +- **String Matching** + - 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): + - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - 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) + - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be + - nice explanation of tries + - can be skipped - - [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) +- **Sorting** -* [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) - -* **String Matching** - - - 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): - - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) - - 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) - - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be - - nice explanation of tries - - can be skipped - -* **Sorting** - - - 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) + - 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) ## Video Series @@ -1951,8 +1881,7 @@ Sit back and enjoy. "Netflix and skill" :P - [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) - CSE373 - Analysis of Algorithms (25 videos) - - - [Skiena lectures from Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) + - [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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) @@ -1991,8 +1920,7 @@ Sit back and enjoy. "Netflix and skill" :P - [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) - [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) - - - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) + - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) - [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) @@ -2007,34 +1935,35 @@ Sit back and enjoy. "Netflix and skill" :P - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - - [implemented in Go](https://godoc.org/github.com/thomas11/csp) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) - [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? + - 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? - [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) + - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) - [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - - The Dynamo paper kicked off the NoSQL revolution + - The Dynamo paper kicked off the NoSQL revolution - [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) - [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) - [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) - - paper not available + - 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) + - [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) + - [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: 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) + ## LICENSE [CC-BY-SA-4.0](./LICENSE.txt) From cf4c737fe9c8e318a6beefd1bbb19e7933f7b872 Mon Sep 17 00:00:00 2001 From: Tony Date: Sun, 1 Mar 2020 13:33:55 -0600 Subject: [PATCH 171/263] Removed broken video link. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 481d56a..50fa3ee 100644 --- a/README.md +++ b/README.md @@ -1002,7 +1002,6 @@ Graphs can be used to represent many problems in computer science, so this secti - Modern concurrency constructs with multicore processors - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - - [Scheduling (video)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) - 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 the 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. From 175856a3eb717e5a1bedf3ff3e01e7f3afe9a208 Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 28 Mar 2020 18:03:58 -0700 Subject: [PATCH 172/263] Adds Nick White LeetCode video playlist. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 50fa3ee..ba6d3f3 100644 --- a/README.md +++ b/README.md @@ -1294,6 +1294,10 @@ Take coding challenges every day, as many as you can. Coding Interview Question Videos: - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + - Super for walkthroughs of problem solutions. +- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - These are my new favorite. You can watch several in a short time. + - Good explanations of solution and the code. Challenge sites: - [LeetCode](https://leetcode.com/) From 219cf60866f7140255b9974d86be16582be91799 Mon Sep 17 00:00:00 2001 From: flyotlin Date: Sun, 29 Mar 2020 21:33:03 +0800 Subject: [PATCH 173/263] 0329 first commit --- translations/README-tw.md | 705 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 705 insertions(+) create mode 100644 translations/README-tw.md diff --git a/translations/README-tw.md b/translations/README-tw.md new file mode 100644 index 0000000..8f22942 --- /dev/null +++ b/translations/README-tw.md @@ -0,0 +1,705 @@ +# Coding Interview University + +> 原先我為了成為一個軟體工程師而建立這份簡單的讀書主題清單(To-do list), +> 但這份To-do list隨著時間而膨脹成這個樣子。 [做完這份To-do list上的每個目標後,我成為了Amazon的工程師](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> 你或許不需要像我讀一樣多。但是,每個讓你成為一位稱職工程師所需要的知識都在這裡了。 +> +> 我每天讀8~12小時的書,這樣持續了好幾個月。這是我的故事:[為什麼我為了Google面試而讀了8個月](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> +> 在這份To-do list內的主題會讓你擁有足夠的知識去面對幾乎每家軟體公司的專業面試, +> 這些公司包含了科技巨獸,例如Amazon、Facebook、Google,或者是Microsoft。 +> +> *祝你好運!* + +
+翻譯: + +- [中文版本](translations/README-cn.md) +- [Tiếng Việt - Vietnamese](translations/README-vi.md) +- [Español](translations/README-es.md) +- [Português Brasileiro](translations/README-ptbr.md) + +
+ +
+正在翻譯的項目: + +- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) +- [עברית](https://github.com/jwasham/coding-interview-university/issues/82) +- [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) +- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) +- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) +- [French](https://github.com/jwasham/coding-interview-university/issues/89) +- [Russian](https://github.com/jwasham/coding-interview-university/issues/87) +- [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) +- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) +- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) +- [Polish](https://github.com/jwasham/coding-interview-university/issues/122) +- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) +- [Thai](https://github.com/jwasham/coding-interview-university/issues/156) +- [Greek](https://github.com/jwasham/coding-interview-university/issues/166) +- [Italian](https://github.com/jwasham/coding-interview-university/issues/170) +- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) +- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257) + +
+ +## What is it? + +這是我為了從一個網頁開發者(自學,並且沒有任何與資工、電腦科學有關的學位),成為一個大公司軟體工程師,持續好幾個月的讀書計畫。 + +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) + +這是為了那些**新手軟體工程師**,或者是那些想要轉換跑道,從軟體/網頁開發者轉為軟體工程師(需要資工、電腦科學的知識)的人。 + +請注意就算你有多年的軟體/網頁開發經驗,那些著名的大型軟體公司,像是Google、Amazon、Facebook,或是Microsoft事實上把軟體/網頁開發(Software/Web Development)與軟體工程(Software Engineering)視為不同,而後者需要的是電腦科學/資訊工程的知識。 + +如果你想成為一個可靠的工程師或者是Operation Engineer,閱讀並且學習更多這份清單中的The Optional List(裡面包含網路與資訊安全的知識)。 + +--- + +## 目錄 + +- [What is it?](#what-is-it) +- [Why use it?](#why-use-it) +- [How to use it](#how-to-use-it) +- [不要覺得自己不夠聰明](#dont-feel-you-arent-smart-enough(不要覺得自己不夠聰明)) +- [關於影片資源](#about-video-resources(關於影片資源)) +- [面試過程&面試準備](#interview-process--general-interview-prep(面試過程&面試準備)) +- [面試時專精一種程式語言](#面試時專精一種程式語言(Pick-One-Language-for-the-Interview)) +- [書單](#書單(book-list)) +- [在你開始之前](#在你開始之前) +- [這份清單沒有包含的內容](#這份清單沒有包含的內容) +- [先備知識](#先備知識) +- [每日計畫](#每日計畫) +- [演算法複雜度(Algorithmic complexity) / Big-O / 漸進分析(Asymptotic analysis)](#演算法複雜度(Algorithmic-complexity)--Big-O--漸進分析(Asymptotic-analysis)) +- [資料結構](#資料結構) + - [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) + - balanced search trees (general concept, not details) + - traversals: preorder, inorder, postorder, BFS, DFS +- [排序](#排序) + - selection + - insertion + - heapsort + - quicksort + - merge sort +- [Graphs](#graphs) + - directed + - undirected + - adjacency matrix + - adjacency list + - traversals: BFS, DFS +- [Even More Knowledge](#even-more-knowledge) + - [Recursion](#recursion) + - [Dynamic Programming](#dynamic-programming) + - [Object-Oriented Programming](#object-oriented-programming) + - [Design Patterns](#design-patterns) + - [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) + - [Testing](#testing) + - [Scheduling](#scheduling) + - [String searching & manipulations](#string-searching--manipulations) + - [Tries](#tries) + - [Floating Point Numbers](#floating-point-numbers) + - [Unicode](#unicode) + - [Endianness](#endianness) + - [Networking](#networking) +- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) +- [Final Review](#final-review) +- [Coding Question Practice](#coding-question-practice) +- [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 Resources + +- [Additional Books](#additional-books) +- [Additional Learning](#additional-learning) + - [Compilers](#compilers) + - [Emacs and vi(m)](#emacs-and-vim) + - [Unix command line tools](#unix-command-line-tools) + - [Information theory](#information-theory-videos) + - [Parity & Hamming Code](#parity--hamming-code-videos) + - [Entropy](#entropy) + - [Cryptography](#cryptography) + - [Compression](#compression) + - [Computer Security](#computer-security) + - [Garbage collection](#garbage-collection) + - [Parallel Programming](#parallel-programming) + - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) + - [A*](#a) + - [Fast Fourier Transform](#fast-fourier-transform) + - [Bloom Filter](#bloom-filter) + - [HyperLogLog](#hyperloglog) + - [Locality-Sensitive Hashing](#locality-sensitive-hashing) + - [van Emde Boas Trees](#van-emde-boas-trees) + - [Augmented Data Structures](#augmented-data-structures) + - [Balanced search trees](#balanced-search-trees) + - AVL trees + - Splay trees + - Red/black trees + - 2-3 search trees + - 2-3-4 Trees (aka 2-4 trees) + - N-ary (K-ary, M-ary) trees + - B-Trees + - [k-D Trees](#k-d-trees) + - [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-videos) + - [Geometry, Convex hull](#geometry-convex-hull-videos) + - [Discrete math](#discrete-math) + - [Machine Learning](#machine-learning) +- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +- [Video Series](#video-series) +- [Computer Science Courses](#computer-science-courses) +- [Papers](#papers) + +--- + +## Why use it? + +當我開始這項計畫的時候,我不知道Stack與Heap的差別,不知道時間複雜度(Big-O),不知道樹狀結構(Tree),也不知道如何遍歷一個圖(Graph)。過去如果我需要寫一個排序演算法(Sorting Algorithm),那個code一定是個災難。我過去都用程式語言中內建的資料結構(Data Structure),對於資料結構裡面的實作方法跟原理我完全沒有任何的概念。除非我的程式碰到了"out of memory"的錯誤我才會去找解決方法,否則我從不特別去花費心思管理程式中的記憶體配置。雖然我有用過多維陣列(Multidimensional Arrays)跟關聯陣列(Associative Arrays),但我從來沒有自己時做過資料結構。 + +這是個遠大的計畫,或許要花上你數個月的時間。如果你對其中大部分的東西已經很熟悉的話,那麼執行這項計畫所花費的時間將減少許多。 + +## How to use it + +下面每項是大綱,你需要從上到下的去理解這些大綱。 + +我用了Github-flavored markdown語法,其中包含了可以確定完成進度的任務清單。 + + +**建立一個新的Branch以使用Github-flavored markdown的勾選功能。只要在[]中打x,像是: [x]** + + + Fork一個branch,並且跟隨以下的指令 + +`git checkout -b progress` + +`git remote add jwasham https://github.com/jwasham/coding-interview-university` + +`git fetch --all` + + 在你完成了一些目標後,在框框中打x + +`git add .` + +`git commit -m "Marked x"` + +`git rebase jwasham/master` + +`git push --force` + +[更多有關Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + +## Don't feel you aren't smart enough(不要覺得自己不夠聰明) + +- 大多數成功的軟體工程師都非常聰明,但他們都有一種覺得自己不夠聰明的不安全感。 +- [The myth of the Genius Programmer(天才Programmer的迷思)](https://www.youtube.com/watch?v=0SARbwvhupQ) +- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech(不要單打獨鬥:面對科技中的隱形怪物)](https://www.youtube.com/watch?v=1i8ylq4j_EY) + +## About Video Resources(關於影片資源) + +有些影片要註冊Coursera或者Edx的課程後才能觀看,也就是所謂的MOOCs。有時候某些課程需要等待好幾個月才能註冊,這期間你無法觀看這些課程的影片。 + + 我非常喜歡那些大學的線上課程。感謝你們幫忙加入一些免費、可隨時觀看的公開資源,像是那些線上課程的YouTube影片。 + +## Interview Process & General Interview Prep(面試過程&面試準備) + +- [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] 如何錄取Big Tech(Google, Amazon, Facebook, Apple): + - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) +- [ ] Coding面試解密: + - [ ] [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) +- [ ] Facebook Coding面試解密: + - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) +- [ ] 準備課程: + - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): + - 從前Google面試官身上學習如何充實自己,讓自己能夠應付軟體工程師的面試。 + - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - Python面試準備課程,其中包含了資料結構、演算法、模擬面試等等。 + - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - Python免費資料結構及演算法課程。 + - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - 超過100種實際的資料結構及演算法練習。名師指導讓你準備好面試以及工作的實際情況。 + +## 面試時專精一種程式語言(Pick One Language for the Interview) + +在面試的coding階段,你可以選擇任何一個你擅長的程式語言。但多數大公司僅有以下選擇: + +- C++ +- Java +- Python + +你也可以選擇以下的程式語言,但可能會有某些限制: + +- JavaScript +- Ruby + +我之前寫過一篇關於在面試時選擇程式語言的文章:[Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) + +你需要非常熟練這個程式語言,並且對他非常了解。 + +閱讀更多有關程式語言的選擇: +- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ +- http://blog.codingforinterviews.com/best-programming-language-jobs/ + +[程式語言相關資源](programming-language-resources.md) + +因為我正在學習C、C++以及Python,所以下面會出現一些有關於這些程式語言的資源。 + +## 書單(Book List) + +為了節省你的時間,以下是已經縮減過的書單。 + +### 面試準備(Interview Prep) + +- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - 附有解答 in C++ and Java + - 內含很棒的coding面試解密 + - 不會很困難,大多問題都比面試中的還簡單(從我讀過的) +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - 附有解答 in Java + +### 如果你有額外的時間(If you have tons of extra time): + +選擇以下其中一個: + +- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [ ] 程式面試精華 (Java版) + - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) + +### 程式語言精進 + +***面試時你需要選擇一種程式語言(詳如上述)*** + +以下是一些我對程式語言的建議。這邊沒有所有種類程式語言的資源,所以歡迎補充。 + +如果你讀過以下其中一本,你應該已經具備了所有解決coding問題所需要的資料結構與演算法的知識。除非你想要複習,否則**你可以跳過這個計畫中所有的教學影片**。 + +[額外程式語言精進資源](programming-language-resources.md) + +### C++ + +我沒讀過這兩本書,但他們頗受好評。作者是Sedgewick,他超讚的! + +- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +如果你有更好的C++書籍,請告訴我。我正在蒐集全面性的資源。 + +## Java + +- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - 在Coursera平台上有影片、書籍內容、(以及Sedgewick!) + - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) + - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +或者: + +- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - 作者:Goodrich、Tamassia、Goldwasser + - 被作為UC Berkeley資工系入門課程的補充教材 + - 看看下面我對這本書的Python版的書評。兩本書都包含了相同的主題。 + +### Python + +- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - 作者:Goodrich、Tamassia、Goldwasser + - 我超愛這本書。他包含了所有東西。 + - 很Python的Code! + - 我的書評: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ + + +## 在你開始之前 + +這份清單隨著時間越來越大。當然,這也同時代表我越來越難以掌握他的整體內容。 + +以下是一些清單內的錯誤,希望能讓你避免這些錯誤,並且有更好的學習體驗。 + +### 1. 你沒辦法記住所有事情 + +我看了數小時的影片,同時也寫下了大量的筆記。但過了幾個月後,大部分的東西都消失的無影無蹤。我花了三天重新看過我的筆記,並做了小字卡幫助我複習他們。 + +請閱讀以下的文章以免重蹈覆轍: + +[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). + +有人推薦給我的課程(但我還沒看過:( ): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) + +### 2. 使用小字卡 + +為了解決剛剛提到的遺忘問題,我自己寫了一個小字卡網站。網站上可以新增兩種小字卡,一般的以及程式碼。 +每一種類的小字卡都有不同的格式。 + +這個小字卡網站在製作時便是以行動裝置優先的方式設計的,好處是無論我在何處,我都可以在我的手機與平板上複習。 + +製作屬於自己的免費小字卡: + +- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) +- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): +- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db): + +我的小字卡資料庫中包含了組合語言、Python的小知識、機器學習以及統計。這些內容已經超出了原本他的預設。 + +**關於小字卡**:當你第一次知道答案後,別馬上把那張小字卡標記為已知。反覆複習這張小字卡,直到每次都能答對後才是真正學會了這個問題。反覆的動作會讓這個知識深深地烙印在你的腦海內。 + +這裡有個替代我小字卡的網站[Anki](http://ankisrs.net/),很多人向我推薦過他。這個網站用同一個字卡重複出現的方式讓你牢牢地記住他。 +這個網站非常容易使用,支援多平台,並且有雲端同步功能。在iOS平台上收費25美金,其他平台免費。 + +這是我用Anki這個網站裡的格式所儲存的小字卡資料庫: https://ankiweb.net/shared/info/25173560 (感謝 [@xiewenya](https://github.com/xiewenya)) + +### 3. 學習資料結構與演算法的同時,也要做一些Coding面試中常出現的問題 + +把你學過的東西應用在解題上面,否則你很快就會忘了他們。這是一個過來人的經驗談。一旦你自認學會了一個主題,像是Linked List之類的,打開任何一本Coding面試問題書籍,做一些裡面有關Linked List的問題。接著繼續讀後面的主題。然後,再回頭反覆做有關Linked List、遞迴或者其他任何東西(原文為Recursion,非Recursive)的題目。但切記一定在讀這些資料結構、演算法的同時,也要實際去寫一些有關這些東西的題目。公司錄取你是為了能有即戰力能夠上戰場,而非一個紙上談兵的人。這邊我覺得還不錯的書籍和網站。更多: [Coding Question Practice](#coding-question-practice) + +### 4. 複習,複習,再複習 + +我自己寫了一些有關於ASCII Code、網路OSI模型、Big-O(時間複雜度)等等的小抄。我有空的時候就會把他們拿出來看一看複習一下。 + +打Code累了的話就休息半個小時,並且複習你的小字卡。 + +### 5. 專注 + +能夠干擾你,浪費你寶貴時間的東西很多。因此,專注集中精神實在很難。放點純音樂能幫上一些忙。 + +## 這份清單沒有包含的內容 + +以下為普遍但沒有包含在這份清單內的技術: + +- SQL +- Javascript +- HTML、CSS,以及其他前後端的技術 + +## 每日計畫 + +每個主題所花費的時間都不盡相同,有些只要一天,有些需要花上數天。有些主題只有單純的知識而無包含實作。 + +每天我選擇下面其中一個主題,看跟該主題相關的影片,再用下面的程式語言實作: +- C - 用使用了struct *或者其他東西當作參數的struct以及函數 +- C++ - 不要使用內建的東西 +- C++ - 用C++內建的東西,像是STL的Linked List,std::list。 +- Python - 使用內建的東西(為了練習Python) +- 寫一些測試來驗證自己寫的東西是正確的,像是用assert()等簡單的方法。 +- 你也可以用Java來練習,上面只是我自己的方法。 + +你不需要學會所有的程式語言,你只需要專精在某個程式語言 [one language for the interview](#pick-one-language-for-the-interview). + +為什麼要這樣寫Code? +- 練習,練習,再練習,直到我對他產生厭惡感,並且能輕鬆無誤地寫出那些Code。(有些東西需要特別記住,像是在邊界的時候會出現問題(edge cases),或者一些小細節) +- 全部自己來(像是手動分配/釋放記憶體,不要依賴語言中的garbage collection的功能(除了Python或者Java)) +- 利用語言中內建的東西及工具,之後在實際工作的時候才能得心應手(畢竟我不想在工作時手刻一個Linked List)。 + +我沒有時間做每個主題中的每個東西,但我會盡力而為。 + +下面是我自己寫的程式碼: + - [C](https://github.com/jwasham/practice-c) + - [C++](https://github.com/jwasham/practice-cpp) + - [Python](https://github.com/jwasham/practice-python) + + 你不需要記住每個演算法裡面的內容。 + + 試試看把程式碼寫在白板或者紙上而不是電腦上。接著用一些測資來測試他。最後才用電腦來驗證。 + + ## 先備知識 + +- [ ] **學習C++** + - C語言無所不在。在你學習的過程中,幾乎任何一本書、課程,或者影片中你都能看到他的身影。 + - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - 這本書還滿輕薄的,但他能讓你有初步對於C語言的認識。看著這本書並且練習,你能更快地掌握C語言。理解C語言能讓你更了解程式的運作以及內部記憶體配置。 + - [answers to questions](https://github.com/lekkas/c-algorithms) +- [ ] **一個程式在電腦中是如何運作的:** + - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) + - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) + - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) + +## 演算法複雜度(Algorithmic complexity) / Big-O / 漸進分析(Asymptotic analysis) + +- 沒有任何東西能實作 +- 這個主題有許多影片,看到你真正了解他為止。你可以隨時回來複習他。 +- 如果這些課程太過數學的話,你可以去看看最下面離散數學的影片,他能讓你更了解這些數學背後的來源以及原理。 +- [ ] [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: + - [影片](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [投影片](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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) +- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) +- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) +- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) +- [ ] TopCoder (includes recurrence relations and master theorem): + - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) + - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) +- [ ] [Cheat sheet](http://bigocheatsheet.com/) + +## 資料結構 +- ### 陣列 + - 實作一個可以自動調整大小的陣列(動態陣列vector) + - [ ] (動態)陣列背後原理: + - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) + - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) + - [ ] 實作動態陣列(可變、可動態調整大小的陣列) + - [ ] 練習在程式中用陣列以及指標,透過計算指標而存取該內容,而不是直接用索引。 + - [ ] 直接動態生成一個新的陣列 + - 可以生成一個int型別的陣列,但不要使用語言提供的功能 + - 從16,或者更大的數開始寫,像是2的次方 - 16、32、64、128。 + - [ ] size() - 陣列中元素個數 + - [ ] capacity() - 陣列能存的最大元素個數 + - [ ] is_empty() + - [ ] at(index) - 傳回該索引值的元素,附有邊界檢查(boundary check) + - [ ] push(item) + - [ ] insert(index, item) - 把元素插入該索引值,把原本在該索引值的元素往右邊移動。 + - [ ] prepend(item) - 可以把元素插入索引值為0的地方。 + - [ ] pop() - 移除陣列中最後一個元素,並回傳該元素的值。 + - [ ] delete(index) - 刪除在該索引值的元素,並且把右邊剩下元素全部往左移。 + - [ ] remove(item) - 從陣列中尋找該數值,並且移除他(就算陣列中數個地方都有這個數值)。 + - [ ] find(item) - 從陣列中尋找該數值,並且傳回最前面找到該數值的索引值,如果沒有則傳回-1。 + - [ ] resize(nex_capacity) // private function + - 當陣列已經用盡了所有容量後,把陣列的容量*2。 + - 如果移除掉一個元素後,陣列實際大小是最大容量的1/4,則把陣列容量減半。 + - [ ] 時間複雜度 + - O(1) 在陣列末端插入/刪除元素 + - O(n) 在任何地方插入/刪除元素 + - [ ] 空間複雜度 + - 在記憶體中的存放位置是連續的,這種儲存方式有助於存取的性能。 + - 所需空間 = (陣列容量,>=n) * 元素所需大小,但就算結果為2n,實際上仍算成O(n) + +- ### Linked Lists + - [ ] Linked Lists背後原理: + - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) + - 沒有完整的code,裡面只包含了用struct實作節點的方式以及其記憶體配置。 + - [ ] Linked List vs 陣列: + - [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) + - [ ] 小心!: 你需要一些關於指標的指標(Pointer to pointer)的知識: + (當你回傳一個指標到函式,這個動作可能會改變指標所指向的地址) + 這個頁面僅提供基本對於指標的指標的認識。我不推薦這個遍歷linked list的方式,因為他用的方式太過神奇,所以可讀性以及維護性並不好。 + - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) + - [ ] 實作Linked list (我做了有末端指標(tail pointer)的版本以及無末端指標的版本): + - [ ] size() - 回傳linked list裡面的元素個數 + - [ ] empty() - 回傳型態:bool,如果linked list為空,回傳true + - [ ] value_at(index) - 回傳索引值為index的元素的數值,第一個元素索引值為0,以此類推 + - [ ] push_front(value) - 從linked list的起始點加入新的元素 + - [ ] pop_front() - 移除第一個元素,並且回傳該元素的數值 + - [ ] push_back(value) - 在linked list末端加入新元素 + - [ ] pop_back() - 移除最後一個元素,並且回傳該元素的數值 + - [ ] front() - 回傳第一個元素的數值 + - [ ] back() - 回傳最後一個元素的數值 + - [ ] insert(index, value) - 把新元素插入到該索引值,而新元素指向原本在該索引值的元素。 + - [ ] erase(index) - 刪除該索引值的元素(節點) + - [ ] value_n_from_end(n) - 回傳從末端開始計算的第n個元素的數值 + - [ ] reverse() - 反轉該linked list + - [ ] remove_value(value) - 刪除第一個為該數值的元素(意即7 2 2 1,要刪除2的話,只刪除index:1的那個2) + - [ ] 雙向linked List + - [背後原理(影片)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) + - 不需實作 + +- ### Stack(堆疊) + - [ ] [Stacks(影片)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [使用Stacks先進後出(Last-In First-Out)(影片)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) + - [ ] 無須實作,可以用陣列實作,但這樣太過簡單了。 + +- ### Queue(佇列) + - [ ] [使用Queues(先進先出)First-In First-Out(影片)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) + - [ ] [Queue(影片)](https://www.coursera.org/lecture/data-structures/queues-EShpq) + - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) + - [ ] [Priority Queues(影片)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) + - [ ] 使用linked list實作,包含末端指標(tail pointer): + - enqueue(value) - 在queue末端加入元素 + - dequeue() - 刪除當時queue中最早進入的元素(意即queue中第一個元素),並且回傳該元素的值。 + - empty() + - full() + - [ ] 複雜度: + - + - enqueue: O(1) (平均情況,無論對於用linked list或陣列實作的方法) + - dequeue: O(1) (linked list與陣列) + - empty: O(1) (linked list與陣列) + +- ### 雜湊表(Hash table) + - [ ] 影片: + - [ ] [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) + - [ ] 線上開放式課程: + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [ ] [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 table): + - [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) + + - [ ] 實作雜湊表(用陣列以及線性探測(linear probing)) + - hash(k, m) - m:雜湊表的大小 + - add(key, value) - 如果key已經存在,則更新該key的value + - exists(key) + - get(key) + - remove(key) + +## 更多 + +- ### 二分搜尋法(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/competitive-programming/tutorials/binary-search/) + - [ ] 實作: + - 二分搜尋法 (對已經排列好的數列) + - 用遞迴(recursion)的方法實作二分搜尋法 + +- ### 位元運算(Bitwise operations) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] 實際了解如何用下列的位元運算子來操作每個位元: &, |, ^, ~, >>, << + - [ ] [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](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) + - [ ] 一補數與二補數 + - [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) + - [ ] swap values: + - [Swap](https://bits.stephan-brumme.com/swap.html) + - [ ] 絕對值: + - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) + +## 樹狀結構(Tree) + +- ### Trees - 重點與背景知識 + - [ ] [Series: Core Trees (影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) + - [ ] [Series: Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) + - basic tree construction + - traversal + - manipulation algorithms + - [ ] [BFS(breadth-first search) and DFS(depth-first search) (影片)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS(廣度優先搜尋)重點: + - 每一層的順序(BFS,用queue) + - 時間複雜度: O(n) + - 空間複雜度: 最佳: O(1), 最糟: O(n/2)=O(n) + - DFS(深度優先搜尋)重點: + - 時間複雜度: 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) + - 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) + - [ ] 實作: + - [ ] insert // 把數值插入到二元搜尋樹當中 + - [ ] get_node_count // get count of values stored + - [ ] print_values // 把二元搜尋樹中的數值從小到大輸出 + - [ ] delete_tree + - [ ] is_in_tree // 如果給定的數值位於二元搜尋樹當中則回傳true + - [ ] get_height // 回傳該節點內的高度(單一節點的樹高度為1) + - [ ] get_min // 回傳二元搜尋樹當中的最小值 + - [ ] get_max // 回傳二元搜尋樹當中的最大值 + - [ ] is_binary_search_tree + - [ ] delete_value + - [ ] get_successor // 回傳二元搜尋樹當中大小在給定數值後一位的數值,如果沒有則回傳-1 + +- ### Heap / Priority Queue / Binary Heap + - 一般將此資料結構以樹的方式視覺化,但實際上是以線性的方式儲存(陣列、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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] 實作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 + - 重點: using a min heap instead would save operations, but double the space needed (cannot do in-place). + +## 排序 \ No newline at end of file From 36ce4ffa4afe86aae9990a300a7e4154e1347a46 Mon Sep 17 00:00:00 2001 From: Anthony Morris Date: Mon, 30 Mar 2020 07:43:49 -0700 Subject: [PATCH 174/263] Update hash table course link The [Coursera data structures course](https://www.coursera.org/learn/data-structures) covers hash tables in week 4, not week 3. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ba6d3f3..f560ccf 100644 --- a/README.md +++ b/README.md @@ -604,7 +604,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [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) + - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/4) - [ ] [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) From 8df6438c623f38f38b42a7ae8b3bffeab9a5c513 Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 4 Apr 2020 11:48:04 -0700 Subject: [PATCH 175/263] Adds FisherCoder links. --- README.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f560ccf..ba43599 100644 --- a/README.md +++ b/README.md @@ -1298,18 +1298,24 @@ Coding Interview Question Videos: - [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) - These are my new favorite. You can watch several in a short time. - Good explanations of solution and the code. +- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) Challenge sites: - [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) -- [HackerEarth](https://www.hackerearth.com/) + - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing. + - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode) + - See Nick White Videos above for short code-throughs - [HackerRank](https://www.hackerrank.com/) -- [Codility](https://codility.com/programmers/) +- [TopCoder](https://www.topcoder.com/) - [InterviewCake](https://www.interviewcake.com/) - [Geeks for Geeks](http://www.geeksforgeeks.org/) - [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) + +Language-learning sites, with challenges: +- [Codewars](http://www.codewars.com) +- [Codility](https://codility.com/programmers/) +- [HackerEarth](https://www.hackerearth.com/) - [Sphere Online Judge (spoj)](http://www.spoj.com/) - [Codechef](https://www.codechef.com/) From f67b2e470311c9dedb7e7b75916df4732b481feb Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 4 Apr 2020 11:48:55 -0700 Subject: [PATCH 176/263] Simple text updates. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ba43599..cea06f0 100644 --- a/README.md +++ b/README.md @@ -1296,8 +1296,8 @@ Coding Interview Question Videos: - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) - Super for walkthroughs of problem solutions. - [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) - - These are my new favorite. You can watch several in a short time. - Good explanations of solution and the code. + - You can watch several in a short time. - [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) Challenge sites: From 9cb94e93fc6243043026ebdc9e166b2ceef4ee28 Mon Sep 17 00:00:00 2001 From: Michal Date: Wed, 8 Apr 2020 21:57:41 +0200 Subject: [PATCH 177/263] delete readme-pl deleted --- translations/README-pl.md | 1977 ------------------------------------- 1 file changed, 1977 deletions(-) delete mode 100644 translations/README-pl.md diff --git a/translations/README-pl.md b/translations/README-pl.md deleted file mode 100644 index a657f1e..0000000 --- a/translations/README-pl.md +++ /dev/null @@ -1,1977 +0,0 @@ -# Coding Interview University - Uniwersytet przygotowujący do rozmowy kwalifikacyjnej w Google - -Oryginał (angielski): https://github.com/jwasham/coding-interview-university - ->**Pierwotnie, to była mała lista rzeczy do nauki, ale urosła ona do dużych rozmiarów, jak to można dzisiaj zobaczyć. -Praca w Google była główną motywacją, stąd nazwa. [Nie dostałem się do Google'a](https://googleyasheck.com/i-didnt-get-hired-heres-why/), -ale nazwa pozostanie taka sama, bo zmiana mogła by zmylić wielu z was. Zagadnienia zawarte tutaj, przygotują was do pracy w każdej firmie, -wliczając w to gigantów: Amazon, Microsoft, Google i Facebook.** -> ->*Powodzenia!* - -Tłumaczenia: -- [中文版本](translations/README-cn.md) -- Niekompletne tłumaczenia: - - [Español](https://github.com/jwasham/coding-interview-university/issues/80) - - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) - - [עברית](https://github.com/jwasham/coding-interview-university/issues/82) - - [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) - - [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) - - [Vietnamese](https://github.com/jwasham/coding-interview-university/issues/92) - - [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) - - [French](https://github.com/jwasham/coding-interview-university/issues/89) - - [Russian](https://github.com/jwasham/coding-interview-university/issues/87) - - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) - - [Brazilian Portuguese](https://github.com/jwasham/coding-interview-university/issues/113) - - [Korean](https://github.com/jwasham/coding-interview-university/issues/118) - - [Polish](https://github.com/jwasham/coding-interview-university/issues/122) - -## Co to jest? -Jest to mój wielomiesięczny program nauczania mający na celu awans z poziomu web developera (samouka, bez studiów informatycznych) -do poziomu inżyniera oprogramowania w Google. - -![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) - -Znajdziesz tutaj wiele rzeczy związanych z Google, ale starałem się uogólnić tę listę, aby była przydatna dla każdego. - -Ta długa lista została napisana na podstawie porad i wskazówek Google'a, więc znajdziesz tu rzeczy, które musisz wiedzieć. -Są tutaj też dodatkowe rzeczy, które dodałem na końcu, mogące pojawić się na rozmowie kwalifikacyjnej lub okazać się pomocne -w rozwiązywaniu problemów. Wiele pozycji jest z "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" od Steva Yegge i czasem są też przepisane słowo w słowo z notek Google'a. - -Wybrałem to co musisz wiedzieć spośród rzeczy zalecanych przez Yegge'a. Poprawiłem także listę wymagań podanych przez niego -na podstawie informacji, które otrzymałem od swojego kontaktu w Google. Projekt jest napisany z myślą o **początkujących inżynierach oprogramowania** -lub tych, którzy przerzucają się z oprogramowania/web-devu na inżynierę oprogramowania, gdzie informatyka (computer science) jest potrzebna. Jeżeli masz wiele lat doświadczenia, spodziewaj się trudniejszej rozmowy kwalifikacyjnej. -[Przeczytaj więcej tutaj (EN)](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/). - -Weź pod uwagę fakt, iz Google traktuje oprogramowanie/web-dev inaczej niż inżynierę oprogramowania -i wymagają szczegołowej wiedzy z zarkesu informatyki. - -Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemów, ucz się -więcej z dodatkowej listy (sieć, bezpieczeństwo). - ---- - -## Table of Contents - -- [Co to jest?](#co-to-jest) -- [Dlaczego?](#dlaczego) -- [Jak używać?](#jak-używać) -- [Don't feel you aren't smart enough](#dont-feel-you-arent-smart-enough) -- [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) -- [Book List](#book-list) -- [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) - - balanced search trees (general concept, not details) - - traversals: preorder, inorder, postorder, BFS, DFS -- [Sorting](#sorting) - - selection - - insertion - - heapsort - - quicksort - - merge sort -- [Graphs](#graphs) - - directed - - undirected - - adjacency matrix - - adjacency list - - traversals: BFS, DFS -- [Even More Knowledge](#even-more-knowledge) - - [Recursion](#recursion) - - [Dynamic Programming](#dynamic-programming) - - [Object-Oriented Programming](#object-oriented-programming) - - [Design Patterns](#design-patterns) - - [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) - - [Papers](#papers) - - [Testing](#testing) - - [Scheduling](#scheduling) - - [Implement system routines](#implement-system-routines) - - [String searching & manipulations](#string-searching--manipulations) -- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) -- [Final Review](#final-review) -- [Coding Question Practice](#coding-question-practice) -- [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 Books](#additional-books) -- [Additional Learning](#additional-learning) - - [Compilers](#compilers) - - [Floating Point Numbers](#floating-point-numbers) - - [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) (if you have networking experience or want to be a systems engineer, expect questions) - - [Computer Security](#computer-security) - - [Garbage collection](#garbage-collection) - - [Parallel Programming](#parallel-programming) - - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - - [Fast Fourier Transform](#fast-fourier-transform) - - [Bloom Filter](#bloom-filter) - - [HyperLogLog](#hyperloglog) - - [Locality-Sensitive Hashing](#locality-sensitive-hashing) - - [van Emde Boas Trees](#van-emde-boas-trees) - - [Augmented Data Structures](#augmented-data-structures) - - [Tries](#tries) - - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees) - - [Balanced search trees](#balanced-search-trees) - - AVL trees - - Splay trees - - Red/black trees - - 2-3 search trees - - 2-3-4 Trees (aka 2-4 trees) - - N-ary (K-ary, M-ary) trees - - B-Trees - - [k-D Trees](#k-d-trees) - - [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) - ---- - -## Dlaczego? - -Kiedy zaczynałem ten projekt, nie odróżniałem stacka od heapu, nie wiedziałem o żadnej notacji "duże O", nic o drzewkach, -ani jak przeszukiwać graf. Gdybym miał napisać algorym sortujący, mówię Ci, byłby zły. Każda struktura danych, którą używałem -była wpudowana w język, kompletnie nie wiedziałem jak działają. Nigdy nie musiałem zarządzać pamięcią, dopóki proces nie wyrzucił -błędu o "braku pamięci". Używałem kilku wielowymiarowych tablic i tysięcy tablic asocjacyjnych w swoim życiu, ale nigdy -nie stworzyłem struktury od podstaw. - -To długi plan. Może zająć Ci nawet kilka miesięcy. Jeśli jednak jesteś zaznajomiony z tymi rzeczami, zajmie Ci to o wiele mniej czasu. - -## Jak używać? - -Wszystko co znajdziesz poniżej jest planem, powinieneś zaznaczać wpisy od góry do dołu. - -Używam specjalniej, GitHubowej odmiany markdowna. - -**Stwórz nową gałąź (branch), abyś mógł zaznaczać element stawiając x w nawiasie, tj. [x]** - - Zforkuj galąź i wpisz poniższe polecenia - -`git checkout -b progress` - -`git remote add jwasham https://github.com/jwasham/coding-interview-university` - -`git fetch --all` - - Zaznacz wszystkie pola X-em kiedy skończysz. - -`git add . ` - -`git commit -m "Marked x" ` - -`git rebase jwasham/master ` - -`git push --force ` - -[Więcej o markdownie na GitHubie](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) - -## Don't feel you aren't smart enough -- Successful software engineers are smart, but many have an insecurity that they aren't smart enough. -- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) -- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) - -## About Video Resources - -Some videos are available only by enrolling in a Coursera, EdX, or Lynda.com class. These are called MOOCs. -Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. Lynda.com courses are not free. - - I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos. - I like using university lectures. - - -## Interview Process & General Interview Prep - -- [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) -- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [ ] [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) - -- [ ] Prep Course: - - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. - -## Pick One Language for the Interview - -You can use a language you are comfortable in to do the coding part of the interview, but for large companies, 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/ - -[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. - -## Book List - -This is a shorter list than what I used. This is abbreviated to save you time. - -### Interview Prep - -- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C++ and Java - - recommended in Google candidate coaching - - this is a good warm-up for Cracking the Coding Interview - - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) -- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java - - recommended on the [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/) - -If you have tons of extra time: - -- [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - - all code is in C++, very good if you're looking to use C++ in your interview - - a good book on problem solving in general. - -### Computer Architecture - -If short on time: - -- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented HLA, so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - - These chapters are worth the read to give you a nice foundation: - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization - -If you have more time (I want this book): - -- [ ] [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/) - - For a richer, more up-to-date (2011), but longer treatment - -### Language Specific - -**You need to choose a language for the interview (see above).** Here are my recommendations by language. I don't have resources for all languages. I welcome additions. - -If you read though one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. -**You can skip all the video lectures in this project**, unless you'd like a review. - -[Additional language-specific resources here.](programming-language-resources.md) - -### C++ - -I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. - -- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) -- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) - -If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. - -### Java - -- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - videos with book content (and Sedgewick!): - - [Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) - - [Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) - -OR: - -- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - - by Goodrich, Tamassia, Goldwasser - - used as optional text for CS intro course at UC Berkeley - - see my book report on the Python version below. This book covers the same topics. - -### Python - -- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - - by Goodrich, Tamassia, Goldwasser - - I loved this book. It covered everything and more. - - Pythonic code - - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ - - -### Optional Books - -**Some people recommend these, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:** - -- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - To quote Yegge: "More than any other book it helped me understand just how astonishingly commonplace - (and important) graph problems are – they should be part of every working programmer's toolkit. The book also - covers basic data structures and sorting algorithms, which is a nice bonus. But the gold mine is the second half - of the book, which is a sort of encyclopedia of 1-pagers on zillions of useful problems and various ways to solve - them, without too much detail. Almost every 1-pager has a simple picture, making it easy to remember. This is a - great way to learn how to identify hundreds of problem types." - - Can rent it on kindle - - 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) - -- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - To quote Yegge: "But if you want to come into your interviews *prepped*, then consider deferring your application until you've made your way through that book." - - Half.com is a great resource for textbooks at good prices. - - aka CLR, sometimes CLRS, because Stein was late to the game - -- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. - -- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ - - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. - - Would rather spend time on coding problems from another book or online coding problems. - - -## 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. - -Read please so you won't make my mistakes: - -[Retaining Computer Science Knowledge](https://googleyasheck.com/retaining-computer-science-knowledge/) - -### 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, wherever I am. - -Make your own for free: - -- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) -- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): -- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.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. - -**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. - -An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. -It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. - -My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) - -### 3. Review, review, review - -I keep a set of cheat sheets 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 are 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. - -You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). - -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 or paper, not a computer. Test with some sample inputs. Then test it out on a computer. - -## Prerequisite Knowledge - -- [ ] **Learn C** - - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. - - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - This is a short book, but it will give you a great handle on the C language and if you practice it a little - you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - - [answers to questions](https://github.com/lekkas/c-algorithms) - -- [ ] **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) - -## 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) - - [UCBerkley CS61B - Linear and Multi-Dim Arrays (video)](https://youtu.be/Wp8oiO_CZZE?t=15m32s) - - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) - - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - - [ ] 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://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - - [ ] Will not implement. Implementing with array is trivial. - -- ### Queue - - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - - [ ] [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://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - - [ ] 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://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - - [ ] [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/coding-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). - -## 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. - -- [ ] [Sedgewick - Mergesort (5 videos)](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [1. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=1) - - [ ] [2. Bottom up Mergesort](https://www.youtube.com/watch?v=HGOIGUYjeyk&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9&index=2) - - [ ] [3. Sorting Complexity](https://www.youtube.com/watch?v=WvU_mIWo0Ac&index=3&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [4. Comparators](https://www.youtube.com/watch?v=7MvC1kmBza0&index=4&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [5. Stability](https://www.youtube.com/watch?v=XD_5iINB5GI&index=5&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - -- [ ] [Sedgewick - Quicksort (4 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [1. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&index=1&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [2. Selection](https://www.youtube.com/watch?v=CgVYfSyct_M&index=2&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [3. Duplicate Keys](https://www.youtube.com/watch?v=WBFzOYJ5ybM&index=3&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [4. System Sorts](https://www.youtube.com/watch?v=rejpZ2htBjE&index=4&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - -- [ ] 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) - -- [ ] [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) - -- [ ] Merge sort code: - - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) - - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) - - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) -- [ ] Quick sort code: - - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) - - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) - - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) - -- [ ] 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. - -- [ ] Not required, but I recommended them: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [1. Strings in Java](https://www.youtube.com/watch?v=zRzU-FWsjNU&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=6) - - [ ] [2. Key Indexed Counting](https://www.youtube.com/watch?v=CtgKYmXs62w&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=5) - - [ ] [3. Least Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=2pGVq_BwPKs&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=4) - - [ ] [4. Most Significant Digit First String Radix Sort](https://www.youtube.com/watch?v=M3cYNY90R6c&index=3&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [5. 3 Way Radix Quicksort](https://www.youtube.com/watch?v=YVl58kfE6i8&index=2&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [6. Suffix Arrays](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53&index=1) - - [ ] [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) - -If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - -## 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 - - **NOTE:** DP is a valuable technique, but it is not mentioned on any of the prep material Google provides. But you could get a problem where DP provides an optimal solution. So I'm including it. - - 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) - -- ### Object-Oriented Programming - - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] Object-Oriented Software Engineering: 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 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 but 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) - -- ### 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) - -- ### 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-Completeness (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 Norvig 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 processes 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 - - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - - [Scheduling (video)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) - - 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 the 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) - -- ### 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? - - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) - - [ ] [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) - - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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 - - [ ] [Sedgewick - Suffix Arrays (video)](https://www.youtube.com/watch?v=HKPrVm5FWvg) - - [ ] [Sedgewick - Substring Search (videos)](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [1. Introduction to Substring Search](https://www.youtube.com/watch?v=2LvvVFCEIv8&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=5) - - [ ] [2. Brute-Force Substring Search](https://www.youtube.com/watch?v=CcDXwIGEXYU&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=4) - - [ ] [3. Knuth-Morris Pratt](https://www.youtube.com/watch?v=n-7n-FDEWzc&index=3&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [4. Boyer-Moore](https://www.youtube.com/watch?v=fI7Ch6pZXfM&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66&index=2) - - [ ] [5. Rabin-Karp](https://www.youtube.com/watch?v=QzI0p6zDjK4&index=1&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - ---- - -## System Design, Scalability, Data Handling -- **You can expect system design questions if you have 4+ years of experience.** -- 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. -- 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) -- [ ] 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/coding-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 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/) - ---- - -## Final Review - - This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. - It's nice if you want a refresher often. - -- [ ] 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) -- [ ] [Sedgewick Videos - Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=2&view=50&sort=dd) - - [ ] [01. Union-Find](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) - - [ ] [02. Analysis of Algorithms](https://www.youtube.com/watch?v=ZN-nFW0mEpg&list=PLe-ggMe31CTf0_bkOhh7sa5uqeppp3Sr0) - - [ ] [03. Stacks and Queues](https://www.youtube.com/watch?v=TIC1gappbP8&list=PLe-ggMe31CTe-9jhnj3P_3mmrCh0A7iHh) - - [ ] [04. Elementary Sorts](https://www.youtube.com/watch?v=CD2AL6VO0ak&list=PLe-ggMe31CTe_5WhGV0F--7CK8MoRUqBd) - - [ ] [05. Mergesort](https://www.youtube.com/watch?v=4nKwesx_c8E&list=PLe-ggMe31CTeunC6GZHFBmQx7EKtjbGf9) - - [ ] [06. Quicksort](https://www.youtube.com/watch?v=5M5A7qPWk84&list=PLe-ggMe31CTeE3x2-nF1-toca1QpuXwE1) - - [ ] [07. Priority Queues](https://www.youtube.com/watch?v=G9TMe0KC0w0&list=PLe-ggMe31CTducy9LDiGVkdSv0NfiRwn5) - - [ ] [08. Elementary Symbol Tables](https://www.youtube.com/watch?v=up_nlilw3ac&list=PLe-ggMe31CTc3a8nKRDxFZZrWrBvkc9SG) - - [ ] [09. Balanced Search Trees](https://www.youtube.com/watch?v=qC1BLLPK_5w&list=PLe-ggMe31CTf7jHH_mFT50kayjCEA6Rhu) - - [ ] [10. Geometric Applications of BST](https://www.youtube.com/watch?v=Wl30aGAp6TY&list=PLe-ggMe31CTdBsRIw0hXln0hilRs-DqAx) - - [ ] [11. Hash Tables](https://www.youtube.com/watch?v=QA8fJGO-i9o&list=PLe-ggMe31CTcKxIRGqqThMts2eHtSrf11) -- [ ] [Sedgewick Videos - Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?flow=list&shelf_id=3&view=50) - - [ ] [01. Undirected Graphs](https://www.youtube.com/watch?v=GmVhD-mmMBg&list=PLe-ggMe31CTc0zDzANxl4I2MhMoRVlbRM) - - [ ] [02. Directed Graphs](https://www.youtube.com/watch?v=_z-JsVaUS40&list=PLe-ggMe31CTcEwaU8a1P1Gd95A77HV85K) - - [ ] [03. Minimum Spanning Trees](https://www.youtube.com/watch?v=t8fNk9tfVYY&list=PLe-ggMe31CTceUZxDesGfHGLE7kcSafqj) - - [ ] [04. Shortest Paths](https://www.youtube.com/watch?v=HoGSiB7tSeI&list=PLe-ggMe31CTePpG3jbeOTsnGUGZDKxgZD) - - [ ] [05. Maximum Flow](https://www.youtube.com/watch?v=rYIKlFstBqE&list=PLe-ggMe31CTduQ68XQ-sVj32wYJIspTma) - - [ ] [06. Radix Sorts](https://www.youtube.com/watch?v=HKPrVm5FWvg&list=PLe-ggMe31CTcNvUX9E3tQeM6ntrdR8e53) - - [ ] [07. Tries](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [08. Substring Search](https://www.youtube.com/watch?v=QzI0p6zDjK4&list=PLe-ggMe31CTdAdjXB3lIuf2maubzo9t66) - - [ ] [09. Regular Expressions](https://www.youtube.com/watch?v=TQWNQsJSPnk&list=PLe-ggMe31CTetTlJWouM42fyttyKPgSDh) - - [ ] [10. Data Compression](https://www.youtube.com/watch?v=at9tjpxcBh8&list=PLe-ggMe31CTciifRRo6yY0Yt0mzgIXXVZ) - - [ ] [11. Reductions](https://www.youtube.com/watch?v=Ow5x-ooMGv8&list=PLe-ggMe31CTe_yliW5vc3yO-dj1LSSDyF) - - [ ] [12. Linear Programming](https://www.youtube.com/watch?v=rWhcLyiLZLA&list=PLe-ggMe31CTdy6dKzMgkWFuTTN1H8B-E1) - - [ ] [13. Intractability](https://www.youtube.com/watch?v=6qcaaDp4cdQ&list=PLe-ggMe31CTcZCjluBHw53e_ek2k9Kn-S) - ---- - -## Coding Question Practice - -Now that you know all the computer science topics above, it's time to practice answering coding problems. - -**Coding question practice is not about memorizing answers to programming problems.** - -Why you need to practice doing programming problems: -- problem recognition, and where the right data structures and algorithms fit in -- gathering requirements for the problem -- talking your way through the problem like you will in the interview -- coding on a whiteboard or paper, not a computer -- coming up with time and space complexity for your solutions -- testing your solutions - -There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming -interview books, too, but I found this outstanding: -[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) - -[My Process for Coding Interview (Book) Exercises](https://googleyasheck.com/my-process-for-coding-interview-exercises/) - -No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a -large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. - -![my sofa whiteboard](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) - -Supplemental: - -- [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://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) -- [Exercises for getting better at a given language](http://exercism.io/languages) - -**Read and Do Programming Problems (in this order):** - -- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C, C++ and Java -- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java - -See [Book List above](#book-list) - -## 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. - -- [ ] [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/) - -Coding Interview Question Videos: -- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) -- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) - -Challenge sites: -- [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/) -- [Geeks for Geeks](http://www.geeksforgeeks.org/) -- [InterviewBit](https://www.interviewbit.com/invite/icjf) -- [Sphere Online Judge (spoj)](http://www.spoj.com/) - -Mock Interviews: -- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) -- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - -## 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) -- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed - - -## Be thinking of for when the interview comes - -Think of about 20 interview questions you'll get, along with 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 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 does 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! - -Keep learning. - -You're never really done. - ---- - - ***************************************************************************************************** - ***************************************************************************************************** - - Everything below this point is optional. - By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for - any software engineering job. You'll be a much more well-rounded software engineer. - - ***************************************************************************************************** - ***************************************************************************************************** - ---- - -## Additional Books - -- [ ] [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) - - an oldie but a goodie -- [ ] [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - a modern option -- [ ] [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) -- [ ] [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns -- [ ] [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - - aka the "Gang Of Four" book, or GOF - - the canonical design patterns book -- [ ] [UNIX and Linux System Administration Handbook, 4th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/) - -## Additional Learning - -- ### Compilers - - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - - [ ] [Harvard 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) - -- ### Floating Point Numbers - - [ ] 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) - -- ### 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 - - **if you have networking experience or want to be a systems engineer, expect questions** - - otherwise, this is just good to know - - [ ] [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) - - [ ] Sockets: - - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) - -- ### 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 - - [ ] [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) - -- ### 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 Started](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 - - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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/) - -- ### HyperLogLog - - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) - -- ### Locality-Sensitive Hashing - - used to determine the similarity of documents - - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. - - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - -- ### 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) - -- ### 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. - - [ ] [Sedgewick - Tries (3 videos)](https://www.youtube.com/playlist?list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [1. R Way Tries](https://www.youtube.com/watch?v=buq2bn8x3Vo&index=3&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [2. Ternary Search Tries](https://www.youtube.com/watch?v=LelV-kkYMIg&index=2&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ) - - [ ] [3. Character Based Operations](https://www.youtube.com/watch?v=00YaFPcC65g&list=PLe-ggMe31CTe9IyG9MB8vt5xUJeYgOYRQ&index=1) - - [ ] [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) - - - [ ] **Red/black trees** - - these are a translation of a 2-3 tree (see below) - - 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/) - - - [ ] **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) - - - [ ] **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) - - - [ ] **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) - - -- ### k-D Trees - - great for finding number of points in a rectangle or higher dimension object - - a good fit for k-nearest neighbors - - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - -- ### 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 - - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) - - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.youtube.com/watch?v=8mYfZeHtdNc&list=PLe-ggMe31CTexoNYnMhbHaWhQ0dvcy43t) - -- ### 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) - - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) - -- ### 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: - - Books: - - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) - - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) - - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - - 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? - -- [ ] **Union-Find** - - [ ] [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) - -- [ ] **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) - -- [ ] **String Matching** - - [ ] 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): - - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) - - [ ] 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) - - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be - - nice explanation of tries - - can be skipped - -- [ ] **Sorting** - - - [ ] 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) - -## 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 by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) - -- [ ] [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) - -- [ ] 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) - -- [ ] [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) - -- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - -- [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) - -- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) - - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) - -- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) - -- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) - -## 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 ace19f711f18ec2f00b7aa325ebc1076bdd3bb15 Mon Sep 17 00:00:00 2001 From: Michal Date: Wed, 8 Apr 2020 21:58:47 +0200 Subject: [PATCH 178/263] create readme-pl initial --- translations/README-pl.md | 1978 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1978 insertions(+) create mode 100644 translations/README-pl.md diff --git a/translations/README-pl.md b/translations/README-pl.md new file mode 100644 index 0000000..cea06f0 --- /dev/null +++ b/translations/README-pl.md @@ -0,0 +1,1978 @@ +# Coding Interview University + +> I originally created this as a short to-do list of study topics for becoming a software engineer, +> but it grew to the large list you see today. After going through this study plan, [I got hired +> as a Software Development Engineer at Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> You probably won't have to study as much as I did. Anyway, everything you need is here. +> +> I studied about 8-12 hours a day, for several months. This is my story: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> +> The items listed here will prepare you well for a technical interview at just about any software company, +> including the giants: Amazon, Facebook, Google, and Microsoft. +> +> *Best of luck to you!* + +
+Translations: + +- [中文版本](translations/README-cn.md) +- [Tiếng Việt - Vietnamese](translations/README-vi.md) +- [Español](translations/README-es.md) +- [Português Brasileiro](translations/README-ptbr.md) + +
+ +
+Translations in progress: + +- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) +- [עברית](https://github.com/jwasham/coding-interview-university/issues/82) +- [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) +- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) +- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) +- [French](https://github.com/jwasham/coding-interview-university/issues/89) +- [Russian](https://github.com/jwasham/coding-interview-university/issues/87) +- [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) +- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) +- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) +- [Polish](https://github.com/jwasham/coding-interview-university/issues/122) +- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) +- [Thai](https://github.com/jwasham/coding-interview-university/issues/156) +- [Greek](https://github.com/jwasham/coding-interview-university/issues/166) +- [Italian](https://github.com/jwasham/coding-interview-university/issues/170) +- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) +- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257) + +
+ +## What is it? + +This is my multi-month study plan for going from web developer (self-taught, no CS degree) to software engineer for a large company. + +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) + +This is meant for **new software engineers** or those switching from +software/web development to software engineering (where computer science knowledge is required). If you have +many years of experience and are claiming many years of software engineering experience, expect a harder interview. + +If you have many years of software/web development experience, note that large software companies like Google, Amazon, +Facebook and Microsoft view software engineering as different from software/web development, and they require computer science knowledge. + +If you want to be a reliability engineer or operations engineer, study more from the optional list (networking, security). + +--- + +## Table of Contents + +- [What is it?](#what-is-it) +- [Why use it?](#why-use-it) +- [How to use it](#how-to-use-it) +- [Don't feel you aren't smart enough](#dont-feel-you-arent-smart-enough) +- [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) +- [Book List](#book-list) +- [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) + - balanced search trees (general concept, not details) + - traversals: preorder, inorder, postorder, BFS, DFS +- [Sorting](#sorting) + - selection + - insertion + - heapsort + - quicksort + - merge sort +- [Graphs](#graphs) + - directed + - undirected + - adjacency matrix + - adjacency list + - traversals: BFS, DFS +- [Even More Knowledge](#even-more-knowledge) + - [Recursion](#recursion) + - [Dynamic Programming](#dynamic-programming) + - [Object-Oriented Programming](#object-oriented-programming) + - [Design Patterns](#design-patterns) + - [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) + - [Testing](#testing) + - [Scheduling](#scheduling) + - [String searching & manipulations](#string-searching--manipulations) + - [Tries](#tries) + - [Floating Point Numbers](#floating-point-numbers) + - [Unicode](#unicode) + - [Endianness](#endianness) + - [Networking](#networking) +- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) +- [Final Review](#final-review) +- [Coding Question Practice](#coding-question-practice) +- [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 Resources + +- [Additional Books](#additional-books) +- [Additional Learning](#additional-learning) + - [Compilers](#compilers) + - [Emacs and vi(m)](#emacs-and-vim) + - [Unix command line tools](#unix-command-line-tools) + - [Information theory](#information-theory-videos) + - [Parity & Hamming Code](#parity--hamming-code-videos) + - [Entropy](#entropy) + - [Cryptography](#cryptography) + - [Compression](#compression) + - [Computer Security](#computer-security) + - [Garbage collection](#garbage-collection) + - [Parallel Programming](#parallel-programming) + - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) + - [A*](#a) + - [Fast Fourier Transform](#fast-fourier-transform) + - [Bloom Filter](#bloom-filter) + - [HyperLogLog](#hyperloglog) + - [Locality-Sensitive Hashing](#locality-sensitive-hashing) + - [van Emde Boas Trees](#van-emde-boas-trees) + - [Augmented Data Structures](#augmented-data-structures) + - [Balanced search trees](#balanced-search-trees) + - AVL trees + - Splay trees + - Red/black trees + - 2-3 search trees + - 2-3-4 Trees (aka 2-4 trees) + - N-ary (K-ary, M-ary) trees + - B-Trees + - [k-D Trees](#k-d-trees) + - [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-videos) + - [Geometry, Convex hull](#geometry-convex-hull-videos) + - [Discrete math](#discrete-math) + - [Machine Learning](#machine-learning) +- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +- [Video Series](#video-series) +- [Computer Science Courses](#computer-science-courses) +- [Papers](#papers) + +--- + +## Why use it? + +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 multidimensional arrays in my life and +thousands of associative arrays, but I've never created data structures from scratch. + +It's a long plan. It may take you 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. + +**Create a new branch so you can check items like this, just put an x in the brackets: [x]** + + + Fork a branch and follow the commands below + +`git checkout -b progress` + +`git remote add jwasham https://github.com/jwasham/coding-interview-university` + +`git fetch --all` + + Mark all boxes with X after you completed your changes + +`git add .` + +`git commit -m "Marked x"` + +`git rebase jwasham/master` + +`git push --force` + +[More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + + +## Don't feel you aren't smart enough + +- Successful software engineers are smart, but many have an insecurity that they aren't smart enough. +- [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) +- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) + +## About Video Resources + +Some videos are available only by enrolling in a Coursera or EdX class. These are called MOOCs. +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 to add free and always-available public sources, such as YouTube videos to accompany the online course videos. + I like using university lectures. + + +## Interview Process & General Interview Prep + +- [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] 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) +- [ ] 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) +- [ ] Cracking the Facebook Coding Interview + - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) +- [ ] Prep Course: + - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): + - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. + - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. + - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - A free Python centric data structures and algorithms course. + - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. + +## Pick One Language for the Interview + +You can use a language you are comfortable in to do the coding part of the interview, but for large companies, these are solid choices: + +- C++ +- Java +- Python + +You could also use these, but read around first. There may be caveats: + +- JavaScript +- Ruby + +Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) + +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/ + +[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. + +## Book List + +This is a shorter list than what I used. This is abbreviated to save you time. + +### Interview Prep + +- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - answers in C++ and Java + - this is a good warm-up for Cracking the Coding Interview + - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - answers in Java + +### If you have tons of extra time: + +Choose one: + +- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [ ] Elements of Programming Interviews (Java version) + - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) + +### Language Specific + +**You need to choose a language for the interview (see above).** + +Here are my recommendations by language. I don't have resources for all languages. I welcome additions. + +If you read through one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. +**You can skip all the video lectures in this project**, unless you'd like a review. + +[Additional language-specific resources here.](programming-language-resources.md) + +### C++ + +I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. + +- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. + +### Java + +- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - videos with book content (and Sedgewick!) on coursera: + - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) + - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +OR: + +- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - by Goodrich, Tamassia, Goldwasser + - used as optional text for CS intro course at UC Berkeley + - see my book report on the Python version below. This book covers the same topics. + +### Python + +- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - by Goodrich, Tamassia, Goldwasser + - I loved this book. It covered everything and more. + - Pythonic code + - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-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 + +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. + +Read please so you won't make my mistakes: + +[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). + +A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) + +### 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, wherever I am. + +Make your own for free: + +- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) +- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): +- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.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. + +**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. + +An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. +It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. + +My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) + +### 3. Start doing coding interview questions while you're learning data structures and algorithms, + +You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, +and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding +linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem, +or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge, +but how you apply the knowledge. There are several books and sites I recommend. +See here for more: [Coding Question Practice](#coding-question-practice) + +### 4. Review, review, review + +I keep a set of cheat sheets 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. + +### 5. Focus + +There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music +without lyrics and you'll be able to focus pretty well. + +## What you won't see covered + +These are prevalent technologies but not part of this study plan: + +- 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. + +You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). + +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 or Java)) +- 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 or paper, not a computer. Test with some sample inputs. Then test it out on a computer. + +## Prerequisite Knowledge + +- [ ] **Learn C** + - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. + - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - This is a short book, but it will give you a great handle on the C language and if you practice it a little + you'll quickly get proficient. Understanding C helps you understand how programs and memory work. + - [answers to questions](https://github.com/lekkas/c-algorithms) + +- [ ] **How computers process a program:** + - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) + - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) + - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) + +## Algorithmic complexity / Big-O / Asymptotic analysis + +- Nothing to implement +- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review. +- 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. +- [ ] [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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) +- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) +- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) +- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) +- [ ] TopCoder (includes recurrence relations and master theorem): + - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) + - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) +- [ ] [Cheat sheet](http://bigocheatsheet.com/) + +## Data Structures + +- ### Arrays + - Implement an automatically resizing vector. + - [ ] Description: + - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) + - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) + - [ ] 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 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [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://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) + - [ ] Will not implement. Implementing with array is trivial. + +- ### Queue + - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) + - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) + - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) + - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) + - [ ] 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://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [ ] [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/4) + - [ ] [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/competitive-programming/tutorials/binary-search/) + - [ ] Implement: + - binary search (on sorted array of integers) + - binary search using recursion + +- ### Bitwise operations + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://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) + - [ ] swap values: + - [Swap](https://bits.stephan-brumme.com/swap.html) + - [ ] absolute value: + - [Absolute Integer](https://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) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS notes: + - level order (BFS, using queue) + - time complexity: O(n) + - space complexity: best: O(1), worst: O(n/2)=O(n) + - DFS 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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [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). + +## 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. + +- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) + +- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) + +- [ ] UC Berkeley: + - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + +- [ ] [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) + +- [ ] Merge sort code: + - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] Quick sort code: + - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + +- [ ] 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. + +- [ ] Not required, but I recommended them: + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [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) + +As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). +If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + +## Graphs + +Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. + +- Notes: + - There are 4 basic ways to represent a graph in memory: + - objects and pointers + - adjacency matrix + - adjacency list + - adjacency map + - 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. + +- [ ] MIT(videos): + - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + +- [ ] 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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [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) + +- 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 + +## 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 + - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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) + +- ### Object-Oriented Programming + - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] SOLID OOP Principles: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + +- ### 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) + - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) + + +- ### 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-Completeness (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 Norvig 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 processes and threads see videos 1-11 + - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 + - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - 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 the 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) + +- ### 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) + - [ ] 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 + +- ### String searching & manipulations + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) + - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + +- ### 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. + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [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/competitive-programming/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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + +- ### Floating Point Numbers + - [ ] 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) + +- ### 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://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. + +- ### Networking + - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** + - otherwise, this is just good to know + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) + - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) + - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) + - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) + - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) + - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] Sockets: + - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + +## System Design, Scalability, Data Handling + +**You can expect system design questions if you have 4+ years of experience.** + +- 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. +- Considerations: + - 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**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] [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/) +- [ ] Consensus Algorithms: + - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) +- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) +- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) +- [ ] Scalability: + - You don't need all of these. Just pick a few that interest you. + - [ ] [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/competitive-programming/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 (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) + - [ ] [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) + - [ ] [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](#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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/coding-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 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/) + +--- + +## Final Review + + This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. + It's nice if you want a refresher often. + +- [ ] 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) +- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +--- + +## Coding Question Practice + +Now that you know all the computer science topics above, it's time to practice answering coding problems. + +**Coding question practice is not about memorizing answers to programming problems.** + +Why you need to practice doing programming problems: +- problem recognition, and where the right data structures and algorithms fit in +- gathering requirements for the problem +- talking your way through the problem like you will in the interview +- coding on a whiteboard or paper, not a computer +- coming up with time and space complexity for your solutions +- testing your solutions + +There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming +interview books, too, but I found this outstanding: +[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) + +No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a +large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". +I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil +and eraser. + +![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) + +Supplemental: + +- [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) +- [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) +- [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) +- [Exercises for getting better at a given language](http://exercism.io/languages) + +**Read and Do Programming Problems (in this order):** + +- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - answers in C, C++ and Java +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - answers in Java + +See [Book List above](#book-list) + + +## 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. + +- [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) +- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) + +Coding Interview Question Videos: +- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + - Super for walkthroughs of problem solutions. +- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - Good explanations of solution and the code. + - You can watch several in a short time. +- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) + +Challenge sites: +- [LeetCode](https://leetcode.com/) + - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing. + - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode) + - See Nick White Videos above for short code-throughs +- [HackerRank](https://www.hackerrank.com/) +- [TopCoder](https://www.topcoder.com/) +- [InterviewCake](https://www.interviewcake.com/) +- [Geeks for Geeks](http://www.geeksforgeeks.org/) +- [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) + +Language-learning sites, with challenges: +- [Codewars](http://www.codewars.com) +- [Codility](https://codility.com/programmers/) +- [HackerEarth](https://www.hackerearth.com/) +- [Sphere Online Judge (spoj)](http://www.spoj.com/) +- [Codechef](https://www.codechef.com/) + +Challenge repos: +- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) + +Mock Interviews: +- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. +- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews +- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. + + +## 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) + +## Your Resume + +- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed + + +## Be thinking of for when the interview comes + +Think of about 20 interview questions you'll get, along with 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 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 does 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? +- How is work/life balance? + +## Once You've Got The Job + +Congratulations! + +Keep learning. + +You're never really done. + +--- + + ***************************************************************************************************** + ***************************************************************************************************** + + Everything below this point is optional. + By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for + any software engineering job. You'll be a much more well-rounded software engineer. + + ***************************************************************************************************** + ***************************************************************************************************** + +--- + +## Additional Books + + These are here so you can dive into a topic you find interesting. + +- [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) + - an oldie but a goodie +- [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) + - a modern option +- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) + - a gentle introduction to design patterns +- [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) + - aka the "Gang Of Four" book, or GOF + - the canonical design patterns book +- [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) +- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - Can rent it on kindle + - 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) +- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - These chapters are worth the read to give you a nice foundation: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization +- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - aka CLR, sometimes CLRS, because Stein was late to the game + +- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) + - For a richer, more up-to-date (2017), but longer treatment + +- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture. + +## Additional Learning + + I added them to help you become a well-rounded software engineer, and to be aware of certain + technologies and algorithms, so you'll have a bigger toolbox. + +- ### Compilers + - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard 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) + +- ### Emacs and vi(m) + - 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 + - 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) + +- ### 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 + - [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) + +- ### 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 Started](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/) + +- ### 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) + +- ### Fast Fourier Transform + - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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 (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) + +- ### HyperLogLog + - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + +- ### Locality-Sensitive Hashing + - used to determine the similarity of documents + - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) + +- ### 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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) + +- ### Balanced search trees + - Know at 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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - MIT Lecture: Splay Trees: + - Gets very mathy, but watch the last 10 minutes for sure. + - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + + - **Red/black trees** + - these are a translation of a 2-3 tree (see below) + - 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) + - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) + + - **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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [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) + + - **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) + + - **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) + - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) + - [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) + + +- ### k-D Trees + - great for finding number of points in a rectangle or higher dimension object + - a good fit for k-nearest neighbors + - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + +- ### 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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [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 + - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + +- ### 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) + - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) + +- ### 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: + - Books: + - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) + - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) + - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) + - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - Data School: http://www.dataschool.io/ + +--- + +## 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? + +- **SOLID** + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] 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 but 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) + + +- **Union-Find** + - [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) + +- **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) + +- **String Matching** + - 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): + - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - 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) + - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be + - nice explanation of tries + - can be skipped + +- **Sorting** + + - 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) + +## 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](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) + +- [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) + +- [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) + +- 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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) + +- [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) + +- [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-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=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) + +- [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) + +- [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) + +- [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) + +- [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) + - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) + +- [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) + +- [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) + +## 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) + +## Papers + +- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) +- [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) +- [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? +- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) +- [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) +- [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - The Dynamo paper kicked off the NoSQL revolution +- [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) +- [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) +- [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) + + +## LICENSE + +[CC-BY-SA-4.0](./LICENSE.txt) From 798f2af3852d09b0d58e96271f4962e1d9b825ca Mon Sep 17 00:00:00 2001 From: Michal Date: Wed, 8 Apr 2020 23:54:26 +0200 Subject: [PATCH 179/263] update readme-pl updated until cpp --- translations/README-pl.md | 161 ++++++++++++++++++-------------------- 1 file changed, 78 insertions(+), 83 deletions(-) diff --git a/translations/README-pl.md b/translations/README-pl.md index cea06f0..22f086a 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -1,29 +1,29 @@ -# Coding Interview University +# Przygotowanie do rozmowy kwalifikacyjnej w Google - Coding Interview University -> I originally created this as a short to-do list of study topics for becoming a software engineer, -> but it grew to the large list you see today. After going through this study plan, [I got hired -> as a Software Development Engineer at Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! -> You probably won't have to study as much as I did. Anyway, everything you need is here. +> Pierwotnie stworzyłem ten projekt, jako krótką listę tematów do nauki, które warto poznać aby zostać Software Engineer, +> ale powiększył się do dużej listy, którą widzisz dzisiaj. Po przejściu przez ten plan studiów [zostałem zatrudniony +> jako Software Development Engineer w Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> Prawdopodobnie nie będziesz musiał uczyć się tak dużo jak ja. W każdym razie wszystko, czego potrzebujesz, jest tutaj. > -> I studied about 8-12 hours a day, for several months. This is my story: [Why I studied full-time for 8 months for a Google interview](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> Przez kilka miesięcy uczyłem się około 8-12 godzin dziennie. Oto moja historia: [Dlaczego uczyłem się w pełnym wymiarze godzin przez 8 miesięcy na rozmowę w Google](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) > -> The items listed here will prepare you well for a technical interview at just about any software company, -> including the giants: Amazon, Facebook, Google, and Microsoft. +> Pozycje wymienione tutaj dobrze przygotują cię na wywiad techniczny w prawie każdej firmie zajmującej się wytwarzaniem oprogramowania, włączając w to takich gigantów jak: Amazon, Facebook, Google, and Microsoft. > -> *Best of luck to you!* +> *Powodzenia!*
-Translations: +Tłumaczenia: - [中文版本](translations/README-cn.md) - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) - [Português Brasileiro](translations/README-ptbr.md) +- [Polish](https://github.com/mbiesiad/coding-interview-university/blob/master/translations/README-pl.md)
-Translations in progress: +Tłumaczenia w trakcie: - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) - [עברית](https://github.com/jwasham/coding-interview-university/issues/82) @@ -35,7 +35,6 @@ - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) - [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) - [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) -- [Polish](https://github.com/jwasham/coding-interview-university/issues/122) - [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) - [Thai](https://github.com/jwasham/coding-interview-university/issues/156) - [Greek](https://github.com/jwasham/coding-interview-university/issues/166) @@ -45,33 +44,30 @@
-## What is it? +## Co to jest? -This is my multi-month study plan for going from web developer (self-taught, no CS degree) to software engineer for a large company. +To jest mój wielomiesięczny plan nauki od przejścia od programisty (samouka, bez dyplomu CS - informatyki) do inżyniera oprogramowania dla dużej firmy. ![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) -This is meant for **new software engineers** or those switching from -software/web development to software engineering (where computer science knowledge is required). If you have -many years of experience and are claiming many years of software engineering experience, expect a harder interview. +Jest to przeznaczone dla **początkujących software engineers** lub tych przełączających się z software/web development na software engineering (gdzie wiedza z informatyki jest wymagana). Jeśli masz wieloletnie doświadczenie i stwierdziłeś, że masz wieloletnie doświadczenie w inżynierii oprogramowania, oczekuj trudniejszej rozmowy. -If you have many years of software/web development experience, note that large software companies like Google, Amazon, -Facebook and Microsoft view software engineering as different from software/web development, and they require computer science knowledge. +Jeśli masz wieloletnie doświadczenie w tworzeniu oprogramowania/stron internetowych, pamiętaj, że duże firmy programistyczne, takie jak Google, Amazon, Facebook i Microsoft postrzegają inżynierię oprogramowania jako inną niż tworzenie oprogramowania / stron internetowych i wymagają wiedzy informatycznej. -If you want to be a reliability engineer or operations engineer, study more from the optional list (networking, security). +Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemów, zapoznaj się z listą dodatkową (sieć, bezpieczeństwo). --- -## Table of Contents +## Spis treści -- [What is it?](#what-is-it) -- [Why use it?](#why-use-it) +- [Co to jest?](#what-is-it) +- [Dlaczego z tego korzystać?](#why-use-it) - [How to use it](#how-to-use-it) -- [Don't feel you aren't smart enough](#dont-feel-you-arent-smart-enough) -- [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) -- [Book List](#book-list) +- [Nie czuj, że nie jesteś wystarczająco mądry](#dont-feel-you-arent-smart-enough) +- [Informacje o materiałach wideo](#about-video-resources) +- [Proces rozmowy i ogólne przygotowanie do rekrutacji](#interview-process--general-interview-prep) +- [Wybierz jeden język do rozmowy kwalifikacyjnej](#pick-one-language-for-the-interview) +- [Lista książek](#book-list) - [Before you Get Started](#before-you-get-started) - [What you Won't See Covered](#what-you-wont-see-covered) - [Prerequisite Knowledge](#prerequisite-knowledge) @@ -131,9 +127,9 @@ If you want to be a reliability engineer or operations engineer, study more from - [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 ---------------- +---------------- Wszystko poniżej tego punktu jest nadprogramowe ---------------- -## Additional Resources +## Dodatkowe materiały - [Additional Books](#additional-books) - [Additional Learning](#additional-learning) @@ -181,24 +177,21 @@ If you want to be a reliability engineer or operations engineer, study more from --- -## Why use it? +## Dlaczego z tego korzystać? -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 multidimensional arrays in my life and -thousands of associative arrays, but I've never created data structures from scratch. +Kiedy rozpocząłem ten projekt, nie rozpoznawałem stosu (stack) od sterty (heap), nie znałem notacji dużego O (złożoności obliczeniowej algorytmów, asymptotycznego tempa wzrostu), nie wiedziałem nic o drzewach ani tego, jak przejść przez graf. Gdybym musiał kodować algorytm sortowania, mogę powiedzieć, że nie byłby zbyt dobry. +Wszystkie struktury danych, z którymi miałem kiedykolwiek do czynienia, były wbudowane w język i nie wiedziałem w ogóle, jak działają pod maską. Nigdy nie musiałem zarządzać pamięcią, chyba że uruchamiany przeze mnie proces wyrzuciłby błąd "out of +memory", a potem musiałbym znaleźć obejście. W swoim życiu użyłem kilku wielowymiarowych tablic i tysiące tablic asocjacyjnych, ale nigdy nie tworzyłem struktur danych od zera. -It's a long plan. It may take you months. If you are familiar with a lot of this already it will take you a lot less time. +To długi plan. Może on zająć miesiące. Jeśli jednak znasz już co nieco z tego, zajmie ci to znacznie mniej czasu. -## How to use it +## Jak tego używać -Everything below is an outline, and you should tackle the items in order from top to bottom. +Wszystko poniżej jest konspektem i powinieneś zajmować się tymi punktami w kolejności od góry do dołu. -I'm using Github's special markdown flavor, including tasks lists to check progress. +Używam specjalnej odmiany Markdown GitHub, w tym list zadań do sprawdzania postępów. -**Create a new branch so you can check items like this, just put an x in the brackets: [x]** +**Utwórz nową gałąź (brancha), aby móc sprawdzać te pozycje, po prostu wstawiając x w nawiasach: [x]** Fork a branch and follow the commands below @@ -219,25 +212,25 @@ I'm using Github's special markdown flavor, including tasks lists to check progr `git push --force` -[More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +[Więcej na temat Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) -## Don't feel you aren't smart enough +## Nie uważaj, że nie jesteś wystarczająco mądry -- Successful software engineers are smart, but many have an insecurity that they aren't smart enough. +- Odnoszący sukcesy inżynierowie oprogramowania są mądrzy, ale wielu nie ma pewności siebie odnośnie tego, że nie są wystarczająco mądrzy. - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) - [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) -## About Video Resources +## Informacje o materiałach wideo -Some videos are available only by enrolling in a Coursera or EdX class. These are called MOOCs. -Sometimes the classes are not in session so you have to wait a couple of months, so you have no access. +Niektóre filmy są dostępne tylko po zapisaniu się na kurs Coursera lub EdX. Są to tak zwane MOOC. +Czasami zajęcia nie są w sesji, więc musisz poczekać kilka miesięcy, więc wtedy nie masz dostępu. - I'd appreciate your help to add free and always-available public sources, such as YouTube videos to accompany the online course videos. - I like using university lectures. + Będę wdzięczny za pomoc w dodawaniu bezpłatnych i zawsze dostępnych źródeł publicznych, takich jak filmy z YouTube, które towarzyszą filmom z kursów online. + Lubię korzystać z wykładów uniwersyteckich. -## Interview Process & General Interview Prep +## Proces rozmowy i ogólne przygotowanie do rekrutacji - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) @@ -253,55 +246,55 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) - [ ] Prep Course: - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - - Learn how to make yourself ready for software engineer interviews from a former Google interviewer. + - Dowiedz się, jak przygotować się na rozmowę kwalifikacyjną na inżyniera oprogramowania od byłego rekrutera Google. - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - - A Python centric interview prep course which covers data structures, algorithms, mock interviews and much more. + - Kurs przygotowujący do rekrutacji skoncentrowanej na Pythonie, który obejmuje struktury danych, algorytmy, próbne zadania i wiele innych. - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): - - A free Python centric data structures and algorithms course. + - Darmowy kurs struktur i algorytmów skoncentrowanych na języku Python. - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): - - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. + - Przećwicz praktyczne ćwiczenia z ponad 100 struktur danych i ćwiczeń algorytmicznych oraz wskazówek od dedykowanego mentora, aby pomóc Ci przygotować się na rozmowy kwalifikacyjne i scenariusze w miejscu pracy. -## Pick One Language for the Interview +## Wybierz jeden język do rozmowy kwalifikacyjnej -You can use a language you are comfortable in to do the coding part of the interview, but for large companies, these are solid choices: +Możesz użyć języka, w którym czujesz się komfortowo, aby wykonać część wywiadu dotyczącą programowania, ale w przypadku dużych firm są to solidne propozycje: - C++ - Java - Python -You could also use these, but read around first. There may be caveats: +Możesz ich również użyć, ale najpierw przeczytaj co nieco. Mogą istnieć zastrzeżenia: - JavaScript - Ruby -Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) +Oto artykuł, który napisałem o wyborze języka do rozmowy kwalifikacyjnej: [Wybierz jeden język do wywiadu kodującego](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) -You need to be very comfortable in the language and be knowledgeable. +Musisz czuć się bardzo wygodnie w języku i posiadać z niego wiedzę. -Read more about choices: +Przeczytaj więcej na temat wyborów tutaj: - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ - http://blog.codingforinterviews.com/best-programming-language-jobs/ -[See language resources here](programming-language-resources.md) +[Zobacz materiały językowe tutaj](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. +Poniżej zobaczysz trochę uczenia się C, C ++ i Python, ponieważ uczę się. W grę wchodzi kilka książek, patrz na dole. -## Book List +## Lista książek -This is a shorter list than what I used. This is abbreviated to save you time. +To jest krótsza lista niż ta, której użyłem. Jest to skrócone, aby zaoszczędzić czas. -### Interview Prep +### Przygotowanie do rozmowy rekrutacyjnej - [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - - answers in C++ and Java - - this is a good warm-up for Cracking the Coding Interview - - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) + - odpowiedzi w C++ oraz Java + - to dobra rozgrzewka przed Cracking the Coding Interview + - nie jest zbyt trudne, większość problemów może być łatwiejsza niż to, co zobaczysz podczas rekrutacji (z tego, co przeczytałem) - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - odpowiedzi w Java -### If you have tons of extra time: +### Jeśli masz mnóstwo dodatkowego czasu: -Choose one: +Wybierz jeden: - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) @@ -309,14 +302,14 @@ Choose one: - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) -### Language Specific +### Konkretny język -**You need to choose a language for the interview (see above).** +**Musisz wybrać język do rozmowy kwalifikacyjnej (patrz powyżej).** -Here are my recommendations by language. I don't have resources for all languages. I welcome additions. +Oto moje rekomendacje według języka. Nie mam materiałów dla wszystkich języków. Miło widziane dodatki. -If you read through one of these, you should have all the data structures and algorithms knowledge you'll need to start doing coding problems. -**You can skip all the video lectures in this project**, unless you'd like a review. +Jeśli zapoznasz się z jednym z nich, powinieneś mieć całą wiedzę na temat struktur danych i algorytmów, których potrzebujesz, aby zacząć robić problemy z kodowaniem. +**Możesz pominąć wszystkie wykłady wideo w tym projekcie**, chyba że chcesz recenzję. [Additional language-specific resources here.](programming-language-resources.md) @@ -1857,7 +1850,7 @@ You're never really done. - nice explanation of tries - can be skipped -- **Sorting** +- **Sortowania** - Stanford lectures on sorting: - [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) @@ -1871,9 +1864,9 @@ You're never really done. - [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) -## Video Series +## Serie wideo -Sit back and enjoy. "Netflix and skill" :P +Usiądź i spędź miło czas. "Netflix and skill" :P - [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) @@ -1935,12 +1928,12 @@ Sit back and enjoy. "Netflix and skill" :P - [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) -## Computer Science Courses +## Kursy Computer Science - [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) -## Papers +## Literatura - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) @@ -1973,6 +1966,8 @@ Sit back and enjoy. "Netflix and skill" :P - [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf) -## LICENSE +## LICENCJA [CC-BY-SA-4.0](./LICENSE.txt) + +Polska wersja od: @[mbiesiad](https://github.com/mbiesiad) From cbc876c888b3d5e920931cc4109b9d7e9dc48778 Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 9 Apr 2020 08:06:51 +0200 Subject: [PATCH 180/263] update readme-pl updated until p4 --- translations/README-pl.md | 81 +++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 42 deletions(-) diff --git a/translations/README-pl.md b/translations/README-pl.md index 22f086a..d137a43 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -311,89 +311,86 @@ Oto moje rekomendacje według języka. Nie mam materiałów dla wszystkich języ Jeśli zapoznasz się z jednym z nich, powinieneś mieć całą wiedzę na temat struktur danych i algorytmów, których potrzebujesz, aby zacząć robić problemy z kodowaniem. **Możesz pominąć wszystkie wykłady wideo w tym projekcie**, chyba że chcesz recenzję. -[Additional language-specific resources here.](programming-language-resources.md) +[Dodatkowe materiały specyficzne dla języka tutaj.](programming-language-resources.md) ### C++ -I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. +Nie przeczytałem tych dwóch, ale są wysoko ocenione i napisane przez Sedgewicka. On jest wspaniały. - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) - [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) -If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. +Jeśli masz lepszą rekomendację dla C++, daj mi znać. W poszukiwaniu wyczerpującego materiału. ### Java - [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - videos with book content (and Sedgewick!) on coursera: - - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) - - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) + - filmy z zawartością książek (i Sedgewick!) na coursera: + - [Algorytmy I](https://www.coursera.org/learn/algorithms-part1) + - [Algorytmy II](https://www.coursera.org/learn/algorithms-part2) -OR: +LUB: - [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - - by Goodrich, Tamassia, Goldwasser - - used as optional text for CS intro course at UC Berkeley - - see my book report on the Python version below. This book covers the same topics. + - od Goodrich, Tamassia, Goldwasser + - używany jako opcjonalny tekst dla kursu wprowadzającego dla informatyki na UC Berkeley + - zobacz moją recenzję książki na temat wersji Python poniżej. Ta książka obejmuje te same tematy. ### Python - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - - by Goodrich, Tamassia, Goldwasser - - I loved this book. It covered everything and more. - - Pythonic code - - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ + - od Goodrich, Tamassia, Goldwasser + - Uwielbiam tę książkę. Obejmowała wszystko i więcej. + - kod Pythona + - moja entuzjastyczna recenzja: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ -## Before you Get Started +## Zanim zaczniesz -This list grew over many months, and yes, it kind of got out of hand. +Ta lista rosła przez wiele miesięcy i tak, wymknęła się spod kontroli. -Here are some mistakes I made so you'll have a better experience. +Oto kilka błędów, które popełniłem, rzuć okiem - dzięki temu będziesz mieć lepsze odczucia. -### 1. You Won't Remember it All +### 1. Nie zapamiętasz tego wszystkiego -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. +Oglądałem godziny filmów i robiłem obszerne notatki, a miesiące później wiele nie pamiętałem. Spędziłem 3 dni +na moje notatki i tworzenie fiszek, abym mógł je przejrzeć. -Read please so you won't make my mistakes: +Przeczytaj proszę, żebyś nie popełnił moich błędów: -[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). +[Utrzymanie wiedzy informatycznej](https://startupnextdoor.com/retaining-computer-science-knowledge/). -A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) +Kurs zalecany mi (jeszcze go nie zacząłem): [Naucz się, jak się uczyć](https://www.coursera.org/learn/learning-how-to-learn) -### 2. Use Flashcards +### 2. Użyj 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. +Aby rozwiązać problem, stworzyłem małą stronę z fiszkami (flashcards), w której mogłem dodać fiszki 2 typów: ogólne i kod. +Każda karta ma inne formatowanie. -I made a mobile-first website so I could review on my phone and tablet, wherever I am. +Stworzyłem witrynę mobilną, aby móc przeglądać na moim telefonie i tablecie, gdziekolwiek jestem. -Make your own for free: +Stwórz własną za darmo: - [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) - [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): - [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.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. +Pamiętaj, że poszedłem ostro i mam karty obejmujące wszystko, od języka asemblera i ciekawostek Python po uczenie maszynowe i statystyki. To o wiele za dużo na to, w stosunku do tego co jest wymagane. -**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. +**Uwaga odnośnie fiszek:** Gdy rozpoznasz odpowiedź po raz pierwszy, nie oznaczaj jej jako znanej. Musisz zobaczyć +tę samą kartę i odpowiedzieć kilka razy poprawnie, zanim się nauczysz porzadnie. Powtarzanie pogłębi tę wiedzę. -An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. -It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. +Alternatywą dla korzystania z mojej strony z kartami jest [Anki](http://ankisrs.net/), która była mi polecana wiele razy. Używa systemu powtarzania, aby pomóc Ci zapamiętać. +Jest przyjazna dla użytkownika, dostępna na wszystkich platformach i ma system synchronizacji w chmurze. Kosztuje $25 na iOS ale jest darmowa na innych platformach. -My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) +Moja baza danych fiszekw formacie Anki: https://ankiweb.net/shared/info/25173560 (dzięki [@xiewenya](https://github.com/xiewenya)) -### 3. Start doing coding interview questions while you're learning data structures and algorithms, +### 3. Zacznij robić pytania programistyczne do rozmowy kwalifikacyjnej, ucząc się struktur danych i algorytmów -You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, -and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding -linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem, -or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge, -but how you apply the knowledge. There are several books and sites I recommend. -See here for more: [Coding Question Practice](#coding-question-practice) +Musisz zastosować zdobytą wiedzę do rozwiązywania problemów, inaczej zapomnisz. Popełniłem ten błąd. Gdy nauczysz się tematu, +aby czuć się z tym komfortowo, np. listy powiązane - otwórz jedną z książek o rekrutacji IT i zrób kilka pytań dotyczących list powiązanych (linked lists). Następnie przejdź do następnego tematu do nauki. Potem wróć i zrób kolejne zadanie z listą powiązaną, problem z rekurencją lub cokolwiek innego. Ale rób zadania podczas nauki. Nie jesteś zatrudniony do wiedzy, +ale do tego jak zastosować wiedzę. Polecam kilka książek i stron. +Zobacz tutaj, aby uzyskać więcej informacji: [Praktyczne pytania programistyczne](#coding-question-practice) ### 4. Review, review, review From 1d01137b2aea6d04725b1c216a7a7d3954eb553b Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 9 Apr 2020 09:23:50 +0200 Subject: [PATCH 181/263] update readme updated finished pl_ver --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cea06f0..111f24c 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) - [Português Brasileiro](translations/README-ptbr.md) +- [Polish](https://github.com/mbiesiad/coding-interview-university/blob/master/translations/README-pl.md)
@@ -35,7 +36,6 @@ - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) - [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) - [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) -- [Polish](https://github.com/jwasham/coding-interview-university/issues/122) - [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) - [Thai](https://github.com/jwasham/coding-interview-university/issues/156) - [Greek](https://github.com/jwasham/coding-interview-university/issues/166) From b6ab9f93c10e516f6db57c3b2e5925a15fdf4cae Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 9 Apr 2020 10:42:57 +0200 Subject: [PATCH 182/263] update readme-pl updated --- translations/README-pl.md | 219 +++++++++++++++++++------------------- 1 file changed, 109 insertions(+), 110 deletions(-) diff --git a/translations/README-pl.md b/translations/README-pl.md index d137a43..954a771 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -215,7 +215,7 @@ Używam specjalnej odmiany Markdown GitHub, w tym list zadań do sprawdzania pos [Więcej na temat Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) -## Nie uważaj, że nie jesteś wystarczająco mądry +## Nie uważaj, że jesteś niewystarczająco mądry - Odnoszący sukcesy inżynierowie oprogramowania są mądrzy, ale wielu nie ma pewności siebie odnośnie tego, że nie są wystarczająco mądrzy. - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) @@ -392,99 +392,98 @@ aby czuć się z tym komfortowo, np. listy powiązane - otwórz jedną z książ ale do tego jak zastosować wiedzę. Polecam kilka książek i stron. Zobacz tutaj, aby uzyskać więcej informacji: [Praktyczne pytania programistyczne](#coding-question-practice) -### 4. Review, review, review +### 4. Przeglądaj, przeglądaj, przeglądaj -I keep a set of cheat sheets on ASCII, OSI stack, Big-O notations, and more. I study them when I have some spare time. +Trzymam zestaw ściąg na ASCII, stos OSI, notacje Big-O i inne. Przeglądam je, kiedy mam trochę wolnego czasu. -Take a break from programming problems for a half hour and go through your flashcards. +Zrób sobie przerwę od problemów programistycznych na pół godziny i przejrzyj swoje fiszki. -### 5. Focus +### 5. Skupienie -There are a lot of distractions that can take up valuable time. Focus and concentration are hard. Turn on some music -without lyrics and you'll be able to focus pretty well. +Istnieje wiele czynników, które mogą zająć cenny czas. Skupienie i koncentracja są trudne. Włącz muzykę bez słów, a będziesz w stanie całkiem dobrze się skupić. -## What you won't see covered +## Czego tutaj nie zobaczysz -These are prevalent technologies but not part of this study plan: +Są to dominujące technologie, ale nie są częścią tego planu nauki: - SQL - Javascript -- HTML, CSS, and other front-end technologies +- HTML, CSS, oraz inne technologie frontend -## The Daily Plan +## Plan dzienny -Some subjects take one day, and some will take multiple days. Some are just learning with nothing to implement. +Niektóre przedmioty zajmą jeden dzień, a inne kilka dni. Niektórzy dopiero się uczą nie mając nic do zaimplementowania. -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. +Każdego dnia biorę jeden temat z poniższej listy, oglądam filmy na ten temat i piszę implementację w: +- C - używając struktur i funkcji, które mają * i coś jeszcze jako args. +- C++ - bez używania wbudowanych typów +- C++ - używając wbudowanych typów, takich jak z STL np. std::list dla linked list +- Python - używając wbudowanych typów (aby ćwiczyć Python) +- i piszę testy, aby upewnić się, że robię to dobrze, czasem używając prostych instrukcji assert() +- Możesz tak robić z Java lub czymś innym, to po prostu moje podejście. -You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). +Nie potrzebujesz tych wszystkich. Do rozmowy potrzebny jest tylko [jeden język](#pick-one-language-for-the-interview). -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 or Java)) -- 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) +Po co kodować w tych wszystkich? +- Ćwiczenia, ćwiczenia, ćwiczenia, dopóki nie mam tego dość, i mogę to zrobić bez problemu (niektórzy mają wiele skrajnych przypadków i szczegółów księżek do zapamiętania) +- Praca w ramach surowych ograniczeń (przydzielanie / zwalnianie pamięci bez pomocy odśmiecania (z wyjątkiem Pythona lub Java)) +- Korzystam z wbudowanych typów, więc mam doświadczenie w korzystaniu z wbudowanych narzędzi do użytku w świecie rzeczywistym (nie zamierzam pisać własnej implementacji list powiązanych na produkcji) -I may not have time to do all of these for every subject, but I'll try. +Może nie mam czasu na zrobienie wszystkich tych rzeczy dla każdego przedmiotu, ale próbuję. -You can see my code here: +Możesz zobaczyć moje kody tutaj: - [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. +Nie musisz zapamiętywać wnętrzności każdego algorytmu. -Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then test it out on a computer. +Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi przykładowymi danymi wejściowymi. Następnie przetestuj na komputerze. -## Prerequisite Knowledge +## Wymagana wiedza -- [ ] **Learn C** - - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. +- [ ] **Nauka C** + - C jest wszędzie. Przykłady znajdziesz w książkach, wykładach, filmach, *wszędzie* podczas nauki. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - This is a short book, but it will give you a great handle on the C language and if you practice it a little - you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - - [answers to questions](https://github.com/lekkas/c-algorithms) + - Jest to krótka książka, ale zapewni doskonałą znajomość języka C i jeśli trochę go przećwiczysz + szybko osiągniesz biegłość. Zrozumienie C pomaga zrozumieć, jak działają programy i pamięć. + - [odpowiedzi na pytania](https://github.com/lekkas/c-algorithms) -- [ ] **How computers process a program:** - - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) - - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) - - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) - - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) - - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) +- [ ] **Jak komputery przetwarzają program:** + - [ ] [Jak procesor wykonuje program (wideo)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [Jak komputery liczą - ALU (wideo)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Rejestry i pamięć RAM (wideo)](https://youtu.be/fpnE6UAfbtU) + - [ ] [Central Processing Unit (CPU) - procesor (wideo)](https://youtu.be/FZGugFqdr60) + - [ ] [Instrukcje i programy (wideo)](https://youtu.be/zltgXvg6r3k) -## Algorithmic complexity / Big-O / Asymptotic analysis +## Złożoność algorytmiczna / Big-O / Analiza asymptotyczna -- Nothing to implement -- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review. -- 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. -- [ ] [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) +- Nic do implementacji +- Tutaj jest wiele filmów. Po prostu oglądaj wystarczająco długo, aż zrozumiesz. Zawsze możesz wrócić i przejrzeć ponownie. +- Jeśli niektóre wykłady są zbyt matematyczne, możesz zeskoczyć na dół i obejrzeć filmy z matematyki dyskretnej, aby uzyskać podstawową wiedzę. +- [ ] [Harvard CS50 - Notacja asymptotyczna (wideo)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [Big O Notations (ogólny szybki samouczek) (wideo)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] [Big O Notation (oraz Omega i Theta) - najlepsze wyjaśnienia matematyczne (wideo)](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) + - [wideo](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [prezentacja](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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) -- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) -- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) -- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) -- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) +- [ ] [Orders of Growth (wideo)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) +- [ ] [Asymptotics (wideo)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) +- [ ] [UC Berkeley Big O (wideo)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [UC Berkeley Big Omega (wideo)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) +- [ ] [Amortized Analysis (wideo)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [Illustrating "Big O" (wideo)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) - [ ] TopCoder (includes recurrence relations and master theorem): - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) -- [ ] [Cheat sheet](http://bigocheatsheet.com/) +- [ ] [Ściągawka](http://bigocheatsheet.com/) -## Data Structures +## Struktury danych - ### Arrays - - Implement an automatically resizing vector. - - [ ] Description: + - Zaimplementuj wektor automatycznie zmieniający rozmiar. + - [ ] Opis: - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) @@ -493,11 +492,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - - [ ] Implement a vector (mutable array with automatic resizing): + - [ ] Zaimplementuj vector (mutable array z automatycznym zmienianiem rozmiaru): - [ ] 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 + - potraf zaalokować int array pod maską, bez używania gotowych funkcji + - zacznij z 16, lub jeśli liczba początkowa jest większa, użyj potęgi 2 - 16, 32, 64, 128 - [ ] size() - number of items - [ ] capacity() - number of items it can hold - [ ] is_empty() @@ -510,16 +509,16 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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 + - po osiągnięciu pojemności zmień rozmiar, aby podwoić rozmiar + - podczas usuwania elementu, jeśli rozmiar wynosi 1/4 pojemności, przeskaluj do połowy - [ ] Time - - O(1) to add/remove at end (amortized for allocations for more space), index, or update + - O(1) to add/remove na koniec (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 +- ### Listy łączone - [ ] Description: - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) @@ -549,16 +548,16 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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 + - [ ] Lista podwójnie łączona - [Description (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) - No need to implement -- ### Stack +- ### Stos - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] Will not implement. Implementing with array is trivial. -- ### Queue +- ### Kolejka - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) @@ -607,7 +606,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - get(key) - remove(key) -## More Knowledge +## Więcej wiedzy - ### Binary search - [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno) @@ -617,7 +616,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - binary search (on sorted array of integers) - binary search using recursion -- ### Bitwise operations +- ### Operacje bitowe - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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)) @@ -642,9 +641,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] absolute value: - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) -## Trees +## Drzewa -- ### Trees - Notes & Background +- ### Drzewa - uwagi & zarys - [ ] [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 @@ -694,7 +693,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] delete_value - [ ] get_successor // returns next-highest value in tree after given value, -1 if none -- ### Heap / Priority Queue / Binary Heap +- ### Sterta / kolejka priorytetowa / sterta binarna - 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) @@ -723,9 +722,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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). -## Sorting +## Sortowanie -- [ ] Notes: +- [ ] Uwagi: - 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?") @@ -798,11 +797,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) -## Graphs +## Grafy Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. -- Notes: +- Uwagi: - There are 4 basic ways to represent a graph in memory: - objects and pointers - adjacency matrix @@ -812,11 +811,11 @@ Graphs can be used to represent many problems in computer science, so this secti - 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. -- [ ] MIT(videos): +- [ ] MIT (filmy): - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) -- [ ] Skiena Lectures - great intro: +- [ ] Wykłady Skiena - świetne wprowadzenie: - [ ] [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) @@ -860,7 +859,7 @@ Graphs can be used to represent many problems in computer science, so this secti ## Even More Knowledge -- ### Recursion +- ### Rekursja - [ ] 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) @@ -1016,7 +1015,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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) + - [prezentacja](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) - [ ] 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) @@ -1108,7 +1107,7 @@ Graphs can be used to represent many problems in computer science, so this secti - simplicity and robustness - tradeoffs - performance analysis and optimization -- [ ] **START HERE**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] **ZACZNIJ TUTAJ**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [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/) @@ -1273,7 +1272,7 @@ Supplemental: See [Book List above](#book-list) -## Coding exercises/challenges +## Zadania/wyzwania programistyczne Once you've learned your brains out, put those brains to work. Take coding challenges every day, as many as you can. @@ -1318,13 +1317,13 @@ Mock Interviews: - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. -## Once you're closer to the interview +## Gdy już jesteś bliżej rozmowy rekrutacyjnej - 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) -## Your Resume +## Twoje CV - See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed @@ -1347,7 +1346,7 @@ Have a story, not just data, about something you accomplished. - 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 +## Pytania dla rekrutera Some of mine (I already may know answer to but want their opinion or team perspective): @@ -1384,7 +1383,7 @@ You're never really done. --- -## Additional Books +## Dodatkowe książki These are here so you can dive into a topic you find interesting. @@ -1444,18 +1443,18 @@ You're never really done. - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but that is just an intro. This a guidebook on program design and architecture. -## Additional Learning +## Dodatkowe materiały - I added them to help you become a well-rounded software engineer, and to be aware of certain - technologies and algorithms, so you'll have a bigger toolbox. + Dodałem je, aby pomóc Ci zostać wszechstronnym inżynierem oprogramowania i mieć świadomość + technologii i algorytiki, dzięki czemu będziesz mieć większy zestaw narzędzi. -- ### Compilers +- ### Kompilatory - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - [Harvard 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) -- ### Emacs and vi(m) +- ### Emacs oraz vi(m) - 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) @@ -1476,7 +1475,7 @@ You're never really done. - [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 +- ### Narzędzia wiersza poleceń systemu Unix - I filled in the list below from good tools. - bash - cat @@ -1490,7 +1489,7 @@ You're never really done. - [strace](https://en.wikipedia.org/wiki/Strace) - [tcpdump](https://danielmiessler.com/study/tcpdump/) -- ### Information theory (videos) +- ### Teoria informacji (filmy) - [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) @@ -1506,19 +1505,19 @@ You're never really done. - [Error correction](https://www.youtube.com/watch?v=JAMLuxdHH8o) - [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk) -- ### Entropy +- ### Entropia - 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 +- ### Kryptografia - 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 +- ### Kompresja - make sure to watch information theory videos first - Computerphile (videos): - [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w) @@ -1530,7 +1529,7 @@ You're never really done. - [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) -- ### Computer Security +- ### Bezpieczeństwo komputerowe - [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) @@ -1545,7 +1544,7 @@ You're never really done. - [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 - Odśmiecanie pamięci - [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) @@ -1581,14 +1580,14 @@ You're never really done. - [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) -- ### Fast Fourier Transform +- ### Szybka transformata Fouriera - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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 +- ### Filtr Blooma - Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k) - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](https://www.youtube.com/watch?v=qBTdukbzc78) @@ -1743,11 +1742,11 @@ You're never really done. - [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 +- ### Matematyka dyskretna + - zobacz wideo poniżej -- ### Machine Learning - - Why ML? +- ### Machine Learning - Uczenie maszynowe + - Czemu 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) @@ -1775,7 +1774,7 @@ You're never really done. --- -## Additional Detail on Some Subjects +## Dodatkowe szczegóły na niektóre tematy 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. @@ -1805,7 +1804,7 @@ You're never really done. - [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) -- **More Dynamic Programming** (videos) +- **Bardziej dynamiczne programowanie** (wideos) - [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) @@ -1814,11 +1813,11 @@ You're never really done. - [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) +- **Zaawansowane przetwarzanie wykresów** (wideos) - [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 **Prawdopodobieństwo** (matma, i idź po mału, co jest dobre dla takich rzeczy) (wideos): - [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) From afa6a0ba82a4fa34cc30298f078c439d82266b9d Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 9 Apr 2020 12:38:23 +0200 Subject: [PATCH 183/263] update readme-pl updated --- translations/README-pl.md | 689 +++++++++++++++++++------------------- 1 file changed, 344 insertions(+), 345 deletions(-) diff --git a/translations/README-pl.md b/translations/README-pl.md index 954a771..0edeeac 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -442,7 +442,7 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr ## Wymagana wiedza -- [ ] **Nauka C** +- [ ] **Nauka języka C** - C jest wszędzie. Przykłady znajdziesz w książkach, wykładach, filmach, *wszędzie* podczas nauki. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - Jest to krótka książka, ale zapewni doskonałą znajomość języka C i jeśli trochę go przećwiczysz @@ -511,23 +511,23 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - [ ] resize(new_capacity) // private function - po osiągnięciu pojemności zmień rozmiar, aby podwoić rozmiar - podczas usuwania elementu, jeśli rozmiar wynosi 1/4 pojemności, przeskaluj do połowy - - [ ] Time + - [ ] Czas (złożoność czasowa) - O(1) to add/remove na koniec (amortized for allocations for more space), index, or update - O(n) to insert/remove elsewhere - - [ ] Space + - [ ] Miejsce (złożoność pamięciowa) - contiguous in memory, so proximity helps performance - space needed = (array capacity, which is >= n) * size of item, but even if 2n, still O(n) - ### Listy łączone - - [ ] Description: - - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] Opis: + - [ ] [Singly Linked Lists (wideo)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - Linked Lists 1 (wideo)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists 2 (wideo)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [ ] [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) + - [Core Linked Lists Vs Arrays (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) + - [In The Real World Linked Lists Vs Arrays (wideo)](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) @@ -549,19 +549,19 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - [ ] reverse() - reverses the list - [ ] remove_value(value) - removes the first item in the list with this value - [ ] Lista podwójnie łączona - - [Description (video)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) - - No need to implement + - [Opis (wideo)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) + - Bez potrzeby implementacji - ### Stos - - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) + - [ ] [Stacks (wideo)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [Using Stacks Last-In First-Out (wideo)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] Will not implement. Implementing with array is trivial. - ### Kolejka - - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) + - [ ] [Using Queues First-In First-Out(wideo)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) + - [ ] [Queue (wideo)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) + - [ ] [Priority Queues (wideo)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -580,23 +580,23 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - ### 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) + - [ ] [Hashing with Chaining (wideo)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) + - [ ] [Table Doubling, Karp-Rabin (wideo)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Open Addressing, Cryptographic Hashing (wideo)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [PyCon 2010: The Mighty Dictionary (wideo)](https://www.youtube.com/watch?v=C4Kc8xzcA68) + - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (wideo)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(Advanced) Perfect hashing (wideo)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - [ ] Online Courses: - - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Understanding Hash Functions (wideo)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (wideo)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - - [ ] [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/4) - - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) + - [ ] [Language Support Hash Tables (wideo)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [ ] [Core Hash Tables (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) + - [ ] [Data Structures (wideo)](https://www.coursera.org/learn/data-structures/home/week/4) + - [ ] [Phone Book Problem (wideo)](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) + - [Instant Uploads And Storage Optimization In Dropbox (wideo)](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 @@ -609,8 +609,8 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr ## Więcej wiedzy - ### 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) + - [ ] [Binary Search (wideo)](https://www.youtube.com/watch?v=D5SrAga1pno) + - [ ] [Binary Search (wideo)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) - [ ] [detail](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/) - [ ] Implement: - binary search (on sorted array of integers) @@ -618,7 +618,7 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - ### Operacje bitowe - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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: &, |, ^, ~, >>, << + - [ ] Dobrze zrozum manipulowanie bitami korzystając z: &, |, ^, ~, >>, << - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] Good intro: [Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I) @@ -644,12 +644,12 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr ## Drzewa - ### Drzewa - uwagi & zarys - - [ ] [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) + - [ ] [Series: Core Trees (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) + - [ ] [Series: Trees (wideo)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - basic tree construction - traversal - manipulation algorithms - - [ ] [BFS(breadth-first search) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - [ ] [BFS(breadth-first search) and DFS(depth-first search) (wideo)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - BFS notes: - level order (BFS, using queue) - time complexity: O(n) @@ -663,12 +663,12 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - 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) +- ### Binary search trees: BSTs - drzewa binarne + - [ ] [Binary Search Tree Review (wideo)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [Series (wideo)](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) + - [ ] [Wprowadzenie (wideo)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) + - [ ] [MIT (wideo)](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) @@ -794,52 +794,52 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - [ ] [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) -As a summary, here is a visual representation of [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg). -If you need more detail on this subject, see "Sorting" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +Podsumowując, oto wizualna reprezentacja [15 algorytmów sortowania](https://www.youtube.com/watch?v=kPRA0W1kECg). +Jeśli potrzebujesz więcej informacji na ten temat, zobacz sekcję "Sortowanie" w [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) ## Grafy Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. - Uwagi: - - There are 4 basic ways to represent a graph in memory: - - objects and pointers - - adjacency matrix - - adjacency list - - adjacency map + - Są 4 podstawowe sposoby reprezentacji grafu w pamięci: + - objects and pointers (obiekty i wskaźniki) + - adjacency matrix (macierz sąsiedztwa) + - adjacency list (lista sąsiedztwa) + - adjacency map (mapa sąsiedztwa) - 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. -- [ ] MIT (filmy): +- [ ] MIT (wideo): - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) - [ ] Wykłady Skiena - świetne wprowadzenie: - - [ ] [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) + - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (wideo)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) + - [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (wideo)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) + - [ ] [CSE373 2012 - Lecture 13 - Graph Algorithms (wideo)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) + - [ ] [CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (wideo)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (wideo)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (wideo)](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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) - - [ ] [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 Single-Source Shortest Paths Problem (wideo)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Dijkstra (wideo)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Bellman-Ford (wideo)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 Speeding Up Dijkstra (wideo)](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 (wideo)]( 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 (wideo)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (wideo)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (wideo)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] ~~[CS 61B 2014 (starting at 58:09) (wideo)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)~~ + - [ ] [CS 61B 2014: Weighted graphs (wideo)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [Greedy Algorithms: Minimum Spanning Tree (wideo)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (wideo)](https://www.youtube.com/watch?v=RpgcYiky7uw) - Full Coursera Course: - - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) + - [ ] [Algorithms on Graphs (wideo)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - I'll implement: - [ ] DFS with adjacency list (recursive) @@ -857,7 +857,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] list strongly connected components - [ ] check for bipartite graph -## Even More Knowledge +## Więcej wiedzy - ### Rekursja - [ ] Stanford lectures on recursion & backtracking: @@ -896,30 +896,30 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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) -- ### Object-Oriented Programming +- ### Object-Oriented Programming - programowanie obiektowe - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - [ ] SOLID OOP Principles: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) -- ### Design patterns +- ### Wzorce projektowe - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) - - [ ] Learn these patterns: - - [ ] strategy + - [ ] Naucz się tych wzorców: + - [ ] strategy (strategia) - [ ] singleton - [ ] adapter - - [ ] prototype - - [ ] decorator - - [ ] visitor - - [ ] factory, abstract factory - - [ ] facade - - [ ] observer - - [ ] proxy - - [ ] delegate - - [ ] command - - [ ] state - - [ ] memento + - [ ] prototype (prototyp) + - [ ] decorator (dekorator) + - [ ] visitor (odwiedzający) + - [ ] factory, abstract factory (fabryka, fabryka abstrakcyjna) + - [ ] facade (fasada) + - [ ] observer (obserwator) + - [ ] proxy (pełnomocnik) + - [ ] delegate (delegat) + - [ ] command (polecenie) + - [ ] state (stan) + - [ ] memento (pamiątka) - [ ] iterator - - [ ] composite - - [ ] flyweight + - [ ] composite (kompozyt) + - [ ] flyweight (pyłek) - [ ] [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) @@ -970,27 +970,27 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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 +- ### Procesy i wątki - [ ] Computer Science 162 - Operating Systems (25 videos): - for processes and threads see videos 1-11 - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 + - Pokrywa: + - Procesy, wątki, problemy z współbieżnością + - różnica między procesami a wątkami + - procesy + - wątki + - locks (zamki) + - mutexes (muteksy) + - semaphores (semafory) + - monitors (monitory) + - jak działają + - deadlock (zakleszczenie) + - livelock (specjalny przypadek zagłodzenia) - CPU activity, interrupts, context switching - Modern concurrency constructs with multicore processors - - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - [Paging, segmentation and virtual memory (wideo)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [Interrupts (wideo)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - 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 the 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. @@ -1006,18 +1006,18 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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) -- ### 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) +- ### Testowanie + - Aby pokryć: + - jak działają testy jednostkowe (unit tests) + - czym są mock objects (mockowanie) + - co to testy integracyjne + - czym jest dependency injection (wstrzykiwanie zależności) + - [ ] [Agile Software Testing with James Bach (wideo)](https://www.youtube.com/watch?v=SAhJf36_u5U) + - [ ] [Open Lecture by James Bach on Software Testing (wideo)](https://www.youtube.com/watch?v=ILkT_HV9DVU) + - [ ] [Steve Freeman - Test-Driven Development (that’s not what we meant) (wideo)](https://vimeo.com/83960706) - [prezentacja](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) - [ ] Dependency injection: - - [ ] [video](https://www.youtube.com/watch?v=IKD2-MAkXyQ) + - [ ] [wideo](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) @@ -1026,34 +1026,35 @@ Graphs can be used to represent many problems in computer science, so this secti - can be gleaned from Operating System videos - ### String searching & manipulations - - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [Sedgewick - Suffix Arrays (wideo)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (wideo)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + - [ ] [Search pattern in text (wideo)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - ### 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. +> Trie to drzewo węzłów, które obsługuje operacje Znajdź i Wstaw [etc (...)](https://pl.wikipedia.org/wiki/Drzewo_trie) + - Uwaga: istnieją różne rodzaje drzew tries. Niektóre mają prefixy, niektóre nie, a niektóre używają stringów zamiast bitów + do śledzenia ścieżki. + - Czytam kod, ale go nie implementuję. - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) - [ ] [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) + - [ ] [Introduction To Tries (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) + - [ ] [Performance Of Tries (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) + - [ ] [Implementing A Trie (wideo)](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/competitive-programming/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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + - [ ] [Stanford Lecture (real world use case) (wideo)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) + - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (wideo)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - ### Floating Point Numbers - [ ] 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) @@ -1067,46 +1068,46 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Big And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. + - Bardzo techniczna rozmowa dla programistów jądra. Nie martw się, jeśli większość jest zbyt ciężka. + - Pierwsza połowa wystarczy. -- ### Networking - - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - - otherwise, this is just good to know +- ### Sieci komputerowe + - **jeśli masz doświadczenie w pracy w sieci etc, oczekuj podobnych pytań** + - tak czy inaczej, dobrze to znać - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) - - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) - - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) - - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) - - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) - - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) - - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) - - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) - - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [UDP oraz TCP: Porównanie protokołów warstwy transportowej (wideo)](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP and the OSI Model Explained! (wideo)](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (wideo)](https://www.youtube.com/watch?v=nomyRJehhnM) + - [ ] [HTTP (wideo)](https://www.youtube.com/watch?v=WGJrLqtX7As) + - [ ] [SSL oraz HTTPS (wideo)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL/TLS (wideo)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) + - [ ] [HTTP 2.0 (wideo)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) + - [ ] [Serie wideo (21 wideo) (wideo)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) - [ ] Sockets: - - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + - [ ] [Java - Sockets - Wprowadzenie (wideo)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming (wideo)](https://www.youtube.com/watch?v=G75vN2mnJeQ) -## System Design, Scalability, Data Handling +## Projektowanie systemu, skalowalność, przetwarzanie danych -**You can expect system design questions if you have 4+ years of experience.** +**Jeśli masz ponad 4-letnie doświadczenie, możesz spodziewać się pytań dotyczących projektowania systemu.** -- 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. -- Considerations: - - 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 +- Skalowalność i projektowanie systemu to bardzo duże tematy z wieloma innymi tematami i materiałami, + przy projektowaniu systemu oprogramowania/sprzętu, który można skalować, należy wziąć pod uwagę wiele kwestii. + Spodziewaj się, że poświęcisz temu sporo czasu. +- Przemyślenia: + - skalowalność + - Wyodrębnij duże zestawy danych do pojedynczych wartości + - Przekształć jeden zestaw danych w inny + - Obsługa nieprzyzwoicie dużych ilości danych + - projektowanie systemu + - zestawy funkcji + - interfejsy + - hierarchie klas + - projektowanie systemu z pewnymi ograniczeniami + - prostota i solidność + - kompromisy + - analiza wydajności i optymalizacja - [ ] **ZACZNIJ TUTAJ**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [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) @@ -1204,7 +1205,7 @@ Graphs can be used to represent many problems in computer science, so this secti - infrastructure: load balancing, messaging - rough overview of any key algorithm that drives the service - consider bottlenecks and determine solutions - - Exercises: + - Ćwiczenia: - [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) @@ -1216,66 +1217,64 @@ Graphs can be used to represent many problems in computer science, so this secti --- -## Final Review +## Końcowa rozmowa rekrutacyjna - This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. - It's nice if you want a refresher often. + W tej sekcji znajdują się krótsze filmy, które można dość szybko obejrzeć, aby przejrzeć większość ważnych pojęć. + Fajnie, jeśli często chcesz sobie odświeżać. -- [ ] Series of 2-3 minutes short subject videos (23 videos) +- [ ] Seria 2-3 minutowych, krótkich filmów tematycznych (23 wideo) - [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) -- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) -- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) +- [ ] Seria 2–5 minutowych, krótkich filmów tematycznych - Michael Sambol (18 wideo): + - [Wideo](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] [Sedgewick Videos - Algorytmy I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick Videos - Algorytmy II](https://www.coursera.org/learn/algorithms-part2) --- -## Coding Question Practice +## Praktyka kodowania -Now that you know all the computer science topics above, it's time to practice answering coding problems. +Teraz, gdy znasz już wszystkie powyższe tematy informatyki, nadszedł czas, aby poćwiczyć odpowiadanie na problemy z kodowaniem. -**Coding question practice is not about memorizing answers to programming problems.** +**Praktyka kodowania nie polega na zapamiętywaniu odpowiedzi, ale rozwiązywaniu problemów.** -Why you need to practice doing programming problems: -- problem recognition, and where the right data structures and algorithms fit in -- gathering requirements for the problem -- talking your way through the problem like you will in the interview -- coding on a whiteboard or paper, not a computer -- coming up with time and space complexity for your solutions -- testing your solutions +Dlaczego musisz ćwiczyć rozwiązywanie problemów programistycznych: +- rozpoznawanie problemów i ustalenie gdzie pasują odpowiednie struktury danych i algorytmy +- zbieranie wymagań dla problemu +- omawianie problemu tak, jak podczas rozmowy rekrutacyjnej +- kodowanie na tablicy lub papierze, a nie na komputerze +- wymyślanie złożoności czasowej i pamięciowej dla swoich rozwiązań +- testowanie twoich rozwiązań -There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming -interview books, too, but I found this outstanding: +Tam jest świetny wstęp do metodycznego, komunikatywnego rozwiązywania problemu podczas rozmowy. Znajdziesz to również w książkach z rozmów rekrutacyjnych programistycznych, ale to znalazłem i uznałem za wybitne: [Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) -No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a -large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil -and eraser. +Brak tablicy w domu? To ma sens. Jestem dziwakiem i mam dużą tablicę. Zamiast tablicy, podnieś +duża podkładka do rysowania ze sklepu ze sztuką. Możesz usiąść na kanapie i ćwiczyć. To moja "sofa whiteboard". +Do zdjęcia dodałem pióro na skali. Jeśli używasz pióra, możesz wymazać. Szybko się psuje. Używam ołówka i gumki. ![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) -Supplemental: +Uzupełniające: - [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) - [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) - [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) - [Exercises for getting better at a given language](http://exercism.io/languages) -**Read and Do Programming Problems (in this order):** +**Przeczytaj i wykonaj zadania z programowania (w tej kolejności):** - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - answers in C, C++ and Java - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - odpowiedzi w Java -See [Book List above](#book-list) +Zobacz [Lista książek powyżej](#book-list) ## Zadania/wyzwania programistyczne -Once you've learned your brains out, put those brains to work. -Take coding challenges every day, as many as you can. +Gdy już się nauczysz, pozwól popracować swojemu mózgowi. +Podejmuj wyzwania programistyczne każdego dnia, tak dużo, jak to możliwe. - [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) - [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) @@ -1325,58 +1324,58 @@ Mock Interviews: ## Twoje CV -- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed +- Zobacz elementy przygotowujące do CV w Cracking The Coding Interview i wróć do Programming Interviews Exposed -## Be thinking of for when the interview comes +## Zastanów się, kiedy rozmowa kwalifikacyjna będzie nadchodzić -Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. -Have a story, not just data, about something you accomplished. +Pomyśl o około 20 pytaniach, które otrzymasz, wraz z wierszami poniższych pozycji. Po 2-3 odpowiedzi dla każdego. +Dobrze mieć historię, a nie tylko dane, opowiedz o czymś co osiągnąłeś. -- 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 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]? +- Czemu chcesz tę pracę? +- Jaki jest najcięższy problem, który rozwiązałeś? +- Największe wyzwanie z jakim się spotkałeś? +- Najlepsze/najgorsze projekty jaki widziałeś? +- Pomysły na ulepszenie istniejącego produktu. +- Jak pracujesz najlepiej, indywidualnie, czy jako część zespołu? +- Które z twoich umiejętności lub doświadczeń byłyby atutem w tej roli i dlaczego? +- Co najbardziej ci się podobało w [pracy x / projekcie y]? +- Jakie było największe wyzwanie, przed którym stanąłeś w [pracy x / projekcie y]? +- Jaki był najtrudniejszy bug, z jakim się spotkałeś w [pracy x / projekcie y]? +- Czego się nauczyłeś w [pracy x / projekcie y]? +- Co zrobiłbyś lepiej w [pracy x / projekcie y]? ## Pytania dla rekrutera - Some of mine (I already may know answer to but want their opinion or team perspective): + Niektóre z nich są moje (mogę już znać odpowiedź, ale chcę znać ich opinię lub perspektywę zespołu): -- How large is your team? -- What does 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? -- How is work/life balance? +- Jak duży jest twój zespół? +- Jak wygląda twój cykl deweloperski? Czy pracujecie waterfall/sprints/agile? +- Czy pośpiech związany z deadline'ami jest częsty? Czy jest elastyczność? +- Jak podejmowane są decyzje w twoim zespole? +- Ile spotkań masz na tydzień? +- Czy uważasz, że twoje środowisko pracy pomaga ci się skoncentrować? +- Nad czym pracujesz? +- Co w tym lubisz? +- Jak wygląda życie zawodowe? +- Jak wygląda równowaga między pracą, a życiem prywatnym? -## Once You've Got The Job +## Gdy już zdobędziesz pracę -Congratulations! +Gratulacje! -Keep learning. +Ucz się. -You're never really done. +Tak na prawdę nigdy nie skończyłeś. --- ***************************************************************************************************** ***************************************************************************************************** - Everything below this point is optional. - By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for - any software engineering job. You'll be a much more well-rounded software engineer. + Wszystko poniżej tego punktu jest opcjonalne. + Ucząc się ich, zyskasz większą ekspozycję na więcej koncepcji informatyki i będziesz lepiej przygotowany do + dowolnych zadań inżynierii oprogramowania. Będziesz o wiele bardziej wszechstronnym inżynierem oprogramowania. ***************************************************************************************************** ***************************************************************************************************** @@ -1385,18 +1384,18 @@ You're never really done. ## Dodatkowe książki - These are here so you can dive into a topic you find interesting. + Są tutaj, abyś mógł zagłębić się w interesujący ciebie temat. - [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - - an oldie but a goodie + - staruszek ale dobry - [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - a modern option + - współczesna wersja - [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) - [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns + - łagodne wprowadzenie do wzorców projektowych - [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - - aka the "Gang Of Four" book, or GOF - - the canonical design patterns book + - znane też jako książka "Banda czworga" lub GOF + - kanoniczna książka wzorców projektowych - [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - As a review and problem recognition @@ -1415,25 +1414,25 @@ You're never really done. - this is the real reason you buy this book. - about to get to this part. Will update here once I've made my way through it. - Can rent it on kindle - - 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/) + - Odpowiedzi: + - [Rozwiązania](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) + - [Rozwiązania](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) - [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - These chapters are worth the read to give you a nice foundation: - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization -- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - Rozdział 2 - Numeric Representation + - Rozdział 3 - Binary Arithmetic and Bit Operations + - Rozdział 4 - Floating-Point Representation + - Rozdział 5 - Character Representation + - Rozdział 6 - Memory Organization and Access + - Rozdział 7 - Composite Data Types and Memory Objects + - Rozdział 9 - CPU Architecture + - Rozdział 10 - Instruction Set Architecture + - Rozdział 11 - Memory Architecture and Organization +- [Wprowadzenie do algorytmów](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Ważne:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - aka CLR, sometimes CLRS, because Stein was late to the game - [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) @@ -1449,31 +1448,31 @@ You're never really done. technologii i algorytiki, dzięki czemu będziesz mieć większy zestaw narzędzi. - ### Kompilatory - - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - - [Harvard 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 a Compiler Works in ~1 minute (wideo)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard CS50 - Compilers (wideo)](https://www.youtube.com/watch?v=CSZLNYF4Klo) + - [C++ (wideo)](https://www.youtube.com/watch?v=twodd1KFfGk) + - [Understanding Compiler Optimization (C++) (wideo)](https://www.youtube.com/watch?v=FnGCDLhaxKU) - ### Emacs oraz vi(m) - 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) + - [Editing With vim 01 - Installation, Setup, and The Modes (wideo)](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) + - zestaw 4 wideo: + - [Edytor vi/vim - Lekcja 1](https://www.youtube.com/watch?v=SI8TeVMX8pk) + - [Edytor vi/vim - Lekcja 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE) + - [Edytor vi/vim - Lekcja 3](https://www.youtube.com/watch?v=ZYEccA_nMaI) + - [Edytor vi/vim - Lekcja 4](https://www.youtube.com/watch?v=1lYD5gwgZIA) + - [Używanie Vi zamiast 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): + - [Basics Emacs Tutorial (wideo)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) + - zestaw 3-ch (wideo): - [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) + - [Evil Mode: Or, How I Learned to Stop Worrying and Love Emacs (wideo)](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) + - [(maybe) Org Mode In Depth: Managing Structure (wideo)](https://www.youtube.com/watch?v=nsGYet02bEk) - ### Narzędzia wiersza poleceń systemu Unix - I filled in the list below from good tools. @@ -1547,11 +1546,11 @@ You're never really done. - ### Garbage collection - Odśmiecanie pamięci - [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) + - [Deep Dive Python: Garbage Collection in CPython (wideo)](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) + - [Efficient Python for High Performance Parallel Computing (wideo)](https://www.youtube.com/watch?v=uY85GkaYzBk) - ### Messaging, Serialization, and Queueing Systems - [Thrift](https://thrift.apache.org/) @@ -1562,7 +1561,7 @@ You're never really done. - [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 SQS (kolejka)](https://aws.amazon.com/sqs/) - [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/) - [RabbitMQ](https://www.rabbitmq.com/) - [Get Started](https://www.rabbitmq.com/getstarted.html) @@ -1577,19 +1576,19 @@ You're never really done. - ### 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) + - [A* Pathfinding Tutorial (wideo)](https://www.youtube.com/watch?v=KNXfSOx4eEE) + - [A* Pathfinding (E01: algorithm explanation) (wideo)](https://www.youtube.com/watch?v=-L-WgKMFuhE) - ### Szybka transformata Fouriera - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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) + - [What is the Fourier Transform? (wideo)](https://www.youtube.com/watch?v=Xxut2PN-V8Q) + - [Divide & Conquer: FFT (wideo)](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/) - ### Filtr Blooma - Given a Bloom filter with m bits and k hashing functions, both insertion and membership testing are O(k) - - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters (wideo)](https://www.youtube.com/watch?v=-SuTGoFYjZs) - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) @@ -1603,7 +1602,7 @@ You're never really done. - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### van Emde Boas Trees - - [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) + - [Divide & Conquer: van Emde Boas Trees (wideo)](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 @@ -1630,9 +1629,9 @@ You're never really done. 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) + - [MIT AVL Trees / AVL Sort (wideo)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) + - [AVL Trees (wideo)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) + - [AVL Tree Implementation (wideo)](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** @@ -1640,7 +1639,7 @@ You're never really done. 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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - [CS 61B: Splay Trees (wideo)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - MIT Lecture: Splay Trees: - Gets very mathy, but watch the last 10 minutes for sure. - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) @@ -1655,8 +1654,8 @@ You're never really done. 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) + - [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (wideo)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) + - [Aduni - Algorithms - Lecture 5 (wideo)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) @@ -1664,9 +1663,9 @@ You're never really done. - 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) + - [23-Tree Intuition and Definition (wideo)](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 Trees (student recitation) (wideo)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - **2-3-4 Trees (aka 2-4 trees)** - In practice: @@ -1674,9 +1673,9 @@ You're never really done. 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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - - [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) + - [CS 61B Lecture 26: Balanced Search Trees (wideo)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [Bottom Up 234-Trees (wideo)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [Top Down 234-Trees (wideo)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) - **N-ary (K-ary, M-ary) trees** - note: the N or K is the branching factor (max branches) @@ -1704,34 +1703,34 @@ You're never really done. - ### k-D Trees - great for finding number of points in a rectangle or higher dimension object - a good fit for k-nearest neighbors - - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + - [Kd Trees (wideo)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (wideo)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ### 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) + - [Randomization: Skip Lists (wideo)](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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) - - [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) - - [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) + - [Ford-Fulkerson in 5 minutes — Step by step example (wideo)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [Ford-Fulkerson Algorithm (wideo)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [Network Flows (wideo)](https://www.youtube.com/watch?v=2vhN4Ice5jI) - ### Disjoint Sets & Union Find - - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) - - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + - [UCB 61B - Disjoint Sets; Sorting & selection (wideo)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6 wideo)](https://www.coursera.org/learn/algorithms-part1/home/week/1) - ### 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) + - [Integer Arithmetic, Karatsuba Multiplication (wideo)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [The Chinese Remainder Theorem (used in cryptography) (wideo)](https://www.youtube.com/watch?v=ru7mWZJlRQg) -- ### Treap +- ### Sterta - 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) + - [Sterta](https://en.wikipedia.org/wiki/Treap) + - [Struktury danych: wytłumaczenie sterty (wideo)](https://www.youtube.com/watch?v=6podLUYinH8) - [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) -- ### Linear Programming (videos) +- ### Programowanie liniowe (wideo) - [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) @@ -1789,7 +1788,7 @@ You're never really done. - [ ] 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) + - [Interface Segregation Principle in 5 minutes (wideo)](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) @@ -1804,7 +1803,7 @@ You're never really done. - [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) -- **Bardziej dynamiczne programowanie** (wideos) +- **Bardziej dynamiczne programowanie** (wideo) - [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) @@ -1840,7 +1839,7 @@ You're never really done. - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) - 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) + - [Advanced String Searching Boyer-Moore-Horspool Algorithms (wideo)](https://www.youtube.com/watch?v=QDZpzctPf10) - [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be - nice explanation of tries @@ -1849,16 +1848,16 @@ You're never really done. - **Sortowania** - 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) + - [Lecture 15 | Programming Abstractions (wideo)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) + - [Lecture 16 | Programming Abstractions (wideo)](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) + - [Algorithms - Sorting - Lecture 2 (wideo)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) + - [Algorithms - Sorting II - Lecture 3 (wideo)](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) + - [lecture begins at 26:46 (wideo)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) + - [lecture begins at 27:40 (wideo)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [lecture begins at 35:00 (wideo)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [lecture begins at 23:50 (wideo)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) ## Serie wideo @@ -1866,100 +1865,100 @@ Usiądź i spędź miło czas. "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) +- [x86 Architecture, Assembly, Applications (11 wideo)](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 Linear Algebra, Spring 2005 (35 wideo)](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](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) -- [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) +- [Discrete Mathematics by Shai Simonson (19 wideo)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) -- [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) +- [Discrete Mathematics Part 1 by Sarada Herke (5 wideo)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) -- CSE373 - Analysis of Algorithms (25 videos) +- CSE373 - Analysis of Algorithms (25 filmy) - [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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) +- [UC Berkeley 61B (Spring 2014): Data Structures (25 wideo)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) -- [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) +- [UC Berkeley 61B (Fall 2006): Data Structures (39 wideo)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) -- [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) +- [UC Berkeley 61C: Machine Structures (26 wideo)](https://archive.org/details/ucberkeley-webcast-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: Software Dev Using UML and Java (21 wideo)](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: Computer Architecture and Engineering (20 filmy)](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=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) +- [MIT 6.004: Computation Structures (49 wideo)](https://www.youtube.com/playlist?list=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) -- [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) +- [Carnegie Mellon - Computer Architecture Lectures (39 wideo)](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: Intro to Algorithms (47 wideo)](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: Computer System Engineering (22 wideo)](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 Artificial Intelligence, Fall 2010 (30 wideo)](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: Mathematics for Computer Science, Fall 2010 (25 wideo)](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: Design and Analysis of Algorithms (34 wideo)](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: Information and Entropy, Spring 2008 (19 wideo)](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: Advanced Data Structures (22 wideo)](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: Advanced Algorithms, Spring 2016 (24 wideo)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) -- [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) +- [Harvard COMPSCI 224: Advanced Algorithms (25 wideo)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) - [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) -- [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) +- [Stanford: Programming Paradigms (27 wideo)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) - [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) -- [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) +- [Mining Massive Datasets - Stanford University (94 wideo)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) -- [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) +- [Graph Theory by Sarada Herke (67 wideo)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) ## Kursy Computer Science -- [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) +- [Katalog internetowych kursów informatyki](https://github.com/open-source-society/computer-science) +- [Katalog kursów informatyki (wiele z wykładami online)](https://github.com/prakhar1989/awesome-courses) ## Literatura -- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) +- [Lubisz tradycyjne prace naukowe?](https://www.cs.cmu.edu/~crary/819-f09/) - [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - - [implemented in Go](https://godoc.org/github.com/thomas11/csp) -- [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? -- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) + - [zaimplementowane w Go](https://godoc.org/github.com/thomas11/csp) +- [2003: System plików Google](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) + - zastąpiony przez Colossus w 2012 r +- [2004: MapReduce: Uproszczone przetwarzanie danych w dużych klastrach]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) + - w większości zastąpiony przez Cloud Dataflow? +- [2006: Bigtable: Rozproszony system przechowywania danych strukturalnych](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [Spojrzenie od wewnątrz na Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) -- [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - [2007: Dynamo: Wysoce dostępny magazyn Amazon o kluczowej wartości](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - The Dynamo paper kicked off the NoSQL revolution -- [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) +- [2007: Co każdy programista powinien wiedzieć o pamięci (bardzo długie, ale autor zachęca do pomijania niektórych sekcji)](https://www.akkadia.org/drepper/cpumemory.pdf) - [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) + - [praca (pdf)](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) + - [film](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) + - [praca (pdf)](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) + - [film](https://www.usenix.org/node/170855) +- [2014: Machine Learning: Wysokooprocentowana karta kredytowa długu technicznego](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43146.pdf) +- [2015: Continuous Pipelines w Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) +- [2015: Wysoka dostępność na masową skalę: budowanie infrastruktury danych Google dla reklam](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf) +- [2015: TensorFlow: Wielkoskalowe uczenie maszynowe w heterogenicznych systemach rozproszonych](http://download.tensorflow.org/paper/whitepaper2015.pdf ) +- [2015: Jak programiści szukają kodu: studium przypadku](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) +- [2016: Borg, Omega oraz Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf) ## LICENCJA From 822d1ebc3c010b95d622459584ca5ca939ff9688 Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 9 Apr 2020 13:31:01 +0200 Subject: [PATCH 184/263] update readme-pl updated --- translations/README-pl.md | 226 +++++++++++++++++++------------------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/translations/README-pl.md b/translations/README-pl.md index 0edeeac..feb5b31 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -60,47 +60,47 @@ Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemó ## Spis treści -- [Co to jest?](#what-is-it) -- [Dlaczego z tego korzystać?](#why-use-it) -- [How to use it](#how-to-use-it) -- [Nie czuj, że nie jesteś wystarczająco mądry](#dont-feel-you-arent-smart-enough) -- [Informacje o materiałach wideo](#about-video-resources) -- [Proces rozmowy i ogólne przygotowanie do rekrutacji](#interview-process--general-interview-prep) -- [Wybierz jeden język do rozmowy kwalifikacyjnej](#pick-one-language-for-the-interview) -- [Lista książek](#book-list) -- [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) +- [Co to jest?](#co-to-jest) +- [Dlaczego z tego korzystać?](#dlaczego-z-tego-korzystać) +- [Jak tego używać](#jak-tego-używać) +- [Nie uważaj, że jesteś niewystarczająco mądry](#nie-uważaj-że-jesteś-niewystarczająco-mądry) +- [Informacje o materiałach wideo](#informacje-o-materiałach-wideo) +- [Proces rozmowy i ogólne przygotowanie do rekrutacji](#proces-rozmowy-i-ogólne-przygotowanie-do-rekrutacji) +- [Wybierz jeden język do rozmowy kwalifikacyjnej](#wybierz-jeden-język-do-rozmowy-kwalifikacyjnej) +- [Lista książek](#lista-książek) +- [Zanim zaczniesz](#zanim-zaczniesz) +- [Czego tutaj nie zobaczysz](#czego-tutaj-nie-zobaczysz) +- [Wymagana wiedza](#wymagana-wiedza) +- [Plan dzienny](#plan-dzienny) +- [Złożoność algorytmiczna / Big-O / Analiza asymptotyczna](#złożoność-algorytmiczna--big-o--analiza-asymptotyczna) +- [Struktury danych](#struktury-danych) - [Arrays](#arrays) - [Linked Lists](#linked-lists) - [Stack](#stack) - [Queue](#queue) - [Hash table](#hash-table) -- [More Knowledge](#more-knowledge) +- [Więcej wiedzy](#więcej-wiedzy) - [Binary search](#binary-search) - [Bitwise operations](#bitwise-operations) -- [Trees](#trees) +- [Drzewa](#drzewa) - [Trees - Notes & Background](#trees---notes--background) - [Binary search trees: BSTs](#binary-search-trees-bsts) - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) - balanced search trees (general concept, not details) - traversals: preorder, inorder, postorder, BFS, DFS -- [Sorting](#sorting) +- [Sortowanie](#sortowanie) - selection - insertion - heapsort - quicksort - merge sort -- [Graphs](#graphs) +- [Grafy](#grafy) - directed - undirected - adjacency matrix - adjacency list - traversals: BFS, DFS -- [Even More Knowledge](#even-more-knowledge) +- [Znów więcej wiedzy](#znów-więcej-wiedzy) - [Recursion](#recursion) - [Dynamic Programming](#dynamic-programming) - [Object-Oriented Programming](#object-oriented-programming) @@ -117,15 +117,15 @@ Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemó - [Unicode](#unicode) - [Endianness](#endianness) - [Networking](#networking) -- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) -- [Final Review](#final-review) -- [Coding Question Practice](#coding-question-practice) -- [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) +- [Projektowanie systemu, skalowalność, przetwarzanie danych](#projektowanie-systemu-skalowalność-przetwarzanie-danych) (jeśli masz 4+ lat doświadczenia) +- [Końcowa rozmowa rekrutacyjna](#końcowa-rozmowa-rekrutacyjna) +- [Praktyka kodowania](#praktyka-kodowania) +- [Zadania/wyzwania programistyczne](#zadania-wyzwania-programistyczne) +- [Gdy już jesteś bliżej rozmowy rekrutacyjnej](#gdy-już-jesteś-bliżej-rozmowy-rekrutacyjnej) +- [Twoje CV](#twoje-cv) +- [Zastanów się, kiedy rozmowa kwalifikacyjna będzie nadchodzić](#zastanów-się-kiedy-rozmowa-kwalifikacyjna-będzie-nadchodzić) +- [Pytania dla rekrutera](#pytania-dla-rekrutera) +- [Gdy już zdobędziesz pracę](#gdy-już-zdobędziesz-pracę) ---------------- Wszystko poniżej tego punktu jest nadprogramowe ---------------- @@ -133,21 +133,21 @@ Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemó - [Additional Books](#additional-books) - [Additional Learning](#additional-learning) - - [Compilers](#compilers) - - [Emacs and vi(m)](#emacs-and-vim) - - [Unix command line tools](#unix-command-line-tools) - - [Information theory](#information-theory-videos) + - [Kompilatory](#kompilatory) + - [Emacs oraz vi(m)](#emacs-oraz-vim) + - [Narzędzia wiersza poleceń systemu Unix](#narzędzia-wiersza-poleceń-systemu-unix) + - [Teoria informacji](#teoria-informacji-filmy) - [Parity & Hamming Code](#parity--hamming-code-videos) - - [Entropy](#entropy) - - [Cryptography](#cryptography) - - [Compression](#compression) - - [Computer Security](#computer-security) - - [Garbage collection](#garbage-collection) + - [Entropia](#entropia) + - [Kryptografia](#kryptografia) + - [Kompresja](#kompresja) + - [Bezpieczeństwo komputerowe](#bezpieczeństwo-komputerowe) + - [Garbage collection - Odśmiecanie pamięci](#garbage-collection--odśmiecanie-pamięci) - [Parallel Programming](#parallel-programming) - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - [A*](#a) - - [Fast Fourier Transform](#fast-fourier-transform) - - [Bloom Filter](#bloom-filter) + - [Szybka transformata Fouriera](#szybka-transformata-fouriera) + - [Filtr Blooma](#filtr-blooma) - [HyperLogLog](#hyperloglog) - [Locality-Sensitive Hashing](#locality-sensitive-hashing) - [van Emde Boas Trees](#van-emde-boas-trees) @@ -165,15 +165,15 @@ Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemó - [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-videos) + - [Sterta](#sterta) + - [Programowanie liniowe](#programowanie-liniowe) - [Geometry, Convex hull](#geometry-convex-hull-videos) - - [Discrete math](#discrete-math) - - [Machine Learning](#machine-learning) -- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) -- [Video Series](#video-series) -- [Computer Science Courses](#computer-science-courses) -- [Papers](#papers) + - [Matematyka dyskretna](#matematyka-dyskretna) + - [Machine Learning - Uczenie maszynowe](#machine-learning--uczenie-maszynowe) +- [Dodatkowe szczegóły na niektóre tematy](#dodatkowe-szczegóły-na-niektóre-tematy) +- [Serie wideo](#serie-wideo) +- [Kursy Computer Science](#kursy-computer-science) +- [Literatura](#literatura) --- @@ -523,7 +523,7 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - [ ] [Singly Linked Lists (wideo)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - [ ] [CS 61B - Linked Lists 1 (wideo)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - [ ] [CS 61B - Linked Lists 2 (wideo)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) + - [ ] [C Code (wideo)](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 (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) @@ -745,25 +745,25 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) -- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) +- [ ] [Sedgewick - Quicksort (4 wideo)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) - [ ] UC Berkeley: - - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) - - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) - - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) - - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + - [ ] [CS 61B Wykład 29: Sortowanie I (wideo)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Wykład 30: Sortowanie II (wideo)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Wykład 32: Sortowanie III (wideo)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Wykład 33: Sortowanie V (wideo)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) -- [ ] [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) +- [ ] [Sortowanie bąbelkowe (wideo)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [Analiza sortowania bąbelkowego (wideo)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [Sortowanie przez wstawianie, Sortowanie przez scalanie (wideo)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [Sortowanie przez wstawianie (wideo)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [Sortowanie przez scalanie (wideo)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [Sortowanie szybkie Quicksort (wideo)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [Sortowanie przez wybieranie (wideo)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) - [ ] Merge sort code: - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) @@ -799,7 +799,7 @@ Jeśli potrzebujesz więcej informacji na ten temat, zobacz sekcję "Sortowanie" ## Grafy -Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were. +Grafy mogą być wykorzystane do przedstawienia wielu problemów w informatyce, więc ta sekcja jest długa, podobnie jak drzewa i sortowanie. - Uwagi: - Są 4 podstawowe sposoby reprezentacji grafu w pamięci: @@ -823,7 +823,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (wideo)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (wideo)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) -- [ ] Graphs (review and more): +- [ ] Grafy (review and more): - [ ] [6.006 Single-Source Shortest Paths Problem (wideo)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [6.006 Dijkstra (wideo)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) @@ -838,7 +838,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Greedy Algorithms: Minimum Spanning Tree (wideo)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (wideo)](https://www.youtube.com/watch?v=RpgcYiky7uw) -- Full Coursera Course: +- Pełny kurs Coursera: - [ ] [Algorithms on Graphs (wideo)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - I'll implement: @@ -857,7 +857,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] list strongly connected components - [ ] check for bipartite graph -## Więcej wiedzy +## Znów więcej wiedzy - ### Rekursja - [ ] Stanford lectures on recursion & backtracking: @@ -870,38 +870,38 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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 - - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for dynamic programming. +- ### Programowanie dynamiczne + - Prawdopodobnie nie będziesz mieć programowania dynamicznego podczas swojej rekrutacji, ale warto umieć rozpoznawać problem, jako kandydata na ten właśnie rodzaj. - 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) + - [ ] [Skiena: CSE373 2012 - Lecture 21 - Dynamic Programming Examples (wideo)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (wideo)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (wideo)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson: Dynamic Programming I - Lecture 11 (wideo)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: Dynamic programming II - Lecture 12 (wideo)](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) + [Dynamic Programming (wideo)](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) + - [ ] [The RNA secondary structure problem (wideo)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) + - [ ] [A dynamic programming algorithm (wideo)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) + - [ ] [Illustrating the DP algorithm (wideo)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [Running time of the DP algorithm (wideo)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) + - [ ] [DP vs. recursive implementation (wideo)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) + - [ ] [Global pairwise sequence alignment (wideo)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) + - [ ] [Local pairwise sequence alignment (wideo)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) - ### Object-Oriented Programming - programowanie obiektowe - - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] SOLID OOP Principles: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + - [ ] [Optional: UML 2.0 Series (wideo)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] SOLID OOP Principles: [SOLID Principles (wideo)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) - ### Wzorce projektowe - - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) + - [ ] [Quick UML review (wideo)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) - [ ] Naucz się tych wzorców: - [ ] strategy (strategia) - [ ] singleton @@ -920,60 +920,60 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] iterator - [ ] composite (kompozyt) - [ ] flyweight (pyłek) - - [ ] [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) + - [ ] [Rozdział 6 (Część 1) - Patterns (wideo)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) + - [ ] [Rozdział 6 (Część 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (wideo)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [Rozdział 6 (Część 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (wideo)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [Series of videos (27 wideo)](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) - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) -- ### 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) +- ### Kombinatoryka (n choose k) & probabilistyka + - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (wideo)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) + - [ ] [Make School: Probability (wideo)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) + - [ ] [Make School: More Probability and Markov Chains (wideo)](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) + - [ ] [Probability Explained (wideo)](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) + - [ ] [Computational Complexity (wideo)](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) + - [ ] [NP Completeness II & Reductions (wideo)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness III (wideo)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness IV (wideo)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] Skiena: - - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-Completeness (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) + - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-Completeness (wideo)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - Lecture 24 - NP-Completeness Proofs (wideo)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 25 - NP-Completeness Challenge (wideo)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [Complexity: P, NP, NP-completeness, Reductions (wideo)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [Complexity: Approximation Algorithms (wideo)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) + - [ ] [Complexity: Fixed-Parameter Algorithms (wideo)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - Peter Norvig 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) + - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (wideo)](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) + - [ ] [LeetCode - 146 LRU Cache (C++) (wideo)](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: The Memory Hierarchy (wideo)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) + - [ ] [MIT 6.004 L16: Cache Issues (wideo)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) - ### Procesy i wątki - - [ ] Computer Science 162 - Operating Systems (25 videos): - - for processes and threads see videos 1-11 - - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [ ] Computer Science 162 - Operating Systems (25 wideo): + - dla procesów i wątków zobacz wideo 1-11 + - [Operating Systems and System Programming (wideo)](https://archive.org/details/ucberkeley-webcast-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) - Pokrywa: - Procesy, wątki, problemy z współbieżnością @@ -990,21 +990,21 @@ Graphs can be used to represent many problems in computer science, so this secti - CPU activity, interrupts, context switching - Modern concurrency constructs with multicore processors - [Paging, segmentation and virtual memory (wideo)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - - [Interrupts (wideo)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - [Przerwania (wideo)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - 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 the 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): + - [ ] [threads in C++ (series - 10 wideo)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) + - [ ] współbieżność w Python (wideo): - [ ] [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) + - [ ] [Muteks w Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) - ### Testowanie - Aby pokryć: @@ -1127,7 +1127,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) -- [ ] Scalability: +- [ ] Skalowalność: - You don't need all of these. Just pick a few that interest you. - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) - [ ] Short series: From f7c0570e64f39ab3aa287899a8bdbf3857b33a4d Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 9 Apr 2020 13:48:54 +0200 Subject: [PATCH 185/263] update readme-pl updated --- translations/README-pl.md | 82 ++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/translations/README-pl.md b/translations/README-pl.md index feb5b31..2acdea6 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -75,41 +75,41 @@ Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemó - [Złożoność algorytmiczna / Big-O / Analiza asymptotyczna](#złożoność-algorytmiczna--big-o--analiza-asymptotyczna) - [Struktury danych](#struktury-danych) - [Arrays](#arrays) - - [Linked Lists](#linked-lists) - - [Stack](#stack) - - [Queue](#queue) + - [Listy łączone](#listy-łączone) + - [Stos](#stos) + - [Kolejka](#kolejka) - [Hash table](#hash-table) - [Więcej wiedzy](#więcej-wiedzy) - [Binary search](#binary-search) - - [Bitwise operations](#bitwise-operations) + - [Operacje bitowe](#operacje-bitowe) - [Drzewa](#drzewa) - - [Trees - Notes & Background](#trees---notes--background) - - [Binary search trees: BSTs](#binary-search-trees-bsts) - - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) + - [Drzewa - uwagi & zarys](#trees---uwagi--zarys) + - [Binary search trees: BSTs - drzewa binarne](#binary-search-trees-bsts--drzewa-binarne) + - [Sterta / kolejka priorytetowa / sterta binarna](#sterta--kolejka-priorytetowa--sterta-binarna) - balanced search trees (general concept, not details) - traversals: preorder, inorder, postorder, BFS, DFS - [Sortowanie](#sortowanie) - - selection - - insertion - - heapsort - - quicksort - - merge sort + - selection (sortowanie przez wybieranie) + - insertion (sortowanie przez wstawianie) + - heapsort (sortowanie przez kopcowanie) + - quicksort (sortowanie szybkie) + - merge sort (sortowanie przez scalanie) - [Grafy](#grafy) - - directed - - undirected - - adjacency matrix - - adjacency list + - skierowany + - nieskierowany + - macierz sąsiedztwa + - lista sąsiedztwa - traversals: BFS, DFS - [Znów więcej wiedzy](#znów-więcej-wiedzy) - - [Recursion](#recursion) - - [Dynamic Programming](#dynamic-programming) - - [Object-Oriented Programming](#object-oriented-programming) - - [Design Patterns](#design-patterns) - - [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability) + - [Rekursja](#rekursja) + - [Programowanie dynamiczne](#programowanie-dynamiczne) + - [Object-Oriented Programming - programowanie obiektowe](#object-oriented-programming--programowanie-obiektowe) + - [wzorce-projektowe](#wzorce-projektowe) + - [Kombinatoryka (n choose k) & probabilistyka](#kombinatoryka-n-choose-k--probabilistyka) - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms) - [Caches](#caches) - - [Processes and Threads](#processes-and-threads) - - [Testing](#testing) + - [Procesy i wątki](#procesy-i-wątki) + - [Testowanie](#testowanie) - [Scheduling](#scheduling) - [String searching & manipulations](#string-searching--manipulations) - [Tries](#tries) @@ -1038,23 +1038,25 @@ Grafy mogą być wykorzystane do przedstawienia wielu problemów w informatyce, If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) - ### Tries -> Trie to drzewo węzłów, które obsługuje operacje Znajdź i Wstaw [etc (...)](https://pl.wikipedia.org/wiki/Drzewo_trie) - - Uwaga: istnieją różne rodzaje drzew tries. Niektóre mają prefixy, niektóre nie, a niektóre używają stringów zamiast bitów - do śledzenia ścieżki. - - Czytam kod, ale go nie implementuję. - - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) - - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) - - [ ] [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 (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) - - [ ] [Performance Of Tries (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) - - [ ] [Implementing A Trie (wideo)](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/competitive-programming/tutorials/using-tries/) - - [ ] [Stanford Lecture (real world use case) (wideo)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) - - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (wideo)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + +Trie to drzewo węzłów, które obsługuje operacje Znajdź i Wstaw [etc (...)](https://pl.wikipedia.org/wiki/Drzewo_trie) + + - Uwaga: istnieją różne rodzaje drzew tries. Niektóre mają prefixy, niektóre nie, a niektóre używają stringów zamiast bitów + do śledzenia ścieżki. + - Czytam kod, ale go nie implementuję. + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [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 (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) + - [ ] [Performance Of Tries (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) + - [ ] [Implementing A Trie (wideo)](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/competitive-programming/tutorials/using-tries/) + - [ ] [Stanford Lecture (real world use case) (wideo)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) + - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (wideo)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) - ### Floating Point Numbers - [ ] 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) From 69e83ac561a5c79b099106b45b3f33a9c2e290ee Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 9 Apr 2020 14:30:41 +0200 Subject: [PATCH 186/263] update readme-pl updated --- translations/README-pl.md | 218 +++++++++++++++++++------------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/translations/README-pl.md b/translations/README-pl.md index 2acdea6..687f09e 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -78,7 +78,7 @@ Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemó - [Listy łączone](#listy-łączone) - [Stos](#stos) - [Kolejka](#kolejka) - - [Hash table](#hash-table) + - [Hash table - tablica mieszająca](#hash-table--tablica-mieszająca) - [Więcej wiedzy](#więcej-wiedzy) - [Binary search](#binary-search) - [Operacje bitowe](#operacje-bitowe) @@ -131,8 +131,8 @@ Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemó ## Dodatkowe materiały -- [Additional Books](#additional-books) -- [Additional Learning](#additional-learning) +- [Dodatkowe książki](#dodatkowe-książki) +- [Dodatkowe materiały](#dodatkowe-materiały) - [Kompilatory](#kompilatory) - [Emacs oraz vi(m)](#emacs-oraz-vim) - [Narzędzia wiersza poleceń systemu Unix](#narzędzia-wiersza-poleceń-systemu-unix) @@ -153,9 +153,9 @@ Jeśli chcesz być inżynierem ds. niezawodności i bezpieczeństwa lub systemó - [van Emde Boas Trees](#van-emde-boas-trees) - [Augmented Data Structures](#augmented-data-structures) - [Balanced search trees](#balanced-search-trees) - - AVL trees - - Splay trees - - Red/black trees + - drzewa AVL + - drzewa Splay + - drzewa czerwono-czarne - 2-3 search trees - 2-3-4 Trees (aka 2-4 trees) - N-ary (K-ary, M-ary) trees @@ -390,7 +390,7 @@ Moja baza danych fiszekw formacie Anki: https://ankiweb.net/shared/info/25173560 Musisz zastosować zdobytą wiedzę do rozwiązywania problemów, inaczej zapomnisz. Popełniłem ten błąd. Gdy nauczysz się tematu, aby czuć się z tym komfortowo, np. listy powiązane - otwórz jedną z książek o rekrutacji IT i zrób kilka pytań dotyczących list powiązanych (linked lists). Następnie przejdź do następnego tematu do nauki. Potem wróć i zrób kolejne zadanie z listą powiązaną, problem z rekurencją lub cokolwiek innego. Ale rób zadania podczas nauki. Nie jesteś zatrudniony do wiedzy, ale do tego jak zastosować wiedzę. Polecam kilka książek i stron. -Zobacz tutaj, aby uzyskać więcej informacji: [Praktyczne pytania programistyczne](#coding-question-practice) +Zobacz tutaj, aby uzyskać więcej informacji: [Praktyczne pytania programistyczne](#praktyczne-pytania-programistyczne) ### 4. Przeglądaj, przeglądaj, przeglądaj @@ -484,14 +484,14 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - ### Arrays - Zaimplementuj wektor automatycznie zmieniający rozmiar. - [ ] Opis: - - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) - - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) + - [Arrays (wideo)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (wideo)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) + - [Basic Arrays (wideo)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (wideo)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) + - [Dynamic Arrays (wideo)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Jagged Arrays (wideo)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [Jagged Arrays (wideo)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (wideo)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] Zaimplementuj vector (mutable array z automatycznym zmienianiem rozmiaru): - [ ] 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 @@ -578,16 +578,16 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - dequeue: O(1) (linked list and array) - empty: O(1) (linked list and array) -- ### Hash table - - [ ] Videos: +- ### Hash table - tablica mieszająca + - [ ] Materiały wideo: - [ ] [Hashing with Chaining (wideo)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) - [ ] [Table Doubling, Karp-Rabin (wideo)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [Open Addressing, Cryptographic Hashing (wideo)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - [ ] [PyCon 2010: The Mighty Dictionary (wideo)](https://www.youtube.com/watch?v=C4Kc8xzcA68) - - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (wideo)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) - - [ ] [(Advanced) Perfect hashing (wideo)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) + - [ ] [(Zaawansowane) Randomization: Universal & Perfect Hashing (wideo)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(Zaawansowane) Perfect hashing (wideo)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - - [ ] Online Courses: + - [ ] Kursy online: - [ ] [Understanding Hash Functions (wideo)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - [ ] [Using Hash Tables (wideo)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) @@ -646,19 +646,19 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - ### Drzewa - uwagi & zarys - [ ] [Series: Core Trees (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - [ ] [Series: Trees (wideo)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - - basic tree construction - - traversal + - podstawy budowy drzewa + - traversal (ścieżki) - manipulation algorithms - [ ] [BFS(breadth-first search) and DFS(depth-first search) (wideo)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - BFS notes: - level order (BFS, using queue) - - time complexity: O(n) - - space complexity: best: O(1), worst: O(n/2)=O(n) + - złożoność czasowa: O(n) + - złożoność pamięciowa: best: O(1), worst: O(n/2)=O(n) - DFS notes: - - time complexity: O(n) - - space complexity: - best: O(log n) - avg. height of tree - worst: O(n) + - złożoność czasowa: O(n) + - złożoność pamięciowa: + najlepsza: O(log n) - avg. height of tree + najgorsza: O(n) - inorder (DFS: left, self, right) - postorder (DFS: left, right, self) - preorder (DFS: self, left, right) @@ -670,16 +670,16 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - [ ] [Wprowadzenie (wideo)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) - [ ] [MIT (wideo)](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) + - [ ] [Binary search tree - Implementation in C/C++ (wideo)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) + - [ ] [BST implementation - memory allocation in stack and heap (wideo)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) + - [ ] [Find min and max element in a binary search tree (wideo)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Find height of a binary tree (wideo)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) + - [ ] [Binary tree traversal - breadth-first and depth-first strategies (wideo)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32) + - [ ] [Binary tree: Level Order Traversal (wideo)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Binary tree traversal: Preorder, Inorder, Postorder (wideo)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Check if a binary tree is binary search tree or not (wideo)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Delete a node from Binary Search Tree (wideo)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) + - [ ] [Inorder Successor in a binary search tree (wideo)](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 @@ -694,20 +694,20 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - [ ] get_successor // returns next-highest value in tree after given value, -1 if none - ### Sterta / kolejka priorytetowa / sterta binarna - - 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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - przedstawiane jako drzewo, ale zwykle liniowo w pamięci (array, linked list) + - [ ] [Sterta](https://en.wikipedia.org/wiki/Heap_(data_structure)) + - [ ] [Wprowadzenie (wideo)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) + - [ ] [Naive Implementations (wideo)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) + - [ ] [Binary Trees (wideo)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) + - [ ] [Tree Height Remark (wideo)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) + - [ ] [Basic Operations (wideo)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) + - [ ] [Complete Binary Trees (wideo)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) + - [ ] [Pseudocode (wideo)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) + - [ ] [Heap Sort - jumps to start (wideo)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) + - [ ] [Heap Sort (wideo)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) + - [ ] [Building a heap (wideo)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) + - [ ] [MIT: Heaps and Heap Sort (wideo)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [CS 61B Lecture 24: Priority Queues (wideo)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) - [ ] Implement a max-heap: - [ ] insert @@ -736,9 +736,9 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - 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. +- dla heapsort, zobacz Struktury danych - sterta, powyżej. Heapsort jest świetny, ale niestabilny. -- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) +- [ ] [Sedgewick - Mergesort (5 wideo)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) @@ -781,7 +781,7 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - For heapsort, see Heap data structure above. - [ ] Not required, but I recommended them: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [Sedgewick - Radix Sorts (6 wideo)](https://www.coursera.org/learn/algorithms-part2/home/week/3) - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) @@ -789,10 +789,10 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [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) + - [ ] [Radix Sort (wideo)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [Radix Sort, Counting Sort (linear time given constraints) (wideo)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (wideo)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Sorting in Linear Time (wideo)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) Podsumowując, oto wizualna reprezentacja [15 algorytmów sortowania](https://www.youtube.com/watch?v=kPRA0W1kECg). Jeśli potrzebujesz więcej informacji na ten temat, zobacz sekcję "Sortowanie" w [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) @@ -861,14 +861,14 @@ Grafy mogą być wykorzystane do przedstawienia wielu problemów w informatyce, - ### Rekursja - [ ] 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) + - [ ] [Wykład 8 | Programming Abstractions (wideo)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] [Wykład 9 | Programming Abstractions (wideo)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) + - [ ] [Wykład 10 | Programming Abstractions (wideo)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [Wykład 11 | Programming Abstractions (wideo)](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) + - [ ] [Tail Recursion (wideo)](https://www.youtube.com/watch?v=L1jjXGfxozc) - ### Programowanie dynamiczne - Prawdopodobnie nie będziesz mieć programowania dynamicznego podczas swojej rekrutacji, ale warto umieć rozpoznawać problem, jako kandydata na ten właśnie rodzaj. @@ -876,13 +876,13 @@ Grafy mogą być wykorzystane do przedstawienia wielu problemów w informatyce, - 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 (wideo)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) - - [ ] [Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (wideo)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Skiena: CSE373 2012 - Wykład 19 - Introduction to Dynamic Programming (video)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) + - [ ] [Skiena: CSE373 2012 - Wykład 20 - Edit Distance (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) + - [ ] [Skiena: CSE373 2012 - Wykład 21 - Dynamic Programming Examples (wideo)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena: CSE373 2012 - Wykład 22 - Applications of Dynamic Programming (wideo)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (wideo)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) - - [ ] [Simonson: Dynamic Programming I - Lecture 11 (wideo)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - - [ ] [Simonson: Dynamic programming II - Lecture 12 (wideo)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] [Simonson: Dynamic Programming I - Wykład 11 (wideo)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: Dynamic programming II - Wykład 12 (wideo)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) - [ ] List of individual DP problems (each is short): [Dynamic Programming (wideo)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - [ ] Yale Lecture notes: @@ -946,14 +946,14 @@ Grafy mogą być wykorzystane do przedstawienia wielu problemów w informatyce, - Know what NP-complete means. - [ ] [Computational Complexity (wideo)](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) + - [ ] [Greedy Algs. II & Intro to NP Completeness (wideo)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) - [ ] [NP Completeness II & Reductions (wideo)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - [ ] [NP Completeness III (wideo)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) - [ ] [NP Completeness IV (wideo)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] Skiena: - - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-Completeness (wideo)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) - - [ ] [CSE373 2012 - Lecture 24 - NP-Completeness Proofs (wideo)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [ ] [CSE373 2012 - Lecture 25 - NP-Completeness Challenge (wideo)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Wykład 23 - Introduction to NP-Completeness (wideo)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - Wykład 24 - NP-Completeness Proofs (wideo)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Wykład 25 - NP-Completeness Challenge (wideo)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - [ ] [Complexity: P, NP, NP-completeness, Reductions (wideo)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) - [ ] [Complexity: Approximation Algorithms (wideo)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) - [ ] [Complexity: Fixed-Parameter Algorithms (wideo)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) @@ -964,7 +964,7 @@ Grafy mogą być wykorzystane do przedstawienia wielu problemów w informatyce, - ### Caches - [ ] LRU cache: - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (wideo)](https://www.youtube.com/watch?v=R5ON3iwx78M) - - [ ] [Implementing LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI) + - [ ] [Implementing LRU (wideo)](https://www.youtube.com/watch?v=bq6N7Ym81iI) - [ ] [LeetCode - 146 LRU Cache (C++) (wideo)](https://www.youtube.com/watch?v=8-FZRAjR7qU) - [ ] CPU cache: - [ ] [MIT 6.004 L15: The Memory Hierarchy (wideo)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) @@ -1019,7 +1019,7 @@ Grafy mogą być wykorzystane do przedstawienia wielu problemów w informatyce, - [ ] Dependency injection: - [ ] [wideo](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) + - [ ] [Jak pisać testy](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) - ### Scheduling - in an OS, how it works @@ -1131,7 +1131,7 @@ Trie to drzewo węzłów, które obsługuje operacje Znajdź i Wstaw [etc (...)] - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Skalowalność: - You don't need all of these. Just pick a few that interest you. - - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) + - [ ] [Great overview (wideo)](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) @@ -1189,9 +1189,9 @@ Trie to drzewo węzłów, które obsługuje operacje Znajdź i Wstaw [etc (...)] - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - [cheat sheet](https://github.com/jwasham/coding-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 + 1. Zrozumienie problemu i zakresu: + - zdefiniowanie przypadków użycia, z pomocą rekrutera + - sugestia dodatkowych funkcji - remove items that interviewer deems out of scope - assume high availability is required, add as a use case 2. Think about constraints: @@ -1400,22 +1400,22 @@ Tak na prawdę nigdy nie skończyłeś. - kanoniczna książka wzorców projektowych - [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: + - Jako przegląd i rozpoznanie problemu + - Część katalogu algorytmów znacznie wykracza poza zakres trudności, jakie napotkasz podczas rekrutacji. + - Ta książka składa się z 2 części: - class textbook on data structures and algorithms - - pros: + - plusy: - is a good review as any algorithms textbook would be - nice stories from his experiences solving problems in industry and academia - code examples in C - - cons: + - minusy: - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - algorithm catalog: - this is the real reason you buy this book. - about to get to this part. Will update here once I've made my way through it. - - Can rent it on kindle + - Można pożyczyć na kindle - Odpowiedzi: - [Rozwiązania](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) - [Rozwiązania](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) @@ -1498,37 +1498,37 @@ Tak na prawdę nigdy nie skończyłeś. - [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) +- ### Parity & Hamming Code (wideo) + - [Wprowadzenie](https://www.youtube.com/watch?v=q-3BctoUpHE) + - [Kontrola parzystości](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) - ### Entropia - - also see videos below - - make sure to watch information theory videos first + - zobacz też materiały wideo poniżej + - upewnij się że widziałeś wcześniej wideo z teorii informacji - [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176) - ### Kryptografia - - also see videos below - - make sure to watch information theory videos first + - zobacz też materiały wideo poniżej + - upewnij się że widziałeś wcześniej wideo z teorii informacji - [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) - ### Kompresja - - 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) + - upewnij się że widziałeś wcześniej wideo z teorii informacji + - Computerphile (wideo): + - [Kompresja](https://www.youtube.com/watch?v=Lto-ajuqW3w) + - [Entropia w kompresji](https://www.youtube.com/watch?v=M5c_RFKVkko) + - [Upside Down Trees (Drzewa Huffman)](https://www.youtube.com/watch?v=umTbivyJoiI) + - [EXTRA BITS/TRITS - Drzewa Huffman](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) + - [(opcjonalnie) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s) - ### Bezpieczeństwo komputerowe - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) @@ -1556,21 +1556,21 @@ Tak na prawdę nigdy nie skończyłeś. - ### Messaging, Serialization, and Queueing Systems - [Thrift](https://thrift.apache.org/) - - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) + - [Samouczek](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) + - [Samouczki](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 101 for Java Developers (wideo)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) - [Redis](http://redis.io/) - - [Tutorial](http://try.redis.io/) + - [Samouczek](http://try.redis.io/) - [Amazon SQS (kolejka)](https://aws.amazon.com/sqs/) - [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/) - [RabbitMQ](https://www.rabbitmq.com/) - - [Get Started](https://www.rabbitmq.com/getstarted.html) + - [Rozpocznij](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) + - [Pierwsze kroki z 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) + - [Wstęp - przeczytaj podręcznik](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) @@ -1607,10 +1607,10 @@ Tak na prawdę nigdy nie skończyłeś. - [Divide & Conquer: van Emde Boas Trees (wideo)](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 + - ### Rozszerzone struktury danych - [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) -- ### Balanced search trees +- ### Zrównoważone drzewa wyszukiwania - Know at 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 From f781e9328469ee2c80142386327601bea36335eb Mon Sep 17 00:00:00 2001 From: flyotlin Date: Thu, 9 Apr 2020 23:55:02 +0800 Subject: [PATCH 187/263] 2020/04/09 commit --- translations/README-tw.md | 2618 +++++++++++++++++++++++--------- tw_translation_progress_log.md | 59 + 2 files changed, 1972 insertions(+), 705 deletions(-) mode change 100644 => 100755 translations/README-tw.md create mode 100644 tw_translation_progress_log.md diff --git a/translations/README-tw.md b/translations/README-tw.md old mode 100644 new mode 100755 index 8f22942..2e2da77 --- a/translations/README-tw.md +++ b/translations/README-tw.md @@ -1,705 +1,1913 @@ -# Coding Interview University - -> 原先我為了成為一個軟體工程師而建立這份簡單的讀書主題清單(To-do list), -> 但這份To-do list隨著時間而膨脹成這個樣子。 [做完這份To-do list上的每個目標後,我成為了Amazon的工程師](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! -> 你或許不需要像我讀一樣多。但是,每個讓你成為一位稱職工程師所需要的知識都在這裡了。 -> -> 我每天讀8~12小時的書,這樣持續了好幾個月。這是我的故事:[為什麼我為了Google面試而讀了8個月](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) -> -> 在這份To-do list內的主題會讓你擁有足夠的知識去面對幾乎每家軟體公司的專業面試, -> 這些公司包含了科技巨獸,例如Amazon、Facebook、Google,或者是Microsoft。 -> -> *祝你好運!* - -
-翻譯: - -- [中文版本](translations/README-cn.md) -- [Tiếng Việt - Vietnamese](translations/README-vi.md) -- [Español](translations/README-es.md) -- [Português Brasileiro](translations/README-ptbr.md) - -
- -
-正在翻譯的項目: - -- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) -- [עברית](https://github.com/jwasham/coding-interview-university/issues/82) -- [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) -- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) -- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) -- [French](https://github.com/jwasham/coding-interview-university/issues/89) -- [Russian](https://github.com/jwasham/coding-interview-university/issues/87) -- [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) -- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) -- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) -- [Polish](https://github.com/jwasham/coding-interview-university/issues/122) -- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) -- [Thai](https://github.com/jwasham/coding-interview-university/issues/156) -- [Greek](https://github.com/jwasham/coding-interview-university/issues/166) -- [Italian](https://github.com/jwasham/coding-interview-university/issues/170) -- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) -- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257) - -
- -## What is it? - -這是我為了從一個網頁開發者(自學,並且沒有任何與資工、電腦科學有關的學位),成為一個大公司軟體工程師,持續好幾個月的讀書計畫。 - -![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) - -這是為了那些**新手軟體工程師**,或者是那些想要轉換跑道,從軟體/網頁開發者轉為軟體工程師(需要資工、電腦科學的知識)的人。 - -請注意就算你有多年的軟體/網頁開發經驗,那些著名的大型軟體公司,像是Google、Amazon、Facebook,或是Microsoft事實上把軟體/網頁開發(Software/Web Development)與軟體工程(Software Engineering)視為不同,而後者需要的是電腦科學/資訊工程的知識。 - -如果你想成為一個可靠的工程師或者是Operation Engineer,閱讀並且學習更多這份清單中的The Optional List(裡面包含網路與資訊安全的知識)。 - ---- - -## 目錄 - -- [What is it?](#what-is-it) -- [Why use it?](#why-use-it) -- [How to use it](#how-to-use-it) -- [不要覺得自己不夠聰明](#dont-feel-you-arent-smart-enough(不要覺得自己不夠聰明)) -- [關於影片資源](#about-video-resources(關於影片資源)) -- [面試過程&面試準備](#interview-process--general-interview-prep(面試過程&面試準備)) -- [面試時專精一種程式語言](#面試時專精一種程式語言(Pick-One-Language-for-the-Interview)) -- [書單](#書單(book-list)) -- [在你開始之前](#在你開始之前) -- [這份清單沒有包含的內容](#這份清單沒有包含的內容) -- [先備知識](#先備知識) -- [每日計畫](#每日計畫) -- [演算法複雜度(Algorithmic complexity) / Big-O / 漸進分析(Asymptotic analysis)](#演算法複雜度(Algorithmic-complexity)--Big-O--漸進分析(Asymptotic-analysis)) -- [資料結構](#資料結構) - - [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) - - balanced search trees (general concept, not details) - - traversals: preorder, inorder, postorder, BFS, DFS -- [排序](#排序) - - selection - - insertion - - heapsort - - quicksort - - merge sort -- [Graphs](#graphs) - - directed - - undirected - - adjacency matrix - - adjacency list - - traversals: BFS, DFS -- [Even More Knowledge](#even-more-knowledge) - - [Recursion](#recursion) - - [Dynamic Programming](#dynamic-programming) - - [Object-Oriented Programming](#object-oriented-programming) - - [Design Patterns](#design-patterns) - - [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) - - [Testing](#testing) - - [Scheduling](#scheduling) - - [String searching & manipulations](#string-searching--manipulations) - - [Tries](#tries) - - [Floating Point Numbers](#floating-point-numbers) - - [Unicode](#unicode) - - [Endianness](#endianness) - - [Networking](#networking) -- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) -- [Final Review](#final-review) -- [Coding Question Practice](#coding-question-practice) -- [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 Resources - -- [Additional Books](#additional-books) -- [Additional Learning](#additional-learning) - - [Compilers](#compilers) - - [Emacs and vi(m)](#emacs-and-vim) - - [Unix command line tools](#unix-command-line-tools) - - [Information theory](#information-theory-videos) - - [Parity & Hamming Code](#parity--hamming-code-videos) - - [Entropy](#entropy) - - [Cryptography](#cryptography) - - [Compression](#compression) - - [Computer Security](#computer-security) - - [Garbage collection](#garbage-collection) - - [Parallel Programming](#parallel-programming) - - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - - [A*](#a) - - [Fast Fourier Transform](#fast-fourier-transform) - - [Bloom Filter](#bloom-filter) - - [HyperLogLog](#hyperloglog) - - [Locality-Sensitive Hashing](#locality-sensitive-hashing) - - [van Emde Boas Trees](#van-emde-boas-trees) - - [Augmented Data Structures](#augmented-data-structures) - - [Balanced search trees](#balanced-search-trees) - - AVL trees - - Splay trees - - Red/black trees - - 2-3 search trees - - 2-3-4 Trees (aka 2-4 trees) - - N-ary (K-ary, M-ary) trees - - B-Trees - - [k-D Trees](#k-d-trees) - - [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-videos) - - [Geometry, Convex hull](#geometry-convex-hull-videos) - - [Discrete math](#discrete-math) - - [Machine Learning](#machine-learning) -- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) -- [Video Series](#video-series) -- [Computer Science Courses](#computer-science-courses) -- [Papers](#papers) - ---- - -## Why use it? - -當我開始這項計畫的時候,我不知道Stack與Heap的差別,不知道時間複雜度(Big-O),不知道樹狀結構(Tree),也不知道如何遍歷一個圖(Graph)。過去如果我需要寫一個排序演算法(Sorting Algorithm),那個code一定是個災難。我過去都用程式語言中內建的資料結構(Data Structure),對於資料結構裡面的實作方法跟原理我完全沒有任何的概念。除非我的程式碰到了"out of memory"的錯誤我才會去找解決方法,否則我從不特別去花費心思管理程式中的記憶體配置。雖然我有用過多維陣列(Multidimensional Arrays)跟關聯陣列(Associative Arrays),但我從來沒有自己時做過資料結構。 - -這是個遠大的計畫,或許要花上你數個月的時間。如果你對其中大部分的東西已經很熟悉的話,那麼執行這項計畫所花費的時間將減少許多。 - -## How to use it - -下面每項是大綱,你需要從上到下的去理解這些大綱。 - -我用了Github-flavored markdown語法,其中包含了可以確定完成進度的任務清單。 - - -**建立一個新的Branch以使用Github-flavored markdown的勾選功能。只要在[]中打x,像是: [x]** - - - Fork一個branch,並且跟隨以下的指令 - -`git checkout -b progress` - -`git remote add jwasham https://github.com/jwasham/coding-interview-university` - -`git fetch --all` - - 在你完成了一些目標後,在框框中打x - -`git add .` - -`git commit -m "Marked x"` - -`git rebase jwasham/master` - -`git push --force` - -[更多有關Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) - -## Don't feel you aren't smart enough(不要覺得自己不夠聰明) - -- 大多數成功的軟體工程師都非常聰明,但他們都有一種覺得自己不夠聰明的不安全感。 -- [The myth of the Genius Programmer(天才Programmer的迷思)](https://www.youtube.com/watch?v=0SARbwvhupQ) -- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech(不要單打獨鬥:面對科技中的隱形怪物)](https://www.youtube.com/watch?v=1i8ylq4j_EY) - -## About Video Resources(關於影片資源) - -有些影片要註冊Coursera或者Edx的課程後才能觀看,也就是所謂的MOOCs。有時候某些課程需要等待好幾個月才能註冊,這期間你無法觀看這些課程的影片。 - - 我非常喜歡那些大學的線上課程。感謝你們幫忙加入一些免費、可隨時觀看的公開資源,像是那些線上課程的YouTube影片。 - -## Interview Process & General Interview Prep(面試過程&面試準備) - -- [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) -- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) -- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) -- [ ] 如何錄取Big Tech(Google, Amazon, Facebook, Apple): - - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) -- [ ] Coding面試解密: - - [ ] [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) -- [ ] Facebook Coding面試解密: - - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) - - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) -- [ ] 準備課程: - - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): - - 從前Google面試官身上學習如何充實自己,讓自己能夠應付軟體工程師的面試。 - - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - - Python面試準備課程,其中包含了資料結構、演算法、模擬面試等等。 - - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): - - Python免費資料結構及演算法課程。 - - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): - - 超過100種實際的資料結構及演算法練習。名師指導讓你準備好面試以及工作的實際情況。 - -## 面試時專精一種程式語言(Pick One Language for the Interview) - -在面試的coding階段,你可以選擇任何一個你擅長的程式語言。但多數大公司僅有以下選擇: - -- C++ -- Java -- Python - -你也可以選擇以下的程式語言,但可能會有某些限制: - -- JavaScript -- Ruby - -我之前寫過一篇關於在面試時選擇程式語言的文章:[Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) - -你需要非常熟練這個程式語言,並且對他非常了解。 - -閱讀更多有關程式語言的選擇: -- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ -- http://blog.codingforinterviews.com/best-programming-language-jobs/ - -[程式語言相關資源](programming-language-resources.md) - -因為我正在學習C、C++以及Python,所以下面會出現一些有關於這些程式語言的資源。 - -## 書單(Book List) - -為了節省你的時間,以下是已經縮減過的書單。 - -### 面試準備(Interview Prep) - -- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - - 附有解答 in C++ and Java - - 內含很棒的coding面試解密 - - 不會很困難,大多問題都比面試中的還簡單(從我讀過的) -- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - 附有解答 in Java - -### 如果你有額外的時間(If you have tons of extra time): - -選擇以下其中一個: - -- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) -- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) -- [ ] 程式面試精華 (Java版) - - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) - -### 程式語言精進 - -***面試時你需要選擇一種程式語言(詳如上述)*** - -以下是一些我對程式語言的建議。這邊沒有所有種類程式語言的資源,所以歡迎補充。 - -如果你讀過以下其中一本,你應該已經具備了所有解決coding問題所需要的資料結構與演算法的知識。除非你想要複習,否則**你可以跳過這個計畫中所有的教學影片**。 - -[額外程式語言精進資源](programming-language-resources.md) - -### C++ - -我沒讀過這兩本書,但他們頗受好評。作者是Sedgewick,他超讚的! - -- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) -- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) - -如果你有更好的C++書籍,請告訴我。我正在蒐集全面性的資源。 - -## Java - -- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - - 在Coursera平台上有影片、書籍內容、(以及Sedgewick!) - - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) - - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) - -或者: - -- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - - 作者:Goodrich、Tamassia、Goldwasser - - 被作為UC Berkeley資工系入門課程的補充教材 - - 看看下面我對這本書的Python版的書評。兩本書都包含了相同的主題。 - -### Python - -- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - - 作者:Goodrich、Tamassia、Goldwasser - - 我超愛這本書。他包含了所有東西。 - - 很Python的Code! - - 我的書評: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ - - -## 在你開始之前 - -這份清單隨著時間越來越大。當然,這也同時代表我越來越難以掌握他的整體內容。 - -以下是一些清單內的錯誤,希望能讓你避免這些錯誤,並且有更好的學習體驗。 - -### 1. 你沒辦法記住所有事情 - -我看了數小時的影片,同時也寫下了大量的筆記。但過了幾個月後,大部分的東西都消失的無影無蹤。我花了三天重新看過我的筆記,並做了小字卡幫助我複習他們。 - -請閱讀以下的文章以免重蹈覆轍: - -[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). - -有人推薦給我的課程(但我還沒看過:( ): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) - -### 2. 使用小字卡 - -為了解決剛剛提到的遺忘問題,我自己寫了一個小字卡網站。網站上可以新增兩種小字卡,一般的以及程式碼。 -每一種類的小字卡都有不同的格式。 - -這個小字卡網站在製作時便是以行動裝置優先的方式設計的,好處是無論我在何處,我都可以在我的手機與平板上複習。 - -製作屬於自己的免費小字卡: - -- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) -- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): -- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db): - -我的小字卡資料庫中包含了組合語言、Python的小知識、機器學習以及統計。這些內容已經超出了原本他的預設。 - -**關於小字卡**:當你第一次知道答案後,別馬上把那張小字卡標記為已知。反覆複習這張小字卡,直到每次都能答對後才是真正學會了這個問題。反覆的動作會讓這個知識深深地烙印在你的腦海內。 - -這裡有個替代我小字卡的網站[Anki](http://ankisrs.net/),很多人向我推薦過他。這個網站用同一個字卡重複出現的方式讓你牢牢地記住他。 -這個網站非常容易使用,支援多平台,並且有雲端同步功能。在iOS平台上收費25美金,其他平台免費。 - -這是我用Anki這個網站裡的格式所儲存的小字卡資料庫: https://ankiweb.net/shared/info/25173560 (感謝 [@xiewenya](https://github.com/xiewenya)) - -### 3. 學習資料結構與演算法的同時,也要做一些Coding面試中常出現的問題 - -把你學過的東西應用在解題上面,否則你很快就會忘了他們。這是一個過來人的經驗談。一旦你自認學會了一個主題,像是Linked List之類的,打開任何一本Coding面試問題書籍,做一些裡面有關Linked List的問題。接著繼續讀後面的主題。然後,再回頭反覆做有關Linked List、遞迴或者其他任何東西(原文為Recursion,非Recursive)的題目。但切記一定在讀這些資料結構、演算法的同時,也要實際去寫一些有關這些東西的題目。公司錄取你是為了能有即戰力能夠上戰場,而非一個紙上談兵的人。這邊我覺得還不錯的書籍和網站。更多: [Coding Question Practice](#coding-question-practice) - -### 4. 複習,複習,再複習 - -我自己寫了一些有關於ASCII Code、網路OSI模型、Big-O(時間複雜度)等等的小抄。我有空的時候就會把他們拿出來看一看複習一下。 - -打Code累了的話就休息半個小時,並且複習你的小字卡。 - -### 5. 專注 - -能夠干擾你,浪費你寶貴時間的東西很多。因此,專注集中精神實在很難。放點純音樂能幫上一些忙。 - -## 這份清單沒有包含的內容 - -以下為普遍但沒有包含在這份清單內的技術: - -- SQL -- Javascript -- HTML、CSS,以及其他前後端的技術 - -## 每日計畫 - -每個主題所花費的時間都不盡相同,有些只要一天,有些需要花上數天。有些主題只有單純的知識而無包含實作。 - -每天我選擇下面其中一個主題,看跟該主題相關的影片,再用下面的程式語言實作: -- C - 用使用了struct *或者其他東西當作參數的struct以及函數 -- C++ - 不要使用內建的東西 -- C++ - 用C++內建的東西,像是STL的Linked List,std::list。 -- Python - 使用內建的東西(為了練習Python) -- 寫一些測試來驗證自己寫的東西是正確的,像是用assert()等簡單的方法。 -- 你也可以用Java來練習,上面只是我自己的方法。 - -你不需要學會所有的程式語言,你只需要專精在某個程式語言 [one language for the interview](#pick-one-language-for-the-interview). - -為什麼要這樣寫Code? -- 練習,練習,再練習,直到我對他產生厭惡感,並且能輕鬆無誤地寫出那些Code。(有些東西需要特別記住,像是在邊界的時候會出現問題(edge cases),或者一些小細節) -- 全部自己來(像是手動分配/釋放記憶體,不要依賴語言中的garbage collection的功能(除了Python或者Java)) -- 利用語言中內建的東西及工具,之後在實際工作的時候才能得心應手(畢竟我不想在工作時手刻一個Linked List)。 - -我沒有時間做每個主題中的每個東西,但我會盡力而為。 - -下面是我自己寫的程式碼: - - [C](https://github.com/jwasham/practice-c) - - [C++](https://github.com/jwasham/practice-cpp) - - [Python](https://github.com/jwasham/practice-python) - - 你不需要記住每個演算法裡面的內容。 - - 試試看把程式碼寫在白板或者紙上而不是電腦上。接著用一些測資來測試他。最後才用電腦來驗證。 - - ## 先備知識 - -- [ ] **學習C++** - - C語言無所不在。在你學習的過程中,幾乎任何一本書、課程,或者影片中你都能看到他的身影。 - - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - 這本書還滿輕薄的,但他能讓你有初步對於C語言的認識。看著這本書並且練習,你能更快地掌握C語言。理解C語言能讓你更了解程式的運作以及內部記憶體配置。 - - [answers to questions](https://github.com/lekkas/c-algorithms) -- [ ] **一個程式在電腦中是如何運作的:** - - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) - - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) - - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) - - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) - - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) - -## 演算法複雜度(Algorithmic complexity) / Big-O / 漸進分析(Asymptotic analysis) - -- 沒有任何東西能實作 -- 這個主題有許多影片,看到你真正了解他為止。你可以隨時回來複習他。 -- 如果這些課程太過數學的話,你可以去看看最下面離散數學的影片,他能讓你更了解這些數學背後的來源以及原理。 -- [ ] [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: - - [影片](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - - [投影片](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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) -- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) -- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) -- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) -- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) -- [ ] TopCoder (includes recurrence relations and master theorem): - - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) - - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) -- [ ] [Cheat sheet](http://bigocheatsheet.com/) - -## 資料結構 -- ### 陣列 - - 實作一個可以自動調整大小的陣列(動態陣列vector) - - [ ] (動態)陣列背後原理: - - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) - - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) - - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - - [ ] 實作動態陣列(可變、可動態調整大小的陣列) - - [ ] 練習在程式中用陣列以及指標,透過計算指標而存取該內容,而不是直接用索引。 - - [ ] 直接動態生成一個新的陣列 - - 可以生成一個int型別的陣列,但不要使用語言提供的功能 - - 從16,或者更大的數開始寫,像是2的次方 - 16、32、64、128。 - - [ ] size() - 陣列中元素個數 - - [ ] capacity() - 陣列能存的最大元素個數 - - [ ] is_empty() - - [ ] at(index) - 傳回該索引值的元素,附有邊界檢查(boundary check) - - [ ] push(item) - - [ ] insert(index, item) - 把元素插入該索引值,把原本在該索引值的元素往右邊移動。 - - [ ] prepend(item) - 可以把元素插入索引值為0的地方。 - - [ ] pop() - 移除陣列中最後一個元素,並回傳該元素的值。 - - [ ] delete(index) - 刪除在該索引值的元素,並且把右邊剩下元素全部往左移。 - - [ ] remove(item) - 從陣列中尋找該數值,並且移除他(就算陣列中數個地方都有這個數值)。 - - [ ] find(item) - 從陣列中尋找該數值,並且傳回最前面找到該數值的索引值,如果沒有則傳回-1。 - - [ ] resize(nex_capacity) // private function - - 當陣列已經用盡了所有容量後,把陣列的容量*2。 - - 如果移除掉一個元素後,陣列實際大小是最大容量的1/4,則把陣列容量減半。 - - [ ] 時間複雜度 - - O(1) 在陣列末端插入/刪除元素 - - O(n) 在任何地方插入/刪除元素 - - [ ] 空間複雜度 - - 在記憶體中的存放位置是連續的,這種儲存方式有助於存取的性能。 - - 所需空間 = (陣列容量,>=n) * 元素所需大小,但就算結果為2n,實際上仍算成O(n) - -- ### Linked Lists - - [ ] Linked Lists背後原理: - - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - - 沒有完整的code,裡面只包含了用struct實作節點的方式以及其記憶體配置。 - - [ ] Linked List vs 陣列: - - [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) - - [ ] 小心!: 你需要一些關於指標的指標(Pointer to pointer)的知識: - (當你回傳一個指標到函式,這個動作可能會改變指標所指向的地址) - 這個頁面僅提供基本對於指標的指標的認識。我不推薦這個遍歷linked list的方式,因為他用的方式太過神奇,所以可讀性以及維護性並不好。 - - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) - - [ ] 實作Linked list (我做了有末端指標(tail pointer)的版本以及無末端指標的版本): - - [ ] size() - 回傳linked list裡面的元素個數 - - [ ] empty() - 回傳型態:bool,如果linked list為空,回傳true - - [ ] value_at(index) - 回傳索引值為index的元素的數值,第一個元素索引值為0,以此類推 - - [ ] push_front(value) - 從linked list的起始點加入新的元素 - - [ ] pop_front() - 移除第一個元素,並且回傳該元素的數值 - - [ ] push_back(value) - 在linked list末端加入新元素 - - [ ] pop_back() - 移除最後一個元素,並且回傳該元素的數值 - - [ ] front() - 回傳第一個元素的數值 - - [ ] back() - 回傳最後一個元素的數值 - - [ ] insert(index, value) - 把新元素插入到該索引值,而新元素指向原本在該索引值的元素。 - - [ ] erase(index) - 刪除該索引值的元素(節點) - - [ ] value_n_from_end(n) - 回傳從末端開始計算的第n個元素的數值 - - [ ] reverse() - 反轉該linked list - - [ ] remove_value(value) - 刪除第一個為該數值的元素(意即7 2 2 1,要刪除2的話,只刪除index:1的那個2) - - [ ] 雙向linked List - - [背後原理(影片)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) - - 不需實作 - -- ### Stack(堆疊) - - [ ] [Stacks(影片)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - - [ ] [使用Stacks先進後出(Last-In First-Out)(影片)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - - [ ] 無須實作,可以用陣列實作,但這樣太過簡單了。 - -- ### Queue(佇列) - - [ ] [使用Queues(先進先出)First-In First-Out(影片)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - - [ ] [Queue(影片)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - - [ ] [Priority Queues(影片)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - - [ ] 使用linked list實作,包含末端指標(tail pointer): - - enqueue(value) - 在queue末端加入元素 - - dequeue() - 刪除當時queue中最早進入的元素(意即queue中第一個元素),並且回傳該元素的值。 - - empty() - - full() - - [ ] 複雜度: - - - - enqueue: O(1) (平均情況,無論對於用linked list或陣列實作的方法) - - dequeue: O(1) (linked list與陣列) - - empty: O(1) (linked list與陣列) - -- ### 雜湊表(Hash table) - - [ ] 影片: - - [ ] [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) - - [ ] 線上開放式課程: - - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - - [ ] [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 table): - - [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) - - - [ ] 實作雜湊表(用陣列以及線性探測(linear probing)) - - hash(k, m) - m:雜湊表的大小 - - add(key, value) - 如果key已經存在,則更新該key的value - - exists(key) - - get(key) - - remove(key) - -## 更多 - -- ### 二分搜尋法(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/competitive-programming/tutorials/binary-search/) - - [ ] 實作: - - 二分搜尋法 (對已經排列好的數列) - - 用遞迴(recursion)的方法實作二分搜尋法 - -- ### 位元運算(Bitwise operations) - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) - - [ ] 實際了解如何用下列的位元運算子來操作每個位元: &, |, ^, ~, >>, << - - [ ] [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](https://bits.stephan-brumme.com/) - - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) - - [ ] 一補數與二補數 - - [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) - - [ ] swap values: - - [Swap](https://bits.stephan-brumme.com/swap.html) - - [ ] 絕對值: - - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) - -## 樹狀結構(Tree) - -- ### Trees - 重點與背景知識 - - [ ] [Series: Core Trees (影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - - [ ] [Series: Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - - basic tree construction - - traversal - - manipulation algorithms - - [ ] [BFS(breadth-first search) and DFS(depth-first search) (影片)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - - BFS(廣度優先搜尋)重點: - - 每一層的順序(BFS,用queue) - - 時間複雜度: O(n) - - 空間複雜度: 最佳: O(1), 最糟: O(n/2)=O(n) - - DFS(深度優先搜尋)重點: - - 時間複雜度: 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) - - 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) - - [ ] 實作: - - [ ] insert // 把數值插入到二元搜尋樹當中 - - [ ] get_node_count // get count of values stored - - [ ] print_values // 把二元搜尋樹中的數值從小到大輸出 - - [ ] delete_tree - - [ ] is_in_tree // 如果給定的數值位於二元搜尋樹當中則回傳true - - [ ] get_height // 回傳該節點內的高度(單一節點的樹高度為1) - - [ ] get_min // 回傳二元搜尋樹當中的最小值 - - [ ] get_max // 回傳二元搜尋樹當中的最大值 - - [ ] is_binary_search_tree - - [ ] delete_value - - [ ] get_successor // 回傳二元搜尋樹當中大小在給定數值後一位的數值,如果沒有則回傳-1 - -- ### Heap / Priority Queue / Binary Heap - - 一般將此資料結構以樹的方式視覺化,但實際上是以線性的方式儲存(陣列、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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) - - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) - - [ ] 實作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 - - 重點: using a min heap instead would save operations, but double the space needed (cannot do in-place). - -## 排序 \ No newline at end of file +# Coding Interview University + +> 原先我為了成為一個軟體工程師而建立這份簡單的讀書主題清單(To-do list), +> 但這份To-do list隨著時間而膨脹成這個樣子。 [做完這份To-do list上的每個目標後,我成為了Amazon的工程師](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> 你或許不需要像我讀一樣多。但是,每個讓你成為一位稱職工程師所需要的知識都在這裡了。 +> +> 我每天讀8~12小時的書,這樣持續了好幾個月。這是我的故事:[為什麼我為了Google面試而讀了8個月](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> +> 在這份To-do list內的主題會讓你擁有足夠的知識去面對幾乎每家軟體公司的專業面試, +> 這些公司包含了科技巨獸,例如Amazon、Facebook、Google,或者是Microsoft。 +> +> *祝你好運!* + +
+翻譯: + +- [中文版本](translations/README-cn.md) +- [Tiếng Việt - Vietnamese](translations/README-vi.md) +- [Español](translations/README-es.md) +- [Português Brasileiro](translations/README-ptbr.md) + +
+ +
+正在翻譯的項目: + +- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) +- [עברית](https://github.com/jwasham/coding-interview-university/issues/82) +- [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) +- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) +- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) +- [French](https://github.com/jwasham/coding-interview-university/issues/89) +- [Russian](https://github.com/jwasham/coding-interview-university/issues/87) +- [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) +- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) +- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) +- [Polish](https://github.com/jwasham/coding-interview-university/issues/122) +- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) +- [Thai](https://github.com/jwasham/coding-interview-university/issues/156) +- [Greek](https://github.com/jwasham/coding-interview-university/issues/166) +- [Italian](https://github.com/jwasham/coding-interview-university/issues/170) +- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) +- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257) + +
+ +## What is it? + +這是我為了從一個網頁開發者(自學,並且沒有任何與資工、電腦科學有關的學位),成為一個大公司軟體工程師,持續好幾個月的讀書計畫。 + +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) + +這是為了那些**新手軟體工程師**,或者是那些想要轉換跑道,從軟體/網頁開發者轉為軟體工程師(需要資工、電腦科學的知識)的人。 + +請注意就算你有多年的軟體/網頁開發經驗,那些著名的大型軟體公司,像是Google、Amazon、Facebook,或是Microsoft事實上把軟體/網頁開發(Software/Web Development)與軟體工程(Software Engineering)視為不同,而後者需要的是電腦科學/資訊工程的知識。 + +如果你想成為一個可靠的工程師或者是Operation Engineer,閱讀並且學習更多這份清單中的The Optional List(裡面包含網路與資訊安全的知識)。 + +--- + +## 目錄 + +- [What is it?](#what-is-it) +- [Why use it?](#why-use-it) +- [How to use it](#how-to-use-it) +- [不要覺得自己不夠聰明](#dont-feel-you-arent-smart-enough(不要覺得自己不夠聰明)) +- [關於影片資源](#about-video-resources(關於影片資源)) +- [面試過程&面試準備](#interview-process--general-interview-prep(面試過程&面試準備)) +- [面試時專精一種程式語言](#面試時專精一種程式語言(Pick-One-Language-for-the-Interview)) +- [書單](#書單(book-list)) +- [在你開始之前](#在你開始之前) +- [這份清單沒有包含的內容](#這份清單沒有包含的內容) +- [先備知識](#先備知識) +- [每日計畫](#每日計畫) +- [演算法複雜度(Algorithmic complexity) / Big-O / 漸進分析(Asymptotic analysis)](#演算法複雜度(Algorithmic-complexity)--Big-O--漸進分析(Asymptotic-analysis)) +- [資料結構](#資料結構) + - [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) + - balanced search trees (general concept, not details) + - traversals: preorder, inorder, postorder, BFS, DFS +- [排序](#排序) + - selection + - insertion + - heapsort + - quicksort + - merge sort +- [Graphs](#graphs) + - directed + - undirected + - adjacency matrix + - adjacency list + - traversals: BFS, DFS +- [Even More Knowledge](#even-more-knowledge) + - [Recursion](#recursion) + - [Dynamic Programming](#dynamic-programming) + - [Object-Oriented Programming](#object-oriented-programming) + - [Design Patterns](#design-patterns) + - [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) + - [Testing](#testing) + - [Scheduling](#scheduling) + - [String searching & manipulations](#string-searching--manipulations) + - [Tries](#tries) + - [Floating Point Numbers](#floating-point-numbers) + - [Unicode](#unicode) + - [Endianness](#endianness) + - [Networking](#networking) +- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) +- [Final Review](#final-review) +- [Coding Question Practice](#coding-question-practice) +- [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 Resources + +- [Additional Books](#additional-books) +- [Additional Learning](#additional-learning) + - [Compilers](#compilers) + - [Emacs and vi(m)](#emacs-and-vim) + - [Unix command line tools](#unix-command-line-tools) + - [Information theory](#information-theory-videos) + - [Parity & Hamming Code](#parity--hamming-code-videos) + - [Entropy](#entropy) + - [Cryptography](#cryptography) + - [Compression](#compression) + - [Computer Security](#computer-security) + - [Garbage collection](#garbage-collection) + - [Parallel Programming](#parallel-programming) + - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) + - [A*](#a) + - [Fast Fourier Transform](#fast-fourier-transform) + - [Bloom Filter](#bloom-filter) + - [HyperLogLog](#hyperloglog) + - [Locality-Sensitive Hashing](#locality-sensitive-hashing) + - [van Emde Boas Trees](#van-emde-boas-trees) + - [Augmented Data Structures](#augmented-data-structures) + - [Balanced search trees](#balanced-search-trees) + - AVL trees + - Splay trees + - Red/black trees + - 2-3 search trees + - 2-3-4 Trees (aka 2-4 trees) + - N-ary (K-ary, M-ary) trees + - B-Trees + - [k-D Trees](#k-d-trees) + - [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-videos) + - [Geometry, Convex hull](#geometry-convex-hull-videos) + - [Discrete math](#discrete-math) + - [Machine Learning](#machine-learning) +- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) +- [Video Series](#video-series) +- [Computer Science Courses](#computer-science-courses) +- [Papers](#papers) + +--- + +## Why use it? + +當我開始這項計畫的時候,我不知道Stack與Heap的差別,不知道時間複雜度(Big-O),不知道樹狀結構(Tree),也不知道如何遍歷一個圖(Graph)。過去如果我需要寫一個排序演算法(Sorting Algorithm),那個code一定是個災難。我過去都用程式語言中內建的資料結構(Data Structure),對於資料結構裡面的實作方法跟原理我完全沒有任何的概念。除非我的程式碰到了"out of memory"的錯誤我才會去找解決方法,否則我從不特別去花費心思管理程式中的記憶體配置。雖然我有用過多維陣列(Multidimensional Arrays)跟關聯陣列(Associative Arrays),但我從來沒有自己時做過資料結構。 + +這是個遠大的計畫,或許要花上你數個月的時間。如果你對其中大部分的東西已經很熟悉的話,那麼執行這項計畫所花費的時間將減少許多。 + +## How to use it + +下面每項是大綱,你需要從上到下的去理解這些大綱。 + +我用了Github-flavored markdown語法,其中包含了可以確定完成進度的任務清單。 + + +**建立一個新的Branch以使用Github-flavored markdown的勾選功能。只要在[]中打x,像是: [x]** + + + Fork一個branch,並且跟隨以下的指令 + +`git checkout -b progress` + +`git remote add jwasham https://github.com/jwasham/coding-interview-university` + +`git fetch --all` + + 在你完成了一些目標後,在框框中打x + +`git add .` + +`git commit -m "Marked x"` + +`git rebase jwasham/master` + +`git push --force` + +[更多有關Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + +## Don't feel you aren't smart enough(不要覺得自己不夠聰明) + +- 大多數成功的軟體工程師都非常聰明,但他們都有一種覺得自己不夠聰明的不安全感。 +- [The myth of the Genius Programmer(天才Programmer的迷思)](https://www.youtube.com/watch?v=0SARbwvhupQ) +- [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech(不要單打獨鬥:面對科技中的隱形怪物)](https://www.youtube.com/watch?v=1i8ylq4j_EY) + +## About Video Resources(關於影片資源) + +有些影片要註冊Coursera或者Edx的課程後才能觀看,也就是所謂的MOOCs。有時候某些課程需要等待好幾個月才能註冊,這期間你無法觀看這些課程的影片。 + + 我非常喜歡那些大學的線上課程。感謝你們幫忙加入一些免費、可隨時觀看的公開資源,像是那些線上課程的YouTube影片。 + +## Interview Process & General Interview Prep(面試過程&面試準備) + +- [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] 如何錄取Big Tech(Google, Amazon, Facebook, Apple): + - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) +- [ ] Coding面試解密: + - [ ] [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) +- [ ] Facebook Coding面試解密: + - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) +- [ ] 準備課程: + - [ ] [Software Engineer Interview Unleashed (paid course)](https://www.udemy.com/software-engineer-interview-unleashed): + - 從前Google面試官身上學習如何充實自己,讓自己能夠應付軟體工程師的面試。 + - [ ] [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - Python面試準備課程,其中包含了資料結構、演算法、模擬面試等等。 + - [ ] [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - Python免費資料結構及演算法課程。 + - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - 超過100種實際的資料結構及演算法練習。名師指導讓你準備好面試以及工作的實際情況。 + +## 面試時專精一種程式語言(Pick One Language for the Interview) + +在面試的coding階段,你可以選擇任何一個你擅長的程式語言。但多數大公司僅有以下選擇: + +- C++ +- Java +- Python + +你也可以選擇以下的程式語言,但可能會有某些限制: + +- JavaScript +- Ruby + +我之前寫過一篇關於在面試時選擇程式語言的文章:[Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) + +你需要非常熟練這個程式語言,並且對他非常了解。 + +閱讀更多有關程式語言的選擇: +- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ +- http://blog.codingforinterviews.com/best-programming-language-jobs/ + +[程式語言相關資源](programming-language-resources.md) + +因為我正在學習C、C++以及Python,所以下面會出現一些有關於這些程式語言的資源。 + +## 書單(Book List) + +為了節省你的時間,以下是已經縮減過的書單。 + +### 面試準備(Interview Prep) + +- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - 附有解答 in C++ and Java + - 內含很棒的coding面試解密 + - 不會很困難,大多問題都比面試中的還簡單(從我讀過的) +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - 附有解答 in Java + +### 如果你有額外的時間(If you have tons of extra time): + +選擇以下其中一個: + +- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [ ] 程式面試精華 (Java版) + - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) + +### 程式語言精進 + +***面試時你需要選擇一種程式語言(詳如上述)*** + +以下是一些我對程式語言的建議。這邊沒有所有種類程式語言的資源,所以歡迎補充。 + +如果你讀過以下其中一本,你應該已經具備了所有解決coding問題所需要的資料結構與演算法的知識。除非你想要複習,否則**你可以跳過這個計畫中所有的教學影片**。 + +[額外程式語言精進資源](programming-language-resources.md) + +### C++ + +我沒讀過這兩本書,但他們頗受好評。作者是Sedgewick,他超讚的! + +- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +如果你有更好的C++書籍,請告訴我。我正在蒐集全面性的資源。 + +## Java + +- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - 在Coursera平台上有影片、書籍內容、(以及Sedgewick!) + - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) + - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +或者: + +- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - 作者:Goodrich、Tamassia、Goldwasser + - 被作為UC Berkeley資工系入門課程的補充教材 + - 看看下面我對這本書的Python版的書評。兩本書都包含了相同的主題。 + +### Python + +- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - 作者:Goodrich、Tamassia、Goldwasser + - 我超愛這本書。他包含了所有東西。 + - 很Python的Code! + - 我的書評: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ + + +## 在你開始之前 + +這份清單隨著時間越來越大。當然,這也同時代表我越來越難以掌握他的整體內容。 + +以下是一些清單內的錯誤,希望能讓你避免這些錯誤,並且有更好的學習體驗。 + +### 1. 你沒辦法記住所有事情 + +我看了數小時的影片,同時也寫下了大量的筆記。但過了幾個月後,大部分的東西都消失的無影無蹤。我花了三天重新看過我的筆記,並做了小字卡幫助我複習他們。 + +請閱讀以下的文章以免重蹈覆轍: + +[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). + +有人推薦給我的課程(但我還沒看過:( ): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) + +### 2. 使用小字卡 + +為了解決剛剛提到的遺忘問題,我自己寫了一個小字卡網站。網站上可以新增兩種小字卡,一般的以及程式碼。 +每一種類的小字卡都有不同的格式。 + +這個小字卡網站在製作時便是以行動裝置優先的方式設計的,好處是無論我在何處,我都可以在我的手機與平板上複習。 + +製作屬於自己的免費小字卡: + +- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) +- [My flash cards database (old - 1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): +- [My flash cards database (new - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db): + +我的小字卡資料庫中包含了組合語言、Python的小知識、機器學習以及統計。這些內容已經超出了原本他的預設。 + +**關於小字卡**:當你第一次知道答案後,別馬上把那張小字卡標記為已知。反覆複習這張小字卡,直到每次都能答對後才是真正學會了這個問題。反覆的動作會讓這個知識深深地烙印在你的腦海內。 + +這裡有個替代我小字卡的網站[Anki](http://ankisrs.net/),很多人向我推薦過他。這個網站用同一個字卡重複出現的方式讓你牢牢地記住他。 +這個網站非常容易使用,支援多平台,並且有雲端同步功能。在iOS平台上收費25美金,其他平台免費。 + +這是我用Anki這個網站裡的格式所儲存的小字卡資料庫: https://ankiweb.net/shared/info/25173560 (感謝 [@xiewenya](https://github.com/xiewenya)) + +### 3. 學習資料結構與演算法的同時,也要做一些Coding面試中常出現的問題 + +把你學過的東西應用在解題上面,否則你很快就會忘了他們。這是一個過來人的經驗談。一旦你自認學會了一個主題,像是Linked List之類的,打開任何一本Coding面試問題書籍,做一些裡面有關Linked List的問題。接著繼續讀後面的主題。然後,再回頭反覆做有關Linked List、遞迴或者其他任何東西(原文為Recursion,非Recursive)的題目。但切記一定在讀這些資料結構、演算法的同時,也要實際去寫一些有關這些東西的題目。公司錄取你是為了能有即戰力能夠上戰場,而非一個紙上談兵的人。這邊我覺得還不錯的書籍和網站。更多: [Coding Question Practice](#coding-question-practice) + +### 4. 複習,複習,再複習 + +我自己寫了一些有關於ASCII Code、網路OSI模型、Big-O(時間複雜度)等等的小抄。我有空的時候就會把他們拿出來看一看複習一下。 + +打Code累了的話就休息半個小時,並且複習你的小字卡。 + +### 5. 專注 + +能夠干擾你,浪費你寶貴時間的東西很多。因此,專注集中精神實在很難。放點純音樂能幫上一些忙。 + +## 這份清單沒有包含的內容 + +以下為普遍但沒有包含在這份清單內的技術: + +- SQL +- Javascript +- HTML、CSS,以及其他前後端的技術 + +## 每日計畫 + +每個主題所花費的時間都不盡相同,有些只要一天,有些需要花上數天。有些主題只有單純的知識而無包含實作。 + +每天我選擇下面其中一個主題,看跟該主題相關的影片,再用下面的程式語言實作: +- C - 用使用了struct *或者其他東西當作參數的struct以及函數 +- C++ - 不要使用內建的東西 +- C++ - 用C++內建的東西,像是STL的Linked List,std::list。 +- Python - 使用內建的東西(為了練習Python) +- 寫一些測試來驗證自己寫的東西是正確的,像是用assert()等簡單的方法。 +- 你也可以用Java來練習,上面只是我自己的方法。 + +你不需要學會所有的程式語言,你只需要專精在某個程式語言 [one language for the interview](#pick-one-language-for-the-interview). + +為什麼要這樣寫Code? +- 練習,練習,再練習,直到我對他產生厭惡感,並且能輕鬆無誤地寫出那些Code。(有些東西需要特別記住,像是在邊界的時候會出現問題(edge cases),或者一些小細節) +- 全部自己來(像是手動分配/釋放記憶體,不要依賴語言中的garbage collection的功能(除了Python或者Java)) +- 利用語言中內建的東西及工具,之後在實際工作的時候才能得心應手(畢竟我不想在工作時手刻一個Linked List)。 + +我沒有時間做每個主題中的每個東西,但我會盡力而為。 + +下面是我自己寫的程式碼: + - [C](https://github.com/jwasham/practice-c) + - [C++](https://github.com/jwasham/practice-cpp) + - [Python](https://github.com/jwasham/practice-python) + + 你不需要記住每個演算法裡面的內容。 + + 試試看把程式碼寫在白板或者紙上而不是電腦上。接著用一些測資來測試他。最後才用電腦來驗證。 + + ## 先備知識 + +- [ ] **學習C++** + - C語言無所不在。在你學習的過程中,幾乎任何一本書、課程,或者影片中你都能看到他的身影。 + - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - 這本書還滿輕薄的,但他能讓你有初步對於C語言的認識。看著這本書並且練習,你能更快地掌握C語言。理解C語言能讓你更了解程式的運作以及內部記憶體配置。 + - [answers to questions](https://github.com/lekkas/c-algorithms) +- [ ] **一個程式在電腦中是如何運作的:** + - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) + - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) + - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) + +## 演算法複雜度(Algorithmic complexity) / Big-O / 漸進分析(Asymptotic analysis) + +- 沒有任何東西能實作 +- 這個主題有許多影片,看到你真正了解他為止。你可以隨時回來複習他。 +- 如果這些課程太過數學的話,你可以去看看最下面離散數學的影片,他能讓你更了解這些數學背後的來源以及原理。 +- [ ] [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: + - [影片](https://www.youtube.com/watch?v=gSyDMtdPNpU&index=2&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [投影片](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://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) +- [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) +- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [UC Berkeley Big Omega (video)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) +- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [Illustrating "Big O" (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/illustrating-big-o-YVqzv) +- [ ] TopCoder (includes recurrence relations and master theorem): + - [Computational Complexity: Section 1](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) + - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) +- [ ] [Cheat sheet](http://bigocheatsheet.com/) + +## 資料結構 +- ### 陣列 + - 實作一個可以自動調整大小的陣列(動態陣列vector) + - [ ] (動態)陣列背後原理: + - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) + - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) + - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) + - [ ] 實作動態陣列(可變、可動態調整大小的陣列) + - [ ] 練習在程式中用陣列以及指標,透過計算指標而存取該內容,而不是直接用索引。 + - [ ] 直接動態生成一個新的陣列 + - 可以生成一個int型別的陣列,但不要使用語言提供的功能 + - 從16,或者更大的數開始寫,像是2的次方 - 16、32、64、128。 + - [ ] size() - 陣列中元素個數 + - [ ] capacity() - 陣列能存的最大元素個數 + - [ ] is_empty() + - [ ] at(index) - 傳回該索引值的元素,附有邊界檢查(boundary check) + - [ ] push(item) + - [ ] insert(index, item) - 把元素插入該索引值,把原本在該索引值的元素往右邊移動。 + - [ ] prepend(item) - 可以把元素插入索引值為0的地方。 + - [ ] pop() - 移除陣列中最後一個元素,並回傳該元素的值。 + - [ ] delete(index) - 刪除在該索引值的元素,並且把右邊剩下元素全部往左移。 + - [ ] remove(item) - 從陣列中尋找該數值,並且移除他(就算陣列中數個地方都有這個數值)。 + - [ ] find(item) - 從陣列中尋找該數值,並且傳回最前面找到該數值的索引值,如果沒有則傳回-1。 + - [ ] resize(nex_capacity) // private function + - 當陣列已經用盡了所有容量後,把陣列的容量*2。 + - 如果移除掉一個元素後,陣列實際大小是最大容量的1/4,則把陣列容量減半。 + - [ ] 時間複雜度 + - O(1) 在陣列末端插入/刪除元素 + - O(n) 在任何地方插入/刪除元素 + - [ ] 空間複雜度 + - 在記憶體中的存放位置是連續的,這種儲存方式有助於存取的性能。 + - 所需空間 = (陣列容量,>=n) * 元素所需大小,但就算結果為2n,實際上仍算成O(n) + +- ### Linked Lists + - [ ] Linked Lists背後原理: + - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) + - 沒有完整的code,裡面只包含了用struct實作節點的方式以及其記憶體配置。 + - [ ] Linked List vs 陣列: + - [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) + - [ ] 小心!: 你需要一些關於指標的指標(Pointer to pointer)的知識: + (當你回傳一個指標到函式,這個動作可能會改變指標所指向的地址) + 這個頁面僅提供基本對於指標的指標的認識。我不推薦這個遍歷linked list的方式,因為他用的方式太過神奇,所以可讀性以及維護性並不好。 + - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) + - [ ] 實作Linked list (我做了有末端指標(tail pointer)的版本以及無末端指標的版本): + - [ ] size() - 回傳linked list裡面的元素個數 + - [ ] empty() - 回傳型態:bool,如果linked list為空,回傳true + - [ ] value_at(index) - 回傳索引值為index的元素的數值,第一個元素索引值為0,以此類推 + - [ ] push_front(value) - 從linked list的起始點加入新的元素 + - [ ] pop_front() - 移除第一個元素,並且回傳該元素的數值 + - [ ] push_back(value) - 在linked list末端加入新元素 + - [ ] pop_back() - 移除最後一個元素,並且回傳該元素的數值 + - [ ] front() - 回傳第一個元素的數值 + - [ ] back() - 回傳最後一個元素的數值 + - [ ] insert(index, value) - 把新元素插入到該索引值,而新元素指向原本在該索引值的元素。 + - [ ] erase(index) - 刪除該索引值的元素(節點) + - [ ] value_n_from_end(n) - 回傳從末端開始計算的第n個元素的數值 + - [ ] reverse() - 反轉該linked list + - [ ] remove_value(value) - 刪除第一個為該數值的元素(意即7 2 2 1,要刪除2的話,只刪除index:1的那個2) + - [ ] 雙向linked List + - [背後原理(影片)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) + - 不需實作 + +- ### Stack(堆疊) + - [ ] [Stacks(影片)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [使用Stacks先進後出(Last-In First-Out)(影片)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) + - [ ] 無須實作,可以用陣列實作,但這樣太過簡單了。 + +- ### Queue(佇列) + - [ ] [使用Queues(先進先出)First-In First-Out(影片)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) + - [ ] [Queue(影片)](https://www.coursera.org/lecture/data-structures/queues-EShpq) + - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) + - [ ] [Priority Queues(影片)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) + - [ ] 使用linked list實作,包含末端指標(tail pointer): + - enqueue(value) - 在queue末端加入元素 + - dequeue() - 刪除當時queue中最早進入的元素(意即queue中第一個元素),並且回傳該元素的值。 + - empty() + - full() + - [ ] 複雜度: + - + - enqueue: O(1) (平均情況,無論對於用linked list或陣列實作的方法) + - dequeue: O(1) (linked list與陣列) + - empty: O(1) (linked list與陣列) + +- ### 雜湊表(Hash table) + - [ ] 影片: + - [ ] [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) + - [ ] 線上開放式課程: + - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [ ] [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 table): + - [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) + + - [ ] 實作雜湊表(用陣列以及線性探測(linear probing)) + - hash(k, m) - m:雜湊表的大小 + - add(key, value) - 如果key已經存在,則更新該key的value + - exists(key) + - get(key) + - remove(key) + +## 更多 + +- ### 二分搜尋法(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/competitive-programming/tutorials/binary-search/) + - [ ] 實作: + - 二分搜尋法 (對已經排列好的數列) + - 用遞迴(recursion)的方法實作二分搜尋法 + +- ### 位元運算(Bitwise operations) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] 實際了解如何用下列的位元運算子來操作每個位元: &, |, ^, ~, >>, << + - [ ] [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](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) + - [ ] 一補數與二補數 + - [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) + - [ ] swap values: + - [Swap](https://bits.stephan-brumme.com/swap.html) + - [ ] 絕對值: + - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) + +## 樹狀結構(Tree) + +- ### Trees - 重點與背景知識 + - [ ] [Series: Core Trees (影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) + - [ ] [Series: Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) + - basic tree construction + - traversal + - manipulation algorithms + - [ ] [BFS(breadth-first search) and DFS(depth-first search) (影片)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS(廣度優先搜尋)重點: + - 每一層的順序(BFS,用queue) + - 時間複雜度: O(n) + - 空間複雜度: 最佳: O(1), 最糟: O(n/2)=O(n) + - DFS(深度優先搜尋)重點: + - 時間複雜度: 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) + - 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) + - [ ] 實作: + - [ ] insert // 把數值插入到二元搜尋樹當中 + - [ ] get_node_count // get count of values stored + - [ ] print_values // 把二元搜尋樹中的數值從小到大輸出 + - [ ] delete_tree + - [ ] is_in_tree // 如果給定的數值位於二元搜尋樹當中則回傳true + - [ ] get_height // 回傳該節點內的高度(單一節點的樹高度為1) + - [ ] get_min // 回傳二元搜尋樹當中的最小值 + - [ ] get_max // 回傳二元搜尋樹當中的最大值 + - [ ] is_binary_search_tree + - [ ] delete_value + - [ ] get_successor // 回傳二元搜尋樹當中大小在給定數值後一位的數值,如果沒有則回傳-1 + +- ### Heap / Priority Queue / Binary Heap + - 一般將此資料結構以樹的方式視覺化,但實際上是以線性的方式儲存(陣列、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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] 實作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 + - 重點: using a min heap instead would save operations, but double the space needed (cannot do in-place). + +## 排序 + +- [ ] 重點: + - 實作排序,並且了解該排序法在最佳/最糟/平均情況下的複雜度為何: + - 不要用泡沫排序法(bubble sort),那個太糟了 - O(n^2),除非n<=16 + - [ ] 排序演算法的穩定性("快速排序法穩定嗎?") + - [排序演算法的穩定性](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) + - [穩定性與排序演算法](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) + - [ ] 哪個演算法可以用在linked list上?那些可以用在陣列上?或者兩個都可以? + - 我不推薦對一個linked list進行排序,但合併排序是可行的. + - [對linked list進行合併排序](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) + +- 有關於堆積排序,可以看看上面有關於堆積的介紹。堆積排序很棒,但不太穩定。 + +- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) + +- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) + +- [ ] UC Berkeley: + - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + +- [ ] [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) + +- [ ] 合併排序程式碼: + - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] 快速排序程式碼: + - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + +- [ ] 實作: + - [ ] 合併排序: 平均與最糟都是O(n log n) + - [ ] 快速排序: 平均O(n log n) + - 選擇排序與插入排序平均與最糟的時間複雜度都是O(n^2)。 + - 有關堆積排序,請見上方關於堆積的介紹。 + +- [ ] 非必要,但我建議看一看: + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [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) + +這裡有[15種排序演算法](https://www.youtube.com/watch?v=kPRA0W1kECg)的影片,如果你想對排序演算法有更多的了解,看看[Additional Detail on Some Subjects](#additional-detail-on-some-subjects)裡的「排序」這個部分 + +## 圖 + +圖在電腦科學中可以用來表示、處理很多問題,所以這個部分就像樹以及排序一樣篇幅很長。 + +- 重點: + - 有4種基本表示圖的方式: + - 物件與指標(objects and pointers) + - adjacency matrix + - adjacency list + - adjacency map + - 請務必了解每種圖的表示法與每種表示法的優點及缺點。 + - 廣度優先搜尋(BFS)與深度優先搜尋(DFS) - 知道他們的時間複雜度,他們的優缺點,以及如何實作他們。 + - 如果出現一個問題,請優先想想看有沒有辦法用圖的方式解決,如果沒辦法再想想其他方法。 + +- [ ] MIT(影片): + - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + +- [ ] Skiena Lectures - 很棒的入門介紹: + - [ ] [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) + +- [ ] 圖(複習以及進階知識): + + - [ ] [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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [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) + +- 完整Coursera課程: + - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) + +- 我將實作: + - [ ] 深度優先搜尋搭配adjacency list(遞迴recursive) + - [ ] 深度優先搜尋搭配adjacency list(疊代+stack) + - [ ] 深度優先搜尋搭配adjacency matrix (遞迴recursive) + - [ ] 深度優先搜尋搭配adjacency matrix(疊代+stack) + - [ ] 廣度優先搜尋搭配adjacency list + - [ ] 廣度優先搜尋搭配adjacency matrix + - [ ] single-source shortest path (Dijkstra) + - [ ] minimum spanning tree + - DFS-based algorithms (看看上面Aduni的影片): + - [ ] 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 + +## 更多知識 + +- ### 遞迴Recursion + - [ ] Stanford課程-遞迴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) + - 什麼時候適合用這些 + - tail recursion沒有比較好? + - [ ] [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) + +- ### 動態規劃 + - 在你的面試中或許沒有任何動態規劃的問題,但能夠知道一個題目可以使用動態規劃來解決是很重要的。 + - 動態規劃很難,因為動態規劃的題目通常都要有遞迴關係。要想到他的解法有時需要天外飛來一筆的想法。 + - 我建議你可以多看一些動態規劃的題目,這可以讓你對這類型的問題以及他的長相有更多的理解。 + - [ ] 影片: + - Skiena的影片有點難跟上,他有時候用白板,寫的字又很小。 + - [ ] [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 (每一部都很短): + [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + - [ ] Yale課程筆記: + - [ ] [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) + +- ### 物件導向程式設計 + - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] 重要!物件導向程式設計原則: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + +- ### 設計模式 +- [ ] [Quick UML review(影片)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) + - [ ] 學學這些設計模式: + - [ ] 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) + - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) + +- ### 組合數&機率 + - [ ] [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大崗: + - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) + - 只有影片 - 41 (每個都很簡單而且很短): + - [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) + +- ### NP、NP-Complete以及近似演算法 + - 了解一些著名的NP-Complete問題,像是旅行推銷員問題(traveling salesman problem)和背包問題(knapsack problem),並要能夠在面試官問類似這些經典範例的問題時辨認出他們。 + - 了解NP-complete的方法。 + - [ ] [計算複雜性理論(影片))](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) + - [ ] Simonson: + - [ ] [貪心演算法II & NP Completeness導論(影片)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [NP Completeness II & Reductions(影片)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness III(影片)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness IV(影片)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) + - [ ] Skiena: + - [ ] [CSE373 2012 - Lecture 23 - NP-Completeness導論(影片)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - Lecture 24 - NP-Completeness證明(影片)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 25 - NP-Completeness牛刀小試(影片)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [複雜性: P、NP、NP-completeness、Reductions(影片)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [複雜性: 近似演算法(影片)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) + - [ ] [複雜性: Fixed-Parameter Algorithms(影片)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - Peter Norvig在影片中提到旅行推銷員問題的近似最佳解: + - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) + - 在演算法導論(Introduction to Algorithms)第1048~1140頁 + +- ### 快取(cache) + - [ ] LRU cache: + - [ ] [奇妙LRU Cache (100 Days of Google Dev)(影片)](https://www.youtube.com/watch?v=R5ON3iwx78M) + - [ ] [實作LRU(影片)](https://www.youtube.com/watch?v=bq6N7Ym81iI) + - [ ] [LeetCode - 146 LRU Cache (C++)(影片)](https://www.youtube.com/watch?v=8-FZRAjR7qU) + - [ ] CPU cache: + - [ ] [MIT 6.004 L15: 記憶體階層(影片)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) + - [ ] [MIT 6.004 L16: 快取深入探討(影片)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) + +- ### 程序與執行緒(Processes&Threads) +- [ ] Computer Science 162 - 作業系統 (25 videos): + - 程序與執行緒在第1~11部影片中 + - [作業系統以及系統程式設計(影片)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [程序與執行緒有什麼差別?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) + - 涵蓋: + - 探討程序、執行緒與並行性 + - 程序與執行緒的差別 + - 程序 + - 執行緒 + - locks + - mutexes + - semaphores + - monitors + - 他們如何運作? + - deadlock + - livelock + - CPU activity, interrupts, context switching + - Modern concurrency constructs with multicore processors + - [Paging, segmentation and virtual memory(影片)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [Interrupts(影片)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - 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 the 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) + +- ### Testing + - 涵蓋: + - 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) + - [ ] 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 + - 作業系統中排程如何運作? + - 可以從作業系統的課程影片中學習 + +- ### String searching & manipulations + - [ ] [Sedgewick - Suffix Arrays(影片)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search(影片)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) + - [ ] [Search pattern in text(影片)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + +- ### 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. + - [ ] [Sedgewick - Tries(3部影片)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [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(影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) + - [ ] [Performance Of Tries(影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) + - [ ] [Implementing A Trie(影片)](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/competitive-programming/tutorials/using-tries/) + - [ ] [Stanford Lecture (real world use case)(影片)](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) + +- ### Floating Point Numbers + - [ ] 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(影片)](https://www.youtube.com/watch?v=50ZYcZebIec) + +- ### 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://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html) + - [ ] [Big Endian Vs Little Endian(影片)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [ ] [Big And Little Endian Inside/Out(影片)](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. + +- ### 網路 + - **以下為如果你有網路相關經驗,或是想成為一個可靠的工程師需要知道的知識** + - 知道這些有益無害,多多益善! + - [ ] [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) + - [ ] Sockets: + - [ ] [Java - Sockets - Introduction(影片)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming(影片)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + +## 系統設計、可擴充性、資料處理 + +**You can expect system design questions if you have 4+ years of experience.** + +- 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. +- Considerations: + - 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**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] [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(影片)](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(影片)](https://www.youtube.com/watch?v=srOgpXECblk) +- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) +- [ ] Consensus Algorithms: + - [ ] Paxos - [Paxos Agreement - Computerphile(影片)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm(影片)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) +- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) +- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) +- [ ] Scalability: + - You don't need all of these. Just pick a few that interest you. + - [ ] [Great overview(影片)](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/competitive-programming/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 (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.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) + - [ ] [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) + - [ ] [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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/coding-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 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/) + +--- + +## 總複習 + + 這部分我放了一些簡短的影片,觀看這些影片可以快速的複習一些重要的觀念。 + 如果你想時常複習,那真是太棒了! + +- [ ] 2-3分鐘快速複習影片系列(23個影片) + - [影片](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) +- [ ] 2-5分鐘快速複習影片系列-Michael Sambol (18個影片) + - [影片](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +--- + +## 解題練習 + +現在你已經知道上面所有有關電腦科學的主題了,該是時候做些解題的練習了。 + +**解題練習不能死記題目的解法** + +為什麼你需要練習解題: +- 快速識別問題,以及如何應用正確的資料結構及演算法。 +- 蒐集問題的需求 +- 模擬面試時用你的方法闡述問題 +- 試著不要在電腦上寫程式,而是 在白板上或紙上 +- 想出該問題的時間與空間複雜度 +- 測試你的解法 + +這裡有個很棒的入門教學,內容是如何在面試中有條不紊,並且有互動溝通地解決問題。這種能力可以從面試書籍中獲得,但我覺得這個也超讚的:[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) + +家裡沒有白板嗎?這很合理。但我是個奇怪的人,家裡有個大白板。沒有白板的話,可以去美術社買個大的繪圖板。你可以坐在沙發上練習。這是我的「沙發白板」。我在照片中放了一枝筆當作比例尺。如果你用筆的話,你將會希望你可以擦拭他,因為他很快就會變髒了。通常我都用鉛筆與橡皮擦。 + +![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) + +補充: + +- [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) +- [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) +- [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) +- [Exercises for getting better at a given language](http://exercism.io/languages) + +**閱讀並解題(按照以下順序):** + +- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - 附有C、C++、Java的解答 +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - 附有Java的解答 + +看看[上方的書單](#書單(book-list)) + +## 解題練習/挑戰 + +Once you've learned your brains out, put those brains to work. +試試每天解一些題目,越多越好! + +- [如何找到解法](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) +- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) + +Coding面試題目影片: +- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + - 對於解法的練習非常有幫助 +- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - 這些是我最近很喜歡的影片,你可以在短時間內看完他們 + - 對於解法以及程式碼有很棒的解釋 + +解題網站: +- [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) +- [HackerEarth](https://www.hackerearth.com/) +- [HackerRank](https://www.hackerrank.com/) +- [Codility](https://codility.com/programmers/) +- [InterviewCake](https://www.interviewcake.com/) +- [Geeks for Geeks](http://www.geeksforgeeks.org/) +- [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Sphere Online Judge (spoj)](http://www.spoj.com/) +- [Codechef](https://www.codechef.com/) + +解題repository: +- [Python互動式coding面試解題](https://github.com/donnemartin/interactive-coding-challenges) + +更多面試: +- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. +- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - 點對點面試練習 +- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - 同樣能藉由跳過跟多家科技公司的面試,幫助你快速步上軌道, + +## 面試前夕 + +- Coding面試解密-第二集(影片): + - [Coding面試解密](https://www.youtube.com/watch?v=4NIb9l3imAo) + - [Coding面試解密 - 全端講者系列](https://www.youtube.com/watch?v=Eg5-tdAwclo) + +## 你的履歷 + +- 看看Coding面試解密中的履歷準備。 + +## 想想面試時可能的狀況 + + 一些我預想的問題(我或許已經知道答案,但想知道他們的意見或是團隊的觀點): + +- 你的團隊規模多大? +- 你的開發週期大概是怎樣?敏捷agile、瀑布式waterfall、sprint? +- 截止日前趕工是常態嗎?或是這之中有彈性? +- 在你的團隊中是怎麼做決定的? +- 每週你們開幾次會? +- 你覺得你的工作環境能幫助你專注嗎? +- 你目前在做哪個專案? +- 你喜歡這個專案的哪個部份? +- 工作生活如何? +- 工作與生活如何取得平衡? + +## 一旦你得到工作 + +恭喜!!! + +繼續學習 + +活到老,學到老。 + +--- + + ***************************************************************************************************** + ***************************************************************************************************** + + 下面的東西都是額外的。 + 讀這些東西,可以更了解電腦科學的概念, + 並且能讓自己對任何軟體工程的工作做更好的準備。 + 如此一來,你將會成為一個更全面的軟體工程師。 + + ***************************************************************************************************** + ***************************************************************************************************** + +--- + +## 選修書籍 + + 你可以從以下的書單挑選你有興趣的主題來研讀 + +- [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) + - an oldie but a goodie +- [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) + - a modern option +- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) + - a gentle introduction to design patterns +- [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) + - aka the "Gang Of Four" book, or GOF + - the canonical design patterns book +- [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) +- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - Can rent it on kindle + - 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) +- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - These chapters are worth the read to give you a nice foundation: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization +- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - aka CLR, sometimes CLRS, because Stein was late to the game + +- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) + - For a richer, more up-to-date (2017), but longer treatment + +- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture. + +## Additional Learning + + I added them to help you become a well-rounded software engineer, and to be aware of certain + technologies and algorithms, so you'll have a bigger toolbox. + +- ### Compilers + - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard 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) + +- ### Emacs and vi(m) + - 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 + - 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) + +- ### 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 + - [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) + +- ### 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 Started](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/) + +- ### 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) + +- ### Fast Fourier Transform + - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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 (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) + +- ### HyperLogLog + - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + +- ### Locality-Sensitive Hashing + - used to determine the similarity of documents + - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) + +- ### 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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) + +- ### Balanced search trees + - Know at 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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - MIT Lecture: Splay Trees: + - Gets very mathy, but watch the last 10 minutes for sure. + - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + + - **Red/black trees** + - these are a translation of a 2-3 tree (see below) + - 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) + - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) + + - **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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [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) + + - **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) + + - **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) + - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) + - [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) + + +- ### k-D Trees + - great for finding number of points in a rectangle or higher dimension object + - a good fit for k-nearest neighbors + - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + +- ### 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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [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 + - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + +- ### 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) + - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) + +- ### 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 + - 觀看下方影片 + +- ### 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: + - Books: + - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) + - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) + - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) + - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - Data School: http://www.dataschool.io/ + +--- + +## 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? + +- **SOLID** + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] 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 but 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) + + +- **Union-Find** + - [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) + +- **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) + +- **String Matching** + - 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): + - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - 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) + - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be + - nice explanation of tries + - can be skipped + +- **Sorting** + + - 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) + +## 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](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) + +- [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) + +- [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) + +- 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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) + +- [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) + +- [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-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=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) + +- [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) + +- [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) + +- [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) + +- [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) + - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) + +- [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) + +- [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) + +## 電腦科學課程 + +- [電腦科學線上課程目錄]](https://github.com/open-source-society/computer-science) +- [電腦科學課程目錄 (大多都有線上課程))](https://github.com/prakhar1989/awesome-courses) + +## 論文 + +- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) +- [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) +- [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? +- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) +- [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) +- [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - The Dynamo paper kicked off the NoSQL revolution +- [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) +- [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) +- [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) + + +## LICENSE + +[CC-BY-SA-4.0](./LICENSE.txt) \ No newline at end of file diff --git a/tw_translation_progress_log.md b/tw_translation_progress_log.md new file mode 100644 index 0000000..82d286b --- /dev/null +++ b/tw_translation_progress_log.md @@ -0,0 +1,59 @@ +# TIP (2020.04.09) +以下是這個翻譯計畫中還尚未完成的部份, +想參與這個計畫的人可以先挑選幾個部份翻譯並告知我,我會在這份log中標示那個部份已經有人負責,以避免衝突。完成翻譯後再聯絡我! +# participants +# translation log + +| 日期 | 事件 | 其他 | +|---|---|---| +| 2020/04/09 |建立tw_translation_progress_log.md | | + +# To be done... +## 雜湊表 +## Heap/Priority Queue/Binary Heap +## 更多知識: + 程序與執行緒(Processes&Threads) + Testing + String searching & manipulations + Tries + Floating Point Numbers + Unicode + Endianness +## 系統設計、可擴充性、資料處理 + +## 選修書籍 + +## Additional Learning + Compilers + Emacs and vi(m) + Unix command line tools + Information theory (videos) + Parity & Hamming Code (videos) + Entropy + Cryptography + Compression + Computer Security + Garbage collection + Parallel Programming + Messaging, Serialization, and Queueing Systems + A* + Fast Fourier Transform + Bloom Filter + HyperLogLog + Locality-Sensitive Hashing + van Emde Boas Trees + Augmented Data Structures + Balanced search trees + k-D Trees + Skip lists + Network Flows + Disjoint Sets & Union Find + Math for Fast Processing + Treap + Linear Programming (videos) + Geometry, Convex hull (videos) + Machine Learning +## Additional Detail on Some Subjects +## Video Series +## 論文 + From 0de7e5e291dad69535b750ef1d5a76944c510b77 Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 9 Apr 2020 18:01:51 +0200 Subject: [PATCH 188/263] update readme small internal link fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 111f24c..9bb001c 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) - [Português Brasileiro](translations/README-ptbr.md) -- [Polish](https://github.com/mbiesiad/coding-interview-university/blob/master/translations/README-pl.md) +- [Polish](translations/README-pl.md)
From 6e55e199783fc7da50b95657a877c4d0523a84b2 Mon Sep 17 00:00:00 2001 From: John Washam Date: Wed, 22 Apr 2020 08:53:29 -0700 Subject: [PATCH 189/263] Fixes typo in file name. --- README.md | 2 +- ...s-cheat-cheet.pdf => bits-cheat-sheet.pdf} | Bin translations/README-ar.md | 2 +- translations/README-bn.md | Bin 285802 -> 285802 bytes translations/README-cn.md | 2 +- translations/README-de.md | 2 +- translations/README-es.md | 2 +- translations/README-fr.md | 2 +- translations/README-he.md | 2 +- translations/README-hi.md | 2 +- translations/README-id.md | 2 +- translations/README-ko.md | 2 +- translations/README-pl.md | 2 +- translations/README-ptbr.md | 2 +- translations/README-th.md | 2 +- translations/README-uk.md | 2 +- translations/README-vi.md | 2 +- 17 files changed, 15 insertions(+), 15 deletions(-) rename extras/cheat sheets/{bits-cheat-cheet.pdf => bits-cheat-sheet.pdf} (100%) diff --git a/README.md b/README.md index 9bb001c..da4bfa7 100644 --- a/README.md +++ b/README.md @@ -628,7 +628,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.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: diff --git a/extras/cheat sheets/bits-cheat-cheet.pdf b/extras/cheat sheets/bits-cheat-sheet.pdf similarity index 100% rename from extras/cheat sheets/bits-cheat-cheet.pdf rename to extras/cheat sheets/bits-cheat-sheet.pdf diff --git a/translations/README-ar.md b/translations/README-ar.md index 8346fb1..d5c0ffb 100644 --- a/translations/README-ar.md +++ b/translations/README-ar.md @@ -717,7 +717,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.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: diff --git a/translations/README-bn.md b/translations/README-bn.md index 826e9884a303e2edcb87669c2819cff98fb762a8..753a2cd0594e97e503e0d92645162ae7bb58c966 100644 GIT binary patch delta 31 jcmaF0L-5rO!G>、<< - [ ] [字码(words)](https://en.wikipedia.org/wiki/Word_(computer_architecture)) diff --git a/translations/README-de.md b/translations/README-de.md index bf272e9..e5a91da 100644 --- a/translations/README-de.md +++ b/translations/README-de.md @@ -693,7 +693,7 @@ Schreib Code auf einer Tafel oder auf Papier, aber nicht am Computer. Teste mit - Binärsuche mittels Rekursion - ### Bitweise Operationen - - [ ] [Bits Spickzettel](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - man sollte viele der Zweierpotenzen kennen (von 2^1 über 2^16 und 2^32) + - [ ] [Bits Spickzettel](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - man sollte viele der Zweierpotenzen kennen (von 2^1 über 2^16 und 2^32) - [ ] Erhalte sehr gutes Verständnis Bits zu manipulieren mit: &, |, ^, ~, >>, << - [ ] [Wörter](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] Gute Einführung: diff --git a/translations/README-es.md b/translations/README-es.md index 0995f5b..f3c244d 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -636,7 +636,7 @@ Escriba código en un pizarrón o en papel no en la computadora. Pruebe con algu - Búsqueda binaria usando recursión - ### Operaciones bit a bit - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - Debería conocer varias de las potencias de 2 a partir de (2^1 to 2^16 and 2^32) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - Debería conocer varias de las potencias de 2 a partir de (2^1 to 2^16 and 2^32) - [ ] Obtenga un buen entendimiento de la manipulación de bits con: &, |, ^, ~, >>, << - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] Buena introducción: diff --git a/translations/README-fr.md b/translations/README-fr.md index 65fb769..c66547f 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -703,7 +703,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.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: diff --git a/translations/README-he.md b/translations/README-he.md index efdec4b..250fc5b 100644 --- a/translations/README-he.md +++ b/translations/README-he.md @@ -697,7 +697,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.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: diff --git a/translations/README-hi.md b/translations/README-hi.md index bd8f86d..2e83edc 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -549,7 +549,7 @@ memory" का एरर न दे, और तब मुजे कोई वै - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.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: diff --git a/translations/README-id.md b/translations/README-id.md index e04e3d5..f12d3d6 100644 --- a/translations/README-id.md +++ b/translations/README-id.md @@ -669,7 +669,7 @@ Menulis kode pada papan tulis atau kertas, bukan komputer. Uji dengan beberapa s - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.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: diff --git a/translations/README-ko.md b/translations/README-ko.md index b67b075..42c8854 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -720,7 +720,7 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - 재귀를 사용한 이진 탐색 - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32) - [ ] 비트 연산자(&, |, ^, ~, >>, <<) 제대로 이해하기 - [ ] [워드](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] 시작하기 좋은 곳: diff --git a/translations/README-pl.md b/translations/README-pl.md index 687f09e..58128df 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -617,7 +617,7 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr - binary search using recursion - ### Operacje bitowe - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32) - [ ] Dobrze zrozum manipulowanie bitami korzystając z: &, |, ^, ~, >>, << - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] Good intro: diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index c2c7dd3..c015ecc 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -650,7 +650,7 @@ Escreva código em um quadro branco ou papel, não em um computador. Teste com u - busca binária usando recursividade - ### Lógica binária - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) (Folha de consultas sobre Bits) - você deve conhecer várias das potências de 2 de (2^1 até 2^16 e 2^32) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) (Folha de consultas sobre Bits) - você deve conhecer várias das potências de 2 de (2^1 até 2^16 e 2^32) - [ ] Consiga um bom entendimento sobre manipulação de bits com: &, |, ^, ~, >>, << - [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture)) (palavras) - [ ] Boa introdução: diff --git a/translations/README-th.md b/translations/README-th.md index be3064f..e33cbc6 100644 --- a/translations/README-th.md +++ b/translations/README-th.md @@ -628,7 +628,7 @@ There are a lot of distractions that can take up valuable time. Focus and concen - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.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: diff --git a/translations/README-uk.md b/translations/README-uk.md index 5dc1fe7..f6e8c22 100644 --- a/translations/README-uk.md +++ b/translations/README-uk.md @@ -626,7 +626,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.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: diff --git a/translations/README-vi.md b/translations/README-vi.md index 0a92d0e..8ad65bc 100644 --- a/translations/README-vi.md +++ b/translations/README-vi.md @@ -662,7 +662,7 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy - Tìm kiếm nhị phân sử dụng đệ quy - ### Toán tử trên bit - - [ ] [Bits cheat sheet](/extras/cheat%20sheets/bits-cheat-cheet.pdf) - bạn nên thuộc lòng nhiều lũy thừa của 2 (từ 2^1 đến 2^16 và 2^32) + - [ ] [Bits cheat sheet](/extras/cheat%20sheets/bits-cheat-sheet.pdf) - bạn nên thuộc lòng nhiều lũy thừa của 2 (từ 2^1 đến 2^16 và 2^32) - [ ] Hãy chuẩn bị một nền tảng tốt về các biến đổi bit với các toán tử: &, |, ^, ~, >>, << - [ ] [words (thuật ngữ trong kiến trúc máy tính)](https://en.wikipedia.org/wiki/Word_(computer_architecture) ) - [ ] Bài mở đầu: From 45b6e78db1452d7b68a5b94132c750a9822a0a31 Mon Sep 17 00:00:00 2001 From: xorover <46455303+xorover@users.noreply.github.com> Date: Sat, 25 Apr 2020 22:13:52 +0300 Subject: [PATCH 190/263] Add MIT Bit Hacks lecture https://www.youtube.com/watch?v=ZusiKXcz_ac --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a814bf4..bc7b6a3 100644 --- a/README.md +++ b/README.md @@ -696,6 +696,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) + - [ ] [Bit Hacks (video)](https://www.youtube.com/watch?v=ZusiKXcz_ac) - [ ] 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) From fa94da2a0ba9250bd2ac8273d6ee29bf54b756a6 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Tue, 5 May 2020 06:48:38 -0500 Subject: [PATCH 191/263] Create README-kh.md Khmer translation - header section --- translations/README-kh.md | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 translations/README-kh.md diff --git a/translations/README-kh.md b/translations/README-kh.md new file mode 100644 index 0000000..784f9fb --- /dev/null +++ b/translations/README-kh.md @@ -0,0 +1,68 @@ +# មហាវិទ្យាល័យការសរសេរកូដសំរាប់ការសម្ភាសន៍ (Coding Interview University) + + +### បង្កើតដោយ: [@John Washam](https://github.com/jwasham) +### បកប្រែជាភាសារខ្មែរដោយ: [@Vortana Say](https://github.com/vsay01) + +> ពីដំបូងខ្ញុំបង្កើតនេះជាបញ្ជីប្រធានបទត្រូវធ្វើខ្លីដើម្បីក្លាយជាវិស្វករអភិវឌ្ឍន៍កម្មវិធី ប៉ុន្តែវាបានកើនឡើងដល់បញ្ជីធំដែលអ្នកបានឃើញសព្វថ្ងៃនេះ។ បន្ទាប់ពីឆ្លងកាត់គំរោងសិក្សានេះខ្ញុំបានក្លាយ +> ជាវិស្វករអភិវឌ្ឍន៍កម្មវិធីនៅអាមាហ្សូន (Amazon) ] (https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> អ្នកប្រហែលជាមិនចាំបាច់សិក្សាច្រេីនដូចខ្ញុំទេ។ ទោះយ៉ាងណាក៏ដោយអ្វីគ្រប់យ៉ាងដែលអ្នកត្រូវការគឺនៅទីនេះ។ +> +> ខ្ញុំបានសិក្សាប្រហែលជា ៨ ទៅ ១២ ម៉ោងក្នុងមួយថ្ងៃអស់រយៈពេលជាច្រើនខែ។ អ្នកអាចអានារឿងរបស់ខ្ញុំ៖ [ហេតុអ្វីខ្ញុំសិក្សាពេញម៉ោងរយៈពេល ៨ ខែសំរាប់ការសំភាសន៍ហ្គូហ្គល] (https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a -google-interview-cc662ce9bb13) +> +> ចំណុចដែលបានរាយនៅទីនេះនឹងជួយអ្នករៀបចំការសំភាសន៍បច្ចេកទេសនៅក្រុមហ៊ុនកម្មវិធីណាមួយ។ +> រាប់បញ្ចូលទាំងក្រុមហ៊ុនធំៗដូចជា Amazon, Facebook, Google និង Microsoft ។ +> +> * សូមសំណាងល្អដល់អ្នក! * + +
+ការបកប្រែ៖ + +- [ភាសារចិន - 中文版本](translations/README-cn.md) +- [ភាសារវៀតណាម - Tiếng Việt - Vietnamese](translations/README-vi.md) +- [ភាសារអេស្ប៉ាញ - Español](translations/README-es.md) +- [ភាសារព័រទុយហ្កាល់ - Português Brasileiro](translations/README-ptbr.md) +- [ភាសារប៉ូឡូញ - Polish](translations/README-pl.md) + +
+ +
+ភាសារដែលកំពុងបកប្រែ: + +- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) +- [עברית](https://github.com/jwasham/coding-interview-university/issues/82) +- [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) +- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) +- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) +- [French](https://github.com/jwasham/coding-interview-university/issues/89) +- [Russian](https://github.com/jwasham/coding-interview-university/issues/87) +- [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) +- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) +- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) +- [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) +- [Thai](https://github.com/jwasham/coding-interview-university/issues/156) +- [Greek](https://github.com/jwasham/coding-interview-university/issues/166) +- [Italian](https://github.com/jwasham/coding-interview-university/issues/170) +- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) +- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257) + +
+ + +## តើវាគឺជាអ្វី? + +នេះគឺជាគំរោងសិក្សារបស់ខ្ញុំដែលមានរយៈពេលជាច្រើនខែសំរាប់ការរៀនក្លាយពីអ្នកបង្កើតគេហទំព័រ (បង្រៀនដោយខ្លួនឯង និង មិនមានសញ្ញាប័ត្រ +វិទ្យាសាស្ត្រកុំព្យូទ័រ) រហូតដល់ក្លាយជាវិស្វករអភិវឌ្ឍន៍កម្មវិធីសំរាប់ក្រុមហ៊ុនធំ។! + +![ការសរសេរកូដនៅលើក្ដារខៀន - ពីតំបន់ Silicon Valley របស់ HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) + +នេះមានន័យថាសម្រាប់ ** វិស្វករអភិវឌ្ឍន៍កម្មវិធីថ្មី ** ឬអ្នកដែលប្តូរពី +ការអភិវឌ្ឍន៍កម្មវិធី / អ្នកបង្កេីតវេបសាយ (ដែលត្រូវការចំណេះដឹងផ្នែកវិទ្យាសាស្ត្រកុំព្យូទ័រ) ។ ប្រសិនបើអ្នកមាន +បទពិសោធជាច្រើនឆ្នាំក្នុងការអភិវឌ្ឍន៍កម្មវិធី នោះអ្នកអាចនឹងរំពឹងថាមានបទសម្ភាសន៍ពិបាក។ + +ប្រសិនបើអ្នកមានបទពិសោធន៍អភិវឌ្ឍន៍កម្មវិធី ឬ វេបសាយច្រើនឆ្នាំ សូមកត់សម្គាល់ថាក្រុមហ៊ុនធំ ៗ ដូចជាហ្គូហ្គោល(Google) អាម៉ាហ្សូន (Amazon) +ហ្វេសប៊ុក (Facebook) និង ម៉ៃក្រូសូហ្វ (Microsoft) មានទស្សនៈថាវិស្វករអភិវឌ្ឍន៍កម្មវិធី ខុសគ្នាពីអ្នកបង្កេីតកម្មវិធី ឬ ការអភិវឌ្ឍន៍គេហទំព័រវេបសាយ ហើយពួកគេត្រូវការចំណេះដឹងផ្នែកវិទ្យាសាស្ត្រកុំព្យូទ័រ។ + +ប្រសិនបើអ្នកចង់ក្លាយជាវិស្វករដែលអាចទុកចិត្តបានឬវិស្វករប្រតិបត្តិការសូមសិក្សាបន្ថែមពីបញ្ជីជម្រើស (បណ្តាញ និង សុវត្ថិភាព) ។ + +--- From 79b9e37599e18d70be89e0be1cd7156b1c31b9dc Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Tue, 5 May 2020 12:43:19 -0500 Subject: [PATCH 192/263] Update README-kh.md Translate Khmer - content, what it is, why use it, how to use it --- translations/README-kh.md | 116 +++++++++++++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 2 deletions(-) diff --git a/translations/README-kh.md b/translations/README-kh.md index 784f9fb..fffec2d 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -13,7 +13,7 @@ > ចំណុចដែលបានរាយនៅទីនេះនឹងជួយអ្នករៀបចំការសំភាសន៍បច្ចេកទេសនៅក្រុមហ៊ុនកម្មវិធីណាមួយ។ > រាប់បញ្ចូលទាំងក្រុមហ៊ុនធំៗដូចជា Amazon, Facebook, Google និង Microsoft ។ > -> * សូមសំណាងល្អដល់អ្នក! * +> សូមសំណាងល្អដល់អ្នក!
ការបកប្រែ៖ @@ -48,6 +48,78 @@
+--- + +## តារាងមាតិកា + +- [តើវាគឺជាអ្វី?](#what-is-it) +- [ហេតុអ្វីប្រើវា?](#why-use-it) +- [របៀបប្រើវា](#how-to-use-it) +- [កុំមានអារម្មណ៍ថាអ្នកមិនឆ្លាតគ្រប់គ្រាន់](#dont-feel-you-arent-smart-enough) +- [ធនធានវីដេអូ](#about-video-resources) +- [ដំណើរការសម្ភាសន៍ និង ការត្រៀមសម្ភាសន៍ទូទៅ](#interview-process--general-interview-prep) +- [ជ្រើសរើសភាសាមួយសម្រាប់ការសម្ភាសន៍](#pick-one-language-for-the-interview) +- [បញ្ជីសៀវភៅ](#book-list) +- [មុនពេលអ្នកចាប់ផ្តើម](#before-you-get-started) +- [អ្វីដែលអ្នកនឹងមិនឃើញ](#what-you-wont-see-covered) +- [ចំណេះដឹងជាមុនដែលគួរមាន](#prerequisite-knowledge) +- [ផែនការប្រចាំថ្ងៃ](#the-daily-plan) +- [ភាពស្មុគស្មាញនៃក្បួនដោះស្រាយ / 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) + - [Binary search](#binary-search) + - [Bitwise operations](#bitwise-operations) +- [Trees](#trees) + - [Trees - កំណត់សំគាល់ និង ប្រវត្តិ](#trees---notes--background) + - [Binary search trees: BSTs](#binary-search-trees-bsts) + - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) + - balanced search trees (គំនិតទូទៅ តែពុំមែនព័ត៌មានលម្អិតទេ) + - traversals: preorder, inorder, postorder, BFS, DFS +- [Sorting](#sorting) + - selection + - insertion + - heapsort + - quicksort + - merge sort +- [Graphs](#graphs) + - directed + - undirected + - adjacency matrix + - adjacency list + - traversals: BFS, DFS +- [ចំណេះដឹងបន្ថែមទៀត](#even-more-knowledge) + - [Recursion](#recursion) + - [Dynamic Programming](#dynamic-programming) + - [Object-Oriented Programming](#object-oriented-programming) + - [Design Patterns](#design-patterns) + - [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) + - [Testing](#testing) + - [Scheduling](#scheduling) + - [String searching & manipulations](#string-searching--manipulations) + - [Tries](#tries) + - [Floating Point Numbers](#floating-point-numbers) + - [Unicode](#unicode) + - [Endianness](#endianness) + - [Networking](#networking) +- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) +- [ពិនិត្យចុងក្រោយ](#final-review) +- [អនុវត្តសំណួរសរសេរកូដ](#coding-question-practice) +- [លំហាត់សរសេរកូដ / បញ្ហា](#coding-exerciseschallenges) +- [នៅពេលអ្នកជិតដល់ការសំភាសន៍](#once-youre-closer-to-the-interview) +- [ប្រវត្តិរូបសង្ខេបរបស់អ្នក](#your-resume) +- [ត្រូវគិតអំពីពេលសម្ភាសន៍មកដល់](#be-thinking-of-for-when-the-interview-comes) +- [មានសំណួរសម្រាប់អ្នកសម្ភាសន៍យេីង](#have-questions-for-the-interviewer) +- [នៅពេលដែលទទួលបានការងារធ្វើ](#once-youve-got-the-job) + +--- ## តើវាគឺជាអ្វី? @@ -56,7 +128,7 @@ ![ការសរសេរកូដនៅលើក្ដារខៀន - ពីតំបន់ Silicon Valley របស់ HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) -នេះមានន័យថាសម្រាប់ ** វិស្វករអភិវឌ្ឍន៍កម្មវិធីថ្មី ** ឬអ្នកដែលប្តូរពី +នេះមានន័យថាសម្រាប់ "វិស្វករអភិវឌ្ឍន៍កម្មវិធីថ្មី" ឬអ្នកដែលប្តូរពី ការអភិវឌ្ឍន៍កម្មវិធី / អ្នកបង្កេីតវេបសាយ (ដែលត្រូវការចំណេះដឹងផ្នែកវិទ្យាសាស្ត្រកុំព្យូទ័រ) ។ ប្រសិនបើអ្នកមាន បទពិសោធជាច្រើនឆ្នាំក្នុងការអភិវឌ្ឍន៍កម្មវិធី នោះអ្នកអាចនឹងរំពឹងថាមានបទសម្ភាសន៍ពិបាក។ @@ -66,3 +138,43 @@ ប្រសិនបើអ្នកចង់ក្លាយជាវិស្វករដែលអាចទុកចិត្តបានឬវិស្វករប្រតិបត្តិការសូមសិក្សាបន្ថែមពីបញ្ជីជម្រើស (បណ្តាញ និង សុវត្ថិភាព) ។ --- + +## ហេតុអ្វីប្រើវា? + +នៅពេលដែលខ្ញុំចាប់ផ្តើមគំរោងនេះ ខ្ញុំមិនដឹងពី stack, heap, Big-O, trees និង មិនដឹងរបៀបឆ្លងកាត់ក្រាហ្វ។ ប្រសិនបើខ្ញុំត្រូវសរសេរកូដដោះស្រាយ Sort ខ្ញុំអាចប្រាប់អ្នកថាវានឹងមិនល្អទេ។ + +Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់បានប្រើត្រូវបានបង្កើតឡើងមកជាមួយភាសា ហើយខ្ញុំមិនដឹងពីរបៀប និង ដំណេីរការដែល Data Structure។ ខ្ញុំមិនដែលត្រូវគ្រប់គ្រង Programming Memory ទេលុះត្រាតែកម្មវិធីខ្ញុំសរសេរមានបញ្ហា "អស់ Memory" ហើយបន្ទាប់មកខ្ញុំត្រូវរកដំណោះស្រាយបណ្តោះអាសន្ន។ ខ្ញុំបានប្រើ Multidiemsional arrays ពីរបីនៅក្នុងជីវិតរបស់ខ្ញុំ និង រាប់ពាន់នៃ Associate arrays ប៉ុន្តែខ្ញុំមិនដែលបង្កើត Data Structure ពីដំបូងឡើយ។ + +វាជាផែនការវែង។ វាអាចចំណាយពេលច្រើនខែ។ ប្រសិនបើអ្នកធ្លាប់ស្គាល់រឿងនេះរួចហើយវានឹងនាំអ្នកចំណាយពេលតិចជាងមុន។ + +--- + +## របៀបប្រើវា + +អ្វីគ្រប់យ៉ាងខាងក្រោមគឺជាគ្រោង អ្នកគួរតែដោះស្រាយតាមលំដាប់ពីលើចុះក្រោម។ + +ខ្ញុំកំពុងប្រើសញ្ញាសម្គាល់ពិសេសរបស់ GitHub រួមទាំងបញ្ជីភារកិច្ចដើម្បីពិនិត្យមើលវឌ្ឍនភាពការងារខ្ញុំ។ + +**បង្កើតសាខាថ្មី ដូច្នេះអ្នកអាចពិនិត្យមើលដូចនេះគ្រាន់តែដាក់សញ្ញា x ក្នុងតង្កៀប៖ [x]** + + +ដាក់សាខាមួយ ហើយធ្វើតាមពាក្យបញ្ជាខាងក្រោម + +`git checkout -b progress` + +`git remote add jwasham https://github.com/jwasham/coding-interview-university` + +`git fetch --all` + +គូសសញ្ញា X ក្នុងប្រអប់ទាំងអស់បន្ទាប់ពីអ្នកបានបញ្ចប់ការកែសម្រួល +`git add .` + +`git commit -m "Marked x"` + +`git rebase jwasham/master` + +`git push --force` + +[ព័ត៌មានបន្ថែមអំពីសញ្ញាសម្គាល់ Github]] (https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + +--- From bccbc63a193aec3f3725a2eb822f1b3c7a873468 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Tue, 5 May 2020 18:38:08 -0500 Subject: [PATCH 193/263] Update README-kh.md Khmer Translation - don't feel you aren't smart enough, about video resources, interview process & general interview prep --- translations/README-kh.md | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index fffec2d..ac8f1ad 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -178,3 +178,46 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ [ព័ត៌មានបន្ថែមអំពីសញ្ញាសម្គាល់ Github]] (https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) --- + +## កុំមានអារម្មណ៍ថាអ្នកមិនឆ្លាតគ្រប់គ្រាន់ + +- វិស្វករអភិវឌ្ឍន៍កម្មវិធីដែលទទួលបានជោគជ័យគឺឆ្លាត ប៉ុន្តែមនុស្សជាច្រើនមានអារម្មណ៍ដែលពួកគេមិនឆ្លាតគ្រប់គ្រាន់។ +- [រឿងរបស់អ្នកសរសេរកម្មវិធីដែលមានទេពកោសល្យ] (https://www.youtube.com/watch?v=0SARbwvhupQ) +- [វាមានគ្រោះថ្នាក់ក្នុងការទៅតែម្នាក់ឯង: ការប្រយុទ្ធនឹងសត្វចម្លែកដែលចេះបំបាំងកាយនៅក្នុងបច្ចេកវិទ្យា] (https://www.youtube.com/watch?v=1i8ylq4j_EY) + +## ធនធានវីដេអូ + +វីដេអូខ្លះអាចប្រើបានតែតាមរយៈការចុះឈ្មោះចូលរៀនវគ្គ Coursera ឬ EdX ប៉ុណ្ណោះ។ ទាំងនេះត្រូវបានគេហៅថា MOOCs ។ +ពេលខ្លះថ្នាក់រៀនមិននៅក្នុងវគ្គដូច្នេះអ្នកត្រូវរង់ចាំពីរបីខែសិន។ + +ខ្ញុំសូមកោតសរសើរចំពោះជំនួយរបស់អ្នកក្នុងការបន្ថែមប្រភពសាធារណៈដែលអាចរកបានដោយឥតគិតថ្លៃជានិច្ចដូចជាវីដេអូយូធ្យូប (YouTube) ដើម្បីភ្ជាប់វីដេអូវគ្គសិក្សាតាមអ៊ីនធឺណិត។ + +ខ្ញុំចូលចិត្តប្រើការបង្រៀនសាកលវិទ្យាល័យ។ + +--- + +## ដំណើរការសំភាសន៍និងកម្មវិធីសម្ភាសន៍ទូទៅ + +- [] [ABC: តែងតែសរសេរកូដ] (https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [] [ការប្រេីប្រាស់ក្តារខៀន] (https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [] [ការប្រេីប្រាស់ក្តារខៀនមានប្រសិទ្ធិភាពក្នុងពេលសម្ភាសន៍កម្មវិធី] (http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [] [ជ្រើសរើសបុគ្គលិកជំនាញបច្ចេកវិទ្យា] (https://www.youtube.com/watch?v=N233T0epWTs) +- [] វិធីរកការងារនៅក្រុមហ៊ុនធំ ៤៖ + - [] [របៀបរកការងារធ្វើនៅក្រុមហ៊ុនធំ ៤ - Amazon, Facebook, Google និង Microsoft (មានវីដេអូ)] (https://www.youtube.com/watch?v=YJZCUhxNCv8) +- [បំបែកការសម្ភាសន៍ការសរសេរកូដ ១៖ + - [] [ហ្គេលឡេអិលម៉ាកឌូវែល (Gayle L McDowell) - បំបែកការសម្ភាសន៍ការសរសេរកូដ (វីដេអូ)] (https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [] [បំបែកបទសម្ភាសន៍នៃការសរសេរកូដជាមួយអ្នកនិពន្ធហ្គេលឡាឡាក់មែនម៉ាកម៉ាកឌូវែល (Gayle Laakmann McDowell) (វីដេអូ)] (https://www.youtube.com/watch?v=aClxtDcdpsQ) +- [] បំបែកបទសម្ភាសន៍កូដហ្វេសប៊ុក + - [] [វិធីសាស្រ្ត] (https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [] [ពន្យល់ពីបញ្ហា] (https://www.youtube.com/watch?v=4UWDyJq8jZg) +- [] វគ្គសិក្សាត្រៀម: + - [] [សំភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធី (មិនបានបង់ប្រាក់)] (https://www.udemy.com/software-engineer-interview-unleashed)៖ + - រៀនពីរបៀបដើម្បីត្រៀមខ្លួនសម្រាប់ការសម្ភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធីពីអ្នកសំភាសន៍របស់ហ្គូហ្គោល (Google) ។ + - [] [Python សម្រាប់រចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយនិងសំភាសន៍ (វគ្គសិក្សាបង់លុយ)] (https://www.udemy.com/python-for-data-structures- algorithms-and-interviews/)៖ + - វគ្គសិក្សាសំភាសន៍ Python ដែលផ្តោតលើរចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយ ការសំភាសន៍សាកល្បងនិងច្រើនទៀត។ + - [] [ការណែនាំអំពីរចនាសម្ព័ន្ធទិន្នន័យនិងក្បួនដោះស្រាយដោយប្រើ Python (វគ្គសិក្សាឥតគិតថ្លៃរបស់ Udacity)] (https://www.udacity.com/course/data-structures-and-al algorithms-in-python--ud513)៖ + - រចនាសម្ព័នធ័រណេតនិងអ័រហ្គ្រែនដោយឥតគិតថ្លៃ។ + - [] [រចនាសម្ព័នទិន្នន័យនិងក្បួនដោះស្រាយ! (Udacity បង់ Nanodegree)] (https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256)៖ + - ទទួលបានការអនុវត្តជាក់ស្តែងជាមួយនឹងរចនាសម្ព័ន្ធទិន្នន័យជាង ១០០ លំហាត់ និងការណែនាំពីអ្នកបងៀនដើម្បីជួយរៀបចំអ្នកសម្រាប់ការសម្ភាសន៍ និង ដាក់ការងារ។ + +--- From b2f27542e12dde6b4dd37127d31ca29c60d71d88 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Tue, 5 May 2020 19:00:13 -0500 Subject: [PATCH 194/263] Update README-kh.md Khmer Translation: Fixed linked contents and link resources --- translations/README-kh.md | 46 +++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/translations/README-kh.md b/translations/README-kh.md index ac8f1ad..a31a7c3 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -4,11 +4,10 @@ ### បង្កើតដោយ: [@John Washam](https://github.com/jwasham) ### បកប្រែជាភាសារខ្មែរដោយ: [@Vortana Say](https://github.com/vsay01) -> ពីដំបូងខ្ញុំបង្កើតនេះជាបញ្ជីប្រធានបទត្រូវធ្វើខ្លីដើម្បីក្លាយជាវិស្វករអភិវឌ្ឍន៍កម្មវិធី ប៉ុន្តែវាបានកើនឡើងដល់បញ្ជីធំដែលអ្នកបានឃើញសព្វថ្ងៃនេះ។ បន្ទាប់ពីឆ្លងកាត់គំរោងសិក្សានេះខ្ញុំបានក្លាយ -> ជាវិស្វករអភិវឌ្ឍន៍កម្មវិធីនៅអាមាហ្សូន (Amazon) ] (https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> ពីដំបូងខ្ញុំបង្កើតនេះជាបញ្ជីប្រធានបទត្រូវធ្វើខ្លីដើម្បីក្លាយជាវិស្វករអភិវឌ្ឍន៍កម្មវិធី ប៉ុន្តែវាបានកើនឡើងដល់បញ្ជីធំដែលអ្នកបានឃើញសព្វថ្ងៃនេះ។ បន្ទាប់ពីឆ្លងកាត់គំរោងសិក្សានេះ [ ខ្ញុំបានក្លាយ ជាវិស្វករអភិវឌ្ឍន៍កម្មវិធីនៅអាមាហ្សូន (Amazon)](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu) > អ្នកប្រហែលជាមិនចាំបាច់សិក្សាច្រេីនដូចខ្ញុំទេ។ ទោះយ៉ាងណាក៏ដោយអ្វីគ្រប់យ៉ាងដែលអ្នកត្រូវការគឺនៅទីនេះ។ > -> ខ្ញុំបានសិក្សាប្រហែលជា ៨ ទៅ ១២ ម៉ោងក្នុងមួយថ្ងៃអស់រយៈពេលជាច្រើនខែ។ អ្នកអាចអានារឿងរបស់ខ្ញុំ៖ [ហេតុអ្វីខ្ញុំសិក្សាពេញម៉ោងរយៈពេល ៨ ខែសំរាប់ការសំភាសន៍ហ្គូហ្គល] (https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a -google-interview-cc662ce9bb13) +> ខ្ញុំបានសិក្សាប្រហែលជា ៨ ទៅ ១២ ម៉ោងក្នុងមួយថ្ងៃអស់រយៈពេលជាច្រើនខែ។ អ្នកអាចអានារឿងរបស់ខ្ញុំ៖ [ហេតុអ្វីខ្ញុំសិក្សាពេញម៉ោងរយៈពេល ៨ ខែសំរាប់ការសំភាសន៍ហ្គូហ្គល](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) > > ចំណុចដែលបានរាយនៅទីនេះនឹងជួយអ្នករៀបចំការសំភាសន៍បច្ចេកទេសនៅក្រុមហ៊ុនកម្មវិធីណាមួយ។ > រាប់បញ្ចូលទាំងក្រុមហ៊ុនធំៗដូចជា Amazon, Facebook, Google និង Microsoft ។ @@ -121,6 +120,7 @@ --- +## What is it? ## តើវាគឺជាអ្វី? នេះគឺជាគំរោងសិក្សារបស់ខ្ញុំដែលមានរយៈពេលជាច្រើនខែសំរាប់ការរៀនក្លាយពីអ្នកបង្កើតគេហទំព័រ (បង្រៀនដោយខ្លួនឯង និង មិនមានសញ្ញាប័ត្រ @@ -139,6 +139,7 @@ --- +### Why use it? ## ហេតុអ្វីប្រើវា? នៅពេលដែលខ្ញុំចាប់ផ្តើមគំរោងនេះ ខ្ញុំមិនដឹងពី stack, heap, Big-O, trees និង មិនដឹងរបៀបឆ្លងកាត់ក្រាហ្វ។ ប្រសិនបើខ្ញុំត្រូវសរសេរកូដដោះស្រាយ Sort ខ្ញុំអាចប្រាប់អ្នកថាវានឹងមិនល្អទេ។ @@ -149,8 +150,10 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ --- +### How to use it? ## របៀបប្រើវា + អ្វីគ្រប់យ៉ាងខាងក្រោមគឺជាគ្រោង អ្នកគួរតែដោះស្រាយតាមលំដាប់ពីលើចុះក្រោម។ ខ្ញុំកំពុងប្រើសញ្ញាសម្គាល់ពិសេសរបស់ GitHub រួមទាំងបញ្ជីភារកិច្ចដើម្បីពិនិត្យមើលវឌ្ឍនភាពការងារខ្ញុំ។ @@ -175,16 +178,20 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ `git push --force` -[ព័ត៌មានបន្ថែមអំពីសញ្ញាសម្គាល់ Github]] (https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) +[ព័ត៌មានបន្ថែមអំពីសញ្ញាសម្គាល់ Github]](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) --- +### Don't feel you aren't smart enough ## កុំមានអារម្មណ៍ថាអ្នកមិនឆ្លាតគ្រប់គ្រាន់ - វិស្វករអភិវឌ្ឍន៍កម្មវិធីដែលទទួលបានជោគជ័យគឺឆ្លាត ប៉ុន្តែមនុស្សជាច្រើនមានអារម្មណ៍ដែលពួកគេមិនឆ្លាតគ្រប់គ្រាន់។ -- [រឿងរបស់អ្នកសរសេរកម្មវិធីដែលមានទេពកោសល្យ] (https://www.youtube.com/watch?v=0SARbwvhupQ) -- [វាមានគ្រោះថ្នាក់ក្នុងការទៅតែម្នាក់ឯង: ការប្រយុទ្ធនឹងសត្វចម្លែកដែលចេះបំបាំងកាយនៅក្នុងបច្ចេកវិទ្យា] (https://www.youtube.com/watch?v=1i8ylq4j_EY) +- [រឿងរបស់អ្នកសរសេរកម្មវិធីដែលមានទេពកោសល្យ](https://www.youtube.com/watch?v=0SARbwvhupQ) +- [វាមានគ្រោះថ្នាក់ក្នុងការទៅតែម្នាក់ឯង: ការប្រយុទ្ធនឹងសត្វចម្លែកដែលចេះបំបាំងកាយនៅក្នុងបច្ចេកវិទ្យា](https://www.youtube.com/watch?v=1i8ylq4j_EY) +--- + +### About Video Resources ## ធនធានវីដេអូ វីដេអូខ្លះអាចប្រើបានតែតាមរយៈការចុះឈ្មោះចូលរៀនវគ្គ Coursera ឬ EdX ប៉ុណ្ណោះ។ ទាំងនេះត្រូវបានគេហៅថា MOOCs ។ @@ -196,28 +203,29 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ --- +### Interview Process & General Interview Prep ## ដំណើរការសំភាសន៍និងកម្មវិធីសម្ភាសន៍ទូទៅ -- [] [ABC: តែងតែសរសេរកូដ] (https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) -- [] [ការប្រេីប្រាស់ក្តារខៀន] (https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [] [ការប្រេីប្រាស់ក្តារខៀនមានប្រសិទ្ធិភាពក្នុងពេលសម្ភាសន៍កម្មវិធី] (http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) -- [] [ជ្រើសរើសបុគ្គលិកជំនាញបច្ចេកវិទ្យា] (https://www.youtube.com/watch?v=N233T0epWTs) +- [] [ABC: តែងតែសរសេរកូដ](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [] [ការប្រេីប្រាស់ក្តារខៀន](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [] [ការប្រេីប្រាស់ក្តារខៀនមានប្រសិទ្ធិភាពក្នុងពេលសម្ភាសន៍កម្មវិធី](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [] [ជ្រើសរើសបុគ្គលិកជំនាញបច្ចេកវិទ្យា](https://www.youtube.com/watch?v=N233T0epWTs) - [] វិធីរកការងារនៅក្រុមហ៊ុនធំ ៤៖ - - [] [របៀបរកការងារធ្វើនៅក្រុមហ៊ុនធំ ៤ - Amazon, Facebook, Google និង Microsoft (មានវីដេអូ)] (https://www.youtube.com/watch?v=YJZCUhxNCv8) + - [] [របៀបរកការងារធ្វើនៅក្រុមហ៊ុនធំ ៤ - Amazon, Facebook, Google និង Microsoft (មានវីដេអូ)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [បំបែកការសម្ភាសន៍ការសរសេរកូដ ១៖ - - [] [ហ្គេលឡេអិលម៉ាកឌូវែល (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) - [] បំបែកបទសម្ភាសន៍កូដហ្វេសប៊ុក - - [] [វិធីសាស្រ្ត] (https://www.youtube.com/watch?v=wCl9kvQGHPI) - - [] [ពន្យល់ពីបញ្ហា] (https://www.youtube.com/watch?v=4UWDyJq8jZg) + - [] [វិធីសាស្រ្ត](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [] [ពន្យល់ពីបញ្ហា](https://www.youtube.com/watch?v=4UWDyJq8jZg) - [] វគ្គសិក្សាត្រៀម: - - [] [សំភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធី (មិនបានបង់ប្រាក់)] (https://www.udemy.com/software-engineer-interview-unleashed)៖ + - [] [សំភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធី (មិនបានបង់ប្រាក់)](https://www.udemy.com/software-engineer-interview-unleashed)៖ - រៀនពីរបៀបដើម្បីត្រៀមខ្លួនសម្រាប់ការសម្ភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធីពីអ្នកសំភាសន៍របស់ហ្គូហ្គោល (Google) ។ - - [] [Python សម្រាប់រចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយនិងសំភាសន៍ (វគ្គសិក្សាបង់លុយ)] (https://www.udemy.com/python-for-data-structures- algorithms-and-interviews/)៖ + - [] [Python សម្រាប់រចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយនិងសំភាសន៍ (វគ្គសិក្សាបង់លុយ)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/)៖ - វគ្គសិក្សាសំភាសន៍ Python ដែលផ្តោតលើរចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយ ការសំភាសន៍សាកល្បងនិងច្រើនទៀត។ - - [] [ការណែនាំអំពីរចនាសម្ព័ន្ធទិន្នន័យនិងក្បួនដោះស្រាយដោយប្រើ Python (វគ្គសិក្សាឥតគិតថ្លៃរបស់ Udacity)] (https://www.udacity.com/course/data-structures-and-al algorithms-in-python--ud513)៖ + - [] [ការណែនាំអំពីរចនាសម្ព័ន្ធទិន្នន័យនិងក្បួនដោះស្រាយដោយប្រើ Python (វគ្គសិក្សាឥតគិតថ្លៃរបស់ Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513)៖ - រចនាសម្ព័នធ័រណេតនិងអ័រហ្គ្រែនដោយឥតគិតថ្លៃ។ - - [] [រចនាសម្ព័នទិន្នន័យនិងក្បួនដោះស្រាយ! (Udacity បង់ Nanodegree)] (https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256)៖ + - [] [រចនាសម្ព័នទិន្នន័យនិងក្បួនដោះស្រាយ! (Udacity បង់ Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256)៖ - ទទួលបានការអនុវត្តជាក់ស្តែងជាមួយនឹងរចនាសម្ព័ន្ធទិន្នន័យជាង ១០០ លំហាត់ និងការណែនាំពីអ្នកបងៀនដើម្បីជួយរៀបចំអ្នកសម្រាប់ការសម្ភាសន៍ និង ដាក់ការងារ។ --- From 7626ac8534dd8ec57c3107c35512a70adcf964e1 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Wed, 6 May 2020 10:59:03 -0500 Subject: [PATCH 195/263] Update README-kh.md Khmer Translation - Pick One Language for the Interview and book list --- translations/README-kh.md | 111 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index a31a7c3..2e4c6f0 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -229,3 +229,114 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - ទទួលបានការអនុវត្តជាក់ស្តែងជាមួយនឹងរចនាសម្ព័ន្ធទិន្នន័យជាង ១០០ លំហាត់ និងការណែនាំពីអ្នកបងៀនដើម្បីជួយរៀបចំអ្នកសម្រាប់ការសម្ភាសន៍ និង ដាក់ការងារ។ --- + +### Pick One Language for the Interview +## ជ្រើសរើសភាសាមួយសម្រាប់ការសម្ភាសន៍ + +អ្នកអាចប្រើភាសាដែលអ្នកមានភាពងាយស្រួលក្នុងការសរសេរកូដសំភាសន៍ប៉ុន្តែសម្រាប់ក្រុមហ៊ុនធំ ៗ ទាំងនេះគឺជាជំរើសដ៏រឹងមាំ៖ + +- C ++ +- Java +- Python + +អ្នកក៏អាចប្រើរបស់ទាំងនេះដែរប៉ុន្តែត្រូវអានជាមុនសិន។ វាអាចមានការនិយាយតៗគ្នា៖ + +- JavaScript +- Ruby + +នេះគឺជាអត្ថបទមួយដែលខ្ញុំបានសរសេរអំពីការជ្រើសរើសភាសាសម្រាប់ការសម្ភាសន៍៖ [ជ្រើសរើសយកភាសាមួយសម្រាប់ការសម្ភាសន៍សរសេរកូដ](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) + +អ្នកគួររេីសភាសាដែលអ្នកទំលាប់ជាមួយ និង មានចំណេះដឹង។ + +សូមអានបន្ថែមអំពីជំរើស៖ +- http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ +- http://blog.codingforinterviews.com/best-programming-language-jobs/ + +[មើលធនធានភាសានៅទីនេះ](programming-language-resources.md) + +អ្នកនឹងឃើញការរៀន C, C ++ និង Python ខាងក្រោមព្រោះខ្ញុំកំពុងរៀន។ មានសៀវភៅពីរបីដែលពាក់ព័ន្ធសូមមើលនៅខាងក្រោម។ + +--- + +### Book List +## បញ្ជីសៀវភៅ + +នេះគឺជាបញ្ជីខ្លីជាងអ្វីដែលខ្ញុំបានប្រើ។ នេះត្រូវបានសង្ខេបដើម្បីជួយសន្សំសំចៃពេលវេលារបស់អ្នក។ + +--- + +### Interview Prep +## ត្រៀមការសម្ភាសន៍ + +- [] [សំភាសន៍ការសរសេរកម្មវិធីបង្ហាញ: ការសរសេរកូដវិធីរបស់អ្នកតាមរយៈការសំភាសន៍, បោះពុម្ពលើកទី ៤](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - ចម្លើយសរសេរ C++ និង Java + - នេះគឺជាសមដ៏ល្អសម្រាប់ការបំបែកសំភាសន៍កូដ + - មិនពិបាកពេកទេ បញ្ហាភាគច្រើនប្រហែលជាងាយស្រួលជាងអ្វីដែលអ្នកបានឃើញក្នុងបទសម្ភាសន៍ (ពីអ្វីដែលខ្ញុំបានអាន) +- [] [ការសំភាសន៍ការសរសេរកូដការបោះពុម្ពលើកទី ៦](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - ចម្លើយនសរសេរជា Java + +--- + +### If you have tons of extra time: +## ប្រសិនបើអ្នកមានពេលវេលាបន្ថែមច្រេីន + +ជ្រើសរើសមួយ: + +- [] [ធាតុផ្សំនៃបទសម្ភាសន៍សរសេរកម្មវិធី (កំណែ C ++)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [] [ធាតុផ្សំនៃការសំភាសន៍សរសេរកម្មវិធីក្នុង Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [] ធាតុនៃការសំភាសន៍សរសេរកម្មវិធី (កំណែ Java) + - [សៀវភៅ](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [គម្រោង - វិធីសាស្រ្ត Stub និងករណីតេស្តិ៍សម្រាប់រាល់បញ្ហាក្នុងសៀវភៅ](https://github.com/gardncl/elements-of-programming-interviews) + +--- + +### Language Specific +## ភាសាជាក់លាក់ + +**អ្នកត្រូវជ្រើសរើសភាសាសំរាប់សំភាសន៍ (សូមមើលខាងលើ) ។** + +នេះជាអ្នីដែលខ្ញុំគិតថាអ្នកគួរមេីល។ ខ្ញុំមិនមានធនធានសម្រាប់ភាសាទាំងអស់ទេ។ ខ្ញុំស្វាគមន៍ការដាក់បន្ថែមពីអ្នក។ + +ប្រសិនបើអ្នកអានចំណុចមួយក្នុងចំណោមចំណុចទាំងនេះអ្នកគួរតែមានចំនេះដឹង Data Structure និងចំណេះដឹងអំពីក្បួនដោះស្រាយ (Algorithm) ដែលអ្នកត្រូវចាប់ផ្តើមធ្វើបញ្ហាសរសេរកូដ។ + +**អ្នកអាចរំលងការបង្រៀនវីដេអូទាំងអស់នៅក្នុងគម្រោងនេះ** លើកលែងតែអ្នកចង់ពិនិត្យឡើងវិញ។ + +[ធនធានភាសាជាក់លាក់នៅទីនេះ។](programming-language-resources.md) + +--- + +## C++ + +ខ្ញុំមិនបានអានទាំងពីរនេះទេ ប៉ុន្តែវាត្រូវបានវាយតម្លៃនិងសរសេរយ៉ាងខ្ពស់ដោយ Sedgewick ។ គាត់អស្ចារ្យណាស់។ + +- [] [វិធីដោះស្រាយក្នុង C++, ផ្នែក ១-៤៖ មូលដ្ឋានគ្រឹះរចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) តម្រៀប (Sort) ស្វែងរក (Searching)](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [] [វិធីដោះស្រាយក្នុង C++ ភាគ ៥៖ ក្បួនដោះស្រាយក្រាហ្វិច](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +ប្រសិនបើអ្នកមានអនុសាសន៍ល្អប្រសើរសម្រាប់ C++ សូមប្រាប់ខ្ញុំឱ្យដឹង។ រកមើលធនធានទូលំទូលាយ។ + +--- + +## Java + +- [] [វិធីដោះស្រាយ (Sedgewick និង Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - វីដេអូដែលមានមាតិកាសៀវភៅ (និង Sedgewick!) លើវគ្គសិក្សា៖ + - [ក្បួនដោះស្រាយ I](https://www.coursera.org/learn/algorithms-part1) + - [ក្បួនដោះស្រាយទី ២](https://www.coursera.org/learn/algorithms-part2) + +រឺ៖ + +- [] [រចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និងក្បួនដោះស្រាយ Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - ដោយហ្គ្រីដល (Goodrich), តាតសាសៀ (Tamassia), ហ្គោវីស (Goldwasser) + - អត្ថបទសម្រាប់វគ្គសិក្សាសំរាប់ថ្នាក់ដំបូងរបស់វិទ្យាសាស្ត្រកុំព្យូទ័រនៅឯ UC Berkeley + - សូមមើលរបាយការណ៍សៀវភៅរបស់ខ្ញុំស្តីពីកំណែ Python ខាងក្រោម។ សៀវភៅនេះមានប្រធានបទដូចគ្នា។ + +--- + +## Python +- [] [រចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និងក្បួនដោះស្រាយ (Algorithm) ក្នុង Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - ដោយហ្គ្រីដល (Goodrich), តាតសាសៀ (Tamassia), ហ្គោវីស (Goldwasser) + - ខ្ញុំចូលចិត្តសៀវភៅនេះ។ វាគ្របដណ្តប់អ្វីៗគ្រប់យ៉ាងនិងច្រើនទៀត។ + - លេខកូដព្យញ្ជនៈ + - របាយការណ៍សៀវភៅរបស់ខ្ញុំ៖ https://startupnextdoor.com/book-report-data-structures-and-al algorithms-in-python/ + +--- From 53985512b9315634bfe369e953e2c8374fdfb604 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Wed, 6 May 2020 15:06:58 -0500 Subject: [PATCH 196/263] Update README-kh.md Khmer Translation - Before you Get Started --- translations/README-kh.md | 63 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index 2e4c6f0..66a4d70 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -340,3 +340,66 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - របាយការណ៍សៀវភៅរបស់ខ្ញុំ៖ https://startupnextdoor.com/book-report-data-structures-and-al algorithms-in-python/ --- + +### Before you Get Started +## មុនពេលអ្នកចាប់ផ្តើម + +បញ្ជីនេះបានកើនឡើងអស់រយៈពេលជាច្រើនខែហើយ ។ + +នេះគឺជាកំហុសមួយចំនួនដែលខ្ញុំបានធ្វើដូច្នេះអ្នកនឹងមានបទពិសោធប្រសើរជាងមុន។ + +### 1. អ្នកនឹងមិនចងចាំវាទាំងអស់ + +ខ្ញុំបានមើលវីដេអូជាច្រើនម៉ោងនិងកត់ចំណាំគួរអោយចង់សើច ហើយប៉ុន្មានខែក្រោយមកមានរឿងជាច្រើនដែលខ្ញុំមិនចាំ។ ខ្ញុំចំណាយពេល ៣ ថ្ងៃទៀត +តាមរយៈកំណត់ចំណាំរបស់ខ្ញុំនិងធ្វើប័ណ្ណបញ្ជាក់ដូច្នេះខ្ញុំអាចពិនិត្យមើលឡើងវិញ។ + +សូមមេត្តាអានដូច្នេះអ្នកនឹងមិនធ្វើឱ្យខ្ញុំខុសទេ។ + +[រក្សាចំណេះដឹងវិទ្យាសាស្ត្រកុំព្យូទ័រ](https://startupnextdoor.com/retaining-computer-science-knowledge/) ។ + +វគ្គសិក្សាដែលបានណែនាំដល់ខ្ញុំ (មិនបានសិក្សាវាទេ)៖ [ការរៀនពីរបៀបរៀន](https://www.coursera.org/learn/learning-how-to-learn) + +### 2. ប្រើកាតបង្ហាញ + +ដើម្បីដោះស្រាយបញ្ហា ខ្ញុំបានបង្កើតវេបសាយកាតតូចមួយដែលខ្ញុំអាចបន្ថែមកាតចំនួន ២ ប្រភេទគឺទូទៅនិងលេខកូដ។ +កាតនីមួយៗមានទ្រង់ទ្រាយខុសៗគ្នា។ + +ខ្ញុំបានបង្កើតវេបសាយសំរាប់ទូរស័ព្ទដំបូងមួយ ដូច្នេះខ្ញុំអាចពិនិត្យមើលឡើងវិញនៅលើទូរស័ព្ទ និង ថេប្លេតរបស់ខ្ញុំទោះបីខ្ញុំនៅទីណាក៏ដោយ។ + +អ្នកអាចបង្កេីតដោយឥតគិតថ្លៃ៖ + +- [បណ្តាញឃ្លាំងផ្ទុកកាតឡើងវិញ](https://github.com/jwasham/computer-science-flash-cards) +- [មូលដ្ឋានទិន្នន័យកាតរបស់ខ្ញុំ (កាតចាស់ - ១២០០ កាត)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db)៖ +- [ប្រព័ន្ធទិន្នន័យកាតរបស់ខ្ញុំ (កាតថ្មី - ១៨០០)](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db)៖ + +សូមចងចាំថាខ្ញុំបានឡើងលើក្តារហើយមានកាតគ្របដណ្តប់លើអ្វីៗទាំងអស់ចាប់ពីភាសាការជួបប្រជុំគ្នា និង សំនួរទាក់ទងនឹង Python រហូតដល់ការរៀនម៉ាស៊ីននិងស្ថិតិ។ វាជាវិធីច្រើនពេកសម្រាប់អ្វីដែលត្រូវការ។ + +**កំណត់ចំណាំនៅលើបណ្ណបង្ហាញ៖** ជាលើកដំបូងដែលអ្នកទទួលស្គាល់អ្នកដឹងពីចម្លើយ សូមកុំសម្គាល់វាថាត្រូវបានគេស្គាល់។ អ្នកត្រូវតែមើល +កាតដូចគ្នានិងឆ្លើយវាច្រើនដងឱ្យបានត្រឹមត្រូវមុនពេលដែលអ្នកពិតជាដឹង។ ពាក្យដដែលៗនឹងធ្វើឱ្យចំណេះដឹងនោះកាន់តែស៊ីជម្រៅ +ខួរក្បាលរបស់អ្នក។ + +ជំរើសមួយផ្សេងទៀតក្នុងការប្រើប្រាស់បណ្តាញកាតរបស់ខ្ញុំគឺ [Anki](http://ankisrs.net/) ដែលត្រូវបានណែនាំអោយខ្ញុំច្រើនដង។ វាប្រើប្រព័ន្ធពាក្យដដែលៗដើម្បីជួយអ្នកចងចាំ។ +វាមានភាពងាយស្រួលសម្រាប់អ្នកប្រើដែលមាននៅលើគ្រប់វេទិកាទាំងអស់និងមានប្រព័ន្ធធ្វើសមកាលកម្មពពក។ វាមានតម្លៃ ២៥ ដុល្លារលើប្រព័ន្ធប្រតិបត្តិការ iOS ប៉ុន្តែមិនគិតថ្លៃនៅលើវេទិកាផ្សេងទៀតទេ។ + +មូលដ្ឋានទិន្នន័យបណ្ណបង្ហាញរបស់ខ្ញុំក្នុងទំរង់អាគី (Anki) ៖ https://ankiweb.net/shared/info/25173560 (សូមអរគុណ [@xiewenya](https://github.com/xiewenya) + +### ៣. ចាប់ផ្តើមធ្វើសំណួរសម្ភាសន៍សរសេរកូដខណៈពេលដែលអ្នកកំពុងរៀនរចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និង ក្បួនដោះស្រាយ (Algorithm) + +អ្នកត្រូវអនុវត្តអ្វីដែលអ្នកកំពុងរៀនដើម្បីដោះស្រាយបញ្ហាឬអ្នកនឹងភ្លេច។ ខ្ញុំបានធ្វើកំហុសនេះ។ នៅពេលដែលអ្នកបានរៀនប្រធានបទមួយ +ហើយមានអារម្មណ៍ស្រួលជាមួយវាដូចជាបញ្ជីភ្ជាប់បើកសៀវភៅសម្ភាសន៍កូដសរសេរមួយហើយធ្វើសំណួរពីរបីទាក់ទងនឹង +បញ្ជីដែលបានភ្ជាប់។ បន្ទាប់មកបន្តទៅប្រធានបទសិក្សាបន្ទាប់។ បន្ទាប់មកពេលក្រោយ ត្រលប់ក្រោយហើយធ្វើបញ្ហាបញ្ជីដែលបានភ្ជាប់ផ្សេងទៀត +ឬបញ្ហាការហៅឡើងវិញឬអ្វីផ្សេងទៀត។ ប៉ុន្តែនៅតែធ្វើបញ្ហានៅពេលអ្នកកំពុងរៀន។ អ្នកមិនត្រូវបានគេជួលដើម្បីចំណេះដឹងទេ +ប៉ុន្តែរបៀបដែលអ្នកអនុវត្តចំណេះដឹង។ មានសៀវភៅនិងគេហទំព័រជាច្រើនដែលខ្ញុំសូមណែនាំ។ +សូមមើលនៅទីនេះសម្រាប់ព័ត៌មានបន្ថែម: [ការអនុវត្តសំណួរសំណួរសរសេរកូដ](#coding-question-practice) + +### 4. ពិនិត្យឡើងវិញ ពិនិត្យឡើងវិញ ពិនិត្យឡើងវិញ + +ខ្ញុំរក្សាទុកសន្លឹកបន្លំមួយសន្លឹកនៅលើ ASCII, OSI stack, សញ្ញាណសំគាល់ធំ ៗ (Big-O) និងច្រើនទៀត។ ខ្ញុំសិក្សាវានៅពេលខ្ញុំមានពេលទំនេរខ្លះ។ + +សម្រាកពីបញ្ហាសរសេរកម្មវិធីរយៈពេលកន្លះម៉ោង ហើយអានកាតរបស់អ្នក។ + +### 5. ផ្តោតអារម្មណ៍ + +មានការរំខានជាច្រើនដែលអាចចំណាយពេលដ៏មានតម្លៃ។ ការផ្តោតអារម្មណ៍គឺពិបាក។ បើកតន្ត្រីមួយចំនួនដែលគ្មានទំនុកច្រៀងទេអ្នកនឹងអាចផ្តោតអារម្មណ៍បានល្អ។ + +--- From 59b4664ca9caa8f52c56bad84b3827c16061489f Mon Sep 17 00:00:00 2001 From: sundb Date: Thu, 7 May 2020 17:15:08 +0800 Subject: [PATCH 197/263] =?UTF-8?q?"Always=20Be=20Coding"=20translates=20m?= =?UTF-8?q?ore=20closely=20to=20"=E4=B8=8D=E8=A6=81=E5=81=9C=E6=AD=A2?= =?UTF-8?q?=E7=BC=96=E7=A8=8B"=20than=20"=E6=B0=B8=E8=BF=9C=E9=83=BD?= =?UTF-8?q?=E8=A6=81=E7=BC=96=E7=A8=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- translations/README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 13f3044..48f3faf 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -195,7 +195,7 @@ - [ ] [电话面试的问题](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) + - [ ] [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) From 43dc7c1ccdbb224f0d14e40c9e1e49d25c9415af Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Thu, 7 May 2020 06:46:32 -0500 Subject: [PATCH 198/263] Update README-kh.md Khmer Translations - What you won't see covered until arrays --- translations/README-kh.md | 129 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index 66a4d70..b96246b 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -403,3 +403,132 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ មានការរំខានជាច្រើនដែលអាចចំណាយពេលដ៏មានតម្លៃ។ ការផ្តោតអារម្មណ៍គឺពិបាក។ បើកតន្ត្រីមួយចំនួនដែលគ្មានទំនុកច្រៀងទេអ្នកនឹងអាចផ្តោតអារម្មណ៍បានល្អ។ --- + +### What you won't see covered +## អ្វីដែលអ្នកនឹងមិនឃើញគ្របដណ្តប់ + +ទាំងនេះជាបច្ចេកវិទ្យាដែលមានជាទូទៅប៉ុន្តែមិនមែនជាផ្នែកនៃផែនការសិក្សានេះទេ៖ + +- SQL +- Javascript +- HTML, CSS និងបច្ចេកវិទ្យាផ្នែក front-end + +--- + +### The Daily Plan +## ផែនការប្រចាំថ្ងៃ + +មុខវិជ្ជាខ្លះចំណាយពេលមួយថ្ងៃហើយ មុខវិជ្ជាខ្លះនឹងចំណាយពេលច្រើនថ្ងៃ។ អ្នកខ្លះរៀនតែគ្មានអ្វីអនុវត្ត។ + +ជារៀងរាល់ថ្ងៃខ្ញុំយកប្រធានបទមួយចេញពីបញ្ជីខាងក្រោមមើលវីដេអូអំពីប្រធានបទនោះហើយសរសេរកូតនៅក្នុង៖ +- C - ប្រើរចនាសម្ព័ន្ធ និង មុខងារដែលយករចនាសម្ព័ន្ធ * និង អ្វីផ្សេងទៀតជា Arguments។ +- C++ - ដោយមិនប្រើមុខងារដែលភ្ជាប់មកជាមួយនឹង ភាសា +- C++ - ប្រើប្រភេទដែលមានស្រាប់ដូចជា STL's::list សម្រាប់បញ្ជីភ្ជាប់ (Linked list) +- Python - ប្រើប្រភេទដែលមានស្រាប់ (ដើម្បីរំលឹក Python) +- និងសរសេរការធ្វើតេស្តដើម្បីធានាថាខ្ញុំធ្វើវាបានត្រឹមត្រូវពេលខ្លះគ្រាន់តែប្រើសេចក្តីថ្លែងអះអាងសាមញ្ញ assert() +- អ្នកអាចធ្វើ Jav ឬ អ្វីផ្សេងទៀតនេះគ្រាន់តែជារឿងរបស់ខ្ញុំប៉ុណ្ណោះ។ + +អ្នកមិនត្រូវការរបស់ទាំងអស់នេះទេ។ អ្នកត្រូវការតែ [ភាសាមួយសម្រាប់ការសម្ភាសន៍](#pick-one-language-for-the-interview) ។ + +ហេតុអ្វីត្រូវកូដទាំងអស់នេះ? +- អនុវត្ត អនុវត្ត អនុវត្តរហូតដល់ខ្ញុំច្បាស់ហើយអាចធ្វើវាដោយគ្មានបញ្ហា (អ្នកខ្លះមានករណីកំរច្រើន និង ព័ត៌មានលំអិតនៃការរក្សាទុកសៀវភៅដើម្បីចងចាំ) +- ធ្វើការនៅក្នុងឧបសគ្គ (បែងចែក / លុបចេញអង្គចងចាំ (Memory) ដោយគ្មានជំនួយពីការប្រមូលសំរាម (Gabage Collection) (លើកលែងតែ Python ឬ Java)) +- ប្រើប្រភេទដែលមានស្រាប់ដូច្នេះខ្ញុំមានបទពិសោធន៍ប្រើឧបករណ៍ដែលមានស្រាប់សម្រាប់ការប្រើប្រាស់ដូចពេលធ្វេីការ (មិនមែនថាសរសេរការអនុវត្តន៍បញ្ជី (Linked List) របស់ខ្ញុំផ្ទាល់ក្នុងពេលធ្វេីការ) + +ខ្ញុំប្រហែលជាមិនមានពេលវេលាដើម្បីធ្វើការទាំងអស់សម្រាប់មុខវិជ្ជាទាំងអស់នោះទេប៉ុន្តែខ្ញុំនឹងព្យាយាម។ + +អ្នកអាចឃើញកូដរបស់ខ្ញុំនៅទីនេះ៖ + +- [C](https://github.com/jwasham/practice-c) +- [C++](https://github.com/jwasham/practice-cpp) +- [Python](https://github.com/jwasham/practice-python) + +អ្នកមិនចាំបាច់ទន្ទេញចាំគ្រប់ក្បួនដោះស្រាយទាំងអស់។ + +សរសេរកូដនៅលើក្ដារខៀនឬក្រដាស មិនមែនកុំព្យូទ័រទេ។ សាកល្បងជាមួយធាតុចូលគំរូមួយចំនួន។ បន្ទាប់មកសាកល្បងវានៅលើកុំព្យូទ័រ។ + +## ចំណេះដឹងចាំបាច់ + +- [] **រៀន C** + - C គឺនៅគ្រប់ទីកន្លែង។ អ្នកនឹងឃើញឧទាហរណ៍នៅក្នុងសៀវភៅការបង្រៀនវីដេអូ *នៅគ្រប់ទីកន្លែង* ពេលអ្នកកំពុងសិក្សា។ + + - [] [ភាសាសរសេរកម្មវិធី C, ភាគ ២](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) +         + - នេះគឺជាសៀវភៅខ្លីមួយប៉ុន្តែវានឹងផ្តល់ឱ្យអ្នកនូវភាសា C យ៉ាងល្អហើយប្រសិនបើអ្នកអនុវត្តវាបន្តិច អ្នកនឹងឆាប់ស្ទាត់ជំនាញ។ ការយល់ដឹង C ជួយអ្នកឱ្យយល់ពីរបៀបដែលកម្មវិធីនិងការចងចាំដំណើរការ។ +         + - [ចម្លើយចំពោះសំណួរ](https://github.com/lekkas/c-algorithms) + +- [] **របៀបដែលកុំព្យូទ័រដំណើរការកម្មវិធី:** + - [] [តើស៊ីភីយូប្រតិបត្តិកម្មវិធីមួយយ៉ាងដូចម្តេច? (វីដេអូ)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [] [របៀបគណនាកុំព្យូទ័រ - ALU (វីដេអូ)](https://youtu.be/1I5ZMmrOfnA) + - [] [ចុះបញ្ជី (Registers) និង រ៉េម (RAM) (វីដេអូ)](https://youtu.be/fpnE6UAfbtU) + - [] [អង្គភាពកែច្នៃកណ្តាល (ស៊ីភីយូ) (The Central Processing Unit) (វីដេអូ)](https://youtu.be/FZGugFqdr60) + - [] [សេចក្តីណែនាំនិងកម្មវិធី (វីដេអូ)](https://youtu.be/zltgXvg6r3k) + +--- + +### Algorithmic complexity / Big-O / Asymptotic analysis +## ភាពស្មុគស្មាញនៃក្បួនដោះស្រាយ / ការវិភាគ Big-O + +- គ្មានអ្វីត្រូវអនុវត្តទេ +- មានវីដេអូជាច្រើននៅទីនេះ។ គ្រាន់តែមើលឱ្យបានគ្រប់គ្រាន់រហូតដល់អ្នកយល់។ អ្នកអាចត្រលប់មកពិនិត្យឡើងវិញជានិច្ច។ +- ប្រសិនបើការបង្រៀនមួយចំនួនមានភាពស្រងូតស្រងាត់អ្នកអាចរំលងដល់ក្រោមហើយមើលវីដេអូគណិតវិទ្យាដែលដាច់ពីគ្នាដើម្បីទទួលបានចំណេះដឹងជាមូលដ្ឋាន។ +- [] [Harvard CS50 - Asymptotic Notation (វីដេអូ)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [] [កំណត់ចំណាំ Big-O (ការបង្រៀនរហ័សទូទៅ) (វីដេអូ)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [] [Big O Notation (និង 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/) +- [] [លំដាប់នៃការលូតលាស់ (វីដេអូ)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) +- [] [ការវិភាគអាមីស្តូតូទិក (Amortized) (វីដេអូ)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) +- [] [UC Berkeley Big O (មានវីដេអូ)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [] [UC Berkeley Big Omega (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) +- [] [ការវិភាគរំលោះ (Amortized) (វីដេអូ)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [] [បង្ហាញរូបភាព "Big-O" (វីដេអូ)](https://www.coursera.org/lecture/alacticmic-thinking-1/illustrating-big-o-YVqzv) +- [] TopCoder (រួមបញ្ចូលទាំងទំនាក់ទំនងកើតឡើងវិញនិងទ្រឹស្តីបទមេ)៖ + - [ភាពស្មុគស្មាញនៃការគណនា៖ ផ្នែកទី ១](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) + - [ភាពស្មុគស្មាញនៃការគណនា៖ ផ្នែកទី ២](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) +- [] [សន្លឹកជំនួយ](http://bigocheatsheet.com/) + +--- + +### Data Structures +## រចនាសម្ព័ន្ធទិន្នន័យ + +- ### Arrays + - អនុវត្តវ៉ិចទ័រប្តូរទំហំដោយស្វ័យប្រវត្តិ។ + - [] ការពិពណ៌នា៖ + - [Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + -[UC Berkeley CS61B - អារេ លីនែអ៊ែរ និង ពហុវិមាត្រ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (ចាប់ផ្តើមមើលចាប់ពី ១៥នាទី ៣២វិនាទី) + - [Arrays មូលដ្ឋាន (វីដេអូ)](https://archive.org/details/0102What YouShouldKnow/02_04-basicArrays.mp4) + - [ពហុវិមាត្រ (វីដេអូ)](https://archive.org/details/0102What YouShouldKnow/02_05-multidimensionalArrays.mp4) + - [Arrays ឌីណាមិចេ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Jagged Arrays (វីដេអូ)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [Jagged Arrays (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) + - [ការប្តូរទំហំ Arrays (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) + - [] អនុវត្តវ៉ិចទ័រ (បំលែង Arrays ដោយប្តូរទំហំស្វ័យប្រវត្តិ)៖ + - [] អនុវត្តការសរសេរកូដដោយប្រើArrays និង ទ្រនិចចង្អុល និង គណិតទ្រនិចដើម្បីលោតទៅសន្ទស្សន៍មួយ។ + - [] Arrays ទិន្នន័យថ្មីដែលមានអង្គចងចាំបម្រុងទុក + - អាចបែងចែកArraysនៅក្រោមក្រណាត់ដោយគ្រាន់តែមិនប្រើលក្ខណៈពិសេសរបស់វា + - ចាប់ផ្តើមជាមួយលេខ ១៦ ឬបើលេខចាប់ផ្តើមធំជាងប្រើថាមពល ២ - ១៦, ៣២, ៦៤, ១២៨ + - [] size() - ចំនួនធាតុ + - [] capacity() - ចំនួនធាតុដែលវាអាចផ្ទុកបាន + - [] is_empty() + - [] at(index) - ត្រឡប់ធាតុនៅសន្ទស្សន៍ដែលបានផ្តល់ឱ្យផ្លុំឡើងប្រសិនបើសន្ទស្សន៍នៅក្រៅព្រំដែន + - [] push(item) + - [] insert(index, item) - បញ្ចូលធាតុនៅសន្ទស្សន៍ប្តូរតម្លៃសន្ទស្សន៍និងធាតុនៅខាងក្រោមទៅខាងស្តាំ + - [] prepend (item) - អាចប្រើបញ្ចូលខាងលើនៅសន្ទស្សន៍ ០ + - [] pop() - ដកចេញពីចុងបញ្ចប់តម្លៃត្រឡប់មកវិញ + - [] delete(index) - លុបធាតុនៅលិបិក្រមផ្លាស់ប្តូរធាតុនៅពីក្រោយទាំងអស់ + - [] remove(item) - រកមើលតម្លៃនិងយកលិបិក្រមដែលផ្ទុកវាចេញ (ទោះបីជានៅកន្លែងច្រើនក៏ដោយ) + - [] find(item) - រកមើលតម្លៃហើយត្រឡប់សន្ទស្សន៍ដំបូងជាមួយតម្លៃនោះ -1 បើរកមិនឃើញ + - [] resize(new_capacity) // មុខងារឯកជន + - នៅពេលដែលអ្នកឈានដល់សមត្ថភាព, ផ្លាស់ប្តូរទំហំទ្វេដងទំហំ + - នៅពេលដែលចាប់យកវត្ថុមួយប្រសិនបើទំហំគឺ 1/4 នៃសមត្ថភាព, ផ្លាស់ប្តូរទំហំដល់ពាក់កណ្តាល + - [] ពេលវេលា + - O(១) ត្រូវបន្ថែម / ដកចេញនៅចុងបញ្ចប់ (សងប្រាក់សម្រាប់ការបែងចែកសម្រាប់ទំហំបន្ថែម) សន្ទស្សន៍ឬបច្ចុប្បន្នភាព + - O(n) ដើម្បីបញ្ចូល / ដកចេញនៅកន្លែងផ្សេងទៀត + - [] លំហ + - ជាប់ទាក់ទងនឹងការចងចាំដូច្នេះភាពជិតស្និទ្ធជួយដល់ការអនុវត្ត + - ទំហំត្រូវការ = (ទំហំ Array, ដែលជា >= n) * ទំហំនៃធាតុ, ប៉ុន្តែបើទោះបីជា 2n, នៅតែ O (n) From 108ba5f764165fbabb07ce1267ab9d711f6be910 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Fri, 8 May 2020 19:24:18 -0500 Subject: [PATCH 199/263] Update README-kh.md Khmer translation - Linked List --- translations/README-kh.md | 60 +++++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/translations/README-kh.md b/translations/README-kh.md index b96246b..e2f4d20 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -501,8 +501,8 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - [] ការពិពណ៌នា៖ - [Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) -[UC Berkeley CS61B - អារេ លីនែអ៊ែរ និង ពហុវិមាត្រ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (ចាប់ផ្តើមមើលចាប់ពី ១៥នាទី ៣២វិនាទី) - - [Arrays មូលដ្ឋាន (វីដេអូ)](https://archive.org/details/0102What YouShouldKnow/02_04-basicArrays.mp4) - - [ពហុវិមាត្រ (វីដេអូ)](https://archive.org/details/0102What YouShouldKnow/02_05-multidimensionalArrays.mp4) + - [Arrays មូលដ្ឋាន (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) + - [ពហុវិមាត្រ (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Arrays ឌីណាមិចេ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) - [Jagged Arrays (វីដេអូ)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [Jagged Arrays (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) @@ -515,20 +515,56 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - [] size() - ចំនួនធាតុ - [] capacity() - ចំនួនធាតុដែលវាអាចផ្ទុកបាន - [] is_empty() - - [] at(index) - ត្រឡប់ធាតុនៅសន្ទស្សន៍ដែលបានផ្តល់ឱ្យផ្លុំឡើងប្រសិនបើសន្ទស្សន៍នៅក្រៅព្រំដែន + - [] at(index) - ត្រឡប់ធាតុនៅទីតាំងដែលបានផ្តល់ឱ្យ បេីទីតាំងនៅក្រៅព្រំដែន វានឹង មានកុំហស - [] push(item) - - [] insert(index, item) - បញ្ចូលធាតុនៅសន្ទស្សន៍ប្តូរតម្លៃសន្ទស្សន៍និងធាតុនៅខាងក្រោមទៅខាងស្តាំ - - [] prepend (item) - អាចប្រើបញ្ចូលខាងលើនៅសន្ទស្សន៍ ០ + - [] insert(index, item) - បញ្ចូលធាតុនៅទីតាំង ប្តូរតម្លៃទីតាំង និងធាតុនៅខាងក្រោមទៅខាងស្តាំ + - [] prepend (item) - អាចប្រើបញ្ចូលខាងលើនៅទីតាំង ០ - [] pop() - ដកចេញពីចុងបញ្ចប់តម្លៃត្រឡប់មកវិញ - - [] delete(index) - លុបធាតុនៅលិបិក្រមផ្លាស់ប្តូរធាតុនៅពីក្រោយទាំងអស់ - - [] remove(item) - រកមើលតម្លៃនិងយកលិបិក្រមដែលផ្ទុកវាចេញ (ទោះបីជានៅកន្លែងច្រើនក៏ដោយ) - - [] find(item) - រកមើលតម្លៃហើយត្រឡប់សន្ទស្សន៍ដំបូងជាមួយតម្លៃនោះ -1 បើរកមិនឃើញ + - [] delete(index) - លុបធាតុនៅទីតាំងដែលអោយ ផ្លាស់ប្តូរធាតុនៅពីក្រោយទាំងអស់ + - [] remove(item) - រកមើលតម្លៃនិងយកទីតាំងចេញដែលផ្ទុកវាចេញ (ទោះបីជានៅកន្លែងច្រើនក៏ដោយ) + - [] find(item) - រកមើលតម្លៃហើយត្រឡប់វិញនៅទីតាំងដំបូងជាមួយតម្លៃនោះ បើរកមិនឃើញត្រលប់វិញ -1 - [] resize(new_capacity) // មុខងារឯកជន - - នៅពេលដែលអ្នកឈានដល់សមត្ថភាព, ផ្លាស់ប្តូរទំហំទ្វេដងទំហំ - - នៅពេលដែលចាប់យកវត្ថុមួយប្រសិនបើទំហំគឺ 1/4 នៃសមត្ថភាព, ផ្លាស់ប្តូរទំហំដល់ពាក់កណ្តាល + - ពេលទំហំ Array ដល់កំណត់, ផ្លាស់ប្តូរទំហំទ្វេដងទំហំ + - នៅពេលដែលចាប់យកវត្ថុមួយ ប្រសិនបើទំហំគឺ 1/4 នៃទំហំសរុប, ផ្លាស់ប្តូរទំហំដល់ពាក់កណ្តាល - [] ពេលវេលា - - O(១) ត្រូវបន្ថែម / ដកចេញនៅចុងបញ្ចប់ (សងប្រាក់សម្រាប់ការបែងចែកសម្រាប់ទំហំបន្ថែម) សន្ទស្សន៍ឬបច្ចុប្បន្នភាព + - O(១) ត្រូវបន្ថែម / ដកចេញនៅចុងបញ្ចប់ (សងវិញសម្រាប់ការបែងចែកសម្រាប់ទំហំបន្ថែម) ទីតាំង - O(n) ដើម្បីបញ្ចូល / ដកចេញនៅកន្លែងផ្សេងទៀត - [] លំហ - ជាប់ទាក់ទងនឹងការចងចាំដូច្នេះភាពជិតស្និទ្ធជួយដល់ការអនុវត្ត - - ទំហំត្រូវការ = (ទំហំ Array, ដែលជា >= n) * ទំហំនៃធាតុ, ប៉ុន្តែបើទោះបីជា 2n, នៅតែ O (n) + - ទំហំត្រូវការ = (ទំហំ Array, ដែល >= n) * ទំហំនៃធាតុ, ប៉ុន្តែបើទោះបីជា 2n, នៅតែ O (n) + +--- + +- ### Linked Lists + - [] ការពិពណ៌នា៖ + - [] [Singly Linked Lists (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [] [CS 61B - Linked Lists ១ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [] [CS 61B - Linked Lists ២ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [] [កូដ C (វីដេអូ)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) + - មិនមែនវីដេអូទាំងមូលទេគឺគ្រាន់តែជាផ្នែកអំពីរចនាសម្ព័ន្ធ (Data Structure) និងការបែងចែក Memory ។ + - [] Linked List vs Arrays: + - [Core Linked Lists Vs Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) + - [នៅក្នុងពិភពពិត Linked Lists Vs Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) + - [] [ហេតុអ្វីអ្នកគួរចៀសវាង linked lists (វីដេអូ)](https://www.youtube.com/watch?v=YQs6IC-vgmo) + - [] Gotcha: you need pointer to pointer knowledge: +        (សម្រាប់ពេលអ្នកហុច pointer ទៅមុខងារមួយដែលអាចផ្លាស់ប្តូរអាស័យដ្ឋានដែលព្រួញចង្អុល) +        ទំព័រនេះគ្រាន់តែដើម្បីស្វែងយល់ពី pointer ទៅ pointer ។ ខ្ញុំមិនណែនាំបញ្ជីឈ្មោះបែបត្រាប់តាមនេះទេ។ ភាពងាយស្រួលក្នុងការអាននិងរក្សាបាននូវភាពលំបាកដោយសារតែភាពឆ្លាតវៃ។ + - [Pointer ទៅ pointer](https://www.eskimo.com/~scs/cclass/int/sx8.html) + - [] អនុវត្ត (ខ្ញុំបានធ្វើដោយប្រើទ្រនិចកន្ទុយនិងដោយគ្មាន)៖ + - [] size() - ត្រឡប់ចំនួនធាតុទិន្នន័យក្នុងបញ្ជី + - [] empty() - bool ត្រឡប់ពិតបើទទេ + - [] value_at(index) - ត្រឡប់តម្លៃនៃធាតុទី (ចាប់ផ្តើមពីលេខ ០ ដំបូង) + - [] push_front(តម្លៃ) - បន្ថែមធាតុនៅខាងមុខបញ្ជី + - [] pop_front() - យកធាតុខាងមុខចេញហើយប្រគល់តម្លៃរបស់វាមកវិញ + - [] push_back(តម្លៃ) - បន្ថែមធាតុនៅចុងបញ្ចប់ + - [] pop_back() - យកធាតុបញ្ចប់ហើយត្រឡប់តម្លៃរបស់វា + - [] front() - ទទួលបានតម្លៃនៃធាតុខាងមុខ + - [] back() - ទទួលបានតម្លៃនៃធាតុបញ្ចប់ + - [] insert(index, តម្លៃ) - បញ្ចូលតម្លៃនៅindex ដូច្នេះធាតុបច្ចុប្បន្ននៅindexនោះត្រូវបានចង្អុលទៅធាតុថ្មីនៅindex។ + - [] erase(index) - យក Node ចេញនៅ index ដែលបានផ្តល់ឱ្យ + - [] value_n_from_end(n) - ត្រឡប់តម្លៃ Node ទីពីខាងចុងបញ្ជី + - [] reverse() - បញ្ច្រាស់បញ្ជី + - [] remove_value(តម្លៃ) - លុបធាតុដំបូងក្នុងបញ្ជីជាមួយតម្លៃនេះ + - [] Doubly-linked List + - [ការពិពណ៌នា (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) + - មិនចាំបាច់អនុវត្តទេ From e8857f0ba0fb4df1456dfc52721f80c9338de831 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Sat, 9 May 2020 10:01:54 -0500 Subject: [PATCH 200/263] Update README-kh.md Khmer Translation - Stack until bitwise operations --- translations/README-kh.md | 96 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index e2f4d20..931aa40 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -568,3 +568,99 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - [] Doubly-linked List - [ការពិពណ៌នា (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) - មិនចាំបាច់អនុវត្តទេ + +--- + +- ### Stack + - [] [Stack (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [] [ការប្រើ Stack ចូលមុនចេញក្រោយ (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) + - [] នឹងមិនអនុវត្តទេ។ ការអនុវត្តជាមួយ Array គឺមិនសំខាន់។ + +- ### Queue + - [] [ការប្រើ Queue ចូលមុនចេញមុន(វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) + - [] [Queue (វីដេអូ)](https://www.coursera.org/lecture/data-structures/queues-EShpq) +    - [] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) +    - [] [Queue អាទិភាព (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) +    - [] ប្រើ linked-list ដែលមានភ្ជាប់ជាមួយទ្រនិចនៅកន្ទុយ៖ + - enqueue(តម្លៃ) - បន្ថែមតម្លៃនៅទីតាំងនៅកន្ទុយ + - dequeue() - ត្រឡប់តម្លៃនិងយកធាតុដែលបានបន្ថែមថ្មីៗចេញ (ផ្នែកខាងមុខ) + - empty() +    - [] អនុវត្តដោយប្រើអារេ Array ទំហំថេរ៖ + - enqueue(តម្លៃ) - បន្ថែមធាតុនៅចុងបញ្ចប់នៃការផ្ទុកដែលមាន + - dequeue() - ត្រឡប់តម្លៃនិងយកធាតុដែលបានបន្ថែមថ្មីៗចេញ + - empty() + - full() +    - [] ថ្លៃ៖ + - ការអនុវត្តមិនល្អដោយប្រើlinked listដែលអ្នករៀបជាជួរនៅនឹងក្បាលនិងដេស្កាយនៅកន្ទុយប្រហែលជា O(n) +            ដោយសារតែអ្នកត្រូវការនៅជាប់នឹងធាតុចុងក្រោយ, បណ្តាលឱ្យ 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) + - [] វីដេអូ៖ + - [] [Hashing with Chaining (វីដេអូ)](https://www.youtube.com/watch?v=0M_kIqwbFo&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: វចនានុក្រមដ៏អស្ចារ្យ (វីដេអូ)](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) + + - [] វគ្គសិក្សាអនឡាញ៖ + - [] [ស្វែងយល់អំពីមុខងារ Hash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [] [ការប្រើតារាងHash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [] [គាំទ្រ Hash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_04- ឧបត្ថម្ភគាំទ្រហាន់ឌ្រី) + - [] [តារាងជំនួយភាសា Hash(វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [] [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/4) + - [] [បញ្ហាសៀវភៅទូរស័ព្ទ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) + - [តារាងចែកចាយ] + - [ការផ្ទុកឡើងភ្លាមៗនិងការបង្កើនប្រសិទ្ធភាពផ្ទុកនៅក្នុងប្រអប់ឯកសារ (វីដេអូ)](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 គឺជាទំហំនៃតារាង hash + - add(key, value) - ប្រសិនបើមានកូនសោររួចហើយ, ធ្វើបច្ចុប្បន្នភាពតម្លៃ + - exists(key) + - get(key) + - remove(key) + +--- + +### More Knowledge +## ចំណេះដឹងបន្ថែម + +- ### Binary search + - [] [Binary search (វីដេអូ)](https://www.youtube.com/watch?v=D5SrAga1pno) + - [] [Binary search (វីដេអូ)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) + - [] [លម្អិត](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/) + - [] អនុវត្ត៖ + - Binary search (នៅលើជួរអារេនៃចំនួនគត់) + - Binary search ដោយប្រើការហៅខ្លួនឯង + +- ### ប្រតិបតិ្តការ Bitwise + - [] [សន្លឹកជំនួយ Bits](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) + - អ្នកគួរតែស្គាល់ អំណាច ២ ពី (២ ^ ១ ដល់ ២ ^ ១៦ និង ២ ^ ៣២) + - [] ទទួលបានការយល់ដឹងដ៏ល្អអំពីការរៀបចំBitsជាមួយ៖ &, |, ^, ~, >>, << + - [] [ពាក្យ](https://en.wikipedia.org/wiki/Word_ (computer_architecture)) + - [] ការណែនាំល្អ៖ +            ការធ្វើចលនាBits (វីដេអូ)](https://www.youtube.com/watch?v=7jkIUgLC29I) + - [] [C ការបង្រៀនសរសេរកម្មវិធី ២-១០: ប្រតិបត្តិការ Bitwise (វីដេអូ)](https://www.youtube.com/watch?v=d0AwjSpNXR0) + - [] [ការរៀបចំBits](https://en.wikipedia.org/wiki/Bit_manipulation) +  - [] [ប្រតិបតិ្តការ Bitwise](https://en.wikipedia.org/wiki/Bitwise_operation) + - [] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) + - [] [The Bit Twiddler](https://bits.stephan-brumme.com/) + - [] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) + - [] [Bit Hacks (វីដេអូ)](https://www.youtube.com/watch?v=ZusiKXcz_ac) + - [] 2s និង 1s បំពេញបន្ថែម + - [Binary: Plusses & Minuses (ហេតុអ្វីយើងប្រើសមពីរ) (វីដេអូ)](https://www.youtube.com/watch?v=lKTsv6iVxV4) + - [១s បំពេញ](https://en.wikipedia.org/wiki/Ones%27_complement) + - [២ វិនាទីបំពេញ](https://en.wikipedia.org/wiki/Two%27s_complement) + - [] រាប់សំណុំ bits + - [វិធី ៤ យ៉ាងដើម្បីរាប់ប៊ីតជាសាមសិបប៊ីត (វីដេអូ)](https://youtu.be/Hzuzo9NJrlc) + - [រាប់ប៊ីត](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) + - [របៀបរាប់ចំនួនសំណុំប៊ីតក្នុងចំនួនគត់ ៣២ ប៊ីត](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit- ចំនួនគត់) + - [] ប្តូរតម្លៃ + - [ប្តូរ](https://bits.stephan-brumme.com/swap.html) + - [] តម្លៃដាច់ខាត: + - [អាំងតេក្រាលពេញលេញ](https://bits.stephan-brumme.com/absInteger.html) From 4bcd83b7ca7f8950ea406ec202ef314a514876d3 Mon Sep 17 00:00:00 2001 From: Himanshu Airan <62210670+Himanshu-77@users.noreply.github.com> Date: Mon, 11 May 2020 22:00:24 +0530 Subject: [PATCH 201/263] Update README-hi.md Correction in some grammatical mistakes --- translations/README-hi.md | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/translations/README-hi.md b/translations/README-hi.md index 2e83edc..71be70a 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -1,5 +1,5 @@ # कोडिंग साक्षात्कार विश्वविद्यालय ->मैं मूल रूप से इसे एक सॉफ़्टवेयर इंजीनियर बनने के लिए अध्ययन विषयों की एक छोटी-छोटी सूची के रूप में बनाया था, लेकिन यह आज की बड़ी सूची में बढ़ी है। इस अध्ययन योजना के माध्यम से जाने के बाद, [मुझे अमेज़ॅन पर सॉफ़्टवेयर डेवलपमेंट इंजीनियर के रूप में काम पर रखा गया है !](https://startupnextdoor.com/ive-been-acquired-by->amazon/?src=ciu) आपको संभवतः जितना मैंने किया उतना ही पढ़ना नहीं होगा। वैसे भी, आपको जो भी चाहिए वह यहां है +>मैने मूल रूप से इसे एक सॉफ़्टवेयर इंजीनियर बनने के लिए अध्ययन विषयों की एक छोटी सी सूची के रूप में बनाया था, लेकिन यह आज एक बड़ी सूची में बढ़ी है। इस अध्ययन योजना के माध्यम से जाने के बाद, [मुझे अमेज़ॅन पर सॉफ़्टवेयर डेवलपमेंट इंजीनियर के रूप में काम पर रखा गया है !](https://startupnextdoor.com/ive-been-acquired-by->amazon/?src=ciu) आपको संभवतः जितना मैंने किया उतना नहीं पढ़ना होगा। वैसे भी, आपको जो भी चाहिए वह यहां है > >यहां सूचीबद्ध आइटम आपको किसी साफ्टवेयर कंपनी के बारे में साक्षात्कार में अच्छी तरह से तैयार करेंगे, जिनमें दिग्गज, अमेज़ॅन, फेसबुक, गूगल या माइक्रोसॉफ्ट शामिल हैं। > @@ -12,10 +12,10 @@ यह नए सॉफ़्टवेयर इंजीनियरों या सॉफ़्टवेयर / वेब विकास से सॉफ़्टवेयर इंजीनियरिंग (जहां कंप्यूटर साइंस ज्ञान आवश्यक है) से स्विच करने के लिए है। यदि आपके पास कई वर्षों का अनुभव है और कई वर्षों के सॉफ्टवेयर इंजीनियरिंग अनुभव का दावा कर रहे हैं, तो एक कठिन साक्षात्कार की अपेक्षा करें। -यदि आपके पास सॉफ्टवेयर / वेब विकास के कई सालों का अनुभव है, तो ध्यान दें कि सॉफ्टवेयर, वेब डेवलपमेंट से भिन्न Google, अमेज़ॅन, फेसबुक और माइक्रोसॉफ्ट दृश्य सॉफ्टवेयर इंजीनियरिंग जैसी बड़ी सॉफ्टवेयर कंपनियों और उन्हें कंप्यूटर साइंस ज्ञान की आवश्यकता होती है। +यदि आपके पास सॉफ्टवेयर / वेब विकास के कई सालों का अनुभव है, तो ध्यान दें कि Google, अमेज़ॅन, फेसबुक और माइक्रोसॉफ्ट जैसी बड़ी सॉफ्टवेयर कंपनियों की दृष्टि में सॉफ्टवेयर इंजीनियरिंग सॉफ्टवेयर/वेब डेवलपमेंट से भिन्न है , और उन्हें कंप्यूटर साइंस ज्ञान की आवश्यकता होती है। + +यदि आप एक विश्वसनीय इंजीनियर या सिस्टम इंजीनियर बनना चाहते हैं, तो वैकल्पिक सूची (नेटवर्किंग, सुरक्षा) से अधिक जानें। -यदि आप एक विश्वसनीयता इंजीनियर या सिस्टम इंजीनियर बनना चाहते हैं, तो वैकल्पिक सूची (नेटवर्किंग, सुरक्षा) से अधिक जानें। -चाहिए --- ## अनुक्रमणिका @@ -42,11 +42,10 @@ - [क़ु](#queue) - [हैश टेबल](#hash-table) - [अधिक जानकारी](#more-knowledge) - - [एन्दिंनेस](#endianness) - [बाइनरी सर्च](#binary-search) - [बिट-वाईस ऑपेरशन](#bitwise-operations) - [ट्रीज](#trees) - - [ट्रीज पृष्टभूमि और तिपनिया](#trees---notes--background) + - [ट्रीज पृष्टभूमि और टिप्पणियाँ](#trees---notes--background) - [बाइनरी सर्च ट्री: BST](#binary-search-trees-bsts) - [हीप / प्रायोरिटी क्यू / बाइनरी हीप](#heap--priority-queue--binary-heap) - [ट्राइस](#tries) @@ -60,7 +59,7 @@ - [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability) - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms) - [गार्बेज कलेक्शन](#garbage-collection) - - [काशेस](#caches) + - [Caches](#caches) - [प्रोसेस और थ्रेड](#processes-and-threads) - [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) - [Papers](#papers) @@ -72,13 +71,13 @@ - [Scheduling](#scheduling) - [Implement system routines](#implement-system-routines) - [String searching & manipulations](#string-searching--manipulations) -- [आखरी समीक्षा](#final-review) +- [आखिरी समीक्षा](#final-review) - [पुस्तकें](#books) -- [कोडिंग अभ्यास/चुनौतियों](#coding-exerciseschallenges) +- [कोडिंग अभ्यास/चुनौतियाँ](#coding-exerciseschallenges) - [एक बार जब आप इंटरव्यू के करीब हो](#once-youre-closer-to-the-interview) - [आपका रिज्यूमे](#आपका-रिज्यूमे) - [इंटरव्यू की सोंच](#be-thinking-of-for-when-the-interview-comes) -- [इन्तेर्विएवर के लिए प्रश्न रखे](#have-questions-for-the-interviewer) +- [इंटरव्यूअर के लिए प्रश्न रखे](#have-questions-for-the-interviewer) - [अतिरिक्त पढाई (जरुरत नहीं)](#additional-learnings-not-required) - [इनफार्मेशन थ्योरी](#information-theory) - [पारिटी और हैमिंग कोड](#parity--hamming-code) @@ -87,7 +86,7 @@ - [संक्षिप्तीकरण](#compression) - [नेटवर्किंग](#networking) - [संगणक सुरक्षा](#computer-security) - - [परैल्लेल प्रोग्रामिंग](#parallel-programming) + - [पैरेलल प्रोग्रामिंग](#parallel-programming) - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - [Fast Fourier Transform](#fast-fourier-transform) - [ब्लूम फ़िल्टर](#bloom-filter) @@ -103,17 +102,17 @@ - [Discrete math](#discrete-math) - [मशीन लर्निंग](#मशीन-लर्निंग) - [गो](#गो) -- [कुछ विषयोकी अधिक जानकारी](#कुछ-विषयोकी-अधिक-जानकारी) +- [कुछ विषयो की अधिक जानकारी](#कुछ-विषयोकी-अधिक-जानकारी) - [विडियो शृखला](#विडियो-शृखला) - [जब आपको नौकरी मिल जाये](#जब-आपको-नौकरी-मिल-जाये) --- -## इसका उपयोग क्यू करे? +## इसका उपयोग क्यों करे? -मैंने जब ये परियोजना शुरू की, तब मैं स्टैक और हीप में फरक नहीं जनता था, मुजे नहीं पता था की Big-O क्या हे, ट्रीज क्या हे, या ग्राफ को पार कैसे करते हैं. अगर मुजे छाटने का अल्गोरिथम लिखना पड़ता तो मैं आपको ये बता सकता हु के वो इतना ख़ास नहीं होगा. जो भी डाटा स्ट्रक्चर का मैंने उपयोग किया वो भाषा में समाविष्ट था, और वो कैसे काम करता हे उसकी कोई जानकारी मुजे नहीं थी. मुजे कभी मेमोरी का संचालन नहीं करता पड़ा, जबतक मेरी चलाई कोई प्रोसेस "out of -memory" का एरर न दे, और तब मुजे कोई वैकल्पिक हल धुन्दाना पड़ता था. मैंने मेरी जिन्दगी में बहोत कम मुल्ती-डायमेंशनल ऐरे और बहोत सारे अस्सोसिअतिव् ऐरे का उपयोग किया हे, पर मैंने कोई भी डाटा स्ट्रक्चर शुरू से नहीं लिखा था. -पर इस अध्ययन योजना का उपयोग करने बाद मेरा नौकरी लगाने का आत्मविश्वास बहोत बढ़ा हें. यह एक लम्बी योजना हें. यह मेरे लिए बहोत महीनोतक चलेगी. अगर आपको ईंमैसे कुछ पता हैं तो आपको कम वक्त लगेगा. +मैंने जब ये परियोजना शुरू की, तब मैं स्टैक और हीप में फर्क नहीं जानता था, मुझे नहीं पता था की Big-O क्या हे, ट्रीज क्या हे, या ग्राफ को पार कैसे करते हैं. अगर मुझे छाटने का अल्गोरिथम लिखना पड़ता तो मैं आपको ये बता सकता हु कि वो इतना ख़ास नहीं होगा. जो भी डाटा स्ट्रक्चर का मैंने उपयोग किया वो भाषा में समाविष्ट था, और वो कैसे काम करता हे उसकी कोई जानकारी मुझे नहीं थी. मैं कभी मेमोरी का संचालन नहीं करता, जब तक मेरी चलाई कोई प्रोसेस "out of +memory" का एरर न दे, और तब मुझे कोई वैकल्पिक हल ढूँढनाा पड़ता था. मैंने मेरी जिन्दगी में बहुत कम मल्टी-डायमेंशनल ऐरे और बहोत सारे associative ऐरे का उपयोग किया हे, पर मैंने कोई भी डाटा स्ट्रक्चर शुरू से नहीं लिखा था. +पर इस अध्ययन योजना का उपयोग करने बाद मेरा नौकरी लगने का आत्मविश्वास बहुत बढ़ा हें. यह एक लम्बी योजना हें. यह मेरे लिए बहुत महीनो तक चली. अगर आपको इनमें से कुछ पता हैं तो आपको कम वक्त लगेगा. ## इसका कैसे उपयोग करे? From a10b18d5e9b85ce33f770e9404326b63c79595f7 Mon Sep 17 00:00:00 2001 From: Himanshu Airan <62210670+Himanshu-77@users.noreply.github.com> Date: Tue, 12 May 2020 01:10:43 +0530 Subject: [PATCH 202/263] Update README-hi.md Corrected some grammatical errors. --- translations/README-hi.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/translations/README-hi.md b/translations/README-hi.md index 71be70a..31da979 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -119,7 +119,7 @@ memory" का एरर न दे, और तब मुझे कोई वै नीचे सब कुछ एक रूपरेखा है, और आप ऊपर से नीचे के क्रम में पढ़े. -मैं गितहब के विशेष मार्कडाउन का उपयोग कर रहा हूँ, प्रगति की जाँच करने के लिए कार्य सूचियों का प्रयोग करे. +मैं गिटहब के विशेष मार्कडाउन का उपयोग कर रहा हूँ, प्रगति की जाँच करने के लिए कार्य सूचियों का प्रयोग करे. - [x] एक नई शाखा बनाएँ ताकि आप इस तरह की वस्तुओं की जांच कर सकते हैं, बस कोष्ठक में एक एक्स डाले: [x] @@ -151,18 +151,18 @@ memory" का एरर न दे, और तब मुझे कोई वै ## इंटरव्यू के लिए एक संगणक भाषा चुने -इंटरव्यू मैं आप कोंसिभी एक भाषा जिसमे आप आरामदायक हो वो चुन सकते हैं, पर गूगल के लिए निम्नलिखित भाषाएँ अच्छी रहेगी: +इंटरव्यू मैं आप कोई भी एक भाषा जिसमे आप आरामदायक हो वो चुन सकते हैं, पर गूगल के लिए निम्नलिखित भाषाएँ अच्छी रहेगी: - C++ - Java - Python -आप निम्न्लिहित भाषाएँ भी चुन सकते हैं, पर उन्हें सावधानीसे चुने +आप निम्नलिखित भाषाएँ भी चुन सकते हैं, पर उन्हें सावधानी से चुने - JavaScript - Ruby -आपको भाषा में बहुत सहज होना चाहिए और जानकार होना चाहिए। +आपको भाषा में बहुत सहज होना चाहिए और जानकारी होनी चाहिए। विकल्पों के बारे में अधिक पढ़ें: @@ -178,7 +178,7 @@ memory" का एरर न दे, और तब मुझे कोई वै ### इंटरव्यू प्रेप - [ ] प्रोग्रामिंग साक्षात्कार का खुलासा: आपकी अगली नौकरी, दूसरी संस्करण को लैंडिंग करने के लिए रहस्य - - सी ++ और जावा में जवाब + - C++ और java में जवाब - यह कोडिंग साक्षात्कार के लिए क्रैकिंग के लिए एक अच्छा वार्म-अप है - बहुत मुश्किल नहीं है, सबसे अधिक समस्याएं आपको साक्षात्कार में जो दिखाई दे रही हैं उससे अधिक आसान हो सकती हैं (मैंने जो पढ़ा है) - [ ] कोडिंग साक्षात्कार, 6 वें संस्करण @@ -295,16 +295,16 @@ memory" का एरर न दे, और तब मुझे कोई वै इस सूची में कई महीनों से वृद्धि हुई है, और हाँ, यह एक तरह से हाथ से बाहर हो गयी हैं -निचे कुछ गलतिया हैं जो मैंने की हैं तो आपका अनुभव बेहतर होगा +नीचे कुछ गलतिया हैं जो मैंने की हैं तो आपका अनुभव बेहतर होगा ### १. आपसे यह सब याद नहीं होगा -मैंने घंटो वीडिय के विडियो देखे और टिप्पणिया लिखी, और महीनो बाद मुजे कुछ याद नहीं रहा. सबकी समीक्षा करने के लिए मैंने 3 दिन मेरी तिप्पनिओयो और flashcards बनाने में बितायें +मैंने घंटो वीडियो के विडियो देखे और टिप्पणिया लिखी, और महीनो बाद मुझे कुछ याद नहीं रहा. सबकी समीक्षा करने के लिए मैंने 3 दिन मेरी टिप्पणीयो और flashcards बनाने में बितायें कृपया पढ़ें तो आप मेरी गलतियां नहीं करेंगे: [कंप्यूटर विज्ञान ज्ञान को बनाए रखना](https://startupnextdoor.com/retaining-computer-science-knowledge/) -### २. फ्लाश्कार्ड्स का उपयोग कीजिये +### २. फ़्लैशकार्ड्स का उपयोग कीजिये इस समस्या को हल करने के लिए, मैंने एक छोटे से फ्लैशकार्ड साइट बनाई जहां मैं 2 प्रकार के फ्लैशकार्ड जोड़ सकता था: सामान्य और कोड प्रत्येक कार्ड के पास भिन्न स्वरूपण है। From c6dfe461dbf384db34c54197186e0e16c5c927f8 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Fri, 15 May 2020 09:04:18 -0500 Subject: [PATCH 203/263] Update README-kh.md Khmer translation Binary search trees --- translations/README-kh.md | 322 ++++++++++++++++++++++---------------- 1 file changed, 188 insertions(+), 134 deletions(-) diff --git a/translations/README-kh.md b/translations/README-kh.md index 931aa40..a2b4fd1 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -206,26 +206,26 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ ### Interview Process & General Interview Prep ## ដំណើរការសំភាសន៍និងកម្មវិធីសម្ភាសន៍ទូទៅ -- [] [ABC: តែងតែសរសេរកូដ](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) -- [] [ការប្រេីប្រាស់ក្តារខៀន](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [] [ការប្រេីប្រាស់ក្តារខៀនមានប្រសិទ្ធិភាពក្នុងពេលសម្ភាសន៍កម្មវិធី](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) -- [] [ជ្រើសរើសបុគ្គលិកជំនាញបច្ចេកវិទ្យា](https://www.youtube.com/watch?v=N233T0epWTs) -- [] វិធីរកការងារនៅក្រុមហ៊ុនធំ ៤៖ - - [] [របៀបរកការងារធ្វើនៅក្រុមហ៊ុនធំ ៤ - Amazon, Facebook, Google និង Microsoft (មានវីដេអូ)](https://www.youtube.com/watch?v=YJZCUhxNCv8) +- [ ] [ABC: តែងតែសរសេរកូដ](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [ ] [ការប្រេីប្រាស់ក្តារខៀន](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [ ] [ការប្រេីប្រាស់ក្តារខៀនមានប្រសិទ្ធិភាពក្នុងពេលសម្ភាសន៍កម្មវិធី](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) +- [ ] [ជ្រើសរើសបុគ្គលិកជំនាញបច្ចេកវិទ្យា](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] វិធីរកការងារនៅក្រុមហ៊ុនធំ ៤៖ + - [ ] [របៀបរកការងារធ្វើនៅក្រុមហ៊ុនធំ ៤ - Amazon, Facebook, Google និង Microsoft (មានវីដេអូ)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [បំបែកការសម្ភាសន៍ការសរសេរកូដ ១៖ - - [] [ហ្គេលឡេអិលម៉ាកឌូវែល (Gayle L McDowell) - បំបែកការសម្ភាសន៍ការសរសេរកូដ (វីដេអូ)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) - - [] [បំបែកបទសម្ភាសន៍នៃការសរសេរកូដជាមួយអ្នកនិពន្ធហ្គេលឡាឡាក់មែនម៉ាកម៉ាកឌូវែល (Gayle Laakmann McDowell) (វីដេអូ)](https://www.youtube.com/watch?v=aClxtDcdpsQ) -- [] បំបែកបទសម្ភាសន៍កូដហ្វេសប៊ុក - - [] [វិធីសាស្រ្ត](https://www.youtube.com/watch?v=wCl9kvQGHPI) - - [] [ពន្យល់ពីបញ្ហា](https://www.youtube.com/watch?v=4UWDyJq8jZg) -- [] វគ្គសិក្សាត្រៀម: - - [] [សំភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធី (មិនបានបង់ប្រាក់)](https://www.udemy.com/software-engineer-interview-unleashed)៖ + - [ ] [ហ្គេលឡេអិលម៉ាកឌូវែល (Gayle L McDowell) - បំបែកការសម្ភាសន៍ការសរសេរកូដ (វីដេអូ)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [បំបែកបទសម្ភាសន៍នៃការសរសេរកូដជាមួយអ្នកនិពន្ធហ្គេលឡាឡាក់មែនម៉ាកម៉ាកឌូវែល (Gayle Laakmann McDowell) (វីដេអូ)](https://www.youtube.com/watch?v=aClxtDcdpsQ) +- [ ] បំបែកបទសម្ភាសន៍កូដហ្វេសប៊ុក + - [ ] [វិធីសាស្រ្ត](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [ពន្យល់ពីបញ្ហា](https://www.youtube.com/watch?v=4UWDyJq8jZg) +- [ ] វគ្គសិក្សាត្រៀម: + - [ ] [សំភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធី (មិនបានបង់ប្រាក់)](https://www.udemy.com/software-engineer-interview-unleashed)៖ - រៀនពីរបៀបដើម្បីត្រៀមខ្លួនសម្រាប់ការសម្ភាសន៍វិស្វករអភិវឌ្ឍន៍កម្មវិធីពីអ្នកសំភាសន៍របស់ហ្គូហ្គោល (Google) ។ - - [] [Python សម្រាប់រចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយនិងសំភាសន៍ (វគ្គសិក្សាបង់លុយ)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/)៖ + - [ ] [Python សម្រាប់រចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយនិងសំភាសន៍ (វគ្គសិក្សាបង់លុយ)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/)៖ - វគ្គសិក្សាសំភាសន៍ Python ដែលផ្តោតលើរចនាសម្ព័ន្ធទិន្នន័យក្បួនដោះស្រាយ ការសំភាសន៍សាកល្បងនិងច្រើនទៀត។ - - [] [ការណែនាំអំពីរចនាសម្ព័ន្ធទិន្នន័យនិងក្បួនដោះស្រាយដោយប្រើ Python (វគ្គសិក្សាឥតគិតថ្លៃរបស់ Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513)៖ + - [ ] [ការណែនាំអំពីរចនាសម្ព័ន្ធទិន្នន័យនិងក្បួនដោះស្រាយដោយប្រើ Python (វគ្គសិក្សាឥតគិតថ្លៃរបស់ Udacity)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513)៖ - រចនាសម្ព័នធ័រណេតនិងអ័រហ្គ្រែនដោយឥតគិតថ្លៃ។ - - [] [រចនាសម្ព័នទិន្នន័យនិងក្បួនដោះស្រាយ! (Udacity បង់ Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256)៖ + - [ ] [រចនាសម្ព័នទិន្នន័យនិងក្បួនដោះស្រាយ! (Udacity បង់ Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256)៖ - ទទួលបានការអនុវត្តជាក់ស្តែងជាមួយនឹងរចនាសម្ព័ន្ធទិន្នន័យជាង ១០០ លំហាត់ និងការណែនាំពីអ្នកបងៀនដើម្បីជួយរៀបចំអ្នកសម្រាប់ការសម្ភាសន៍ និង ដាក់ការងារ។ --- @@ -268,11 +268,11 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ ### Interview Prep ## ត្រៀមការសម្ភាសន៍ -- [] [សំភាសន៍ការសរសេរកម្មវិធីបង្ហាញ: ការសរសេរកូដវិធីរបស់អ្នកតាមរយៈការសំភាសន៍, បោះពុម្ពលើកទី ៤](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) +- [ ] [សំភាសន៍ការសរសេរកម្មវិធីបង្ហាញ: ការសរសេរកូដវិធីរបស់អ្នកតាមរយៈការសំភាសន៍, បោះពុម្ពលើកទី ៤](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) - ចម្លើយសរសេរ C++ និង Java - នេះគឺជាសមដ៏ល្អសម្រាប់ការបំបែកសំភាសន៍កូដ - មិនពិបាកពេកទេ បញ្ហាភាគច្រើនប្រហែលជាងាយស្រួលជាងអ្វីដែលអ្នកបានឃើញក្នុងបទសម្ភាសន៍ (ពីអ្វីដែលខ្ញុំបានអាន) -- [] [ការសំភាសន៍ការសរសេរកូដការបោះពុម្ពលើកទី ៦](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) +- [ ] [ការសំភាសន៍ការសរសេរកូដការបោះពុម្ពលើកទី ៦](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - ចម្លើយនសរសេរជា Java --- @@ -282,9 +282,9 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ ជ្រើសរើសមួយ: -- [] [ធាតុផ្សំនៃបទសម្ភាសន៍សរសេរកម្មវិធី (កំណែ C ++)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) -- [] [ធាតុផ្សំនៃការសំភាសន៍សរសេរកម្មវិធីក្នុង Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) -- [] ធាតុនៃការសំភាសន៍សរសេរកម្មវិធី (កំណែ Java) +- [ ] [ធាតុផ្សំនៃបទសម្ភាសន៍សរសេរកម្មវិធី (កំណែ C ++)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] [ធាតុផ្សំនៃការសំភាសន៍សរសេរកម្មវិធីក្នុង Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [ ] ធាតុនៃការសំភាសន៍សរសេរកម្មវិធី (កំណែ Java) - [សៀវភៅ](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - [គម្រោង - វិធីសាស្រ្ត Stub និងករណីតេស្តិ៍សម្រាប់រាល់បញ្ហាក្នុងសៀវភៅ](https://github.com/gardncl/elements-of-programming-interviews) @@ -309,8 +309,8 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ ខ្ញុំមិនបានអានទាំងពីរនេះទេ ប៉ុន្តែវាត្រូវបានវាយតម្លៃនិងសរសេរយ៉ាងខ្ពស់ដោយ Sedgewick ។ គាត់អស្ចារ្យណាស់។ -- [] [វិធីដោះស្រាយក្នុង C++, ផ្នែក ១-៤៖ មូលដ្ឋានគ្រឹះរចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) តម្រៀប (Sort) ស្វែងរក (Searching)](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) -- [] [វិធីដោះស្រាយក្នុង C++ ភាគ ៥៖ ក្បួនដោះស្រាយក្រាហ្វិច](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) +- [ ] [វិធីដោះស្រាយក្នុង C++, ផ្នែក ១-៤៖ មូលដ្ឋានគ្រឹះរចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) តម្រៀប (Sort) ស្វែងរក (Searching)](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [វិធីដោះស្រាយក្នុង C++ ភាគ ៥៖ ក្បួនដោះស្រាយក្រាហ្វិច](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) ប្រសិនបើអ្នកមានអនុសាសន៍ល្អប្រសើរសម្រាប់ C++ សូមប្រាប់ខ្ញុំឱ្យដឹង។ រកមើលធនធានទូលំទូលាយ។ @@ -318,14 +318,14 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ ## Java -- [] [វិធីដោះស្រាយ (Sedgewick និង Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) +- [ ] [វិធីដោះស្រាយ (Sedgewick និង Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - វីដេអូដែលមានមាតិកាសៀវភៅ (និង Sedgewick!) លើវគ្គសិក្សា៖ - [ក្បួនដោះស្រាយ I](https://www.coursera.org/learn/algorithms-part1) - [ក្បួនដោះស្រាយទី ២](https://www.coursera.org/learn/algorithms-part2) រឺ៖ -- [] [រចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និងក្បួនដោះស្រាយ Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) +- [ ] [រចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និងក្បួនដោះស្រាយ Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - ដោយហ្គ្រីដល (Goodrich), តាតសាសៀ (Tamassia), ហ្គោវីស (Goldwasser) - អត្ថបទសម្រាប់វគ្គសិក្សាសំរាប់ថ្នាក់ដំបូងរបស់វិទ្យាសាស្ត្រកុំព្យូទ័រនៅឯ UC Berkeley - សូមមើលរបាយការណ៍សៀវភៅរបស់ខ្ញុំស្តីពីកំណែ Python ខាងក្រោម។ សៀវភៅនេះមានប្រធានបទដូចគ្នា។ @@ -333,7 +333,7 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ --- ## Python -- [] [រចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និងក្បួនដោះស្រាយ (Algorithm) ក្នុង Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) +- [ ] [រចនាសម្ព័ន្ធទិន្នន័យ (Data Structure) និងក្បួនដោះស្រាយ (Algorithm) ក្នុង Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - ដោយហ្គ្រីដល (Goodrich), តាតសាសៀ (Tamassia), ហ្គោវីស (Goldwasser) - ខ្ញុំចូលចិត្តសៀវភៅនេះ។ វាគ្របដណ្តប់អ្វីៗគ្រប់យ៉ាងនិងច្រើនទៀត។ - លេខកូដព្យញ្ជនៈ @@ -449,21 +449,21 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ ## ចំណេះដឹងចាំបាច់ -- [] **រៀន C** +- [ ] **រៀន C** - C គឺនៅគ្រប់ទីកន្លែង។ អ្នកនឹងឃើញឧទាហរណ៍នៅក្នុងសៀវភៅការបង្រៀនវីដេអូ *នៅគ្រប់ទីកន្លែង* ពេលអ្នកកំពុងសិក្សា។ - - [] [ភាសាសរសេរកម្មវិធី C, ភាគ ២](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - [ ] [ភាសាសរសេរកម្មវិធី C, ភាគ ២](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)          - នេះគឺជាសៀវភៅខ្លីមួយប៉ុន្តែវានឹងផ្តល់ឱ្យអ្នកនូវភាសា C យ៉ាងល្អហើយប្រសិនបើអ្នកអនុវត្តវាបន្តិច អ្នកនឹងឆាប់ស្ទាត់ជំនាញ។ ការយល់ដឹង C ជួយអ្នកឱ្យយល់ពីរបៀបដែលកម្មវិធីនិងការចងចាំដំណើរការ។          - [ចម្លើយចំពោះសំណួរ](https://github.com/lekkas/c-algorithms) -- [] **របៀបដែលកុំព្យូទ័រដំណើរការកម្មវិធី:** - - [] [តើស៊ីភីយូប្រតិបត្តិកម្មវិធីមួយយ៉ាងដូចម្តេច? (វីដេអូ)](https://www.youtube.com/watch?v=XM4lGflQFvA) - - [] [របៀបគណនាកុំព្យូទ័រ - ALU (វីដេអូ)](https://youtu.be/1I5ZMmrOfnA) - - [] [ចុះបញ្ជី (Registers) និង រ៉េម (RAM) (វីដេអូ)](https://youtu.be/fpnE6UAfbtU) - - [] [អង្គភាពកែច្នៃកណ្តាល (ស៊ីភីយូ) (The Central Processing Unit) (វីដេអូ)](https://youtu.be/FZGugFqdr60) - - [] [សេចក្តីណែនាំនិងកម្មវិធី (វីដេអូ)](https://youtu.be/zltgXvg6r3k) +- [ ] **របៀបដែលកុំព្យូទ័រដំណើរការកម្មវិធី:** + - [ ] [តើស៊ីភីយូប្រតិបត្តិកម្មវិធីមួយយ៉ាងដូចម្តេច? (វីដេអូ)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [របៀបគណនាកុំព្យូទ័រ - ALU (វីដេអូ)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [ចុះបញ្ជី (Registers) និង រ៉េម (RAM) (វីដេអូ)](https://youtu.be/fpnE6UAfbtU) + - [ ] [អង្គភាពកែច្នៃកណ្តាល (ស៊ីភីយូ) (The Central Processing Unit) (វីដេអូ)](https://youtu.be/FZGugFqdr60) + - [ ] [សេចក្តីណែនាំនិងកម្មវិធី (វីដេអូ)](https://youtu.be/zltgXvg6r3k) --- @@ -473,23 +473,23 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - គ្មានអ្វីត្រូវអនុវត្តទេ - មានវីដេអូជាច្រើននៅទីនេះ។ គ្រាន់តែមើលឱ្យបានគ្រប់គ្រាន់រហូតដល់អ្នកយល់។ អ្នកអាចត្រលប់មកពិនិត្យឡើងវិញជានិច្ច។ - ប្រសិនបើការបង្រៀនមួយចំនួនមានភាពស្រងូតស្រងាត់អ្នកអាចរំលងដល់ក្រោមហើយមើលវីដេអូគណិតវិទ្យាដែលដាច់ពីគ្នាដើម្បីទទួលបានចំណេះដឹងជាមូលដ្ឋាន។ -- [] [Harvard CS50 - Asymptotic Notation (វីដេអូ)](https://www.youtube.com/watch?v=iOq5kSKqeR4) -- [] [កំណត់ចំណាំ Big-O (ការបង្រៀនរហ័សទូទៅ) (វីដេអូ)](https://www.youtube.com/watch?v=V6mKVRU1evU) -- [] [Big O Notation (និង Omega និង Theta) - ការពន្យល់គណិតវិទ្យាល្អបំផុត (វីដេអូ)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [] Skiena៖ +- [ ] [Harvard CS50 - Asymptotic Notation (វីដេអូ)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [កំណត់ចំណាំ Big-O (ការបង្រៀនរហ័សទូទៅ) (វីដេអូ)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] [Big O Notation (និង 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/) -- [] [លំដាប់នៃការលូតលាស់ (វីដេអូ)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) -- [] [ការវិភាគអាមីស្តូតូទិក (Amortized) (វីដេអូ)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) -- [] [UC Berkeley Big O (មានវីដេអូ)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) -- [] [UC Berkeley Big Omega (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) -- [] [ការវិភាគរំលោះ (Amortized) (វីដេអូ)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) -- [] [បង្ហាញរូបភាព "Big-O" (វីដេអូ)](https://www.coursera.org/lecture/alacticmic-thinking-1/illustrating-big-o-YVqzv) -- [] TopCoder (រួមបញ្ចូលទាំងទំនាក់ទំនងកើតឡើងវិញនិងទ្រឹស្តីបទមេ)៖ +- [ ] [ការណែនាំមួយចំពោះការវិភាគស្មុគស្មាញនៃគណិតវិទ្យា](http://discrete.gr/complexity/) +- [ ] [លំដាប់នៃការលូតលាស់ (វីដេអូ)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) +- [ ] [ការវិភាគអាមីស្តូតូទិក (Amortized) (វីដេអូ)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) +- [ ] [UC Berkeley Big O (មានវីដេអូ)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [UC Berkeley Big Omega (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_ca3e7UVmeUc) +- [ ] [ការវិភាគរំលោះ (Amortized) (វីដេអូ)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [បង្ហាញរូបភាព "Big-O" (វីដេអូ)](https://www.coursera.org/lecture/alacticmic-thinking-1/illustrating-big-o-YVqzv) +- [ ] TopCoder (រួមបញ្ចូលទាំងទំនាក់ទំនងកើតឡើងវិញនិងទ្រឹស្តីបទមេ)៖ - [ភាពស្មុគស្មាញនៃការគណនា៖ ផ្នែកទី ១](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-1/) - [ភាពស្មុគស្មាញនៃការគណនា៖ ផ្នែកទី ២](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) -- [] [សន្លឹកជំនួយ](http://bigocheatsheet.com/) +- [ ] [សន្លឹកជំនួយ](http://bigocheatsheet.com/) --- @@ -498,7 +498,7 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - ### Arrays - អនុវត្តវ៉ិចទ័រប្តូរទំហំដោយស្វ័យប្រវត្តិ។ - - [] ការពិពណ៌នា៖ + - [ ] ការពិពណ៌នា៖ - [Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) -[UC Berkeley CS61B - អារេ លីនែអ៊ែរ និង ពហុវិមាត្រ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (ចាប់ផ្តើមមើលចាប់ពី ១៥នាទី ៣២វិនាទី) - [Arrays មូលដ្ឋាន (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) @@ -507,90 +507,90 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - [Jagged Arrays (វីដេអូ)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [Jagged Arrays (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - [ការប្តូរទំហំ Arrays (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - - [] អនុវត្តវ៉ិចទ័រ (បំលែង Arrays ដោយប្តូរទំហំស្វ័យប្រវត្តិ)៖ - - [] អនុវត្តការសរសេរកូដដោយប្រើArrays និង ទ្រនិចចង្អុល និង គណិតទ្រនិចដើម្បីលោតទៅសន្ទស្សន៍មួយ។ - - [] Arrays ទិន្នន័យថ្មីដែលមានអង្គចងចាំបម្រុងទុក + - [ ] អនុវត្តវ៉ិចទ័រ (បំលែង Arrays ដោយប្តូរទំហំស្វ័យប្រវត្តិ)៖ + - [ ] អនុវត្តការសរសេរកូដដោយប្រើArrays និង ទ្រនិចចង្អុល និង គណិតទ្រនិចដើម្បីលោតទៅសន្ទស្សន៍មួយ។ + - [ ] Arrays ទិន្នន័យថ្មីដែលមានអង្គចងចាំបម្រុងទុក - អាចបែងចែកArraysនៅក្រោមក្រណាត់ដោយគ្រាន់តែមិនប្រើលក្ខណៈពិសេសរបស់វា - ចាប់ផ្តើមជាមួយលេខ ១៦ ឬបើលេខចាប់ផ្តើមធំជាងប្រើថាមពល ២ - ១៦, ៣២, ៦៤, ១២៨ - - [] size() - ចំនួនធាតុ - - [] capacity() - ចំនួនធាតុដែលវាអាចផ្ទុកបាន - - [] is_empty() - - [] at(index) - ត្រឡប់ធាតុនៅទីតាំងដែលបានផ្តល់ឱ្យ បេីទីតាំងនៅក្រៅព្រំដែន វានឹង មានកុំហស - - [] push(item) - - [] insert(index, item) - បញ្ចូលធាតុនៅទីតាំង ប្តូរតម្លៃទីតាំង និងធាតុនៅខាងក្រោមទៅខាងស្តាំ - - [] prepend (item) - អាចប្រើបញ្ចូលខាងលើនៅទីតាំង ០ - - [] pop() - ដកចេញពីចុងបញ្ចប់តម្លៃត្រឡប់មកវិញ - - [] delete(index) - លុបធាតុនៅទីតាំងដែលអោយ ផ្លាស់ប្តូរធាតុនៅពីក្រោយទាំងអស់ - - [] remove(item) - រកមើលតម្លៃនិងយកទីតាំងចេញដែលផ្ទុកវាចេញ (ទោះបីជានៅកន្លែងច្រើនក៏ដោយ) - - [] find(item) - រកមើលតម្លៃហើយត្រឡប់វិញនៅទីតាំងដំបូងជាមួយតម្លៃនោះ បើរកមិនឃើញត្រលប់វិញ -1 - - [] resize(new_capacity) // មុខងារឯកជន + - [ ] size() - ចំនួនធាតុ + - [ ] capacity() - ចំនួនធាតុដែលវាអាចផ្ទុកបាន + - [ ] is_empty() + - [ ] at(index) - ត្រឡប់ធាតុនៅទីតាំងដែលបានផ្តល់ឱ្យ បេីទីតាំងនៅក្រៅព្រំដែន វានឹង មានកុំហស + - [ ] push(item) + - [ ] insert(index, item) - បញ្ចូលធាតុនៅទីតាំង ប្តូរតម្លៃទីតាំង និងធាតុនៅខាងក្រោមទៅខាងស្តាំ + - [ ] prepend (item) - អាចប្រើបញ្ចូលខាងលើនៅទីតាំង ០ + - [ ] pop() - ដកចេញពីចុងបញ្ចប់តម្លៃត្រឡប់មកវិញ + - [ ] delete(index) - លុបធាតុនៅទីតាំងដែលអោយ ផ្លាស់ប្តូរធាតុនៅពីក្រោយទាំងអស់ + - [ ] remove(item) - រកមើលតម្លៃនិងយកទីតាំងចេញដែលផ្ទុកវាចេញ (ទោះបីជានៅកន្លែងច្រើនក៏ដោយ) + - [ ] find(item) - រកមើលតម្លៃហើយត្រឡប់វិញនៅទីតាំងដំបូងជាមួយតម្លៃនោះ បើរកមិនឃើញត្រលប់វិញ -1 + - [ ] resize(new_capacity) // មុខងារឯកជន - ពេលទំហំ Array ដល់កំណត់, ផ្លាស់ប្តូរទំហំទ្វេដងទំហំ - នៅពេលដែលចាប់យកវត្ថុមួយ ប្រសិនបើទំហំគឺ 1/4 នៃទំហំសរុប, ផ្លាស់ប្តូរទំហំដល់ពាក់កណ្តាល - - [] ពេលវេលា + - [ ] ពេលវេលា - O(១) ត្រូវបន្ថែម / ដកចេញនៅចុងបញ្ចប់ (សងវិញសម្រាប់ការបែងចែកសម្រាប់ទំហំបន្ថែម) ទីតាំង - O(n) ដើម្បីបញ្ចូល / ដកចេញនៅកន្លែងផ្សេងទៀត - - [] លំហ + - [ ] លំហ - ជាប់ទាក់ទងនឹងការចងចាំដូច្នេះភាពជិតស្និទ្ធជួយដល់ការអនុវត្ត - ទំហំត្រូវការ = (ទំហំ Array, ដែល >= n) * ទំហំនៃធាតុ, ប៉ុន្តែបើទោះបីជា 2n, នៅតែ O (n) --- - ### Linked Lists - - [] ការពិពណ៌នា៖ - - [] [Singly Linked Lists (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) - - [] [CS 61B - Linked Lists ១ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - - [] [CS 61B - Linked Lists ២ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - - [] [កូដ C (វីដេអូ)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) + - [ ] ការពិពណ៌នា៖ + - [ ] [Singly Linked Lists (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [CS 61B - Linked Lists ១ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists ២ (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [កូដ C (វីដេអូ)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - មិនមែនវីដេអូទាំងមូលទេគឺគ្រាន់តែជាផ្នែកអំពីរចនាសម្ព័ន្ធ (Data Structure) និងការបែងចែក Memory ។ - - [] Linked List vs Arrays: + - [ ] Linked List vs Arrays: - [Core Linked Lists Vs Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays) - [នៅក្នុងពិភពពិត Linked Lists Vs Arrays (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays) - - [] [ហេតុអ្វីអ្នកគួរចៀសវាង linked lists (វីដេអូ)](https://www.youtube.com/watch?v=YQs6IC-vgmo) - - [] Gotcha: you need pointer to pointer knowledge: + - [ ] [ហេតុអ្វីអ្នកគួរចៀសវាង linked lists (វីដេអូ)](https://www.youtube.com/watch?v=YQs6IC-vgmo) + - [ ] Gotcha: you need pointer to pointer knowledge:         (សម្រាប់ពេលអ្នកហុច pointer ទៅមុខងារមួយដែលអាចផ្លាស់ប្តូរអាស័យដ្ឋានដែលព្រួញចង្អុល)         ទំព័រនេះគ្រាន់តែដើម្បីស្វែងយល់ពី pointer ទៅ pointer ។ ខ្ញុំមិនណែនាំបញ្ជីឈ្មោះបែបត្រាប់តាមនេះទេ។ ភាពងាយស្រួលក្នុងការអាននិងរក្សាបាននូវភាពលំបាកដោយសារតែភាពឆ្លាតវៃ។ - [Pointer ទៅ pointer](https://www.eskimo.com/~scs/cclass/int/sx8.html) - - [] អនុវត្ត (ខ្ញុំបានធ្វើដោយប្រើទ្រនិចកន្ទុយនិងដោយគ្មាន)៖ - - [] size() - ត្រឡប់ចំនួនធាតុទិន្នន័យក្នុងបញ្ជី - - [] empty() - bool ត្រឡប់ពិតបើទទេ - - [] value_at(index) - ត្រឡប់តម្លៃនៃធាតុទី (ចាប់ផ្តើមពីលេខ ០ ដំបូង) - - [] push_front(តម្លៃ) - បន្ថែមធាតុនៅខាងមុខបញ្ជី - - [] pop_front() - យកធាតុខាងមុខចេញហើយប្រគល់តម្លៃរបស់វាមកវិញ - - [] push_back(តម្លៃ) - បន្ថែមធាតុនៅចុងបញ្ចប់ - - [] pop_back() - យកធាតុបញ្ចប់ហើយត្រឡប់តម្លៃរបស់វា - - [] front() - ទទួលបានតម្លៃនៃធាតុខាងមុខ - - [] back() - ទទួលបានតម្លៃនៃធាតុបញ្ចប់ - - [] insert(index, តម្លៃ) - បញ្ចូលតម្លៃនៅindex ដូច្នេះធាតុបច្ចុប្បន្ននៅindexនោះត្រូវបានចង្អុលទៅធាតុថ្មីនៅindex។ - - [] erase(index) - យក Node ចេញនៅ index ដែលបានផ្តល់ឱ្យ - - [] value_n_from_end(n) - ត្រឡប់តម្លៃ Node ទីពីខាងចុងបញ្ជី - - [] reverse() - បញ្ច្រាស់បញ្ជី - - [] remove_value(តម្លៃ) - លុបធាតុដំបូងក្នុងបញ្ជីជាមួយតម្លៃនេះ - - [] Doubly-linked List + - [ ] អនុវត្ត (ខ្ញុំបានធ្វើដោយប្រើទ្រនិចកន្ទុយនិងដោយគ្មាន)៖ + - [ ] size() - ត្រឡប់ចំនួនធាតុទិន្នន័យក្នុងបញ្ជី + - [ ] empty() - bool ត្រឡប់ពិតបើទទេ + - [ ] value_at(index) - ត្រឡប់តម្លៃនៃធាតុទី (ចាប់ផ្តើមពីលេខ ០ ដំបូង) + - [ ] push_front(តម្លៃ) - បន្ថែមធាតុនៅខាងមុខបញ្ជី + - [ ] pop_front() - យកធាតុខាងមុខចេញហើយប្រគល់តម្លៃរបស់វាមកវិញ + - [ ] push_back(តម្លៃ) - បន្ថែមធាតុនៅចុងបញ្ចប់ + - [ ] pop_back() - យកធាតុបញ្ចប់ហើយត្រឡប់តម្លៃរបស់វា + - [ ] front() - ទទួលបានតម្លៃនៃធាតុខាងមុខ + - [ ] back() - ទទួលបានតម្លៃនៃធាតុបញ្ចប់ + - [ ] insert(index, តម្លៃ) - បញ្ចូលតម្លៃនៅindex ដូច្នេះធាតុបច្ចុប្បន្ននៅindexនោះត្រូវបានចង្អុលទៅធាតុថ្មីនៅindex។ + - [ ] erase(index) - យក Node ចេញនៅ index ដែលបានផ្តល់ឱ្យ + - [ ] value_n_from_end(n) - ត្រឡប់តម្លៃ Node ទីពីខាងចុងបញ្ជី + - [ ] reverse() - បញ្ច្រាស់បញ្ជី + - [ ] remove_value(តម្លៃ) - លុបធាតុដំបូងក្នុងបញ្ជីជាមួយតម្លៃនេះ + - [ ] Doubly-linked List - [ការពិពណ៌នា (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/jpGKD/doubly-linked-lists) - មិនចាំបាច់អនុវត្តទេ --- - ### Stack - - [] [Stack (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) - - [] [ការប្រើ Stack ចូលមុនចេញក្រោយ (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - - [] នឹងមិនអនុវត្តទេ។ ការអនុវត្តជាមួយ Array គឺមិនសំខាន់។ + - [ ] [Stack (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [ការប្រើ Stack ចូលមុនចេញក្រោយ (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) + - [ ] នឹងមិនអនុវត្តទេ។ ការអនុវត្តជាមួយ Array គឺមិនសំខាន់។ - ### Queue - - [] [ការប្រើ Queue ចូលមុនចេញមុន(វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - - [] [Queue (វីដេអូ)](https://www.coursera.org/lecture/data-structures/queues-EShpq) -    - [] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) -    - [] [Queue អាទិភាព (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) -    - [] ប្រើ linked-list ដែលមានភ្ជាប់ជាមួយទ្រនិចនៅកន្ទុយ៖ + - [ ] [ការប្រើ Queue ចូលមុនចេញមុន(វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) + - [ ] [Queue (វីដេអូ)](https://www.coursera.org/lecture/data-structures/queues-EShpq) +    - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) +    - [ ] [Queue អាទិភាព (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) +    - [ ] ប្រើ linked-list ដែលមានភ្ជាប់ជាមួយទ្រនិចនៅកន្ទុយ៖ - enqueue(តម្លៃ) - បន្ថែមតម្លៃនៅទីតាំងនៅកន្ទុយ - dequeue() - ត្រឡប់តម្លៃនិងយកធាតុដែលបានបន្ថែមថ្មីៗចេញ (ផ្នែកខាងមុខ) - empty() -    - [] អនុវត្តដោយប្រើអារេ Array ទំហំថេរ៖ +    - [ ] អនុវត្តដោយប្រើអារេ Array ទំហំថេរ៖ - enqueue(តម្លៃ) - បន្ថែមធាតុនៅចុងបញ្ចប់នៃការផ្ទុកដែលមាន - dequeue() - ត្រឡប់តម្លៃនិងយកធាតុដែលបានបន្ថែមថ្មីៗចេញ - empty() - full() -    - [] ថ្លៃ៖ +    - [ ] ថ្លៃ៖ - ការអនុវត្តមិនល្អដោយប្រើlinked listដែលអ្នករៀបជាជួរនៅនឹងក្បាលនិងដេស្កាយនៅកន្ទុយប្រហែលជា O(n)             ដោយសារតែអ្នកត្រូវការនៅជាប់នឹងធាតុចុងក្រោយ, បណ្តាលឱ្យ dequeue គ្នាឆ្លងកាត់ពេញលេញ - enqueue: O(1) (amortized, linked list and array [probing]) @@ -598,27 +598,27 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - empty: O(1) (linked list and array) - ### តារាងហាស (Hash table) - - [] វីដេអូ៖ - - [] [Hashing with Chaining (វីដេអូ)](https://www.youtube.com/watch?v=0M_kIqwbFo&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: វចនានុក្រមដ៏អស្ចារ្យ (វីដេអូ)](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) + - [ ] វីដេអូ៖ + - [ ] [Hashing with Chaining (វីដេអូ)](https://www.youtube.com/watch?v=0M_kIqwbFo&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: វចនានុក្រមដ៏អស្ចារ្យ (វីដេអូ)](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) - - [] វគ្គសិក្សាអនឡាញ៖ - - [] [ស្វែងយល់អំពីមុខងារ Hash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - - [] [ការប្រើតារាងHash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - - [] [គាំទ្រ Hash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_04- ឧបត្ថម្ភគាំទ្រហាន់ឌ្រី) - - [] [តារាងជំនួយភាសា Hash(វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - - [] [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/4) - - [] [បញ្ហាសៀវភៅទូរស័ព្ទ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) + - [ ] វគ្គសិក្សាអនឡាញ៖ + - [ ] [ស្វែងយល់អំពីមុខងារ Hash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [ការប្រើតារាងHash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [គាំទ្រ Hash (វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_04- ឧបត្ថម្ភគាំទ្រហាន់ឌ្រី) + - [ ] [តារាងជំនួយភាសា Hash(វីដេអូ)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [ ] [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/4) + - [ ] [បញ្ហាសៀវភៅទូរស័ព្ទ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) - [តារាងចែកចាយ] - [ការផ្ទុកឡើងភ្លាមៗនិងការបង្កើនប្រសិទ្ធភាពផ្ទុកនៅក្នុងប្រអប់ឯកសារ (វីដេអូ)](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 គឺជាទំហំនៃតារាង hash - add(key, value) - ប្រសិនបើមានកូនសោររួចហើយ, ធ្វើបច្ចុប្បន្នភាពតម្លៃ - exists(key) @@ -631,36 +631,90 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ ## ចំណេះដឹងបន្ថែម - ### Binary search - - [] [Binary search (វីដេអូ)](https://www.youtube.com/watch?v=D5SrAga1pno) - - [] [Binary search (វីដេអូ)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) - - [] [លម្អិត](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/) - - [] អនុវត្ត៖ + - [ ] [Binary search (វីដេអូ)](https://www.youtube.com/watch?v=D5SrAga1pno) + - [ ] [Binary search (វីដេអូ)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) + - [ ] [លម្អិត](https://www.topcoder.com/community/competitive-programming/tutorials/binary-search/) + - [ ] អនុវត្ត៖ - Binary search (នៅលើជួរអារេនៃចំនួនគត់) - Binary search ដោយប្រើការហៅខ្លួនឯង - ### ប្រតិបតិ្តការ Bitwise - - [] [សន្លឹកជំនួយ Bits](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) + - [ ] [សន្លឹកជំនួយ Bits](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - អ្នកគួរតែស្គាល់ អំណាច ២ ពី (២ ^ ១ ដល់ ២ ^ ១៦ និង ២ ^ ៣២) - - [] ទទួលបានការយល់ដឹងដ៏ល្អអំពីការរៀបចំBitsជាមួយ៖ &, |, ^, ~, >>, << - - [] [ពាក្យ](https://en.wikipedia.org/wiki/Word_ (computer_architecture)) - - [] ការណែនាំល្អ៖ + - [ ] ទទួលបានការយល់ដឹងដ៏ល្អអំពីការរៀបចំBitsជាមួយ៖ &, |, ^, ~, >>, << + - [ ] [ពាក្យ](https://en.wikipedia.org/wiki/Word_ (computer_architecture)) + - [ ] ការណែនាំល្អ៖             ការធ្វើចលនាBits (វីដេអូ)](https://www.youtube.com/watch?v=7jkIUgLC29I) - - [] [C ការបង្រៀនសរសេរកម្មវិធី ២-១០: ប្រតិបត្តិការ Bitwise (វីដេអូ)](https://www.youtube.com/watch?v=d0AwjSpNXR0) - - [] [ការរៀបចំBits](https://en.wikipedia.org/wiki/Bit_manipulation) -  - [] [ប្រតិបតិ្តការ Bitwise](https://en.wikipedia.org/wiki/Bitwise_operation) - - [] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) - - [] [The Bit Twiddler](https://bits.stephan-brumme.com/) - - [] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) - - [] [Bit Hacks (វីដេអូ)](https://www.youtube.com/watch?v=ZusiKXcz_ac) - - [] 2s និង 1s បំពេញបន្ថែម + - [ ] [C ការបង្រៀនសរសេរកម្មវិធី ២-១០: ប្រតិបត្តិការ Bitwise (វីដេអូ)](https://www.youtube.com/watch?v=d0AwjSpNXR0) + - [ ] [ការរៀបចំBits](https://en.wikipedia.org/wiki/Bit_manipulation) +  - [ ] [ប្រតិបតិ្តការ Bitwise](https://en.wikipedia.org/wiki/Bitwise_operation) + - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) + - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) + - [ ] [Bit Hacks (វីដេអូ)](https://www.youtube.com/watch?v=ZusiKXcz_ac) + - [ ] 2s និង 1s បំពេញបន្ថែម - [Binary: Plusses & Minuses (ហេតុអ្វីយើងប្រើសមពីរ) (វីដេអូ)](https://www.youtube.com/watch?v=lKTsv6iVxV4) - [១s បំពេញ](https://en.wikipedia.org/wiki/Ones%27_complement) - [២ វិនាទីបំពេញ](https://en.wikipedia.org/wiki/Two%27s_complement) - - [] រាប់សំណុំ bits + - [ ] រាប់សំណុំ bits - [វិធី ៤ យ៉ាងដើម្បីរាប់ប៊ីតជាសាមសិបប៊ីត (វីដេអូ)](https://youtu.be/Hzuzo9NJrlc) - [រាប់ប៊ីត](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) - [របៀបរាប់ចំនួនសំណុំប៊ីតក្នុងចំនួនគត់ ៣២ ប៊ីត](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit- ចំនួនគត់) - - [] ប្តូរតម្លៃ + - [ ] ប្តូរតម្លៃ - [ប្តូរ](https://bits.stephan-brumme.com/swap.html) - - [] តម្លៃដាច់ខាត: + - [ ] តម្លៃដាច់ខាត: - [អាំងតេក្រាលពេញលេញ](https://bits.stephan-brumme.com/absInteger.html) + +--- + +## Trees + +- ### Trees - កំណត់ត្រា និង ព័ត៌មាន + - [ ] [ស៊េរី៖ ចំនុចសំខាន់ Trees (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) + - [ ] [ស៊េរី៖ Trees (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) + - ការសាងសង់ tree + - ការឆ្លងកាត់ tree + - ក្បួនដោះស្រាយ + - [ ] [BFS(breadth-first search) និង DFS(depth-first search) (វីដេអូ)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - កំណត់សំគាល់របស់ BFS: + - level order (BFS, ដោយប្រេី queue) + - ភាពស្មុគស្មាញពេលវេលា: O(n) + - ភាពស្មុគស្មាញនៃលំហ: ល្អបំផុត៖ O(1), អាក្រក់បំផុត៖ O(n/2)=O(n) + - DFS notes: + - ភាពស្មុគស្មាញពេលវេលា: O(n) + - ភាពស្មុគស្មាញនៃលំហ: + ល្អបំផុត៖ O(log n) - មធ្យមកម្ពស់ tree + អាក្រក់បំផុត៖ O(n) + - inorder (DFS: ឆ្វេង, ខ្លួនឯង, ស្តាំ) + - postorder (DFS: ឆ្វេង, ស្តាំ, ខ្លួនឯង) + - preorder (DFS: self, left, right) + +- ### Binary search trees: BSTs + - [ ] [ការពិនិត្យឡើងវិញ Binary Search Tree (វីដេអូ)](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 - ការអនុវត្តក្នុង C/C++ (វីដេអូ)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) + - [ ] [BST ការអនុវត្តក្នុង - ការបែងចែក memory ក្នុង stack និង heap (វីដេអូ)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) + - [ ] [ស្វែងរកធាតុតូចបំផុត និង ធំបំផុតនៅក្នុង binary search tree (វីដេអូ)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [រកកំពស់ binary tree (វីដេអូ)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) + - [ ] [Binary tree traversal - យុទ្ធសាស្ត្រ breadth-first និង depth-first (វីដេអូ)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32) + - [ ] [Binary tree: Level Order Traversal (វីដេអូ)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Binary tree traversal: Preorder, Inorder, Postorder (វីដេអូ)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [ពិនិត្យមើលថាតើ binary tree គឺ binary search tree រឺទេ (វីដេអូ)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [លុបធាតុពី Binary Search Tree (វីដេអូ)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) + - [ ] [Inorder Successor ក្នុង binary search tree មួយ (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] ការអនុវត្ត: + - [ ] insert // ដាក់ធាតុក្នុង tree + - [ ] get_node_count // ទទួលចំនួនធាតុដែលផ្ទុក + - [ ] print_values // បង្ហាញតម្លៃក្នុង tree, ពី តូច ទៅ ធំ + - [ ] delete_tree + - [ ] is_in_tree // ត្រឡប់វិញ ពិត ប្រសិនបេីតម្លៃក្នុង tree + - [ ] get_height // ត្រឡប់វិញ កំពស់ក្នុង nodes (កំពស់ single node គឺ 1) + - [ ] get_min // ត្រឡប់វិញ ធាតុតូចជាងគេ + - [ ] get_max // ត្រឡប់វិញ ធាតុធំជាងគេ + - [ ] is_binary_search_tree + - [ ] delete_value + - [ ] get_successor // ត្រឡប់តម្លៃខ្ពស់បំផុតបន្ទាប់នៅក្នុងtreeបន្ទាប់ពីតម្លៃដែលបានផ្ដល់ ៕ បើគ្មានត្រឡប់ -1 From dc4715f8f54ee842fc4dde1912ede5ad5be9da1a Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Sat, 16 May 2020 12:17:22 -0500 Subject: [PATCH 204/263] Update README-kh.md Khmer Translation: Heap / Priority Queue / Binary Heap --- translations/README-kh.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index a2b4fd1..a203ffc 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -718,3 +718,32 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - [ ] is_binary_search_tree - [ ] delete_value - [ ] get_successor // ត្រឡប់តម្លៃខ្ពស់បំផុតបន្ទាប់នៅក្នុងtreeបន្ទាប់ពីតម្លៃដែលបានផ្ដល់ ៕ បើគ្មានត្រឡប់ -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)) + - [ ] [សេចក្តីផ្តើម (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) + - [ ] [ការអនុវត្តដំបូង (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) + - [ ] [Binary Trees (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) + - [ ] [កំពស់ Tree (វីដេអូ)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) + - [ ] [ប្រតិបត្តិការមូលដ្ឋាន (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) + - [ ] [Binary Trees ពេញលេញ (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) + - [ ] [Pseudocode (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) + - [ ] [Heap Sort - លោតដើម្បីចាប់ផ្ដើម (វីដេអូ)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) + - [ ] [Heap Sort (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) + - [ ] [ការកសាង heap (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) + - [ ] [MIT: Heaps និង Heap Sort (វីដេអូ)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [CS 61B មេរៀន 24: Priority Queues (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] ការអនុវត្ត max-heap: + - [ ] insert + - [ ] sift_up - ត្រូវការសំរាប់បញ្ចូល + - [ ] get_max - ត្រឡប់ធាតុអតិបរិមាដោយមិនយកវាចេញ + - [ ] get_size() - ត្រឡប់ចំនួននៃធាតុដែលបានរក្សាទុក + - [ ] is_empty() - ត្រឡប់ពិតប្រសិនបើ heap មិនមានធាតុ + - [ ] extract_max - ត្រឡប់ធាតុអតិបរិមាយកវាចេញ + - [ ] sift_down - ត្រូវការសំរាប់ extract_max + - [ ] remove(i) - យកធាតុចេញនៅ index x + - [ ] heapify - បង្កើតheap ពីធាតុជាច្រើនដែលត្រូវការសម្រាប់ heap_sort + - [ ] heap_sort() - យកarray ដែលមិនបានតម្រៀបហើយប្រែក្លាយវាទៅជាកន្លែងដែលបានតម្រៀបតាមកន្លែងដោយប្រើheapអតិបរមា។ t + - ចំណាំ៖ ការប្រើ heap តូច ជំនួសនឹងជួយសន្សំប្រតិបត្តិការ ប៉ុន្តែត្រូវការទំហំទ្វេដង (មិនអាចធ្វើនៅនឹងកន្លែង) ។ From 484a8ca5c4f550ce948e3a4051645f83709dfa1d Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 16 May 2020 11:16:41 -0700 Subject: [PATCH 205/263] Fixed Khan Academy link. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index da4bfa7..26f512d 100644 --- a/README.md +++ b/README.md @@ -1084,7 +1084,7 @@ Graphs can be used to represent many problems in computer science, so this secti - ### Networking - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - otherwise, this is just good to know - - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org) - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) From 901c7bfc0578bb90559e89a781b77652f1228dfa Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Fri, 22 May 2020 07:16:22 -0500 Subject: [PATCH 206/263] Khmer Translation: sort --- translations/README-kh.md | 77 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index a203ffc..72895f1 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -747,3 +747,80 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ - [ ] heapify - បង្កើតheap ពីធាតុជាច្រើនដែលត្រូវការសម្រាប់ heap_sort - [ ] heap_sort() - យកarray ដែលមិនបានតម្រៀបហើយប្រែក្លាយវាទៅជាកន្លែងដែលបានតម្រៀបតាមកន្លែងដោយប្រើheapអតិបរមា។ t - ចំណាំ៖ ការប្រើ heap តូច ជំនួសនឹងជួយសន្សំប្រតិបត្តិការ ប៉ុន្តែត្រូវការទំហំទ្វេដង (មិនអាចធ្វើនៅនឹងកន្លែង) ។ + +--- + +## Sorting + +- [ ] កំណត់សំគាល់: + - អនុវត្ត sorts និងដឹងពីករណីដែលល្អ និង ដែលអាក្រក់, ភាពស្មុគស្មាញជាមធ្យមនីមួយៗ: + - កុំប្រេី bubble sort - វាមិនល្អ - O(n^2), លុះត្រាតែ n <= 16 + - [ ] ស្ថេរភាពក្នុងក្បួនដោះស្រាយ sorting ("តើ Quicksort មានស្ថេរភាពឬ?") + - [ស្ថេរភាពក្នុងក្បួនដោះស្រាយ Sorting](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) + - [ស្ថេរភាពក្នុងក្បួនដោះស្រាយ Sorting](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) + - [ស្ថេរភាពក្នុងក្បួនដោះស្រាយ Sorting](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/) + - [ស្ថេរភាពក្នុងក្បួនដោះស្រាយ Sorting](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf) + - [ ] តើក្បួនដោះស្រាយអ្វីខ្លះអាចត្រូវបានប្រើ linked lists? អាចត្រូវបានប្រើ arrays? អាចត្រូវបានប្រើទាំងពីរ? + - ខ្ញុំនឹងមិនណែនាំឱ្យ Sort ជាមួយ linked list ប៉ុន្តែអាចប្រេី Merge Sort។ + - [Merge Sort សំរាប់ Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) + +- សំរាប់ heapsort, សូមមេីល Heap data structure ខាងលេី. Heap sort គឺល្អ, ប៉ុន្តែមិនមានស្ថេរភាពទេ. + +- [ ] [Sedgewick - Mergesort (5 វីដេអូ)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. ភាពស្មុគស្មាញ Sorting](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. ប្រៀបធៀប](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. ស្ថេរភាព](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) + +- [ ] [Sedgewick - Quicksort (4 វីដេអូរ)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Keys ស្ទួន](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. Sorts ជាប្រព័ន្ធ](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) + +- [ ] UC Berkeley: + - [ ] [CS 61B មេរៀនទី 29: Sorting I (វីដេអូរ)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B មេរៀនទី 30: Sorting II (វីដេអូរ)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B មេរៀនទី 32: Sorting III (វីដេអូរ)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B មេរៀនទី 33: Sorting V (វីដេអូរ)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + +- [ ] [Bubble Sort (វីដេអូរ)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [វិភាគ Bubble Sort (វីដេអូរ)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [Insertion Sort, Merge Sort (វីដេអូរ)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [Insertion Sort (វីដេអូរ)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [Merge Sort (វីដេអូរ)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [Quicksort (វីដេអូរ)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [Selection Sort (វីដេអូរ)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) + +- [ ] កូដ Merge sort: + - [ ] [ការប្រើប្រាស់ output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [ការប្រើប្រាស់ output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] កូដ Quick sort: + - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + +- [ ] អនុវត្ត: + - [ ] Mergesort: O(n log n) ករណីមធ្យម និង អាក្រក់បំផុត + - [ ] Quicksort O(n log n) ករណីមធ្យម + - Selection sort និង insertion sort ទាំងពីរគឺ O(n^2) សំរាប់ករណីមធ្យម និង អាក្រក់បំផុត + - ចំពោះ heapsort, សូមមេីល Heap data structure ខាងលេី. + +- [ ] មិនចាំបាច់ទេ ប៉ុន្តែខ្ញុំសូមណែនាំពួកគេ: + - [ ] [Sedgewick - Radix Sorts (6 វីដេអូរ)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings ក្នុង Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. ការរាប់ Key Indexed](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. តម្រៀបខ្ទង់អក្សរដំបូងដែលមានខ្ទង់តិចបំផុត Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. វិធី ៣ Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Radix Sort](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) + - [ ] [Radix Sort (វីដេអូរ)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [Radix Sort, Counting Sort (linear time given constraints) (វីដេអូរ)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (វីដេអូរ)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Sorting in Linear Time (វីដេអូរ)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) + +ជាការសង្ខេបនេះគឺជាការបង្ហាញជាក់ស្តែងនៃ [១៥ វិធីដោះស្រាយ Sorting](https://www.youtube.com/watch?v=kPRA0W1kECg) ។ +ប្រសិនបើអ្នកត្រូវការព័ត៌មានលម្អិតបន្ថែមលើប្រធានបទនេះសូមមើលផ្នែក "Sorting" នៅក្នុង [ព័ត៌មានលំអិតលើប្រធានបទមួយចំនួន](#additional-detail-on-some-subjects) From 6817e6aac06dad0f087098c374052cc90e4a2cf1 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Fri, 22 May 2020 09:05:12 -0500 Subject: [PATCH 207/263] Khmer translation: Graph --- translations/README-kh.md | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index 72895f1..f59a0d6 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -824,3 +824,65 @@ Data Structure ទាំងអស់ដែលខ្ញុំធ្លាប់ ជាការសង្ខេបនេះគឺជាការបង្ហាញជាក់ស្តែងនៃ [១៥ វិធីដោះស្រាយ Sorting](https://www.youtube.com/watch?v=kPRA0W1kECg) ។ ប្រសិនបើអ្នកត្រូវការព័ត៌មានលម្អិតបន្ថែមលើប្រធានបទនេះសូមមើលផ្នែក "Sorting" នៅក្នុង [ព័ត៌មានលំអិតលើប្រធានបទមួយចំនួន](#additional-detail-on-some-subjects) + +--- + +## Graphs + +Graphs អាចត្រូវបានប្រើដើម្បីបង្ហាញពីបញ្ហាជាច្រើននៅក្នុងវិទ្យាសាស្ត្រកុំព្យូទ័រ ដូចជា Trees និង Sorting។ + +- កំណត់ចំណាំ: + -  មានវិធីជាមូលដ្ឋានចំនួន ៤ ដើម្បីតំណាង graph ក្នុង memory: + - objects និង pointers + - adjacency matrix + - adjacency list + - adjacency map + - ស្គាល់ខ្លួនឯងជាមួយនឹង Graphs និង គុណសម្បត្តិនិងគុណវិបត្តិរបស់វា + - BFS និង DFS - ដឹងពីភាពស្មុគស្មាញក្នុងការគណនាការជួញដូររបស់ពួកគេ និង វិធីអនុវត្តកូដពិតប្រាកដ + - នៅពេលសួរសំណួរសូមស្វែងរកដំណោះស្រាយដែលមានមូលដ្ឋានលើ Graphs ជាមុនសិនបន្ទាប់មកបន្តទៅមុខទៀតប្រសិនបើគ្មាន។ + +- [ ] MIT(វីដេអូ): + - [ ] [ការស្វែងរក Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - [ ] [ការស្វែងរក Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + +- [ ] ការបង្រៀន Skiena - ការណែនាំ: + - [ ] [CSE373 2012 - មេរៀនទី 11 - Graph Data Structures (វីដេអូ)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) + - [ ] [CSE373 2012 - មេរៀនទី 12 - Breadth-First Search (វីដេអូ)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) + - [ ] [CSE373 2012 - មេរៀនទី 13 - Graph Algorithms (វីដេអូ)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) + - [ ] [CSE373 2012 - មេរៀនទី 14 - Graph Algorithms (បន្ត) (វីដេអូ)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - មេរៀនទី 15 - Graph Algorithms (បន្ត 2) (វីដេអូ)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - មេរៀនទី 16 - Graph Algorithms (បន្ត 3) (វីដេអូ)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + +- [ ] Graphs (ពិនិត្យឡើងវិញ និង ច្រើនទៀត): + + - [ ] [6.006 Single-Source Shortest Paths Problem (វីដេអូ)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Dijkstra (វីដេអូ)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Bellman-Ford (វីដេអូ)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 Speeding Up Dijkstra (វីដេអូ)](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 - មេរៀនទី 6 (វីដេអូ)]( 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 - មេរៀនទី 7 (វីដេអូ)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni: Graph Algorithms III: Shortest Path - មេរៀនទី 8 (វីដេអូ)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - មេរៀនទី 9 (វីដេអូ)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] ~~[CS 61B 2014 (starting at 58:09) (វីដេអូ)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)~~ + - [ ] [CS 61B 2014: Weighted graphs (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [Greedy Algorithms: Minimum Spanning Tree (វីដេអូ)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (វីដេអូ)](https://www.youtube.com/watch?v=RpgcYiky7uw) + +- វគ្គសិក្សា Coursera: + - [ ] [Algorithms on Graphs (វីដេអូ)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) + +- ខ្ញុំនឹងអនុវត្ត: + - [ ] DFS ជាមួយ adjacency list (recursive) + - [ ] DFS ជាមួយ adjacency list (iterative with stack) + - [ ] DFS ជាមួយ adjacency matrix (recursive) + - [ ] DFS ជាមួយ adjacency matrix (iterative with stack) + - [ ] BFS ជាមួយ adjacency list + - [ ] BFS ជាមួយ adjacency matrix + - [ ] single-source shortest path (Dijkstra) + - [ ] minimum spanning tree + - DFS-based algorithms (សូមមេីល Aduni វីដេអូ ខាងលេី): + - [ ] ពិនិត្យ cycle (ត្រូវការសំរាប់ topological sort ព្រោះយើងនឹងពិនិត្យមើលវដ្តមុនពេលចាប់ផ្តើម) + - [ ] topological sort + - [ ] រាប់សមាសធាតុដែលបានភ្ជាប់នៅក្នុងក្រាហ្វ + - [ ] រាយសមាសធាតុដែលភ្ជាប់គ្នាយ៉ាងខ្លាំង + - [ ] ពិនិត្យក្រាហ្វិច bipartite From 0b6e62be550ac65f986d9b18edbd49463d80ff0c Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Fri, 22 May 2020 12:26:16 -0500 Subject: [PATCH 208/263] Khmer Translation: Recursion and Dynamic Programming --- translations/README-kh.md | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index f59a0d6..dcbee57 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -886,3 +886,45 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - [ ] រាប់សមាសធាតុដែលបានភ្ជាប់នៅក្នុងក្រាហ្វ - [ ] រាយសមាសធាតុដែលភ្ជាប់គ្នាយ៉ាងខ្លាំង - [ ] ពិនិត្យក្រាហ្វិច bipartite + +--- + +## Even More Knowledge +## ចំណេះដឹងបន្ធែម + +- ### Recursion + - [ ] ការបង្រៀនរបស់ Stanford លេី recursion និង backtracking: + - [ ] [មេរៀនទី 8 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] [មេរៀនទី 9 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) + - [ ] [មេរៀនទី 10 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [មេរៀនទី 11 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) + - នៅពេលដែលសមរម្យដើម្បីប្រើវា + - តេី tail recursion ប្រសើរជាងអត់? + - [ ] [អ្វីជា Tail Recursion និង ហេតុអ្វីបានជាវាអាក្រក់?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) + - [ ] [Tail Recursion (វីដេអូ)](https://www.youtube.com/watch?v=L1jjXGfxozc) + +- ### Dynamic Programming + - អ្នកប្រហែលជាមិនឃើញមានបញ្ហានៃការសរសេរកម្មវិធី dynamic programming នៅក្នុងបទសម្ភាសន៍របស់អ្នកទេ ប៉ុន្តែវាសមនឹងទទួលបានការទទួលស្គាល់នូវបញ្ហាមួយក្នុងនាមជាបេក្ខជនសម្រាប់ការសរសេរកម្មវិធី dynamic programming។ + - ប្រធានបទនេះអាចជាការពិបាកណាស់, ព្រោះថាបញ្ហារបស់ DP នីមួយៗត្រូវបានកំណត់ថាជាការទាក់ទងគ្នា + - ខ្ញុំស្នើឱ្យក្រឡេកមើលឧទាហរណ៍ជាច្រើននៃបញ្ហា DP រហូតទាល់តែអ្នកមានការយល់ដឹងច្បាស់អំពីគំរូដែលពាក់ព័ន្ធ។ + - [ ] វីដេអូ: + - វីដេអូ Skiena អាចពិបាកធ្វើតាមព្រោះពេលខ្លះគាត់ប្រើក្តារខៀនដែលវាមើលមិនឃើញ + - [ ] [Skiena: CSE373 2012 - មេរៀនទី 19 - ការណែនាំអំពី Dynamic Programming (វីដេអូ)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) + - [ ] [Skiena: CSE373 2012 - មេរៀនទី 20 - Edit Distance (video)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) + - [ ] [Skiena: CSE373 2012 - មេរៀនទី 21 - ឧទាហរណ៍ Dynamic Programming (វីដេអូ)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena: CSE373 2012 - មេរៀនទី 22 - ការអនុវត្តកម្មវិធី Dynamic Programming (វីដេអូ)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Simonson: Dynamic Programming 0 (ចាប់ផ្តេីមពី 59:18) (វីដេអូ)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson: Dynamic Programming I - មេរៀនទី 11 (វីដេអូ)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: Dynamic programming II - មេរៀនទី 12 (វីដេអូ)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] បញ្ជីបញ្ហារបស់ DP (នីមួយៗខ្លី): + [Dynamic Programming (វីដេអូ)](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: + - [ ] [បញ្ហា RNA secondary structure (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) + - [ ] [A dynamic programming algorithm (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) + - [ ] [បង្ហាញរូបភាពពីវិធីដោះស្រាយ DP (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [ពេលវេលាដំណើរការនៃ DP algorithm (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) + - [ ] [DP vs. recursive implementation (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) + - [ ] [Global pairwise sequence alignment (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) + - [ ] [Local pairwise sequence alignment (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) From 91517036bcd049439700365254c8e36f6a6e8da9 Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 23 May 2020 10:23:57 -0700 Subject: [PATCH 209/263] Removed dead link. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 8271b95..e0c2e81 100644 --- a/README.md +++ b/README.md @@ -241,7 +241,6 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) - [ ] 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) From 5a0040e9fbf84a28ee18476ad64cc725f2f0941f Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 8 Jun 2020 17:17:24 -0700 Subject: [PATCH 210/263] Update coursera link in Series: Trees (video) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e0c2e81..5198f4c 100644 --- a/README.md +++ b/README.md @@ -656,7 +656,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### 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) + - [ ] [Series: Trees (video)](https://www.coursera.org/lecture/data-structures/trees-95qda) - basic tree construction - traversal - manipulation algorithms From 231ed913ebd994a606c407f6ef2c969f4ea8e36a Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 8 Jun 2020 17:29:14 -0700 Subject: [PATCH 211/263] Update additional coursera links --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 5198f4c..8758205 100644 --- a/README.md +++ b/README.md @@ -494,11 +494,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### Arrays - Implement an automatically resizing vector. - [ ] Description: - - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [Arrays (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Dynamic Arrays (video)](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) @@ -530,14 +530,14 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### Linked Lists - [ ] Description: - - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [Singly Linked Lists (video)](https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK) - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [ ] [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) + - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) + - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) - [ ] [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) @@ -559,11 +559,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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) + - [Description (video)](https://www.coursera.org/lecture/data-structures/doubly-linked-lists-jpGKD) - No need to implement - ### Stack - - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ) - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] Will not implement. Implementing with array is trivial. @@ -602,9 +602,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - - [ ] [Core Hash Tables (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) + - [ ] [Core Hash Tables (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-hash-tables-m7UuP) - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/4) - - [ ] [Phone Book Problem (video)](https://www.coursera.org/learn/data-structures/lecture/NYZZP/phone-book-problem) + - [ ] [Phone Book Problem (video)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP) - [ ] 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) @@ -655,7 +655,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Trees - ### Trees - Notes & Background - - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) + - [ ] [Series: Core Trees (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-trees-ovovP) - [ ] [Series: Trees (video)](https://www.coursera.org/lecture/data-structures/trees-95qda) - basic tree construction - traversal From 0e96a8bcc27f21fd11442f0e82ec34fe43b09fd0 Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 8 Jun 2020 17:37:03 -0700 Subject: [PATCH 212/263] Update coursera links for distributed hash tables --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8758205..9caecbd 100644 --- a/README.md +++ b/README.md @@ -606,8 +606,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/4) - [ ] [Phone Book Problem (video)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP) - [ ] 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) + - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/lecture/data-structures/instant-uploads-and-storage-optimization-in-dropbox-DvaIb) + - [Distributed Hash Tables (video)](https://www.coursera.org/lecture/data-structures/distributed-hash-tables-tvH8H) - [ ] implement with array using linear probing - hash(k, m) - m is size of hash table From af885651db572295328726244fbb769935e932b1 Mon Sep 17 00:00:00 2001 From: mikeburnsdev Date: Sun, 28 Jun 2020 21:27:13 -0400 Subject: [PATCH 213/263] Added a Practice Operations link to Bitwise operations section --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9caecbd..011ac47 100644 --- a/README.md +++ b/README.md @@ -639,6 +639,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) - [ ] [Bit Hacks (video)](https://www.youtube.com/watch?v=ZusiKXcz_ac) + - [ ] [Practice Operations](https://pconrad.github.io/old_pconrad_cs16/topics/bitOps/) - [ ] 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) From 536da358a1aae3dbac3b4b26be8c7ddd7d7fcac6 Mon Sep 17 00:00:00 2001 From: flyotlin Date: Tue, 30 Jun 2020 09:39:34 +0800 Subject: [PATCH 214/263] 2020/06/30 Almost done --- translations/README-tw.md | 1213 ++++++++++++++++---------------- tw_translation_progress_log.md | 13 +- 2 files changed, 603 insertions(+), 623 deletions(-) mode change 100755 => 100644 translations/README-tw.md diff --git a/translations/README-tw.md b/translations/README-tw.md old mode 100755 new mode 100644 index 2e2da77..ad76538 --- a/translations/README-tw.md +++ b/translations/README-tw.md @@ -72,108 +72,107 @@ - [這份清單沒有包含的內容](#這份清單沒有包含的內容) - [先備知識](#先備知識) - [每日計畫](#每日計畫) -- [演算法複雜度(Algorithmic complexity) / Big-O / 漸進分析(Asymptotic analysis)](#演算法複雜度(Algorithmic-complexity)--Big-O--漸進分析(Asymptotic-analysis)) +- [演算法複雜度 / Big-O / 漸進分析](#演算法複雜度(Algorithmic-complexity)--Big-O--漸進分析(Asymptotic-analysis)) - [資料結構](#資料結構) - - [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) + - [Stack](#Stack(堆疊)) + - [Queue](#Queue(佇列)) + - [Hash table](#Hash-table(雜湊表)) +- [更多](#更多) + - [二分搜尋法](#二分搜尋法(Binary-Search)) + - [位元運算](#位元運算(Bitwise-operations)) +- [樹狀結構(Tree)](#樹狀結構(Tree)) + - [Trees-重點與背景知識](#Trees-重點與背景知識) + - [二元搜尋樹](#二元搜尋樹Binary-search-trees:-BSTs) - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) - - balanced search trees (general concept, not details) - - traversals: preorder, inorder, postorder, BFS, DFS + - 平衡搜尋樹(基本概念,非細節) + - 遍歷:前序、中序、後序、BFS、DFS - [排序](#排序) - - selection - - insertion - - heapsort - - quicksort - - merge sort -- [Graphs](#graphs) - - directed - - undirected + - 選擇排序 + - 插入排序 + - 堆積排序 + - 快速排序 + - 合併排序 +- [圖](#圖) + - 有向圖 + - 無向圖 - adjacency matrix - adjacency list - - traversals: BFS, DFS -- [Even More Knowledge](#even-more-knowledge) - - [Recursion](#recursion) - - [Dynamic Programming](#dynamic-programming) - - [Object-Oriented Programming](#object-oriented-programming) - - [Design Patterns](#design-patterns) - - [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) + - 遍歷: 廣度優先(BFS), 深度優先(DFS) +- [更多知識](#更多知識) + - [遞迴](#遞迴Recursion) + - [動態規劃](#動態規劃) + - [物件導向程式設計](#物件導向程式設計) + - [設計模式](#設計模式) + - [組合數&機率](#組合數&機率) + - [NP、NP-Complete以及近似演算法](#NP、NP-Complete以及近似演算法) + - [快取(cache)](#快取(cache)) + - [程序與執行緒](#程序與執行緒(Processes&Threads)) - [Testing](#testing) - - [Scheduling](#scheduling) - - [String searching & manipulations](#string-searching--manipulations) - - [Tries](#tries) - - [Floating Point Numbers](#floating-point-numbers) + - [排程](#排程Scheduling) + - [字串搜尋演算法以及操作](#字串搜尋演算法以及操作) + - [字典樹](#字典樹(Tries)) + - [浮點數](#浮點數) - [Unicode](#unicode) - - [Endianness](#endianness) - - [Networking](#networking) -- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (if you have 4+ years experience) -- [Final Review](#final-review) -- [Coding Question Practice](#coding-question-practice) -- [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) + - [端序](#端序(Endianness)) + - [網路](#網路) +- [系統設計、可擴充性、資料處理](#系統設計、可擴充性、資料處理) (如果你有四年以上的經驗) +- [總複習](#總複習) +- [解題練習](#解題練習) +- [解題練習/挑戰](#解題練習/挑戰) +- [面試前夕](#面試前夕) +- [你的履歷](#你的履歷) +- [想想面試時可能的狀況](#想想面試時可能的狀況) +- [一旦你得到工作](#一旦你得到工作) ----------------- Everything below this point is optional ---------------- +---------------- 以下皆為選讀 ---------------- -## Additional Resources +## 額外資源 -- [Additional Books](#additional-books) -- [Additional Learning](#additional-learning) - - [Compilers](#compilers) +- [選修書籍](#選修書籍) +- [額外學習](#額外學習) + - [編譯器](#編譯器) - [Emacs and vi(m)](#emacs-and-vim) - - [Unix command line tools](#unix-command-line-tools) - - [Information theory](#information-theory-videos) - - [Parity & Hamming Code](#parity--hamming-code-videos) + - [Unix命令列工具](#Unix命令列(command-line)工具) + - [資訊理論](#資訊理論-(影片)) + - [同位位元 & 漢明碼](#同位位元-&-漢明碼-(影片)) - [Entropy](#entropy) - - [Cryptography](#cryptography) - - [Compression](#compression) - - [Computer Security](#computer-security) - - [Garbage collection](#garbage-collection) - - [Parallel Programming](#parallel-programming) - - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) - - [A*](#a) - - [Fast Fourier Transform](#fast-fourier-transform) - - [Bloom Filter](#bloom-filter) + - [密碼學](#密碼學) + - [壓縮](#壓縮) + - [電腦安全](#電腦安全) + - [垃圾回收](#垃圾回收(GC)) + - [平行計算](#平行計算) + - [通訊、序列化以及佇列系統](#通訊、序列化以及佇列系統(Messaging,-Serialization,-and-Queueing-Systems)) + - [A*搜尋演算法](#A*搜尋演算法) + - [快速傅立葉轉換](#快速傅立葉轉換) + - [布隆過濾器](#布隆過濾器(Bloom-filter)) - [HyperLogLog](#hyperloglog) - [Locality-Sensitive Hashing](#locality-sensitive-hashing) - [van Emde Boas Trees](#van-emde-boas-trees) - [Augmented Data Structures](#augmented-data-structures) - - [Balanced search trees](#balanced-search-trees) - - AVL trees - - Splay trees - - Red/black trees - - 2-3 search trees - - 2-3-4 Trees (aka 2-4 trees) - - N-ary (K-ary, M-ary) trees - - B-Trees - - [k-D Trees](#k-d-trees) + - [平衡樹](#平衡樹) + - AVL樹 + - 伸縮樹Splay tree + - 紅黑樹 + - 2-3搜尋樹 + - 2-3-4樹(aka 2-4樹) + - N-ary (K-ary, M-ary)樹 + - B樹 + - [k-D樹](#k-d樹) - [Skip lists](#skip-lists) - [Network Flows](#network-flows) - [Disjoint Sets & Union Find](#disjoint-sets--union-find) - - [Math for Fast Processing](#math-for-fast-processing) + - [快速處理的數學](#快速處理(Fast-Processing)的數學) - [Treap](#treap) - - [Linear Programming](#linear-programming-videos) - - [Geometry, Convex hull](#geometry-convex-hull-videos) - - [Discrete math](#discrete-math) - - [Machine Learning](#machine-learning) -- [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) -- [Video Series](#video-series) -- [Computer Science Courses](#computer-science-courses) -- [Papers](#papers) + - [線性程式設計](#線性程式設計Linear-Programming-(影片)) + - [幾何、Convex hull](#幾何、Convex-hull-(影片)) + - [離散數學](#離散數學) + - [機器學習](#機器學習) +- [某些主題的額外知識](#某些主題的額外知識) +- [影片系列](#影片系列) +- [電腦科學課程](#電腦科學課程) +- [論文](#論文) --- @@ -559,25 +558,25 @@ - dequeue: O(1) (linked list與陣列) - empty: O(1) (linked list與陣列) -- ### 雜湊表(Hash table) +- ### Hash table(雜湊表) - [ ] 影片: - - [ ] [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) + - [ ] [Hashing with Chaining (影片))](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) + - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (影片)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(Advanced) Perfect hashing (影片)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - [ ] 線上開放式課程: - - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - - [ ] [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) + - [ ] [Understanding Hash Functions (影片)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [Using Hash Tables (影片)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) + - [ ] [Supporting Hashing (影片)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [Language Support Hash Tables (影片)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) + - [ ] [Core Hash Tables (影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) + - [ ] [Data Structures (影片)](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) - [ ] 分散式雜湊表(distributed hash table): - - [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) + - [Instant Uploads And Storage Optimization In Dropbox (影片)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox) + - [Distributed Hash Tables (影片)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables) - [ ] 實作雜湊表(用陣列以及線性探測(linear probing)) - hash(k, m) - m:雜湊表的大小 @@ -597,23 +596,23 @@ - 用遞迴(recursion)的方法實作二分搜尋法 - ### 位元運算(Bitwise operations) - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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)) - [ ] 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://www.youtube.com/watch?v=7jkIUgLC29I) + - [ ] [C Programming Tutorial 2-10: Bitwise Operators (影片)](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](https://bits.stephan-brumme.com/) - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) - [ ] 一補數與二補數 - - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4) + - [Binary: Plusses & Minuses (Why We Use Two's Complement) (影片)](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) + - [4 ways to count bits in a byte (影片)](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) - [ ] swap values: @@ -623,12 +622,12 @@ ## 樹狀結構(Tree) -- ### Trees - 重點與背景知識 +- ### Trees-重點與背景知識 - [ ] [Series: Core Trees (影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - [ ] [Series: Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - - basic tree construction - - traversal - - manipulation algorithms + - 如何建立一棵樹 + - 遍歷 + - 操作樹的演算法 - [ ] [BFS(breadth-first search) and DFS(depth-first search) (影片)](https://www.youtube.com/watch?v=uWL6FJhq5fM) - BFS(廣度優先搜尋)重點: - 每一層的順序(BFS,用queue) @@ -643,23 +642,23 @@ - 後序 (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) +- ### 二元搜尋樹Binary search trees: BSTs + - [ ] [Binary Search Tree Review (影片)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [Series (影片)](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) + - [ ] [Introduction (影片)](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) + - [ ] [二元搜尋樹-用C/C++實作 (影片)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) + - [ ] [實作二元搜尋樹 - stack以及heap的記憶體分配 (影片)](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 // get count of values stored @@ -676,18 +675,18 @@ - ### Heap / Priority Queue / Binary Heap - 一般將此資料結構以樹的方式視覺化,但實際上是以線性的方式儲存(陣列、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://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [Introduction (影片)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) + - [ ] [Naive Implementations (影片)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) + - [ ] [Binary Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) + - [ ] [Tree Height Remark (影片)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) + - [ ] [Basic Operations (影片)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) + - [ ] [Complete Binary Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) + - [ ] [Pseudocode (影片)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) + - [ ] [Heap Sort - jumps to start (影片)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) + - [ ] [Heap Sort (影片)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) + - [ ] [Building a heap (影片)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) + - [ ] [MIT: Heaps and Heap Sort (影片)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [CS 61B Lecture 24: Priority Queues (影片)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) - [ ] 實作max heap: - [ ] insert @@ -718,32 +717,32 @@ - 有關於堆積排序,可以看看上面有關於堆積的介紹。堆積排序很棒,但不太穩定。 -- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) +- [ ] [Sedgewick - Mergesort (5部影片)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) - [ ] [3. Sorting Complexity](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) - [ ] [4. Comparators](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) -- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) +- [ ] [Sedgewick - Quicksort (4部影片)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) - [ ] [2. Selection](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) - [ ] [3. Duplicate Keys](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) - [ ] UC Berkeley: - - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) - - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) - - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) - - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + - [ ] [CS 61B Lecture 29: Sorting I (影片)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30: Sorting II (影片)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32: Sorting III (影片)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33: Sorting V (影片)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) -- [ ] [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) +- [ ] [Bubble Sort (影片)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [Analyzing Bubble Sort (影片)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [Insertion Sort, Merge Sort (影片)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [Insertion Sort (影片)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [Merge Sort (影片)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [Quicksort (影片)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [Selection Sort (影片)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) - [ ] 合併排序程式碼: - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) @@ -761,7 +760,7 @@ - 有關堆積排序,請見上方關於堆積的介紹。 - [ ] 非必要,但我建議看一看: - - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [Sedgewick - Radix Sorts (6部影片)](https://www.coursera.org/learn/algorithms-part2/home/week/3) - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) @@ -769,10 +768,10 @@ - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [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) + - [ ] [Radix Sort (影片)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [Radix Sort, Counting Sort (linear time given constraints) (影片)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (影片)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Sorting in Linear Time (影片)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) 這裡有[15種排序演算法](https://www.youtube.com/watch?v=kPRA0W1kECg)的影片,如果你想對排序演算法有更多的了解,看看[Additional Detail on Some Subjects](#additional-detail-on-some-subjects)裡的「排序」這個部分 @@ -795,30 +794,30 @@ - [ ] [Depth-First Search](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) - [ ] Skiena Lectures - 很棒的入門介紹: - - [ ] [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) + - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (影片)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) + - [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (影片)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) + - [ ] [CSE373 2012 - Lecture 13 - Graph Algorithms (影片)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) + - [ ] [CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (影片)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (影片)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (影片)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - [ ] 圖(複習以及進階知識): - - [ ] [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://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) - - [ ] [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 Single-Source Shortest Paths Problem (影片)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Dijkstra (影片)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Bellman-Ford (影片)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 Speeding Up Dijkstra (影片)](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 (影片)]( 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 (影片)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (影片)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (影片)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] ~~[CS 61B 2014 (starting at 58:09) (影片)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489)~~ + - [ ] [CS 61B 2014: Weighted graphs (影片)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [Greedy Algorithms: Minimum Spanning Tree (影片)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (影片)](https://www.youtube.com/watch?v=RpgcYiky7uw) - 完整Coursera課程: - - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) + - [ ] [Algorithms on Graphs (影片)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - 我將實作: - [ ] 深度優先搜尋搭配adjacency list(遞迴recursive) @@ -840,14 +839,14 @@ - ### 遞迴Recursion - [ ] Stanford課程-遞迴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) + - [ ] [Lecture 8 | Programming Abstractions (影片)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] [Lecture 9 | Programming Abstractions (影片)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) + - [ ] [Lecture 10 | Programming Abstractions (影片)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [Lecture 11 | Programming Abstractions (影片)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) - 什麼時候適合用這些 - tail recursion沒有比較好? - [ ] [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) + - [ ] [Tail Recursion (影片)](https://www.youtube.com/watch?v=L1jjXGfxozc) - ### 動態規劃 - 在你的面試中或許沒有任何動態規劃的問題,但能夠知道一個題目可以使用動態規劃來解決是很重要的。 @@ -855,29 +854,29 @@ - 我建議你可以多看一些動態規劃的題目,這可以讓你對這類型的問題以及他的長相有更多的理解。 - [ ] 影片: - Skiena的影片有點難跟上,他有時候用白板,寫的字又很小。 - - [ ] [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) + - [ ] [Skiena: CSE373 2012 - Lecture 19 - Introduction to Dynamic Programming (影片)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) + - [ ] [Skiena: CSE373 2012 - Lecture 20 - Edit Distance (影片)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) + - [ ] [Skiena: CSE373 2012 - Lecture 21 - Dynamic Programming Examples (影片)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena: CSE373 2012 - Lecture 22 - Applications of Dynamic Programming (影片)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (影片)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson: Dynamic Programming I - Lecture 11 (影片)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: Dynamic programming II - Lecture 12 (影片)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) - [ ] List of individual DP problems (每一部都很短): - [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + [Dynamic Programming (v影片ideo)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) - [ ] Yale課程筆記: - [ ] [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) + - [ ] [The RNA secondary structure problem (影片)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) + - [ ] [A dynamic programming algorithm (影片)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) + - [ ] [Illustrating the DP algorithm (影片)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [Running time of the DP algorithm (影片)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) + - [ ] [DP vs. recursive implementation (影片)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) + - [ ] [Global pairwise sequence alignment (影片)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) + - [ ] [Local pairwise sequence alignment (影片)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) - ### 物件導向程式設計 - - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] 重要!物件導向程式設計原則: [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + - [ ] [Optional: UML 2.0 Series (影片)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] 重要!物件導向程式設計原則: [SOLID Principles (影片)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) - ### 設計模式 - [ ] [Quick UML review(影片)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) @@ -899,24 +898,24 @@ - [ ] 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) + - [ ] [Chapter 6 (Part 1) - Patterns (影片)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) + - [ ] [Chapter 6 (Part 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) + - [ ] [Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (影片)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [Series of videos (27部影片)](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. + - 我知道"Design Patterns: Elements of Reusable Object-Oriented Software"才是這方面的經典書籍,但深入淺出系列對於物件導向的初學者可能是更好的選擇。 - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) - ### 組合數&機率 - - [ ] [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) + - [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (影片)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) + - [ ] [Make School: Probability (影片)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) + - [ ] [Make School: More Probability and Markov Chains (影片)](https://www.youtube.com/watch?v=dNaJg-mLobQ) - [ ] Khan Academy: - - Course大崗: + - Course大綱: - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) - - 只有影片 - 41 (每個都很簡單而且很短): - - [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) + - 只有影片(每個都很簡單而且很短): + - [ ] [Probability Explained (影片)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) - ### NP、NP-Complete以及近似演算法 - 了解一些著名的NP-Complete問題,像是旅行推銷員問題(traveling salesman problem)和背包問題(knapsack problem),並要能夠在面試官問類似這些經典範例的問題時辨認出他們。 @@ -948,104 +947,103 @@ - [ ] [MIT 6.004 L16: 快取深入探討(影片)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) - ### 程序與執行緒(Processes&Threads) -- [ ] Computer Science 162 - 作業系統 (25 videos): +- [ ] Computer Science 162 - 作業系統 (25部影片): - 程序與執行緒在第1~11部影片中 - [作業系統以及系統程式設計(影片)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) - [程序與執行緒有什麼差別?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) - 涵蓋: - 探討程序、執行緒與並行性 - 程序與執行緒的差別 - - 程序 - - 執行緒 - - locks - - mutexes - - semaphores - - monitors + - 程序(processes) + - 執行緒(threads) + - 鎖(locks) + - 互斥鎖(mutexes) + - 號誌(semaphores) + - 監視器(monitors) - 他們如何運作? - - deadlock - - livelock - - CPU activity, interrupts, context switching - - Modern concurrency constructs with multicore processors + - 死鎖(deadlock) + - 活鎖(livelock) + - CPU活動、中斷、上下文交換(context switching) + - 現代cpu並行性由多核處理器實現 - [Paging, segmentation and virtual memory(影片)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - - [Interrupts(影片)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - - 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 the 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) + - [中斷Interrupt(影片)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - 程序所需資源 (記憶體): code, 靜態儲存, stack, heap,檔案描述符(file descriptors)以及i/o) + - 執行序所需資源 (跟上述相同(除了stack), 其他的執行序都各自擁有pc、stack計數器、暫存器以及stack在相同的程序中) + - Forking只有複製寫入(唯讀),直到新的程序被寫入到記憶體中u,然後他再複製一個新的 + - 上下文交換 + - 上下文交換如何被作業系統以及硬體所啟動 + - [ ] [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並行性入門: 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) + - [ ] [Python互斥鎖](https://www.youtube.com/watch?v=0zaPs8OtyKY) - ### Testing - 涵蓋: - - 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) - - [ ] Dependency injection: - - [ ] [video](https://www.youtube.com/watch?v=IKD2-MAkXyQ) + - 單元測試如何運作 + - 什麼是模擬對象(mock object) + - 整合測試(integration testing)是什麼 + - 什麼是依賴注入(dependency injection) + - [ ] [敏捷軟體測試-James Bach(影片))](https://www.youtube.com/watch?v=SAhJf36_u5U) + - [ ] [James Bach軟體測試的公開課程(影片))](https://www.youtube.com/watch?v=ILkT_HV9DVU) + - [ ] [Steve Freeman - 測試導向軟體開發(影片))](https://vimeo.com/83960706) + - [投影片](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) + - [ ] 依賴注入(Dependency injection): + - [ ] [影片](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://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) - ### 排程Scheduling - 作業系統中排程如何運作? - 可以從作業系統的課程影片中學習 -- ### String searching & manipulations - - [ ] [Sedgewick - Suffix Arrays(影片)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - - [ ] [Sedgewick - Substring Search(影片)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) - - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) - - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) - - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) - - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - - [ ] [Search pattern in text(影片)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) +- ### 字串搜尋演算法以及操作 + - [ ] [Sedgewick-後綴陣列(Suffix Arrays)(影片)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick-子字串搜尋(影片)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1.子字串搜尋導論](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2.子字串搜尋-暴力法](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3.KMP演算法](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4.Boyer-Moore字串搜尋演算法](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5.Rabin-Karp演算法](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) + - [ ] [在文字中尋找模式(影片)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + 如果你想知道更多有關這個主題的知識,可以去看[某些主題的額外知識](#某些主題的額外知識)中的"String Matching" -- ### 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. - - [ ] [Sedgewick - Tries(3部影片)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) - - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) - - [ ] [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(影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) - - [ ] [Performance Of Tries(影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) - - [ ] [Implementing A Trie(影片)](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/competitive-programming/tutorials/using-tries/) - - [ ] [Stanford Lecture (real world use case)(影片)](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) + - 請注意字典樹有許多種類。有些有前綴,有些沒有,而有些在追蹤路徑時使用字串而非位元。 + - 我有看過這些程式碼,但沒有實作 + - [ ] [Sedgewick-字典樹(3部影片)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1.R Way字典樹](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2.三元搜尋樹](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3.字元操作](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [Note:資料結構以及coding技巧](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#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) + - [ ] [TopCoder-使用字典樹](https://www.topcoder.com/community/competitive-programming/tutorials/using-tries/) + - [ ] [Stanford線上課程(實際使用範例))(影片)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) + - [ ] [MIT進階資料結構-字串(影片中間有點困難)(影片)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) -- ### Floating Point Numbers - - [ ] 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(影片)](https://www.youtube.com/watch?v=50ZYcZebIec) +- ### 浮點數 + - [ ] 8位元: [浮點數表示 - 1 (影片 - there is an error in calculations - see video description)](https://www.youtube.com/watch?v=ji3SfClm8TU) + - [ ] 32位元: [IEEE754 32位元浮點數(影片)](https://www.youtube.com/watch?v=50ZYcZebIec) - ### 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://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html) - - [ ] [Big Endian Vs Little Endian(影片)](https://www.youtube.com/watch?v=JrNF0KRAlyo) - - [ ] [Big And Little Endian Inside/Out(影片)](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. +- ### 端序(Endianness) + - [ ] [大/小端序](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html) + - [ ] [大端序 Vs 小端序(影片)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [ ] [由裡入內的大端序與小端序(影片)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) + - 對於核心開發非常具有技術性。如果大多數的內容聽不懂也沒關係。 + - 前半部就已經足夠了 - ### 網路 - **以下為如果你有網路相關經驗,或是想成為一個可靠的工程師需要知道的知識** @@ -1066,47 +1064,47 @@ ## 系統設計、可擴充性、資料處理 -**You can expect system design questions if you have 4+ years of experience.** +**如果你已經擁有了4年以上的程式經驗,那你可以來看看有關系統設計的問題** -- 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. -- Considerations: - - 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**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- 可擴充性與系統設計的範圍非常廣大,裡面還包含了許多主題,因為在設計一個具有擴充性的軟體/硬體時有許多事情需要考量。你可以花點時間看看這些。 + +- 考量: + - 可擴充性 + - 將大量資料抽取出而成一個值 + - 將一個資料轉換成另一個 + - 處理大量的資料 + - 系統設計 + - 功能集 + - 介面 + - class階層 + - 在某些限制下設計一個系統 + - 簡單與強健的系統 + - 權衡得失 + - 效能評估與最佳化 + +- [ ] **從這裡開始**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [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(影片)](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. +- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - 這個裡面包含許多資源。把裡面的文章與例子都看過一遍,裡面有些我把他特別放在下面。 - [ ] [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(影片)](https://www.youtube.com/watch?v=srOgpXECblk) - [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) -- [ ] Consensus Algorithms: +- [ ] 共識演算法(Consensus Algorithms): - [ ] Paxos - [Paxos Agreement - Computerphile(影片)](https://www.youtube.com/watch?v=s8JqcZtvnsM) - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm(影片)](https://www.youtube.com/watch?v=P9Ydif5_qvE) - [ ] [Easy-to-read paper](https://raft.github.io/) - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) -- [ ] Scalability: - - You don't need all of these. Just pick a few that interest you. +- [ ] 可擴充性: + - 不用把這些全讀過,挑幾個你有興趣的即可。 - [ ] [Great overview(影片)](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) @@ -1115,14 +1113,14 @@ - [ ] [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) + - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (影片)](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) + - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (影片)](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (影片)](https://www.youtube.com/watch?v=H4vMcD7zKM0) - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/competitive-programming/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 (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) + - [ ] [Scale at Facebook (2012), "Building for a Billion Users" (影片)](https://www.youtube.com/watch?v=oodS71YtkGU) + - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(影片)](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.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) @@ -1153,35 +1151,35 @@ - [ ] [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) + - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (影片)](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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - - [cheat sheet](https://github.com/jwasham/coding-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: + - 更多請看看下面[影片系列](#影片系列)中的"Mining Massive Datasets" +- [ ] 練習系統設計的過程:以下是在紙上練習的一些方法,每個都有他們如何運用在現實中的說明文件: + - 複習: [系統設計入門](https://github.com/donnemartin/system-design-primer) + - [HiredInTech系統設計](http://www.hiredintech.com/system-design/) + - [提示](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) + - 流程: + 1. 了解問題與其範圍: + - 在面試官的幫助下定義使用情況 + - 提供些額外功能的建議 + - 移除面試官認為是超出範圍的東西 + - 默認高可用度是必須的,並增加一些使用情況 + 2. 設想限制: + - 想想看每個月會有多少請求 + - 想想看每秒會有多少請求(他們可能自願或者讓你自己計算) + - 評估讀寫比率 + - 評估時請保持80/20法則 + - 每秒有多少資料被寫入? + - 5年內總共需要的儲存空間 + - 每秒有多少資料被讀取? + 3. 抽象設計: + - 層(服務、資料、快取) + - 基礎:讀取平衡、通訊 + - 初步概覽驅動整個服務的關鍵演算法 + - 考慮會遇到的瓶頸以及解決方案 + - 練習: - [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) @@ -1245,17 +1243,16 @@ ## 解題練習/挑戰 -Once you've learned your brains out, put those brains to work. -試試每天解一些題目,越多越好! +學了一些東西之後,可以開始試試每天解一些題目,越多越好! - [如何找到解法](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) -- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) +- [如何剖析好的coder的問題解析](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) Coding面試題目影片: -- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) -- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) +- [IDeserve (88部影片)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy (5個播放清單)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) - 對於解法的練習非常有幫助 -- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) +- [Nick White - LeetCode Solutions (187部影片)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) - 這些是我最近很喜歡的影片,你可以在短時間內看完他們 - 對於解法以及程式碼有很棒的解釋 @@ -1334,76 +1331,74 @@ Coding面試題目影片: 你可以從以下的書單挑選你有興趣的主題來研讀 - [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - - an oldie but a goodie + - 老,但卻很棒 - [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - a modern option + - 現代選擇 - [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) - [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns + - 設計模式的入門簡介 - [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - - aka the "Gang Of Four" book, or GOF - - the canonical design patterns book + - 也被稱為"四人幫"("Gang of Four(GOF)") + - 經典設計模式書籍 - [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - Can rent it on kindle - - 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) + - 作為複習以及問題辨別 + - 這本書中演算法的部分難度已經超過面試會出現的 + - 本書分為兩個部分: + - 資料結構及演算法課本 + - 優點: + - 跟其他演算法課本一樣是個很棒的複習素材 + - 內含關於作者以往解決工業及學術上問題的經驗的故事 + - 含C語言程式碼範例 + - 缺點: + - 某些地方跟"Introduction to Algorithms"一樣艱深,但在某些主題,"Introduction to Algorithms"或許是更好的選擇。 + - 第7、8、9章有點難以消化,因為某些地方並沒有解釋得很清楚,或者根本上我就是個學渣 + - 別會錯意了,我很喜歡Skiena的教學方法以及他的風格。 + - 演算法目錄: + - 這個部分是買這本書的最大誘因 + - 我即將著手進行這部分,一旦完成這部分我會再更新上來 + - 可以在kindle上租 + - 解答: + - [解答](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) - [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - - These chapters are worth the read to give you a nice foundation: - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization + - 這本書出版於2004年,某些程度上他有點過時了,但對於初步理解電腦是個很棒的資源 + - 作者發明了[高階組合語言HLA](https://zh.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E%E7%B5%84%E5%90%88%E8%AA%9E%E8%A8%80),所以提到,並且舉了一些HLA的例子。裡面沒有用到很多,但都是很棒的組合語言的例子。 + - 這些章節很值得一讀,讓你具備極佳的基礎: + - 第2章 - 數值表示法 + - 第3章 - 二進位運算和位元運算 + - 第4章 - 浮點數表示法 + - 第5章 - 字元表示法 + - 第6章 - 記憶體組織和存取 + - 第7章 - 複合資料型別和記憶體 + - 第9章 - CPU架構 + - 第10章 - 指令集架構 + - 第11章 - 記憶體架構與組織 - [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - aka CLR, sometimes CLRS, because Stein was late to the game + - **重要:** 讀這本書CP值不高。這本書作為複習演算法和資料結構還算滿不錯的,但它裡面沒有教你怎麼實作這些東西。你必須要能夠自己寫出很棒、有效率的解法。 + - 也被稱為CLR,或是CLRS,因為Stein是後來才加入作者群的。 - [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - - For a richer, more up-to-date (2017), but longer treatment + - 更豐富、更新(2017年),但篇幅較長。 - [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture. + - 前幾章提供了一些解決coding問題的精妙絕倫的方法(有些很舊,甚至還用磁帶),但那些只是導論。這是本程式設計和架構的指南。 -## Additional Learning +## 額外學習 - I added them to help you become a well-rounded software engineer, and to be aware of certain - technologies and algorithms, so you'll have a bigger toolbox. + 我把他們加了進來為了讓你成為更全方位的軟體工程師,並且留意一些科技以及演算法,讓你的資料庫中有更多素材。 -- ### Compilers - - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - - [Harvard 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 a Compiler Works in ~1 minute (影片)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard CS50 - Compilers (影片)](https://www.youtube.com/watch?v=CSZLNYF4Klo) + - [C++ (影片)](https://www.youtube.com/watch?v=twodd1KFfGk) + - [Understanding Compiler Optimization (C++) (影片)](https://www.youtube.com/watch?v=FnGCDLhaxKU) - ### Emacs and vi(m) - - Familiarize yourself with a unix-based code editor + - 讓你自己熟悉unix的文字編輯器 - vi(m): - - [Editing With vim 01 - Installation, Setup, and The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) + - [Editing With vim 01 - Installation, Setup, and The Modes (影片)](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) @@ -1412,17 +1407,16 @@ Coding面試題目影片: - [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) + - [基礎Emacs教學 (影片)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) + - 三組影片: + - [Emacs教學(初學者) -Part 1- File commands, cut/copy/paste, cursor commands](https://www.youtube.com/watch?v=ujODL7MD04Q) + - [Emacs教學(初學者) -Part 2- Buffer management, search, M-x grep and rgrep modes](https://www.youtube.com/watch?v=XWpsRupJ4II) + - [Emacs教學(初學者) -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 (影片)](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) + - [(maybe) Org Mode In Depth: Managing Structure (影片)](https://www.youtube.com/watch?v=nsGYet02bEk) -- ### Unix command line tools - - I filled in the list below from good tools. +- ### Unix命令列(command line)工具 - bash - cat - grep @@ -1432,40 +1426,40 @@ Coding面試題目影片: - sort - tr - uniq - - [strace](https://en.wikipedia.org/wiki/Strace) + - [strace](https://zh.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. + - 進一步的可以去看看下方的MIT 6.050J Information和Entropy系列 -- ### 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) +- ### 同位位元 & 漢明碼 (影片) + - [簡介](https://www.youtube.com/watch?v=q-3BctoUpHE) + - [同位位元](https://www.youtube.com/watch?v=DdMcAUlxh1M) + - 漢明碼: + - [錯誤偵測](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) + - 同樣看看下方的影片 + - 務必先看過資訊理論的影片 + - [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (影片)](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) @@ -1473,10 +1467,10 @@ Coding面試題目影片: - [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) + - [(額外) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s) -- ### Computer Security - - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) +- ### 電腦安全 + - [MIT (23部影片)](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) @@ -1490,24 +1484,24 @@ Coding面試題目影片: - [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 - - [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI) +- ### 垃圾回收(GC) + - [GC in Python (影片)](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) + - [Deep Dive Python: Garbage Collection in CPython (影片)](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) + - [Efficient Python for High Performance Parallel Computing (影片)](https://www.youtube.com/watch?v=uY85GkaYzBk) -- ### Messaging, Serialization, and Queueing Systems +- ### 通訊、序列化以及佇列系統(Messaging, Serialization, and Queueing Systems) - [Thrift](https://thrift.apache.org/) - - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) + - [教學](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) + - [教學](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 101 for Java Developers (影片)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) - [Redis](http://redis.io/) - - [Tutorial](http://try.redis.io/) + - [教學](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/) @@ -1521,197 +1515,181 @@ Coding面試題目影片: - [MessagePack](http://msgpack.org/index.html) - [Avro](https://avro.apache.org/) -- ### 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) +- ### A*搜尋演算法 + - [A搜尋演算法](https://en.wikipedia.org/wiki/A*_search_algorithm) + - [A* 路徑找尋教學 (影片)](https://www.youtube.com/watch?v=KNXfSOx4eEE) + - [A* 路徑找尋 (E01: 演算法解釋) (影片)](https://www.youtube.com/watch?v=-L-WgKMFuhE) -- ### Fast Fourier Transform - - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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/) +- ### 快速傅立葉轉換 + - [傅立葉轉換互動式教學](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/) + - [什麼是傅立葉轉換? 他是用來幹嘛的?](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) + - [分治法: 快速傅立葉轉換 (影片)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) + - [理解快速傅立葉轉換](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 (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) - - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) +- ### 布隆過濾器(Bloom filter) + - 給定布隆過濾器m個位元以及k個雜湊函式,插入以及membership testing都是O(k) + - [布隆過濾器 (影片))](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [布隆過濾器 | Mining of Massive Datasets | Stanford University (影片)](https://www.youtube.com/watch?v=qBTdukbzc78) + - [教學](http://billmill.org/bloomfilter-tutorial/) + - [如何寫一個布隆過濾器的APP](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/) - ### HyperLogLog - - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + - [如何只用僅僅1.5KB的記憶體計算數十億個不同的物體](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) - ### Locality-Sensitive Hashing - - used to determine the similarity of documents - - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - 用來判定文件的相似度 + - 跟MD5/SHA正好相反,他們是用來判定兩個文件/字串是否完全相同 - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### 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) + - [Divide & Conquer: van Emde Boas Trees (影片)](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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) -- ### Balanced search trees - - Know at 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樹已經有點過時了,而紅黑樹則比較流行。伸展樹(Splay tree)是一個特別有趣,能夠自我伸展的資料結構,他利用了旋轉rotation來移動任何accessed key到樹的根部。" - Skiena + - 在這麼多平衡樹之中,我選擇實作伸縮樹。從我曾聽過的看來,在面試時你並不需要會實作平衡搜尋樹。我看過了很多紅黑樹的程式碼。 + - 伸縮樹:插入、搜尋、刪除函式 + 如果你最後選擇實作紅黑樹,試試看以下這些: + - 搜尋和插入函式,跳過刪除 + - 我想學習更多有關B-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) + - **AVL樹** + - 實際上: + 從我所知,這些樹在實際上並沒有用到太多,但這些是他們可能會出現的地方: + AVL樹是另一個能夠在O(log n)的時間內搜尋、插入和刪除的資料結構。AVL樹比起紅黑樹更加嚴格的兩邊平衡,而這也導致了比較慢的插入和刪除,但比較快速的拿取。這對於那些只要建立一次,之後就只要取用的資料結構非常有吸引力,像是字典(或是程式字典,像是直譯器或組譯器的opcodes) + - [MIT AVL Trees / AVL Sort (影片)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) + - [AVL Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) + - [AVL Tree Implementation (影片)](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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - - MIT Lecture: Splay Trees: - - Gets very mathy, but watch the last 10 minutes for sure. - - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + - **伸縮樹Splay tree** + - 實際上: + 伸縮樹運用在快取、記憶體分配、路由、垃圾回收、資料壓縮、ropes(在長字串時取代string)、Windows NT(在虛擬記憶體、網路以及檔案系統)等等。 + - [CS 61B: Splay Trees (影片)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - MIT Lecture: 伸縮樹: + - 非常數學,但務必看看最後10分鐘 + - [影片](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - - **Red/black trees** - - these are a translation of a 2-3 tree (see below) - - 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) + - **紅黑樹** + - 這些是2-3樹的解釋(請看下方) + - 實際上: + 紅黑樹插入、刪除以及搜尋的時間複雜度在最糟情況下仍有一定程度的保證表現。 + 這不只讓他們在時間要求極高的應用(像是即時應用)有著很高的價值,在建構其他資料結構中也有著極高的價值。 + 舉例來說,許多在計算幾何中的資料結構都是由紅黑樹所構成的,而在Linux中用到的Completely Fair Scheduler也用到了紅黑樹。 + 在Java8中,Collection HashMap也從原本用Linked List實作,儲存特定元素的hashcode,改為用紅黑樹實作。 + - [Aduni - Algorithms - Lecture 4 (link jumps to starting point) (影片)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) + - [Aduni - Algorithms - Lecture 5 (影片)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) - - **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) + - **2-3搜尋樹** + - 實際上: + 2-3樹在犧牲了搜尋速度下換來了相對快速的插入速度(因為高度比起AVL樹來的高) + - 2-3樹極少被用到,因為實作他需要用到不同的節點。因此,紅黑樹的出現機率較高。 + - [23-Tree Intuition and Definition (影片)](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 Trees (student recitation) (影片)](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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - - [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樹 (aka 2-4樹)** + - 實際上: + 每個2-4樹都有相對應,有著相同資料順序的紅黑樹。2-4樹的插入以及刪除跟紅黑樹中的color-flipping以及rotation是相同的。這讓2-4樹成為了了解紅黑樹背後的 + 邏輯的重要工具,而這也是為什麼很多演算法入門課本都會在介紹紅黑樹前介紹2-4樹,即使**2-4樹在實際上並不常用到**。 + - [CS 61B Lecture 26: Balanced Search Trees (影片)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [Bottom Up 234-Trees (影片)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [Top Down 234-Trees (影片)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) - **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 + - 重點: N或K指的是branching factor(最大的分支數) + - 二元樹屬於2-ary tree,branching factor為2 + - 2-3樹屬於3-ary - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - - **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樹** + - 有趣的小知識: B代表什麼是個謎題,或許代表Boeing、Balanced,或Bayer(co-inventor) + - 實際上: + B樹廣泛的運用在資料庫中。多數現代資料系統使用B樹(或是其變異體)。除了在資料庫方面的應用,B樹也用在資料系統中,使得我們能夠 + 隨機存取特定檔案中的任意部分。最基礎的問題是把file block的i address轉變為disk block(或是轉變為cylinder head sector)的address。 - [B-Tree](https://en.wikipedia.org/wiki/B-tree) - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) - - [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) + - [Introduction to B-Trees (影片)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) + - [B-Tree Definition and Insertion (影片)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [B-Tree Deletion (影片)](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代表block大小、cache line大小) -- ### k-D Trees - - great for finding number of points in a rectangle or higher dimension object - - a good fit for k-nearest neighbors - - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) +- ### k-D樹 + - 是找矩形中或是更高維度物體中的點的數量的好方法 + - 對於k-nearest neighbors很有幫助 + - [Kd Trees (影片)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (影片)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ### 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) + - "這些資料結構某種程度上有些邪門" - Skiena + - [Randomization: Skip Lists (影片)](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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) - - [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) - - [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) + - [Ford-Fulkerson in 5 minutes — Step by step example (影片)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [Ford-Fulkerson Algorithm (影片)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [Network Flows (影片)](https://www.youtube.com/watch?v=2vhN4Ice5jI) - ### Disjoint Sets & Union Find - - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) - - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + - [UCB 61B - Disjoint Sets; Sorting & selection (影片)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6部影片)](https://www.coursera.org/learn/algorithms-part1/home/week/1) -- ### 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) +- ### 快速處理(Fast Processing)的數學 + - [Integer Arithmetic, Karatsuba Multiplication (影片)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [The Chinese Remainder Theorem (used in cryptography) (影片)](https://www.youtube.com/watch?v=ru7mWZJlRQg) - ### Treap - - Combination of a binary search tree and a heap + - 二元搜尋樹以及heap的結合 - [Treap](https://en.wikipedia.org/wiki/Treap) - - [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8) + - [Data Structures: Treaps explained (影片)](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 (影片) - [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) - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) -- ### Geometry, Convex hull (videos) +- ### 幾何、Convex hull (影片) - [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 +- ### 離散數學 - 觀看下方影片 -- ### 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) + - [Large-Scale Deep Learning for Intelligent Computer Systems (影片)](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) + - [Google's Cloud Machine learning tools (影片)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) + - [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (影片)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) + - [Tensorflow (影片)](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: + - [Practical Guide to implementing Neural Networks in Python (使用Theano)](http://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/) + - 課程: - [Great starter course: Machine Learning](https://www.coursera.org/learn/machine-learning) - - [videos only](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) + - [只有影片](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: - - Books: + - [Metis Online Course ($99/2個月)](http://www.thisismetis.com/explore-data-science) + - 資源: + - 書籍: - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) @@ -1720,10 +1698,9 @@ Coding面試題目影片: --- -## 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? - **SOLID** @@ -1734,10 +1711,10 @@ Coding面試題目影片: - [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) + - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients不該被強迫去實作他們不會用到的介面 + - [Interface Segregation Principle in 5 minutes (影片)](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. + - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | 減少對物件的composition的依賴 - [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) @@ -1750,7 +1727,7 @@ Coding面試題目影片: - [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) -- **More Dynamic Programming** (videos) +- **More Dynamic Programming** (影片) - [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) @@ -1759,11 +1736,11 @@ Coding面試題目影片: - [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) +- **Advanced Graph Processing** (影片) - [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 **Probability** (過於數學,進度緩慢,但這對於數學的東西卻是必要之惡) (影片): - [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) @@ -1776,7 +1753,7 @@ Coding面試題目影片: - [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) - **String Matching** - - Rabin-Karp (videos): + - Rabin-Karp (影片): - [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) @@ -1786,89 +1763,89 @@ Coding面試題目影片: - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) - 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) + - [Advanced String Searching Boyer-Moore-Horspool Algorithms (影片)](https://www.youtube.com/watch?v=QDZpzctPf10) - [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) - - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be - - nice explanation of tries - - can be skipped + - 開始的時候很不錯,但過了KMP的部分後就變得過於困難 + - 很好的解釋了tries(字典樹) + - 可以跳過 -- **Sorting** +- **排序** - - 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) + - Stanford的排序課程: + - [Lecture 15 | Programming Abstractions (影片)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) + - [Lecture 16 | Programming Abstractions (影片)](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) + - [Algorithms - Sorting - Lecture 2 (影片)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) + - [Algorithms - Sorting II - Lecture 3 (影片)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) + - Steven Skiena的排序課程: + - [lecture begins at 26:46 (影片)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) + - [lecture begins at 27:40 (影片)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [lecture begins at 35:00 (影片)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [lecture begins at 23:50 (影片)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) -## Video Series +## 影片系列 -Sit back and enjoy. "Netflix and skill" :P +坐下來享受一下"Netflix和技巧" :P -- [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) +- [List of individual Dynamic Programming problems (每部都很短)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) -- [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) +- [x86 Architecture, Assembly, Applications (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 Linear Algebra, Spring 2005 (35部影片)](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](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) -- [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) +- [Discrete Mathematics by Shai Simonson (19部影片)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) -- [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) +- [Discrete Mathematics Part 1 by Sarada Herke (5部影片)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) -- CSE373 - Analysis of Algorithms (25 videos) +- CSE373 - Analysis of Algorithms (25部影片) - [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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) +- [UC Berkeley 61B (Spring 2014): Data Structures (25部影片)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) -- [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) +- [UC Berkeley 61B (Fall 2006): Data Structures (39部影片)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) -- [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) +- [UC Berkeley 61C: Machine Structures (26部影片)](https://archive.org/details/ucberkeley-webcast-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: Software Dev Using UML and 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: Computer Architecture and Engineering (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=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) +- [MIT 6.004: Computation Structures (49部影片)](https://www.youtube.com/playlist?list=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) -- [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) +- [Carnegie Mellon - Computer Architecture Lectures (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: Intro to Algorithms (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: Computer System Engineering (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 Artificial Intelligence, Fall 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: Mathematics for Computer Science, Fall 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: Design and Analysis of Algorithms (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: Information and Entropy, Spring 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: Advanced Data Structures (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: Advanced Algorithms, Spring 2016 (24部影片)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) -- [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) +- [Harvard COMPSCI 224: Advanced Algorithms (25部影片)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) - [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) -- [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) +- [Stanford: Programming Paradigms (27部影片)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) - [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) -- [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) +- [Mining Massive Datasets - Stanford University (94部影片)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) -- [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) +- [Graph Theory by Sarada Herke (67部影片)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) ## 電腦科學課程 @@ -1879,7 +1856,7 @@ Sit back and enjoy. "Netflix and skill" :P - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - - [implemented in Go](https://godoc.org/github.com/thomas11/csp) + - [Go語言實作](https://godoc.org/github.com/thomas11/csp) - [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) @@ -1893,13 +1870,13 @@ Sit back and enjoy. "Netflix and skill" :P - [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) + - [論文](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’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) + - [論文](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) diff --git a/tw_translation_progress_log.md b/tw_translation_progress_log.md index 82d286b..7ab3b57 100644 --- a/tw_translation_progress_log.md +++ b/tw_translation_progress_log.md @@ -7,15 +7,18 @@ | 日期 | 事件 | 其他 | |---|---|---| | 2020/04/09 |建立tw_translation_progress_log.md | | - +| 2020/04/14 |完成 程序與執行緒(Processes&Threads) 翻譯 | | +Testing +String searching & manipulations +Tries # To be done... ## 雜湊表 ## Heap/Priority Queue/Binary Heap ## 更多知識: - 程序與執行緒(Processes&Threads) - Testing - String searching & manipulations - Tries + + + + Floating Point Numbers Unicode Endianness From 3efab1f54c3ee40561b27fed633a35506621209b Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 4 Jul 2020 17:27:26 -0700 Subject: [PATCH 215/263] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 9caecbd..a309f16 100644 --- a/README.md +++ b/README.md @@ -730,8 +730,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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). + - [ ] heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap or min heap ## Sorting From 13af862d09831af348830985a274d7e7f5b412a1 Mon Sep 17 00:00:00 2001 From: fadifrancis Date: Tue, 7 Jul 2020 11:32:51 -0700 Subject: [PATCH 216/263] add interviewing.io to list of resources --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a309f16..8f36c2b 100644 --- a/README.md +++ b/README.md @@ -1325,6 +1325,7 @@ Mock Interviews: - [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. +- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously. ## Once you're closer to the interview From 7ae750384c441e27062cc59f8545623d7c48b66d Mon Sep 17 00:00:00 2001 From: Renan Reis Date: Fri, 10 Jul 2020 10:51:43 +0200 Subject: [PATCH 217/263] fix cdn article --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f36c2b..3fc7cae 100644 --- a/README.md +++ b/README.md @@ -1215,7 +1215,7 @@ Graphs can be used to represent many problems in computer science, so this secti - 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 CDN network: old article](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972) - [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) From 03cf78e07bc90724d8deb6f7259f25731799d113 Mon Sep 17 00:00:00 2001 From: flyotlin Date: Sun, 12 Jul 2020 12:34:33 +0800 Subject: [PATCH 218/263] fix the link --- README.md | 1 + translations/README-tw.md | 1 + tw_translation_progress_log.md | 62 ---------------------------------- 3 files changed, 2 insertions(+), 62 deletions(-) delete mode 100644 tw_translation_progress_log.md diff --git a/README.md b/README.md index ba6d3f3..b706da2 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) - [Português Brasileiro](translations/README-ptbr.md) +- [繁體中文](translations/README-tw.md)
diff --git a/translations/README-tw.md b/translations/README-tw.md index ad76538..eca3b64 100644 --- a/translations/README-tw.md +++ b/translations/README-tw.md @@ -18,6 +18,7 @@ - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) - [Português Brasileiro](translations/README-ptbr.md) +- [繁體中文](translations/README-tw.md) diff --git a/tw_translation_progress_log.md b/tw_translation_progress_log.md deleted file mode 100644 index 7ab3b57..0000000 --- a/tw_translation_progress_log.md +++ /dev/null @@ -1,62 +0,0 @@ -# TIP (2020.04.09) -以下是這個翻譯計畫中還尚未完成的部份, -想參與這個計畫的人可以先挑選幾個部份翻譯並告知我,我會在這份log中標示那個部份已經有人負責,以避免衝突。完成翻譯後再聯絡我! -# participants -# translation log - -| 日期 | 事件 | 其他 | -|---|---|---| -| 2020/04/09 |建立tw_translation_progress_log.md | | -| 2020/04/14 |完成 程序與執行緒(Processes&Threads) 翻譯 | | -Testing -String searching & manipulations -Tries -# To be done... -## 雜湊表 -## Heap/Priority Queue/Binary Heap -## 更多知識: - - - - - Floating Point Numbers - Unicode - Endianness -## 系統設計、可擴充性、資料處理 - -## 選修書籍 - -## Additional Learning - Compilers - Emacs and vi(m) - Unix command line tools - Information theory (videos) - Parity & Hamming Code (videos) - Entropy - Cryptography - Compression - Computer Security - Garbage collection - Parallel Programming - Messaging, Serialization, and Queueing Systems - A* - Fast Fourier Transform - Bloom Filter - HyperLogLog - Locality-Sensitive Hashing - van Emde Boas Trees - Augmented Data Structures - Balanced search trees - k-D Trees - Skip lists - Network Flows - Disjoint Sets & Union Find - Math for Fast Processing - Treap - Linear Programming (videos) - Geometry, Convex hull (videos) - Machine Learning -## Additional Detail on Some Subjects -## Video Series -## 論文 - From 9e84901045e7d83929ed256a757ee52e736a0407 Mon Sep 17 00:00:00 2001 From: flyotlin Date: Sun, 12 Jul 2020 12:38:36 +0800 Subject: [PATCH 219/263] update --- README.md | 62 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index b706da2..9ea0971 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [Tiếng Việt - Vietnamese](translations/README-vi.md) - [Español](translations/README-es.md) - [Português Brasileiro](translations/README-ptbr.md) +- [Polish](translations/README-pl.md) - [繁體中文](translations/README-tw.md) @@ -36,7 +37,6 @@ - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) - [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) - [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) -- [Polish](https://github.com/jwasham/coding-interview-university/issues/122) - [Urdu](https://github.com/jwasham/coding-interview-university/issues/140) - [Thai](https://github.com/jwasham/coding-interview-university/issues/156) - [Greek](https://github.com/jwasham/coding-interview-university/issues/166) @@ -242,7 +242,6 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [ ] [Effective Whiteboarding during Programming Interviews](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) - [ ] 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) @@ -496,11 +495,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### Arrays - Implement an automatically resizing vector. - [ ] Description: - - [Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [Arrays (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - - [Dynamic Arrays (video)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [Dynamic Arrays (video)](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) @@ -532,14 +531,14 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### Linked Lists - [ ] Description: - - [ ] [Singly Linked Lists (video)](https://www.coursera.org/learn/data-structures/lecture/kHhgK/singly-linked-lists) + - [ ] [Singly Linked Lists (video)](https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK) - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [ ] [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) + - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) + - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) - [ ] [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) @@ -561,11 +560,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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) + - [Description (video)](https://www.coursera.org/lecture/data-structures/doubly-linked-lists-jpGKD) - No need to implement - ### Stack - - [ ] [Stacks (video)](https://www.coursera.org/learn/data-structures/lecture/UdKzQ/stacks) + - [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ) - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] Will not implement. Implementing with array is trivial. @@ -604,12 +603,12 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - - [ ] [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) + - [ ] [Core Hash Tables (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-hash-tables-m7UuP) + - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/4) + - [ ] [Phone Book Problem (video)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP) - [ ] 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) + - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/lecture/data-structures/instant-uploads-and-storage-optimization-in-dropbox-DvaIb) + - [Distributed Hash Tables (video)](https://www.coursera.org/lecture/data-structures/distributed-hash-tables-tvH8H) - [ ] implement with array using linear probing - hash(k, m) - m is size of hash table @@ -629,7 +628,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - binary search using recursion - ### Bitwise operations - - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-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) + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.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: @@ -640,6 +639,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) + - [ ] [Bit Hacks (video)](https://www.youtube.com/watch?v=ZusiKXcz_ac) - [ ] 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) @@ -656,8 +656,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## 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) + - [ ] [Series: Core Trees (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-trees-ovovP) + - [ ] [Series: Trees (video)](https://www.coursera.org/lecture/data-structures/trees-95qda) - basic tree construction - traversal - manipulation algorithms @@ -731,8 +731,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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). + - [ ] heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap or min heap ## Sorting @@ -1085,7 +1084,7 @@ Graphs can be used to represent many problems in computer science, so this secti - ### Networking - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - otherwise, this is just good to know - - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro) + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org) - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) @@ -1217,7 +1216,7 @@ Graphs can be used to represent many problems in computer science, so this secti - 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 CDN network: old article](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972) - [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) @@ -1297,20 +1296,26 @@ Coding Interview Question Videos: - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) - Super for walkthroughs of problem solutions. - [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) - - These are my new favorite. You can watch several in a short time. - Good explanations of solution and the code. + - You can watch several in a short time. +- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) Challenge sites: - [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) -- [HackerEarth](https://www.hackerearth.com/) + - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing. + - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode) + - See Nick White Videos above for short code-throughs - [HackerRank](https://www.hackerrank.com/) -- [Codility](https://codility.com/programmers/) +- [TopCoder](https://www.topcoder.com/) - [InterviewCake](https://www.interviewcake.com/) - [Geeks for Geeks](http://www.geeksforgeeks.org/) - [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) + +Language-learning sites, with challenges: +- [Codewars](http://www.codewars.com) +- [Codility](https://codility.com/programmers/) +- [HackerEarth](https://www.hackerearth.com/) - [Sphere Online Judge (spoj)](http://www.spoj.com/) - [Codechef](https://www.codechef.com/) @@ -1321,6 +1326,7 @@ Mock Interviews: - [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. +- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously. ## Once you're closer to the interview @@ -1970,4 +1976,4 @@ Sit back and enjoy. "Netflix and skill" :P ## LICENSE -[CC-BY-SA-4.0](./LICENSE.txt) +[CC-BY-SA-4.0](./LICENSE.txt) \ No newline at end of file From 8e6110f2f438b3b6bf320819feb76551251e830b Mon Sep 17 00:00:00 2001 From: Swaroop Samek Date: Sun, 2 Aug 2020 16:19:01 -0700 Subject: [PATCH 220/263] Added more steps to GIT setup to help users new to Git/GitHub --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9ea0971..c54ce31 100644 --- a/README.md +++ b/README.md @@ -201,9 +201,14 @@ I'm using Github's special markdown flavor, including tasks lists to check progr **Create a new branch so you can check items like this, just put an x in the brackets: [x]** - Fork a branch and follow the commands below +Fork the GitHub repo https://github.com/jwasham/coding-interview-university by clicking on the Fork button + + Clone to your local repo + +`git clone git@github.com:/coding-interview-university.git` + `git checkout -b progress` `git remote add jwasham https://github.com/jwasham/coding-interview-university` @@ -218,6 +223,8 @@ I'm using Github's special markdown flavor, including tasks lists to check progr `git rebase jwasham/master` +`git push --set-upstream origin progress` + `git push --force` [More about Github-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) @@ -1976,4 +1983,4 @@ Sit back and enjoy. "Netflix and skill" :P ## LICENSE -[CC-BY-SA-4.0](./LICENSE.txt) \ No newline at end of file +[CC-BY-SA-4.0](./LICENSE.txt) From c4cb4e174dec911b87db889f92801a2729802ce1 Mon Sep 17 00:00:00 2001 From: Lucas Alves Date: Mon, 10 Aug 2020 14:53:29 -0300 Subject: [PATCH 221/263] Fix some hyperlinks --- translations/README-ptbr.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index c015ecc..4110012 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -467,9 +467,9 @@ Por que programar em todas essas linguagens? Talvez eu não tenha tempo para fazer tudo isso para cada tema, mas eu vou tentar. Você pode ver meu código aqui: - - [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) Você não precisa memorizar os detalhes intrínsecos de cada algoritmo. From 072176275b680d78a3c82c57a9ac10951670632b Mon Sep 17 00:00:00 2001 From: mnovaispimenta Date: Mon, 17 Aug 2020 06:55:52 +0100 Subject: [PATCH 222/263] Add code-exercises.com to challenge sites section --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c54ce31..4dbf738 100644 --- a/README.md +++ b/README.md @@ -1318,6 +1318,7 @@ Challenge sites: - [Geeks for Geeks](http://www.geeksforgeeks.org/) - [InterviewBit](https://www.interviewbit.com/invite/icjf) - [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) +- [Code Exercises](https://code-exercises.com) Language-learning sites, with challenges: - [Codewars](http://www.codewars.com) From 6108b54c0a539cd736a549a0e71d8fde5cc7c1b2 Mon Sep 17 00:00:00 2001 From: justaaguy <69151483+justaaguy@users.noreply.github.com> Date: Fri, 21 Aug 2020 09:06:35 +0530 Subject: [PATCH 223/263] Fixed Broken link - Steven Skiena Lecture slides - Fixed Broken link to the lecture slides. - Used internet archive as the source --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c54ce31..1273686 100644 --- a/README.md +++ b/README.md @@ -484,7 +484,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [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) + - [slides](https://archive.org/details/lecture2_202008) - [ ] [A Gentle Introduction to Algorithm Complexity Analysis](http://discrete.gr/complexity/) - [ ] [Orders of Growth (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/orders-of-growth-6PKkX) - [ ] [Asymptotics (video)](https://www.coursera.org/lecture/algorithmic-thinking-1/asymptotics-bXAtM) From 7bac392e30934bd853063491ab91ab06f6fb1699 Mon Sep 17 00:00:00 2001 From: Nidhirajput1301 Date: Sun, 23 Aug 2020 00:06:17 +0530 Subject: [PATCH 224/263] Update programming-language-resources.md --- programming-language-resources.md | 1 + 1 file changed, 1 insertion(+) diff --git a/programming-language-resources.md b/programming-language-resources.md index c4d93f8..a50dbd8 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -14,6 +14,7 @@ - [STL Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/STL%20Quick%20Reference%201.29.pdf) - basics - pointers + - class and object - functions - references - templates From 47c3948efab38d3cc05f7a950ce68736d9357f3c Mon Sep 17 00:00:00 2001 From: Ca Chen Date: Mon, 31 Aug 2020 14:04:57 +0800 Subject: [PATCH 225/263] update README-tw --- translations/README-tw.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-tw.md b/translations/README-tw.md index eca3b64..0237ac3 100644 --- a/translations/README-tw.md +++ b/translations/README-tw.md @@ -431,7 +431,7 @@ ## 先備知識 -- [ ] **學習C++** +- [ ] **學習C** - C語言無所不在。在你學習的過程中,幾乎任何一本書、課程,或者影片中你都能看到他的身影。 - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - 這本書還滿輕薄的,但他能讓你有初步對於C語言的認識。看著這本書並且練習,你能更快地掌握C語言。理解C語言能讓你更了解程式的運作以及內部記憶體配置。 From 5b3accaaca683432497f10a88e8b8de377445c08 Mon Sep 17 00:00:00 2001 From: rakshaa2000 Date: Mon, 31 Aug 2020 17:29:59 +0530 Subject: [PATCH 226/263] Added resources for c++ and python --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1273686..c835abb 100644 --- a/README.md +++ b/README.md @@ -333,6 +333,9 @@ I haven't read these two, but they are highly rated and written by Sedgewick. He - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) - [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) +- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf) + - Rich and detailed collection of Data Structures and Algorithms. + - Great for first-timers. If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. @@ -357,7 +360,7 @@ OR: - I loved this book. It covered everything and more. - Pythonic code - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ - +- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf) ## Before you Get Started @@ -466,6 +469,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - This is a short book, but it will give you a great handle on the C language and if you practice it a little you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - [answers to questions](https://github.com/lekkas/c-algorithms) + - [ ] [The C Programming Language](https://www.amazon.in/Programming-Language-Kernighan-Dennis-Ritchie/dp/9332549443/ref=sr_1_1?dchild=1&qid=1598874882&refinements=p_27%3ADennis+Ritchie&s=books&sr=1-1) + - This is the original documentation, guide, tutorial and a comprehensive book to learn and master the C language. It includes exercises for practice as well. - [ ] **How computers process a program:** - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) From 33591b901de7f3386d816a0a63ae813edec55c84 Mon Sep 17 00:00:00 2001 From: rakshaa2000 Date: Mon, 31 Aug 2020 17:31:58 +0530 Subject: [PATCH 227/263] Changed resource --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index c835abb..a3a539e 100644 --- a/README.md +++ b/README.md @@ -465,12 +465,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] **Learn C** - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. - - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - [ ] [The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - This is a short book, but it will give you a great handle on the C language and if you practice it a little you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - [answers to questions](https://github.com/lekkas/c-algorithms) - - [ ] [The C Programming Language](https://www.amazon.in/Programming-Language-Kernighan-Dennis-Ritchie/dp/9332549443/ref=sr_1_1?dchild=1&qid=1598874882&refinements=p_27%3ADennis+Ritchie&s=books&sr=1-1) - - This is the original documentation, guide, tutorial and a comprehensive book to learn and master the C language. It includes exercises for practice as well. - [ ] **How computers process a program:** - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) From 3b504bbbeca5ff99367ec0d1e01978e664f11bab Mon Sep 17 00:00:00 2001 From: Ramazan Sakin Date: Tue, 1 Sep 2020 14:08:11 +0300 Subject: [PATCH 228/263] Update README.md Typo fix --- README.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index a3a539e..53ac133 100644 --- a/README.md +++ b/README.md @@ -371,9 +371,9 @@ 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. +through my notes and making flashcards, so I could review. -Read please so you won't make my mistakes: +Please, read so you won't make my mistakes: [Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). @@ -384,7 +384,7 @@ A course recommended to me (haven't taken it): [Learning how to Learn](https://w 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, wherever I am. +I made a mobile-first website, so I could review on my phone and tablet, wherever I am. Make your own for free: @@ -448,7 +448,7 @@ You don't need all these. You need only [one language for the interview](#pick-o 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 or Java)) -- 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) +- 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. @@ -468,7 +468,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - This is a short book, but it will give you a great handle on the C language and if you practice it a little you'll quickly get proficient. Understanding C helps you understand how programs and memory work. - - [answers to questions](https://github.com/lekkas/c-algorithms) + - [Answers to questions](https://github.com/lekkas/c-algorithms) - [ ] **How computers process a program:** - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) @@ -481,7 +481,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - Nothing to implement - There are a lot of videos here. Just watch enough until you understand it. You can always come back and review. -- 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. +- If some lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge. - [ ] [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) @@ -515,7 +515,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 + - [ ] 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 @@ -554,7 +554,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input (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): + - [ ] 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) @@ -620,7 +620,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/lecture/data-structures/instant-uploads-and-storage-optimization-in-dropbox-DvaIb) - [Distributed Hash Tables (video)](https://www.coursera.org/lecture/data-structures/distributed-hash-tables-tvH8H) - - [ ] implement with array using linear probing + - [ ] 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) @@ -654,13 +654,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [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 + - [ ] 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) - - [ ] swap values: + - [ ] Swap values: - [Swap](https://bits.stephan-brumme.com/swap.html) - - [ ] absolute value: + - [ ] Absolute value: - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) ## Trees @@ -748,7 +748,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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?") + - [ ] 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/) @@ -829,7 +829,7 @@ Graphs can be used to represent many problems in computer science, so this secti - adjacency list - adjacency map - 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 + - BFS and DFS - know their computational complexity, their trade offs, and how to implement them in real code - When asked a question, look for a graph-based solution first, then move on if none. - [ ] MIT(videos): @@ -1513,7 +1513,7 @@ You're never really done. - ### Information theory (videos) - [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory) - - more about Markov processes: + - 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) @@ -1668,7 +1668,7 @@ You're never really done. - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - **Red/black trees** - - these are a translation of a 2-3 tree (see below) + - These are a translation of a 2-3 tree (see below). - 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, @@ -1707,7 +1707,7 @@ You're never really done. - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - **B-Trees** - - fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor) + - 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 @@ -1765,7 +1765,7 @@ You're never really done. - [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) - ### Discrete math - - see videos below + - See videos below - ### Machine Learning - Why ML? From 6f54eeb8c94415304a7e99ff2f9e34d463330631 Mon Sep 17 00:00:00 2001 From: Alexandro <52381045+Alexandro-845@users.noreply.github.com> Date: Tue, 8 Sep 2020 23:22:06 -0300 Subject: [PATCH 229/263] Update README-ptbr.md --- translations/README-ptbr.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index 4110012..7eeef50 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -73,13 +73,13 @@ Se você quer ser um engenheiro de confiabilidade ou engenheiro de sistemas, est - [Conhecimento Prévio](#conhecimento-prévio) - [Complexidade Algorítmica / Big-O / Análise assintótica](#complexidade-algorítmica--big-o--análise-assintótica) - [Estrutura de Dados](#estrutura-de-dados) - - [Arrays](#arrays) - - [Listas Ligadas](#listas-ligadas) - - [Stack](#stack) - - [Queue (Fila)](#queue-fila) + - [Vetores (Arrays)](#arrays) + - [Listas Ligadas (Linked List)](#listas-ligadas) + - [Pilha (Stack)](#stack) + - [Fila (Queue)](#queue-fila) - [Tabela hash](#tabela-hash) - [Mais Conhecimento](#mais-conhecimento) - - [Busca binária](#busca-binária) + - [Busca binária ( Binary Search)](#busca-binária) - [Lógica binária](#lógica-binária) - [Árvores](#Árvores) - [Árvores - Anotações e Fundamentos](#Árvores---anotações-e-fundamentos) @@ -88,17 +88,17 @@ Se você quer ser um engenheiro de confiabilidade ou engenheiro de sistemas, est - árvores de busca balanceadas (conceito geral, não detalhes) - transversais: pré-ordem, em-ordem (ordem simétrica), pós-ordem, busca em largura, busca em profundidade - [Ordenação](#ordenação) - - seleção - - inserção - - heapsort - - quicksort - - ordenação por mistura (merge sort) + - Seleção + - Inserção + - Heapsort + - Quicksort + - Merge sort - [Grafos](#grafos) - - directed - - undirected - - matriz de adjacência - - lista de adjacência - - traversals: BFS, DFS + - Diretos + - Indiretos + - Matriz de Adjacência + - Lista de Adjacência + - Traversals: BFS, DFS - [Ainda Mais Conhecimento](#ainda-mais-conhecimento) - [Recursão](#recursão) - [Programação Dinâmica](#programação-dinâmica) @@ -113,7 +113,7 @@ Se você quer ser um engenheiro de confiabilidade ou engenheiro de sistemas, est - [Agendamento](#agendamento) - [Implementar rotinas de sistema](#implementar-rotinas-de-sistema) - [Busca de string e manipulações](#busca-de-string-e-manipulações) - - [Tries (ou Árvore de Prefixos)](#tries-ou-Árvore-de-prefixos) + - [Árvore de Prefixos (Tries)](#tries-ou-Árvore-de-prefixos) - [Números de Ponto Flutuantes ("Floating Point Numbers")](#números-de-ponto-flutuantes-floating-point-numbers) - [Unicode](#unicode) - [Extremidade (ordenação) (ou "endianness" em Inglês)](#extremidade-ordenação-ou-endianness-em-inglês) From 05839f6be5d05491ba7d088aa65522b15296868a Mon Sep 17 00:00:00 2001 From: Alexandro <52381045+Alexandro-845@users.noreply.github.com> Date: Sun, 13 Sep 2020 13:36:50 -0300 Subject: [PATCH 230/263] Update README-ptbr.md --- translations/README-ptbr.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index 7eeef50..5e28435 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -1,12 +1,12 @@ # Universidade de Entrevista de Programação -> Originalmente eu criei isso como uma pequena lista to-do de tópicos de estudo para se tornar um engenheiro de software, -> mas isso cresceu para a grande lista que você vê hoje. Após passar por esse plano de estudo, [Eu fui contratado +> Originalmente eu criei isso como uma pequena lista to-do (a fazer) de tópicos de estudo para se tornar um engenheiro de software, +> mas isso cresceu para este imenso acervo que você consulta hoje. Após passar por todo esse plano de estudo, [Eu fui contratado > como Engenheiro de Desenvolvimento de Software na Amazon](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! > Você provavelmente não vai precisar estudar tanto quanto eu. De qualquer maneira, tudo que você precisa está aqui. > > Os itens listados aqui irão preparar você muito bem para uma entrevista em praticamente qualquer empresa de software, -> incluindo as gigantes: Amazon, Facebook, Google ou Microsoft. +> incluindo as gigantes como: Amazon, Facebook, Google ou Microsoft. > > *Boa sorte para todos vocês!* @@ -42,14 +42,14 @@ Traduções em progresso: ## O que é isso? -Esse é o meu plano de estudo mensal para ir de desenvolvedor web (autodidata, sem formação em Ciência da Computação) à engenheiro de software para uma grande empresa. +Esse é o meu plano de estudo mensal para ir de desenvolvedor web (autodidata, sem formação em Ciência da Computação) à engenheiro de software em uma grande empresa. ![Programando no quadro branco - do Vale do Silício da HBO](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) Essa longa lista foi extraída e expandida a partir das **anotações de treinamento da Google**, então essas são as coisas que você precisa saber. Eu adicionei alguns itens extras no final que podem aparecer na entrevista ou serem úteis para resolver um problema. Muitos itens são da obra “[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)” (Consiga aquele trabalho na Google) de Steve Yegge's e às vezes são expressados palavra-por-palavra nas anotações de treinamento da Google. -Isso é direcionado à **engenheiros de software novos** ou àqueles que estão migrando de desenvolvimento de software/web para engenharia de software (onde conhecimento de ciência da computação é necessário). Se você tem vários anos de experiência e está alegando muitos anos de experiência com engenharia de software, pode esperar por uma entrevista mais difícil. +Isso é direcionado à **novos engenheiros de software**, ou àqueles que estão migrando de desenvolvimento de software/web para engenharia de software, onde conhecimento sobre ciência da computação é necessário. Se você tem vários anos de experiência e está alegando muitos anos de experiência com engenharia de software, pode esperar por uma entrevista mais difícil. Se você tem vários anos de experiência com desenvolvimento de software/web, observe que grandes empresas como Google, Amazon, Facebook e Microsoft consideram engenharia de software como algo distinto de desenvolvimento de software/web e elas requerem conhecimento de ciência da computação. @@ -77,7 +77,7 @@ Se você quer ser um engenheiro de confiabilidade ou engenheiro de sistemas, est - [Listas Ligadas (Linked List)](#listas-ligadas) - [Pilha (Stack)](#stack) - [Fila (Queue)](#queue-fila) - - [Tabela hash](#tabela-hash) + - [Tabela hash (Hash Table)](#tabela-hash) - [Mais Conhecimento](#mais-conhecimento) - [Busca binária ( Binary Search)](#busca-binária) - [Lógica binária](#lógica-binária) @@ -178,13 +178,13 @@ Se você quer ser um engenheiro de confiabilidade ou engenheiro de sistemas, est ## Por que usar? Quando eu comecei esse projeto, eu não sabia diferenciar memória dinâmica de memória estática, não sabia notação Big-O, árvores, ou como percorrer um grafo. Se eu tivesse que escrever um algoritmo de ordenação, eu posso te dizer que ele não seria muito bom. -Todas as estruturas de dados que eu já usei eram construídas dentro da linguagem, e eu não sabia como elas funcionavam por debaixo dos panos. Eu nunca tive que gerenciar memória a não ser que um processo que eu estava rodando desse um erro de "memória insuficiente", nesse caso eu teria que dar um jeito. Eu já usei alguns arrays multidimensionais na minha vida e milhares de arrays associativos, mas eu nunca criei estruturas de dados do zero. +Todas as estruturas de dados que eu já usei eram construídas dentro da linguagem, e eu não sabia como elas funcionavam por debaixo dos panos. Eu nunca tive que gerenciar memória a não ser que um processo que eu estava rodando desse um erro de "memória insuficiente", nesse caso eu teria que dar um jeito. Eu já usei alguns vetores multidimensionais na minha vida e milhares de vetores associativos, mas eu nunca criei estruturas de dados do zero. É um longo plano. Você vai levar meses. Se você já é familiarizado com muitas dessas coisas, você vai precisar de muito menos tempo. ## Como usar -Tudo abaixo é um esboço, e você deve abordar os itens em ordem de cima para baixo. +**Tudo abaixo é um esboço**, e você deve abordar os itens em ordem de cima para baixo. Eu estou usando a sintaxe de markdown especial do Github, incluindo listas de tarefas para verificar o progresso. @@ -393,9 +393,9 @@ OU: ## Antes de começar -Essa lista cresceu por longos meses, e sim, ela meio que saiu do controle. +Essa lista cresceu por longos meses, e sim, ela meio que saiu do controle! -Aqui estão alguns erros que eu cometi para que você tenha uma experiência melhor. +**Aqui estão alguns erros que eu cometi para que você tenha uma experiência melhor**. ### 1. Você não se lembrará de tudo From 02f9dbb14ee060b6bc8b960c243070c82b393c12 Mon Sep 17 00:00:00 2001 From: emmanuelepp Date: Wed, 16 Sep 2020 11:44:10 -0400 Subject: [PATCH 231/263] Update README-es.md Grammar error corrected. --- translations/README-es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-es.md b/translations/README-es.md index f3c244d..4acc4ef 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -415,7 +415,7 @@ Tenga en cuenta que empecé desde abajo y hay tarjetas que cubren todo, desde el Una alternativa a usar mi sitio de tarjetas es [Anki](http://ankisrs.net/), que me ha sido recomendado muchas veces. Usa un sistema de repetición para ayudarle a recordar. Es amigable con el usuario y disponible para todas las plataformas y tiene un sistema de sincronización en la nube. Cuesta $25 en iOS pero es gratuito en las otras plataformas. -Mis tarjetas en ek formato de Anki: https://ankiweb.net/shared/info/25173560 (Gracias[@xiewenya](https://github.com/xiewenya)) +Mis tarjetas en el formato de Anki: https://ankiweb.net/shared/info/25173560 (Gracias[@xiewenya](https://github.com/xiewenya)) ### 3. Revise, revise, revise From 6f8c666f1979a995caf4f1f30e33bfd344477ff9 Mon Sep 17 00:00:00 2001 From: Se-Ok Jeon <33389418+JadeTheZapper@users.noreply.github.com> Date: Tue, 22 Sep 2020 15:27:04 +0900 Subject: [PATCH 232/263] Update README-ko.md --- translations/README-ko.md | 913 +++++++++++++++++--------------------- 1 file changed, 403 insertions(+), 510 deletions(-) diff --git a/translations/README-ko.md b/translations/README-ko.md index 42c8854..e194ae8 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -5,6 +5,8 @@ > [나는 아마존에 소프트웨어 엔지니어로 채용됐다](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! > 당신은 아마 내가 한 것처럼 많이 공부할 필요는 없을 것이다. 어쨌든 당신이 필요로 하는 모든 것은 여기에 있다. > +> 몇 달 동안 하루에 8-12 시간 정도 공부했습니다. 이것이 제 이야기입니다. [Google 인터뷰를 위해 8 개월 동안 풀 타임으로 공부 한 이유](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> > 여기에 나열된 목록들은 아마존, 페이스북, 구글, 마이크로소프트 같은 거대 기업을 포함한 거의 모든 소프트웨어 회사의 인터뷰를 준비하는데에 도움이 될것이다. > > @@ -14,32 +16,34 @@
번역: -- [베트남어](translations/README-vi.md) -- [브라질 포르투갈어](translations/README-ptbr.md) -- [스페인어](translations/README-es.md) - [중국어](translations/README-cn.md) +- [베트남어](translations/README-vi.md) +- [스페인어](translations/README-es.md) +- [브라질 포르투갈어](translations/README-ptbr.md) +- [폴란드어](translations/README-pl.md) +- [타이완어](translations/README-tw.md)
진행 중인 번역: -- [그리스어](https://github.com/jwasham/coding-interview-university/issues/166) -- [러시아어](https://github.com/jwasham/coding-interview-university/issues/87) -- [말라얄람어](https://github.com/jwasham/coding-interview-university/issues/239) +- [힌디어](https://github.com/jwasham/coding-interview-university/issues/81) +- [히브리어](https://github.com/jwasham/coding-interview-university/issues/82) - [바하사 인도네시아어](https://github.com/jwasham/coding-interview-university/issues/101) - [아랍어](https://github.com/jwasham/coding-interview-university/issues/98) -- [우르두어](https://github.com/jwasham/coding-interview-university/issues/140) -- [우크라이나어](https://github.com/jwasham/coding-interview-university/issues/106) -- [이탈리아어](https://github.com/jwasham/coding-interview-university/issues/170) -- [일본어](https://github.com/jwasham/coding-interview-university/issues/257) -- [태국어](https://github.com/jwasham/coding-interview-university/issues/156) - [터키어](https://github.com/jwasham/coding-interview-university/issues/90) -- [텔루구어](https://github.com/jwasham/coding-interview-university/issues/117) -- [폴란드어](https://github.com/jwasham/coding-interview-university/issues/122) - [프랑스어](https://github.com/jwasham/coding-interview-university/issues/89) +- [러시아어](https://github.com/jwasham/coding-interview-university/issues/87) +- [우크라이나어](https://github.com/jwasham/coding-interview-university/issues/106) - [한국어](https://github.com/jwasham/coding-interview-university/issues/118) -- [히브리어](https://github.com/jwasham/coding-interview-university/issues/82) -- [힌디어](https://github.com/jwasham/coding-interview-university/issues/81) +- [텔루구어](https://github.com/jwasham/coding-interview-university/issues/117) +- [우르두어](https://github.com/jwasham/coding-interview-university/issues/140) +- [태국어](https://github.com/jwasham/coding-interview-university/issues/156) +- [그리스어](https://github.com/jwasham/coding-interview-university/issues/166) +- [이탈리아어](https://github.com/jwasham/coding-interview-university/issues/170) +- [말라얄람어](https://github.com/jwasham/coding-interview-university/issues/239) +- [일본어](https://github.com/jwasham/coding-interview-university/issues/257) +
## 코딩 인터뷰 대학이란? @@ -107,7 +111,6 @@ - [NP와 NP-완전, 그리고 근사 알고리즘](#np-np-complete-and-approximation-algorithms) - [캐시](#caches) - [프로세스와 쓰레드](#processes-and-threads) - - [논문](#papers) - [테스트](#테스트) - [스케줄링](#scheduling) - [시스템 루틴의 구현](#implement-system-routines) @@ -116,7 +119,7 @@ - [부동 소수점](#floating-point-numbers) - [유니코드](#unicode) - [엔디언(Endianness)](#endianness) -- [네트워크](#networking) + - [네트워크](#networking) - [시스템 디자인, 확장성, 데이터 핸들링](#시스템-디자인-확장성-데이터-핸들링) (4년 이상 경력자를 위한 주제) - [최종 검토](#최종-검토) - [코딩 문제 연습](#코딩-문제-연습) @@ -132,9 +135,6 @@ - [추가 도서](#additional-books) - [추가 주제](#additional-learning) - [컴파일러](#compilers) - - [부동 소수점 수](#floating-point-numbers) - - [유니코드](#unicode) - - [엔디언](#endianness) - [Emacs 와 vi(m)](#emacs-and-vim) - [유닉스 명령어 도구](#unix-command-line-tools) - [정보 이론](#information-theory-videos) @@ -142,7 +142,6 @@ - [엔트로피](#entropy) - [암호기법](#cryptography) - [압축](#compression) - - [네트워크](#networking) (만약 당신이 네트워크에 대한 경험이 있거나 시스템 엔지이너가 되고 싶다면 받을 수 있는 질문들) - [컴퓨터 보안](#computer-security) - [가비지 콜렉션](#garbage-collection) - [병렬 프로그래밍](#parallel-programming) @@ -154,8 +153,6 @@ - [Locality-Sensitive Hashing](#locality-sensitive-hashing) - [van Emde Boas 트리](#van-emde-boas-trees) - [Augmented Data Structures](#augmented-data-structures) - - [트라이(Tries)](#tries) - - [N-ary (K-ary, M-ary) trees](#n-ary-k-ary-m-ary-trees) - [균형 탐색 트리](#balanced-search-trees) - AVL 트리 - Splay 트리 @@ -177,7 +174,7 @@ - [몇몇 주제에 대한 세부사항](#몇몇-주제에-대한-세부사항) - [영상 자료](#video-series) - [컴퓨터 과학 강의들](#컴퓨터-과학-강의들) -- [라이센스](#라이센스) +- [논문들](#논문들) --- @@ -194,8 +191,7 @@ ## 어떻게 사용하면 되나요? -
-How to use it? + 아래의 모든 것은 대략적인 개요이며 당신은 위에서 아래 순서대로 진행해야 한다. @@ -205,6 +201,12 @@ 브랜치를 포크하고 아래의 명령을 따라라 +포크 버튼을 눌러 Github https://github.com/jwasham/coding-interview-university 레포지토리를 포크하라. + + 로컬 레포지토리에 클론하라. + +`git clone git@github.com:/coding-interview-university.git` + `git checkout -b progress` `git remote add jwasham https://github.com/jwasham/coding-interview-university` @@ -219,48 +221,47 @@ `git rebase jwasham/master ` -`git push --force ` +`git push --set-upstream origin progress` + +`git push --force` [Github식 마크다운에 대하여](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) -
- ## 당신은 충분히 똑똑합니다 - 성공한 소프트웨어 엔지니어들은 똑똑합니다. 하지만 그들 조차도 자신들의 지적 능력면에 대해서 불안감을 갖기 일쑤입니다. - [천재 프로그래머에 대한 미신(迷信)](https://www.youtube.com/watch?v=0SARbwvhupQ) - [위험한 홀로서기: 테크 산업의 보이지 않는 괴물들의 전쟁](https://www.youtube.com/watch?v=1i8ylq4j_EY) -- [Believe you can change](http://www.aaronsw.com/weblog/dweck) ## 영상 자료에 관하여 -몇몇 영상들은 Cousera, Edx, Lynda.com 클래스에 등록하여야만 시청이 가능합니다. 이것들은 MOOCs라고 불리는데요. -강의가 없는 경우에는 몇 달 동안 기다려야 할 수도 있습니다. Lynda.com 강좌들은 무료가 아닙니다. +몇몇 영상들은 Cousera, Edx에 등록을 해야만 접근할 수 있습니다. 이것들은 MOOCs라고 불리는데요. +강의가 없는 경우에는 몇 달 동안 기다려야 할 수도 있습니다. 여러분이 YouTube 온라인 강의 동영상과 같이 무료이고 항상 접근 가능한 동영상 소스들을 추가해주면 정말 감사하겠습니다. 저는 대학 강의 듣는 것을 좋아합니다. ## 인터뷰 과정 & 전반적인 인터뷰 준비 과정 -
-인터뷰 과정 & 전반적인 인터뷰 준비 과정 - - [ ] [ABC: 항상 코딩 하라](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) - [ ] [화이트 보드 쓰기](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) -- [ ] [코딩 인터뷰에서 화이트 보드 효율적으로 쓰기](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/) - [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] Big 4에 취업하는 방법: + - [ ] ['Big 4에 취업하는 방법 - Amazon, Facebook, Google & Microsoft' (영상)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - [ ] 코딩 인터뷰 정복 Set 1: - [ ] [Gayle L McDowell - 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) - [ ] [저자와 함께하는 코딩 인터뷰 정복 (영상)](https://www.youtube.com/watch?v=aClxtDcdpsQ) -- [ ] Big 4에 취업하는 방법: - - [ ] ['Big 4에 취업하는 방법 - Amazon, Facebook, Google & Microsoft' (영상)](https://www.youtube.com/watch?v=YJZCUhxNCv8) - +- [ ] 페이스북 코딩 인터뷰 정복 + - [ ] [접근법](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [문제 풀이](https://www.youtube.com/watch?v=4UWDyJq8jZg) - [ ] 준비 코스: - [ ] [소프트웨어 엔지니어 인터뷰 대공개 (유료 강좌)](https://www.udemy.com/software-engineer-interview-unleashed): - 전직 구글 면접관이 당신이 어떻게 소프트웨어 엔지니어 인터뷰를 준비해야 하는지 알려줍니다. - [ ] [자료 구조, 알고리즘 그리고 면접을 위한 파이썬! (유료 강좌)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): - 자료 구조와 알고리즘, 모의 면접 등을 다루는 파이썬 중점 면접의 준비 강좌입니다. - -
+ - [ ] [Intro to Data Structures and Algorithms using Python (Udacity 무료 강좌))](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - 파이썬 중심적 자료구조와 알고리즘 강좌. + - [ ] [자료구조와 알고리즘 나노학위! (Udacity 유료 나노학위)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - 100개 이상의 자료구조, 알고리즘 실습과 당신의 인터뷰, 취업을 도울 섬세한 멘토의 가이드 ## 인터뷰를 위한 언어 고르기 @@ -275,9 +276,11 @@ - JavaScript - Ruby +코딩 인터뷰를 위한 언어를 선택하는 것과 관련하여 제가 쓴 글입니다: [코딩 인터뷰를 위한 언어 선택하기](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) + 당신은 당신의 언어에 매우 익숙하고 그 언어에 대해 잘 알아야 합니다. -언어 선택을 도움이 될 만한 읽을 거리들 +언어 선택에 도움이 될 만한 읽을 거리들 - http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/ - http://blog.codingforinterviews.com/best-programming-language-jobs/ @@ -298,47 +301,16 @@ - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - JAVA 문제의 답변을 위해서 -
-만일 당신이 많은 여유 시간이 있다면: +### 만일 당신이 많은 여유 시간이 있다면: + +하나를 선택: - [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - - 모든 코드가 C++로 되어있다, 만일 당신의 인터뷰에서 C++를 사용하길 고려한다면 정말 좋은 책이다. - - 일반적인 문제들을 해결하기 위해 좋은 책이다. +- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) - [ ] Elements of Programming Interviews (Java version) - [book](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) -
- -### 컴퓨터 구조 - -- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - 이 책은 2004년에 출판된 다소 구식의 책이지만, 간략히 컴퓨터를 이해하는 데에 훌륭한 자료입니다. - - 이 책의 저자는 HLA를 발명했습니다. 그래서 회의적인 시선으로 HLA에 대해 언급하고 예로 듭니다. 널리 읽히지는 않지만, 어셈블리가 어떻게 생겼는 지를 보여주는 좋은 예입니다. - - 이 장들은 당신에게 탄탄한 기초를 세워줄 것입니다: -
- ...... - - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization - -
- -
-만약에 시간적 여유가 좀 더 있다면 아래 서적을 읽어보는 것을 권유합니다. - -- [ ] [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/) - - For a richer, more up-to-date (2011), but longer treatment - -
- ### 특정 언어 관련 **인터뷰를 위해 당신의 언어를 선택하여야 합니다 (윗글 참조)** 아래는 제가 추천하는 언어들입니다. 이 언어들중에 부연설명이나 부가 자료들이 있다면 나눠 주세요. @@ -351,23 +323,18 @@ ### C++ -
-C++ - 나는 아래의 두 책들을 읽지 않았습니다. 하지만 Sedgewick이 높게 평가한 책들입니다. 그는 정말 대단한 사람입니다. - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) - [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) +- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf) + - 자세하고 많은 자료구조와 알고리즘. + - 처음 시도 하는 사람에게 좋은 선택. C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적인 자료를 찾고 있습니다. -
- ### Java -
-Java - - [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) - videos with book content (and Sedgewick!) on coursera: - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) @@ -380,63 +347,14 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적 - UC버클리 대학의 CS입문 과정의 선택 텍스트로 사용됨 - 아래에서 Python 버전에 대한 나의 책 보고서를 참조하십시오. 이 책은 동일한 주제를 다루고 있습니다. -
- ### Python -
-Python - - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - by Goodrich, Tamassia, Goldwasser - 나는 이 책을 사랑한다. 이 책은 모든 것을 다룬다. - Pythonic code - 나의 열렬한 서적 보고서: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ - -
- -### 선택 도서 - -**어떤 사람들은 이 책들을 추천한다. 하지만 만약 당신이 소프트웨어 엔지니어링 분야에 오랜 경험이 있고, 그로 인해 훨씬 더 어려운 인터뷰를 볼 것이라 생각하지 않는다면, 나는 이 책들을 공부하는 것이 너무 과하다고 생각한다:** - -
-Optional Books - -- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - 알고리즘 카탈로그 부분은 면접에서 다루는 난이도의 범주를 훨씬 넘깁니다. - - 이 책은 2개의 파트가 있습니다: - - class textbook on data structures and algorithms - - 장점: - - is a good review as any algorithms textbook would be - - 산학과 연구에서 문제들을 해결한 그의 경험을 이야기하는 것이 좋음 - - 예제 코드가 C언어 - - 단점: - - CLRS처럼 너무 함축되어 있어서 헤아리기 힘들 수 있다. 그래서 어떤 주제는 CLRS를 읽는 게 더 나을 수도 있다. - - 7, 8, 9장은 따라가기 힘들 수 있다. 어떤 항목들은 설명이 잘 안되어있거나 더 많은 배경 지식이 필요하기 때문이다. - - (오해하지 마세요) 전 Skiena씨와 그 분의 교육 스타일과 매너리즘은 좋아합니다만, 스토니브룩 대학의 자료는 그렇지 않더군요. - - 알고리즘 카탈로그: - - 이게 이 책을 사는 진짜 이유 - - about to get to this part. Will update here once I've made my way through it. - - 아마존 킨들에서 도서 대여 가능 - - 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) - -- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **중요:** 이 책을 읽으면 특별한 가치를 얻을 수 있습니다. 이 책은 알고리즘과 자료구조를 훌륭하게 살피고 있지만, 좋은 코드를 작성하는 법을 알려주지는 않습니다. 괜찮은 솔루션을 코드로 효율적으로 옮겨적을 줄 알아야합니다. - - CLR 또는 CLRS로 알려져있습니다. (역: 저자들 이름의 첫글자를 따서 CLRS라고 불리지만, 초판에는 Stein이 없었습니다.) - -- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - 처음 두 장은 (데이터 테이프를 사용한 아주 오래된) 문제를 프로그래밍하는 기발한 솔루션을 보여줍니다. 하지만, - that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. - -- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ - - 좋은 책. 하지만 몇 페이지 넘기면서 문제를 해결한 후에 파스칼, do while 반복문, 1-indexed 배열, unclear post-condition satisfaction results를 보고 좌절했다. - - 다른 책이나 온라인 코딩 문제에 있는 코딩 문제를 보는 게 나을 것 같다. - -
+- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf) ## 시작하기 전에 @@ -452,6 +370,8 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적 [Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/) +내가 추천받은 강좌 (아직 수업을 들어보지는 않았다): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) + ### 2. Flashcard를 사용하자. 이 문제를 해결하기 위해 나는 2가지 종류(일반적인 내용, 코드)의 flashcard를 보관하고 추가할 수 있는 작은 사이트를 만들었다. @@ -476,13 +396,20 @@ C++에 대한 더 나은 추천 책이 있다면 알려주십시오. 포괄적 Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) -### 3. 검토, 검토, 검토 +### 3. 자료구조와 알고리즘을 배우면서 코딩 인터뷰를 시작하라 + +문제를 풀기 위해 배웠던 무언가를 적용하는 것이 필요합니다., 그렇지 않으면 까먹을 겁니다. 내가 이 실수를 했습니다. 한 주제를 익혔다면 , + 링크드 리스트와 같이 그 주제에 좀 익숙해졌다면, 코딩 인터뷰 책 한권을 펴서 링크드 리스트와 관련된 문제를 몇개 풀어보십시오. 그리고 나서 다시 돌아가 다른 링크드리스트 문제를 해결하던, 회귀 문제나 다른 것을 하십시오. 하지만 배우면서 문제를 계속해서 푸십시오. 당신은 지식 자체의 소유가 아니라 그 지식을 적용할 수 있기에 고용되는 것입니다. +다음은 제가 추천하는 책과 사이트들입니다.. +좀 더 알아보고 싶다면: [Coding Question Practice](#coding-question-practice) + +### 4. 검토, 검토, 검토 나는 ASCII, OSI 구조, Big-O 표기법 등에 관한 일련의 치트시트를 만들어 놓고, 여유 시간이 날 때마다 공부한다. 30분 동안 프로그래밍 문제를 해결하고, flashcard를 살펴보자. -### 4. 집중 +### 5. 집중 주의를 산만하게 만드는 많은 것이 있으며, 이것들은 우리의 귀중한 시간을 뺏어간다. 주의를 집중하는 것은 힘든 일이다. @@ -517,9 +444,9 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info 모든 주제에 대한 모든 것을 할 수 없지만 나는 노력했다. 나의 코드를 여기서 확인하세요: - - [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) 당신은 모든 알고리즘에 대해서 기억할 필요는 없다. @@ -527,9 +454,6 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info ## 먼저 알아야 할 지식 -
-Prerequisite Knowledge - - [ ] **C언어 배우기** - C 는 어디에나 있다. 당신은 책이나 강의, 비디오 등 공부하는 동안 모든 곳에서 예제를 볼 것이다. - [ ] [C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) @@ -543,14 +467,11 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [중앙처리장치(CPU) (영상)](https://youtu.be/FZGugFqdr60) - [ ] [명렁어와 프로그램 (영상)](https://youtu.be/zltgXvg6r3k) -
- ## 알고리즘 복잡도 / Big-O / 점근적 분석 -
-Algorithmic complexity / Big-O / Asymptotic analysis - - 구현할 것은 없다. +- 여기에는 다양한 영상들이 있다. 이해할 때까지 충분히 보고 언제든지 다시 돌아와서 복습할 수 있다. +- 일부 강의가 너무 수학적이라면, 아래로 가서 이산 수학에 대한 동영상을 보며 배경 지식을 쌓아보세요. - [ ] [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) @@ -569,16 +490,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [Computational Complexity: Section 2](https://www.topcoder.com/community/competitive-programming/tutorials/computational-complexity-section-2/) - [ ] [Cheat sheet](http://bigocheatsheet.com/) - - 일부 강의가 너무 수학적이라면, 아래로 가서 이산 수학에 대한 동영상을 보며 배경 지식을 쌓아보세요. - -
- ## 자료구조 -
-Data Structures - - ### 배열 - 자동 리사이징 벡터 구현하기 - [ ] 설명: @@ -704,13 +617,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - 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) @@ -731,28 +639,22 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) + - [ ] [Bit Hacks (video)](https://www.youtube.com/watch?v=ZusiKXcz_ac) - [ ] 2의 보수와 1의 보수 - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4) - [1의 보수](https://ko.wikipedia.org/wiki/1의_보수) - [2의 보수](https://ko.wikipedia.org/wiki/2의_보수) - - [ ] count set bits + - [ ] 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](https://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html) - - [ ] swap values: + - [ ] Swap values: - [Swap](https://bits.stephan-brumme.com/swap.html) - - [ ] absolute value: + - [ ] Absolute value: - [Absolute Integer](https://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) @@ -834,13 +736,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info - [ ] heap_sort() - 정렬되지 않은 배열을 받아서 정렬된 배열로 만든다. 추가 메모리 없이 제자리에서 max-heap을 사용한다. - 노트: min-heap을 사용하면 연산을 줄일 수 있지만, 공간이 두 배로 필요합니다. (제자리에서 못 하기 때문에) -
- ## 정렬 -
-Sorting - - [ ] Notes: - 정렬들 구현 & 각 정렬의 최적의 경우/최악의 경우, 평균적인 복잡도를 알기: - 버블 소트 쓰지 마세요 - 끔찍하니까요 - n이 16이하 제외하고 O(n^2) @@ -914,20 +811,16 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info 개략적으로 보자면, 여기에 시각적으로 나타낸 [15가지 정렬 알고리즘들](https://www.youtube.com/watch?v=kPRA0W1kECg)을 보세요. 이 주제에 대해서 더 자세히 알고 싶다면, [몇몇 주제에 대한 세부사항](#몇몇-주제에-대한-세부사항)에서 "정렬" 섹션를 보세요. -
- ## 그래프 -
-Graphs - 그래프는 컴퓨터 과학의 여러 문제들을 표현하는 데 사용할 수 있다. 때문에 이 섹션은 트리나 정렬 섹션처럼 길다. - 노트: - - 메모리에 그래프를 표시하는 세 가지 기본 방법이 있다: + - 메모리에 그래프를 표시하는 네 가지 기본 방법이 있다: - 오브젝트와 포인터 - 행렬 - 인접 리스트 + - 인접 맵 - 각각의 표현과 장단점을 숙지하라. - 넓이 우선 탐색(BFS)와 깊이 우선 탐색(DFS) - 계산상의 복잡성, 장단점, 실제 코드로 구현하는 방법을 알아야 한다. - 질문을 받을 시 먼저 그래프 기반 솔루션을 찾고, 없을 경우에 다른 솔루션으로 넘어가라. @@ -980,13 +873,8 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그래프 실습을 할 수 있습니다. -
- ## Even More Knowledge -
-더 많은 지식 - - ### Recursion - [ ] 재귀와 백트래킹에 대한 스탠포드 대학 강의: - [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) @@ -1000,6 +888,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - ### Dynamic Programming + - 인터뷰에서 DP 문제를 접하지 않을 수도 있습니다. 하지만 알고 있는게 미뤄두는 것 보다 낫습니다. - 이 주제는 아주 어렵습니다. DP로 풀리는 각 문제마다 어떤 점화식을 정의해야 하는데 그게 까다롭습니다. - 얽혀있는 패턴들을 확실히 이해할 때까지, 많은 DP 예시 문제들을 찾아보기를 권합니다. - [ ] Videos: @@ -1026,24 +915,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - ### Object-Oriented Programming - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - - [ ] 객체 지향 소프트웨어 공학: UML과 JAVA를 사용한 소프트웨어 개발 (21개의 영상): - - 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 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) - - [더 알아보기](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) - - [더 알아보기](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) - - [더 알아보기](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) - - [더 알아보기](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) - - [더 알아보기](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) - ### Design patterns - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) @@ -1136,7 +1009,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - Modern concurrency constructs with multicore processors - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - - [Scheduling (video)](https://www.youtube.com/watch?v=-Gu5mYdKbu4&index=4&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8) - 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 the 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. @@ -1152,38 +1024,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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) -- ### 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. - - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) - - [ ] [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) - - [implemented in Go](https://godoc.org/github.com/thomas11/csp) - - [ ] [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? - - [ ] [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) - - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) - - [ ] [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) - - [ ] [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) - - The Dynamo paper kicked off the NoSQL revolution - - [ ] [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) - - [ ] [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) - - [ ] [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) - - ### 테스트 - 알아 두어야 할 것: - 유닛 테스트는 어떻게 작동하는지 @@ -1194,10 +1034,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [소프트웨어 테스트에 대한 James Bach의 무료 강의 (비디오)](https://www.youtube.com/watch?v=ILkT_HV9DVU) - [ ] [Steve Freeman - Test-Driven 개발 (이것은 우리가 의미하는 것은 아니다) (비디오)](https://vimeo.com/83960706) - [참고자료](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) - - [ ] [TDD는 끝났다. 오래 사는 테스팅.](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html) - - [ ] [TDD는 정말 끝났는가? (비디오)](https://www.youtube.com/watch?v=z9quxZsLcfo) - - [ ] [비디오 시리즈 (152 개) - 다 볼 필요 없음 (비디오)](https://www.youtube.com/watch?v=nzJapzxH_rE&list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g) - - [ ] [파이턴과 함께하는 Test-Driven 웹 개발](http://www.obeythetestinggoat.com/pages/book.html#toc) - [ ] 의존성 주입: - [ ] [비디오](https://www.youtube.com/watch?v=IKD2-MAkXyQ) - [ ] [Tao Of Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html) @@ -1207,10 +1043,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - 운영체제(OS)에서 어떻게 동작하는지 - 운영 체제 관련 영상들에서 알아보실 수 있습니다. -- ### Implement system routines - - 당신이 사용하는 프로그래밍 API들이 어떤 이점을 가져오는지 이해하기 - - 그리고 그것들을 구현할 수 있는가? - - ### String searching & manipulations - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) @@ -1272,13 +1104,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) -
- ## 시스템 디자인, 확장성, 데이터 핸들링 -
-System Design, Scalability, Data Handling - - **4년 이상의 경력자라면 이런 시스템 디자인 질문들을 받을 수 있다.** - 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. @@ -1308,10 +1135,11 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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) +- [ ] Consensus Algorithms: + - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: @@ -1345,7 +1173,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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) @@ -1354,7 +1181,6 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [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) @@ -1404,15 +1230,10 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [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/) -
- --- ## 최종 검토 -
-Final Review - 이 섹션에는 중요한 개념들을 빠르게 검토할 수 있는 짧은 영상들이 포함되어 있다. 복습을 하고자 한다면, 이 영상들이 도움이 될 것이다. @@ -1423,15 +1244,10 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 - [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) - [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) -
- --- ## 코딩 문제 연습 -
-Coding Question Practice - 이제 당신은 위의 컴퓨터 과학 주제들을 모두 알고 있으므로, 코딩 문제에 답하는 것을 연습할 차례이다. **코딩 문제 연습은 프로그래밍 문제에 대한 답을 외우는 것이 아니다.** @@ -1450,7 +1266,7 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 소파에 앉아서 연습할 수 있다. 이 것은 내 "소파 화이트보드"이다. 크기 비교를 위해 사진에 펜을 추가하였다. 펜을 쓰면, 곧 지우고 싶어질 것이다. 금방 지저분해 진다. -![my sofa whiteboard](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) +![my sofa whiteboard](https://camo.githubusercontent.com/880d361d19c21cf62d49846283c2742890b53905/68747470733a2f2f64336a32706b6d6a74696e366f752e636c6f756466726f6e742e6e65742f6172745f626f6172645f736d5f322e6a7067) 보충: @@ -1468,13 +1284,8 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 [위의 도서 목록](#도서-목록)을 보세요. -
- ## 코딩 연습/도전 -
-Coding Question Practice - 공부하는 게 머리에 잘 안 들어올 때, 한번 해보세요. 가능한 한 매일 코딩 챌린지를 하는겁니다. @@ -1484,18 +1295,28 @@ Skiena의 책(아래의 책 섹션 참조)과 인터뷰 책에서 더 많은 그 코딩 인터뷰 질문들 영상: - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) +- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - Good explanations of solution and the code. + - You can watch several in a short time. +- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) Challenge sites: - [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) -- [HackerEarth](https://www.hackerearth.com/) + - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing. + - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode) + - See Nick White Videos above for short code-throughs - [HackerRank](https://www.hackerrank.com/) -- [Codility](https://codility.com/programmers/) +- [TopCoder](https://www.topcoder.com/) - [InterviewCake](https://www.interviewcake.com/) - [Geeks for Geeks](http://www.geeksforgeeks.org/) - [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) +- [Code Exercises](https://code-exercises.com) + +Language-learning sites, with challenges: +- [Codewars](http://www.codewars.com) +- [Codility](https://codility.com/programmers/) +- [HackerEarth](https://www.hackerearth.com/) - [Sphere Online Judge (spoj)](http://www.spoj.com/) - [Codechef](https://www.codechef.com/) @@ -1506,8 +1327,7 @@ Challenge repos: - [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews - [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. - -
+- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously. ## 인터뷰가 얼마 남지 않았을 때 @@ -1551,6 +1371,7 @@ Challenge repos: - 지금은 어떤 일을 하고 계신가요? - What do you like about it? - 어떤 Work life를 생각하시나요? +- 워라밸은 어떤게 좋나요? ## 취직했다면 @@ -1576,8 +1397,7 @@ Challenge repos: ## Additional Books -
-Additional Books + 아래는 당신이 흥미로워하는 주제에 대해 공부할 수 있는 자료들입니다. - [ ] [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - an oldie but a goodie @@ -1590,16 +1410,55 @@ Challenge repos: - aka the "Gang Of Four" book, or GOF - the canonical design patterns book - [ ] [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) +- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - Can rent it on kindle + - 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) +- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - These chapters are worth the read to give you a nice foundation: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization +- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - aka CLR, sometimes CLRS, because Stein was late to the game -
+- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) + - For a richer, more up-to-date (2017), but longer treatment + +- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture. ## Additional Learning -
-Additional Learning -These topics will likely not come up in an interview, but I added them to help you become a well-rounded -software engineer, and to be aware of certain technologies and algorithms, so you'll have a bigger toolbox. + 두루 갖춘 소프트웨어 엔지니어가 되는데 도움이 될만한 것들을 추가했습니다. 이를 통해 더 큰 도구들을 다루실 수 있게 되실 겁니다. - ### Compilers - [ ] [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) @@ -1630,116 +1489,115 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - ### Unix command line tools - 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/) + - 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) + - [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: + - [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) + - [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) + - [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) + - [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) + - 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) - ### 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) + - [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 - - [ ] [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) + - [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) + - [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) - ### Messaging, Serialization, and Queueing Systems - - [ ] [Thrift](https://thrift.apache.org/) + - [Thrift](https://thrift.apache.org/) - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) - - [ ] [Protocol Buffers](https://developers.google.com/protocol-buffers/) + - [Protocol Buffers](https://developers.google.com/protocol-buffers/) - [Tutorials](https://developers.google.com/protocol-buffers/docs/tutorials) - - [ ] [gRPC](http://www.grpc.io/) + - [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/) + - [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/) + - [Amazon SQS (queue)](https://aws.amazon.com/sqs/) + - [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/) + - [RabbitMQ](https://www.rabbitmq.com/) - [Get Started](https://www.rabbitmq.com/getstarted.html) - - [ ] [Celery](http://www.celeryproject.org/) + - [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/) + - [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/) + - [ActiveMQ](http://activemq.apache.org/) + - [Kafka](http://kafka.apache.org/documentation.html#introduction) + - [MessagePack](http://msgpack.org/index.html) + - [Avro](https://avro.apache.org/) - ### 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) + - [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) - ### Fast Fourier Transform - - [ ] [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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/) + - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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) @@ -1757,11 +1615,11 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### 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) + - [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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) + - [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) - ### Balanced search trees - Know at least one type of balanced binary tree (and know how it's implemented): @@ -1775,31 +1633,31 @@ software engineer, and to be aware of certain technologies and algorithms, so yo 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) + - [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - - [ ] **AVL trees** + - **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) + - [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** + - **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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - - [ ] MIT Lecture: Splay Trees: + - [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - MIT Lecture: Splay Trees: - Gets very mathy, but watch the last 10 minutes for sure. - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - - [ ] **Red/black trees** + - **Red/black trees** - these are a translation of a 2-3 tree (see below) - In practice: Red–black trees offer worst-case guarantees for insertion time, deletion time, and search time. @@ -1809,47 +1667,47 @@ software engineer, and to be aware of certain technologies and algorithms, so yo 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) - - [ ] [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) + - [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) + - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) - - [ ] **2-3 search trees** + - **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) + - [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)** + - **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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - - [ ] [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) + - [CS 61B Lecture 26: Balanced Search Trees (video)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [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) - - [ ] **N-ary (K-ary, M-ary) 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) + - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - - [ ] **B-Trees** + - **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) + - [B-Tree](https://en.wikipedia.org/wiki/B-tree) + - [B-Tree Definition and Insertion (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) + - [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) @@ -1857,57 +1715,57 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - ### k-D Trees - great for finding number of points in a rectangle or higher dimension object - a good fit for k-nearest neighbors - - [ ] [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [ ] [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ### 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) + - [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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) - - [ ] [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) - - [ ] [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) + - [Ford-Fulkerson in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [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 - - [ ] [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) - - [ ] [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) - ### 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) + - [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) + - [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) - - [ ] [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) + - [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) + - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) - ### 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) + - [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 - 아래에 있는 영상을 확인하세요. - ### 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/) + - 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) @@ -1925,163 +1783,198 @@ software engineer, and to be aware of certain technologies and algorithms, so yo - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - Data School: http://www.dataschool.io/ -
- --- ## 몇몇 주제에 대한 세부사항 -
-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? -- [ ] **Union-Find** - - [ ] [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) +- **SOLID** + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] 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 but 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) -- [ ] **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) +- **Union-Find** + - [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) -- [ ] 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) +- **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) -- [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) +- **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) -- [ ] **문자열 매칭 - - [ ] 라빈-카프(Rabin-Karp) (동영상): +- 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) + +- **문자열 매칭 + - 라빈-카프(Rabin-Karp) (동영상): - [라빈 카프 알고리즘](https://www.coursera.org/learn/data-structures/lecture/c0Qkw/rabin-karps-algorithm) - [Precomputing](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): + - Knuth-Morris-Pratt (KMP): - [The Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) - - [ ] 보이어-무어(Boyer–Moore) 문자열 검색 알고리즘 + - 보이어-무어(Boyer–Moore) 문자열 검색 알고리즘 - [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) + - [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) - starts off great, but by the time it gets past KMP it gets more complicated than it needs to be - 트라이(tries)에 대해서 잘 설명하고 있다. - 이건 생략 가능 -- [ ] **정렬** +- **정렬** - - [ ] 스탠포드 대학의 정렬 강의들: - - [ ] [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) - -
+ - 스탠포드 대학의 정렬 강의들: + - [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) ## Video Series 편하게 보세요. "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 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) -- [ ] [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) -- [ ] [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) -- [ ] [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](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) -- [ ] [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) +- [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) -- [ ] [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) +- [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) -- [ ] [Discrete Mathematics Part 1 by Sarada Herke (5 videos)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) - -- [ ] CSE373 - Analysis of Algorithms (25 videos) +- 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://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) +- [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) -- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) +- [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) -- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) +- [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-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: 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)~~ +- ~~[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-) +- [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) +- [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.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.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.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.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.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.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.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.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) -- [ ] [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) +- [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) -- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) +- [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) -- [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) +- [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) -- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) +- [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) -- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) +- [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) -- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) - -
+- [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) ## 컴퓨터 과학 강의들 -
-Computer Science Courses - - [컴퓨터 과학 온라인 강의들](https://github.com/open-source-society/computer-science) - [(많은 온라인 강의가 있는) 컴퓨터 과학 강의들](https://github.com/prakhar1989/awesome-courses) -
+## 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) + +## Papers +- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) +- [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) +- [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? +- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) +- [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) +- [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - The Dynamo paper kicked off the NoSQL revolution +- [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) +- [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) +- [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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) ## 라이센스 From 9078ff16af18cff805b7b9f769675d7e7d80da96 Mon Sep 17 00:00:00 2001 From: ajinkyal121 Date: Thu, 24 Sep 2020 01:28:50 +0530 Subject: [PATCH 233/263] Create python coding essentials file --- ...ing Interview Python Language Essentials.pdf | Bin 0 -> 81135 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 extras/cheat sheets/Coding Interview Python Language Essentials.pdf diff --git a/extras/cheat sheets/Coding Interview Python Language Essentials.pdf b/extras/cheat sheets/Coding Interview Python Language Essentials.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c8988b8519ba704d13fb5be5ce38589ef6eaa0e7 GIT binary patch literal 81135 zcma&N1yCh1obC&QyTid{a6Py?gTtVMySux)ySux)yAAF#xF6gd2Hx!6du!iT?Ys4= zl2j`B@~=*JS1P~$Iur_G;tb4;Z15C|=cjw{%p^b(J3~u&K0YQ}H|Ba?rP%2pNzO#jA`*l+>=b^NE;!p>IAz}bX^T8xJU$N~g%v#>IA zvvaVq(E))}|I$C5oSpIiT_PX=Z(?iwAD6)TUzcKJK*9{qBqB$`ByZ9DFnl~;3o=~p$Lamt`8rJ1 z`%aTjvliv}1Euqiz1uvK&W?-zLNkWQpnJi-}>%%iDVjjRd zzz{%br}W;zH6qA;eD9xS>4gv|=~26W_d?FQncL~IdvMn-xrLlU*oxoa*JF)&Ltc!$ zR6ezJ5_oXSTW2-g1l9@C=Y9HkempeB2P{ZOIAYVlCBtf?g(@qp+P?cH6;69V4Pd4s zZn-3WUXqUFAQ@28$1JuvSz~Qo zx>4&o#Q2sTqFkD&d(X@l`+{OCcZmh|=U4vwktTZS@|WQUx4K1*0UR@<-a3UxAK!fm zD14&bO`rcg9^02F$4x~TBy*E7pdNi`hj(pFJ!wW6zlWFrx6a<7Zn)j96>kc zwMNaB!P>N)oAv7EeDCWSeP#xzu`xi)>{c^R zDppp9rsu=8g$qTqv4>wow^WsOJ@E~1j)e>0LhK!;oZ%W_Yd7heMbD2`t0y*Cj{8EP zIQ+ePCHI|2bs!?8@GYgnO2d2#J&(lPKh)etLoNisWy$%V>uFA+M;f9;Xf$kuU(J^J zIcWZtd5>!vaMf}8xx0DKfa5(0wc|LDM~3t95sO}+M#(?{Fl&40-!5MiZSFW@ti0$4 zoHJ1$;~M=fq2UzEs^s;OLPBhKlcb4Z?#)IQZEiqTvcno88UY`;*-PNj;1F!casPBb7GJ8*RztlWsfxav+AssOsmiPXrO`v@XG7bc?` zT?FbGw;*tryqJbU1)%Mff{q7GHN(!dw2=#VYneejvuSBXY_!B(ASkDhX-{d98&;ak zU+||-7ge=1z{;uopV6-T3pQz495zzO-cg5YkM=*|IjZzJmh&CuQL@n*#jb014xAZ@4 zs@Rt1?r&lM0YvyDL}8<*r0DcpB{Qf>qRSs#CZO$g8GPlS?A*d3%19WL@a({aqOmbB zZS+lAj34zqr6d-vqE% z56}1@pcXT@aRXJWb7iAGRP?!i9hMfs*XwXFOi<6aD&TaP3k(MiHmGZo^FE`-nm!R) zy>WBpvUzzcs#o(>dd0PbhPx}H|4NETLy$F;o5a!&pl71%zLlkHaRQ64sS>oy;TJ&# z4|%|{oOv$wY@}#=m6uQ-Z*T^k0=#~Tm`;pNO0IeTs7ycEz*MvQueDU;xd}n_V9CX=(@&KG+@dNS`%g~okqP6w={N6#PtWD=NKWUb zvLbuFhD7T_qZIb4ux-U_^1M&G=cyEo#e?(`-oqf|JgVN_fOq#LPy0NLSjT~>00hbF zhkQ{}R|l5+$I@5}cC9Q{OXVO}UrY&cmF?lf;TAjl#o#s$-Z6#6OVkR@Y=%5Vx*ZY3 z6C0`_iX@}?^hfXCyQJRP1DxyAyC_>H))&Nf#@5I}?DI89(^@(^cT4dlnz+1$FaAF} z0uUubdt1^|2-2dbuM8~lRlabmn8Q5A+*Q!1yFlB#%(UV{cy1Z-6+>xVuDp}6COSx5FMRDC5 z2t;buvOG;yok@qmk3-Pap0Z4kT22@36x;IgVv6dtEq)O^Fu5gUFPen08a?lkmd<0g zxUWiEdDMErG3!o^8VepiOH=RESO;x&9qrIZn0w1&Uwf^5-FiCEr=}VcJS7=6K|ntp zcc*u)Kla3|KfbS+Z7|x90ukTa-Q1pl2BQ>hH{77c(fBO+r?sr97aQ&aeyy#z*YjnD z9}#nP4nCY#cX-DMQ{~XX=mlpt&@*ui?&e0T>3^RDQCuuzyja;3x(!jSR=W zrVT|Fdro2pvWl1;9Bi%}4p4@X>r}O=PEG|+KowoTW;8awXWATS_>FFC5Y0U6%53-6 zSr`CYD*OyAvOg#0TPf03wci}vc)!7<*3ZLh5TPRiE{y`> zZH*BX+E}2eW56>+HDNRHEjVCz7Lrk4*(fCrAga$ibHO#0%T~<5pp(+7@#*?M&MMX_ za=rlbt?f#F`u&q52boq;dt2eP#hxNLiB1b(hj$(8o#L1Dp;ld79j1?hRSqlw3=15$D&U0hlQJNrdk z`mYTc?eoX_obcFj?I@UwnrO_nN*yIGN9G#tib}NA&KhL)-ypX{168q$s&g<$? zSF=IXHH}gctr8PTe6Qq3_&$f+h>gif!E@JD2~4Tm&5`iqbR=dUO!r}A4f9H+r@!C} zf8i-xWXt|BMk~&g&N#~OpnXRYE}S^PkGj2q`%s>Q3PLWy;(JFBy{)#gJk z9_OXyX3=)GF138!^Ra^Kwl=>b2RVMHRk4S?PwEk*9p=GC#P){#ypo--$Hk<_5r^Vl z{&YN78d3*}2E9oH{Qi!3Pfc+VuSCWi+^cv`=v}PLWb40nzuc) zsNy!(;Y?NFD%7*dHN1(Kh+9xw!~-z|T*3FI(GQo_IMC$5W9#hc_axz8S@q`PTKA$+ zc$jrI%IwCxhFJE5&ol8e?O&0V;%K=)6~7Qh_o<=&13dosuKs@`2s7~iClYXSv;Q|F z(Eej<{0|AP>)L0*y{CP^qruJ^4nf1;?!c4Qg!7s8L0kV8k^L11q6UG@6G$>`|%1%yfp zcD-~T8|r9h>*@ZB3>>8}DrBWJcJ~Q1L-5OsW+oD_y8iC_Yu7GV?a1+=H|72&GEcLE zzb)*sJO(Eo%7PQyH*R(fI%S|0y{~+08&vk|DMYY|nzQ^|FKzYfB3JJx3d?%;y0uJ# zqNe$H;4kdTjp|&VFRz9lY7_8C$L*N?wd}Y|Y89X5@Ud849BE$nqqSG{Z3|T&NWOkM z8d<*{QZTU*pmL&iHD^ZIg|Qr%`U)EwbbOVTd+#X$w7$!W1ns7^8T>XixMwGR1?vr{ znf9h3L@{oYIKJ|=jCL;opd@@ZQ@$LW#XwvV%68&Z7~b~@CHC4B)`6~W@6mOr=&X8n zd(%A2{=}9*y(H@X6EI)@IbM)PXdF15)*IlQvNG_f5hm=0d@!|uTcRgLnq`U9P)EYk zgfU{Bhd$yBG|2M6>HE?xR_&s}EGT(N=`h){*7tza5O2hWe`p{$%^FK%%|!()P$7;qHWNHDS1s9mP7>X(KG`49F#jv5d-xgDmg62q%V0}B9XTY27j8#u6NXS_5Yc1> zDXs#mg3br89MJ^l3nyhl8=+&O5^+D<<@a4QIpj;!@MKnu294$@2wT8>F9`e7y7}gw z7aQ5;asUak|5kER+e)v%!;&Ji zcrk<|lJ3|#m^9Q8n93Ma(DlVI$(BL^VUzQvl5T7CT4Z=}~ zEZ{a>iX2FU5fS{vl_a?<%^Cq|>qD8)pGlA?sb52d4#(FmPZkh5Lq0f*5g}=Dq*kPH z6sQStR9jf{(t;=x;x8f;Xd+Y+C=FBvFW*xepeGX!y1tfcz9Awf`y9^d#Ol(?aPo1{xLyS!hh7)X?Jv9SQZJ7n*dM3?~Y~lEg7-| zta86C!0t?zY+6CU3LPzpV_T>Q1zp%KT@n%!GV~ZVnUqKqD!BmVC!&%viQOt>AWQ$? z*=-Rb(V{E~`;Y44Q-~jP&I>0+Q*M+5p(3ZG9`T5AHRGEvwN5aCKR21->Fn@gXvdVd z=!gj;BblD}sLRw2Qf~lY6+k?p%5dfIs$GIsMMXYqYP7Fd)lnE>Z`5HJ;SXH6eGtZJ zYpZL1Ffy$mRS;seRMUA!cIrgol15>7tXma(J#^rH-Iunn`6-jEkAd{XYfeYrQ5&I9 zd#5GFi{u?3QZM;8NaRm`8z};bOjR9LsvUJuIz2Ull?xh1422NV3wVZJQ$#aaGZZ~Q zd$5~~{v4sxec=8#tmP}B7SxLs!i&kStwtc9@__I1F{vm@r9}*f40pW#?=0%+pz>Pe zmFFZPWPix#MoptI4K|GOC;=7*Bgk^wB=-DmQ#5CgVQbU_xOo9n3VI3;NwK$G(R?je z_+LwY_ZzZF4_m12v*v3BKjfo0GXw>_SoEMQr`uTdOKxb3o^J5bbbL7K}R1*c~5 ztW(=TTM?yd{0<In6v8?-OA0?H43gkFXu6S z!CCp)&d8fg7!SM(q(Vmqzm`#)B;>^9E;A)HR(d6tVG-V+`-@ZYQ^&22&q>&;`ho*^1J zZgZa%+;z30Ed0}dQ}+0!<#O}~5KL}Vm_)TnPr0stUkNC{K6=KdCLXjTs^+a`f!O(+ zoA6r~dQDd2qs`I`#ocR!S&zn089WsyxTS1^g6BJL#jZoxdnfXQTHy^hk{Ufuo9-9$ zYQS)_`M2kVpf1vBvR%erJTdl+$+bPKW9`|q9MoV5K>YrYKGuF{b|Yqgf0b~;e)cM1 zb6!W>3A6pvE6xR~8dYce} z)2-s^`)>X(otMmx#z^RTaXov4_WsdIAZA$OBwnzuU!14AZF0aB#&uZNZf>9%+^Hn^ zi9#RyuA{jeRDXYKT(DUdjFDz9Sb64H&CbP})>OHPjq>Bk@6o?lnrSq5OS?>KVPIJh`?4;jMX0_NzQ zK&z@D0z1m7Saj1Eu%*6(v^P3Jb&Zq zMaBKaT_x-vtwy$SlrO=+#W9oS^!aYyA`#?T76Y`18Z*G|rwI63ph8?zXz z?T*?EPMvGg_ttgu%t;NNlqd1s{>PNhH6FFu)dc&Fl$qKEswNp&ox(m}xjkaxDBCiU zFmVx-{Qj3kQkrQ=334dz8@&b(_w5ygDC{V*j{KoYx*HBhG}%n;sscTBYo3;AzP%$$ z0&!>j*7n}Dt`u($KgU4|or__<;J21d6yssWX%nW0hCc1cSMC!U#6@}s;B5=hv|I=F0`Ot-FQ6EYQ(an(3Z9F zD9V4!p#;GvTBdSP(ADs!LAI9DWLz=hjfXueo|AioNtliIjJt+xX)8%N#_vf+u0R{> z&uO0}lfhVowy4F>iXyW_hvs7(%5hNr4pX4|t$OLeE6kH%g{Vo`aYGVGmj{60yGyE* zirwMJ(UFUl(C8`S2(z(A3~qAI0v=4Cn`IksWVm{-zH#Sh3m!15{Zwea?-%%9iF5~` zV_LlFkGXP}ySDqyj!Z}(FW6GUH+G@DK96rVQ!oYHrDyieJ$>>4WcsTb|OH7Vp}jS*nRE00$4R0`R0AtA6LRKva#WC;x$f;;+AzjRxm&}5uhpwrnZHsTvgcM%56~dS2h1QdXKzWAKrcW zf#SM^Jf@l?L9)oQ`p266XDw;haFYL)pm_>{?0s(AUq7iE*fdy9L&wYOP`*zYQQoeXrhO4|gK#;O2tVh0)lh z{Yi)Xa>p~LHP7muhcM8M>P4BIRyA0w(sD^&*^7)MX)9!kVjMmYk|$RQg@+ zi|=(J;pfSLC2%4m{=`KFXsSj;9KA4Z6r_k^nx#*`aF_kcHalme%hpt-%Ie1v=;$}7 zdLObIeX)%R&5vp5)Vv_zWjoWB7j$p?jLaX!tQfJ%Zwq8L=`9lU>=HN+ZyEBsqvtNM z+dU~tg5mY#k;mIQJ?Rpk*IF&Yo$cJ_r2HjY#aD7UkiuK2qpy}kCp!hcSY*H@|Dl~vqKMroeP z-EoD>+A3;{r$u99aup#Rh z4Yp<}gWe^46BUqX^AA=SC5Y)xkg5E5Ovs+?t2?q-C)TDp1kUSemxJ2=N1^KzR zs(cvMII;ctDa-s|-qSB}EtuEqgD9gR@D+^F;O%;AA@_$zJzG!U%lmBxfD;35CM)^k z(Qg$cc>RyJ`>dXYc1%9tUT7Y5b zbmxFXy`CC;%_3|iR|J{zzI@&uJoKdMEn3Ep=`}U8#|u@k!#0X*eZF4zqZvV1RI>HP z%{o~uy?n(lO{B$i4jfEQ|9IPWlHr-uZ=kO)w>pMyL>e(_1SSUpk-^L$hD&U4vhL72 zvrV_cU}rbU;m3Maz%h_TS&Dsb#h;YnYd0M!1V&4uh-L;6IhvX2BnG?ON|Kx2s&<~| z>Wr&yYyi-b8Z7pgiCN%#g^3+F1ZNg!DM>v z0=&XwMYN(#^PPvdXY1oPe7IHeGC8cHSUQ-WJ7Sv&k>mvGaj$%#<0yVClnp*1l? zfk0(l13XVA>g$opF01|2tLL&LPdqqd@V;`5h*0tRO#b;f*tyb5M^8uUb$!J%R3w|- z=6$iD$+f8!*~9T7b!Ti7>B7BDVf-9(>L02;?P2BAb$ZDt8RDc<@}<0qtFOL)os|lh ziGGo?QK}A3STO;ZquMyRYKDp!6eaj0c*br-R?x+^xmPoCy z{PEs3?bd3L`~Ms|JNRchDP|E^x{h{m2~8W#jexg9*82&oLUYw2rWA{q$(9AmGXL7+ z5=$<>j4VG1?Wvq&C`vQ|D43))Hc#~JVWgA+aiH3fNxhT({>Yla8jEv z!PhguD-2m$;_H`D_vS8`E4H0b2Ya{1F@63pBg?t>RUDr z)EagOb55+nzX^K$8zisjzf}mVE=sidUlDQ&f!(X;{kWrmKSfc-RM*yTxzaDd8mIgpQ1@9&5)6e zO#klu13$u{=2suiKg0O;$wbS@OkY2qkGedoe~g(sE^!b-jX)g;JHh@Q zSoe*7ToA@5&d-_FJ$>LO9tDlX(aeQ;1-$Ya(xw~Jc zH*dM;49*0~=@|>#U4>{~llxW(G&@$)aG%~RM95*uMc)sYNyd@J-$3!wYYpHum>yU( zC`Rn%0v^OlyQ!93tvPH>LB4r9Ir3!;H=B9+R|)MeUic1Xn=lf><}kq!OvB(nLKK^V z=Qi**O0g(eVKh#a@b@hvdrDR&b3U{Czq#i=H%M*H98Z@$-Pe=780$UhFh@XwVE^1*Q2S)fs@iC1R8^x@B<0bWX%fu@EkE^@&4t-00pP- zHPthjEK+-Xgz%*Fig!G-R6@fBCnXkG)erBcxn&WMR+5k) z?XxYIFc~P0@wh}pB!>y7+EFZi+_O*yVxggt9)eY|aww<;p{s{Uazcx_jgw!AAj->- z&_PFK;t%enK3Nb5pXzf(I74x2e(2=?)5k$x*{4A-TSpk&zGATjsA7i(l2&HfTPN-xhN@Oizx~$|};9ot_{U$G|bgyY7}Mm4zd-9dJA% zyEY7g3p3?Q+rba1)Pr&?Bww;Z+XiZwha=oNN#m5JG;g@vygY8B2AEZEiYW5@b znyy)DkI6J`y{++E*ok#{`2_5_M_c|0neqFX=~W?*jhlwiJM2HTT0(Yks-~eu-(VBM z<41)j;CVFzv)Yf1Jk4e8P9qWnv;t!#GES(}1tsy;Pzpnzf~X}mn9&sY;mBXK;FyGT zDk>sONW@8{n+nXEJJLurLhczJ(O|P!%`?gqgo1V4=6`&id<$^6fj?tS;6Q8|eN!be zX}fAL(84Y4CP7RdYX(kqk+nxcDBki#&Y<;$Y}3(d#*LO`oTvpA)CKfWY-TWTp{md$k(gO>^qc_N-m&>|?P2d6QI*qI0HMF|x7T!# zif8wMsDD1{{&nP(Q2d`95mRBCi6@K(S3GuKANpRX5|6x#%r+oHoQVp+Y6QHy}y~%d?3#_V&Ghr7o z8!3o?TC5L!No^O=q8(6@Uo4CcEmmRf@H=KHSURN8A9vvlIwRd6o{bG(3~3fx@q&qO zSXmSA_7qi%k7@mKc$yn{FEEU)WSKJEh*TLafMGk|PVYtHeej5$*JDP_R?sL*HJh+o z?H_t^37yP70XczZ^UcJk*dH%L?#R4y)qG9VPa>Rate9FEIU29B2 z?V8WjR}d3>Rsn!zplRf2ZM9JL*3_@an=s{;pY?L{^q4+1{lY=(Zn&wF;Xj5yLTQdo zXREY8>`!T~Rw+Cu^?AT~2Rr=Q`BkE#(8W~}6nE?mjZQ*jo^*ev_BS5aQa_m^U+oeMvx= z5rOz5$~WS(hXZ5+KLOhXcdLuvvXa|6DR74Ly+3Q(&iDZ}#B7Yj8O(4O3@oOy8?48> z)djoT_B`Ykks3B~qf$XxM^TBNf!?Q7v=Zjhzu_Zyc+La0rH-*X5+|`)2YiX@4Ngdg zSGRL#nn$IG2U43FatoR8tOwSS2gv1oJ zMzGCq$U7N>6#I=By&-3w;rlNdC;MUKQ#*_XvX@n{i-QC-Uc;Nj@DkRi1F!J?nYYV@ zCrz982b`*pP33fTIq@F%R59QCEH{dWnMgC+E$Otw@Fv%kq`|4?73#R>QC;rvRPV(k z?cFi=ZG_&NhZpt)4KC#I&Nk-vv;OrGRoSBD?je+$GSeRd<-Ur)mW=iWF4o}vZQZ8N zE3~yBLRVl81>ux-YEZ9rF%c-feh!O_&yEZ#T4h9rI3@{bj)-)0#`P-FC)0Uatdn#f zTM+9-63nH1td*bEkwn3^Rgp9g!}xybwiDuWe0c4zOrL4vb4ajRlEd1G(XQ%Z!h-dA zk$`oZk@U;G5o5vHyTCYO!?yW=DwtoG%6^N5{twX2`Criee???&F3$gk$OM1>A@Ze9 zZ($xpyUsH>0Gxi{95jq@2*J@1BxKb;^94a#rA}UDR-7@Py5e7?W3@b85#*LYAL|CP zdT+vgd7rM;m8th?X-U0Y1TET8eQbspauCaH`F^dQ68rt}g>qlB2^8#L0QU5=b?xo+ zeYHP^?f7x~ycg~GzS?OqsP$=_6EHqG1px@wiSx zvv&l11$@k+Wk$u!WPjh>!_H#+`q@R_-r)8~d{p;e!wR;ZF2Yt{IN87O>M2+CRkyyvlM?B+oiqC22+_~b(Pt=iimLPXRywVnrd$v zm-Reun|J!Bvy*?%Nr;XHmfHWP1HNyr_f6}NcR9F01s>;U#%|kBt`2{DWi6!UKV^Xs zR!}`x`Cx}O$m%CK_mD$o+149nHnxM@Hu_KbXuU&`a#-yVSshBe^jP)g=@+Oq=@#Vq z=l10J#Ezr@O9Fl$9twTj9=^TFs~#jibZ{CxJ&z9LDl~qf9YDF=dGZzo3;`M@8aDrj zVlfGQ8RE~(W0iAcO4FcyjCs+tdb|og5o>v#N-1tgIaPF zHzG1kk%2hvxe|ez>+eRzrwJC!jZfz{PS23W$FDiuXwb1ZS!aTq+RYXGw$8v;5Z%jZ zELebHbT1fW=mo*IIWF$7-H!|>A;8U?WNr_)~_JT@F!-9pl;;BGVVYS$N^;AU1 z_g`atD#sP=HHaBUg^0OF5=7uoQ&->=f*mkmBnaKED6kM%)t-LA;5Z+LM1~E&gR8e7 z29dA8g+W)O*lx!}sIJZ^u)J<4u>752&_>VxcK<%xgU0!9^h-p#%au4if^tEw{r%%SYMiWgH}i32hsb zI>InFGrWY>m=lE7G{_PH`8{DE!C`7l@dszRMd58?SGU0p^gT5Y5Dh@v-~|%bbNbV~ z4^(%^e@*U?35%EFQnSz_T5mPTgsJ7X1Edti3(bG63~!n9wXTbfjJa&_v%aLyF<3vruRQsvFXwvx+^F)(w zfqnTP=b3(^j%s)3suGH!Z4_dbjEg+LBMJ3km}Jfx;|Z2G4as16Ef5Hs_k99p+x2|+ zXBRB(wpet9O$3Qf+Knfyy48TQ%>cYUWHT6~U4C4_wRxssg~2S=Vfb}9GyCQI@h5k8 zfaWg@6K=48i|UHSUSvU-01HGyWMBaUKlOaQxP6v%{yI?+@MV`|TYz`y&eWoH61RJWEJTQrgVO%v*(B&xa) z-i~<1tXZb$+CgTcm?U1$$2C`qZVo&0K9GX^R4eQfZ22#g-N4gJe9W8w^xj6&F!$x{o394*Z?`290< z!2F!4Zkj5bhHTOnWwU0#8&h!gOOCqrVbDVS^mc}ypy3{SC97!Sc zcbMvlS~x3@6(-tmvnC;!ese>~@+BDfOtxFjZtRybV_0i}aPdK5LrchUL*tv9M(24p z3<5us?ZeJO?r3>HNx;h5r!NHrifD6Xh@H^)bhsFH#~4&~wMD2&{OTq7YIn2_4Dcfd zLbRlBa9CAK7!=2|H16`;^FKJ;UWW)LPA|GYkls+wg&CO2%SL)@L&;wqg&MzSqiUEU zx64b;elHcU-|r{gK697Yy{G@i4nOZk%y#2Q!>BLd&WSH6JT}q4Kqn5J08SnnA0cbq z8Bh_QFfHqIY~L}srU9!qKa$>VmA?K3ZEe+SFTI70!PiHdJyZt=eHJ`&4n;J$Ju>aS zIgD_9(6i^SSNe(01;n#zCN3(PV-r2mI%ZE;+%mbB9OYux9?N8M6 zTq0POVZ&d_6$htH&cIihTw^joYhT0l3_%93Xl55e7En?*>yeV4%tX{rB54$j(vV*c5Et zjWJH4ZH#70zgJ7R7qj+a!8aXH(t7p$`NTgl`TB65)CssPr{O0p`0ee&INI4@BbmKb z-3968?jYSH!)sG*vXdQ$bX>A-C|$B%COW4z^Kh>#*Ttl2KN>`uq#f$N>2x-XmUy6G z6H)u@g{aZ-pP4!(!ari6i=up`x)-^XHP#GzhlGjgIBog$;69z~pakk1kj?iHx8Ff; z^FQy05BdaTH5*HK?wz;k7=QO%u!$vwc0jCI^M$SS1iIAJ*NTv9+{V=c$$Ouh0(ysL zR6|2?DFxXfiS=j3{A_m~>(0V%v3x!<{|@Dl%bLL0QD0_EAjk7ugcU;Ec+GO3B#N@H zMVgf+iiT(p>npLU66{uQGoLL(g{^B5s_bibY)P_Q(DIXIM_|Yvop<+6TwqaFLicl3 zX%3Lse2WS7Jq=0J)_@@OkLmq^Nt(t%pD;=S#)~i@XeHz)6l}><*nSuiHSnt>7Y)67;I+^mw0QZ(4by3nVE@7;J!z2-I=^R$* z*=Vvbfsxm(;?$R+{0S9$Mly*sdj2L-;-fmKU7}8I;c^t1Inn3QSbW+Tc6g76JN^M> zQ-KO}QIaZO>MqqRj2<<4kPo;V3RuJw=oqVH&*!d7xLvDAEvi#?88E8TqVK`Ca&|Ki zC2&b`#91>hQJyv|N|AR-9+$P{OF}9Zl`A6au?}orK&HIXHquo#Y_F;GYZ;E`GG_Yz zL(hJ&$~4=VlnU(6H%~92)+;!CH-}5s-KNQdJ$a2L`nX%sY3Ezq6Iz~TjK#e#uM(YL zP0!e{D8)|8atBqg!1W_D=!e#DhXF;bR%eS?kcWnYUYOcXm@B>O9--CE#daAouVZ8w zCgs?`c8Yo_+GpNoo8fK6rQt+!8T|e1#v*T@wp7q_HxVt=T7M{)J1iV zjt|@;$}h2;imEBSNj=GSrY3xm2Rp(yL;st z#$vaPWG>T|44K8xGpF9|f24NusDO*Q;F|J0_mxT86t?$2J!Nn(KEC8D09Fk{_H4z^ zK|y#jKK3TVfC@hW9_)_u;HTPyLl%A_?wg}W1~SqM3<=w$Bu+gEc_ZRfWd;?RuYka1 zZ^o$6A+)w1z5iZZKkl_7O0LxNAw=SC;*@s|&fK~NF^-woZQtn|{9z16HxeeCpIo}o zaZ^XSN#(y}ql21h>CKo?9K>5z2nz|V3g32T(U}d6r~5& zJ2xi780K~8vnxihyCGQI$gXgye;i|X3K`prD30Y|4d&W9 zQA1`_bS7RsLBGGYcWa7rX_s`x z?V~c$*uv_paEImX?2&YI_}amfRC_99p<-SwJMnA-evH?CoarEW=RMSyE|eAi)F7~8 z+k;41kB$$l*!5Q?4723cOAjh%+6H2m*LH8ba6nd^`!gwOfRxXF(OBM#T0UwAb(LUa zPIuz7aquUlYTqOFUzk+T`U!_LXed_=%7C~Q-613*-)X5rE`~@?hjy>l$$d)AH3`;J029%=YG5tGz8j?0EXp~Qur$b#sqlJSlF$tRC9~#2d!Dy_N2{hHwvqNUJN1C-;HQh!6bUX*2%3M|%=b5)+MeUKYIp z^0v0gJ7cA5N7MLf^!|K43Y#61hR*txWj&)T6O}+;+<0P})LHuJ<0O`L9|^9k&SJe9 zI@Q(%yzC6GWohc*$H(pJw3~V2{CK}Kw9y{PCE$k^nda)WmLQ|nu{m0saDF^hCq zWMQmH4wh(|q>d@9s03*>Mol z943)ycu$Kvgh>#4_MivE!WlSWJx7qB@HR=@a`4X{L-ECpj)Z+=k1Q=6kCH{FPP=q) zj}D~IaS@03XiYTCDT4!@_SinlOW+ z(bwCGPQs&aXu0f}XhuvS~L zqO)8VW)m5Z(yweBhr1xAqo7{xZuQQX!}B-jVQi>ejet`~HCG6@C2F!{0mC4MtC~VN z?|D3sVdl_zEcCr`JFN;E3hhtV^KH{WNZ4us!L+?~O#3^mJ%2#vAh`&AQ<;j3r4p6h zFD@xshAiE{A0V_T<>$x{!+zVm*zrVXgqhyOIj7hTa?Q*Rcjc>&-^zVGev+{j%f^uY!~XpN&p&Jj6Dt7{;~wQkjvCMq2^7HtNb!UQ zK{rXTZW?%o6(bD{F4q>}>b#Ek`JoXw6!l6RzE93@0${u+w>p8c^4e1WEXp+w^|BwX z5kK1URjt&|u&H(MmyjO4Gjx(#=p??4P17WXOrt}U1%n?2Q1?`Hx#95sfwX(BXtti9 zK*)-4-ui}wN_!P*i3*9kaluWc1>pBSYWRW zlvt!=q{fHj_Jp7NGq;uh6 zThV9CiO$?6>G#->Gy~5a?ob-NN_88C$K5Vtqr=9m>WTbAi7M+`uMN@n8r_vvK=p+~ z*1MfdSPSyw)>QU# zm;1I@)D;$cd}QbTkjZ%aoLOzI3FrQ`&$Yxa%b`t$6&x@KN~X7{)3HPhy#8?h9l^nW znLcXjA@_O{xKoeoTSVD2WY>SEEcVyn|DoXjI^USn$>EhebSSx`YqdK*RhX}{FjeEFAt>e!rWLqE>$+*VKxx@q+PUN`d2>g^`O&WLJ zvcJNs2n|z~tf6686p_+xk3 z%H?wP*5z{b+Z0kfi&Kwq?0Fj)?GK7J>;sFvl(TB9k?F3RME=s`1eF-f6@-Bf!Nl2~ zNhEMxg@ZntDiha4D+}@oJH*ZaG>Id!h}M<%qB}f@Mn?W7ju6c&mqmv8ywypTsE8^< z{P=^+Cag&K19_C;x9I*oXx_eM;Ex0XF}B*1G@y93DPu)qMhkUP7#Vb^GG~^KG=qv6 zp^VxjF`El?&ECrDjxL!NeQA$ck(^i`<2lp&6_?ss1B*kuTQFUj`^09E<-aV=+7%Mw zG$u(z-h*Tvp60_#hG+PXnG?Qms)V(+152B`jy1gUtW@8!-o5=hz=i&P0lc~bo~Z^>f! zaWIU3DwKL@n-9J>2U*zal>hzW#*y}c_vpkDHr3S^Id&6ndIYA6C1%4W9pk4dC0fU= zZE^$=NTP2!?P8I$h(X$+Z@{y^EKz*I{K4tyQY;DGo{o`aO)8MF9lZ^Q(`B|Db2v&R+w!CsHT z>HwlSvoZQbdNiS;qxvdqj3LlvxP|;JVr~~r*#6*z;j{t?l~jxJ_12H9T^eo+4>h#U zyy@+c%04pSDKg?y%Y4KoJJZkmH=V~zhrCY2i!^*h>FOJJ(A;hzpXpsQ(bvytl$NUh zzGnO{E|?0gHiiVWGP=g!oDw-hduvBKeM5VKZ;Hz|u|;3r(1AexUswyRf}x880j;Rz zcR{}YeDeS2Q&ba*R?x*kSl;0uhRgR?g&7F`@!gbzq7`N$_{TX@?wh+pD`aiu@K3G~ zBLU-od0V^Ybh7G{R z#`@hL|95SMRu1+A|G-ziTay3Av*=-U08_|0(nk0=5CKUMtG{(qj#{4cBJ|Kmmf z_mt^>ll_}n^FPQA_%D#2|2@KgYXE?r;5+;~M#A4Nz5jak{=e3TZ><3^5`2gMZ@K~a zSNZ-|<@okD{+~MNA9egsiqZd`4*LIbVgUY~QU9y(4F9w6{{>_8f4=bl%=7;?HNHVk z|HH`tYbO5N$lL#8XB@xH784Y$xT%3Xf%?CiOz>~z1piJaIRe1HHjDu9uOZU>zby^@ zf17Rmx(>P)*2e$*2;*-f`@fnd`u}2<{{tBXAYfo-VE#5{|4)1N^mG6w=KuO;f8Gh{ zp|H5h`krBbm3c7bWUL+EI!YWL0|^>e1NsZo33QbZi6rg^5U{Q=s35E(5RqboVX zl?pXK5&;!j+0s&=*ru8#s)B-dp9_R~k#)!W0{!&b%-_t8du zwlUY!79_%t8X^SVRQmjij)NCtW{?vD;=&Zh8%zxe(`xu@9MFb5>MnZF6sM8}|q3eJ0h68$Kbt8Z)%m-b1cMZ*# zt*w~7gKmUtq|McpCaj4Ox6@U;p|^M%Dr`T*HevQ?d>*(X%E!}|m@hX^R03}ZF|1X$ zS}IB(rmd~|S(8}Um8w+gnN@*TvL!XCzQz_MDe=vC9)1sfLFmwc@UHMR`GSI-c$EUH z!0f4sZ(C_5(SG z$o%`~7?_NYrO&ztgeE}ChUlK~9ZPvQ+~vo62soh+-GD9}DB>X>`3q_Qn*t%YE?xlQ zp??^i-?cco4`)DNOf+5CHNFfeV!)t`PYt{PVv-Gpf8IVDd7xf^C)+tV3B))-Pz}$$ zAnT8v?OdE!!U`YyfW#RdS2Qp?RtPWx92iuH;6H}9-ML}?xpW9Sba3Um2z}u?bbUK? zpt`UMBwt{*7-2S`F#N1YWr$IH&)RfYG<>XJK}0yvOrs2RaLSi35y6NMv_Y{DWHzjb zLWCWlLPQy$`tjO525`katO4@6oPDM?wzu{vQ#&vzJ~pHh5?Mj2bdb8#!O49F0rk3K zw+tozr4Y3IE?6|drXkb5m=I^WqC^bg8J*I-tOWciWI_&m$OsplZ>(5D2SjO%juq2g2p{2Z0mL1iS=fDK2e z+OeUglJbI4=40q{tO4Cogy8Xes6p8QQwh2@Q;E99f@A4}3RvzF3s~+g+ZS!g>Q_?n zw?VEDd$`FOp*t@7jW}0j~`9H-hT(f_gO+T_g_Fb_b>;*6MCTI1#uvJ!dwbGL%c)mRNcNB5bn zkLVhuPrG*>B0ErSWZUnE(D!<|hU0~_qi4rD2Y1Ihm*@qo10oYb+m8!EJE#*v z+t(8!nh(8iyVonA+Rgwts)W8rD!Ub>5Dp63(Y;B_=YLVHuZ$orX# z{)3-pp65ME;>&0J9=^`t6v!nRl=yOPp8xVRe0^Fy`KQ_Mpi%TqTLGuX^||%L{1Zy`V@Da$gEMmzs43VV=t=~< zCz_Ce3(gBLc1r*bY)7W$o)%xc;^|bFtyf#6@S~umSd>9-N!KMQqgSpyhMnCOx08Gi z?@!k|z%B{SaMC)qylC&Y?rU@?&uS>rGvWC>e@mHGg48l0mum?8LH~nI{55-08{~r| z_t;b^Ii;5fji^?r+-Zvoh}f>UOi%@J<>>0@dYm&UJ}>tQ?R(N$*^jZ}mlld_ac_aC z<8YEoJ}VBXOU6rHRgd3e{vUnPvU3}>3*p4A5RH*OYX=nP{vmS@#h* zbWr9ms`RlQc=mxZ>@-4ITz|mgY#F7~;xhuwPkNb`^edkTpUwyCpLpDP$FMUj_p_cveG+1S7bHFAQXc#FnJsJ=syO`^J2J|+ za<6@S5{Wo3Gf%CkR_J_hfL z9?aY|e-*-cKqYVV4w2i(AK(p&G2OSTOR*qMAI070woAYvDn5o_kEbcrh6oQ->|@v! z;WYmCpTaIkFI0Cdb~Ae7+`fCu@+KaSXUWf63#ogC(})MRHF%2+-X6MR_4q@q_e+UW zF;3Vh*8I97>OF>2B8z}Sl&r}v!sE{;->1;0RF`gmxFe&;oe6gqVq2P)ptl5mPW7&9 zgqKh^QU_lb0x}rXB41_=uzREGO3)GBjwgVii-OcPYrL?%@L~>mZo1I8kb%Aa6Wrvv zMj08&+OX-{HHrczP@?&Ng0$+kPm$EHA*W48`Q)B$^p)S@B#LH%`T*ZsxaX%dI}MtdjqYziM#&0 zWV>W@I46cDM41)pMeVA~g>SSU1RpjZ3LlJ~ou5u0S|8X!U|yTdO2w0g`mkms3X_@1Zj>*C1yoEbf;1yaA*gFjo-6p;{gg zpTuJW;!^X&fu$lpr$hP+S7XRHe{>@##hUBF#u}4aHevG+Ub)1CewxzML0Gn z$m<23KM_B{mu=Gue0{^K`=b%S-sWc^kot~cCx~y_S|xBqN;_v%8_6z8CSyw$RTYMU zz-!kVS)kRT{q)oGo2Q~Ih`EKF)wk6x=1nMpG%Yees<-cBJ}ah@xB-e?u)1q*fCy25 z1|?W@!~%7oho?2W^~Y2`sQ#Q^bm=EifN07t|5z*Ni5{9*$lFZ^`awVl%0dLE*Ke`f zZQf!l(hEPqxWt?VAO!8p)TpLK{gOuXTtj;@wIb`Bj~YaC58#K%i)+x<(j%;fbh}vl zEuv%*{gd*!6$9-xq3t4uR6N~@){`A zR3ZCEr8^rLGIW2RT)C{0=XI4Wl)_huv0>dZiJ=nyoTQAbfH5IjiiFILJl}Y#a?XW7 zMyf)>LZZeGJx;~TV7o9kI#014YPj%DwInfQjf$c)VwJrmmFfR7+dV!GSrep5XU4w4 zkBV9-4V}ly9=Nf@X(q@@4*t0S=o-vl1T~czCLXF%-(W7%WmIZjCyow_FpGOj>a$u6 zD1odEV5zfXxq&0Y$=w3*JIm9l)X0baF}P0&;Gs`@ARt7EGS!GlVYhrtneFZ9XzMD3 zq&M?2&;tHNgxrKN4V>@70J&Kbkj0YETtC}Wd3rfVWU1bclCq4zKpR43lEJ`1$hcI? zd=9X1cIb0|5Z!(uSGvSta<_ln%$Z>xTCS)wQC~M=s?}dRKW}%1Sz6S^RY^jNvNXXC zm$V)f&0yspTsoF?tViA_wU9F;(#@Y6T1LU_m%~abfz&rJFtA;Z1Jg+RqYhkTJz@?I zy8AXe0T&^=ZZs9OPh#d5+cq?tyGdh`-j&;rul&(@bx*xnxzZTAY1vqaP)~wwI<~Qg zF+EiiI?uo$t`hwVorsrs;f3PSzzKAiF~GNoaE93%!l*w#N~d%HSR?i@z*d1joj#$k z{uZ)SCbY!T8@#}0;2`)LmG_f_*6~gEr(Klf&sEmkfP0cu9omFPnDJb{<9)ASZBESOO#vX?uX1k91*9EyA$JUYx`PHF$)b~v{ITe zySj(xoQ?{>Muf&_yV}aPBM4}xexa;VtK>;QC(`0#g6@VeMc3?{7>R7tYYinrdV7UnC zq2SKQQ80Lp=9+q96*O@v=;8ZzaZgT0&k4n76_}FEclnzlr!;F;Sga$?FuJ5L8pt zCUDl_u%!cGy6dqJA;_lb7?1)p+TbMF*0{KW#lJQ;Npko#zf|)CX~*XO9_{S?L=a+f zk)O1LWtl$jggK|L^(&Yu;}l$|GM8NoL9q&pw zP(hpIqdd+JfJOz@TWINt(#^`Dj~kd8=v(n`;f-N>*X&Vb_M2Skq+T z_Xa?w&4LC<=GG19jJ6tSljP(EEuEz*4reW}&ya)n)+YHEM?1(^HIwllv~ME`n(Gn$b4 zQ&UOp#~7eVg%h4y`)b06-kG9#ZEZ+3w=zK09yn2BJ|_WpPLqwRq;4ZYTn$%0!^fS> zYCB?bhmo>9bUySNgfSJ+IXPRT)JWLBOnJVT{L%Ejo0cu^>8-J2)+vx*6 zNGeUyflv=F59si(x4qD5DUQM6Eq`eW|xlCRFttcf@y-bNzB%N2pF ziFQm9$S@1WDJD*|rq(&_bGaVROH8Yfy3gvSVX8R0AT!9g%N?s3qj@B2;RT69vUcHR z^~*^us&?K;fs`Eid>uEMJzKZ9e6oJ(jb9s`<0JW}bFkHTE78-mtM-8>>gre}!shao zH|NfITx-*5H?|+xB{kQ(t}JAGSL=1Er1sURR)LQ$mQW-o4@XK4IHYt2G*`rV!G3|% zw%}Db2QQK|6v5eGJm@=Erb8T5@C<-C?oEW}dN9F$adR;~v3@bWtvnaZ_COsJrtP(acPp;zJnaVn_(z+Ky+*Mn=paG3e7oENex^Gw75*uZk-L(@$Wf7r%T?rs}`*FGNq|3rJBamw9`qs zZk3P5u{)60_*WIG72iFQ6(?Bc3sTg8^Nl5jbz0BIM(E#WO1H?fG`K)N?L^?udacSz zNB>ljx7tyoRo7CwmdzXG*JB_(sZ)il_D;z4=ra>B)-#fa59$dc;tV3*0j`!jn~UmI z;-ePtZHou{VyE}K;zftc6jY$djTro?sO1k{*!SWEH;vi`8wMZq6zNYTx!H$YL*4zn z6>N&^quiss-E2y|N=>`!2Rj$G5jOr*&s8#LTCP{LD|5!3mLHDiyI=|%p%wO zoa$FM1a~tVoytcG2*JXC#zv{VVf`7Wu^LKK(3!}Xf(lYlnyI_24762B9`#iD!g2r z{LG?OW#GrJ3+lXp1jO=CLQ7WE;hZqL=;0lu5}G(|6i14zuv=ay60FhXGb3tG&*8Sm zMxx}7&lzm&%av~Xy`fBw>UGxKtS%`5yIFaA4!5|g`}=#&r~A&g5o!0!mt7cDi6oCL z4~DsCTZ38am>~l_LzE>#W1%de{d)^utk}lZ5eYHQYNZhM^F;B%vy+Q^ZvW>5k%*l5 z5}kyQ)VO2=?sj^0G6IUGwM5R@QgV?L%~9z+C#fnzsVXI@Dpqw{9-<+}LEBU4l){!l zrQfw}6%{n0C2|^haoY|)3i0VOCK5_gyJ9Bc{csT`xA{Zrg6E1BhB@3q4e7nCkCP?g z;&HJlkrq|vIN!Lrd?#VlDHpAQs`(ReI4s5%Kd*VV-G|gC51A&V4x{IxYucesM)YBs z$c@V3)bT>W3>Ky+`Zd(>>63-YI=Y~`b+%jAjS}*ZgSG;Vp%SemLYCysNm$hzsjAdS zy5?}a0q#+)YAmJmgfiW8u~qB}ena8h2t<{Npx&c#Oz3$Df1_akTd+N$^vt4lHbfS- z3z>hZYU2FPGmZK<_r5d4OPIg18pF1l?=HK#7`MHEMUUkxN?VC zVfLbx(9ZDZ#~Lr-GZpY$qgM3xan*Ag6IUPN+`n^yr&|y78@7} zd}2{?<;PyBoFHxn3LsjM7<2FJ1#qXLA7=Y%O$|voTGqL(ntX!B&`j-A8Sa|DFB_Ft zDQ(1J3!pY#XM06t{J~%=1iBVa!odJVPVF%>*U}5#94T(l-cDcW(i_f`@OT7oncAP9 z5B7Wb-j6$Mt8v?gXee1HYHH{e2Vyn3Vn6L z<0%n5YC}>s3X2QmCBrs!#o97jHVVI|hsRWP?q{{@T&VP^SkwmqkKz|+etizo;dKLz zJ@$o${%1zw>1RoQ^U+ofnp6b2dLJQ(Ko8aMh|hPT0%6V>(>L?3et3euJJ@c7bjH`X zqY2Zt*%-_Q5{bjIE=?#Zmnb{{xaHIzI-ySL{|(Cmt(PH4Ar!J<`P}W%iP2VPXJ^0o z*FLJ_K@1?$fP{C8B8*m))&wsl5S7mv$*L2sd9cf;k9{uVBO;|JGnN?T#$%M*3!p|a zMT8tBaAFlBLVOSadQB?^1({sb%<3i4AuC-;+-Tj?=yvvDP_|(dwB(Y|D8#yxp?8$Ne6 z`9YHN3-=H7G9Q1$Eu1ggOC$3|W+R%Wn6HSbWS%(DP=u8zk(^rd@mvTX-*PTwD`w0> zgy^-wi5Y|5RjzC_MyP=CpJI%0bNV;EjZv$IgNJXE9Fw$Zh2jC?R6J-u!NaKN&Okef z(?Pk+_`?rKcpV`9$W?sOsPnW~Md0&xL`I`pVDds#|B|Sl=RrS-#^FpuDvy~mk(o22 z3UeO~C2k0U4O73mcooQPr?JR%PYPj1r%_dj<$SZF{;29IfyKtVt75hduL(BU&Amme z;z^8W8nWlAy{PPn!BrmEFFsNTSt}~0zYPi`STLu)-us4q3L@TA<@w;584>lTVikUyM6QFIFqeZg!^0f!t zdQLb1)u$*G)`o@INhYt|fyF_&2Xg44p9gGhdJ=t{L~FU^)*BO~zLnHGtwTmXat6e` zRb3X6Bcv>*lW_&PDNa)(8K(*1m=2gqRW=btvQCzgI1Ty>_f$lq zZvqrRB}KW0ou?jeW7SMeY-i76P|GG`-_*P^(9lPv4|FnEbuwvj6GT6mdNhSBQ{}r} zD6G!PeunwvNzHTY;dWN29`3v)w0*h7axlaZh0wo-pY>tMVyd`i<@veuwqCs8a_r5u zSZ^gY-MamC81;z!`)h2Pij_P!IkS1^F}061JZFMh0bX&7c+&nWKoJOko< zgS+wVybvI7TQ!N*BvlKgR1RH))R$N#$cr6aQ#ffn1eafOr2lYWAtaq_&n&2?ua#hT zADKVa-aWPAsG7+toppmGl|2!gyS;37)kI@bM%AAC+>+}n&UrI(kR?t89f&qv_svdN z^fk9{2D6&%+^%P^A-^vDt~2AbW8^O9$TXU+VHy~hdMZ;dbNrZf0E@6%+HhYS-MP-F zpD3)3oH;|Vc8770K10FxH)Zy3SDN_ggv9B9pv+DdTWd!qIR=PagB#s-nZS$Wq9byG3VCoo+20lx|kL~aFyv&!V>AGavvq93>L zGW6mbQ;-2uu0bK1FX$?shPAgAx42T^N@yoBS~pN73Aj#|qk@pdX3gQU&tt`0*x1Gz z9F7Q>4mPV>)}fz)>(bix58hnw3mo?c!pl|G+pRZi!6PsSrw7RzU&Dz;+81(q&wI9c z8{2of)7x&`CnwK?y1BPx?%CctXH}XOUwXQ?$flY1?E5kFLYwY~^CWBuCU`zkuByem z_LxO{t%lqc0gY^xHu_V{E!wZG*CmGCGo~+*2N)R>FIPD2i?RCCqljV-gO71BSa`;z zj+&=c541^1hZ=h=i?-c1*$V0dHi_jL*wPdO-4#!lh9)uJ@coV1dlhpiEA6EZPfAcQcz7Ij4 zk<}JvL_l*u3Sy9XaMU-;=r1xzbD|NI``e~^9+=3Z)ME%}F0THzqanvL3{*gQ;DQI19dPL&7X635&dNl7CyuarH=YD}{$ zpSI2IjZF~$a3p)G!PH|kl5i_U}4);7YSK6pI*m)@7+{+3+o6 zdU`(u^Uel@0mbqMBbN?gq>QK8{`Y@)jH0}8+J?js1-26usZ9BQ{t(AMV54v*DJ-FM zHKVngW>I|_~+*5$+bUTRBML6nJkOsI!%r)R(1I_5z6YxQYf0HH;5yFqW->c zS^8U5I{mcdwTjZm$fZFjWd4ZoT+I-;OmQ zV{R=NoZDr!czSyI+5i}$`XhCJLbT#*&MV&@E|H1nrNn;ypptRa9t$RJlSSeZFrSku zBRi7VlM~kBa(~0+mX>NuC~3|Yv=rc-x-?ZNdOpq=dJ;4_iY4aQY}CDEUN8s&6~Ksj zQ#CB-Ic>lFLFEbi_O&g|u)W8N!^;xY1I#@a9ZlFg+O;4^MuDuEOqtv+5Rb`}kJ`aK zq@bf?Wib79F66Ypo)_d_63Mtere+?qY6IiZJ>TP`jAKC;;CvPAs9ZSL> znDpfswo7X1&rA~DJs$CSo+>82Xke(wC7o7KTFuBpZ)C7#VAH%9an}s*h}`@8-q1de zs6XUjO9RD-k#;(Ym7yXmFSY~RG@FC0aYOaVbvm3&eS|3(ucF(aCz7jK1iT`usB;|d z(ZQLAB&KqCy0zC*my(XqRSYJyKNkZG`o-g?SR|T$=r$7hiT>~3rFAfN@NjU{tt|yx za@utRa~g9q-II3q*>7Atkmn68;qzuCAy*m<=YX&HLH7^v@a(5){e4?Cv`T7nsw7H@T2xWAl}rnRXjp0bXA|kO$!}w~iWA%| zb7BI86*+V2Sx2{%7xj7Y7swR#ODfjQR?Vc9b53V8XXqw8xB|jWBDT*eMMILbF(eb@mYK&o^*65yf{mNq}K%+g%6yrq3FPCM%RLx0J`a{veb8k>8#thYD3FRh~E%_Pvum7vpb| zU-fKBrnv$wuX= zEGo#6iM`Ce5Z6n2h-dlqM7g}a?qvB!7@Zv-J7a1>sA#VvufC3H#&%qtMMorv_t~l1 zXg4=8oEdLBmnU<{5HQ748_liv*gJ}`=2^QUYFW)7?}9p%nwzm!4Md~XN(NHy_x2}b zaKgwunQRR|{tSUB5}&L5F1hOP@^5KaGPS zqmCM@dN`6fhXo1M!Hsfpf_H*gfp(?aU^&;;dF>p1~IY3fvRXBh0SYwi4QnW+1OBbneC6sNx9dAAz2K~teL3=ET2hlzieowMd z@RXYNPhWr2+D+B)s#sXIBM&9@BynBwqj23-|LKkpD zqE1uE5&P%tLN8AE-OGvZ*hYeW_3D_Z-|*nWEj$W_OV~B|BKPLzrLHC25ewdeCrZY? zZS^zq8Ojq}O2KtIEG2i9ud>e;?o#yrSF8_|&YWq(k2!n0<)b>hW46|_){$9om3cRB ztAhn9kVvkxziv4kNt2+9P~KFFxaHiXmcmN)I@P;09P2g}!ggEKHIjoZ5ewon(qlyg z&IS^0*fx#o@;fEFV=UGLL>dJepP*ym_YxXMo3^?l^LNYLt_N`}Rwga&75VC(r(=%M z+_sai!B$>2XDmGHQUOh-L?sVrwF@_6;@xgLnaWwlC@hFf!Zc=ZEOHsa@);~Jge;jP z3*rw$szs!_r44;62J|hd5_|HIA|CAhc6=~sY+FfPPMOdlAUOOVAbdnP@xVlU^EmeJ z^Zb!fhQ32HZkujTY;IGFvE*8vvm3Aj*-C;*JO2OA&mQKyiWKL=7! z+GamBH33Re*Jk0BAy# ztB&}{MY>3jI1=G6osC&gB%O_=1(HxCjiM(Nict4AesN=rodu&3)fb+F`i*W(;Q@RZ z0TmhFpDvskF);yP#_P|uuNW-1(t22N^R0@iLxZM98buv@rCW7lqr`dc_J%E|oO$$0h-tP}XmG>Lzf&eag($R82DOc4zm`jx zCmXjKndKl}b{Hdr=IdxH5Dhofv1wQ>+!viTk{UvF)gvv#Bx?#Gmy+UqKg=vMbS!~{ zYMMNjDAhwAMAmg1ZBvc!hQ*c-0k!Dq9$7}pl46#J2IAZ_udLMB`tHeO^6ngD=4JBH z`^rD}=-pEAfO;_Fp3&f@TG+CAOnX(ATQdhUC^FN~gaImpPd{UrW63+U6y`N((M{i2 zC4RYqE3Ig1G;`Ds?DlCE-O8F*Z|>H|Ifn9Ns(!xV9~3`vIb95qWp%lI zAlHM;Lye z;KLA_o8!26!|cUNWN^qM5aCn=vi2WeDLcX1S1*xfh?)b5JI9IB-A%>p(G*kX)fluC z%xM^hD8Up-BlkmMU0Txa2QYy!!`U1Fy8!z7`6+G29iw7E&n;%^@L1^R$b|us{jY7Jp@h^%J(8)fyU(3R}=F)A=k1VE2^y`&+v=rDfnlJp~f24_gG&P^h2 zdA}FSA}Fi4lIw-fGc+8m-VUeEqAK172c{^Kr9N~U9dh2RotJoS|2%2D&K#N>Z8%vz z@g}IL#}JgQUP2s~R$N4nU~Y3-N);n={UUlVm5jEo$BDRWNeB!#?Wj*mo6GXXnl1d! zOBHLc=S=*M3>->S`EtqvL`|$&qPRtQaU=IbP8!1iPdcRyAEmZY)I5!4}0D#7uU4|3pQ7Y;y( zhbSG=Mzo6=>sJysOh+0vajIWHY9u1LUqCum0i72fn^xi)fpfA$j}mLWM^D6ITerjK zr>;4fy+)`y*kWYpD_XW#uD9(B`V?AM;LloI+#@R`HRX$H1te-FZfsoqysWJKF+?rY z?FzoS4_1)e>%n3vm>D4=CwD_9oxS>pWbFlkn7<9=3Vyt|g}*JkgO?M|qqA3S2B5E%zXVTf#UFW+J3oPKzuVG5FTJ`hoOIS!b9`aE z3{f}p3|#jk9#MxfQiHlp@;gTbaG3udQB;yKqSiHwE)wuJS~8;R^hO>idIYWvDZmab zP&6hs^lmjH3f#wtv8(|x!7$T-qJUM(90G#cmXMo!i#|7;O(=SAVi<%n-lM6aXSzKK z0(*vrY9D!x>agvM1kj8!;`5D)Eog!k_NG>$X;v8(BDR=ZFFRJjoh~kD z@^~y$Iqs{3+pcmi&X%P+zoIUi=a<%oN0#w!0Z$YeaXI#LWC=6}{5!};m^&HrWOcY( z9tG>LP_4>rha5ZNuL6sI>)JTs8kRz)^kb=&>Kl_sjV5f4l1_W%G&Q>~xL|=#o;hN_cwFH3^)@RTMNct%q>`7E7~LbX9S$to zHlX#6NoQl+yP#s(cH0awm3AvfeZ+E=oIJUEOcyq083R+Lg=Qx)TUPZSAmxxVP_7Gg zg#jGWV^G(Dhl<(VH_T@;JB??;}v6D zmn<$~qMf9{28kJ#=$9DhSVz#$0%jS8ScKE`GpZIiPPyhi#|sRHevZ)((@z6$D-KvL zh$f8(rp`&c*x85A5HpP)-@5SUZABr?Esifc7+w^%(svcfol!v8b<>ZGN@lydDo;C4 z+>22>z-)URLTuaVK&UH3T~|VMEy~HLtm4D!cjhTS_;J^7b~G#T{ACpr`%H|9Lhb7b3OXE>Co2rgJ zF7v%VfJRA@l(oDLp1QqWNcLmWe;h-LC_43RXNSR4+9L@PBi72{kW3+8MFKM% z{jf;ATD-$`-k(m#!`srZe?jdRj>2&Yq*RXJZZLbF84e#>WURRK@*llP+yAZ0GNtPc zNLHUpZAPMZ+l(Fw>CNB|t8XEB`It%(X*{WdDwm%j75ea zjJ|Nla$wE4Wz*HQtf z05q}5DM=~GD(v~0f=ziQyt2I6yg!pi9gBX>{v0$XGKW@!_9Eud>8gLunrnaM`E|wk zRdF1<8+BZrpS9btlb9{^%d~(X@|x3v_ikQx^dg{&mUH;wvqy4@5)sfkIrMu62gEr`+`K|N|lbDD_j&-{^vR%a~Z~#(q z1i-DJ^sclH|K|y(N1fTcrVV}5(tGge5Se%^gZCstNq%Gt3 zZ~>`^OG!vlVX7o4`g(>NRbwXB;EaICmZEhZwHEi|N?c1;)R6xr)=o`+OHFEgmDCaF znNd8dKDvw=By$jPi9hIEKT|<|Zce@&ZKWlp>Be_Oq3dL5p(@;Q!015z8}^d^_-VDF zWj@XW7qA+G@(v=`KKxKlnmHNg1^8KAPF9THKB!l|f@hcX;*52{om6{xPw_bs=_)~% zXyrAV)mDhtma7$o{xBISQZ-kiX-h68ICG%BK!6ec!29b#Fy^e!B#Q|t;5}r};+P0r z)HYUjX>fobAQ7jica=qX5$kV|zNp1~kz|ZvEj?}frw8yXj3@!|FiPa%{k+!q-C(!i zz?V2Q<(sb+$<-IA=v}UwDAcFI;7WDLZ>?-Ooq&C(T5A5!noMiNrG|B@R-?UF-#{L> zovzXW zow^aW68>I=U5ee3w7_MrxUT`9A)hH)#l{>{66(i|*3+!FET7k^)vk)a19+xq&V?sK zLeg8
ZAX(rOEM{v`WE!>n~)0}FqgiykYH6!p! zkXj1dw8T#$S)9&S_aab_xEnMvx9;gOyAzMq-Mm^F--P4EKqRI&eB2H}-!ACtq}MlL zYla1_tVt9zv&68!;Kp{!BG^QIdrtt!#lrz+Yf*Rbs99Qgeq`ewcLuHyS$x^askcCv zWG=12e;u!ff25*AbZ7{>Gj#bbC%O^Dto1+GJi|~# zdo+CF;v{9J5BSK^(EKvnll(^W_Y7qEHGJ-*g~MYYD9%SNB(PxgT4d^PCMms`1p$s} z=i|ka?UpJ>Aeno~l9(+)TdSKl{Xly~lP#XmmAh{aKuyEZ3Iy{nYsx4=chjw-#b*o zvD7J*gGRqwtaAhiwzWtYDlKc3F=s_98R`DWDmwm6EU2Pij|LnbD)Iq-uuL^ z33^sIZqCBq6#c?_j4nY2he|Ylf*jn?NmY?FeqV~W-V#GqFd1aD=hhOYA;^NUgk2rS z5yulm6GujC8Ev&<*h)L0=a&MG)wD@NX} zjw{rFVLpnp3k3=B-q`(=D8WI_B{CQ3%M`pZh{BzKo3VeOAwcd4ULD4;|fZ6r8aII{$L!G5HEt#Y5;rO&Aw7OaDof|G6#`tT)wd}8REMRuhfTY5h6bOQ%!M_PHZZ}#~0He z?m(^eK1?X3Ic=yDhtx?U{iS^2vzO>Fiz9p1Iy;Q1BONuu%}y<&sgQHsPpRqw&R45SS*jP+79nao+D9Ml@Y(S>&nVd{rnHJYG7 zCywC}Ghs^?^_Bpk=1s^HV|kiVmcC|gD^p#eY-Jse3aIh9F6kj(HUQH;~?^; z3>Z~m;eKZLiR06QO0pfFpr4Av0L)2X7T}p+>Z8zxPIg~KgF=gBn`|E;qsA@gam62? zVZw2+9hA?Ou^!LhRvy_utKNoGEb7qtYYRuzEGX>~T7!CYh82U-VV|I$Qt-*7XUHU? zQ=fXYHi6Ep2b&$Nv86+cEwWjsPP>?cB-oeq8G^&4+&`olqFNI?kDwrq}dqj-t>kEy#3u2G$XU9($8$rp7Y zb$-;rO>{@aZQKu#!>aH4wg71o6py=C(m3J^Uo@;$fpto!CdJlJ!6}F!2Kl~TXI7^^y%KGU z3w-Uzxu+xP8V>VgROLB)v5JVlVPWCoF9IeWyyV5-^s0o~wDPUtQ(@S}E2B_v4^C#r zfcRgrV4vi|e|Dap@$9Bttq7ed-s7j1mfvQ6_wbN{o_XRM6KBVANE6G)lrnUdC_A&%BIph4Xg7ZB^Yv`moJR6&lU=y z2_KZg?2pS{?nspYnq60Vr+${;#mS{1A#%hqq1@nb=M@N4E|*(8*LfXn?woL!=eOWW zXuKTeKB2T%osS3kPCIN@(~%yXUWw`rZrpQ$Q}T`=$JNi5p%ck&b=d;z=Kb*^RwcCF zsR)e}U$w8c8VV2`NqtO+=p)r;e=xDmDH}5bF$w>+&cR+WMv@X3wsky~;xt{?SCqE@ zZL!zcIiZUR)sA(I1M`I9vZE=hwGR5zion2da5_y+xwd?6j%!I3vjLM(d_0An-i5z2NJ;+*y1S*91bcHD=ryDa`IJ?HJf?}Rv#1i zRj^bd5{hZ&+Ldug2hLRz@8mi4;}~u9+SJ%YDCxQ}qqxlTLW}q)Wgr3)p)rAALFRd3 z%ZFtZN2X-zKcE`WlAw5$md1 z?h^?Zt(+Uaxh;mhZU3Bt1DEf~$CS=87*|1){2f5`yt&zt-P`+NfnUq!X3eT@+%$eoa&^-x_F)k&>&TkyVZ@vG(|xIC_Vh-_ zLy7U8+T&qE&71u}-&A%i#Qy`!lF9@1LMaT&U(%Yx!2Z!o)n>IhiuV1msZC^YLa!^L z&s(vzC$KK*bM@|75Z>uckGDBqeBLp`LY%XCyBlP@dTz(dLXSikM}^R^b;an-=H1=< zT4OF40eW>x=QnX*(7hqy;nLYnr=9_caEGru7;#OC(L>i>9i04I@jcemlIy+&ylk?QyPnSF`)+LuoH05sPTCY#Hk;G}7Gfux}e z(dft0X2EMUOgza%=~BzNOPWtJ<@qjh^)Kpi4*KsYW(~dzl(pGPBGAw#9ScT7E&;ep zL3dX4%TGNXnLJwCKv^?`SZ&+gUmpEt;JK}d6DjX8vESu$e9O98tiH}y72Vhd;gL() zZ?Ex|>VFICed?Z)7-bDGu-|K*&$$xtX28UG5lRQD19 z8%lqHNpI`1{ zwrX#?{C?@HC|DtAyWqEKD&U(S6?93N(DA-j7sqSq{wOR|mxR<-<0Uolu15PwiB=P* zf~FD|ka>a@sWnW8D(Q&8X2ETY}D!%hiu<(A=yyRCDOjts=-qvjV**y+=GiU(( z?I_UmEwj1^f`2;H;6v`m8XMa0IF~M#{pf8W*wZz#^zjw_-v@sJrX*g-dr@5nwf;+U z9XsQPhqJ}M=5|jq-V$3Svkt^n}gm<$&xWi?N;AsmxEpla79Hkn2A1nR4%3<4FE`T zY|=yj?G^TfttLj-a)oW9W0f;Qd1<3#biR&G_45ix?I@7ilNu08;Ykdb*k?PJ*1zC; z1KWtNNi8%)&pg?Sw?ndc#XPtCRRFPiGS>mFa=k=NT0gq0FervrcPOuMy&%)FHE_n#DaZ!dQwtZGINzS zkAd@EyTbjeLxgQwlg3!^{atU7@*v+MNQQw_a3WK3`|7~OBhEF^JIZDin%{ZNZMO028O)!(=&>vI;wK9w_00ay)P#MK?%1CH&ryX0bD_IAZre#bNkmbKLQ+?&&qX)3~%-8h7_uQ7OZxit0yW(2A0WKe@?WoJMeV%xjvI-<%hnjvhu7!u`4NZOB^Y?yu*b$+qjN(R3AIkI?V3<8v)TE3A~6u}GU#(Obg`0ku@~Kk*qU z>Om+^$I>L7sIb=PC~_NcaF**TBZya_)~$8v8!gIx%i`=XpGl;NEMM3apSV@6R{L$R zv&vIS?Cn#mvFX#T=X|(J%AySqdV88krNUM*|2)l;^}T&c5EpObA- zOE16Sl*nmpJohKHVw@xrOGT?i#ag|##I2LlXJ8bjTpc4(d8B6iJ0zrz)z;p$Btuc6?yMaz5$Y9koiWGRi7zX_gBQJkA2)>*X?$1s19* zE$%LHW8l^@d*^ufgFm3sD*q1;@}R5&7e(Figd zt`n8yd1ZF%>o6q?PHLw>TPBk~eN-*fK8P4Tw28rt9`53VJ1)lVYCR66iKGN5ewy>_ z^QnbEkeH1J1;x2&%QQ=pUxvK&4#7frZG(VO-kC=q1U^Cu3&_0I*tJWBII*uEG$MF` zK2VVwW0(C<)mskQp$9`agltKv!f(eFqylK8!y2*!zD0@$o>ztGg90wlWomv3M8R9A z_Kk)R_Cy<}j_4t^UxNaO!M?qo45)O_gZ61bHyJKR@ekeBCZM2K4cVdhVR)0#x~^SS zba#5J*&ZZEkrquCjKp~LP&h)R)gT5^$FVp0|BixU8u0@pP!Gf(fMA3{~du`BOD4pgNrc6 zCA`BkP%8cos=m7S&e2_?O;Gli+Qq?|s8kMKH!XB9!;d>)uC3y$zWY0nbjLsz^hQJW zh#h5UUA^fUBv;&_TW)3!>pN}oKDhvW+Ao)34WGUTWOatieO1R9qzZosrplM-W`x(T`{&YM=#S z02Jtl2F*ADQMg6V7f`*h75n(@Mtn<{6K`GDXNK1`-*zQ?Z;r`{`4at(r^Dd|YqU3T z3vZ4$9`zIaj;((Y4)Wa%R)#RZceo=NKnrOu5)AS=^&s}6hv=}PF@WVMnh*kV!g-pj zbI7?|M-}p-YG%sqlB#;uTOmzPDB(|(&jYK47Mrr`lM}WhHt?eFDIl6~@hgMH&YWgn z=*_JOE0UH=v3=3FB>*Rno;S7K@)@&SH{O z1{E~;)|VOCwTB-z=xX)Q89o&nf*5kP>o8*%Mn@j*L>v-K9OX)}M_emIi{pkHlCtQI zolhAry+y@g(rntAJwqC0AJuF-HbYPK*h3T2PCJT;OzD$M>4UOC+yO~D~F$x07Kvc!`)Sh@OivLmTn#;sNpNC`Gq^c{i6~WFg_@p z7$1@);e_s#PV{f!4U)tcJ8TRGM;?8)fi@6bYKz9*34$}U{>i|UQ?0zr#BX1 z_C6j@oGvR^ovh5X?ackQ%;s!WY5}#)G+f;7>aJXiY@Ez=*t!AEmoQ6#RXX4Uj)b-V8@9Cp2c+fq@%Zi6|v@~b%Xm5T^D&I+$oUVEF* zFo$@=RTZ&{2ozCt_R5k`1NrA((@1~fp8^t|7R$|%zP&y1@NiJ|OQ)RkuxNC!%ZQJh zEu7Z~oxJVMRE-?ojN}qkDApsJbQ`fKqZ1N4dM8?vp>5ho?2$UBVK3Mg?0Ik-Oi;U8 z^bv7dv~cmNubui&b5S@_vXUm>i+JL0$m)C;(Kz%RI7T9_VxdN~BCZICAQ8n2fy9f6 z1#IIJgcR-?g;>3bZV?=&1z`)w5a~oLVpIS0_P8%FuUM75@OkGNmW=@_?4(*h>Q>IKRpd$=+Ux7leeVVf% zmrZ;Ef?m^b2-Do_vxRhkJ}O4EjX$Dy<{-2W2v2V%0o&o5TR&Z=Oxw;6Dk6x8M^8nx zy;U4>bVp7F@N?&B_M0`np^CFtUtAvuepmh-goAqs_^bwD6-92c>Jks3GFjBB{bMi( z#SBx=(oS5vzA&&S({{_EvhSygzo zlKeVSF7*3sW?w(#6$(!<)Lkk6yA9Tid2qU&+&0UvXcH<*VXv78BQ>P5rw!T@l5^_( zB}3_zigTI#(@NM<$x|-sXU0?D7)SggK3ZQbxufv>UyNl2CI;i<{ov;ji?*h%l@0-K z-^a0KqW&+W(*Gy||1T)vUyP`bv7@1bxt)`(!@sbiGWynE5L12!bA2mmr7w|{zNsVr z7wnJU(eMigiqApMLd(d;#QY`sYx!5i$nX~>%1qDtmyc*{t%A?YLd(v<&dkLAh5XaE z6Eik9HFLseV_>CaqGxB}fTR=uLid>)^4pkN8RP#2@_n^J;2%UO4eQq&!NNk%#*RWH0?`Zs2;XfQ!bT)AMhvOt!ovvIeef;&5D9&GNCw=N82EOqZZ|Dic({*TJQAg-s27-y5cAiH-MPc|g>%rG-}(XJ;vw*_lT`zo*lU zJLMX_+SGSOEsGB%yO%HzNJtcW^Gz@niWc$@p}ej9BQ%e1Jg+D>#U;vFAm;BR9D2!$ zw|jW{fnXkHOfj)PHD8)Tfy}j!%(W?ESd)YQjF91PB>4j}E@wL(IITrzp>_5ZcYmR! z=KK23&3E^+)$aGDns{yHvs);!oP6m2b9(rHWX`|y;cp^*W$XVXWrS@EZH@kp@P8); zjo5!r4@UZ5srr>he|ew(pl82AuVkxiWBz4gjQ>yA|1*960~-6^*iOc;S>tOa`Tvay z1}0_}#{a~2UU<6c#S6cDGF`>Ci*FL!P8LZ=7vvs@nXdw7!Jxc2MwR)NX#PM&0qrH>qd$AIFK!p_*Se-me~qI!`<| z-AoTNQ;#xCNv-{Wd{Ov;riRPX2)02y@j=xnbvaq(6yA3qG;dn4v(E*SmHJrtdGkfG`9GhT*fmz7^p@eN2fIcJvX z<=wzN5jgh)I*;o1?W)_oWAPIA-N)mTC%kVHZAzD!y(hF54E-U>s&`NC36#w{sRu7l zHdu^Z)-V?L0W_&jbHe&}LNSBi=>3qtb|2B_q z(G3zVkJ#a2*ej9vtcr*PF{1+U+;_}O3)sbS!iV_4-G#UXfzjcOWA?1|K#=kv#%~<; zz(D1{LFIu~-01c|x(Hzj{wyHi>_*`YuPaIcI|-p3=93B@f8r$ou7lr*iA;gu_}Y&f zn(b$GO?b#hn+M+7@AHkWPit84j-ST>?Kmt2d}Eh4-^5Au9FiNp&5!p3$tn1IKdxNJ zaWLPTD7i0Tf0kT?+7FVDZvf$Gst;gfK?(ziI}vCB3jz)gtZ_MfLEIpBs6 zLxKo)SkivkZew}`doC$~cI+bjMMmg8l$&b3@AE`5M(hwp16_e5@cbFy=MbuWF>dH` zV5@{Gg2DPrp^JN{`+tl_`M}QU)9ym21iO-qi)KJT?SA@#HAC8?QVV5#Q96&hb_oIDJDB|>HIyF|)Ikd&s(l*$#v$3=4o^6{kN~P& zgd0q?=w`^OaJ+y8JMLY~=5O{iRv|vnO9Du{S9(ahoXrTe2sU9pAZG}?fU|9rab373 z{7oQDc((4!8@ODEMnaoF>yY&A#wTz)qV*_OBrDN&j5GvWeos8szRVEKZQ6d#9h?42 zJJ~nxWw1xWO|VCTP1r}G&2Mo1TR|5!z_l13zOH2FLhVo==sw`yaBc8c0A7MkU^s%! z@F&)Fa37I&JY0THAY9?~Z!|Ye+i=jodTsi7dvW`|qLt?r{vM45{w*W{+?M z$`bX&j>5+cMBAWEFr-4VTJev zupwjzH|>h<{AiDS`raP!MA#nwgxHSe0}<5=9^zyA#ON9F^u=oMLC^^@45{uR3#sla z4zcYvy+PZSW{-M8eFMI+e!{-Nc_Q=%*$kpX*a|=jx$0XA!Ncc)!|SE!kKV@WkH)|a zn7irfA-l%eExs0fqxT%VW`7HLf_s9vaeTtKfnpDMBH4AkM#&K7`qoAGRcng4ejqzY z5xUEdeYYtPKTE_Dtdodq_Yv9$|NCyVPy{awF9OZ(l#sw%&@ucJyw_XxwX6Xjm!wg@ zZYaVHHp37cKbAbaA@p9qzt|FDR#n4s59nPd5VrSq*pPZJ<_)pCSu0_)!tygBzC7Y5 zV`na~VZOn}OjDgRu?zl8+)qqil1*?C8?!e{o(N0O9K2Jf0a*xsEh3j35gVcKcFqT} zG7$+rpx~NCw8MGc%RXa9w_0rm8+KXQk$X~ zCOhMzW>^LTX7b=abx@-Gg&pY@Qqgnp)`HK#JDPUiZ$7;V?L(w3)7KiAKiZx+Z>VmV zcEopx@epS1Ni+iDI*`1`CagtlE?&AkUbpVM&U}_Wt3I_q+dg>P7k4;YQGU^$?L}`# z)wB&p-F)bwW0#|x*$L}JXNy}Myc1mtTQJmhVEsygsbTv#aO+qPI=d%Bk5w{^V1wlA zu<|n64ZLnnlN61_mgn|do+bzYhdr)Vc{tOw7tfY+Q@@(k>51FTmo>{OE@_h<{9KWi>QqOv!!tABHwd5RYUy)1R zZT=+Ik6dj-Cwl-1I?#huQ&`vs*=j-l^>`IkZmdr}^0SvTKhHDkPY0SV?#Y9aa1htq z4NP^kP}{=1yVt1Z<--eoC(;DE+Sz?;z83BWbRXp#hR#)}P~wc*r8AiXKv>_2M!NDw zcB~eDv_ro?ZPm=>lmYvrQv7nLdv6+a4qG@a0hPmRJBNH(lkbBW5_a|6i35;_GGpVN z5#rCWhy{|@|KXLeoY&8QSnT-$f7f7m(A5)AHcYLnT=0zpv-E8HtBa2j4QM!^O zM4k2I^!V1$LKFJMuhVbtUJa-MNaGHSnqm6;xdA^^>?=aj&VCsW4YrtwQFfwCQ&^F@ zyt5&WiDy8Jt(xIkiFqX6>U<02b%WAm(l7}r!UA-J1ycMqv(Ul|xz$}gGPcF)d|CHA zXBYO3@G04X$g{iE^mk94g>n0t@zWWknjgWvN^En21Kc6sP_l|Gii#n!&DS`Ew(u$M zZbyljikIYB2%J0l)rzsyJUSj@ep(E8D9`UkW7ekH57@J9DIHi`PY)FpopH~2*tcd{ zbRf$^XtCcHQQ}1bGLn0xuVAB~H4U#6w4UJ>)sb z@jT-@QjClXY)~`*RJco+EKtkN4W2~IOGhxztI94^@H5Y#$-nL}dU^<0FG%Ss5BZ9* zn|%FD*}8YnKkRCrW}_)7yQLo^Q}fo#|HNUCrH z{V-l3%N{O~-L!tu5U6M^@>zabkeNG}zp41sQbA^S-RMrtW=ii=M`MPnIbVWXBmNxe~OyM8{&)D)=e2r$ ztbySD7NiRr6}-Z0lEc}!EKXbc29hSW83R{#i@XnZ3(gUsqcdE!Gybc9MNWV*mvUCB z(z3kl2L2&f@8#q`<&B|pK*?Gk#T@Bnfd&z&nn!2V`w?a*D$Cod^iFEYhI|9K!ZyW# zeriKRxwJ#+dS*Q#=OVqt==1%BmQ+JaO54KTq{rzzoi=>Cn)as6>z+k^zN0FV_);?2KElvBFv8_r=FM9cU)+I8ilB&If2*pG zn+DZ471F}dA5xYFh{h5IIi9RBkl2eqLNQquG`blnPhohuYxDus`;hjsy5i`NL7vEx##`RpLUWA39Axc-^7M9*q6dKs zje%zWWI;*WSjE2Zd~g$aWqlXpE*Lr%O)l50)U2d?VapzZ<`?{Z9@8|&u%}Hr!wk(! zQ}j4KHl9tMpO~DGOf55pR~hGAdXKWE)wb9fmRTQ`9@WY1u~|Shj>7AwX|Qvb&#TNO zab^1!f&?5tsE3XySJ}m&Sm`2nA(m{6q4icpy=$G$W&ZVJ+ zT<=QbrW5{)>~p5YYrV5^XLt6uv}Ta}av$*9>$*m5>ixFjg$aS^j~}uSbWnNt$F4BN z2W}sac0!;)~7lOb3_IP6l4$9HO}$-EYMMcF~-S}AB6zGqg@3AWq{C$#TO$Ikb!$4vNoT5Kasldif=|V zv-ylkT)0-Q$areVi9@<0*APAY?lv)hV*lhTa?p?wJsiL^Tut$dI_d9~T}kPC3?TJ( zhlBmm%v=ICo^Y}}%*FE=1nVTwD=fk?n@a*blL5a2lAEt#XO|)Py50EDgSRd)Y8c!^ zh>b5fBDIJiT0i@V^aupi;+@ft?enfU>b~UZQbXufpnv0=i&=xkAWq@>s z&b-HST;?Rk^%V#HG5y2$-Fdh)) z*W`z^6htVZ7O>Lv2U-YNv?Xx{ki0i544hHHxKnquw}^2Q=^)^&aCP}CzW_r;(QduD z-v1c`t_4-q6)qa=>@s`@kda!YVuX2do~J?ZJ7~UhtKMUwXs7Tx0VHPG5Ko3M9_JIJ z)VK*Bq8a>^R6JM~xR73SxZRPF*mJVeCXi~y^C?Lq2Qx?^;?yl*&q4-_SS@SFOMfiN z(Tg2LE7So5lJw{W&8aw~xQ(WF3?Cv|{gSMApVJl>U)PGHIPQ)c^(vsA%U)U!Zu<`% ziEP8UB?i}-&)S%}w47~-ANO0ku3G(0$6)tg5i-KzEav^kiz4dlL8fjCu=nj`qBaj4 zY~k9NRYpw`x@~`_+$^D7|2`pM_h8WVIADsb%Z0sxsN9W)*7mWRxxLqHjMh-bVs9ps zRDLZ&b8KpQk2}CfYq7g3`!Le&3!nm1;$keUF|l7L@?h8UYDsPyBz5o{czY$MJKB3Q zEMdbv1`SxCRpGX}cK3Lln~7n%P4B}=1$L7x~b(Kb6K2nJ3jR`Z0h>$eHQpkb(VIdO(^w~=ip(* z%jEzrl_TeB9N`0(2y@<>3E)EHV;NF~!?+{MYvYrF+|^e9nwfjk^?3~7K8<@#R;I&R z`h7hMkOb&zs-mJd1&*3fuKsx>$D+DhhtqJ#v{0Ui3xtJ24i{d*Z8Re;!=<<_tbj9? zYfN{IntO5AtTZb<=6SyAh&P=~WfTh4D6dXI!ARd!8Q&t*L3F>4#4|iH;MHzRLjUo6 z_z=9^Adff-qb_@iJ|z zdh4z25ITb?&m$Va5lo3Wg7z*tV(LFu(9=OOcanupFRW)``y z$tNJqgk}|2WMT}h6w}0lt}Y!pSl~k@i*32HyC7n)SiHo*Ul`4NYec@OW6o(VqrAF$ zi>F*G#mQ6Q*56y1>JvHjb|?si<^uudoiNP7I$IH=s_CW;AOVkSh7rn8cTBn81UR!$5wMb<;pZB*_E2tJsZdvk(QgumOqW>3xAqg=3f!^&&;Sv2pE`P1$XKbS58c*;33 zv)z<4BC-Jny83ySFc=Ssya|-GfwZj3^Sr!rNz#MIF#|Fh!AQ3L(M=$d?#T~-iY~!N zaKJY$wc4L!ms5#M@oZXux|~)IHSxf&QLtXE)fw1!>aBD&+&2#oge}qeG*q@+tQVm$ zoX!>XcOkRp4zTOBSyau&>+=C_`!ht0bVL({L}+%k+3h>NVb|;7AL77bnXX|UTIqGW zfCb1i+Q3SFM-MBJP|l;poJAhh3UZKEC!tJ1qlg#6auASGka{He&?^q2O1%ZA;V+_1 zuHk3!e*T@>=W zGdBaTozu-8bL5G(R%C?i3Y>zh$6&I!bLw+v)?~@3b)^xP_Pwfe>bneK&Z=t$^zh}x z0}M!g=N@)#=3}MaHd#YGiZ4)P=3J7nXjr!pZZ~k}$PURorw*I6a42&vW0~^;Z;4c9 z%8pptVUHtxCx0AA=-p$kJIPfNsBq#KB!H|6n z7qlDv;6Ycv8jR0Z2fRAN+e)no>YRv%R9rL2LTkLL>)=$7_OWcdsO*P^b>QNLtF+b9 zw;y50L+vulh`#U9(9N==d;jQHxJ_?peW-}=vH=xOj#?9}% zdnk*#;kzV>D)^;*D3KQU2HyN!)oNo`w&KB(RLJMw?S=tY8VZB1>lgWB-C?~hKxSVT z)RUrto+3(@&tVFN;4BikV9@aAyPPGE1q?nzsnN7QG$j^VCe{qGbI@gjcv56*D|1B+ z#!q$LLQ!>Veok`kq=I)fyN~ScJ3$h$aJ-J)eS9Knp}jL^>Kj>;S0ybB>W)!6aeN+s z$$&Y2VX+MJo=s!o67?t1`0cuZ43=8vV8xir&yaes2}~cb=QGQRy{04;ciY+^ZDb6nL3pi-P zP**M|=B`^bB8A2KfJ!Qwgiq3@1`Mjtea>$J3V2T%ZMXdV5gjbg50)Q)qk6mVMPjA# zaJlutL`GH-i4FrX-W+db`|vynop&aOdDTYiUWbvualyZmxE%Vurlp4l7_n@L-#fXz zNq!Jz{GwUl??pk1_rMO$0H^w*-C{MTn)nH7s7#~8G}!Z!(}Vs?gPD?&Xw z>e$IxNJ0%qvy4X^UFXl>ei7GL63wt3g(yStZXK~9PFc?#CDp{?3Z(Y1GtEAdpP>a* zfV`oGXkZ7|V;Df4`)VCGqsBq({_1pe&~}ySIr4?Yhbo<|^Vj1{c$p~c#QD#M!9|Rg z*wpw}>`B@`8fX(IOx|Ljw9olPTHNlZhZI3QWEOMo3t9@S?tESCZ}v=87~E%z;u|ng z*z=JP!+XyDP|if)xJs7Hkl%3RL13V^p`+G%!A`AV08&);*Qo}FjWx&2`Ma5(dX zjWx06_1Nypv#fnMJ>IkN);X8E)>U2>E|=07+$@K$*Q77iWBc6X7JmXB6CLv!B8xi~Zg-v(w%%kb)iH<>|xj#DR zWmf&F&pkdv-j;8QQhX!1iHR;y$74y<6Q`Ze>t=ODrB5kbAR-s1(5^_sW+@kzDwWI8bXgFN7&vZ+lx3L#u@M=Y zf$HoH?}o%MU~;WhS7zsSKl;f_$SBa&=CLq$>Grt)&%hlgBA#?#PIH8PRTW zQccd0=D@+8W?KlS3{Cav;#>zsdm;u{(Ou|iRZJtYP4o2*VJ|!$uNOa2Jnov>R=$jV z@5f8&Bi5U6wu|;Fd#Xe;YE3!0Jlf#^G$mm=_)RN;S{MCRYW?P6p@H229x$dzG!B|H zi=s`_JA%|n=HEnPNewg+RGmZ{Bf9&!&Pr3x;@qZG8QHUyXOymHig4DaxzgNc$dvj) zl&u0N+7M0`a(6OWKObmE?G~xLCDdPRi zs(?@Oe4khC>U?wniQI;xx^jJjV`F}ADY_`k{dqc^1UiK{b|ggH;j%gZ@aKXG_xaiu z4#z9WqDLm8e<}yArrX+rO@`np|3`nWAaQ6Gpl-DCCREr zUS**OPO_d3^+-GVyNWPcjq{(~uAP1=MJ&z;T@;B5l9M5B)Q|Bf+oaq~D9J4%q-J@c zjjomp{MK`I*`X>v>t@iAG=k1>4-%#b1+Sb`Rs<=Nd>cyJgy+(mJgB7t5km)?!TohR z(K2G>BoWGy>P-4wD%v{d7uZ3-Er;fGwJ!hEsKizjPM(~++83);pTFz((J`KZlbwpl zR#`>N$O2eh22uGP$fGdh0s+pTju3yo;a2CttXRZccs~K>oe9h_3|JjdTdiVJ`Q1;> z)Yc>^&gXDe$H=^xW%_}~+JnCSlyo(Mlh6^P`j&o^$=+V2-aIP3wXcmXHAx^4K8Lqz zpxTHdM7BeJhDTDgx!kJa+A)5U9uxG%;^MxPG}GI4m7>)a@X(7O5<=oc7;T}{X>Z#Z zEsY38r`ek|aa`|o>N8@H##j;GFzkn{NIps3RakuE&T`yc6mVkS@Sh2SvP_cv`WLhR zf^i8og@<|XJ}T2;K}=*%ocic` zA1NH#Fnp!D+&Gq4PzG|p=M=}c{sV-H>f{mAoWD_M4=esXlt#^4A$ZL>HM8sIT#10? z;DuRp(as`{?!-!9d-khEpSC&_FA2+f2>2DdleQ+6swm`VT}!31?<*X2%Px%4p9Gg$ z<%reF!ake(!-Rtm)Bx`fG#AUy=!?YK!)5$XJig`&zF!O z0$9=3R9YnyZk5y%szYb4`$;bC@h2x#$)apLfK=zT)Ciq{r*QNbP*c3;=uzJ1fdx;v zmnfsmXF$yI65i&9`*xKFuKTdCgA78{{vZ$UtKzw~_tBc{xyQwoEUtTy$awAL_l5gg zLX%&V2B_m{M&oZ=!s9AYtVd>!Ux$yekmq(3aukLp$@49t@nBxg*UK%`deL#~wf?5Z z50m}~_fZ_=3b9|Vyu-)ct+Rz{XEEbI?vn*_Xy7UxfZ5z!Co^)KG!bjdH}D0aDL4?! zUo(AJ)<0pA;5QzzX(%9+iu?gC!iL}a_&-wsSoV3Hn!OgZygeRIxsBPNu3nQ4NDY~( z=-<-hQG@KV)2b%O+P}(0Vl%r?IS(av8A3))S1B zt~WltK^OjQIrSdJ={0=(lb5ZFsk-edvwd_d3|w3N0E_-=@bn%=bwh)_otdiK)5&f+ z17QQ4cA4?zvi-PTvo#pfll7On@&$?Dk?IlJCHCbo-M!P<2GLTMyb4S1RtRWcn;h)( z9$B;H0MH;{sU-QDI-+i^G9&TQ_RhUh+_0N_zp(~2$gH6Fj|g%$KcgZ+8q3AuA~`W! zW#GOz?q*jmnVUedUJWt)b+JD|D|CacLk!g2_G<5LH=_&Rs0-VAgI86^JAC9Nz7{pB zt5jE(I~>J!krk&VriZiQnxg9BVcpgsABImDR4u6Sx;4jGmfINMyN+N9Ply-OG{mR z{FW|$i2&3f4NMz5o(+O=SE|MXKc=zEb^Fh6b;;rN7vVToEvZ;R^|^?*bcEJmYNeRT zziW0a1d<^8`B(cW4h=iy_#xnqCJz#wX%0ZkMli@PXi|Rn zFf26AilC+rJET%C#wT*A`y>21ePuv82+nYyog?G9?{_tp(#Xwd$0DDyayrSuQV{r- zurHGJC&9*C8R|7oF}K82ED`w8CFOTBJ>|l5&b%Lnj$thXSpEu7#!R<8Ebx1yWs_7_ ztst$!n2dd0W^85^2%fVRI37|2@mta|t-|d*f+hg}f&B#}6?^S{UcXonU#Vkqkl9E` zhEEk`P15`DuJ*Ofg)CYwE7f4-Eq$2j=isJ$ex`4%8M{Gom|QpPCDP#zKc)IMh{;L? zJ&T;(z`R&{J5 zSF+a&QK%x$03FG$8Dk%i$y+Y5c3-TO2dd}rIE_k`-uC`{j@isi5X@sw^ZGm$BD01k z%IdyB{1AVY`B1`Pu+Rs(x)0EAZSX$%KH^j}AI{5NgT8$yw5Pgrn_UD8T_R)_-Q<$z zy5$8gOEVu07pkJ4oYr+d7_UnK5A7eZoZ?hsBOfFXLNFJ2N2aW&=ATxaT(g2*tiYx3 z5}nmcC*+x6M)`{&eHeV4)jrtTWTBkmK$Ut4PMqhu3H4$Sj!%ybwj6B3ah}i4fW^*-?7r1am0O#5-y>RAA^4%vtm@_q*3Doj2S%xIe7b$EDaVf&zQ=L zZ;4GB4?)~v6h~urVv`*7FjbV#?>&QLLEof1@RX7K*V&082ZJZluoikQ28X%@H zp+RpjHxd4p$#2TKYD{EgynNhculH^ltLp+y%4gmcceO^X@-ymykM(~McaPDLMC+sQ zC(gu~*fu6MCbn&7V%xSlwmGpTwrxyo+s@l_&i_5<-1ppd*Zuac)gNl@?!D{TsOr^S z^{Xe{&Okm>pRd}te!z_Jlr{ogdc|qL5Tv6*O&X!#D~|@k3(j1WHr>rw8LLIlEU;%l z{gxPOJ}l~p4tYRdlexri(_xL?F+uH5Y@%t+Hvc7XAv5I8v!44UrRI}mrK|B>^4_+- zMC02#&7WmoF7>I?&G@6u!IvhomnJIuwebUYK+X$z3)g&#(+I792XM+S9SRlrOmkH= z+c~t!mw}%@XyCA}o67?$pWLM6y+)g{Jyp=Fb3(@}Yy^(QdKKL0 zkQHhIFG1+7-);K`-tljz62|o+sL;+x8eY6{)r7HZ>v|yr*TSV#!X>|mq=KdsqQAS$ z$pRer)V7xvOkRkGUIzG5#viye>yW!b+Qh@JGp*UkpGk(yo!SXX$RVBx2WVsM11xKB zy4QiD@o2pNWLH5?NvukY7$M{@64i z&*<~!{J@{XHnigV%I7SD?m7LgyR#F4;<^Eas6CA^yn6M89hS|&@C+rTFJ+I=X+O{o zb^~LY$$%wl$O(5&TbhP3jp4kTg(oD0_F~cUWrLPuJbIa@fZXl%S59giUzoUOs7%(%q_H#pEu0 zm-xB6hHpcBV>jHaLk1Ld82Rd5>^)K!?q0rJ<9iSO1gAFJo5D-aJk3v`M1h}}WU@sJ zX{(6%d-doX^IKouyD0M|_`fcZXlBGKv9IVDPqxz}JO_w`zj34!D0I2$_QVCx{ltLN z?zEE?_zZTuwtsmGMm60vdY=!-n=7HG#hj@z8}Xe(f1Mh{{4 zZ*d}6P9K3!4x=vEFi#Vc_)Y|_acQxBWuGDWo&j;Qa%f7h-PMNiy?ukr!b}IOlRN9f zmAQXRA2Vv`RZu->|F)JNF;S4HcviNOry>i=LVe`hSzwIY$6RpbXVBv}$^gTo=oY~8 zD~lB?!BASPWNyrbJq0viz-jn^UA|o>xwJr1_QNX13%$vRZ zJ^aDu{Jvk#tC`i%$)D4AM!ZsC#=?;|vx4{avWC7>OSlY(&3qcUT?Y?Jznm|$4BN@k zl!=>o6fu#NNfRbfNt?hZVsR!RD`N2_5uH@iV*JE3a*NqUgzGYLOW$sSlVjxRxdIEh zWb_K%K81^A@(KqU##jcg>}`XPDJHMS>{`Do>h~OISh#1dhcfo!8{Oqn4Q$NlS%Y zFW3huy3q`-AibH-(DjF$>-C3~8mYBz;p+hRecB)_c<8yGE9-MVtGcL3yaA2_-A&%D3gCTl5z_3X}!;COqFc}1nft&U?J} z&mQ;ER37K5^-52|Q{0r4g7tnUJ@l=^vXt1pIQMAR$!M;WSz9bMZQl$x=Vr6mAU9+m z!hapSfV2KHKG#nDY33LrYlHHZ0Wfu`W1dLDPiKr?`yDOCvYfm`r>qP4Q8(y@VDZ|i zlKHvz>hb9_8>@Ua_%&bReDe64;O(Cdm{-zZPi*&38Z&NRq7!ZocP@kV`WAPhd-F^N zvR(O*j12{oX8E*z40i@FGo(?ls8P6G%sfIvi!-02zq z95{-FEx#FK@OMXMCS2BH#1?SYqRgOfVUGkRZC$uRT>2j6=wlIS(B!+p_zebRlvr4M z0x!AxjM&4w$8WrhTd&_{wqLOW+Tc@VNYB>&+`blDNXHtzV9!+tWiw%h;d{>ZiAwX# zl(sA@_^2s0RUOQ36zkhMB6gK^+fLr6wLXpi;Ut%f!OA8c;ILxk>N7lHlmN6Q(;nGZ zKtZ7iALqMhOz&^d2WZp|HFBC0x_2B_B6uH7r#gVboNFS0RM-uh3?#qq!E>3?I)zXPK9pR(*<-ToIo z`~LxBvH=&WTxk2Vg<@npn2qEqG$LkTy=mf73kWSIO#b#7+BZ|nHd;? z!}hnzzqf!wlY<5L@xPXn320#1IoUWkfK34F{9`QtRR(PApVSiwT^ZPbGLD&zQ0s3H z41cGKkQEpJ6U$%c$;JqrdLXxDCS(WhkCB}b*d8m86uvn z0Y$Y~893)yZY~U z*;s*6_^(?9_Jp311L#i~2w8xk{B^#J|1RVJw)}U=0ek(g8o==AIhp^8)qe#5oCy|o zdf@s74i*cL3j=W|3vlR}{}s%?DzgBO76zaoX8eal{hu1F9KZm9N|}&_gPEQK7(dhh z#-;vcwf{FRm5KR3{h^NH7|^96wZGDMNh2bsip7HoN}3Vd9|;vbe=+=CR%A%Ki~IDN zz8)vuXk39c71dEu@XMz%`hn-gDbT9>Ru*SpAJ;|}w5wYMhx}Vr!<}o8-k+vqk)Ac_ zg3wO3_3ns(+asE@m<<`PMzuZ&UG=+dR1WJZFXyUszl@B=uIa#Q9#fMMG$*3t%En7; zL>|G_R#gMNS93fbxq(Mxe~K`Obx{Nu(N#&i$`(+X9R^9=%w9??%zImYvZbN~{z@Td z?0NglezN>b`2fmw!cisZR!`w}VIH})0{W`q_M%b}Vxlk}LaHMcfzd<+8K(F%yAf~z z6tP6wc^D5JA1O^MnMrYCypm}$UA+4rc~ckd6M^`uM5Pfh0F;Vgd20i6!JFaU7`5#+(8GnsdW!=>y3x>E5j%XXHvR1Lw^Y}Z-e;Sj zptlgtxu0l*7@t9LZ#;snsmH7nj`ElegvR8@(Q^X>@Dq+HvBH#3Izb^mGwOOukAWAJ zP1|qC&Dkr^AiqF;m<0Ddx7&SpE8HVZX{DfpZV{0beJR-%7TWU1X=T-?U5bR(+}N!1#pmmIVU_h z9xP5tz`1{-aa4;A*MapiC?=$XxoLoH_<iZFf~yvN6*I*jJbws5)55&7Jq&33GH%zOXfiC=H-a`lCnQis z7(86!UT)K-@YUkSL@9)|sOR*Mdbo}oZDzG7_Y9vCTt_s$0VhJAkA=&=CDIDw# z`QM@bDDFWSs0BkBG+tHM!JM$hE!w^M=BXRy!58Oyn1ynGAx;O=4kj<4Dn*#^tLM(+ zJ;;MFW7G^t&Nne*(}eb7Z-oNpD$Q%O+khiFJ8@|ECb*RQI>UAMMKcy(7*SxDcRJgW z@PJEi_`Mr(rkON$Ar4kzW|m??wBf6VF{}r!wTN6Uyxj*w5KjPp@br*JUsE21`M6eJ z(|hQ3Qvu#|lU$yT8T;K+{gM08PjnaNJ%|R3bFoUK&d886A%eapSoaxcCou0=`oQec zS^@+R>yd7wYYwvx(G^LRX^Z+9uX*tE1?jO`+)6*}_*S|C>zd5pSmp$(qe(})daxBm z)^_y}_{IC1phblHE8xzA`#()S@!*Z_U!Bi~7fL*LG#}Alk}6|+3Ld?i5QlxG5~}f}1$;#<82>H+O;po8Uz2%-#v=23SF?G5lIRT!UP0>Y~{ z4bF1TPxGU?!{Q6?iYP6rI>lagvxn~O8uuZ~L^j!EyOHSbUC2wTxl)OARXR&;U4DB- zLt%5No%ZW8V}V#SEhZo*B_knge-byF(dsDfuE)HL>g%rd3ooT{M?p&#g zWU#iM#Fv6)9x(OZc)+H_VzW;A0)9u9L#j_-DAWAZtErpO+-(vDr>77d8Q47=YD0aaEa;2s04>r z`wP=~=}L`Z$BrCh9Sz^ZY2Oq<{L;P*ciua2&qNrua+0`&uMrDl;j*IRC!%cM?S0k~ zvhX6h5#N;y3oDH1m;hfQ!xH$D8zj%)mX&Ct6N)1fh%yzi1LI;NG*@9goV8VPXSc97 zYB`(a=ip!x>{P_=-q@RlK>la{!Pr zwo+NqyE_TdqqAFXscUHn+FxB3A~{YtA+NnHVK;uAiuZ>W6nt5nV4SitSHf$A=KvS+ z$+A;9JE&b-kzPwz%9);qaAZtD+a9yUqtgt}xc+zBG@-J@==Rrff7$R+%d%3-s~|P4 z(;xgeR%ohiLpon4)Q(F_t4TZd7(5_-K$`03xM!8+n^p~_01^{u07)%~pZhctwgP^1 z1PC!_26jEr>mqUzv8IUiD*80>`8_&bjA2eve0IHJ2dHsUJQC?j`i*KUe-8O6;}_J( ziDnDV5>k*sJ;wSkZsj5e4HH1&8}=6tAE>tI(qKA4UmRY~9UKbjyx2ofC1%L6KV6)sDi{193qsm0gDwdOwXbWSjJcxnS4e#=RX+He{zLDe%O z*7cbj2aSQ?jk{_V*%Td;9Jybb_gJThNu~hcLty9S@mcFk*Y&#u>}wGeXOoj#Rr|%h z?f?F5NDa+-O3fQQDH-|`XizE0Vk50ph$}lPxS&LB`7nQo`9$}bHtaXeJKa^JF3z5~ zG>wmx+u(wd6b&%eRShU;GLB1@D=F5Fw+1B+B1R7ujMWj*Aec09U9Ie>vg>Mb)$Y_F zdtEe|pjqP{IQ*)o(R%G`jOb%a{boifCMZG3SqngkSNfVsY3_Aup#HrgSIvaQFMG*F zU$`$(5mU4g4;PlX4o74Lr=_Q$`aG_d#)j%QTyG++6+|R&H-^?%wWz&OWN;B$mf^(|YXmsz7ZGl)i?cIyXRmdv=FR3n%)b5tIT z@qpFcHK~-An4FwO@O$CCU=g0E8k)Xgu-Jakv1}MF#I-1rvd|UuRKyClB7(B6z$`Vf z*rIB$coI_(B?&L}u)zKph~eHGi!r!hzUFizHWV5WX4FW8q+C(LT7#h|8D5VlBDEbH z$o@}v7==C2uSs-1F~$}#`gi3dOGt_Wf8@;}U~7A+)+*vz;{{>Ks-3%wRxEJl0E(FF zRxk2e8sfa;pmn7lFpUeY$N-CL0Cv_&K}0CrwwSRDPpzO}VSZgaT6T8jwTPc54lg#P zf^tsr9hu*vzZ8jt##R$#gk(NG$sbhL+;2m~48?`hEEEvh4@bZ*bbAfWS`zj%s!LXo znkwv$6(j^xi%&F8U+911^2oNQ{r&jtcTRXqG{bMq3kQa#@_P+`D{U_-Qe^}GS3wUQ zo#eVLh5mWb{5=!=9H^_y2#UbALg z%4YwW)T#@z_ZM&{BvHhhiXhf=NRMFNpXwouZ0bRxJc66SPE6WXAC@~{;*0stzrNig4xg}yUCJ;Hm6}-yWb()_? zDQWe8n!jhU=0i>SjW9Bie&|=Ljo8ybm$%)0Cqojtg1%EHSLGrom8$usX?0AeA3)J} zMiluAPY+%REe&ARP;Oaa2N}%}pQ$1!N}Ep|FKjI2muQ+??_5WGV+#Gw%Bf*YHi0Io zs<=%RpFe#q9K@Z4PjAMcO`0@BhC)NiJ&-U)lIOmjtD+jea0Jx=eLyEO!E#4; zt6+;e+DFTnNh91Ur$WmN*<+7p?{!!Wxmx|32F6d-!BkZ-d|t&x45~ku%0?G+=zxz6Fv3lFeb= zWZ!m3A9~6T52d9lhs(I21ZzxjqQ;o1IgIAIO>T?ZlRfU*Ip}}+8XI<~2nl~^{DM>P z6k&tKK9|hf@k5m&r;W&TT)N3mwzhXQ4~ki|+B;yK2$zg)vtgWMYdD42V7+mr5AHfJ`j zh<74QhQ%g_mfY1G?Jv@uU(n8(d<40QRpjCuB0X3o?0+c#3>9R4Zi>v)W^hu^fF8+h z9m)ciUlniZ3z5z(sM_n!^(&ZFk52gm^DYw|B43-$1KH=+Pa)LV zbXL#8B<@o~CHdKs?37aRZZ6?ieE!$lRKzdZqGwBm<5Sc{0;UxL@e`N~TH5jTEAd07 zOZH|=irwadz>8%nzE13}Uh9myN5H@?O76tw-G$!cNO)GuXqjxm$6sqKtWuzjw%hDK zDXMx@`H&4_ZJ)X2G+7vZq~@-0B%$!BaF!Ud`p1pb^(7G3jiq1$rg&kH=SY$!S&Ov=7M5BAu>@bMvmXVI6kbkSg=I>Hm#=rVJK$-7w@t*39VX$vNDdVlVf2wD>4b?E-E z@J1?UVIpIB#BUNMS;|z}hlb|DqfUk6&$N5qmEFZ+3R?4Mk#v*|I>jaKkU0TlN}OYa z5ZCL<*6vQV6I^>-ig8>FB67(7_P9O3`Ox~^?cEjp>I3f+H z$iOa*I1NnnL6J zf}n6Zf!ZkpeW0RW$$6kiN>v?9i)nbhHF|ZvCQD~dCru|=N&W;29T4tN$m>rtR=p7^ zE*fb68Upm%8PfD0v+Nrx^^ci-%xdTUprdU+-AlUXo%&uGAHUf^!lrCEDkOg?7$FcL zVW(P`8kUw?j7?>~_uI0C{}W>yw5EHT++C4D^rSTtN5|2L9K6Q27@aWo2kA;mhO9F% zK)r=;S2$U|^bsUA=79CXUGC2aiu3p9 zaBs|@Ul>(9b8i-7sXNYMKgT`qeYQyCZOmmC3J8@+H4fNU;3ew=QiZZ+4f!ZiXx`hp z!8c6QW`5>KjaLxu*B_NO&j;pg+-sE#mXWop3e(F$n$qs zcQuX2O;xRKiN3R{ZJO_+_qtwVoa(&|fb~bYXs)tp5rR-Ty@l8?@{<212c^DmkHwdf zN@r;E#S)=_&Xb>$cwZdX1e{%NQo8#Zsw66;>K59)4_kWhdqcK}6NGa_aQB>@7lD(@q zeMZh<;9Fwp%sXIe9=KzEsvb4z&lAuUqyHFyFha#G6=WE4{T*7`r{ct?BnC;%W!>{z z-?^(koz@v46>T=Qfnp9Nm0y@Efem39i>nz7%sN6AP&|9bP4iG(9~UH>9@i?uP`LZN zf&b7bjdXcxF0XW|WeYx7Vl0}{xJ~8gIwgL>ZzyWBvJA4TO6TPwWcnUv)=tC7JS%Qm zxEDS)WIFz9oasf5Zf}nnyFVS)fv3>%ys*BQj9)myl9Hj6PVz zh5JM$D+IdmkQd(J_vLy6YDAvgnNOXo79sha3%N|;uUrOI`44OS)GPS6jl=nt;P0E> zU<{mD{gCl@7+f4&!FP{#m@(H5Y&7?~sd}WLd?~kwgB9M5?$dW=CddV`^tfGa6-H+F zvuIM~p$NKmZo%GG+v=~&l@PJER}eeq2?VLQ)$`aYofGDO17dn26rig&SVf)*$_WXGyXv2ASb{H!fO(DlVUAjxyj) zAqEe*+s2f2SP^&f5jv)K^xRuIg9L!e)=uf)5#v(!ajslhVk>1b3nTjYXWe>u%10)m zBx^^fLh2xT;463iJ)DviiOpe5g&H{@J50cVdrNvNg4^8$4#lx+DawUbk=tOQ&S5fAZ_LSqC2}pFYJ@rJ z!}Dh^9}3K?lwh7BJ$Shf%j^38a+wY}Oi_8qOs^Uy0Oi{qlODV*6wZ|ArDScj=s z=c^Cqe!0M7?6t13(AOi~6@Cy9YTONfUTZE-Cn%p)Yk4w@%>g!4e-dIrs{s%^OmeUK z3FRjtytAof?fIiA;w-8IQ41VW^_+DfngI>C~OwB(^)06hY%7 zLfr!=1Qe1o!cpAFjn{8@9@<3Rq5FE12?~?6RQ_f>1LvY z^a)m7lZA1ucUZQ~Ihp^={W_m7u=^NUN(ECu)z84Ump+`b_WM_0l@L|a_tPWk!OID6 zvvCpIsnXY&ajYg6x5e~;%wQC#Mm|o%`>WwN{c#mq~ z4JaP{QD>zQ4`Hf8%1Y)CCKj$4@Qz`$ECVOAS2;n%`7u^I02Y9zVVFsSHi`xh z(HjM_;kOARCHTa(O*PXaj8Hj{IrSEqdFZK8J@*l?t-Qj8ue(QoU6hBKLg zNztW1Zo8!jl*icVldEh?DZQ40Jbjg+S)p^-gKb2C{czohP)+RsM$rdU)48NLRh%!C zZl%0D`nhmi19(VCC_XntSji)XFF7z&v)&ad+KkCHX~9oI4czp7f_Y=?HMDhC3B>&f z$G$Lw@v4utrL5FdKOl-ej_zakVA|5CRWf2txI@H%e!m=iFEah85*TLPA*238JuL1#JMk?y_&SiiDAvU zyh5F>lxq)*5s%H=9xunSvE>$_?_{AGjG8dRqGSYRw~UdCDOB5} zakzID)M$Z)Bjy96Q+rsaRrR$O!*8?wHxfbyEq_iHWsY)K4D@G%zDj_(drm97(LXu% zU2$JfdPdJ|X6VJ~-Ne-S`p{NOi#&7arBzo*;CXn68!T{_iKLYX4l!2)l(7zqMuMb| z2VwQMCGG`m+w=tz;^KZ3(_Ezo=+81KhC1XjZf??`@6kwYAZt9(UJ?n(MGC;;X6ERpw8*>Ou7^|Af`&|Zs6i@5f(=o$wo5BPx~W* z&)Z1E*ajNC?OE)Cu7kN+Z{6vVwQVk6wicdB8do_Jot%+>fRWRAZIn7?0XH2NKWV(I z1^O{@n=_KUNc2!fhJbUm==@R|ZuA>UprMXXfw*+zO%F~nvc`Kn(>az9xQc$%+(;+| zIy{0a91ez1^XIgEKmA2e6(0!OK(8uEB_w?9wPtg}rgisF z?R!xfKRcbXXkzyYrw3N}2*bfO0a~84-=JVmD6izG+)Q;tEf41jh_tk{;p^=gTAbB? z`18!vT?1=YxV=3UWurDD=T+m@1CRto`~Y4>bubCletd6X*Dl*Fp%6ob4JV@W*Fi&GcTWpI_jhut1Bv4Iq&hpkzB7A&t=u@K9#(pP)++>Z?%)#d~yi5IXyu425TsmLi^(C`-(t9#qgw9?&gvES2C2F232LIm zz(X;DQYF)KgQQF&jQ4m7kW+|7A9Z+3_7}v8gb7THRcg+uNg1o*w^pq;1J)dg8v@ZQ zEO0e{3~8knfnD0d&KL;V0~m5HU7?PhuD{;UFp7Mr5l8eA3snRY4RD#i`JWpOek-BS zmZd=8%~%LD+*9jM&4>P^*{KYtRiysCWWavksvgssPZJg`=fINYreFZgltz+|V#SRL z896eAo@KV#qKOsHVrKTa!zASu!F^zIq1?+5x)HCLw$PF2Nk+#mX^YRo*yTy(`>}AB zUzp3C9(I0{eH@c`1~j15!vkHw zpq+k}(zunxKCFotZGC=d>�KSqpS#znnzaK9%S>j2!(pmA*<6hL;BVBg-Mh^F8SPxdu4+ zyrpQ5WHQ6`WC#2kD`h>FNFDM*mC|aWaQM7Jm`5Opq)sAR;i`HeopKU4pW(oi@f@w} z5pf$*XA(iU8Qd|thH}p}KsiU6&FJBNK0N;|xjcJR56An`A1hob;ej^~3to1cuF7Kv zuj-zgbKl#ynO&>$UiIrEFZa7z%u9KHU$7=#0q}eG)-K6nXWK$(V!Y4!Nclam8cTA1 z{}=Jx-HMu}1byY7vB(C+PpmT~w(M#Q39U@Lu_`LRazy{6@{&f0YISzyUH31&KYb)SmMoqdFMhp2aU`zFK`fSM#`&}itfu*%& zN(lej-?+pU(yFp()bY z$lro+R2!_CWrZXID^0+%j}z6P4+)jD~!uOf;_F?|crj zdWc%mRDU`}Eu4+!?8KDe989cCaf2&wr_6MUQI(|kglwmTkeo97yS}aX}NLCQ5 zu*=oVlZV7gL=V3HS*fWORt1$-ebZ?Yc1oIsESnIj#5cwBBaium)?yur6W9TV-D~2ZLdEYYb zq4&MPcZx|C%(5v+Z?^#cSkM`cVx6#MMdn$7vilQ41PD|MSoo#fnaJ1F*{ZpY4qtW88b?hzi!u)ZOE^AAdT_7v8LfDQS``LPsDBQq^9QKVq~aiYEJj!n_M4kayIso zW8G-N|28wo@Y?vK;PcOt$UXJ1)ZHLAUtOSOYbyJ9D0VUL3|vdj+OZKJagbWkibRZ^L{zZ=xy6 zxVfH=kf~3lxgiAw;5b>9cUglbmWf$OW(?sXP1oYI)TKeIMgR_{uGs#(0GODVZ+GRH zM~j5vA`p!S59;&M8@gVR%5G2Voe&&XmX{`%u{v&zuJ4EH;m>j%mRAm!l3r+^M;$nu zyJT8gW~EK(C$$ijMVf`ouUc^vauBEeTXB9d+20X*J!Yygd2BYUNE!~GPMR_>p!d&Ku#M^)?8igO%B>oY0LK1fo6;1#M!i&g74&fGLF*Y&wghCX&}Zm`T`p9+(0g-yXse z2B`?emBT_erLSWQEejTr!SKTLY>?%zZ+YsXye7ZZ5@qp21ZgBa^;2T&dB4=%%ZL^O z+NI|Hm=}tTXL`O?-yq;QsKC*wkZGfMKckeSpVQp8_}hk34I_Iy+EUSRQA;{N9N%JR zVn>&i10b^^pd>N^1h)D{r*r$8x~ed1yYfsOg+~3>Mhm-p%&(KmMEAXTI}X z_N)bvC5>E*Fo(o+I)a)F)4*n5cP1zTuoR*R;ILV|P@8}mT*Tk5KFSiHxM?MX#Nrt3 zW?p$*VSe@rdWKz65f0%6HLkw)gdm(*C7~=3es{p5ICrMR?D!5jHj>1qAd41o@f!l7 zP6p7q;HvGU5*r17N?_X1h8t5+SQ9k>g^{%fnswpN7-*Pa1iDi|YtTn-n#k8lNMP?~ zIVEyYIK@0=^7^v}57&m7qnjYg{8SCpM?#v0+A!N)kiwgIZY5Tmhwy<$V9y~VEW*a) zu&L7CR&Uj@>Z*sar-w1H&)S?3T}nFr{I}zV=j(vY&^gg`fE#P#8!A2wS*!^SjQ{Qk z>@>%36&W6TX`Ld~9p{1H;T9(pZ=%l}KZQlL#l^KngN!h@4cyGcy+TL=vV=L9c7%r4 z6Q8_&V3y!WXd^Cc`kXv5Y4S)UD6&Y|1D-Kxv_zt4JDXG#&)$G}99piQycwWzH(>X9 zzgQaJx94uKP9NI+>RnoS`%GTy2oR#WNfOel^cYXh5 z(xln+(AJlJ1PyIRswsr>3I%>AhpMXAMV_G7#hmLKuhMEPb0X&om+lEUn?;2`puk-u zntF(&7ttaqY${or8o4|d*vY^ZtY~!H{T6-^&%4HFaR0q+UuBw4X9Lovu^r^*mfZxE+w&)dy8~DR!uIot2{x-s(U?$5}?aIR^1Ky?$UWe zTo46%!nM5PLm`-;f+n`o2f*r&Vvka#;F zSh~pefxG;G`GnYncq|QCQ0cs)Rjg51FOKWs)m)<%c#6Z=Cx{=+?JJG!@Gsa8MikK% zzCjdOVd_LC?a)iQydT17550!A4J3Z`*W)9iGYRBAdRg;FLB)G=Z;~W`m8ZWU*jc?K zO!1~16&d%X-05^B^rXzq;c6DjexzJ0+6HkS2g^liBm7K?^F>V;uM`mOLTF#Keu#uw zgz;fJr;3IQ_QIqUm2furPDt*A&%b`WTFtV`vZ6%X4~y_D4~MQWKQVgW=_$^uf6S{` zV=(X60y=Eks)3C8rK&bkkMm?%%HKTUCUX*?5;zVy7IHRygkfC0KRNDD*F86DD(8dkD(HBL~G1t%^M35_T`~! zZSi7UbuU=5f%&q_ImrZhG(#OUp{^IXo)X@XTK9j9!ZX9IUy$7Urx%F`B;m$5Ho&M9 z!X)Iupb%s;S^%H^;O%9TdUe(lQ|)QFwLb96kK$wb`_W*Fqp=nJ!S8D|aGLmnnTDL6 zX6LOIDC5k`KD;NYCdfY=2<$C``QhQhp;pGOa zBD?CQURxe#U3gvvY;ZnC%D0mfJX`I9X(L`if(s<#y*1$}Alq9f%wWkj5(l@Cby4_` z+=#S2F>fiqjO!hyjbyPuT4_RjyB3)tZ0-XCZ6Iul0O=>i<`$ZCQrw3vB$pD^WwjHY z36~N@FRc^DRbX%w)*Lt*k1{|OnsarCLGCC?E7KlIO;S=MhWd#Zlc~sWy01*G$~wKU z^5a9yVn};DN0{fp*o#Unf<}RCeU8L4az43Z8Asand^m%lP{3ym?BGnva0KawZ5X>< zjj##&g%5A)nt#S%;OtFc{BsXSsuMtJ+1!by$YMpfdy9Fw{V-kEFYa>HCbY!`n`-5l zU6>Iuk7>xhz5vI0Tz{~ZUDJ`*Yf+8jD{TrJ^LXXVLI5$U-$B&3IqSV<+apg>Bq^U* z$5W)upH~I?HMwpwk*Nvn>M*aZui4yA-}QR^E2jZGGb+mjjLth<%N&u0S!!1lJHY^R zZlF6)AD*930GNsPkGRQS^^j#jS3W*WEoES_T!r&y@Jt2mV8jE|%D;VjR%%k-LEqth z@`%!}QcNU4#=gDPOitM` zh6-Np+e-B|V$Q)D|ApxX$(F2-!S~2ct&v_m^pTF`Xs;$hyzz@4H_k6N6w+d#mscg? z_6p5z++PNnF6&-b-P7J~hsB6JzYu&@ev0V{^H>d0?jR49=yCDg@ogUoAgt}J58EMT zJ0Rlk^9tL=x?*JStczq{sN88M9v{Ctx+MBt6fDkznws&h@@sF}s8T@U4X83G0XXKZ z>x5J36oC0VFyI>vFoHdDtn;g!TCW2D)}Sp>I>ND91p!<&jWP|wE7v3n z3NDKvGhJcPCI{X&J<1m3GrIFJW=4WzU=7W&;~T#iNFmUt)w)W!4DJX;e)Rab>KR=})=uTj8LwH??_CBfq#XA4eaFA$q;*jDy9vmA)hSfISQ-xOKx#&8-v7~X;zSZ6@4{N%}?$a1b+3{Q)3J8$p~WI$?+-cG7%J3n5e5v{8K>mP-J5VqJ1CbN~mqyjZs zJ*_v^vY`v$Rqzt|Smis+axwn58m*K#+{9^qN+P0C{%X+k)guJvve|e#3TgA#Ks$MP zY0bU;j|VBn#!&*56)EAzW$wp2Do*zq@+<@irAs5j-%(Nsb(u&q=A_=A!()b@n6G4v z#i~Vb3d&zsr1;QyHeNj%^jhmLRUao@r#yOnM=t7>gwbfRcuXd9nCu)uj=Yfh-zx>`E%$G5&5xpCx8y4LpFZSr{}{Rz zk2`hxMPQ75rQ#m!fQ`ue{k>-hf`NML1F2H_!CC~6d>x1?ejm8Z9$mx^U{32e713js z?ummmYNI{A{e9uAz1BF@A+zD+1-jaiWAwV~H4%-swtay-U2i>Ie<`GKZbpClN1o?d zULM+ub-GAwoy%87cxzyK8v4{^j72>af?)c{^HtGf;vVI9^f=cv61JN{5IFj&$qbW> z&}=)U1-SQS)#>ZODV;4syc%(Mfn;lhZm4R(Ju$XZbHQgXd$G+%{mmlrp^QnxvxUNEcp3Z z7Z&`Woh{CS49a=}K25sJB`7@3Ny?V6%maD+HN;%a#LplYNyqWfy|oL&-`>7Q z`pg9tqIjPXmuZAu?^(Mj95^1KHgz$O@#+d{L}q8uU!*aU8mq4t*jDR4cfWPqhR~R# z$*C>zX=Zp)T0PC5mD(3L3cbdfjmzYuV?;N}t?}_wT;}ofYCg_pC$BWn1>&$NBSb~v zFnJ42)TC#Md)G|Z?qA{Ak~zQO%YHvi zqWVka2OLiBxjEb8?)iq!SAjFz46n;Z2Z6G(z3Pno`}VtjdL>|Zbvt180e zaJ%&T^Sw#xT%@P8<&zF*(=+&84{K`Pu3haKlTZd@V<+*MIB1JnUc-mq*492ADl!8= z?A^nYyPJ8YU$|DL?6;g-ynGSKQlJ7_ZO!H=x(h#QR{8DZd)>Xq?JGw}o3d&asp-c~ z3-2Yll%A{RMrLs|RlR%N6>J?c3}YfmgBM%`8x}{=QbgQ!E=S4Ui#z|H;?6U!scmcb z2|Y9wq&I<3l$wN4q(}{fB1)0otI~Ui&_s}4MFf;0AXVwTN|6rIL5frn2))aV`=0mR zTRr#O_tU-kl#I+Z*Bo=rv6A0>lKP>^A7Ta#kYwHQj8&w=S7Y-x`N>t1KQ|cJ|2j z(=pvitMKzLIe)|Fbk%($N`z)i_8y_tp?%O* zU`_og)C?-ztR9Cuh1T%MXLNbC2Avr}RD4Vlp4J!_yn>>?J$Hi4i80e96!QEO#6SA^dQ2zZfxo|9J?q^w;mywNHY>ECYm&2P+6_?XEk zDQVVvvOl;IyIn{O`z=qnQ0-{@Qd`vbZoBYpA1_+{fp3krFv7x89^C57w4%35A^F4Q zM6)VvyAQK1V~RP6!UrRBy66J>U#eiGO@16M?>eX@aL*;SxV}UE_<^9$#Le-zW)3Jz4%m%u)&Zy((;|7IWO(ypn5<=5?w`LZ{$Jm_ie|0UF?k!bhQ zXZNzK$ht$XYC*mc7H(k_Wp=_V@uI{O@4YxXE}!w@yP#&pssRaRy$IVp>Fnzz5rmPa zg|r+2Wnn^X)(+4Bc4#ZylDKadUGs$vZ@m&X6ml>XHT^yzz|yX16t z0b6;37){7*Fn_bxBM*4B%cJ8pbxRkdzFNYBO40W1?ybK5SyEP@kr+W0<34xw08BP; znxAiFHS?*HfCQVfXnmpFz(A(mH~;4I%c&FU9+LL~>KfyYX6e=1FM58s4M|*m`U2F! zKBY6B&%_pbkPn;zYNB*d)c_9QRFkmJdB+uHERHsT!f`I^h1hElf0OF0Fls*Fh;R4u ze82Qu@~Q~$`@tdW#`&p4`imu^c_M9G;pGI5v$jHC?hT^aj18h*JXx$gpbW77YV7dh zc%YGGh#ninpcqYI_fJ zo}Ixfx_kVTl-RQpUL0w3yAZ%}X6|LP)3r4_i7DC^cBsQyNhL7(Y}InfW9-sn?mXZd z{x|C*rzr=0y*c?NrgZ7gJ1eA1Z>;Hc0Y4dlAY(g$ zr(c=f&o;c$qCXujI-XqaSwd|?2dVbAEV5JXZ}&TM}mdlQkgR}HQB}Ya(0zQrQEJycjK{{)#m}bC-zTX z2z4Zn3e?vkiyre9WJ(wnrE;Z9SSj6CR;)Zkgm}7O{xVdYim%f#^Fel4(4+I9)2qL# z_OSoZh3fOf$9C^5#(ueeYrH4Y<#8mr(mpxa0s@rMPZkx)^=+g{tQl#sv|OyY$yl;z z7swRE8T#|ATmswNT~{9=S#AsxJQ!~OqM97#L-^52v`5{}o=QI;iqYdhWFWAx%#uysp02|W zE6GJKkSR<+F#6u>4+{^gNTU;QxIx_<3yes#qI5M_KPAK_9{n7wpA?eGwip4v0E6x+ zw%r3S;v;LgK`G!xA7l+Dhzh*e0QTho1*C*Hur1OdPjtze;zL~G(YfGPNg>Th=@hUp zGbmH3&4_Ig!|swJ`@szghz}VAFUG{93&6fCASR`@$H)@}GKs_x^>}n3xPcF}gKR@0 zJ+;Wb#D!F|E%G2wg2At1L%znN--2Bg+vwuabzu60kO}ajCel-m%rH3wGn#xbeOyR; z{17vUPqB>|Da;AN2fr~On+CtpBom7-Ga~cn1NpEm;vzi_$ubf`tk@Q5kdv$+Ri!q2 zKvj9R!bmzynfeGl>8z zCx_fYz5s)g;vX=B$iXHJ;6x?qRB)n#^n374r1TqbWJ1XMcz#7Pgram4*j!0E8C=80 ztWE|6o8*IYl-i7u3JD<^NQJl%srZHX5ObtLe26SkAvWa1oy9!Y>G;iEdw8E7LG%mE zAC->VrtlrXu-V3ZP#F`ToZaJEh(T5tj_@|VqoY33N>(-&Of&oq!1ps}%u#VRU zM9+Sxsw>(f-QKP$%0Rczs%@84)j7&M;`X5GtMF(|-wvw(9`kYFu&@9V8E zVd9Ea+*uS*~bY36#ZDYAX2i_I&7 zhMf@}Fx}2|UW5`2k4eRgVHN}t4Ue%v=CBx|KXMgXmoQ9^P>HmJz5J+PE|4(H5NXN( z#9Sc#A$GPm!Y%R%jf$B@d;ZH|4TL(iilxR!YqIR{$U8Ke6}ZXRD#ijC4@I(}h}=j; zY6{pLQ;lwG`t0|So&2=@);F``A_=LZj1vbrV;=Hm(<7!LKTy}wSU_n9ID?1z5i&F+ zCW!;qj(RNuuLTeVk!sW=rpr%=II$Eh6FacTY1sH9tZq(N;w40z(TL1ku(tQiD?Xr| zT$Q)o10aSYv#8~u-v+x|IfLTTsY?P6MD2(3r&j=AOPzZM@<0?Grp1Neg1 zfO~?yfU_XHpd!h!K+>{_G6NhZPb{3=S)gd?MWq1bf%1SbAOngD7zV%x;sdr&f|7;y zx;6M^Ol8;5J}rhVM0Hu{wZKelF(OaAGJLdvvCx7C$^exI5Cw_?W`L?#Rlp2@tE0^v z$z7k5M|SEbUr{`$E20=PE+WJ9;H~QGL zp**3K5@MXpoUmu}H!AKubHUeX-`CpbGdtsCFlhiLiO73!dMhG)66F%aJc~I#B+}1) zBp2VSWYmywQj_EAy!L41%A(7R<;san+^ErCoUoU13&d4y{ncZexVMCUOGnDQI_;CV zEaG}@{Dt@y{XXG7{wiPJ2Z|q_7;gJP!?=B5W4<&% zbFlGUfYDWLhR0@@)tYG9TE9caj;o-MkRI3ja<3l^tE*n!r}wUcuf}js0#>nA=D(A_ zQCgL9K=C_#@m&*p{YB}Pz`4YJ_mr5oB8!mdRKVB7vG(1v&IJH9>H)(x&=WX^+CPL&F!iT0~k>Q01s*U>(2+ zAc22D;fRN(YRLo!VEN*mur8>#aG+v8L7=v8}V8ph?6C?D*DFdPTjaiMc7noauQHLnX zmP=G63J%aF`Z|X40hW<+il4UW!a)HNp37?Oeu-e zhcgR&0kp01|QUe47cqO5?K(Pc0fR60Cfd1~woimLe zg+%D)^Ed7`O`}0S_=21=P5*>xU|=i%4YK%~rt$9?L^2NcE)KRPE`LIZL@*#45hw;f z^B)*Qf*2T!!2gC4{mmc}#2{KA!Z5hVe_{{`z%YmysPIn)5sV*-Vc%eYHn%Vf^t$=&uR+g+cUp+W(Ch`F{@~62$y!3@#wTi=hh% zieU1T)w;zmA@TEi{-lt=V1MWKpZFsfR?t7`BL)dQPulsfKi%;sWSEgD1D6IGE70RR zuS<_gpv+X&WLW8@M3%R>220r=1d=e7uV>1c)Xs0K2!*5Pj`{=HoxUmCJpNu<#q5;h zVuh6}Hv>=L_#u?yO(0F>TN6cYaJ2dvzcA_gVpw@}LSuNI+YHl&2*JFqQWeZ<_dt`8 zo~fiAEkgxOh?RQyEcrg~sFHZYI29Rl7|&60xyPv8qA4R|W_4hQ<)a6q2RunOJ6!ExS$^Am{t*1yr#CTb*au1nCkf8EFD9EV} zOY=34`W>l=+e(t64?ZO_Taohc!qthTlf{Dbs#k7RZBXmR6XNisa#$l3he$iBH#@j` zB?)s<)n-druWQK9vNay1D@fKDltUY(1_(Y0=5w}f(Je>bVT{U@IunZP!dYY=zSK5> zJ}4P_`hr{$muh8m?QYJ_5}BQX-;9Xan? zC*7L(cj7sw-l1zQpD!-4Hm0ZS|18meO9}f=yqmul?EesW1N&JTzXEUmT2cS39)Z7C z*na_UAp9aQ=zj*@z+r;F;E=XndiiRMO?73u?DUyKVMz8~bGrCh6EcF-SV=7A)<9w~ zc_4tDc^#)>AQmUSEL2lp^1%c8d=`pgrKFKZb~cB2x+K#hpNnfAJe+ls(kLUOEY^MA z<`=Nm*H)JAchBL=;M(Qa#)SRGL9YRqjQv-KUy#y~&(r`6x78a|*3|DZw@19G)aNg* zDDwZ2Wznt0veR7V9^p{yup+S>pqO)S2=hZD6-rv!o7Gq=r^US~cc>`GZ+Fkjf$d(- ziCg_(<%{wT?#2n&wOPYSc1=isC0lUkd$G%^fyDXJ<|-qLqKx64Z`NteOC2?(t7N&& za^~yn*4HZhCeKmVR%QcmwQ{t1`#qWxwB?d;nv&1S)Ud%N*_NetMrQD!E zpD7+M9c^FkYWYQ80Evf`h9J=0IH`Cy9$WH_p8RGRqmst{?-%!pYQfVI{XmZ-%~js?@w=&Z@+3p8)3E_S%9=fX+lcd#_Vpp^1w9>^^rZ>`o&iILNKZ z1QKW}V&z1oK#2tGYVk)rY;hD7YS0(Tx2J^?r5_u=Gp4mb34ZzW zziT0+C5dJc(!Q-NXI3$2Ef9q}nEhl(ho$CIKM zTWiE^8mKEb5v(=p?FgTH-Kb>4Nnj{L*J`uTwV+$~&?js>aA(BLm3(>gF?mgfV6f1T zYDM*Jg=!R?HBn8R{n(c*rct|vC|6NW@;RVA*70b+D@RT0HdcVNM{xC!_;gxDXjM@4 z$YAS?HQkB&S?Ceo-2G;po!3Tz9wUtl2CkV$cP}Hi@ps-D1s@MNv=%Se9Jrh@)I>4j z1V~*AY|dfa(mYFAXslpph;c_92bT_&ZkV8j4hT;4zTq+fjNZ-<-$zS%-}HUPIC>PP zSl`0fx^-aXh<_N^oY!p4H_Wu|gf{WU@(szr@@b`d%pp!9p;+JAwN8VMIVh@1`5`+P zSdVk1?9(EF#yuly1W4TXY30Dl%%Q4m9#*fo=KInR?@F;0RllKWcTHTTG;nZabHU{R z??kMzKwQ;lod@j@#5XjvVCXIH6K$A-y`Xf!SQA4U#5a0AU4B652WV1c3Mw6DM!VfD z5|?opl3z$WfYfA40OzqhMrT}a`i4p1&QpjDy)L+)Fvjy!BtMPgsIQhO5n21%GfPihzLrIKC*ZB%w` zC{g13e~esc))qT~!yX5`34p;oU+J_sXk(r5D2<%0~{X6;$DEYFC9VL(vRuhb*_BM30oQi5tl7olCO|@O1H0-u(kjUy?3xLcSRnZmvVpINOaDv% zbzfmEUu!eB$StCvh7>MGO2a_dDdA^A1Dg)&IL4Z44?v$M9L=>O=;u5_BnO`h@4#_=uRSotWo$z_vyZXhQ^h=1))w+E>!r&p~A_V+2BRGN*diqDDWHfp9p zA8jLqI%y8>>X>TuLC5-NGpm*Q-|ZGsS{0AJ%TF%odYkwz(bPjYA!%CDrZ z+_#XjiD4_msKFJCALuoDI{TwFO+VI;NmF6HmnQp?uVL{xvyfZUqUtum=>fZEC3eyp zHMWCZ%IM5^_zk=LOxjViH#gikrPwBym3YHAgG#hKgwDMC-qKpB)Po4g2){v6-#}b& z^<9tod$rkddX^aGSmPkT_LR2v!@bYB-hwC0!Zr|lPNcZzNa3MfBoB+mbAEybDsj^p(RUT$6uU(Ndo#qtYYrL=M$$M>p9*!=6vwJkHlMWp!-FMt#;rT08I zed}y+PnK_gA!U0eR(%*epewPFw=r{f`qDR*zqy>!Vi(@D$>8S>$Mqht({zFVyfkD5cn?uX(3ilMFN%d_7G}MC7Ryb%xuSI*ZX^Mbvpe z(z4#d6-10Tvs!EN7>V$UzF_)%lcHT_YISFc*#p;8sL?>tQKo+V8)6tGqL!fT))ATe|?1+Z~D3)r}@oS5t%!n`sd6Uv}2>( z_Mf>|0X*JVl{_Yzlg4(m#LF8du^2`%LvSZxjf~_OjM?=(OsxIR~PajFiAzTM?`j|WX5tphUr)p3h&L$s+NH#I zAGiKV@$$^gIOSs#riutS7wQs1GO*>F*Uf|bW#I85ut~2QQs52-Tw|+{b{5&!!bF6)nFiB*2Hy}^ULdd4RxmV z6#jq;w^#KJW$*6}i~Dp-hY#ny(4Hx#uF4P`Wq|JbK!qUG}K?@T5w zvL90qVdP{TE}G=&Z$fiwPPf-TtA@vUtQ_pEb0Ta980XGbN1Y-5ayk~SUxm&;-_`0+ zvb$!oUHO$-gd0US(s9yxbM^_+J^QcE(?*(SX+*SFhkzUUEv}f(i^Mj|*ZQuN zhdW4|Az?|In)Ivjbn(iMy`y~`TV*eYvKN|D3W zKv;-^j9SE|Ry#mF zf>FCV;px5P;nBLoS4d4^#V?GXtiUQCIhK^NqUgkmCxXwe=wxBW<~0%GqslnLv+}5V z+&e%sQ|MdXJzdweT)9wkD!Z$*`D>HD#5X*z1*`G+B3d`u9YNz5CD#gIk4pZjp)vN^8+3!;a^al}< zt$p#S9)4*ZU;T~z@TqXRi}z+5q_Vtor6*CK%`aoCgD8GbS7TW~{w;d7d#^2p30LK4IzZCcNGMfNCjq;Z4J5^SpaYkX?Jy?ELE9rn}uY#SEYHyxmxI>(J8HoM{B z*xwQA?$L9uZMoUxYTjN5gyu`v3ml6`WthcOxyne-&=VwLFD=UHDwt2{eToDNH4Bze zWwNK)z0;VwC_MU@M0E4_dp)+_IIbR652N}O9w`Oh-4d=)mDAzB7oa=2v~=xRpSjJ?epH?j_y$j@C!F^Le6~}QRgnAiKKCf$YF$_! zzvF3+`6TAp&vuHk-IC7cNA*|hD6|ofauSAV{j*2+oGg8xd#9?;35HQFaf-_9HxnFGEYL)}`melGF1wnTaOH-D66^`Rp9g6NeKwD2qa( zN2mqE?Y%kaaiYt&WqpTp(t?r>aWicnqMcXnGIxP4*D*ot5ZjyHHrh`O&-A-5Oh(z~ zsFP`Qay3n8jz*TsxZ9gVxHnDB#Vr)K%WPi*<5|qrm5r1keh`^Vb{$Mdc<*JTtI)$% zrB5vwNX(n5oLLSKN0Qp(4+Uqq&AE;T$Ddl9SiNylpg1FHhfZh_i11h{kC=9Luz$zA zt`;H`N#ES?)P9=r<)$;`u}lC_FIwhZ>{gqjRcR?aX zC#g4+YcpAxuTdP;n&@yu%XD|Xa1!i{EQhfBn<-x;Q~M}IHnLe>@WkzABDO9Z+Fl14 zKyDn2sO@?@$5nX0H2?O>ygMQGM>MrA zI()<_d||HM+qRp!T%e< zF1Rpms|@wOAx-4DQR_bI^{Tg3P&3V=?W8drS_?9Z!IL(j!R z#SmfRE3lidY@Zc=8toMm?fe|FeHwaU*qB`-;5ta%vSTK;5v;EnM%v3exVRL5XV66S zbHA6DW}|K<$E8SK`KSHP*sOPtRpJXbUN5U@xJZxPXNRo5S1KW&f2lt&mgC_U9nX;w zub&|V`|$3FHTaV#DJdQAD|3dvp5ncRmvIjddw6>)H%WWkL`N9(4$AJLyYn7zXr?(N zhhE4%@g9rgxjVt6!?3@U=nC0s*NZGkt6pAvGiheu-}mn2+$a0FHag)lGbJe#O+K@0 zrHT6U+d{SOAKv#hGDsaPC8xw>jcjo(zDWA6%~gMN^kL~9|KKJ;EI!56a!b&i!LI}n zVbdvgYsd0uMYlD5GS*rT#P^8netfrQ_9^Nb+KkacmSlv1Cu9nxFK1E`S?*jtc6{R~ zVr*t_KSm;z&Q&wMJdI+X(C^ph(%R539LI1&ItQdL%EzG--Z`6b4?;_T`CFOJOs_?Y7PZQHr)-ohPl`8CPrKH5a9HTM>)z%`B5# z8P&u`TomqF-+5i|I(5m()*?F`((bO)OSfjsZi(0fCqD{{NDk+`z2iY7SklO;9eY-eH1k=3Tc z=M(1Bo8d+&<|J3uZCGR4=7FJEn-b1Go%Lkl;R6lJS@b2GlBbrlv6 zA3y#&=B(vcS|m_lQQ{46GI?7X_MT4fwPx;NW8_QCxidphb>d4Jm|r9JbE?wvoen^p z?vBy%SIQJFdAqLxw%X~VS;i3Dp3N51E&53+*TdkBeMuMs0yb1BW##kIAd5+F( zwF^`{wSf>Vc6TMKac#0rTXLu|KzS zVLws#|3ZiV-xQaBk;{3It|qpR&HhVw5yZ$WQZ8l|_O2M$f&YQ~1B71?1I)*WEEqcZ z-_i>PMgH&XA9x@?w{#usU8SWRJa6go2*8DS;eYuK@IVCxcp-xP5W!mz0Sw(Av$cz1 z`a>Xaj0pk8%iyOf@$)#0{$K&c@c4gjDgQ&E_&-qFe;)C-+H~u$$@xWn`F#rhKWZ?4 zc`*EC1Yv-254fc#AS}o${L^W`;12A=8{$v7 z<{w-7|4FWa3P665Yhnj6at(3kPr0UE#tGvIOv?OVn#6gMDR~P>uh&ByWp{HewmS2B zA}M>>V%UM7Z@d_Mt#gWCFSx-TBJGgQ{OUrP_Dy^1-G|#P+6<+M0pjm&fuGMj*;gZTKh4M+*rZp2)`PRM`<9 z+v!&oou-}WVzu$Q)V>}5vT!pIp=K}nkU}4>!KYs-Y4zi9M@w^JlS%IJ*Wf^axy z1zX^~p3?Ee*m2noY6YRfM%evEqyCbM5+0vHz#j5Pa84ATyyf&LnU!!f2B zzr}=LLIS_X`1zrNm<)dD4|DFfG5ET0Rm@zTI-`fdea{FT} zLNJVd$gk&x2n!1Q-X8>l8Q~x8Foq?+$KX%_j32|VxrspFf5xCcWv$=ZL4|+69xxF& z^!M?>M1=m$HG*J_RetSHfL{n>R`P2ME&#>Yw)`Fw5dJ+6IOab4dw+0@0nhJw2w@CS zem@p7rSRY9N(crO`ZFf{$D9gbJ{ Date: Thu, 24 Sep 2020 22:56:02 +0530 Subject: [PATCH 234/263] Added link in Language Resources --- programming-language-resources.md | 1 + 1 file changed, 1 insertion(+) diff --git a/programming-language-resources.md b/programming-language-resources.md index a50dbd8..1639c7e 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -41,6 +41,7 @@ - [10 Tips for Pythonic Code (video)](https://www.youtube.com/watch?v=_O23jIXsshs) - [Beyond PEP 8 -- Best practices for beautiful intelligible code (video)](https://www.youtube.com/watch?v=wf-BqAjZb8M) - [Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) + - [Coding Interview Essentials](https://github.com/ajinkyal121/coding-interview-university/blob/master/extras/cheat%20sheets/Coding%20Interview%20Python%20Language%20Essentials.pdf) - Java - [Stanford CS106A - Programming Methodology (video)](https://see.stanford.edu/Course/CS106A) - [Software Construction In Java (video)](https://www.edx.org/course/software-construction-java-mitx-6-005-1x) From 3cc2c103111ef3c8f9d37c249af64abf7982252f Mon Sep 17 00:00:00 2001 From: Mohamed Yamani Date: Mon, 28 Sep 2020 10:58:34 +0100 Subject: [PATCH 235/263] Improving the consistency of capitalization and punctuation --- README.md | 240 +++++++++++++++++++++++++++--------------------------- 1 file changed, 120 insertions(+), 120 deletions(-) diff --git a/README.md b/README.md index 5c72de2..5293474 100644 --- a/README.md +++ b/README.md @@ -255,7 +255,7 @@ Sometimes the classes are not in session so you have to wait a couple of months, - [ ] 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) -- [ ] Cracking the Facebook Coding Interview +- [ ] Cracking the Facebook Coding Interview: - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) - [ ] Prep Course: @@ -281,7 +281,7 @@ You could also use these, but read around first. There may be caveats: - JavaScript - Ruby -Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/) +Here is an article I wrote about choosing a language for the interview: [Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/). You need to be very comfortable in the language and be knowledgeable. @@ -334,8 +334,8 @@ I haven't read these two, but they are highly rated and written by Sedgewick. He - [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) - [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) - [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf) - - Rich and detailed collection of Data Structures and Algorithms. - - Great for first-timers. + - Rich and detailed collection of Data Structures and Algorithms + - Great for first-timers If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. @@ -351,13 +351,13 @@ OR: - [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) - by Goodrich, Tamassia, Goldwasser - used as optional text for CS intro course at UC Berkeley - - see my book report on the Python version below. This book covers the same topics. + - see my book report on the Python version below. This book covers the same topics ### Python - [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) - by Goodrich, Tamassia, Goldwasser - - I loved this book. It covered everything and more. + - I loved this book. It covered everything and more - Pythonic code - my glowing book report: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/ - [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf) @@ -377,7 +377,7 @@ Please, read so you won't make my mistakes: [Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/). -A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn) +A course recommended to me (haven't taken it): [Learning how to Learn](https://www.coursera.org/learn/learning-how-to-learn). ### 2. Use Flashcards @@ -401,16 +401,16 @@ your brain. An alternative to using my flashcard site is [Anki](http://ankisrs.net/), which has been recommended to me numerous times. It uses a repetition system to help you remember. It's user-friendly, available on all platforms and has a cloud sync system. It costs $25 on iOS but is free on other platforms. -My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)) +My flashcard database in Anki format: https://ankiweb.net/shared/info/25173560 (thanks [@xiewenya](https://github.com/xiewenya)). -### 3. Start doing coding interview questions while you're learning data structures and algorithms, +### 3. Start doing coding interview questions while you're learning data structures and algorithms You need to apply what you're learning to solving problems, or you'll forget. I made this mistake. Once you've learned a topic, and feel comfortable with it, like linked lists, open one of the coding interview books and do a couple of questions regarding linked lists. Then move on to the next learning topic. Then later, go back and do another linked list problem, or recursion problem, or whatever. But keep doing problems while you're learning. You're not being hired for knowledge, but how you apply the knowledge. There are several books and sites I recommend. -See here for more: [Coding Question Practice](#coding-question-practice) +See here for more: [Coding Question Practice](#coding-question-practice). ### 4. Review, review, review @@ -436,12 +436,12 @@ These are prevalent technologies but not part of this study 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 - 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. +- You may do Java or something else, this is just my thing You don't need all these. You need only [one language for the interview](#pick-one-language-for-the-interview). @@ -464,10 +464,10 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Prerequisite Knowledge - [ ] **Learn C** - - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying. + - C is everywhere. You'll see examples in books, lectures, videos, *everywhere* while you're studying - [ ] [The C Programming Language, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - This is a short book, but it will give you a great handle on the C language and if you practice it a little - you'll quickly get proficient. Understanding C helps you understand how programs and memory work. + you'll quickly get proficient. Understanding C helps you understand how programs and memory work - [Answers to questions](https://github.com/lekkas/c-algorithms) - [ ] **How computers process a program:** @@ -480,8 +480,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Algorithmic complexity / Big-O / Asymptotic analysis - Nothing to implement -- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review. -- If some lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge. +- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review +- If some lectures are too mathy, you can jump down to the bottom and watch the discrete mathematics videos to get the background knowledge - [ ] [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) @@ -503,7 +503,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Data Structures - ### Arrays - - Implement an automatically resizing vector. + - Implement an automatically resizing vector - [ ] Description: - [Arrays (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) @@ -545,7 +545,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - - not the whole video, just portions about Node struct and memory allocation. + - 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/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) @@ -576,7 +576,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### Stack - [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ) - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - - [ ] Will not implement. Implementing with array is trivial. + - [ ] Will not implement. Implementing with array is trivial - ### Queue - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) @@ -757,7 +757,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - 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. +- For heapsort, see Heap data structure above. Heap sort is great, but not stable - [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) @@ -799,7 +799,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] 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 heapsort, see Heap data structure above - [ ] Not required, but I recommended them: - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) @@ -830,7 +830,7 @@ Graphs can be used to represent many problems in computer science, so this secti - adjacency map - Familiarize yourself with each representation and its pros & cons - BFS and DFS - know their computational complexity, their trade offs, and how to implement them in real code - - When asked a question, look for a graph-based solution first, then move on if none. + - When asked a question, look for a graph-based solution first, then move on if none - [ ] MIT(videos): - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) @@ -886,15 +886,15 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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? + - 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 - - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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. + - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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) @@ -998,16 +998,16 @@ Graphs can be used to represent many problems in computer science, so this secti - [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 + - 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 - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) @@ -1016,7 +1016,7 @@ Graphs can be used to represent many problems in computer science, so this secti - Thread resource needs (shares above (minus stack) with other threads in the 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 + - 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) @@ -1043,8 +1043,8 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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 + - In an OS, how it works? + - Can be gleaned from Operating System videos - ### String searching & manipulations - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) @@ -1056,12 +1056,12 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects) + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects). - ### 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. + to track the path + - I read through code, but will not implement - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) @@ -1093,7 +1093,7 @@ Graphs can be used to represent many problems in computer science, so this secti - ### Networking - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - - otherwise, this is just good to know + - Otherwise, this is just good to know - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org) - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) @@ -1114,13 +1114,13 @@ Graphs can be used to represent many problems in computer science, so this secti - 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. + Expect to spend quite a bit of time on this - Considerations: - - scalability + - Scalability - Distill large data sets to single values - Transform one data set to another - Handling obscenely large amounts of data - - system design + - System design - features sets - interfaces - class hierarchies @@ -1134,7 +1134,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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. +- [ ] [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) @@ -1148,7 +1148,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: - - You don't need all of these. Just pick a few that interest you. + - You don't need all of these. Just pick a few that interest you - [ ] [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) @@ -1201,30 +1201,30 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] 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](#video-series) section. + - For even more, see "Mining Massive Datasets" video series in the [Video Series](#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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - [cheat sheet](https://github.com/jwasham/coding-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 + - 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 + - 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 + - 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](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972) - [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake) @@ -1258,12 +1258,12 @@ Now that you know all the computer science topics above, it's time to practice a **Coding question practice is not about memorizing answers to programming problems.** Why you need to practice doing programming problems: -- problem recognition, and where the right data structures and algorithms fit in -- gathering requirements for the problem -- talking your way through the problem like you will in the interview -- coding on a whiteboard or paper, not a computer -- coming up with time and space complexity for your solutions -- testing your solutions +- Problem recognition, and where the right data structures and algorithms fit in +- Gathering requirements for the problem +- Talking your way through the problem like you will in the interview +- Coding on a whiteboard or paper, not a computer +- Coming up with time and space complexity for your solutions +- Testing your solutions There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming interview books, too, but I found this outstanding: @@ -1304,15 +1304,15 @@ Take coding challenges every day, as many as you can. Coding Interview Question Videos: - [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) - - Super for walkthroughs of problem solutions. + - Super for walkthroughs of problem solutions - [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) - - Good explanations of solution and the code. - - You can watch several in a short time. + - Good explanations of solution and the code + - You can watch several in a short time - [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) Challenge sites: - [LeetCode](https://leetcode.com/) - - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing. + - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode) - See Nick White Videos above for short code-throughs - [HackerRank](https://www.hackerrank.com/) @@ -1334,9 +1334,9 @@ Challenge repos: - [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) Mock Interviews: -- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview. +- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview - [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews -- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies. +- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies - [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously. @@ -1360,7 +1360,7 @@ Have a story, not just data, about something you accomplished. - What's a tough problem you've solved? - Biggest challenges faced? - Best/worst designs seen? -- Ideas for improving an existing product. +- Ideas for improving an existing 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]? @@ -1411,40 +1411,40 @@ You're never really done. These are here so you can dive into a topic you find interesting. - [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - - an oldie but a goodie + - An oldie but a goodie - [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - a modern option + - A modern option - [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) - [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - a gentle introduction to design patterns + - A gentle introduction to design patterns - [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - - aka the "Gang Of Four" book, or GOF - - the canonical design patterns book + - AKA the "Gang Of Four" book, or GOF + - The canonical design patterns book - [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. + - Class textbook on data structures and algorithms + - Pros: + - Is a good review as any algorithms textbook would be + - Nice stories from his experiences solving problems in industry and academia + - Code examples in C + - Cons: + - Can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - Chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - Don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material + - Algorithm catalog: + - This is the real reason you buy this book + - About to get to this part. Will update here once I've made my way through it - Can rent it on kindle - 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) - [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief. - - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like - These chapters are worth the read to give you a nice foundation: - Chapter 2 - Numeric Representation - Chapter 3 - Binary Arithmetic and Bit Operations @@ -1456,15 +1456,15 @@ You're never really done. - Chapter 10 - Instruction Set Architecture - Chapter 11 - Memory Architecture and Organization - [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - aka CLR, sometimes CLRS, because Stein was late to the game + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently + - AKA CLR, sometimes CLRS, because Stein was late to the game - [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - For a richer, more up-to-date (2017), but longer treatment - [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture. + that is just an intro. This a guidebook on program design and architecture ## Additional Learning @@ -1518,7 +1518,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) @@ -1529,19 +1529,19 @@ You're never really done. - [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk) - ### Entropy - - also see videos below - - make sure to watch information theory videos first + - 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 + - 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 + - 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) @@ -1621,8 +1621,8 @@ You're never really done. - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) - ### Locality-Sensitive Hashing - - used to determine the similarity of documents - - the opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same. + - Used to determine the similarity of documents + - The opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### van Emde Boas Trees @@ -1639,11 +1639,11 @@ You're never really done. 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 + 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. + - 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** @@ -1652,7 +1652,7 @@ You're never really done. 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). + 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) @@ -1662,7 +1662,7 @@ You're never really done. - 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. + networking and file system code) etc - [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - MIT Lecture: Splay Trees: - Gets very mathy, but watch the last 10 minutes for sure. @@ -1677,7 +1677,7 @@ You're never really done. 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. + 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) - [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) @@ -1708,12 +1708,12 @@ You're never really done. - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - **B-Trees** - - Fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor). + - 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. + (or perhaps to a cylinder-head-sector) address - [B-Tree](https://en.wikipedia.org/wiki/B-tree) - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) - [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) @@ -1725,8 +1725,8 @@ You're never really done. - ### k-D Trees - - great for finding number of points in a rectangle or higher dimension object - - a good fit for k-nearest neighbors + - Great for finding number of points in a rectangle or higher dimension object + - A good fit for k-nearest neighbors - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) From 915eaa66b353c44cc9a51e33712362b488733378 Mon Sep 17 00:00:00 2001 From: Tanay Toshniwal Date: Thu, 1 Oct 2020 14:06:56 +0530 Subject: [PATCH 236/263] new course links for html, css and js --- programming-language-resources.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/programming-language-resources.md b/programming-language-resources.md index a50dbd8..ddcef65 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -59,12 +59,15 @@ - HTML - [Quick HTML Tutorial for Beginners](https://www.youtube.com/playlist?list=PLr6-GrHUlVf_ZNmuQSXdS197Oyr1L9sPB) - [HTML Crash Course for Beginners (1 hr)](https://www.youtube.com/watch?v=UB1O30fR-EE) + - [Basic HTML and HTML5](https://www.freecodecamp.org/learn/responsive-web-design/basic-html-and-html5/) - CSS - [Quick CSS Tutorial for Beginners](https://www.youtube.com/playlist?list=PLr6-GrHUlVf8JIgLcu3sHigvQjTw_aC9C) - [CSS Crash Course for absolute Beginners](https://www.youtube.com/watch?v=yfoY53QXEnI) + - [Basic CSS](https://www.freecodecamp.org/learn/responsive-web-design/basic-css/) - Javascript - [Learn Javascript in 12 minutes](https://www.youtube.com/watch?v=Ukg_U3CnJWI) - [Javascript Beginner Tutorials](https://www.youtube.com/playlist?list=PL41lfR-6DnOrwYi5d824q9-Y6z3JdSgQa) + - [Javascript Algorithms and Data Structures](https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/) - Other Language 1 - Other Language 2 - etc From b7af267eb103a1e1aea5d09410fadddc90f96deb Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Yadav <45727674+coderaky@users.noreply.github.com> Date: Fri, 2 Oct 2020 11:48:52 +0530 Subject: [PATCH 237/263] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5c72de2..dc81c70 100644 --- a/README.md +++ b/README.md @@ -267,6 +267,8 @@ Sometimes the classes are not in session so you have to wait a couple of months, - A free Python centric data structures and algorithms course. - [ ] [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): - Get hands-on practice with over 100 data structures and algorithm exercises and guidance from a dedicated mentor to help prepare you for interviews and on-the-job scenarios. + - [ ] [Grokking the Behavioral Interview (Educative free course)](https://www.educative.io/courses/grokking-the-behavioral-interview): + - Many times, it’s not your technical competency that holds you back from landing your dream job, it’s how you perform on the behavioral interview. ## Pick One Language for the Interview From 7f04cba33e769be51e94f1b72d138528a626d75f Mon Sep 17 00:00:00 2001 From: Himanshu Airan <62210670+Himanshu-77@users.noreply.github.com> Date: Fri, 2 Oct 2020 17:27:28 +0530 Subject: [PATCH 238/263] Update README-hi.md gramatical corrections --- translations/README-hi.md | 54 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/translations/README-hi.md b/translations/README-hi.md index 31da979..a0b94fb 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -127,7 +127,7 @@ memory" का एरर न दे, और तब मुझे कोई वै ## कभी भी आप चालाक नहीं हो ऐसा ना सोचो -- सफल सॉफ्टवेयर इंजीनियर चालाक होते हें, पर बहुत लोगो असुरक्षा होती है की वो चालाक नहीं हैं ! +- सफल सॉफ्टवेयर इंजीनियर चालाक होते हें, पर बहुत लोगो को असुरक्षा होती है किी वो चालाक नहीं हैं ! - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) ## विडियो संसाधनों के बारे में @@ -138,7 +138,7 @@ memory" का एरर न दे, और तब मुझे कोई वै I'd appreciate your help converting the MOOC video links to public sources to replace the online course विडियो over time. I like using university lectures. -## इंटरव्यू प्रकिया और साधारण इंटरव्यू तयारी +## इंटरव्यू प्रकिया और साधारण इंटरव्यू तैयारी [ ] [ABC: Always Be Coding](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) [ ] [Whiteboarding](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) @@ -151,7 +151,7 @@ memory" का एरर न दे, और तब मुझे कोई वै ## इंटरव्यू के लिए एक संगणक भाषा चुने -इंटरव्यू मैं आप कोई भी एक भाषा जिसमे आप आरामदायक हो वो चुन सकते हैं, पर गूगल के लिए निम्नलिखित भाषाएँ अच्छी रहेगी: +इंटरव्यू में आप कोई भी एक भाषा जिसमे आप आरामदायक हो वो चुन सकते हैं, पर गूगल के लिए निम्नलिखित भाषाएँ अच्छी रहेगी: - C++ - Java @@ -171,7 +171,7 @@ memory" का एरर न दे, और तब मुझे कोई वै [भाषा संसाधनोंको यहाँ देखें](programming-language-resources.md) -क्युकी में मैं पढ़ रहा हूँ, आपको कुछ C, C++, और Python शामिल दिखेगा. वहाँ कुछ शामिल किताबें, नीचे आखिर में देख ले. +क्योकि में मैं पढ़ रहा हूँ, आपको कुछ C, C++, और Python शामिल दिखेगा. वहाँ कुछ शामिल किताबें, नीचे आखिर में देख ले. ## पुस्तक सूची यह मैंने जो इस्तेमाल किया था उससे छोटी सूची है यह आपको समय बचाने के लिए संक्षिप्त है @@ -337,7 +337,7 @@ memory" का एरर न दे, और तब मुझे कोई वै ## इसमे क्या समाविष्ट नहीं हे -यह बड़ी सूचि गूगल इंटरव्यू टिप्पणियों से व्यक्तिगत कार्य सूचि से बनायीं गयी थी. निचे कुछ प्रचलित टेक्नोलॉजी हैं पर उन्हें टिप्पणियो में समविस्ट नहीं किया गया हैं. +यह बड़ी सूचि गूगल इंटरव्यू टिप्पणियों से व्यक्तिगत कार्य सूचि से बनायीं गयी थी. निचे कुछ प्रचलित टेक्नोलॉजी हैं पर उन्हें टिप्पणियो में समाविस्ट नहीं किया गया हैं. - SQL - Javascript @@ -345,9 +345,9 @@ memory" का एरर न दे, और तब मुझे कोई वै ## दैनिक योजना -कुछ विषय एक दिन ले सकते हैं और कुछ ज्यादा.कुचो का सिर्फ पढाई हो सकती हैं पर अमल नहीं हो सकता. +कुछ विषय एक दिन ले सकते हैं और कुछ ज्यादा. कुछो की सिर्फ पढाई हो सकती हैं पर अमल नहीं हो सकता. -हर दिन मैं निचली सूचि से एक विषय लेता हु, उसका विडियो देखता हु, और उसका अमल निचे दिए तरह करता हूँ: +हर दिन मैं निचली सूची से एक विषय लेता हूँ, उसका विडियो देखता हूँ, और उसका अमल नीचे दिए तरह करता हूँ: - C - struct और function का उपयोग करके जो  struct * या args का  उपयोग करते हैं. - C++ - built-in types का उपयोग न करके - C++ - built-in types का उपयोग करके, जैसे STL की std::list, linked list के लिए @@ -357,7 +357,7 @@ memory" का एरर न दे, और तब मुझे कोई वै आपको इन सभी की ज़रूरत नहीं है साक्षात्कार के लिए आपको केवल एक ही भाषा की आवश्यकता है इन सब में कोड क्यों? -- अभ्यास, अभ्यास, अभ्यास, जब तक मैं इससे बीमार न हो, और यह कोई समस्या नहीं कर सकता (कुछ बहुत बढ़िया मामलों और याद रखने के लिए बहीखाता विवरण) +- अभ्यास, अभ्यास, अभ्यास, जब तक मैं इससे बीमार न हो, और यह कोई समस्या नहीं कर सकता (कुछ बहुत बढ़िया मामलों और याद रखने के लिए बही-खाता विवरण) - कच्ची बाधाओं के भीतर काम करना (कचरा संग्रहण की सहायता के बिना स्मृति को आवंटित करना / मुक्त करना (पायथन को छोड़कर)) - अंतर्निहित प्रकारों का उपयोग करें, इसलिए मुझे वास्तविक दुनिया के उपयोग के लिए निर्मित उपकरणों का उपयोग करने का अनुभव है (उत्पादन में अपनी स्वयं की लिंक्ड सूची कार्यान्वयन नहीं लिखना) @@ -370,14 +370,14 @@ memory" का एरर न दे, और तब मुझे कोई वै आपको हर एल्गोरिथम याद करने की आवश्यकता नहीं है। -एक व्हाईटबोर्ड या कागज़ पर कोड लिखें, कंप्यूटर नहीं। कुछ नमूना इनपुट के साथ टेस्ट करें फिर इसे कंप्यूटर पर जांचें +एक व्हाइटबोर्ड या कागज़ पर कोड लिखें, कंप्यूटर नहीं। कुछ नमूना इनपुट के साथ टेस्ट करें फिर इसे कंप्यूटर पर जांचें ## पूर्वाभ्यास ज्ञान - [ ] **C जानें** - सी हर जगह है आप पुस्तकों, व्याख्यान, वीडियो, हर जगह जब आप पढ़ रहे हैं, में उदाहरण देखेंगे। - [ ] [सी प्रोग्रामिंग भाषा, खंड 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) - - यह एक छोटी पुस्तक है, लेकिन यह आपको सी भाषा पर एक महान संभाल देगा और यदि आप इसे थोड़ा अभ्यास करते हैं तो आपको जल्दी से कुशल मिलेगा। समझना सी आपको यह समझने में मदद करता है कि प्रोग्राम और मेमोरी कैसे काम करते हैं + - यह एक छोटी पुस्तक है, लेकिन यह आपको सी भाषा पर एक महान संभाल देगा और यदि आप इसे थोड़ा अभ्यास करते हैं तो आपको जल्दी से कुशल मिलेगा। सी आपको यह समझने में मदद करता है कि प्रोग्राम और मेमोरी कैसे काम करते हैं - [सवालों के जवाब](https://github.com/lekkas/c-algorithms) - [ ] **कंप्यूटर एक प्रोग्राम की प्रक्रिया कैसे करते हैं:** @@ -1363,21 +1363,21 @@ Take coding challenges every day, as many as you can. - [ ] [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/) -- [ ] [टॉपकोड़ेर्स के लिए गणित](https://www.topcoder.com/community/data-science/data-science-tutorials/mathematics-for-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 इंटरव्यू सामग्री](https://courses.csail.mit.edu/iap/interview/materials.php) - - [लीतकोड](https://leetcode.com/) + - [लीटकोड](https://leetcode.com/) - [टॉप कोडर](https://www.topcoder.com/) - - [प्रोजेक्ट यूलेर (math-focused)](https://projecteuler.net/index.php?section=problems) - - [कोदवार](http://www.codewars.com) + - [प्रोजेक्ट यूलर (math-focused)](https://projecteuler.net/index.php?section=problems) + - [कोडवॉर ](http://www.codewars.com) - [हैकररैंक](https://www.hackerrank.com/) - [कोदिलिटी](https://codility.com/programmers/) - [इंटरव्यूकेक](https://www.interviewcake.com/) - [इंटरव्यूबिट](https://www.interviewbit.com/invite/icjf) - - [प्र्ग्रम्मिंग लैंग्वेज में सुधार करने के लिए](http://exercism.io/languages) + - [प्रोग्रामिंग लैंग्वेज में सुधार करने के लिए](http://exercism.io/languages) ## Once you're closer to the interview @@ -1394,31 +1394,31 @@ Take coding challenges every day, as many as you can. ## इंटरव्यू की सोंच - निचे दिए गए विषयो के साथ साथ, अपने २० इंटरव्यू प्रश्न तयार रखे. हर एक प्रश्न के २-३ जवाब तयार रखे. आपने जो हासिल किया हे उसकी कहानी रखे. + निचे दिए गए विषयो के साथ साथ, अपने २० इंटरव्यू प्रश्न तैयार रखे. हर एक प्रश्न के २-३ जवाब तैयार रखे. आपने जो हासिल किया हे उसकी कहानी रखे. -- आपको ये नौकरी क्यू चाहिए? +- आपको ये नौकरी क्यूँ चाहिए? - आपने कौनसी एक कठिन समस्या हल की हैं? -- आपकी सबसे बढ़ी चुनोतिया कोनसी थी? -- आपने देखि हुए सर्वोतम और बुरी संरचनाये? +- आपकी सबसे बड़ी चुनौतियां कोनसी थी? +- आपने देखी हुई सर्वोतम और बुरी संरचनाये? - किसी मौजूदा गूगल उत्पाद में सुधार के लिए विचार. - आप अपना काम सर्वोत्तम कैसे कर सकते हो, टीम के साथ या एकेले? -- आपकी कोनसी कुशलता या अनुभव आपके भूमिका में मदतगार होंगे? +- आपकी कोनसी कुशलता या अनुभव आपके भूमिका में मददगार होंगे? - आपने [जॉब क्ष / प्रोजेक्ट य] में सबसे ज्यादा किससे आनद मिला? - आपकी सबसे बड़ी [जॉब क्ष/ प्रोजेक्ट य] की चुनोती जिसे आपको सामना करना पड़ा? - [जॉब क्ष / प्रोजेक्ट य] में से सबसे बड़ा बग? - आपने [जॉब क्ष / प्रोजेक्ट य] में क्या सिखा? - [जॉब क्ष / प्रोजेक्ट य] में आप क्या सुधार कर सकते थे/ करना चाहते थे? -## इन्तेर्विएवर के लिए प्रश्न रखे +## इंटरव्यूअर के लिए प्रश्न रखे - मेरे कुछ प्रश्न (मुजे पहिलेसेही कुछ जवाब बता हे पर मैं टीम की राय जानना चाहता हूँ): + मेरे कुछ प्रश्न (मुझे पहले से ही कुछ जवाब पता है पर मैं टीम की राय जानना चाहता हूँ): - आपकी टीम कितनी बड़ी हैं? - आपकी डेव साइकिल कैसी हैं? क्या आपको वॉटरफॉल/स्प्रिंट/एजाइल पता हैं? - क्या काम के पीछे भागना पड़ता हैं? या लचीलापन हैं? - आपकी टीम मैं निर्णय कैसे लिए जाते हैं? - हर सप्ताह आपकी कितनी बैठके होती हैं? -- क्या आपका काम का मौहोल काम करने मैं मदत करता हैं? +- क्या आपका काम का माहौल काम करने मैं मदद करता हैं? - आप किसपे काम करते हो? - आपको उसमे क्या पसंद हैं? - आपका काम जीवन कैसा हैं? @@ -1620,7 +1620,7 @@ Take coding challenges every day, as many as you can.    - [ ] पुस्तके:        - [ ] [गो प्रोग्रामिंग का परिचय (ऑनलाइन मुफ्त पढ़े)](https://www.golang-book.com/books/intro)        - [ ] [गो प्रोग्रामिंग लैंग्वेज (दोनोवन & केर्निघन)](https://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440) -    - [ ] [बूतकाम्प](https://www.golang-book.com/guides/bootcamp) +    - [ ] [बूटकैंप ](https://www.golang-book.com/guides/bootcamp) -- @@ -1710,7 +1710,7 @@ Sit back and enjoy. "netflix and skill" :P - [ ] [क्रिप्टोग्राफ़ी का परिचय](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be) - [श्रृंखला में अधिक (क्रम में नहीं)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) -- [ ] [विशाल डेटासेट खनन – स्तान्फोर्ड विश्वविद्यालय(९४ विडियो)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) +- [ ] [विशाल डेटासेट खनन – स्टैनफोर्ड विश्वविद्यालय(९४ विडियो)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) ## शायद @@ -1722,8 +1722,8 @@ http://www.gainlo.co/ - बड़ी कंपनी के मोक इंटर बधाई हो! -- [१० बाते काश मुज्हे गूगल के पाहिले दिन पता होती](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw) +- [१० बाते काश मुझे गूगल के पहले दिन पता होती](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw) सिखाते रहो. -वास्तव में आपकी पढाई कभी ख़तम नहीं होती. +वास्तव में आपकी पढाई कभी ख़त्म नहीं होती. From 5dba31d044034020426ebf380f2cebc968a9ac9c Mon Sep 17 00:00:00 2001 From: Mohamed El Amine Yamani Date: Fri, 2 Oct 2020 16:32:18 +0100 Subject: [PATCH 239/263] Readded the full stops I mistakingly removed --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 5293474..f51a027 100644 --- a/README.md +++ b/README.md @@ -503,7 +503,7 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Data Structures - ### Arrays - - Implement an automatically resizing vector + - Implement an automatically resizing vector. - [ ] Description: - [Arrays (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) @@ -892,9 +892,9 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Tail Recursion (video)](https://www.youtube.com/watch?v=L1jjXGfxozc) - ### Dynamic Programming - - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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 + - You probably won't see any dynamic programming problems in your interview, but it's worth being able to recognize a problem as being a candidate for 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) @@ -1148,7 +1148,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: - - You don't need all of these. Just pick a few that interest you + - You don't need all of these. Just pick a few that interest you. - [ ] [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) @@ -1708,7 +1708,7 @@ You're never really done. - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - **B-Trees** - - Fun fact: it's a mystery, but the B could stand for Boeing, Balanced, or Bayer (co-inventor) + - 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 From d4d37b5b9f6a97661328cbb2aab3124591226ce5 Mon Sep 17 00:00:00 2001 From: wangming Date: Mon, 5 Oct 2020 19:02:46 +0800 Subject: [PATCH 240/263] =?UTF-8?q?Updated=20link=20to=20"=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E7=B3=BB=E7=BB=9F=E5=92=8C=E7=B3=BB=E7=BB=9F=E7=BC=96?= =?UTF-8?q?=E7=A8=8B(video)"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- translations/README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 48f3faf..d9c1693 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -871,7 +871,7 @@ - ### 进程(Processe)和线程(Thread) - [ ] 计算机科学 162 - 操作系统 (25 个视频): - 视频 1-11 是关于进程和线程 - - [操作系统和系统编程 (video)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [操作系统和系统编程 (video)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) - [进程和线程的区别是什么?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) - 涵盖了: - 进程、线程、协程 From 17d5d72117b9b123b4ed68dd8f61fbd434813dbe Mon Sep 17 00:00:00 2001 From: wangming Date: Wed, 7 Oct 2020 10:46:37 +0800 Subject: [PATCH 241/263] =?UTF-8?q?Updated=20link=20to=20"CPU=E6=98=AF?= =?UTF-8?q?=E5=A6=82=E4=BD=95=E6=89=A7=E8=A1=8C=E4=BB=A3=E7=A0=81=EF=BC=88?= =?UTF-8?q?=E8=A7=86=E9=A2=91=EF=BC=89"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- translations/README-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index d9c1693..1771d1f 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -307,7 +307,7 @@ ## 必备知识 - [ ] **计算机是如何处理一段程序:** - - [ ] [CPU 是如何执行代码(视频)](https://www.youtube.com/watch?v=42KTvGYQYnA) + - [ ] [CPU 是如何执行代码(视频)](https://www.youtube.com/watch?v=XM4lGflQFvA) - [ ] [机器码指令(视频)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) - [ ] **编译器** From 2263be37d7b8be06949d6d5d3ac7d513f6e3ce3c Mon Sep 17 00:00:00 2001 From: John Washam Date: Thu, 8 Oct 2020 18:06:07 -0700 Subject: [PATCH 242/263] Removed Core Trees --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index e8039f0..4518097 100644 --- a/README.md +++ b/README.md @@ -669,7 +669,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## Trees - ### Trees - Notes & Background - - [ ] [Series: Core Trees (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-trees-ovovP) - [ ] [Series: Trees (video)](https://www.coursera.org/lecture/data-structures/trees-95qda) - basic tree construction - traversal From 52db6949bdbbb15382e82783db2413d3d87be1de Mon Sep 17 00:00:00 2001 From: nnguyen <55342025+nhi-nguyen-csis@users.noreply.github.com> Date: Wed, 14 Oct 2020 23:02:37 -0700 Subject: [PATCH 243/263] adding python and java resources --- programming-language-resources.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/programming-language-resources.md b/programming-language-resources.md index 5a1aee9..957104b 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -42,12 +42,14 @@ - [Beyond PEP 8 -- Best practices for beautiful intelligible code (video)](https://www.youtube.com/watch?v=wf-BqAjZb8M) - [Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) - [Coding Interview Essentials](https://github.com/ajinkyal121/coding-interview-university/blob/master/extras/cheat%20sheets/Coding%20Interview%20Python%20Language%20Essentials.pdf) + - [Data Structures And Algorithms in Python](https://www.youtube.com/watch?v=kQDxmjfkIKY) - Java - [Stanford CS106A - Programming Methodology (video)](https://see.stanford.edu/Course/CS106A) - [Software Construction In Java (video)](https://www.edx.org/course/software-construction-java-mitx-6-005-1x) - [Introduction To Programming In Java](http://introcs.cs.princeton.edu/java/home/) - [Algorithms 4th Ed - Algorithm Book In Java](http://algs4.cs.princeton.edu/home/) - [Effective Java 3rd Edition](https://www.amazon.com/Effective-Java-Joshua-Bloch-ebook/dp/B078H61SCH) + - [Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer](https://www.youtube.com/watch?v=RBSGKlAvoiM&t=1744s) - Go - [The Go programming Language](https://golang.org/) - [The Go programming Language (book)](http://www.gopl.io/) From 042bdbfc1f212e89284a92cd6d51792cedc040d2 Mon Sep 17 00:00:00 2001 From: davidsetyanugraha Date: Sat, 24 Oct 2020 13:32:31 +1100 Subject: [PATCH 244/263] Removed core trees link to all translations --- translations/README-ar.md | 1 - translations/README-bn.md | Bin 285802 -> 285542 bytes translations/README-cn.md | 1 - translations/README-de.md | 1 - translations/README-es.md | 1 - translations/README-fr.md | 1 - translations/README-he.md | 1 - translations/README-hi.md | 1 - translations/README-id.md | 1 - translations/README-ko.md | 1 - translations/README-pl.md | 1 - translations/README-ptbr.md | 1 - translations/README-th.md | 1 - translations/README-tw.md | 1 - translations/README-uk.md | 1 - translations/README-vi.md | 1 - 16 files changed, 15 deletions(-) diff --git a/translations/README-ar.md b/translations/README-ar.md index d5c0ffb..9a7fddd 100644 --- a/translations/README-ar.md +++ b/translations/README-ar.md @@ -746,7 +746,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## 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 diff --git a/translations/README-bn.md b/translations/README-bn.md index 753a2cd0594e97e503e0d92645162ae7bb58c966..b1b8d07111108e8c06a3ba0ff9d054b9904f9e66 100644 GIT binary patch delta 29 icmaF0L-5%)!GTrees (Bäume) - ### Trees - Notizen und Hintergrund - - [ ] [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) - generell Baumerstellung - Traversieren (Durchlaufen) diff --git a/translations/README-es.md b/translations/README-es.md index 4acc4ef..0339e28 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -664,7 +664,6 @@ Escriba código en un pizarrón o en papel no en la computadora. Pruebe con algu ## Árboles - ### Árboles - Notas & Antecedentes - - [ ] [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) - Construcción básica de árboles - Recorrido diff --git a/translations/README-fr.md b/translations/README-fr.md index a535052..1ba9e80 100644 --- a/translations/README-fr.md +++ b/translations/README-fr.md @@ -732,7 +732,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## 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 diff --git a/translations/README-he.md b/translations/README-he.md index 250fc5b..4254182 100644 --- a/translations/README-he.md +++ b/translations/README-he.md @@ -726,7 +726,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## 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 diff --git a/translations/README-hi.md b/translations/README-hi.md index a0b94fb..8393a15 100644 --- a/translations/README-hi.md +++ b/translations/README-hi.md @@ -577,7 +577,6 @@ memory" का एरर न दे, और तब मुझे कोई वै ## Trees - ### Trees - Notes & Background - - [ ] [Series: Core Trees (विडियो)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - [ ] [Series: Trees (विडियो)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - basic tree construction - traversal diff --git a/translations/README-id.md b/translations/README-id.md index f12d3d6..c04bf12 100644 --- a/translations/README-id.md +++ b/translations/README-id.md @@ -698,7 +698,6 @@ Menulis kode pada papan tulis atau kertas, bukan komputer. Uji dengan beberapa s ## 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 diff --git a/translations/README-ko.md b/translations/README-ko.md index e194ae8..f8a72b5 100644 --- a/translations/README-ko.md +++ b/translations/README-ko.md @@ -656,7 +656,6 @@ Anki format의 내 flashcard 데이터베이스: https://ankiweb.net/shared/info ## 트리 - ### 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) - 트리 기초 형태 만들기 - 순회 diff --git a/translations/README-pl.md b/translations/README-pl.md index 58128df..3e439e1 100644 --- a/translations/README-pl.md +++ b/translations/README-pl.md @@ -644,7 +644,6 @@ Napisz kod na tablicy lub papierze, a nie na komputerze. Testuj z niektórymi pr ## Drzewa - ### Drzewa - uwagi & zarys - - [ ] [Series: Core Trees (wideo)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - [ ] [Series: Trees (wideo)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - podstawy budowy drzewa - traversal (ścieżki) diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index 5e28435..70cbfe8 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -679,7 +679,6 @@ Escreva código em um quadro branco ou papel, não em um computador. Teste com u ## Árvores - ### Árvores - Anotações e Fundamentos - - [ ] [Series: Core Trees (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) (Série: Fundamentos de Árvores - vídeo) - [ ] [Series: Trees (video)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) (Série: Árvores - vídeo) - contrução básica de árvore - transversal diff --git a/translations/README-th.md b/translations/README-th.md index e33cbc6..45e0d26 100644 --- a/translations/README-th.md +++ b/translations/README-th.md @@ -657,7 +657,6 @@ There are a lot of distractions that can take up valuable time. Focus and concen ## 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 diff --git a/translations/README-tw.md b/translations/README-tw.md index 0237ac3..821b363 100644 --- a/translations/README-tw.md +++ b/translations/README-tw.md @@ -624,7 +624,6 @@ ## 樹狀結構(Tree) - ### Trees-重點與背景知識 - - [ ] [Series: Core Trees (影片)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - [ ] [Series: Trees (影片)](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - 如何建立一棵樹 - 遍歷 diff --git a/translations/README-uk.md b/translations/README-uk.md index f6e8c22..190939d 100644 --- a/translations/README-uk.md +++ b/translations/README-uk.md @@ -655,7 +655,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input ## 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 diff --git a/translations/README-vi.md b/translations/README-vi.md index 8ad65bc..0bea859 100644 --- a/translations/README-vi.md +++ b/translations/README-vi.md @@ -692,7 +692,6 @@ Hãy viết code trên bảng đen hoặc trên giấy. Đừng sử dụng máy ## Cây - ### Cây - Ghi chú và kiến thức nền - - [ ] [Chuỗi bài giảng: Căn bản về cây](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/ovovP/core-trees) - [ ] [Chuỗi bài giảng: Cây](https://www.coursera.org/learn/data-structures/lecture/95qda/trees) - Xây dựng cây cơ bản. - Duyệt cây. From fe177b39d6c64ac60986bcaaea0ecb182fbcef37 Mon Sep 17 00:00:00 2001 From: qiwihui Date: Sat, 31 Oct 2020 01:02:09 +0800 Subject: [PATCH 245/263] docs: update to latest in Chinese --- translations/README-cn.md | 2010 +++++++++++++++++++++---------------- 1 file changed, 1120 insertions(+), 890 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index 1f7d8d3..f3ccbd6 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -1,11 +1,12 @@ -# [译] Coding Interview University 一套完整的学习手册帮助自己准备 Google 的面试 +# Coding Interview University -> * 原文地址:[Coding Interview University](https://github.com/jwasham/coding-interview-university) -* 原文作者:[John Washam](https://github.com/jwasham) -* 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner) -* 译者:[aleen42](https://github.com/aleen42),[Newton](https://github.com/Newt0n),[bobmayuze](https://github.com/bobmayuze),[Jaeger](https://github.com/laobie),[sqrthree](https://github.com/sqrthree) +原先我为了成为一个软件工程师而建立这份简单的学习主题清单, 但这份清单随着时间而膨胀成今天这样。在做完这份清单上的每个目标后,[我成为了 Amazon 的软件开发工程师](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! 你或许不需要像我一样学习这么多。但是,让你成为一位称职工程师所需要的知识都在这里了。 -[![xitu](https://camo.githubusercontent.com/c9c9db0a39b56738a62332f0791d58b1522fdf82/68747470733a2f2f7261776769742e636f6d2f616c65656e34322f6261646765732f6d61737465722f7372632f786974752e737667)](https://github.com/xitu/gold-miner) +我每天自学8~12小时,这样持续了好几个月。这是我的故事:[为什么我为了 Google 面试而自学了8个月](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13)。 + +在这份清单内的主题会让你拥有足够的知识去面对几乎每家软件公司的技术面试,包括科技巨头:Amazon、Facebook、Google,以及 Microsoft。 + +祝你好运! ## 这是? @@ -13,7 +14,11 @@ ![白板上编程 ———— 来自 HBO 频道的剧集,“硅谷”](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) -这一长列表是从 **Google 的指导笔记** 中萃取出来并进行扩展。因此,有些事情你必须去了解一下。我在列表的底部添加了一些额外项,用于解决面试中可能会出现的问题。这些额外项大部分是来自于 Steve Yegge 的“[得到在 Google 工作的机会](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)”。而在 Google 指导笔记的逐字间,它们有时也会被反映出来。 +这份清单适用于 **新手软件工程师**,或者想从软件/网站开发转向软件工程(需要计算机科学知识)的人员。如果你有多年的经验,并且声称拥有多年的软件工程经验,并且期待一次更艰难的面试。 + +如果你具有多年的软件/网页开发经验,请注意,大型软件公司(例如 Google,Amazon,Facebook 和 Microsoft)将软件工程视为不同于软件/网页开发,并且它们需要计算机科学知识。 + +如果你想成为可靠性工程师或运维工程师,请从可选列表(网络,安全)中学习更多。 --- @@ -22,18 +27,15 @@ - [这是?](#这是) - [为何要用到它?](#为何要用到它) - [如何使用它](#如何使用它) -- [拥有一名 Googler 的心态](#拥有一名-googler-的心态) -- [我得到了工作吗?](#我得到了工作吗) -- [跟着我的脚步](#跟着我的脚步) -- [不要妄自菲薄](#不要妄自菲薄) -- [关于 Google](#关于-google) +- [不要觉得自己不够聪明](#不要觉得自己不够聪明) - [相关视频资源](#相关视频资源) - [面试过程 & 通用的面试准备](#面试过程--通用的面试准备) - [为你的面试选择一种语言](#为你的面试选择一种语言) +- [书单](#书单) - [在你开始之前](#在你开始之前) -- [你所看不到的](#你所看不到的) -- [日常计划](#日常计划) +- [没有包含的内容](#没有包含的内容) - [必备知识](#必备知识) +- [日常计划](#日常计划) - [算法复杂度 / Big-O / 渐进分析法](#算法复杂度--big-o--渐进分析法) - [数据结构](#数据结构) - [数组(Arrays)](#数组arrays) @@ -48,27 +50,41 @@ - [树 —— 笔记 & 背景](#树--笔记--背景) - [二叉查找树(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) - - [N 叉树(K 叉树、M 叉树)](#n-叉树k-叉树m-叉树) + - [平衡查找树(Balanced search trees)(基本概念,非细节)](#平衡查找树balanced-search-trees) + - 遍历:前序、中序、后序、BFS、DFS - [排序](#排序sorting) + - 选择排序(selection) + - 插入排序(insertion) + - 堆排序(heapsort) + - 快速排序(quicksort) + - 归并排序(merge sort) - [图(Graphs)](#图graphs) + - 有向图(directed) + - 无向图(undirected) + - 邻接矩阵(adjacency matrix) + - 邻接表(adjacency list) + - 遍历:广度优先(BFS), 深度优先(DFS) - [更多知识](#更多知识) - [递归](#递归recursion) - [动态规划](#动态规划dynamic-programming) + - [面向对象编程](#面向对象编程) + - [设计模式](#设计模式) - [组合 & 概率](#组合combinatorics-n-中选-k-个--概率probability) - [NP, NP-完全和近似算法](#np-np-完全和近似算法) - [缓存](#缓存cache) - [进程和线程](#进程processe和线程thread) - - [系统设计、可伸缩性、数据处理](#系统设计可伸缩性数据处理) - - [论文](#论文) - [测试](#测试) - [调度](#调度) - - [实现系统例程](#实现系统例程) - [字符串搜索和操作](#字符串搜索和操作) + - [字典树(Tries)](#字典树tries) + - [浮点数](#浮点数) + - [Unicode](#unicode) + - [字节顺序](#字节顺序) + - [网络](#网络) +- [系统设计、可伸缩性、数据处理](#系统设计可伸缩性数据处理)(如果你有4+年经验) - [终面](#终面) -- [书籍](#书籍) -- [编码练习和挑战](#编码练习和挑战) +- [编程问题练习](#编程问题练习) +- [编程练习和挑战](#编程练习和挑战) - [当你临近面试时](#当你临近面试时) - [你的简历](#你的简历) - [当面试来临的时候](#当面试来临的时候) @@ -77,199 +93,273 @@ ---------------- 下面的内容是可选的 ---------------- -- [附加的学习](#附加的学习) - - [Unicode](#unicode) - - [字节顺序](#字节顺序) +- [额外书籍](#额外书籍) +- [附加学习](#附加学习) + - [编译器](#编译器) - [Emacs and vi(m)](#emacs-and-vim) - [Unix 命令行工具](#unix-命令行工具) - - [信息资源 (视频)](#信息资源-视频) + - [信息论](#信息论-视频) - [奇偶校验位 & 汉明码 (视频)](#奇偶校验位--汉明码-视频) - - [系统熵值(系统复杂度)](#系统熵值系统复杂度) + - [系统熵值](#系统熵值Entropy) - [密码学](#密码学) - [压缩](#压缩) - - [网络 (视频)](#网络-视频) - [计算机安全](#计算机安全) - - [释放缓存](#释放缓存) - - [并行/并发编程](#并行并发编程) - - [设计模式](#设计模式) - - [信息传输, 序列化, 和队列化的系统](#信息传输-序列化和队列化的系统) + - [垃圾回收](#垃圾回收) + - [并行编程](#并行编程) + - [消息传递,序列化和队列化的系统](#消息传递-序列化和队列系统) + - [A*搜索算法](#A*搜索算法) - [快速傅里叶变换](#快速傅里叶变换) - [布隆过滤器](#布隆过滤器) + - [HyperLogLog](#HyperLogLog) + - [局部敏感哈希](#局部敏感哈希) - [van Emde Boas 树](#van-emde-boas-树) - [更深入的数据结构](#更深入的数据结构) + - [平衡查找树](#平衡查找树balanced-search-trees) + - AVL 树 + - 伸缩树(Splay tree) + - 红黑树 + - 2-3 查找树 + - 2-3-4 树(也称 2-4 树) + - N-ary (K-ary, M-ary)树 + - B 树 + - [k-D 树](#k-D树) - [跳表](#跳表) - [网络流](#网络流) - [不相交集 & 联合查找](#不相交集--联合查找) - - [快速处理数学](#math-for-fast-processing) + - [快速处理的数学](#快速处理的数学) - [树堆 (Treap)](#树堆-treap) - [线性规划](#线性规划linear-programming视频) - [几何:凸包(Geometry, Convex hull)](#几何凸包geometry-convex-hull视频) - [离散数学](#离散数学) - [机器学习](#机器学习machine-learning) - - [Go 语言](#go-语言) - [一些主题的额外内容](#一些主题的额外内容) - [视频系列](#视频系列) - [计算机科学课程](#计算机科学课程) +- [论文](#论文) --- ## 为何要用到它? -我一直都是遵循该计划去准备 Google 的面试。自 1997 年以来,我一直从事于 web 程序的构建、服务器的构建及创业型公司的创办。对于只有着一个经济学学位,而不是计算机科学学位(CS degree)的我来说,在职业生涯中所取得的都非常成功。然而,我想在 Google 工作,并进入大型系统中,真正地去理解计算机系统、算法效率、数据结构性能、低级别编程语言及其工作原理。可一项都不了解的我,怎么会被 Google 所应聘呢? +当我开始这个项目时,我不知道堆和栈的区别,不了解时间复杂度(Big-O)、树,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的肯定是很糟糕。一直以来,我所用的任何数据结构都是内建于编程语言当中。至于它们在背后是如何运作,对此我一概不清楚。此外,以前的我并不需要对内存进行管理,最多就只是在一个正在执行的进程抛出了“内存不足”的错误后,才会去找解决方法。在我的编程生涯中,虽然我有用过多维数组,也用过关联数组成千上万次,但我从来没有自己实现过数据结构。 -当我创建该项目时,我从一个堆栈到一个堆都不了解。那时的我,完全不了解 Big-O 、树,或如何去遍历一个图。如果非要我去编写一个排序算法的话,我只能说我所写的肯定是很糟糕。一直以来,我所用的任何数据结构都是内建于编程语言当中。至于它们在背后是如何运作,对此我一概不清楚。此外,以前的我并不需要对内存进行管理,最多就只是在一个正在执行的进程抛出了“内存不足”的错误后,采取一些权变措施。而在我的编程生活中,也甚少使用到多维数组,可关联数组却成千上万。而且,从一开始到现在,我都还未曾自己实现过数据结构。 - -就是这样的我,在经过该学习计划后,已然对被 Google 所雇佣充满信心。这是一个漫长的计划,以至于花费了我数月的时间。若您早已熟悉大部分的知识,那么也许能节省大量的时间。 +这是一个漫长的计划,以至于花费了我数月的时间。若你早已熟悉大部分的知识,那么也许能节省大量的时间。 ## 如何使用它 下面所有的东西都只是一个概述。因此,你需要由上而下逐一地去处理它。 -在学习过程中,我是使用 GitHub 特殊的语法特性 markdown flavor 去检查计划的进展,包括使用任务列表。 +在学习过程中,我使用 GitHub 特殊语法的 markdown 去检查计划的进展,包括使用包含任务进度的任务列表。 -- [x] 创建一个新的分支,以使得你可以像这样去检查计划的进展。直接往方括号中填写一个字符 x 即可:[x] +**创建一个新的分支,以便你可以像这样去勾选计划的进展:直接往方括号中填写一个字符 x 即可:[x]**。 + + Fork一个分支,并跟随以下的指令 + +通过单击 Fork 按钮来 fork GitHub 仓库:[jwasham/coding-interview-university](https://github.com/jwasham/coding-interview-university) + + 克隆项目到本地 + +`git checkout -b progress` + +`git remote add jwasham https://github.com/jwasham/coding-interview-university` + +`git fetch --all` + + 在你完成了一些修改后,在框框中打 x + +`git add .` + +`git commit -m "Marked x"` + +`git rebase jwasham/master` + +`git push --set-upstream origin progress` + +`git push --force` [更多关于 Github-flavored markdown 的详情](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) -## 我得到了工作吗? -我还没去应聘。 +## 不要觉得自己不够聪明 -因为我离完成学习(完成该疯狂的计划列表)还需要数天的时间,并打算在下周开始用一整天的时间,以编程的方式去解决问题。当然,这将会持续数周的时间。然后,我才通过使用在二月份所得到的一个介绍资格,去正式应聘 Google(没错,是二月份时就得到的)。 - - 感谢 JP 的这次介绍。 - -## 跟着我的脚步 - -目前我仍在该计划的执行过程中,如果你想跟随我脚步去学习的话,可以登进我在 [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 - Coding Interview University](https://dng5l3qzreal6.cloudfront.net/2016/Aug/book_stack_photo_resized_18_1469302751157-1472661280368.png) - -## 不要妄自菲薄 - -- Google 的工程师都是才智过人的。但是,就算是工作在 Google 的他们,仍然会因为觉得自己不够聪明而感到一种不安。 +- 大多数成功的软件工程师都非常聪明,但他们都有一种觉得自己不够聪明的不安全感。 - [天才程序员的神话](https://www.youtube.com/watch?v=0SARbwvhupQ) - -## 关于 Google - -- [ ] 面向学生 —— [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) +- [不要单打独斗:面对技术中的隐形怪物](https://www.youtube.com/watch?v=1i8ylq4j_EY) ## 相关视频资源 -部分视频只能通过在 Coursera、Edx 或 Lynda.com class 上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。即便是免费观看,部分课程可能会由于不在时间段内而无法获取。因此,你需要多等待几个月。 +部分视频只能通过在 Coursera 或者 Edx 课程上注册登录才能观看。这些视频被称为网络公开课程(MOOC)。有时候某些课程需要等待好几个月才能获取,这期间你无法观看这些课程的影片。 - 很感谢您能帮我把网络公开课程的视频链接转换成公开的视频源,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。 + 很感谢你能帮我把网络公开课程的视频链接转换成公开的,可持续访问的视频源,比如 YouTube 视频,以代替那些在线课程的视频。此外,一些大学的讲座视频也是我所青睐的。 ## 面试过程 & 通用的面试准备 -- [ ] 视频: - - [ ] [如何在 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) - -- [ ] 文章: - - [ ] [三步成为 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) - -- [ ] 附加的(虽然 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/) +- [ ] [ABC:不要停止编程(Always Be Coding)](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4) +- [ ] [白板编程(Whiteboarding)](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1) +- [ ] [揭秘技术招聘](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] 如何在科技四强企业中获得一份工作: + - [ ] [“如何在科技四强企业中获得一份工作 —— Amazon、Facebook、Google 和 Microsoft”(视频)](https://www.youtube.com/watch?v=YJZCUhxNCv8) +- [ ] 解密开发类面试第一集: + - [ ] [Gayle L McDowell —— 解密开发类面试(视频)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [解密开发类面试 —— 作者 Gayle Laakmann McDowell(视频)](https://www.youtube.com/watch?v=aClxtDcdpsQ) +- [ ] 解密 Facebook 编码面试: + - [方法](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [问题演练](https://www.youtube.com/watch?v=4UWDyJq8jZg) +- [ ] 准备课程: + - [ ] [软件工程师面试发布(收费课程)](https://www.udemy.com/software-engineer-interview-unleashed): + - 从前 Google 面试官身上学习如何准备自己,让自己能够应付软件工程师的面试。 + - [ ] [Python 数据结构,算法和面试(收费课程)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - Python 面试准备课程,内容涉及数据结构,算法,模拟面试等。 + - [ ] [Python 的数据结构和算法简介(Udacity 免费课程)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - 免费的 Python 数据结构和算法课程。 + - [ ] [数据结构和算法纳米学位!(Udacity 收费纳米学位)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - 获得超过100种数据结构和算法练习以及指导的动手练习,专门导师帮助你在面试和职场中做好准备。 + - [ ] [探究行为面试(Educative 免费课程)](https://www.educative.io/courses/grokking-the-behavioral-interview): + - 很多时候,不是你的技术能力会阻碍你获得理想的工作,而是你在行为面试中的表现。 ## 为你的面试选择一种语言 -在这,我就以下话题写一篇短文 —— [重点:为在 Google 的面试选择一种语言](https://googleyasheck.com/important-pick-one-language-for-the-google-interview/) - -在大多数公司的面试当中,你可以在编程这一环节,使用一种自己用起来较为舒适的语言去完成编程。但在 Google,你只有三种固定的选择: +你可以在编程这一环节,使用一种自己用起来较为舒适的语言去完成编程,但对于大公司,你只有三种固定的选择: - C++ - Java - Python -有时你也可以使用下面两种,但需要事先查阅说明。因为,说明中会有警告: +你也可以使用下面两种编程语言,但可能会有某些限制,你需要实现查明: - JavaScript - Ruby +我之前写过一篇关于在面试时选择编程语言的文章:[为编程面试选择一种语言](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)。 + 你需要对你所选择的语言感到非常舒适且足够了解。 更多关于语言选择的阅读: - 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 [在此查看相关语言的资源](../programming-language-resources.md) -由于,我正在学习C、C++ 和 Python。因此,在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。 +由于我正在学习C、C++ 和 Python,因此在下面你会看到部分关于它们的学习资料。相关书籍请看文章的底部。 + +## 书单 + +为了节省你的时间,以下是比我使用过的更缩减的书单。 + +### 面试准备 + +- [ ] [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - 附有 C++ 和 Java 解答 + - 这是在练习 Cracking the Coding Interview 之前一个很好的热身 + - 不太困难,大多数问题可能比你在面试中看到的要容易(根据我的阅读) +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - 附有 Java 答案 + +### 如果你有额外的时间: + +选择以下之一: + +- [ ] [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [ ] [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [ ] Elements of Programming Interviews (Java version) + - [书](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [配套项目──书中每个问题的方法和测试用例](https://github.com/gardncl/elements-of-programming-interviews) + +### 编程语言精选 + +**你需要选择面试语言(请参见上文)。** + +这是我按语言给出的建议。我没有所有语言的资源,欢迎贡献。 + +如果你通读其中之一,你应该具备了开始解决编程问题所需的所有数据结构和算法知识。除非你需要复习,否则**你可以跳过此项目中的所有视频讲座**。 + +[额外编程语言的精选资源](https://github.com/jwasham/coding-interview-university/blob/master/programming-language-resources.md) + +### C++ + +我没有读过这两本书,但是它们颇受好评,作者是 Sedgewick,他非常厉害。 + +- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) +- [ ] [Open Data Structures in C++](https://opendatastructures.org/ods-cpp.pdf) + - 丰富而详细的数据结构和算法集合 + - 非常适合初学者 + +如果你有更好的 C++ 书籍,请告诉我。我正在搜集全面的资源。 + +### Java + +- [ ] [算法(Sedgewick 和 Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - 包含课程内容(和Sedgewick!)的视频 + - [第一部分](https://www.coursera.org/learn/algorithms-part1) + - [第二部分](https://www.coursera.org/learn/algorithms-part2) + +或者: + +- [ ] [Java 数据结构和算法](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - 作者:Goodrich、Tamassia、Goldwasser + - 用作 UC Berkeley 的 CS 入门课程的可选教材 + - 请参阅下面有关 Python 版本的我的读书报告,这本书涵盖了相同的主题 + +### Python + +- [ ] [Python数据结构和算法](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - 作者:Goodrich、Tamassia、Goldwasser + - 我非常喜爱这本书,它包含了所有东西 + - 很 Python 的代码 + - 我的读书报告:[startupnextdoor.com/book-report-data-structures-and-algorithms-in-python](https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/) +- [ ] [Open Data Structures in Python](https://opendatastructures.org/ods-python.pdf) ## 在你开始之前 该列表已经持续更新了很长的一段时间,所以,我们的确很容易会对其失去控制。 -这里列出了一些我所犯过的错误,希望您不要重滔覆辙。 +这里列出了一些我所犯过的错误,希望你不要重滔覆辙。 ### 1. 你不可能把所有的东西都记住 -就算我查看了数小时的视频,并记录了大量的笔记。几个月后的我,仍然会忘却其中大部分的东西。所以,我翻阅了我的笔记,并将可回顾的东西制作成抽认卡(flashcard)(请往下看) +就算我观看了数小时的视频,并记录了大量的笔记,几个月后的我,仍然会忘却其中大部分的东西。所以,我花了3天翻阅我的笔记,并制作成抽认卡(flashcard)帮助我复习: + +请阅读以下的文章以免重蹈覆辙: + +[记住计算机科学知识](https://startupnextdoor.com/retaining-computer-science-knowledge/)。 + +有人推荐给我的课程(但我还沒看过):[学习如何学习](https://www.coursera.org/learn/learning-how-to-learn)。 ### 2. 使用抽认卡 -为了解决善忘的问题,我制作了一些关于抽认卡的页面,用于添加两种抽认卡:正常的及带有代码的。每种卡都会有不同的格式设计。 +为了解决善忘的问题,我制作了一个抽认卡的网页,用于添加两种抽认卡:一般的及带有代码的。每种卡都会有不同的格式设计。 -而且,我还以移动设备为先去设计这些网页,以使得在任何地方的我,都能通过我的手机及平板去回顾知识。 +而且,我还以移动设备为先去设计这些网页,以使得在任何地方,我都能通过我的手机及平板去回顾知识。 你也可以免费制作属于你自己的抽认卡网站: - [抽认卡页面的代码仓库](https://github.com/jwasham/computer-science-flash-cards) -- [我的抽认卡数据库](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db):有一点需要记住的是,我做事有点过头,以至于把卡片都覆盖到所有的东西上。从汇编语言和 Python 的细枝末节,乃至到机器学习和统计都被覆盖到卡片上。而这种做法,对于 Google 的要求来说,却是多余。 +- [我的抽认卡数据库 ── 旧 1200 张](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db) +- [我的抽认卡数据库 ── 新 1800 张](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham-extreme.db) -**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已懂”。你需要做的,是去查看一下是否有同样的抽认卡,并在你真正懂得如何解决问题之前,多问自己几次。重复地问答可帮助您深刻记住该知识点。 +有一点需要记住的是,我做事有点过头,以至于卡片都覆盖到所有的东西上,从汇编语言和 Python 的细枝末节,到机器学习和统计都被覆盖到卡片上。而这种做法,对于要求来说是多余的。 -### 3. 回顾,回顾,回顾 +**在抽认卡上做笔记:** 若你第一次发现你知道问题的答案时,先不要急着把其标注成“已知”。反复复习这张抽认卡,直到每次都能答对后才是真正学会了这个问题。反复地问答可帮助你深刻记住该知识点。 -我留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的小抄纸,以便在空余的时候可以学习。 +这里有个替代我抽认卡的网站 [Anki](http://ankisrs.net/),很多人向我推荐过它。这个网站用同一个字卡重复出现的方式让你牢牢地记住知识。这个网站非常容易使用,支持多平台,并且有云端同步功能。在 iOS 平台上收费25美金,其他平台免费。 -每编程半个小时就要休息一下,并去回顾你的抽认卡。 +这是我用 Anki 这个网站里的格式所储存的抽认卡资料库: ankiweb.net/shared/info/25173560 (感谢 [@xiewenya](https://github.com/xiewenya)) + +### 3. 复习,复习,再复习 + +我留有一组 ASCII 码表、OSI 堆栈、Big-O 记号及更多的抽认卡,以便在空余的时候可以学习。 + +编程累了就休息半个小时,并去复习你的抽认卡。 ### 4. 专注 -在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。因此,专注和集中注意力是非常困难的。 +在学习的过程中,往往会有许多令人分心的事占据着我们宝贵的时间。因此,专注和集中注意力是非常困难的。放点纯音乐能帮上一些忙。 -## 你所看不到的 +## 没有包含的内容 -由于,这个巨大的列表一开始是作为我个人从 Google 面试指导笔记所形成的一个事件处理列表。因此,有一些我熟悉且普遍的技术在此都未被谈及到: +有一些熟悉且普遍的技术在此未被谈及到: - SQL - Javascript @@ -277,28 +367,31 @@ ## 日常计划 -部分问题可能会花费一天的时间去学习,而部分则会花费多天。当然,有些学习并不需要我们懂得如何实现。 +部分问题可能会花费一天的时间去学习,而有些则会花费多天。当然,有些学习并不需要我们懂得如何实现。 -因此,每一天我都会在下面所列出的列表中选择一项,并查看相关的视频。然后,使用以下的一种语言去实现: +因此,每一天我都会在下面所列出的列表中选择一项,并观看相关的视频。然后,使用以下的一种语言去实现: - C —— 使用结构体和函数,该函数会接受一个结构体指针 * 及其他数据作为参数。 - C++ —— 不使用内建的数据类型。 - C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来作为链表。 - Python —— 使用内建的数据类型(为了持续练习 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。 - 此外,你也可以使用 Java 或其他语言。以上只是我的个人偏好而已。 +- C —— 使用结构体和函数,该函数会接受一个结构体指针 * 及其他数据作为参数。 +- C++ —— 不使用内建的数据类型。 +- C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来作为链表。 +- Python —— 使用内建的数据类型(为了持续练习 Python),并编写一些测试去保证自己代码的正确性。有时,只需要使用断言函数 assert() 即可。 +- 此外,你也可以使用 Java 或其他语言。以上只是我的个人偏好而已。 + +你不需要学会所有的编程语言,你只需要专注在[一种编程语言](##为你的面试选择一种语言)上。 为何要在这些语言上分别实现一次? - 因为可以练习,练习,练习,直至我厌倦它,并完美地实现出来。(若有部分边缘条件没想到时,我会用书写的形式记录下来并去记忆) - 因为可以在纯原生的条件下工作(不需垃圾回收机制的帮助下,分配/释放内存(除了 Python)) - 因为可以利用上内建的数据类型,以使得我拥有在现实中使用内建工具的经验(在生产环境中,我不会去实现自己的链表) +- 练习,练习,练习,直至我厌倦它,并正确无误地实现出来。(若有部分边缘条件没想到时,我会用书写的形式记录下来并去记忆) +- 在纯原生的条件下工作(不需垃圾回收机制的帮助下,手动分配/释放内存(除了 Python)) +- 利用语言内建的数据类型,之后在实际工作的时候才能得心应手(在生产环境中,我不会去实现自己的链表) -就算我没有时间去每一项都这么做,但我也会尽我所能的。 +就算我没有时间去每一项都这么做,但我也会尽我所能。 -在这里,你可以查看到我的代码: - - [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) 你不需要记住每一个算法的内部原理。 @@ -306,22 +399,24 @@ ## 必备知识 +- [ ] **学习C语言** + - C 语言无处不在。在学习的过程中,你会在书籍,讲座,视频等任何地方看到它的身影 + - [ ] [C程序设计语言,第二版](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - 这是一本简短的书,但是它将使你更好地使用 C 语言,并且如果你稍加练习,就会很快熟练。理解 C 可帮助你了解程序和内存的工作方式 + - 问题答案 + - [ ] **计算机是如何处理一段程序:** - [ ] [CPU 是如何执行代码(视频)](https://www.youtube.com/watch?v=XM4lGflQFvA) - - [ ] [机器码指令(视频)](https://www.youtube.com/watch?v=Mv2XQgpbTNE) - -- [ ] **编译器** - - [ ] [编译器是如何在 ~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) - -- [ ] **浮点数是如何存储的:** - - [ ] 简单的 8-bit:[浮点数的表达形式 —— 1(视频 —— 在计算上有一个错误 —— 详情请查看视频的介绍)](https://www.youtube.com/watch?v=ji3SfClm8TU) - - [ ] 32 bit:[IEEE754 32-bit 浮点二进制(视频)](https://www.youtube.com/watch?v=50ZYcZebIec) + - [ ] [计算机如何计算(视频)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [寄存器和内存(视频)](https://youtu.be/fpnE6UAfbtU) + - [ ] [中央处理单元(视频)](https://youtu.be/FZGugFqdr60) + - [ ] [指令和程序(视频)](https://youtu.be/zltgXvg6r3k) ## 算法复杂度 / 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) @@ -335,22 +430,22 @@ - [ ] [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(包括递归关系和主定理): - [计算性复杂度:第一部](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/) - 如果部分课程过于学术性,你可直接跳到文章底部,去查看离散数学的视频以获取相关背景知识。 - ## 数据结构 - ### 数组(Arrays) - 实现一个可自动调整大小的动态数组。 - [ ] 介绍: - [数组(视频)](https://www.coursera.org/learn/data-structures/lecture/OsBSF/arrays) + - [UC Berkeley CS61B - 线性数组和多维数组(视频)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE)(从15分32秒开始) - [数组的基础知识(视频)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) - [多维数组(视频)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [动态数组(视频)](https://www.coursera.org/learn/data-structures/lecture/EwbnV/dynamic-arrays) + - [不规则数组(视频)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - [不规则数组(视频)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - [调整数组的大小(视频)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 实现一个动态数组(可自动调整大小的可变数组): @@ -382,12 +477,12 @@ - ### 链表(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) - - [ ] [C 代码(视频)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) - - 并非看完整个视频,只需要看关于节点结果和内存分配那一部分即可 + - [ ] [CS 61B —— 链表(一)(视频)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B —— 链表(二)(视频)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [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/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) + - [在现实中,链表 Vs 数组(视频)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) - [ ] [为什么你需要避免使用链表(视频)](https://www.youtube.com/watch?v=YQs6IC-vgmo) - [ ] 的确:你需要关于“指向指针的指针”的相关知识:(因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址)该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格。因为,这种风格的代码,其可读性和可维护性太低。 - [指向指针的指针](https://www.eskimo.com/~scs/cclass/int/sx8.html) @@ -445,9 +540,9 @@ - [ ] [(进阶)完美哈希(Perfect hashing)(视频)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - [ ] 在线课程: - - [ ] [哈希函数的掌握(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) + - [ ] [理解哈希函数(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - [ ] [使用哈希表(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - - [ ] [哈希表的支持(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) + - [ ] [支持哈希(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - [ ] [哈希表的语言支持(视频)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [基本哈希表(视频)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/m7UuP/core-hash-tables) - [ ] [数据结构(视频)](https://www.coursera.org/learn/data-structures/home/week/3) @@ -474,8 +569,7 @@ - 迭代式二分查找 - ### 按位运算(Bitwise operations) - - [ ] [Bits 速查表](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) - - 你需要知道大量2的幂数值(从2^1 到 2^16 及 2^32) + - [ ] [Bits 速查表](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-sheet.pdf) ── 你需要知道大量2的幂数值(从2^1 到 2^16 及 2^32) - [ ] 好好理解位操作符的含义:&、|、^、~、>>、<< - [ ] [字码(words)](https://en.wikipedia.org/wiki/Word_(computer_architecture)) - [ ] 好的介绍: @@ -486,6 +580,8 @@ - [ ] [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) + - [ ] [位操作技巧(Bit Hacks)(视频)](https://www.youtube.com/watch?v=ZusiKXcz_ac) + - [ ] [练习位操作](https://pconrad.github.io/old_pconrad_cs16/topics/bitOps/) - [ ] 一补数和补码 - [二进制:利 & 弊(为什么我们要使用补码)(视频)](https://www.youtube.com/watch?v=lKTsv6iVxV4) - [一补数(1s Complement)](https://en.wikipedia.org/wiki/Ones%27_complement) @@ -494,8 +590,6 @@ - [计算一个字节中置位(Set Bits)的四种方式(视频)](https://youtu.be/Hzuzo9NJrlc) - [计算比特位](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) - [ ] 交换值: - [交换(Swap)](http://bits.stephan-brumme.com/swap.html) - [ ] 绝对值: @@ -508,23 +602,21 @@ - 基本的树形结构 - 遍历 - 操作算法 - - BFS(广度优先检索,breadth-first search) - - [MIT(视频)](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) - - 层序遍历(使用队列的 BFS 算法) + - [ ] [BFS(广度优先检索,breadth-first search)和 DFS(深度优先检索,depth-first search)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS 笔记 + - 层序遍历(使用队列的 BFS 算法) - 时间复杂度: O(n) - 空间复杂度: - - 最好情况: O(1) + - 最好情况: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) - - 笔记: + - DFS 笔记: - 时间复杂度:O(n) - 空间复杂度: - 最好情况:O(log n) - 树的平均高度 - 最坏情况:O(n) - - 中序遍历(DFS:左、节点本身、右) - - 后序遍历(DFS:左、右、节点本身) - - 先序遍历(DFS:节点本身、左、右) + - 中序遍历(DFS:左、节点本身、右) + - 后序遍历(DFS:左、右、节点本身) + - 先序遍历(DFS:节点本身、左、右) - ### 二叉查找树(Binary search trees):BSTs - [ ] [二叉查找树概览(视频)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) @@ -560,7 +652,7 @@ - 可视化是一棵树,但通常是以线性的形式存储(数组、链表) - [ ] [堆](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/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) @@ -582,91 +674,16 @@ - [ ] sift_down —— 用于获取最大值元素 - [ ] remove(i) —— 删除指定索引的元素 - [ ] heapify —— 构建堆,用于堆排序 - - [ ] heap_sort() —— 拿到一个未排序的数组,然后使用大顶堆进行就地排序 - - 注意:若用小顶堆可节省操作,但导致空间复杂度加倍。(无法做到就地) - -- ### 字典树(Tries) - - 需要注意的是,字典树各式各样。有些有前缀,而有些则没有。有些使用字符串而不使用比特位来追踪路径。 - - 阅读代码,但不实现。 - - [ ] [数据结构笔记及编程技术](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#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) - -- ### 平衡查找树(Balanced search trees) - - 掌握至少一种平衡查找树(并懂得如何实现): - - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的 key。” —— Skiena - - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在 Google 的面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。 - - 伸展树:插入、查找、删除函数的实现,而如果你最终实现了红黑树,那么请尝试一下: - - 跳过删除函数,直接实现搜索和插入功能 - - 我希望能阅读到更多关于 B 树的资料,因为它也被广泛地应用到大型的数据库当中。 - - [ ] [自平衡二叉查找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) - - - [ ] **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) - - - [ ] **伸展树** - - 实际中:伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、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树的直感与定义(视频)](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树在实际中并不经常使用**。 - - [ ] [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 树](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 指块的大小、即缓存行的大小) - - - [ ] **红黑树** - - 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用,还对在其他数据结构中块的构建非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 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 叉树(K 叉树、M 叉树) - - 注意:N 或 K 指的是分支系数(即树的最大分支数): - - 二叉树是一种分支系数为2的树 - - 2-3树是一种分支系数为3的树 - - [ ] [K 叉树](https://en.wikipedia.org/wiki/K-ary_tree) + - [ ] heap_sort() —— 拿到一个未排序的数组,然后使用大顶堆或者小顶堆进行就地排序 ## 排序(Sorting) - [ ] 笔记: - - 实现各种排序 & 知道每种排序的最坏、最好和平均的复杂度分别是什么场景: - - 不要用冒泡排序 - 大多数情况下效率感人 - 时间复杂度 O(n^2), 除非 n <= 16 + - 实现各种排序,知道每种排序的最坏、最好和平均的复杂度分别是什么场景: + - 不要用冒泡排序 - 效率太差 - 时间复杂度 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) - [ ] 哪种排序算法可以用链表?哪种用数组?哪种两者都可? @@ -674,41 +691,33 @@ - [链表的归并排序](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) - 关于堆排序,请查看前文堆的数据结构部分。堆排序很强大,不过是非稳定排序。 +- [ ] [Sedgewick ── 归并排序(5个视频)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] 1. 归并排序 + - [ ] 2. 自下而上的归并排序 + - [ ] 3. 排序复杂度 + - [ ] 4. 比较器 + - [ ] 5. 稳定性 +- [ ] [Sedgewick ── 快速排序(4个视频)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] 1. 快速排序 + - [ ] 2. 选择 + - [ ] 3. 重复键值 + - [ ] 4. 系统排序 +- [ ] [冒泡排序(视频)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [冒泡排序分析(视频)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [插入排序 & 归并排序(视频)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [插入排序(视频)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [归并排序(视频)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [快排(视频)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [选择排序(视频)](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) - -- [ ] 斯坦福大学关于排序算法的视频: - - [ ] [课程 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) - - [ ] [算法 - 排序2 - 第三讲 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) - -- [ ] 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) 大学课程: - - [ ] [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) - - [ ] [对原数组直接排序](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) +- [ ] 归并排序代码: + - [ ] [使用外部数组(C语言)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [使用外部数组(Python语言)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [对原数组直接排序(C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] 快速排序代码: + - [ ] [实现(C语言)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [实现(C语言)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [实现(Python语言)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) - [ ] 实现: - [ ] 归并:平均和最差情况的时间复杂度为 O(n log n)。 @@ -716,58 +725,65 @@ - 选择排序和插入排序的最坏、平均时间复杂度都是 O(n^2)。 - 关于堆排序,请查看前文堆的数据结构部分。 -- [ ] 有兴趣的话,还有一些补充 - 但并不是必须的: +- [ ] 有兴趣的话,还有一些补充,但并不是必须的: + - [Sedgewick──基数排序 (6个视频)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Java 中的字符串](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. 键值索引计数(Key Indexed Counting)](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3中基数快速排序](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. 后继数组(Suffix Arrays)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - [ ] [基数排序](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) + - [ ] [基数排序(视频)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [基数排序, 计数排序 (线性时间内)(视频)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [随机算法: 矩阵相乘, 快排, Freivalds' 算法(视频)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [线性时间内的排序(视频)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) + +总结一下,这是[15种排序算法](https://www.youtube.com/watch?v=kPRA0W1kECg)的可视化表示。如果你需要有关此主题的更多详细信息,请参阅“[一些主题的额外内容](#一些主题的额外内容)”中的“排序”部分。 ## 图(Graphs) 图论能解决计算机科学里的很多问题,所以这一节会比较长,像树和排序的部分一样。 -- Yegge 的笔记: - - 有 3 种基本方式在内存里表示一个图: +- 笔记: + - 有4种基本方式在内存里表示一个图: - 对象和指针 - - 矩阵 + - 邻接矩阵 - 邻接表 + - 邻接图 - 熟悉以上每一种图的表示法,并了解各自的优缺点 - - 宽度优先搜索和深度优先搜索 - 知道它们的计算复杂度和设计上的权衡以及如何用代码实现它们 + - 广度优先搜索和深度优先搜索:知道它们的计算复杂度和设计上的权衡以及如何用代码实现它们 - 遇到一个问题时,首先尝试基于图的解决方案,如果没有再去尝试其他的。 +- MIT(视频): + - [广度优先搜索](https://www.youtube.com/watch?v=s-CYnVz-uh4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=13) + - [深度优先搜索](https://www.youtube.com/watch?v=AfSk24UTFS8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=14) + - [ ] 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) + - [ ] [CSE373 2012 - 课程 11 - 图的数据结构(视频)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) + - [ ] [CSE373 2012 - 课程 12 - 广度优先搜索(视频)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) + - [ ] [CSE373 2012 - 课程 13 - 图的算法(视频)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) + - [ ] [CSE373 2012 - 课程 14 - 图的算法 (1)(视频)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 课程 15 - 图的算法 (2)(视频)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 课程 16 - 图的算法 (3)(视频)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) - [ ] 图 (复习和其他): - - [ ] [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) + - [ ] [6.006 单源最短路径问题(视频)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Dijkstra 算法(视频)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Bellman-Ford 算法(视频)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 Dijkstra 效率优化(视频)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) + - [ ] [Aduni: 图的算法 I - 拓扑排序,最小生成树,Prim 算法 - 第六课(视频)](https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Aduni: 图的算法 II - 深度优先搜索, 广度优先搜索, Kruskal 算法, 并查集数据结构 - 第七课(视频)](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni: 图的算法 III: 最短路径 - 第八课(视频)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni: 图的算法. IV: 几何算法介绍 - 第九课(视频)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] [CS 61B 2014 (从 58:09 开始)(视频)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) + - [ ] [CS 61B 2014: 加权图(视频)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) + - [ ] [贪心算法: 最小生成树(视频)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [图的算法之强连通分量 Kosaraju 算法(视频)](https://www.youtube.com/watch?v=RpgcYiky7uw) - 完整的 Coursera 课程: - - [ ] [图的算法 (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - -- 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) + - [ ] [图的算法(视频)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) - 我会实现: - [ ] DFS 邻接表 (递归) @@ -791,86 +807,116 @@ - ### 递归(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) - - [ ] [课程 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) + - [ ] [课程 8 | 抽象编程(视频)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] [课程 9 | 抽象编程(视频)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) + - [ ] [课程 10 | 抽象编程(视频)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [课程 11 | 抽象编程(视频)](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) + - [ ] [尾递归(视频)](https://www.youtube.com/watch?v=L1jjXGfxozc) - ### 动态规划(Dynamic Programming) - - **注意** :动态规划是门极为重要的技术,尽管其并未被 Google 提供的准备手册提及,但你可能会对寻求最佳解的方式有点疑问,所以我将其列入这份表单。 + - 在你的面试中或许没有任何动态规划的问题,但能够知道一个题目可以使用动态规划来解决是很重要的。 - 这一部分会有点困难,每个可以用动态规划解决的问题都必须先定义出递推关系,要推导出来可能会有点棘手。 - 我建议先阅读和学习足够多的动态规划的例子,以便对解决 DP 问题的一般模式有个扎实的理解。 - - [ ] 视频: - 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 课程笔记: + - [ ] [Skiena: CSE373 2012 - 课程 19 - 动态规划介绍(视频)](https://youtu.be/Qc2ieXRgR0k?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1718) + - [ ] [Skiena: CSE373 2012 - 课程 20 - 编辑距离(视频)](https://youtu.be/IsmMhMdyeGY?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=2749) + - [ ] [Skiena: CSE373 2012 - 课程 21 - 动态规划举例(视频)](https://youtu.be/o0V9eYF4UI8?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=406) + - [ ] [Skiena: CSE373 2012 - 课程 22 - 动态规划应用(视频)](https://www.youtube.com/watch?v=dRbMC1Ltl3A&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=22) + - [ ] [Simonson: 动态规划 0 (starts at 59:18)(视频)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson: 动态规划 I - 课程 11(视频)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: 动态规划 II - 课程 12(视频)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] 单独的 DP 问题 (每一个视频都很短):[动态规划(视频)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + - [ ] 耶鲁课程笔记: - [ ] [动态规划](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) + - [ ] [RNA 二级结构问题(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) + - [ ] [动态规划算法(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/PSonq/a-dynamic-programming-algorithm) + - [ ] [DP 算法描述(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/oUEK2/illustrating-the-dp-algorithm) + - [ ] [DP 算法的运行时间(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) + - [ ] [DP vs 递归实现(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) + - [ ] [全局成对序列排列(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) + - [ ] [本地成对序列排列(视频)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) + +- ### 面向对象编程 + - 可选:[UML 2.0系列(视频)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - SOLID 面向对象编程原则:[SOLID 原则(视频)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + +- ### 设计模式 + - [ ] [UML 统一建模语言概览 (视频)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) + - [ ] 主要有如下的设计模式: + - [ ] 策略模式(strategy) + - [ ] 单例模式(singleton) + - [ ] 适配器模式(adapter) + - [ ] 原型模式(prototype) + - [ ] 装饰器模式(decorator) + - [ ] 访问者模式(visitor) + - [ ] 工厂模式,抽象工厂模式(factory, abstract factory) + - [ ] 外观模式(facade) + - [ ] 观察者模式(observer) + - [ ] 代理模式(proxy) + - [ ] 委托模式(delegate) + - [ ] 命令模式(command) + - [ ] 状态模式(state) + - [ ] 备忘录模式(memento) + - [ ] 迭代器模式(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(视频)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [系列视频(27个)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) + - [ ] [Head First 设计模型](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - 尽管《设计模式:可复用面向对象软件的基础》才是这方面的经典,但是我还是认为Head First对于新手更加友好。 + - [ ] [实际操作:设计模式和对入门开发者的建议](https://sourcemaking.com/design-patterns-and-tips) + - [ ] [Design patterns for humans](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) - ### 组合(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) + - [ ] [数据技巧: 如何找出阶乘、排列和组合(选择)(视频)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) + - [ ] [来点学校的东西: 概率(视频)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) + - [ ] [来点学校的东西: 概率和马尔可夫链(视频)](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) + - 只有视频 - 41 (每一个都短小精悍): + - [ ] [概率解释(视频)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) - ### NP, NP-完全和近似算法 - - 知道最经典的一些 NP 完全问题,比如旅行商问题和背包问题, - 而且能在面试官试图忽悠你的时候识别出他们。 + - 知道最经典的一些 NP 完全问题,比如旅行商问题和背包问题,而且能在面试官试图忽悠你的时候识别出他们。 - 知道 NP 完全是什么意思. - - [ ] [计算复杂度 (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) + - [ ] [计算复杂度(视频)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) - [ ] Simonson: - - [ ] [贪心算法. 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) + - [ ] [贪心算法. II & 介绍 NP-完全性(视频)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [NP-完全性 II & 归约(视频)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP-完全性 III(视频)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP-完全性 IV(视频)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] Skiena: - - [ ] [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) + - [ ] [CSE373 2012 - 课程 23 - 介绍 NP-完全性 IV(视频)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - 课程 24 - NP-完全性证明(视频)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - 课程 25 - NP-完全性挑战(视频)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [复杂度: P, NP, NP-完全性, 规约(视频)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [复杂度: 近视算法 Algorithms(视频)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) + - [ ] [复杂度: 固定参数算法(视频)](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 页。 + - 《算法导论》(CLRS)的第 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) - - [ ] [LeetCode - 146 LRU Cache (C++) (video)](https://www.youtube.com/watch?v=8-FZRAjR7qU) + - [ ] [LRU 的魔力 (100 Days of Google Dev)(视频)](https://www.youtube.com/watch?v=R5ON3iwx78M) + - [ ] [实现 LRU(视频)](https://www.youtube.com/watch?v=bq6N7Ym81iI) + - [ ] [LeetCode - 146 LRU Cache (C++)(视频)](https://www.youtube.com/watch?v=8-FZRAjR7qU) - [ ] CPU 缓存: - - [ ] [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-) + - [ ] [MIT 6.004 L15: 存储体系(视频)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) + - [ ] [MIT 6.004 L16: 缓存的问题(视频)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) - ### 进程(Processe)和线程(Thread) - [ ] 计算机科学 162 - 操作系统 (25 个视频): - 视频 1-11 是关于进程和线程 - - [操作系统和系统编程 (video)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [操作系统和系统编程(视频)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) - [进程和线程的区别是什么?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) - 涵盖了: - 进程、线程、协程 @@ -886,13 +932,15 @@ - 活锁 - CPU 活动, 中断, 上下文切换 - 现代多核处理器的并发式结构 + - [分页(paging),分段(segmentation)和虚拟内存(视频)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [中断(视频)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - 进程资源需要(内存:代码、静态存储器、栈、堆、文件描述符、I/O) - - 线程资源需要(在同一个进程内和其他线程共享以上的资源,但是每个线程都有独立的程序计数器、栈计数器、寄存器和栈) + - 线程资源需要(在同一个进程内和其他线程共享以上(除了栈)的资源,但是每个线程都有独立的程序计数器、栈计数器、寄存器和栈) - Fork 操作是真正的写时复制(只读),直到新的进程写到内存中,才会生成一份新的拷贝。 - 上下文切换 - - 操作系统和底层硬件是如何初始化上下文切换的。 + - 操作系统和底层硬件是如何初始化上下文切换的? - [ ] [C++ 的线程 (系列 - 10 个视频)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) - - [ ] Python 的协程 (视频): + - [ ] 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) @@ -901,189 +949,16 @@ - [ ] [Keynote David Beazley - 兴趣主题 (Python 异步 I/O)](https://www.youtube.com/watch?v=ZzfHjytDceU) - [ ] [Python 中的互斥](https://www.youtube.com/watch?v=0zaPs8OtyKY) - - 系统设计以及可伸缩性,要把软硬件的伸缩性设计的足够好有很多的东西要考虑,所以这是个包含非常多内容和资源的大主题。需要花费相当多的时间在这个主题上。 - -- ### 系统设计、可伸缩性、数据处理 - - 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) - - [ ] [算法的重要性](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) - - [ ] [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: 构建和扩展 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) - - [时间线的扩展](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) - - 更多内容可以查看视频部分的『大规模数据挖掘』视频系列。 - - [ ] 系统设计问题练习:下面有一些指导原则,每一个都有相关文档以及在现实中该如何处理。 - - 复习: [HiredInTech 的系统设计](http://www.hiredintech.com/system-design/) - - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) - - 流程: - 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/) - -- ### 论文 - - 有 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) - - 大多被云数据流取代了? - - [ ] [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: 大规模高可用: 构建 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) - - ### 测试 - 涵盖了: - 单元测试是如何工作的 - 什么是模拟对象 - 什么是集成测试 - 什么是依赖注入 - - [ ] [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) + - [ ] [James Bach 讲敏捷软件测试(视频)](https://www.youtube.com/watch?v=SAhJf36_u5U) + - [ ] [James Bach 软件测试公开课(视频)](https://www.youtube.com/watch?v=ILkT_HV9DVU) + - [ ] [Steve Freeman - 测试驱动的开发(视频)](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) - - [ ] [测试驱动的开发已死? (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) @@ -1094,25 +969,194 @@ - 在操作系统中是如何运作的 - 在操作系统部分的视频里有很多资料 -- ### 实现系统例程 - - 理解你使用的系统 API 底层有什么 - - 你能自己实现它们么? - - ### 字符串搜索和操作 - - [ ] [文本的搜索模式 (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - - [ ] Rabin-Karp (videos): - - [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) - - [滚动哈希](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) + - [ ] [Sedgewick──后缀数组(Suffix Arrays)(视频)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick──子字符串搜寻(视频)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. 子字符串搜寻导论](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. 子字符串搜寻──暴力法](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. KMP算法](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore算法](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp算法](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) + - [ ] [文本的搜索模式(视频)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + +如果你需要有关此主题的更多详细信息,请参阅“[一些主题的额外内容](#一些主题的额外内容)”中的“字符串匹配”部分。 + +- ### 字典树(Tries) + + - 需要注意的是,字典树各式各样。有些有前缀,而有些则没有。有些使用字符串而不使用比特位来追踪路径。 + - 阅读代码,但不实现。 + - [Sedgewick──字典树(3个视频)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way字典树](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. 三元搜索树](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. 基于字符串的操作](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [数据结构笔记及编程技术](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#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) + - [ ] [TopCoder —— 使用字典树](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) + +- ### 浮点数 + + - [ ] 简单8位:[浮点数的表示形式-1(视频──计算中存在错误,请参见视频说明)](https://www.youtube.com/watch?v=ji3SfClm8TU) + - [ ] 32位:[IEEE754 32位浮点二进制(视频)](https://www.youtube.com/watch?v=50ZYcZebIec) + +- ### Unicode + - [ ] [每一个软件开发者的绝对最低限度,必须要知道的关于 Unicode 和字符集知识](http://www.joelonsoftware.com/articles/Unicode.html) + - [ ] [关于处理文本需要的编码和字符集,每个程序员绝对需要知道的知识](http://kunststube.net/encoding/) + +- ### 字节序(Endianness) + - [大/小端序](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html) + - [大端序 Vs 小端序(视频)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [由里入内的大端序与小端序(视频)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) + - 对于内核开发非常具有技术性,如果大多数的内容听不懂也没关系。 + - 前半部就已经足够了。 + +- ### 网络 (视频) + - **如果你具有网络经验或想成为可靠性工程师或运维工程师,期待你的问题** + - 知道这些有益无害,多多益善! + - [ ] [可汗学院](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org) + - [ ] [UDP 和 TCP:网络传输协议中的数据压缩(视频)](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 和 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) + - [ ] [视频系列(21个视频)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [子网络解密 - 第五部分 经典内部域名指向 CIDR 标记(视频)](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] 套接字(Sockets): + - [Java──套接字──介绍(视频)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [套接字编程(视频)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + +## 系统设计、可伸缩性、数据处理 + +**如果你已经拥有了4年以上的编程经验,那你可以来看看有关系统设计的问题** + +- 系统设计以及可伸缩性,要把软硬件的伸缩性设计的足够好有很多的东西要考虑,所以这是个包含非常多内容和资源的大主题。要花费相当多的时间在这个主题上。 +- 考量: + - 伸缩性 + - 把大数据集提取为单一值 + - 大数据集转换 + - 处理大量的数据集 + - 系统 + - 功能集 + - 接口 + - 类层次结构 + - 在特定的约束下设计系统 + - 轻量和健壮性 + - 权衡和折衷 + - 性能分析和优化 +- [ ] **从这里开始**:[系统设计入门](https://github.com/donnemartin/system-design-primer) +- [ ] [HiredInTech:系统设计](http://www.hiredintech.com/system-design/) +- [ ] [该如何为技术面试里设计方面的问题做准备?](https://www.quora.comHow-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) +- [ ] [在系统设计面试前必须知道的 8 件事](http://blog.gainlo.co/index.php/2015/10/228-things-you-need-to-know-before-system-design-interviews/) +- [ ] [算法设计](http://www.hiredintech.com/algorithm-design/) +- [ ] [数据库范式 - 1NF, 2NF, 3NF and 4NF(视频)](https://www.youtube.com/watch?v=UrYLYV7WSHM) +- [ ] [系统设计面试](https://github.com/checkcheckzz/system-design-interview) - 这一部分有很多的资源浏览一下我放在下面的文章和例子。 +- [ ] [如何在系统设计面试中脱颖而出](http://www.palantir.com/2011/10how-to-rock-a-systems-design-interview/) +- [ ] [每个人都该知道的一些数字](http://everythingisdata.wordpress.com/2009/10/17numbers-everyone-should-know/) +- [ ] [上下文切换操作会耗费多少时间?](http://blog.tsunanet.net/2010/11how-long-does-it-take-to-make-context.html) +- [ ] [跨数据中心的事务(视频)](https://www.youtube.com/watch?v=srOgpXECblk) +- [ ] [简明 CAP 理论介绍](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) +- [ ] 共识算法: + - [ ] Paxos:[Paxos协议──Computerphile(视频)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft: [Raft 分布式共识算法简介(视频)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [易于阅读的论文](https://raft.github.io/) + - [ ] [信息图] +- [ ] [一致性哈希](http://www.tom-e-white.com/2007/11/consistent-hashing.html) +- [ ] [NoSQL 模式](http://horicky.blogspot.com/2009/11/nosql-patterns.html) +- [ ] 可伸缩性: + - 你不需要知道所有这些。只需挑选一些你感兴趣的东西即可。 + - [ ] [很棒的概述(视频)](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 构建软件系统(视频)](https://www.youtube.com/watch?v=modXC5IWTJI) + - [ ] [可伸缩系统架构设计介绍](http://lethain.com/introduction-to-architecting-systems-for-scale/) + - [ ] [使用 App Engine 和云存储扩展面向全球用户的手机游戏架构实践(视频)](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra(视频)](https://www.youtube.com/watch?v=H4vMcD7zKM0) + - [ ] [算法的重要性](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) + - [ ] [Facebook 系统规模扩展实践 (2012), "为 10 亿用户构建"(视频)](https://www.youtube.com/watch?v=oodS71YtkGU) + - [ ] [Long Game 工程实践 - Astrid Atkinson Keynote(视频)](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) + - [视频](https://www.youtube.com/watch?v=G-lGCC4KKok) + - [ ] [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(视频)](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: 构建和扩展 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) + - [ ] [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"(视频)](https://www.youtube.com/watch?v=5cKTP36HVgI) + - [时间线的扩展](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) + - 更多内容可以查看[视频系列部分](#视频系列)的“大规模数据挖掘”视频系列。 +- [ ] 系统设计问题练习:下面有一些指导原则,每一个都有相关文档以及在现实中该如何处理。 + - 复习: [系统设计入门](https://github.com/donnemartin/system-design-primer) + - [HiredInTech 的系统设计](http://www.hiredintech.com/system-design/) + - [备忘单](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/system-design.pdf) + - 流程: + 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) + - [设计一个键值数据库](http://www.slideshare.net/dvirsky/introduction-to-redis) + - [设计一个图片分享系统](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/) --- @@ -1121,125 +1165,125 @@ 这一部分有一些短视频,你可以快速的观看和复习大多数重要概念。 这对经常性的巩固很有帮助。 -#### 综述: +- [ ] 2-3分钟的简短主题视频系列(23个视频) + - [视频](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) +- [ ] 2-5分钟的简短主题视频系列──Michael Sambol(18个视频): + - [视频](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] [Sedgewick 视频 ── 算法I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick 视频 ── 算法II](https://www.coursera.org/learn/algorithms-part2) -- [ ] 2-3 分钟的短视频系列 (23 个) - - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) -- [ ] 2-5 分钟的短视频系列 - Michael Sambol (18 个): - - [Videos](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +## 编程问题练习 -#### 排序: +现在你已经了解了上面所有的计算机科学主题,是时候练习回答编程问题了。 -- [ ] 归并排序: https://www.youtube.com/watch?v=GCae1WNvnZM +**编程问题的实践并不是要记住编程问题的答案**。 +为什么需要练习编程问题: -## 书籍 +- 快速识别问题,以及如何应用正确的数据结构及算法 +- 收集问题的要求 +- 像在面试中一样谈论问题 +- 在白板或纸上而非计算机上编码 +- 计算解决方案的时间和空间的复杂性 +- 测试你的解决方案 -### Google Coaching 里提到的 +这里有个很棒的入门教学,内容是如何在面试中有条不紊,并且有互动沟通地解决问题。这种能力可以从面试书籍中获得,但我觉得这个也很棒:[算法设计画布](http://www.hiredintech.com/algorithm-design/)。 -**阅读并做练习:** +家里没有白板?那讲得通。我是一个怪人,有一个很大的白板。从白板商店买了一个大的绘图板,而不是白板。你可以坐在沙发上练习。这是我的“沙发白板”。我在照片中添加了笔以便进行缩放。如果你使用笔,则希望可以擦除。快速变得凌乱。我用铅笔和橡皮擦。 -- [ ] 算法设计手册 (Skiena) - - 书 (Kindle 上可以租到): - - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) - - 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) +![我的沙发白板](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) - read and do exercises from the books below. Then move to coding challenges (further down below) - 一旦你理解了每日计划里的所有内容,就去读上面所列的书并完成练习,然后开始读下面所列的书并做练习,之后就可以开始实战写代码了(本文再往后的部分) +补充: -**首先阅读:** -- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) +- [Topcoder的数学](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) +- [动态编程──从新手到高级](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) +- [MIT 面试材料](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) +- [练习以掌握特定语言](http://exercism.io/languages) -**然后阅读 (这本获得了很多推荐, 但是不在 Google coaching 的文档里):** -- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - 如果你看到有人在看 "The Google Resume", 实际上它和 "Cracking the Coding Interview" 是同一个作者写的,而且后者是升级版。 +**阅读并练习编程问题(按此顺序)**: -### 附加书单 +- [ ] [编程面试公开:下一份工作的秘密,第二版](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - C,C ++ 和 Java 的答案 +- [ ] [破解编码面试,第六版](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - Java 答案 -这些没有被 Google 推荐阅读,不过我因为需要这些背景知识所以也把它们列在了这里。 +请参阅上方的[书单](#书单)。 -- [ ] C Programming Language, Vol 2 - - [练习的答案](https://github.com/lekkas/c-algorithms) - -- [ ] C++ Primer Plus, 6th Edition - -- [ ] [《Unix 环境高级编程》 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) - -### 如果你有时间 - -- [ ] [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++ 写的 - - 通常情况下能找到解决方案的好书. - -## 编码练习和挑战 +## 编程练习和挑战 一旦你学会了理论基础,就应该把它们拿出来练练。 尽量坚持每天做编码练习,越多越好。 -编程问题预备: +- [如何找到解决方案](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) +- [如何剖析 Topcoder 题目描述](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) -- [ ] [不错的介绍 (摘自 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 面试材料](https://courses.csail.mit.edu/iap/interview/materials.php) - -- [针对编程语言本身的练习](http://exercism.io/languages) +- [IDeserve(88个视频)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy(5个播放列表)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + - 超级解决问题的方法 +- [Nick White──LeetCode 解题(187个视频)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - 良好的解决方案和代码解释 + - 你可以在短时间内看好几个 +- [FisherCoder──LeetCode 解题](https://youtube.com/FisherCoder) 编码练习平台: - [LeetCode](https://leetcode.com/) -- [TopCoder](https://www.topcoder.com/) -- [Project Euler (数学方向为主)](https://projecteuler.net/index.php?section=problems) -- [Codewars](http://www.codewars.com) + - 我最喜欢的编码问题网站,值得你准备的1-2个月的订阅费用 + - [FisherCoder 的 LeetCode 解题](https://github.com/fishercoder1534/Leetcode) + - 请参阅上面的 Nick White 视频,以获得简短的代码 - [HackerRank](https://www.hackerrank.com/) -- [Codility](https://codility.com/programmers/) +- [TopCoder](https://www.topcoder.com/) - [InterviewCake](https://www.interviewcake.com/) +- [http://www.geeksforgeeks.org/](http://www.geeksforgeeks.org/) - [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Project Euler (数学方向为主)](https://projecteuler.net/index.php?section=problems) +- [Code Exercises](https://code-exercises.com/) -- [模拟大公司的面试](http://www.gainlo.co/) +语言学习网站,附带编码挑战: + +- [Codewars](http://www.codewars.com) +- [Codility](https://codility.com/programmers/) +- [HackerEarth](https://www.hackerearth.com/) +- [Sphere Online Judge (spoj)](http://www.spoj.com/) +- [Codechef](https://www.codechef.com/) + +编码挑战项目: + +- [Python 交互式编码面试挑战](https://github.com/donnemartin/interactive-coding-challenges) + +模拟面试: + +- [Gainlo.co:来自大公司的模拟面试官](http://www.gainlo.co/)──我使用了它,它帮助我减轻了电话屏幕和现场面试的压力 +- [Pramp:模拟来自/与同行的面试](https://www.pramp.com/)──点对点方式练习面试 +- [Refdash:模拟面试和加急面试](https://refdash.com/)──跳过与科技公司的多次面试,帮助求职者快速追踪 +- [interviewing.io:与高级工程师进行模拟面试](https://interviewing.io/)──与来自 FAANG(译者注:Facebook, Amazon, Apple, Netflix and Google) 的高级工程师进行匿名算法/系统设计面试。 ## 当你临近面试时 -- [ ] 搞定代码面试 (videos): +- 搞定代码面试──第二集 (视频): - [Cracking The Code Interview](https://www.youtube.com/watch?v=4NIb9l3imAo) - [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) ## 你的简历 -- [10 条小贴士让你写出一份还算不错的简历](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html) -- 这是搞定面试的第一个关键步骤 - +- 请参阅“破解编码面试”和“编程面试的背面”中的建立准备项。 ## 当面试来临的时候 - 随着下面列举的问题思考下你可能会遇到的 20 个面试问题 - 每个问题准备 2-3 种回答 - 准备点故事,不要只是摆一些你完成的事情的数据,相信我,人人都喜欢听故事 +随着下面列举的问题思考下你可能会遇到的 20 个面试问题,每个问题准备 2-3 种回答。准备点故事,不要只是摆一些你完成的事情的数据,相信我,人人都喜欢听故事。 - 你为什么想得到这份工作? - 你解决过的最有难度的问题是什么? - 面对过的最大挑战是什么? - 见过的最好或者最坏的设计是怎么样的? -- 对某项 Google 产品提出改进建议。 +- 对某个产品提出改进建议。 - 你作为一个个体同时也是团队的一员,如何达到最好的工作状态? -- 你的什么技能或者经验是你的角色中不可或缺的?为什么? +- 你的什么技能或者经验是你的角色中不可或缺的,为什么? - 你在某份工作或某个项目中最享受的是什么? - 你在某份工作或某个项目中面临过的最大挑战是什么? -- 你在某份工作或某个项目中遇到过的最蛋疼的 Bug 是什么样的? +- 你在某份工作或某个项目中遇到过的最硬的 Bug 是什么样的? - 你在某份工作或某个项目中学到了什么? - 你在某份工作或某个项目中哪些地方还可以做的更好? @@ -1249,52 +1293,110 @@ - 团队多大规模? - 开发周期是怎样的? 会使用瀑布流/极限编程/敏捷开发么? -- 经常会为 deadline 加班么? 或者是有弹性的? +- 经常会为截止日期(deadlines)加班么? 或者是有弹性的? - 团队里怎么做技术选型? - 每周平均开多少次会? - 你觉得工作环境有助于员工集中精力吗? - 目前正在做什么工作? - 喜欢这些事情吗? - 工作期限是怎么样的? +- 工作生活怎么平衡? ## 当你获得了梦想的职位 -我还能说些什么呢,恭喜你! +恭喜你! -- [我希望在 Google 的第一天就知道的 10 件事](https://medium.com/@moonstorming/10-things-i-wish-i-knew-on-my-first-day-at-google-107581d87286#.livxn7clw) +继续学习。 -坚持继续学习。 - -得到这份工作只是一个开始。 +活到老,学到老。 --- ***************************************************************************************************** ***************************************************************************************************** - 下面的内容都是可选的。这些是我的推荐,不是 Google 的。 - 通过学习这些内容,你将会得到更多的有关 CS 的概念,并将为所有的软件工程工作做更好的准备。 + 下面的内容都是可选的。 + 通过学习这些内容,你将会得到更多的有关 CS 的概念,并将为所有的软件工程工作做更好的准备。你将会成为一个更全面的软件工程师。 ***************************************************************************************************** ***************************************************************************************************** --- -## 附加的学习 +## 额外书籍 -- ### Unicode - - [ ] [每一个软件开发者的绝对最低限度,必须要知道的关于 Unicode 和字符集知识]( http://www.joelonsoftware.com/articles/Unicode.html) - - [ ] [关于处理文本需要的编码和字符集, 每个程序员绝对需要知道的知识](http://kunststube.net/encoding/) + 你可以从以下的书单挑选你有兴趣的主题来研读。 -- ### 字节顺序 - - [ ] [大、小端字节序](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) - - 内核开发者的讨论非常技术性,如果大多数都超出了你的理解范围,不要太担心。 - - 前半段已经足够了。 +- [UNIX环境高级编程](https://www.amazon.com/dp/013937681X) + - 老,但却很棒 +- [Linux 命令行大全](https://www.amazon.com/dp/1593273894/) + - 现代选择 +- [TCP-IP详解系列](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [Head First 设计模式](https://www.amazon.com/gp/product/0596007124/) + - 设计模式入门介绍 +- [设计模式:可复用面向对象软件的基础](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) + - 也被称为“四人帮”(Gang of Four(GOF)) + - 经典设计模式书籍 +- [Linux 和 UNIX 系统管理技术手册(第五版)](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) +- [算法设计手冊(Skiena)](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) + - 作为复习以及问题辨别 + - 这本书中算法的部分难度已经超过面试会出现的 + - 本书分为两个部分: + - 数据结构和算法课本 + - 优点: + - 跟其他算法课本一样是个很棒的复习素材 + - 包含作者以往解决工业及学术上问题的经验的故事 + - 含C语言代码示例 + - 缺点: + - 某些地方跟《算法导论》(CLRS)一样艰深,但在某些主题,算法导论或许是更好的选择。 + - 第7、8、9章有点难以消化,因为某些地方并没有解释得很清楚,或者根本上我就是个学渣 + - 别会错意了,我很喜欢 Skiena 的教学方法以及他的风格。 + - 算法目录: + - 这个部分是买这本书的最大原因 + - 我即将着手进行这部分,一旦完成这部分我会再更新上来 + - 可以在 kindle 上租 + - 解答: + - [解答](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) + +- [编程卓越之道(第一卷):深入理解计算机](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + + - 该书于2004年出版,虽然有些过时,但是对于简单了解计算机而言,这是一个了不起的资源 + - 作者发明了[高阶组合语言 HLA](https://en.wikipedia.org/wiki/High_Level_Assembly),所以提到,并且举了一些HLA的例子。里面没有用到很多,但都是很棒的组合语言的例子。 + - 这些章节值得阅读,为你提供良好的基础: + - 第2章──数字表示 + - 第3章──二进制算术和位运算 + - 第4章──浮点表示 + - 第5章──字符表示 + - 第6章──内存组织和访问 + - 第7章──组合数据类型和内存对象 + - 第9章──CPU体系结构 + - 第10章──指令集架构 + - 第11章──内存体系结构和组织 + +- [算法导论](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **重要提示**:读这本书的价值有限。本书很好地回顾了算法和数据结构,但不会教你如何编写良好的代码。你必须能够有效地编写一个不错的解决方案 + - 又称 CLR,有时是 CLRS,因为 Stein 最后才加入 + +- [计算机体系结构:量化研究方法(第6版)](https://www.amazon.com/dp/0128119055) + - 更丰富、更新(2017年),但篇幅较长 +- [编程珠矶](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - 前几章介绍了解决编程问题(非常古老,甚至还用数据磁带)的巧妙解决方案,但这只是一个介绍。这是关于程序设计和体系结构的指南 + +## 附加学习 + + 我把它们加进来是为了让你成为更全方位的软件工程师,并且留意一些技术以及算法,让你拥有更大的工具箱。 + +- ### 编译器 + + - [编译器的工作方式,约1分钟(视频)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard CS50-编译器(视频)](https://www.youtube.com/watch?v=CSZLNYF4Klo) + - [C ++(视频)](https://www.youtube.com/watch?v=twodd1KFfGk) + - [了解编译器优化(C ++)(视频)](https://www.youtube.com/watch?v=FnGCDLhaxKU) - ### Emacs and vi(m) - - Yegge 的建议,从一个很早以前的亚马逊招聘信息中而来:熟悉基于 unix 的代码编辑器 + - 熟悉基于 unix 的代码编辑器 - vi(m): - [使用 vim 进行编辑 01 - 安装, 设置和模式 (视频)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) - [VIM 的冒险之旅](http://vim-adventures.com/) @@ -1315,335 +1417,463 @@ - [(或许) 深度组织模式:管理结构 (视频)](https://www.youtube.com/watch?v=nsGYet02bEk) - ### Unix 命令行工具 - - 下列内容中的优秀工具由的 Yegge 推荐,Yegge 目前致力于 Amazon 人事招聘处。 - - [ ] bash - - [ ] cat - - [ ] grep - - [ ] sed - - [ ] awk - - [ ] curl or wget - - [ ] sort - - [ ] tr - - [ ] uniq - - [ ] [strace](https://en.wikipedia.org/wiki/Strace) - - [ ] [tcpdump](https://danielmiessler.com/study/tcpdump/) + - 下列内容包含优秀工具 + - bash + - cat + - grep + - sed + - awk + - curl or wget + - sort + - tr + - uniq + - [strace](https://en.wikipedia.org/wiki/Strace) + - [tcpdump](https://danielmiessler.com/study/tcpdump/) -- ### 信息资源 (视频) - - [ ] [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 信息和系统复杂度的内容. +- ### 信息论 (视频) + - [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 信息和系统复杂度的内容。 - ### 奇偶校验位 & 汉明码 (视频) - - [ ] [入门](https://www.youtube.com/watch?v=q-3BctoUpHE) - - [ ] [奇偶校验位](https://www.youtube.com/watch?v=DdMcAUlxh1M) - - [ ] 汉明码(Hamming Code): + - [入门](https://www.youtube.com/watch?v=q-3BctoUpHE) + - [奇偶校验位](https://www.youtube.com/watch?v=DdMcAUlxh1M) + - 汉明码(Hamming Code): - [发现错误](https://www.youtube.com/watch?v=1A_NcXxdoCc) - [修正错误](https://www.youtube.com/watch?v=JAMLuxdHH8o) - - [ ] [检查错误](https://www.youtube.com/watch?v=wbH2VxzmoZk) + - [检查错误](https://www.youtube.com/watch?v=wbH2VxzmoZk) -- ### 系统熵值(系统复杂度) +- ### 系统熵值(Entropy) - 请参考下方视频 - 观看之前,请先确定观看了信息论的视频 - - [ ] [信息理论, 克劳德·香农, 熵值, 系统冗余, 数据比特压缩 (视频)](https://youtu.be/JnJq3Py0dyM?t=176) + - [信息理论, 克劳德·香农, 熵值, 系统冗余, 数据比特压缩 (视频)](https://youtu.be/JnJq3Py0dyM?t=176) - ### 密码学 - 请参考下方视频 - 观看之前,请先确定观看了信息论的视频 - - [ ] [可汗学院](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) + - [可汗学院](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) - ### 压缩 - 观看之前,请先确定观看了信息论的视频 - - [ ] 压缩 (视频): - - [ ] [压缩](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) - - [ ] [数据压缩的艺术](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) - - [ ] [(可选) 谷歌开发者: GZIP 还差远了呢!](https://www.youtube.com/watch?v=whGwm0Lky2s) - -- ### 网络 (视频) - - [ ] [可汗学院](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 和 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) - - [ ] [视频](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) - - [ ] [子网络解密 - 第五部分 经典内部域名指向 CIDR 标记](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - Computerphile (视频): + - [压缩](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) + - [数据压缩的艺术](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) + - [(可选) 谷歌开发者:GZIP 还差远了呢!](https://www.youtube.com/watch?v=whGwm0Lky2s) - ### 计算机安全 - - [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) + - [MIT(23个视频)](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) -- ### 释放缓存 - - [ ] [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) +- ### 垃圾回收 + - [ ] [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) -- ### 并行/并发编程 +- ### 并行编程 - [ ] [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) - - [ ] 主要有如下的设计模式: - - [ ] s(strategy) - - [ ] singleton - - [ ] adapter - - [ ] prototype - - [ ] decorator - - [ ] visitor - - [ ] factory, abstract factory - - [ ] facade - - [ ] observer - - [ ] proxy - - [ ] delegate - - [ ] command - - [ ] state - - [ ] memento - - [ ] 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) - - [ ] [视频](https://www.youtube.com/playlist?list=PLF206E906175C7E07) - - [ ] [Head First 设计模型](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) - - 尽管这本书叫做设计模式:重复使用模块,但是我还是认为Head First是对于新手来说很不错的书。 - - [ ] [基于实际操作对于入门开发者的建议](https://sourcemaking.com/design-patterns-and-tips) - -- ### 信息传输, 序列化,和队列化的系统 - - [ ] [Thrift](https://thrift.apache.org/) +- ### 消息传递,序列化和队列系统 + - [Thrift](https://thrift.apache.org/) - [教程](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) - - [ ] [协议缓冲](https://developers.google.com/protocol-buffers/) + - [协议缓冲](https://developers.google.com/protocol-buffers/) - [教程](https://developers.google.com/protocol-buffers/docs/tutorials) - - [ ] [gRPC](http://www.grpc.io/) + - [gRPC](http://www.grpc.io/) - [gRPC 对于JAVA开发者的入门教程(视频)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) - - [ ] [Redis](http://redis.io/) + - [Redis](http://redis.io/) - [教程](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/) + - [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/) + - [Celery](http://www.celeryproject.org/) - [Celery入门](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html) - - [ ] [ZeroMQ](http://zeromq.org/) + - [ZeroMQ](http://zeromq.org/) - [入门教程](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/) + - [ActiveMQ](http://activemq.apache.org/) + - [Kafka](http://kafka.apache.org/documentation.html#introduction) + - [MessagePack](http://msgpack.org/index.html) + - [Avro](https://avro.apache.org/) + +- ### A*搜索算法 + + - [A 搜索算法](https://en.wikipedia.org/wiki/A*_search_algorithm) + - [A* 路径搜索教程(教程)](https://www.youtube.com/watch?v=KNXfSOx4eEE) + - [A* 路径搜索(E01:算法解释)(视频)](https://www.youtube.com/watch?v=-L-WgKMFuhE) - ### 快速傅里叶变换 - - [ ] [什么是傅立叶变换?论傅立叶变换的用途](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/) + - [傅立叶变换的交互式指南](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/) + - [什么是傅立叶变换?论傅立叶变换的用途](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/) - ### 布隆过滤器 - - 给一个布隆过滤器m比特和k个哈希函数,所有的注入和相关测试都会是通过。 - - [布隆过滤器](https://www.youtube.com/watch?v=-SuTGoFYjZs) - - [布隆过滤器 | 数据挖掘 | Stanford University](https://www.youtube.com/watch?v=qBTdukbzc78) + - 给定布隆过滤器m比特位和k个哈希函数,插入和成员检测都会是 O(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 树 - - [ ] [争论: 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) +- ### HyperLogLog + - [如何仅使用1.5KB内存计算十亿个不同的对象](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) -- ### 更深入的数据结构 - - [ ] [CS 61B 第 39 课: 更深入的数据结构](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) +- ### 局部敏感哈希 + - 用于确定文件的相似性 + - MD5 或 SHA 的反义词,用于确定2个文档/字符串是否完全相同 + - [Simhashing(希望如此)变得简单](http://ferd.ca/simhashing-hopefully-made-simple.html) + +- ### 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) + +- ### 增强数据结构 + - [CS 61B 第 39 课: 增强数据结构](https://youtu.be/zksIj9O8_jc?list=PL4BBB74C7D2A1049C&t=950) + +- ### 平衡查找树(Balanced search trees) + - 掌握至少一种平衡查找树(并懂得如何实现): + - “在各种平衡查找树当中,AVL 树和2-3树已经成为了过去,而红黑树(red-black trees)看似变得越来越受人青睐。这种令人特别感兴趣的数据结构,亦称伸展树(splay tree)。它可以自我管理,且会使用轮换来移除任何访问过根节点的键。” —— Skiena + - 因此,在各种各样的平衡查找树当中,我选择了伸展树来实现。虽然,通过我的阅读,我发现在面试中并不会被要求实现一棵平衡查找树。但是,为了胜人一筹,我们还是应该看看如何去实现。在阅读了大量关于红黑树的代码后,我才发现伸展树的实现确实会使得各方面更为高效。 + - 伸展树:插入、查找、删除函数的实现,而如果你最终实现了红黑树,那么请尝试一下: + - 跳过删除函数,直接实现搜索和插入功能 + - 我希望能阅读到更多关于 B 树的资料,因为它也被广泛地应用到大型的数据集当中。 + - [自平衡二叉查找树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) + + - **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) + + - **伸展树** + - 实际中:伸展树一般用于缓存、内存分配者、路由器、垃圾回收者、数据压缩、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棵树的翻译(请参见下文)。 + - 实际中:红黑树提供了在最坏情况下插入操作、删除操作和查找操作的时间保证。这些时间值的保障不仅对时间敏感型应用有用,例如实时应用,还对在其他数据结构中块的构建非常有用,而这些数据结构都提供了最坏情况下的保障;例如,许多用于计算几何学的数据结构都可以基于红黑树,而目前 Linux 内核所采用的完全公平调度器(the Completely Fair Scheduler)也使用到了该种树。在 Java 8中,Collection HashMap也从原本用Linked List实现,储存特定元素的哈希码,改为用红黑树实现。 + - [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/) + + - **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树在实际中并不经常使用**。 + - [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) + + - **N 叉树(K 叉树、M 叉树)** + - 注意:N 或 K 指的是分支系数(即树的最大分支数): + - 二叉树是一种分支系数为2的树 + - 2-3树是一种分支系数为3的树 + - [K 叉树](https://en.wikipedia.org/wiki/K-ary_tree) + + - **B 树** + - 有趣的是:为啥叫 B 仍然是一个神秘。因为 B 可代表波音(Boeing)、平衡(Balanced)或 Bayer(联合创造者) + - 实际中:B 树会被广泛适用于数据库中,而现代大多数的文件系统都会使用到这种树(或变种)。除了运用在数据库中,B 树也会被用于文件系统以快速访问一个文件的任意块。但存在着一个基本的问题,那就是如何将文件块 i 转换成一个硬盘块(或一个柱面-磁头-扇区)上的地址。 + - [B 树](https://en.wikipedia.org/wiki/B-tree) + - [B 树数据结构](http://btechsmartclass.com/data_structures/b-trees.html) + - [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 指块的大小、即缓存行的大小) + +- ### k-D树 + - 非常适合在矩形或更高维度的对象中查找点数 + - 最适合k近邻 + - [Kd树(视频)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d树算法(视频)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ### 跳表 - "有一种非常迷幻的数据类型" - Skiena - - [ ] [随机化: 跳表 (视频)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) - - [ ] [更生动详细的解释](https://en.wikipedia.org/wiki/Skip_list) + - [随机化: 跳表 (视频)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [更生动详细的解释](https://en.wikipedia.org/wiki/Skip_list) - ### 网络流 - - [ ] [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) + - [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) - ### 不相交集 & 联合查找 - - [ ] [不相交集](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): - - [ ] [概览](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) + - [UCB 61B - 不相交集;排序 & 选择(视频)](https://www.youtube.com/watch?v=MAEGXTwmUsI&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=21) + - [Sedgewick算法──Union-Find(6视频)](https://www.coursera.org/learn/algorithms-part1/home/week/1) -- ### 快速处理数学 - - [ ] [整数运算, Karatsuba 乘法 (视频)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) - - [ ] [中国剩余定理 (在密码学中的使用) (视频)](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) - 一个二叉搜索树和一个堆的组合 - - [ ] [树堆](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) + - [树堆](https://en.wikipedia.org/wiki/Treap) + - [数据结构:树堆的讲解(视频)](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) - - [ ] [寻找最小成本](https://www.youtube.com/watch?v=2ACJ9ewUC6U) - - [ ] [寻找最大值](https://www.youtube.com/watch?v=8AA_81xI3ik) + - [线性规划](https://www.youtube.com/watch?v=M4K6HYLHREQ) + - [寻找最小成本](https://www.youtube.com/watch?v=2ACJ9ewUC6U) + - [寻找最大值](https://www.youtube.com/watch?v=8AA_81xI3ik) + - [用 Python 解决线性方程式──单纯形算法](https://www.youtube.com/watch?v=44pAWI7v5Zk) - ### 几何:凸包(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) + - [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) + - [分而治之: 凸包, 中值查找](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) - ### 离散数学 - - 查看下面的视频:(这里没看到视频= =) + - 查看下面的视频 - ### 机器学习(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://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) + - [很棒的初级课程:机器学习](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) + - 书籍: + - [Python 机器学习](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) + - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) + - [Python 机器学习简介](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) + - [软件工程师的机器学习](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - Data School:http://www.dataschool.io/ -- ## 一些主题的额外内容 - + 我为前面提到的某些主题增加了一些额外的内容,之所以没有直接添加到前面,是因为这样很容易导致某个主题内容过多。毕竟你想在本世纪找到一份工作,对吧? -- [ ] **动态规划的更多内容** (视频) - - [ ] [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) +- SOLID -- [ ] **图形处理进阶** (视频) - - [ ] [异步分布式算法: 对称性破缺,最小生成树](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) - - [ ] [异步分布式算法: 最小生成树](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28) + - [ ] [Bob Martin SOLID面向对象和敏捷设计的原理(视频)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] 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 ── [Liskov 替换原则](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分钟了解接口隔离原理(视频)](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) -- [ ] 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) +- Union-Find + - [概览](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) -- [ ] [Simonson: 近似算法 (视频)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) +- **动态规划的更多内容** (视频) + - [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) + +- **图形处理进阶** (视频) + - [异步分布式算法: 对称性破缺,最小生成树](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) + - [异步分布式算法: 最小生成树](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28) + +- MIT **概率论** (过于数学,进度缓慢,但这对于数学的东西却是必要之恶) (视频): + - [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: 近似算法 (视频)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) + +- **字符串匹配** + + - Rabin-Karp(视频) + - [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) + - [表翻倍,Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9) + - [滚动哈希,摊销分析](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32) + - Knuth-Morris-Pratt (KMP): + - [Knuth-Morris-Pratt(KMP)字符串匹配算法](https://www.youtube.com/watch?v=5i7oKodCRJo) + - Boyer–Moore 字符串搜索算法 + - [Boyer–Moore 字符串搜索算法](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) + - [高级字符串搜索Boyer-Moore-Horspool算法(视频)](https://www.youtube.com/watch?v=QDZpzctPf10) + - [Coursera:字符串算法](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) + - 刚开始时很棒,但是当它超过 KMP 时,它变得比需要复杂得多 + - 很好的字典树解释 + - 可以跳过 + +- **排序** + + - 斯坦福大学关于排序算法的视频: + - [课程 15 | 编程抽象(视频)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) + - [课程 16 | 编程抽象(视频)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) + + - Shai Simonson 视频,[Aduni.org](http://www.aduni.org/): + - [算法 - 排序 - 第二讲(视频)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) + - [算法 - 排序2 - 第三讲(视频)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) + + - Steven Skiena 关于排序的视频: + - [课程从 26:46 开始(视频)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) + - [课程从 27:40 开始(视频)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [课程从 35:00 开始(视频)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [课程从 23:50 开始(视频)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) ## 视频系列 - 坐下来享受一下吧。"netflix and skill" :P + 坐下来享受一下吧。"netflix 和技能" :P -- [ ] [个人的动态规划问题列表 (都是短视频哟)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) +- [个人的动态规划问题列表 (都是短视频)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) -- [ ] [x86 架构,汇编,应用程序 (11 个视频)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) +- [x86 架构,汇编,应用程序 (11 个视频)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) -- [ ] [MIT 18.06 线性代数,2005 年春季 (35 个视频)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8) +- [MIT 18.06 线性代数,2005 年春季 (35 个视频)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8) -- [ ] [绝妙的 MIT 微积分:单变量微积分](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) +- [绝妙的 MIT 微积分:单变量微积分](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) -- [ ] [计算机科学 70, 001 - 2015 年春季 - 离散数学和概率理论](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) -- [ ] [离散数学 (19 个视频)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) +- [离散数学 (19 个视频)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) -- [ ] CSE373 - 算法分析 (25 个视频) +- [离散数学(第一部分),Sarada Herke (5个视频)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) + +- CSE373 - 算法分析 (25 个视频) - [Skiena 的算法设计手册讲座](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) -- [ ] [UC Berkeley 61B (2014 年春季): 数据结构 (25 个视频)](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 (2006 年秋季): 数据结构 (39 个视频)]( https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) +- [UC Berkeley 61B (2006 年秋季): 数据结构 (39 个视频)](https://www.youtube.com/playlist?list=PL4BBB74C7D2A1049C) -- [ ] [UC Berkeley 61C: 计算机结构 (26 个视频)](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: 使用 UML 和 Java 进行软件开发 (21 个视频)](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: 计算机结构和工程 (20 个视频)](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: 计算结构 (49 视频)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) +- [MIT 6.004: 计算结构 (49 视频)](https://www.youtube.com/playlist?list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) -- [ ] [卡內基梅隆大学 - 计算机架构讲座 (39 个视频)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) +- [卡內基梅隆大学 - 计算机架构讲座 (39 个视频)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) -- [ ] [MIT 6.006: 算法介绍 (47 个视频)](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: 计算机系统工程 (22 个视频)](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 人工智能, 2010 年秋季 (30 个视频)](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: 计算机科学数学, 2010 年秋季 (25 个视频)](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: 算法设计与分析 (34 个视频)](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: 信息和熵, 2008 年春季 (19 个视频)](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: 高等数据结构 (22 个视频)](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: 高等算法, 2016 年春季 (24 个视频)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) +- [MIT 6.854: 高等算法, 2016 年春季 (24 个视频)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) -- [ ] [MIT 6.858计算机系统安全, 2014 年秋季](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) +- [Harvard COMPSCI 224:高级算法(25个视频)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) -- [ ] 斯坦福: 编程范例 (17 个视频) - - [C 和 C++ 课程](https://www.youtube.com/watch?v=jTSvthW34GU&list=PLC0B8B318B7394B6F&nohtml5=False) +- [MIT 6.858:计算机系统安全, 2014 年秋季](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) -- [ ] [密码学导论](https://www.youtube.com/watch?v=2aHkqB2-46k&feature=youtu.be) - - [本系列更多内容 (不分先后顺序)](https://www.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) +- [斯坦福: 编程范例 (27 个视频)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) -- [ ] [大数据 - 斯坦福大学 (94 个视频)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) +- [密码学导论,Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) + - [课程网站以及幻灯片和问题集](http://www.crypto-textbook.com/) + +- [大数据 - 斯坦福大学 (94 个视频)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) + +- [图论,Sarada Herke(67个视频)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) ## 计算机科学课程 -- [ 在线 CS 课程目录 ](https://github.com/open-source-society/computer-science) +- [在线 CS 课程目录](https://github.com/open-source-society/computer-science) - [CS 课程目录 (一些是在线讲座)](https://github.com/prakhar1989/awesome-courses) + +## 论文 + +- [喜欢经典的论文?](https://www.cs.cmu.edu/~crary/819-f09/) +- [1978: 通信顺序处理](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [Go 实现](https://godoc.org/github.com/thomas11/csp) +- [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) + - 大多被云数据流取代了? +- [2006年:Bigtable:结构化数据的分布式存储系统](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [深入了解Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) +- [2006年:针对松散耦合的分布式系统的Chubby Lock服务](https://research.google.com/archive/chubby-osdi06.pdf) +- [2007年:Dynamo:亚马逊的高可用键值存储](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - Dynamo论文启动了NoSQL革命 +- [2007: 每个程序员都应该知道的内存知识 (非常长,作者建议跳过某些章节来阅读)](https://www.akkadia.org/drepper/cpumemory.pdf) +- [2010年:Dapper,一个大型分布式系统跟踪基础结构](https://research.google.com/pubs/archive/36356.pdf) +- [2010年:Dremel:Web规模数据集的交互式分析](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.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: 大规模高可用: 构建 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) + +## LICENSE + +[CC-BY-SA-4.0](https://github.com/jwasham/coding-interview-university/blob/master/LICENSE.txt) From f27e4edbc33225a3db79d3d25e9fc8285af134c2 Mon Sep 17 00:00:00 2001 From: qiwihui Date: Sat, 31 Oct 2020 01:09:51 +0800 Subject: [PATCH 246/263] dcos: fix some toc links in Chinese translation --- translations/README-cn.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/translations/README-cn.md b/translations/README-cn.md index f3ccbd6..4b185f1 100644 --- a/translations/README-cn.md +++ b/translations/README-cn.md @@ -79,8 +79,8 @@ - [字典树(Tries)](#字典树tries) - [浮点数](#浮点数) - [Unicode](#unicode) - - [字节顺序](#字节顺序) - - [网络](#网络) + - [字节顺序](#字节序Endianness) + - [网络](#网络视频) - [系统设计、可伸缩性、数据处理](#系统设计可伸缩性数据处理)(如果你有4+年经验) - [终面](#终面) - [编程问题练习](#编程问题练习) @@ -106,14 +106,14 @@ - [计算机安全](#计算机安全) - [垃圾回收](#垃圾回收) - [并行编程](#并行编程) - - [消息传递,序列化和队列化的系统](#消息传递-序列化和队列系统) - - [A*搜索算法](#A*搜索算法) + - [消息传递,序列化和队列化的系统](#消息传递序列化和队列系统) + - [A*搜索算法](#A搜索算法) - [快速傅里叶变换](#快速傅里叶变换) - [布隆过滤器](#布隆过滤器) - [HyperLogLog](#HyperLogLog) - [局部敏感哈希](#局部敏感哈希) - [van Emde Boas 树](#van-emde-boas-树) - - [更深入的数据结构](#更深入的数据结构) + - [增强数据结构](#增强数据结构) - [平衡查找树](#平衡查找树balanced-search-trees) - AVL 树 - 伸缩树(Splay tree) @@ -1015,7 +1015,7 @@ - 对于内核开发非常具有技术性,如果大多数的内容听不懂也没关系。 - 前半部就已经足够了。 -- ### 网络 (视频) +- ### 网络(视频) - **如果你具有网络经验或想成为可靠性工程师或运维工程师,期待你的问题** - 知道这些有益无害,多多益善! - [ ] [可汗学院](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org) From bd0a82c3c8375c0d2d893148c3a17216250bce45 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Tue, 3 Nov 2020 06:02:41 -0600 Subject: [PATCH 247/263] Update README-kh.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translated ពត៌មានលំអិតបន្ថែមលើមុខវិជ្ជាមួយចំនួន --- translations/README-kh.md | 1074 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1074 insertions(+) diff --git a/translations/README-kh.md b/translations/README-kh.md index dcbee57..f514600 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -928,3 +928,1077 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - [ ] [DP vs. recursive implementation (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) - [ ] [Global pairwise sequence alignment (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment) - [ ] [Local pairwise sequence alignment (វីដេអូ)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) + +- ### Object-Oriented Programming + - [ ] [Optional: UML 2.0 Series (វីដេអូ)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) + - [ ] គោលការណ៍ SOLID OOP: [គោលការណ៍ SOLID (វីដេអូ)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A) + +- ### Design patterns + - [ ] [ការពិនិត្យ Quick UML (វីដេអូ)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) + - [ ] រៀនគំរូទាំងនេះ: + - [ ] strategy + - [ ] singleton + - [ ] adapter + - [ ] prototype + - [ ] decorator + - [ ] visitor + - [ ] factory, abstract factory + - [ ] facade + - [ ] observer + - [ ] proxy + - [ ] delegate + - [ ] command + - [ ] state + - [ ] memento + - [ ] iterator + - [ ] composite + - [ ] flyweight + - [ ] [ជំពូកទី ៦ (ភាគ ១) - Patterns (វីដេអូ)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344) + - [ ] [ជំពូកទី ៦ (ភាគ ២) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (វីដេអូ)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + - [ ] [ជំពូកទី ៦ (ភាគ ៣) - 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 First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - ខ្ញុំដឹងថាសៀវភៅបទបញ្ញត្តិគឺ“ លំនាំរចនា៖ ធាតុផ្សំនៃកម្មវិធីដែលអាចប្រើឡើងវិញបាន” ប៉ុន្តែក្បាលទីមួយគឺល្អសម្រាប់អ្នកចាប់ផ្តើមដំបូង Object-Oriented ។ + - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) + - [ ] [Design patterns សម្រាប់មនុស្ស](https://github.com/kamranahmedse/design-patterns-for-humans#structural-design-patterns) + +- ### Combinatorics (n choose k) & Probability + - [ ] [ជំនាញគណិតវិទ្យា៖ វិធីស្វែងរក Factorial, Permutation និង Combination (ជ្រើសរើស) (វីដេអូ)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) + - [ ] [Make School: Probability (វីដេអូ)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) + - [ ] [Make School: បន្ថែមលេី Probability និង Markov Chains (វីដេអូ)](https://www.youtube.com/watch?v=dNaJg-mLobQ) + - [ ] Khan Academy: + - ប្លង់វគ្គសិក្សា: + - [ ] [ទ្រឹស្តីប្រូបាបដំបូង](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) + - គ្រាន់តែវីដេអូ - ៤១ (វីដេអូនីមួយៗមានលក្ខណៈសាមញ្ញហើយវីដេអូនីមួយៗខ្លី)៖ + - [ ] [ពន្យល់អំពីប្រូបាប (វីដេអូ)](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-Completeness (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 Norvig 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 processes and threads see videos 1-11 + - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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 + - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - 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 the 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) + +- ### 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) + - [ ] 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 + +- ### String searching & manipulations + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) + - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + + If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects). + +- ### 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 + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [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/competitive-programming/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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + +- ### Floating Point Numbers + - [ ] 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) + +- ### 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://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. + +- ### Networking + - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** + - Otherwise, this is just good to know + - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org) + - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) + - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) + - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) + - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) + - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] Sockets: + - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + +## System Design, Scalability, Data Handling + +**You can expect system design questions if you have 4+ years of experience.** + +- 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 +- Considerations: + - 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**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] [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/) +- [ ] Consensus Algorithms: + - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) +- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) +- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) +- [ ] Scalability: + - You don't need all of these. Just pick a few that interest you. + - [ ] [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/competitive-programming/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 (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) + - [ ] [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) + - [ ] [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](#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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/coding-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](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972) + - [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 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/) + +--- + +## Final Review + + This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. + It's nice if you want a refresher often. + +- [ ] 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) +- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +--- + +## Coding Question Practice + +Now that you know all the computer science topics above, it's time to practice answering coding problems. + +**Coding question practice is not about memorizing answers to programming problems.** + +Why you need to practice doing programming problems: +- Problem recognition, and where the right data structures and algorithms fit in +- Gathering requirements for the problem +- Talking your way through the problem like you will in the interview +- Coding on a whiteboard or paper, not a computer +- Coming up with time and space complexity for your solutions +- Testing your solutions + +There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming +interview books, too, but I found this outstanding: +[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) + +No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a +large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". +I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil +and eraser. + +![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) + +Supplemental: + +- [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) +- [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) +- [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) +- [Exercises for getting better at a given language](http://exercism.io/languages) + +**Read and Do Programming Problems (in this order):** + +- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - answers in C, C++ and Java +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - answers in Java + +See [Book List above](#book-list) + + +## 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. + +- [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) +- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) + +Coding Interview Question Videos: +- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + - Super for walkthroughs of problem solutions +- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - Good explanations of solution and the code + - You can watch several in a short time +- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) + +Challenge sites: +- [LeetCode](https://leetcode.com/) + - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing + - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode) + - See Nick White Videos above for short code-throughs +- [HackerRank](https://www.hackerrank.com/) +- [TopCoder](https://www.topcoder.com/) +- [InterviewCake](https://www.interviewcake.com/) +- [Geeks for Geeks](http://www.geeksforgeeks.org/) +- [InterviewBit](https://www.interviewbit.com/invite/icjf) +- [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) +- [Code Exercises](https://code-exercises.com) + +Language-learning sites, with challenges: +- [Codewars](http://www.codewars.com) +- [Codility](https://codility.com/programmers/) +- [HackerEarth](https://www.hackerearth.com/) +- [Sphere Online Judge (spoj)](http://www.spoj.com/) +- [Codechef](https://www.codechef.com/) + +Challenge repos: +- [Interactive Coding Interview Challenges in Python](https://github.com/donnemartin/interactive-coding-challenges) + +Mock Interviews: +- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/) - I used this and it helped me relax for the phone screen and on-site interview +- [Pramp: Mock interviews from/with peers](https://www.pramp.com/) - peer-to-peer model of practice interviews +- [Refdash: Mock interviews and expedited interviews](https://refdash.com/) - also help candidates fast track by skipping multiple interviews with tech companies +- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously. + + +## 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) + +## Your Resume + +- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed + + +## Be thinking of for when the interview comes + +Think of about 20 interview questions you'll get, along with 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 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 does 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? +- How is work/life balance? + +## Once You've Got The Job + +Congratulations! + +Keep learning. + +You're never really done. + +--- + + ***************************************************************************************************** + ***************************************************************************************************** + + Everything below this point is optional. + By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for + any software engineering job. You'll be a much more well-rounded software engineer. + + ***************************************************************************************************** + ***************************************************************************************************** + +--- + +## Additional Books + + These are here so you can dive into a topic you find interesting. + +- [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) + - An oldie but a goodie +- [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) + - A modern option +- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) + - A gentle introduction to design patterns +- [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) + - AKA the "Gang Of Four" book, or GOF + - The canonical design patterns book +- [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) +- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview + - This book has 2 parts: + - Class textbook on data structures and algorithms + - Pros: + - Is a good review as any algorithms textbook would be + - Nice stories from his experiences solving problems in industry and academia + - Code examples in C + - Cons: + - Can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - Chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - Don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material + - Algorithm catalog: + - This is the real reason you buy this book + - About to get to this part. Will update here once I've made my way through it + - Can rent it on kindle + - 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) +- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief + - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like + - These chapters are worth the read to give you a nice foundation: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization +- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently + - AKA CLR, sometimes CLRS, because Stein was late to the game + +- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) + - For a richer, more up-to-date (2017), but longer treatment + +- [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture + +## Additional Learning + + I added them to help you become a well-rounded software engineer, and to be aware of certain + technologies and algorithms, so you'll have a bigger toolbox. + +- ### Compilers + - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard 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) + +- ### Emacs and vi(m) + - 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 + - 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) + +- ### 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 + - [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) + +- ### 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 Started](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/) + +- ### 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) + +- ### Fast Fourier Transform + - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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 (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](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/) + +- ### HyperLogLog + - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + +- ### Locality-Sensitive Hashing + - Used to determine the similarity of documents + - The opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same + - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) + +- ### 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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) + +- ### Balanced search trees + - Know at 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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - MIT Lecture: Splay Trees: + - Gets very mathy, but watch the last 10 minutes for sure. + - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + + - **Red/black trees** + - These are a translation of a 2-3 tree (see below). + - 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) + - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) + + - **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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [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) + + - **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) + + - **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) + - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) + - [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) + + +- ### k-D Trees + - Great for finding number of points in a rectangle or higher dimension object + - A good fit for k-nearest neighbors + - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + +- ### 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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [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 + - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + +- ### 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) + - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) + +- ### 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: + - Books: + - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) + - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) + - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) + - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - Data School: http://www.dataschool.io/ + +--- + +## Additional Detail on Some Subjects +## ពត៌មានលំអិតបន្ថែមលើមុខវិជ្ជាមួយចំនួន + + ខ្ញុំបានបន្ថែមគំនិតទាំងនេះដើម្បីពង្រឹងគំនិតមួយចំនួនដែលបានបង្ហាញខាងលើប៉ុន្តែខ្ញុំមិនចង់បញ្ចូលវាខាងលើព្រោះវាច្រើនពេក។ វាងាយស្រួលក្នុងការធ្វើឱ្យវាហួសប្រមាណលើប្រធានបទ។ + អ្នកចង់ទទួលបានការងារនៅសតវត្សនេះមែនទេ? + +- **SOLID** + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (វីដេអូ)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] 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) + - [ប្រភេទផ្សេងទៀត](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 but not for modification](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 - [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) + - [ប្រភេទផ្សេងទៀត](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 ក្នុងរយៈពេល 5 នាទី (វីដេអូ)](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 -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects. + - [ហេតុអ្វីបានជា The Dependency Inversion Principle និងហេតុអ្វីវាសំខាន់](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) + +- **Union-Find** + - [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) + +- **More Dynamic Programming** (វីដេអូ) + - [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** (វីដេអូ) + - [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** ប្រូបាប (គណិតវិទ្យា បងៀនយឹតល្អ) (វីដេអូ): + - [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) + +- **String Matching** + - Rabin-Karp (វីដេអូ): + - [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): + - [TThe Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - 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 (វីដេអូ)](https://www.youtube.com/watch?v=QDZpzctPf10) + - [Coursera: Algorithms អំពី Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) + - ចាប់ផ្តើមល្អ ប៉ុន្តែដល់ពេលហួស KMP វាកាន់តែស្មុគស្មាញ + - ការពន្យល់ដ៏ល្អនៃការព្យាយាម + - អាចរំលងបាន + +- **Sorting** + + - Stanford lectures on sorting: + - [មេរៀនទី 15 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) + - [មេរៀនទី 16 | Programming Abstractions (វីដេអូ)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) + - Shai Simonson, [Aduni.org](http://www.aduni.org/): + - [Algorithms - Sorting - មេរៀនទី 2 (វីដេអូ)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) + - [Algorithms - Sorting II - មេរៀនទី 3 (វីដេអូ)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) + - ការបង្រៀនរបស់ Steven Skiena អំពី sorting: + - [មេរៀនចាប់ផ្តេីមពី 26:46 (វីដេអូ)](https://youtu.be/ute-pmMkyuk?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1600) + - [មេរៀនចាប់ផ្តេីមពី 27:40 (វីដេអូ)](https://www.youtube.com/watch?v=yLvp-pB8mak&index=8&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [មេរៀនចាប់ផ្តេីមពី 35:00 (វីដេអូ)](https://www.youtube.com/watch?v=q7K9otnzlfE&index=9&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [មេរៀនចាប់ផ្តេីមពី 23:50 (វីដេអូ)](https://www.youtube.com/watch?v=TvqIGu9Iupw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=10) + +## Video Series +## ស៊េរីវីដេអូ + +រីករាយជាមួយវិដេអូរខាងក្រោម + +- [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + +- [x86 Architecture, Assembly, Applications (11 វីដេអូ)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) + +- [MIT 18.06 Linear Algebra, Spring 2005 (35 វីដេអូ)](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](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) + +- [Discrete Mathematics ដោយ Shai Simonson (19 វីដេអូ)](https://www.youtube.com/playlist?list=PL3o9D4Dl2FJ9q0_gtFXPh_H4POI5dK0yG) + +- [Discrete Mathematics Part 1 by Sarada Herke (5 វីដេអូ)](https://www.youtube.com/playlist?list=PLGxuz-nmYlQPOc4w1Kp2MZrdqOOm4Jxeo) + +- CSE373 - Analysis of Algorithms (25 វីដេអូ) + - [ការបង្រៀនរបស់ Skiena ពី Algorithm Design Manual](https://www.youtube.com/watch?v=ZFjhkohHdAA&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=1) + +- [UC Berkeley 61B (Spring 2014): Data Structures (25 វីដេអូ)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) + +- [UC Berkeley 61B (Fall 2006): Data Structures (39 វីដេអូ)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) + +- [UC Berkeley 61C: Machine Structures (26 វីដេអូ)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) + +- [OOSE: Software Dev Using UML and 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)~~ + +- [MIT 6.004: Computation Structures (49 វីដេអូ)](https://www.youtube.com/playlist?list=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) + +- [Carnegie Mellon - Computer Architecture Lectures (39 វីដេអូ)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) + +- [MIT 6.006: Intro to Algorithms (47 វីដេអូ)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False) + +- [MIT 6.033: Computer System Engineering (22 វីដេអូ)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484) + +- [MIT 6.034 Artificial Intelligence, Fall 2010 (30 វីដេអូ)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi) + +- [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 វីដេអូ)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B) + +- [MIT 6.046: Design and Analysis of Algorithms (34 វីដេអូ)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + +- [MIT 6.050J: Information and Entropy, Spring 2008 (19 វីដេអូ)](https://www.youtube.com/watch?v=phxsQrZQupo&list=PL_2Bwul6T-A7OldmhGODImZL8KEVE38X7) + +- [MIT 6.851: Advanced Data Structures (22 វីដេអូ)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) + +- [MIT 6.854: Advanced Algorithms, Spring 2016 (24 វីដេអូ)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) + +- [Harvard COMPSCI 224: Advanced Algorithms (25 វីដេអូ)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) + +- [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- [Stanford: Programming Paradigms (27 វីដេអូ)](https://www.youtube.com/view_play_list?p=9D558D49CA734A02) + +- [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) + - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) + +- [Mining Massive Datasets - Stanford University (94 វីដេអូ)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) + +- [Graph Theory by Sarada Herke (67 វីដេអូ)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) + +## Computer Science Courses +## វគ្គសិក្សាវិទ្យាសាស្ត្រកុំព្យូទ័រ + +- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science) +- [Directory of CS Courses (ភាគច្រើនជាមួយការបង្រៀនតាមអ៊ិនធរណេត)](https://github.com/prakhar1989/awesome-courses) + +## Papers +## អត្ថបទ + +- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) +- [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) +- [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) + - ជំនួសដោយ Colossus ក្នុងឆ្នាំ 2012 +- [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) + - ជំនួសដោយ Cloud Dataflow? +- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) + - [An Inside Look at Google BigQuery](https://cloud.google.com/files/BigQueryTechnicalWP.pdf) +- [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) +- [2007: Dynamo: Amazon’s Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - អត្ថបទ Dynamo ចាប់ផ្តេីមអោយមាន NoSQL +- [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) +- [2010: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](https://research.google.com/pubs/archive/36356.pdf) +- [2010: Dremel: Interactive Analysis of Web-Scale Datasets](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36632.pdf) +- [2012: Google's Colossus](https://www.wired.com/2012/07/google-colossus/) + - មិនមាន អត្ថបទ +- 2012: AddressSanitizer: A Fast Address Sanity Checker: + - [អត្ថបទ](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’s Globally-Distributed Database: + - [អត្ថបទ](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) +- [2016: Borg, Omega, and Kubernetes](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44843.pdf) + + +## LICENSE +## សាលាកប័រត + +[CC-BY-SA-4.0](./LICENSE.txt) From 3c2d4ad1df9a0b764a1b69b3a35409acd173f81b Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Tue, 3 Nov 2020 07:07:37 -0600 Subject: [PATCH 248/263] Update README-kh.md Translated Processes and Threads --- translations/README-kh.md | 186 +++++++++++++++++++------------------- 1 file changed, 92 insertions(+), 94 deletions(-) diff --git a/translations/README-kh.md b/translations/README-kh.md index f514600..2800f08 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -972,64 +972,63 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - គ្រាន់តែវីដេអូ - ៤១ (វីដេអូនីមួយៗមានលក្ខណៈសាមញ្ញហើយវីដេអូនីមួយៗខ្លី)៖ - [ ] [ពន្យល់អំពីប្រូបាប (វីដេអូ)](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) +- ### NP, NP-Complete និង Approximation Algorithms + - ដឹងពីបញ្ហាល្បីរបស់ NP-complete, ដូចជាអ្នកលក់ធ្វើដំណើរ និង បញ្ហា knapsack, ហើយអាចស្គាល់ពួកគេនៅពេលអ្នកសម្ភាសសួរអ្នកដោយក្លែងបន្លំ។. + - ដឹងថាអ្វីជា NP-complete. + - [ ] [Computational Complexity (វីដេអូ)](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) + - [ ] [Greedy Algs. II & Intro to NP Completeness (វីដេអូ)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [NP Completeness II & Reductions (វីដេអូ)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness III (វីដេអូ)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness IV (វីដេអូ)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) - [ ] Skiena: - - [ ] [CSE373 2012 - Lecture 23 - Introduction to NP-Completeness (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 Norvig discusses near-optimal solutions to traveling salesman problem: + - [ ] [CSE373 2012 - មេរៀនទី 23 - Introduction to NP-Completeness (វីដេអូ)](https://youtu.be/KiK5TVgXbFg?list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&t=1508) + - [ ] [CSE373 2012 - មេរៀនទី 24 - NP-Completeness Proofs (វីដេអូ)](https://www.youtube.com/watch?v=27Al52X3hd4&index=24&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - មេរៀនទី 25 - NP-Completeness Challenge (វីដេអូ)](https://www.youtube.com/watch?v=xCPH4gwIIXM&index=25&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [Complexity: P, NP, NP-completeness, Reductions (វីដេអូ)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [Complexity: Approximation Algorithms (វីដេអូ)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) + - [ ] [Complexity: Fixed-Parameter Algorithms (វីដេអូ)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - Peter Norvig ពិភាក្សាអំពីដំណោះស្រាយដែលល្អប្រសើរបំផុតចំពោះបញ្ហាអ្នកលក់ធ្វើដំណើរ៖ - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) - - Pages 1048 - 1140 in CLRS if you have it. + - ទំព័រ 1048 - 1140 ក្នុង CLRS ប្រសិនបើអ្នកមានវា. - ### 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) + - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (វីដេអូ)](https://www.youtube.com/watch?v=R5ON3iwx78M) + - [ ] [Implementing LRU (វីដេអូ)](https://www.youtube.com/watch?v=bq6N7Ym81iI) + - [ ] [LeetCode - 146 LRU Cache (C++) (វីដេអូ)](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: The Memory Hierarchy (វីដេអូ)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) + - [ ] [MIT 6.004 L16: Cache Issues (វីដេអូ)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) - ### Processes and Threads - - [ ] Computer Science 162 - Operating Systems (25 videos): - - for processes and threads see videos 1-11 - - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-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: + - [ ] Computer Science 162 - Operating Systems (25 វីដេអូ): + - សំរាប់ processes និង threads សូមមេីល វីដេអូ 1-11 + - [Operating Systems and System Programming (វីដេអូ)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [តេី Process និង Thread ខុសគ្នាដូចម្តេច?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) + - មាន: - Processes, Threads, Concurrency issues - - Difference between processes and threads + - តេី Process និង Thread ខុសគ្នាដូចម្តេច - Processes - Threads - Locks - Mutexes - Semaphores - Monitors - - How they work? + - តើពួកគេធ្វើការយ៉ាងដូចម្តេច? - Deadlock - Livelock - CPU activity, interrupts, context switching - Modern concurrency constructs with multicore processors - - [Paging, segmentation and virtual memory (video)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) - - [Interrupts (video)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) + - [Paging, segmentation and virtual memory (វីដេអូ)](https://www.youtube.com/watch?v=LKe7xK0bF7o&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=2) + - [Interrupts (វីដេអូ)](https://www.youtube.com/watch?v=uFKi2-J-6II&list=PLCiOXwirraUCBE9i_ukL8_Kfg6XNv7Se8&index=3) - 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 the 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): + - [ ] [threads in C++ (series - 10 វីដេអូ)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) + - [ ] concurrency ក្នុង Python (វីដេអូ): - [ ] [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) @@ -1696,114 +1695,113 @@ You're never really done. - **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) + 2-3 trees មានការបញ្ចូលលឿនជាងមុននៅក្នុងការចំណាយនៃការស្វែងរកយឺត (ដោយសារកំពស់ខ្ពស់ជាងបេីប្រៀបទៅ AVL trees). + - អ្នកអាចនឹងកំរប្រេី 2-3 tree ដោយសារតែការអនុវត្តរបស់វាទាក់ទងនឹងប្រភេទផ្សេងៗគ្នានៃថ្នាំង. ជំនួសវិញយេីងប្រេី Red Black trees. + - [23-Tree Intuition និង និយមន័យ (វីដេអូ)](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 Trees (student recitation) (វីដេអូ)](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://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) - - [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-4 tree, វាមាន red–black trees ជាមួយ data elements ដែលមានលំដាប់ដូចគ្នា. ការបញ្ចូលនិងការលុប + ប្រតិបត្ដិការនៅលើដើមឈើ 2-4 គឺស្មើទៅនឹងត្រឡប់ពណ៌និងការបង្វិលនៅក្នុងដើមឈើខ្មៅក្រហម. នេះធ្វើឱ្យដើមឈើ 2-4 ដើម + ឧបករណ៍សំខាន់សម្រាប់ការស្វែងយល់ពីតក្កវិជ្ជានៅពីក្រោយដើមឈើក្រហម - ក្រហមហើយនេះជាមូលហេតុដែលអត្ថបទណែនាំជាច្រើននៃក្បួនដោះស្រាយណែនាំ + ដើមឈើ ២-៤ ដើមមុនដើមឈើក្រហម - ក្រហមទោះបី ** ដើមឈើ ២-៤ ក៏មិនត្រូវបានប្រើក្នុងការអនុវត្តជាក់ស្តែងដែរ ** ។ + - [CS 61B មេរៀនទី 26: Balanced Search Trees (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [Bottom Up 234-Trees (វីដេអូ)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [Top Down 234-Trees (វីដេអូ)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) - **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 + - ចំណាំ: the N ឬ K ជា branching factor (max branches) + - binary trees គឺជា 2-ary tree មួយ, ដែលមាន branching factor = 2 + - 2-3 trees គឺជា 3-ary - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) - **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 អាចជា Boeing, Balanced, ឬ Bayer (co-inventor). + - ក្នុងការអនុវត្ត: + B-Trees ត្រូវបានប្រើយ៉ាងទូលំទូលាយនៅក្នុង databases. filesystems ទំនើបបំផុតភាគច្រេីនប្រេី B-trees (ឬ Variants). បន្ថែមពីលើ + ការប្រើប្រាស់របស់វានៅក្នុង databases, B-tree ក៏ត្រូវបានប្រើនៅក្នុង filesystems ដើម្បីអនុញ្ញាតឱ្យចូលទៅកាន់ quick random access ទៅ arbitrary + block មួយ ក្នុងឯកសារជាក់លាក់មួយ. បញ្ហាមូលដ្ឋានគឺការប្រែក្លាយបណ្តុំឯកសារអាយទៅជាប្លុកឌីស (ឬ ប្រហែលជាអាសយដ្ឋាន cylinder-head-sector) - [B-Tree](https://en.wikipedia.org/wiki/B-tree) - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) - - [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-Trees (វីដេអូ)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) + - [និយមន័យ B-Tree និង Insertion (វីដេអូ)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ការលុប B-Tree (វីដេអូ)](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-Trees, data structures + - ៣៧ នាទីដំបូងគឺបច្ចេកទេសហើយប្រហែលជាអាចរំលងចោល (B is block size, cache line size) - ### k-D Trees - - Great for finding number of points in a rectangle or higher dimension object - - A good fit for k-nearest neighbors - - [Kd Trees (video)](https://www.youtube.com/watch?v=W94M9D_yXKk) - - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + - ល្អសម្រាប់ការស្វែងរកចំនួនចំនុចក្នុងចតុកោណកែងឬវត្ថុវិមាត្រខ្ពស់ + - ល្អសំរាប់ k-nearest neighbors + - [Kd Trees (វីដេអូ)](https://www.youtube.com/watch?v=W94M9D_yXKk) + - [kNN K-d tree algorithm (វីដេអូ)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) - ### 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) + - [Randomization: Skip Lists (វីដេអូ)](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 — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) - - [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) - - [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) + - [Ford-Fulkerson in 5 minutes — Step by step example (វីដេអូ)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [Ford-Fulkerson Algorithm (វីដេអូ)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [Network Flows (វីដេអូ)](https://www.youtube.com/watch?v=2vhN4Ice5jI) - ### Disjoint Sets & Union Find - - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [UCB 61B - Disjoint Sets; Sorting & selection (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) - ### 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) + - [Integer Arithmetic, Karatsuba Multiplication (វីដេអូ)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [The Chinese Remainder Theorem (ប្រេីក្នុង cryptography) (វីដេអូ)](https://www.youtube.com/watch?v=ru7mWZJlRQg) - ### Treap - - Combination of a binary search tree and a heap + - ការរួមបញ្ចូលគ្នានៃ binary search tree និង a heap - [Treap](https://en.wikipedia.org/wiki/Treap) - - [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8) + - [Data Structures: Treaps explained (វីដេអូ)](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 (វីដេអូ) - [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) - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) -- ### 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) +- ### Geometry, Convex hull (វីដេអូ) + - [Graph Alg. IV: Intro to geometric algorithms - មេរៀនទី 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164) + - [Geometric Algorithms: Graham & Jarvis - មេរៀនទី 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) + - ហេតុអ្វី ML? + - [Google ធ្វេីខ្លួនជាក្រុមហ៊ុន Machine Learning ](https://backchannel.com/how-google-is-remaking-itself-as-a-machine-learning-first-company-ada63defcb70) + - [Large-Scale Deep Learning for Intelligent Computer Systems (វីដេអូ)](https://www.youtube.com/watch?v=QSaZGT4-6EY) + - [Deep Learning and Understandability versus Software Engineering and Verification ដោយ Peter Norvig](https://www.youtube.com/watch?v=X769cyzBNVw) + - [Google's Cloud Machine learning tools (វីដេអូ)](https://www.youtube.com/watch?v=Ja2hxBAwG_0) + - [Google Developers' Machine Learning Recipes (Scikit Learn & Tensorflow) (វីដេអូ)](https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal) + - [Tensorflow (វីដេអូ)](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) + - វគ្គសិក្សា: + - [វគ្គចាប់ផ្តើមដ៏អស្ចារ្យ: Machine Learning](https://www.coursera.org/learn/machine-learning) + - [វីដេអូ](https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW) + - មេីលវីដេអូ 12-18 សំរាប់ linear algebra (14 និង 15 ដូចគ្នា) - [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: - - Books: + - [Metis Online Course ($99 សំរាប់ 2 ខែ)](http://www.thisismetis.com/explore-data-science) + - ធនធាន: + - សៀវភៅ: - [Python Machine Learning](https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka/dp/1783555130/) - [Data Science from Scratch: First Principles with Python](https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X) - [Introduction to Machine Learning with Python](https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/) - - [Machine Learning for Software Engineers](https://github.com/ZuzooVn/machine-learning-for-software-engineers) + - [Machine Learning សម្រាប់វិស្វករ Software](https://github.com/ZuzooVn/machine-learning-for-software-engineers) - Data School: http://www.dataschool.io/ --- From ce5152cf4d62f0ad32dd1f15e10ef4b1e4155a8f Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Thu, 5 Nov 2020 06:47:53 -0600 Subject: [PATCH 249/263] Update README-kh.md Translated Scalability --- translations/README-kh.md | 148 +++++++++++++++++++------------------- 1 file changed, 72 insertions(+), 76 deletions(-) diff --git a/translations/README-kh.md b/translations/README-kh.md index 2800f08..08daceb 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -1039,56 +1039,55 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - ### 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) + - តេី unit testing ដំណេីរការយ៉ាងដូចម្តេច ? + - អ្វីជា mock objects ? + - អ្វីជា integration testing ? + - អ្វីជា dependency injection ? + - [ ] [Agile Software Testing with James Bach (វីដេអូ)](https://www.youtube.com/watch?v=SAhJf36_u5U) + - [ ] [Open Lecture by James Bach on Software Testing (វីដេអូ)](https://www.youtube.com/watch?v=ILkT_HV9DVU) + - [ ] [Steve Freeman - Test-Driven Development (that’s not what we meant) (វីដេអូ)](https://vimeo.com/83960706) - [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) - [ ] Dependency injection: - - [ ] [video](https://www.youtube.com/watch?v=IKD2-MAkXyQ) + - [ ] [slides](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 +- ### Scheduling (ការរៀបចំកាលវិភាគ) + - នៅក្នុង OS, តេីវាដំណេីរការយ៉ាងដូចម្តេច ? + - អាចប្រមូលបាន Operating System videos - ### String searching & manipulations - - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) - - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [Sedgewick - Suffix Arrays (វីដេអូ)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (វីដេអូ)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. Introduction to Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/n3ZpG/introduction-to-substring-search) - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) - [ ] [5. Rabin-Karp](https://www.coursera.org/learn/algorithms-part2/lecture/3KiqT/rabin-karp) - - [ ] [Search pattern in text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + - [ ] [Search pattern in text (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) - If you need more detail on this subject, see "String Matching" section in [Additional Detail on Some Subjects](#additional-detail-on-some-subjects). + ប្រសិនបើអ្នកត្រូវការព័ត៌មានលម្អិតបន្ថែមលើប្រធានបទនេះសូមមើលផ្នែក [Additional Detail on Some Subjects](#additional-detail-on-some-subjects). - ### 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 - - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - ចំណាំ មានការ Tries ផ្សេងៗគ្នា។ អ្នកខ្លះមានprefixes អ្នកខ្លះមិនមាន ហើយអ្នកខ្លះប្រើstring ជំនួសឱ្យbits ដើម្បីតាមដានផ្លូវ + - ខ្ញុំបានអានកូដប៉ុន្តែនឹងមិនអនុវត្តឡើយ + - [ ] [Sedgewick - Tries (3 វីដេអូ)](https://www.coursera.org/learn/algorithms-part2/home/week/4) - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) - [ ] [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) + - [ ] វីដេអូខ្លីៗ: + - [ ] [Introduction To Tries (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) + - [ ] [Performance Of Tries (វីដេអូ)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) + - [ ] [Implementing A Trie (វីដេអូ)](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/competitive-programming/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) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + - [ ] [Stanford Lecture (real world use case) (វីដេអូ)](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) - ### Floating Point Numbers - - [ ] 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) + - [ ] simple 8-bit: [Representation of Floating Point Numbers - 1 (វីដេអូ - មានកំហុសក្នុងការគណនា - សូមមើលការពិពណ៌នាជាវីដេអូ)](https://www.youtube.com/watch?v=ji3SfClm8TU) + - [ ] 32 bit: [IEEE754 32-bit floating point binary (វីដេអូ)](https://www.youtube.com/watch?v=50ZYcZebIec) - ### Unicode - [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html) @@ -1096,36 +1095,35 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - ### Endianness - [ ] [Big And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/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. + - [ ] [Big Endian Vs Little Endian (វីដេអូ)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [ ] [Big And Little Endian Inside/Out (វីដេអូ)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) + - និយាយបច្ចេកទេសខ្លាំងណាស់សម្រាប់ kernel devs. កុំបារម្ភប្រសិនបេីមិនយល់ទាំងស្រុង + - ពាក់កណ្តាលទីមួយគឺគ្រប់គ្រាន់ហើយ -- ### Networking - - **if you have networking experience or want to be a reliability engineer or operations engineer, expect questions** - - Otherwise, this is just good to know +- ### Networking (បណ្តាញ) + - ** ប្រសិនបើអ្នកមានបទពិសោធបណ្តាញឬចង់ក្លាយជាវិស្វករដែលអាចជឿជាក់បានឬវិស្វករប្រតិបត្តិការរំពឹងថានឹងមានសំណួរ ** + - បើមិនដូច្នោះទេនេះគ្រាន់តែជាការល្អដើម្បីដឹង - [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/computers-and-internet-code-org) - - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) - - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) - - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) - - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) - - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) - - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) - - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) - - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) - - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] [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 វីដេអូ) (វីដេអូ)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Subnetting Demystified - Part 5 CIDR Notation (វីដេអូ)](https://www.youtube.com/watch?v=t5xYI0jzOf4) - [ ] Sockets: - - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) - - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + - [ ] [Java - Sockets - Introduction (វីដេអូ)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming (វីដេអូ)](https://www.youtube.com/watch?v=G75vN2mnJeQ) ## System Design, Scalability, Data Handling -**You can expect system design questions if you have 4+ years of experience.** +** អ្នកអាចរំពឹងថានឹងមានសំណួររចនាប្រព័ន្ធប្រសិនបើអ្នកមានបទពិសោធ 4+ ឆ្នាំ។ ** -- 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 -- Considerations: +- Scalability និង System Designគឺជាប្រធានបទដែលមានប្រធានបទជាច្រេីន និង ធនធានជាច្រើន ដោយសារវាត្រូវការគិតច្រេីនពេលបង្កេីតប្រព័ន្ធដែលល្អ + រំពឹងថានឹងចំណាយពេលបន្តិចលើរឿងនេះ +- ការពិចារណា: - Scalability - Distill large data sets to single values - Transform one data set to another @@ -1138,28 +1136,28 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - simplicity and robustness - tradeoffs - performance analysis and optimization -- [ ] **START HERE**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] **ចាប់ផ្តើមនៅទីនេះ**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [ ] [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) +- [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (វីដេអូ)](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) +- [ ] [Transactions Across Datacenters (វីដេអូ)](https://www.youtube.com/watch?v=srOgpXECblk) - [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem/) - [ ] Consensus Algorithms: - - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) - - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] Paxos - [Paxos Agreement - Computerphile (វីដេអូ)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (វីដេអូ)](https://www.youtube.com/watch?v=P9Ydif5_qvE) - [ ] [Easy-to-read paper](https://raft.github.io/) - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: - You don't need all of these. Just pick a few that interest you. - - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) + - [ ] [Great overview (វីដេអូ)](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) @@ -1169,19 +1167,19 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - [ ] [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) + - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (វីដេអូ)](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) + - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (វីដេអូ)](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (វីដេអូ)](https://www.youtube.com/watch?v=H4vMcD7zKM0) - [ ] [The Importance of Algorithms](https://www.topcoder.com/community/competitive-programming/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 (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) + - [ ] [Scale at Facebook (2012), "Building for a Billion Users" (វីដេអូ)](https://www.youtube.com/watch?v=oodS71YtkGU) + - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(វីដេអូ)](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) + - [ ] [A look inside Etsy's scale and engineering culture with Jon Cowie (វីដេអូ)](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) @@ -1209,9 +1207,9 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - [ ] [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) + - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (វីដេអូ)](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](#video-series) section + - 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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) @@ -1679,22 +1677,20 @@ You're never really done. - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - **Red/black trees** - - These are a translation of a 2-3 tree (see below). - - 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) + - នេះជាការពិពណ៌នាអំពីដេីមឈេី 2-3 (មើលខាងក្រោម). + - ក្នុងការអនុវត្ត ៖ + Red–black trees ផ្តល់ជូនការធានាករណីអាក្រក់បំផុតសម្រាប់ពេលវេលាបញ្ចូល ពេលវេលាលុប និង ពេលវេលាស្វែងរក។ + វាមិនត្រឹមតែធ្វើឱ្យពួកគេល្អនៅក្នុងកម្មវិធីដែលត្រូវការពេលវេលាប៉ុណ្ណោះទេ ដូចជាកម្មវិធីជាក់ស្តែង + ប៉ុន្តែវាធ្វើឱ្យពួកគេប្លុកមានតម្លៃនៅក្នុងរចនាសម្ព័ន្ធទិន្នន័យផ្សេងទៀតដែលផ្តល់នូវការធានាករណីអាក្រក់បំផុត។ + ឧទាហរណ៍រចនាសម្ព័ន្ធទិន្នន័យជាច្រើនដែលត្រូវបានប្រើក្នុងធរណីមាត្រគណនាអាចផ្អែកលើដើមឈើ red–black និង Completely Fair Scheduler ដែលប្រើនៅក្នុងខឺណែលលីនុចបច្ចុប្បន្នប្រើដើមឈើred–black ។ + នៅក្នុងកំណែ ៨ នៃចាវ៉ា ការប្រមូលHashMapត្រូវបានកែប្រែហើយដើមឈើ Red-Black ត្រូវបានប្រើ ជំនួសឱ្យការប្រើLinkedListដើម្បីផ្ទុកធាតុដូចគ្នាបេះបិទទៅនឹងhashcodes មិនល្អ + - [Aduni - Algorithms - Lecture 4 (តំណភ្ជាប់លោតទៅចំណុចចាប់ផ្តើម) (វីដេអូ)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) + - [Aduni - Algorithms - Lecture 5 (វីដេអូ)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) - [Red-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/competitive-programming/tutorials/an-introduction-to-binary-search-and-red-black-trees/) - **2-3 search trees** - - In practice: + - ក្នុងការអនុវត្ត ៖ 2-3 trees មានការបញ្ចូលលឿនជាងមុននៅក្នុងការចំណាយនៃការស្វែងរកយឺត (ដោយសារកំពស់ខ្ពស់ជាងបេីប្រៀបទៅ AVL trees). - អ្នកអាចនឹងកំរប្រេី 2-3 tree ដោយសារតែការអនុវត្តរបស់វាទាក់ទងនឹងប្រភេទផ្សេងៗគ្នានៃថ្នាំង. ជំនួសវិញយេីងប្រេី Red Black trees. - [23-Tree Intuition និង និយមន័យ (វីដេអូ)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) From 18c01dffe1d323d365bd953721dcc083c3b252ae Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Sat, 7 Nov 2020 06:50:15 -0600 Subject: [PATCH 250/263] Update README-kh.md Translated until Final Review --- translations/README-kh.md | 198 +++++++++++++++++++------------------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/translations/README-kh.md b/translations/README-kh.md index 08daceb..0bef120 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -1156,9 +1156,9 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) - [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) - [ ] Scalability: - - You don't need all of these. Just pick a few that interest you. + - អ្នកមិនត្រូវការរបស់ទាំងអស់នេះទេ។ គ្រាន់តែជ្រើសរើសយកចំណាប់អារម្មណ៍មួយចំនួនដែលអ្នកចាប់អារម្មណ៍។ - [ ] [Great overview (វីដេអូ)](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) @@ -1176,7 +1176,7 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - [ ] [Scale at Facebook (2012), "Building for a Billion Users" (វីដេអូ)](https://www.youtube.com/watch?v=oodS71YtkGU) - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(វីដេអូ)](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) + - [វីដេអូ](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 (វីដេអូ)](https://www.youtube.com/watch?v=3vV4YiqKm1o) @@ -1209,31 +1209,31 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ - [ ] Twitter: - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (វីដេអូ)](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: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - មេីលបន្ធែម "Mining Massive Datasets" video series in the [វីដេអូ](#video-series) section +- [ ] ការអនុវត្តដំណើរការរចនាប្រព័ន្ធ៖ នេះគឺជាគំនិតមួយចំនួនដើម្បីព្យាយាមធ្វើការលើក្រដាសនីមួយៗដោយមានឯកសារមួយចំនួនស្តីពីវិធីដែលត្រូវបានដោះស្រាយនៅក្នុងពិភពពិត៖ + - ពិនិត្យឡើងវិញ: [The System Design Primer](https://github.com/donnemartin/system-design-primer) - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) - [cheat sheet](https://github.com/jwasham/coding-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: + 1. ស្វែងយល់ពីបញ្ហានិងវិសាលភាព + - កំណត់ករណីប្រើប្រាស់ដោយមានជំនួយពីអ្នកសម្ភាសន៍ + - ស្នើលក្ខណៈបន្ថែម + - ដកចេញលក្ខណៈដែលអ្នកសម្ភាសន៍គិតថាលើស + - សន្មតថាភាពអាចរកបានខ្ពស់ត្រូវបានទាមទារបន្ថែមជាករណីប្រើប្រាស់ + 2. គិតអំពីឧបសគ្គ៖ + - សួរថាតើមានប៉ុន្មានសំណើរប៉ុន្មានក្នុងមួយខែ + - សួរថាតើមានសំណូមពរប៉ុន្មានក្នុងមួយវិនាទី (ពួកគេអាចស្ម័គ្រចិត្តឬធ្វើឱ្យអ្នកធ្វើគណនា) + - ប៉ាន់ស្មានអាននឹងសរសេរជាភាគរយ + - ចងចាំបទបញ្ជា ៨០/២០ ក្នុងពេលធ្វើការប៉ាន់ស្មាន + - តើទិន្នន័យប៉ុន្មានត្រូវបានសរសេរក្នុងមួយវិនាទី + - ការផ្ទុកសរុបត្រូវការក្នុងរយៈពេល ៥ ឆ្នាំ + - តើទិន្នន័យត្រូវអានប៉ុន្មានដងក្នុងមួយវិនាទី + 3. ការរចនាអរូបី៖ + - ស្រទាប់ (សេវាកម្ម ទិន្នន័យ ឃ្លាំងសម្ងាត់ (cache) ) + - ហេដ្ឋារចនាសម្ព័ន្ធ៖ ផ្ទុកតុល្យភាព(load balacing), សារ + - ទិដ្ឋភាពទូទៅរដុបនៃក្បួនដោះស្រាយគន្លឹះណាមួយដែលជំរុញសេវាកម្ម + - ពិចារណាការរាំងស្ទះនិងកំណត់ដំណោះស្រាយ + - លំហាត់: - [Design a CDN network: old article](https://kilthub.cmu.edu/articles/Globally_distributed_content_delivery/6605972) - [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) @@ -1480,34 +1480,34 @@ You're never really done. technologies and algorithms, so you'll have a bigger toolbox. - ### Compilers - - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) - - [Harvard 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 a Compiler Works in ~1 minute (វីដេអូ)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard CS50 - Compilers (វីដេអូ)](https://www.youtube.com/watch?v=CSZLNYF4Klo) + - [C++ (វីដេអូ)](https://www.youtube.com/watch?v=twodd1KFfGk) + - [Understanding Compiler Optimization (C++) (វីដេអូ)](https://www.youtube.com/watch?v=FnGCDLhaxKU) - ### Emacs and vi(m) - - Familiarize yourself with a unix-based code editor + - រៀនពី 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) + - [Editing With vim 01 - Installation, Setup, and The Modes (វីដេអូ)](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) + - ឈុត ៤ (វីដេអូ): + - [The vi/vim editor - មេរៀន 1](https://www.youtube.com/watch?v=SI8TeVMX8pk) + - [The vi/vim editor - មេរៀន 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE) + - [The vi/vim editor - មេរៀន 3](https://www.youtube.com/watch?v=ZYEccA_nMaI) + - [The vi/vim editor - មេរៀន 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): + - [Basics Emacs Tutorial (វីដេអូ)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) + - ឈុត ៣ (វីដេអូ): - [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) + - [Evil Mode: Or, How I Learned to Stop Worrying and Love Emacs (វីដេអូ)](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) + - [(maybe) Org Mode In Depth: Managing Structure (វីដេអូ)](https://www.youtube.com/watch?v=nsGYet02bEk) - ### Unix command line tools - - I filled in the list below from good tools. + - ខ្ញុំបានបំពេញក្នុងបញ្ជីខាងក្រោមពីឧបករណ៍ល្អ ៗ. - bash - cat - grep @@ -1520,15 +1520,15 @@ You're never really done. - [strace](https://en.wikipedia.org/wiki/Strace) - [tcpdump](https://danielmiessler.com/study/tcpdump/) -- ### Information theory (videos) +- ### Information theory (វីដេអូ) - [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory) - - More about Markov processes: + - បន្ថែមទៀតអំពី 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 + - សូមមើលបន្ថែមនៅ MIT 6.050J Information និង Entropy series -- ### Parity & Hamming Code (videos) +- ### Parity & Hamming Code (វីដេអូ) - [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) - [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M) - Hamming Code: @@ -1537,31 +1537,31 @@ You're never really done. - [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) + - សូមមើលវីដេអូខាងក្រោមផង + - ត្រូវប្រាកដថាមើលវីដេអូទ្រឹស្តីព័ត៌មានជាមុន + - [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (វីដេអូ)](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): + - ត្រូវប្រាកដថាមើលវីដេអូទ្រឹស្តីព័ត៌មានជាមុន + - Computerphile (វីដេអូ): - [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) + - [វីដេអូ Compressor Head](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) - [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s) - ### Computer Security - - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [MIT (23 វីដេអូ)](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) @@ -1576,29 +1576,29 @@ You're never really done. - [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) - ### Garbage collection - - [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI) + - [GC in Python (វីដេអូ)](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) + - [Deep Dive Python: Garbage Collection in CPython (វីដេអូ)](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) + - [Efficient Python for High Performance Parallel Computing (វីដេអូ)](https://www.youtube.com/watch?v=uY85GkaYzBk) - ### Messaging, Serialization, and Queueing Systems - [Thrift](https://thrift.apache.org/) - - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) + - [ការបង្រៀន](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) + - [ការបង្រៀន](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 101 for Java Developers (វីដេអូ)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) - [Redis](http://redis.io/) - - [Tutorial](http://try.redis.io/) + - [ការបង្រៀន](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 Started](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) - [ActiveMQ](http://activemq.apache.org/) @@ -1608,20 +1608,20 @@ You're never really done. - ### 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) + - [A* Pathfinding Tutorial (វីដេអូ)](https://www.youtube.com/watch?v=KNXfSOx4eEE) + - [A* Pathfinding (E01: algorithm explanation) (វីដេអូ)](https://www.youtube.com/watch?v=-L-WgKMFuhE) - ### Fast Fourier Transform - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-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) + - [What is the Fourier Transform? (វីដេអូ)](https://www.youtube.com/watch?v=Xxut2PN-V8Q) + - [Divide & Conquer: FFT (វីដេអូ)](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 filterមួយដែលមាន m bits និង មុខងារhasing k, ទាំងការបញ្ចូលនិងការធ្វើតេស្តសមាជិកភាពគឺO(k) - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) - - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](https://www.youtube.com/watch?v=qBTdukbzc78) + - [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/) @@ -1629,52 +1629,52 @@ You're never really done. - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) - ### Locality-Sensitive Hashing - - Used to determine the similarity of documents - - The opposite of MD5 or SHA which are used to determine if 2 documents/strings are exactly the same + - ប្រើដើម្បីកំណត់ភាពស្រដៀងគ្នានៃឯកសារ + - ការផ្ទុយមកពី MD5 ឬ SHA ដែលត្រូវបានប្រើដើម្បីកំណត់ថាតើឯកសារ ឬ ខ្សែអក្សរចំនួន ២ ពិតជាដូចគ្នា - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) - ### van Emde Boas Trees - - [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) + - [Divide & Conquer: van Emde Boas Trees (វីដេអូ)](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://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) - ### Balanced search trees - - Know at 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 + - ស្គាល់យ៉ាងហោចណាស់មែកធាងគោលពីរដែលមានតុល្យភាព (balanced binary tree) (និងដឹងពីរបៀបដែលវាត្រូវបានអនុវត្ត)៖ + - “ ក្នុងចំណោមដើមឈើស្វែងរកដែលមានតុល្យភាពដើម (balanced binary tree) AVL និងដើមឈើ ២/៣មិនពេញនិយមទេ៕ red-black trees ហាក់ដូចជាមានប្រជាប្រិយភាពជាង។ + រចនាសម្ពន្ធ័ទិន្នន័យរៀបចំដោយខ្លួនឯងដែលគួរឱ្យចាប់អារម្មណ៍ជាពិសេសគឺមែកឈើsplay tree ដែលប្រើការបង្វិល + ដើម្បីផ្លាស់ទីកូនសោណាដែលបានចូលទៅកាន់ឬស។ "- ស្គីណា (Skiena) + - ក្នុងចំណោមទាំងនេះខ្ញុំបានជ្រើសរើសអនុវត្តមែកឈើ splay tree ។ ពីអ្វីដែលខ្ញុំបានអានអ្នកនឹងមិនអនុវត្តទេនៅមែកធាងស្វែងរកមានតុល្យភាពនៅក្នុងបទសម្ភាសន៍របស់អ្នក។ ប៉ុន្តែខ្ញុំចង់បង្ហាញលេខកូដ + ហើយប្រឈមមុខនឹងវា ។ ខ្ញុំបានអានលេខកូដred-black treeច្រើន + - Splay tree: បញ្ចូល, ស្វែងរក, លុប + ប្រសិនបើអ្នកអនុវត្តដើមឈើក្រហម / ខ្មៅសាកល្បងទាំងនេះ៖ + - មុខងារស្វែងរក និង ការបញ្ចូល ការរំលងលុប + - ខ្ញុំចង់រៀនបន្ថែមទៀតអំពី B-Tree ចាប់តាំងពីវាត្រូវបានគេប្រើយ៉ាងទូលំទូលាយជាមួយសំណុំទិន្នន័យធំ ៗ - [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) + - ក្នុងការអនុវត្ត ៖ + តាមអ្វីដែលខ្ញុំអាចប្រាប់បាន អ្វីៗទាំងនេះមិនត្រូវបានគេប្រើច្រើនទេនៅក្នុងការអនុវត្តប៉ុន្តែខ្ញុំអាចមើលឃើញកន្លែងដែលពួកគេប្រីវា៖ + AVL Tree គឺជារចនាសម្ព័នមួយផ្សេងទៀតដែលគាំទ្រដល់ការស្វែងរក (បញ្ចូល n) ការបញ្ចូល និង ការដកយកចេញ។ វាកាន់តែម៉ឺងម៉ាត់ + មានតុល្យភាពជាងដើមឈើខ្មៅក្រហម (red-black tree) ដែលមានការបញ្ចូលយឺត និង ដកចេញយឺត ប៉ុន្តែការទាញមកវិញលឿនជាងមុន។ នេះធ្វើឱ្យវា + មានភាពទាក់ទាញសម្រាប់រចនាសម្ព័ន្ធទិន្នន័យដែលអាចត្រូវបានសាងសង់ម្តងហើយផ្ទុកដោយមិនមានការកសាងឡើងវិញដូចជាភាសា + វចនានុក្រម (ឬវចនានុក្រមកម្មវិធីដូចជា opcodes របស់ assembler ឬ interpreter) + + - [MIT AVL Trees / AVL Sort (វីដេអូ)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) + - [AVL Trees (វីដេអូ)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) + - [AVL Tree Implementation (វីដេអូ)](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://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - ក្នុងការអនុវត្ត ៖ + Splay trees ត្រូវបានប្រើជាធម្មតាក្នុងការអនុវត្ត caches, memory allocators, routers, garbage collectors, + data compression, ropes (ការជំនួស string ដែលប្រើសម្រាប់ long text strings), ក្នុង Windows NT (ក្នុង virtual memory, + networking និង file system code) ជាដេីម + - [CS 61B: Splay Trees (វីដេអូ)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) - MIT Lecture: Splay Trees: - - Gets very mathy, but watch the last 10 minutes for sure. - - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + - វាមានគណិតច្រេីន តែអាចមេីល១០ នាទីចុងក្រោយបាន + - [វីដេអូ](https://www.youtube.com/watch?v=QnPl_Y6EqMo) - **Red/black trees** - នេះជាការពិពណ៌នាអំពីដេីមឈេី 2-3 (មើលខាងក្រោម). From cd63058e5ed536ca8597943aced99cd8b5bc56fb Mon Sep 17 00:00:00 2001 From: Amr Hosni Date: Sat, 14 Nov 2020 02:11:29 +0200 Subject: [PATCH 251/263] adding algorithm implementation link --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 4518097..db3269a 100644 --- a/README.md +++ b/README.md @@ -1954,6 +1954,11 @@ Sit back and enjoy. "Netflix and skill" :P - [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) +## Algorithms implementation + +- [Multiple Algorithms implementation by Princeton University)](https://algs4.cs.princeton.edu/code) + + ## Papers - [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) From 10fb2e2e7b061ed2010f959dfa9df07b8b77b050 Mon Sep 17 00:00:00 2001 From: Vortana Say Date: Tue, 17 Nov 2020 10:57:52 -0600 Subject: [PATCH 252/263] Update README-kh.md finished the translation --- translations/README-kh.md | 208 ++++++++++++++++++-------------------- 1 file changed, 101 insertions(+), 107 deletions(-) diff --git a/translations/README-kh.md b/translations/README-kh.md index 0bef120..0b01c46 100644 --- a/translations/README-kh.md +++ b/translations/README-kh.md @@ -1245,84 +1245,80 @@ Graphs អាចត្រូវបានប្រើដើម្បីបង្ --- -## Final Review +## Final Review (ការពិនិត្យចុងក្រោយ) - This section will have shorter videos that you can watch pretty quickly to review most of the important concepts. - It's nice if you want a refresher often. + ផ្នែកនេះនឹងមានវីដេអូខ្លីៗដែលអ្នកអាចមើលបានយ៉ាងរហ័សដើម្បីពិនិត្យឡើងវិញនូវគោលគំនិតសំខាន់ៗ។ វាល្អណាស់ប្រសិនបើអ្នកចង់ធ្វើឱ្យស្រស់ជាងមុន។ -- [ ] 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) -- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) -- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) +- [ ] Series of 2-3 minutes short subject videos (23 វីដេអូ) + - [វីដេអូ](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) +- [ ] Series of 2-5 minutes short subject videos - Michael Sambol (18 វីដេអូ): + - [វីដេអូ](https://www.youtube.com/channel/UCzDJwLWoYCUQowF_nG3m5OQ) +- [ ] [វីដេអូ Sedgewick - Algorithms I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [វីដេអូ Sedgewick - Algorithms II](https://www.coursera.org/learn/algorithms-part2) --- -## Coding Question Practice +## Coding Question Practice (ការអនុវត្តសំណួរសរសេរកូដ) -Now that you know all the computer science topics above, it's time to practice answering coding problems. +ឥឡូវអ្នកដឹងពីប្រធានបទវិទ្យាសាស្ត្រកុំព្យូទ័រទាំងអស់ខាងលើ វាដល់ពេលត្រូវអនុវត្តការឆ្លើយសំនួរបញ្ហា។ -**Coding question practice is not about memorizing answers to programming problems.** +**ការអនុវត្តសំណួរសរសេរកូដមិនមែនអំពីការទន្ទេញចម្លើយចំពោះបញ្ហាសរសេរកម្មវិធីទេ។** -Why you need to practice doing programming problems: -- Problem recognition, and where the right data structures and algorithms fit in -- Gathering requirements for the problem -- Talking your way through the problem like you will in the interview -- Coding on a whiteboard or paper, not a computer -- Coming up with time and space complexity for your solutions -- Testing your solutions +មូលហេតុដែលអ្នកត្រូវអនុវត្តធ្វើបញ្ហាសរសេរកម្មវិធី៖ +- ការទទួលស្គាល់បញ្ហានិងកន្លែងដែលរចនាសម្ព័ន្ធទិន្នន័យត្រឹមត្រូវនិងក្បួនដោះស្រាយត្រូវគ្នា +- ការប្រមូលផ្តុំតម្រូវការសម្រាប់បញ្ហា +- និយាយពីបញ្ហាដូចជាអ្នកនឹងជួបអ្នកសម្ភាសន៍ដែរ +- សរសេរកូដនៅលើក្តារខៀនឬក្រដាសមិនមែនកុំព្យូទ័រទេ +- មានពេលវេលានិងចន្លោះស្មុគស្មាញសម្រាប់ដំណោះស្រាយរបស់អ្នក +- សាកល្បងតេសដំណោះស្រាយរបស់អ្នក -There is a great intro for methodical, communicative problem solving in an interview. You'll get this from the programming -interview books, too, but I found this outstanding: +មានការណែនាំដ៏ល្អសំរាប់វិធីសាស្រ្តដោះស្រាយបញ្ហាដែលមានលក្ខណៈជាបញ្ហាក្នុងការសំភាសន៍។ អ្នកនឹងទទួលបានពីកម្មវិធីសៀវភៅសំភាសន៍ផងដែរប៉ុន្តែខ្ញុំបានរកឃើញថាលេចធ្លោនេះ៖ [Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) -No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a -large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. I use a pencil -and eraser. +គ្មានក្តារខៀននៅផ្ទះទេ? ខ្ញុំជាមនុស្សចំលែកនិងមានក្តារខៀនធំ។ ជំនួសឱ្យក្តារខៀន សូមរើសយកផ្ទាំងគំនូរធំ ៗ ពីហាងសិល្បៈ។ អ្នកអាចអង្គុយលើសាឡុងនិងអនុវត្តបាន។ នេះគឺជា "សាឡុងក្តារចុច" របស់ខ្ញុំ។ +ខ្ញុំបានបន្ថែមប៊ិចនៅក្នុងរូបថតសម្រាប់ខ្នាត។ ប្រសិនបើអ្នកប្រើប៊ិចអ្នកនឹងចង់លុបចោល។ ឆាប់រញ៉េរញ៉ៃ។ ខ្ញុំប្រើខ្មៅដៃនិងជ័រលុប។ ![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) -Supplemental: +បន្ថែម: - [Mathematics for Topcoders](https://www.topcoder.com/community/competitive-programming/tutorials/mathematics-for-topcoders/) - [Dynamic Programming – From Novice to Advanced](https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/) - [MIT Interview Materials](https://web.archive.org/web/20160906124824/http://courses.csail.mit.edu/iap/interview/materials.php) - [Exercises for getting better at a given language](http://exercism.io/languages) -**Read and Do Programming Problems (in this order):** +**អាននិងធ្វើបញ្ហាកម្មវិធី (តាមលំដាប់លំដោយ):** - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - answers in C, C++ and Java + - ចម្លើយជា C, C++ និង Java - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - answers in Java + - ចម្លើយជា Java -See [Book List above](#book-list) +មេីលសៀភៅ [Book List above](#book-list) ## 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. +នៅពេលដែលអ្នកបានរៀនខួរក្បាលរបស់អ្នកហើយ សូមដាក់ខួរក្បាលទាំងនោះឱ្យដំណើរការ។ +យកបញ្ហាប្រឈមនៃការសរសេរកូដជារៀងរាល់ថ្ងៃតាមដែលអ្នកអាចធ្វើបាន។ - [How to Find a Solution](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-find-a-solution/) - [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/community/competitive-programming/tutorials/how-to-dissect-a-topcoder-problem-statement/) -Coding Interview Question Videos: -- [IDeserve (88 videos)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +វីឌីអូសំភាសន៍ការសរសេរកូដ: +- [IDeserve (88 វីដេអូ)](https://www.youtube.com/watch?v=NBcqBddFbZw&list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) - [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) - Super for walkthroughs of problem solutions -- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) - - Good explanations of solution and the code - - You can watch several in a short time +- [Nick White - LeetCode Solutions (187 វីដេអូ)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - ការពន្យល់ល្អអំពីដំណោះស្រាយនិងលេខកូដ + - អ្នកអាចមើលបានច្រើនក្នុងរយៈពេលដ៏ខ្លី - [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) -Challenge sites: +គេហទំព័រប្រកួតប្រជែង: - [LeetCode](https://leetcode.com/) - - My favorite coding problem site. It's worth the subscription money for the 1-2 months you'll likely be preparing + - គេហទំព័របញ្ហាសរសេរកូដដែលខ្ញុំចូលចិត្តបំផុត។ វាមានតម្លៃសម្រាប់ការជាវប្រាក់សម្រាប់រយៈពេល 1-2 ខែដែលអ្នកទំនងជានឹងរៀបចំ - [LeetCode solutions from FisherCoder](https://github.com/fishercoder1534/Leetcode) - - See Nick White Videos above for short code-throughs + - សូមមើលវីដេអូស Nick ខាងលើសម្រាប់លេខកូដខ្លី - [HackerRank](https://www.hackerrank.com/) - [TopCoder](https://www.topcoder.com/) - [InterviewCake](https://www.interviewcake.com/) @@ -1331,7 +1327,7 @@ Challenge sites: - [Project Euler (math-focused)](https://projecteuler.net/index.php?section=problems) - [Code Exercises](https://code-exercises.com) -Language-learning sites, with challenges: +គេហទំព័រសិក្សាភាសាដែលមានបញ្ហាប្រឈម៖ - [Codewars](http://www.codewars.com) - [Codility](https://codility.com/programmers/) - [HackerEarth](https://www.hackerearth.com/) @@ -1348,112 +1344,112 @@ Mock Interviews: - [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - anonymous algorithmic/systems design interviews with senior engineers from FAANG anonymously. -## Once you're closer to the interview +## នៅពេលអ្នកជិតដល់ការសម្ភាសន៍ -- Cracking The Coding Interview Set 2 (videos): +- Cracking The Coding Interview Set 2 (វីដេអូ): - [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) -## Your Resume +## ប្រវត្តិរូបសង្ខេបរបស់អ្នក -- See Resume prep items in Cracking The Coding Interview and back of Programming Interviews Exposed +- មើលបន្តការរៀបចំរបស់នៅក្នុង Cracking The Coding Interview និង back of Programming Interviews Exposed -## Be thinking of for when the interview comes +## ត្រូវគិតអំពីពេលសម្ភាសន៍មកដល់ -Think of about 20 interview questions you'll get, along with the lines of the items below. Have 2-3 answers for each. -Have a story, not just data, about something you accomplished. +គិតអំពីសំណួរសំភាសន៍ចំនួន 20 ដែលអ្នកនឹងទទួលបានរួមជាមួយធាតុខាងក្រោម។ មានចម្លើយ ២-៣ សម្រាប់ចម្លើយនីមួយៗ។ +មានរឿងរ៉ាវមិនមែនគ្រាន់តែទិន្នន័យអំពីអ្វីដែលអ្នកបានសំរេចនោះទេ។ -- 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 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]? +- ហេតុអ្វីបានជាអ្នកចង់បានការងារនេះ? +- តើអ្វីជាបញ្ហាដ៏លំបាកដែលអ្នកបានដោះស្រាយ? +- បញ្ហាធំ ៗ ដែលប្រឈមមុខ? +- ការរចនាម៉ូដណាដែលល្អបំផុត / អាក្រក់បំផុត? +- គំនិតសម្រាប់កែលម្អផលិតផលដែលមានស្រាប់ +- តើអ្នកធ្វើការបានល្អបំផុតដោយរបៀបណាក្នុងនាមជាបុគ្គលនិងជាក្រុម? +- ជំនាញឬបទពិសោធន៍ណាមួយរបស់អ្នកដែលជាទ្រព្យសម្បត្តិនៅក្នុងតួនាទីហើយហេតុអ្វី? +- តើអ្វីដែលអ្នកពេញចិត្តបំផុតនៅ [ការងារ x / គម្រោង y]? +- តើអ្វីជាបញ្ហាប្រឈមដ៏ធំបំផុតដែលអ្នកបានប្រឈមនៅ [ការងារ x / គម្រោង y]? +- តើអ្វីទៅជាកំហុសដ៏លំបាកបំផុតដែលអ្នកបានជួបប្រទះនៅ [ការងារ x / គម្រោង y]? +- តើអ្នកបានរៀនអ្វីខ្លះនៅ [ការងារ x / គំរោង y]? +តើអ្នកនឹងធ្វើអ្វីបានល្អជាងនៅ [ការងារ x / គំរោង y]? -## Have questions for the interviewer +## Have questions for the interviewer (មានសំណួរសម្រាប់អ្នកសម្ភាសន៍) - Some of mine (I already may know answer to but want their opinion or team perspective): + សំនួរខ្លះរបស់ខ្ញុំ (ខ្ញុំប្រហែលជាដឹងចម្លើយរួចហើយប៉ុន្តែចង់បានយោបល់ឬទស្សនៈក្រុមរបស់ពួកគេ) + +- តើក្រុមរបស់អ្នកមានទំហំប៉ុនណា? +- តើវដ្ដ dev របស់អ្នកមើលទៅដូចអ្វី? តើអ្នកធ្វើទឹកជ្រោះទឹកពន្លក / ឆាប់រហ័សទេ? +- តើប្រញាប់ប្រញាល់ដល់ពេលវេលាកំណត់ទេ? ឬមានភាពបត់បែន? +- តើការសម្រេចចិត្តត្រូវបានធ្វើឡើងនៅក្នុងក្រុមរបស់អ្នកយ៉ាងដូចម្តេច? +- តើអ្នកមានការប្រជុំប៉ុន្មានដងក្នុងមួយសប្តាហ៍? +- តើអ្នកមានអារម្មណ៍ថាបរិយាកាសការងាររបស់អ្នកជួយអ្នកក្នុងការផ្តោតអារម្មណ៍ទេ? +- តើអ្នកកំពុងធ្វើអ្វី? +- តើអ្នកចូលចិត្តអ្វី? +- ជីវិតការងារដូចជាអ្វី? +- តើការងារ / ជីវិតមានតុល្យភាពយ៉ាងដូចម្តេច? -- How large is your team? -- What does 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? -- How is work/life balance? +## Once You've Got The Job (នៅពេលដែលអ្នកមានការងារធ្វើ) -## Once You've Got The Job +សូមអបអរសាទរ! -Congratulations! +បន្តរៀន។ -Keep learning. - -You're never really done. +រៀនមិនចេះចប់។ --- ***************************************************************************************************** ***************************************************************************************************** - Everything below this point is optional. - By studying these, you'll get greater exposure to more CS concepts, and will be better prepared for - any software engineering job. You'll be a much more well-rounded software engineer. + អ្វីគ្រប់យ៉ាងនៅខាងក្រោមចំណុចនេះគឺស្រេចចិត្តបេីចង់មេីល។ + តាមរយៈការសិក្សាទាំងនេះ អ្នកនឹងទទួលបានការយល់ដឹងកាន់តែច្រើនពីគំនិតវិទ្យាសាស្ត្រកុំព្យូទ័រ ហើយអ្នកនឹងត្រូវបានរៀបចំខ្លួនឱ្យកាន់តែប្រសើរ + ការងារវិស្វកម្មផ្នែកទន់ណាមួយ។ អ្នកនឹងក្លាយជាវិស្វករផ្នែកទន់ដែលមានចំេនះពេញលេញ។ ***************************************************************************************************** ***************************************************************************************************** --- -## Additional Books +## Additional Books (សៀវភៅបន្ថែម) - These are here so you can dive into a topic you find interesting. + ទាំងនេះគឺនៅទីនេះដូច្នេះអ្នកអាចចូលទៅក្នុងប្រធានបទដែលអ្នកចាប់អារម្មណ៍។ - [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) - - An oldie but a goodie + - ចាស់តែល្អ - [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) - - A modern option + - ជម្រើសទំនើប - [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) - [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) - - A gentle introduction to design patterns + - ការណែនាំ design patterns - [Design Patterns: Elements of Reusable Object-Oriente​d Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) - AKA the "Gang Of Four" book, or GOF - The canonical design patterns book - [UNIX and Linux System Administration Handbook, 5th Edition](https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/) - [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview - - This book has 2 parts: - - Class textbook on data structures and algorithms - - Pros: - - Is a good review as any algorithms textbook would be - - Nice stories from his experiences solving problems in industry and academia - - Code examples in C - - Cons: + - ជាការពិនិត្យឡើងវិញនិងការទទួលស្គាល់បញ្ហា + - ផ្នែកកាតាឡុកក្បួនដោះស្រាយគឺហួសពីវិសាលភាពនៃការពិបាកដែលអ្នកនឹងជួបសម្ភាសន៍ + - សៀវភៅនេះមានពីរផ្នែក៖ + - សៀវភៅសិក្សាថ្នាក់ស្តីពីរចនាសម្ព័ន្ធទិន្នន័យនិងក្បួនដោះស្រាយ + - គុណសម្បត្តិ: + - គឺជាការពិនិត្យឡើងវិញដ៏ល្អមួយដែលជាសៀវភៅក្បួនដោះស្រាយណាមួយ + - រឿងល្អ ៗ ពីបទពិសោធន៍របស់គាត់ដោះស្រាយបញ្ហានៅក្នុងឧស្សាហកម្មនិងបណ្ឌិតសភា + - ឧទាហរណ៍កូដនៅក្នុង C + - គុណវិបត្តិ: - Can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - Chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - Don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material - Algorithm catalog: - - This is the real reason you buy this book - - About to get to this part. Will update here once I've made my way through it - - Can rent it on kindle - - 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/) + - នេះជាហេតុផលពិតប្រាកដដែលអ្នកទិញសៀវភៅនេះ + - ហៀបនឹងចូលដល់ផ្នែកនេះ។ នឹងធ្វើបច្ចុប្បន្នភាពនៅទីនេះនៅពេលដែលខ្ញុំបានឆ្លងកាត់វា + - អាចជួលវានៅលើ Kindle + - ចម្លើយ: + - [ដំណោះស្រាយ](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) + - [ដំណោះស្រាយ](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) - [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is somewhat outdated, but it's a terrific resource for understanding a computer in brief + - សៀវភៅនេះត្រូវបានបោះពុម្ពផ្សាយក្នុងឆ្នាំ ២០០៤ ហើយវាហួសសម័យបន្តិចប៉ុន្តែវាជាធនធានដ៏អស្ចារ្យសម្រាប់ការស្វែងយល់អំពីកុំព្យូទ័រដោយសង្ខេប - The author invented [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly), so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like - - These chapters are worth the read to give you a nice foundation: + - ជំពូកទាំងនេះពិតជាមានប្រយោជន៍ក្នុងការអានដើម្បីផ្តល់ឱ្យអ្នកនូវគ្រឹះដ៏ល្អមួយ: - Chapter 2 - Numeric Representation - Chapter 3 - Binary Arithmetic and Bit Operations - Chapter 4 - Floating-Point Representation @@ -1464,20 +1460,18 @@ You're never really done. - Chapter 10 - Instruction Set Architecture - Chapter 11 - Memory Architecture and Organization - [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently + - **សំខាន់ៈ** ការអានសៀវភៅនេះនឹងមានតម្លៃតែប៉ុណ្ណោះ។ សៀវភៅនេះគឺជាការពិនិត្យឡើងវិញដ៏អស្ចារ្យនៃក្បួនដោះស្រាយនិងរចនាសម្ព័ន្ធទិន្នន័យប៉ុន្តែនឹងមិនបង្រៀនអ្នកពីរបៀបសរសេរកូដល្អទេ។ អ្នកត្រូវតែចេះសរសេរកូដដំណោះស្រាយប្រកបដោយប្រសិទ្ធភាព - AKA CLR, sometimes CLRS, because Stein was late to the game - [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) - For a richer, more up-to-date (2017), but longer treatment - [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture + - ជំពូកដំបូង បង្ហាញនូវដំណោះស្រាយដ៏ឆ្លាតវៃចំពោះបញ្ហាសរសេរកម្មវិធី (ខ្លះចាស់ដោយប្រើខ្សែអាត់ទិន្នន័យ) ប៉ុន្តែនោះគ្រាន់តែជាការណែនាំប៉ុណ្ណោះ។ សៀវភៅណែនាំស្តីពីការរចនាកម្មវិធីនិងស្ថាបត្យកម្ម ## Additional Learning - I added them to help you become a well-rounded software engineer, and to be aware of certain - technologies and algorithms, so you'll have a bigger toolbox. + ខ្ញុំបានបន្ថែមពួកគេដើម្បីជួយអ្នកឱ្យក្លាយជាវិស្វករផ្នែកទន់ដែលមានមានចំេណះពេញលេញហើយត្រូវដឹងច្បាស់បច្ចេកវិទ្យានិងក្បួនដោះស្រាយដូច្នេះអ្នកនឹងមានប្រអប់ឧបករណ៍ធំជាងមុន។ - ### Compilers - [How a Compiler Works in ~1 minute (វីដេអូ)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) From ffb9f9db3951dcfa6dbd8fefa47c5c836e5a8dd9 Mon Sep 17 00:00:00 2001 From: strNophix Date: Tue, 24 Nov 2020 12:53:53 +0100 Subject: [PATCH 253/263] Removed unavailable archive.org resources --- README.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/README.md b/README.md index db3269a..bb13130 100644 --- a/README.md +++ b/README.md @@ -509,12 +509,8 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] Description: - [Arrays (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF) - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (Start watching from 15m 32s) - - [Basic Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_04-basicArrays.mp4) - - [Multi-dim (video)](https://archive.org/details/0102WhatYouShouldKnow/02_05-multidimensionalArrays.mp4) - [Dynamic Arrays (video)](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV) - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) - - [Jagged Arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/02_06-jaggedArrays.mp4) - - [Resizing arrays (video)](https://archive.org/details/0102WhatYouShouldKnow/03_01-resizableArrays.mp4) - [ ] 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 @@ -577,14 +573,11 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - ### Stack - [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ) - - [ ] [Using Stacks Last-In First-Out (video)](https://archive.org/details/0102WhatYouShouldKnow/05_01-usingStacksForLast-inFirst-out.mp4) - [ ] Will not implement. Implementing with array is trivial - ### Queue - - [ ] [Using Queues First-In First-Out(video)](https://archive.org/details/0102WhatYouShouldKnow/05_03-usingQueuesForFirst-inFirst-out.mp4) - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) - - [ ] [Priority Queues (video)](https://archive.org/details/0102WhatYouShouldKnow/05_04-priorityQueuesAndDeques.mp4) - [ ] 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) @@ -611,10 +604,6 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) - [ ] Online Courses: - - [ ] [Understanding Hash Functions (video)](https://archive.org/details/0102WhatYouShouldKnow/06_02-understandingHashFunctions.mp4) - - [ ] [Using Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_03-usingHashTables.mp4) - - [ ] [Supporting Hashing (video)](https://archive.org/details/0102WhatYouShouldKnow/06_04-supportingHashing.mp4) - - [ ] [Language Support Hash Tables (video)](https://archive.org/details/0102WhatYouShouldKnow/06_05-languageSupportForHashTables.mp4) - [ ] [Core Hash Tables (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-hash-tables-m7UuP) - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/4) - [ ] [Phone Book Problem (video)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP) From f6d0a416f762cc3649e8ab2bc96a2683f37857cd Mon Sep 17 00:00:00 2001 From: John Washam Date: Sat, 28 Nov 2020 10:14:24 -0800 Subject: [PATCH 254/263] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb13130..92161f1 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,8 @@ - [Português Brasileiro](translations/README-ptbr.md) - [Polish](translations/README-pl.md) - [繁體中文](translations/README-tw.md) +- [Japanese (日本語)](translations/README-ja.md) +- [Russian](translations/README-ru.md) @@ -33,7 +35,6 @@ - [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) - [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) - [French](https://github.com/jwasham/coding-interview-university/issues/89) -- [Russian](https://github.com/jwasham/coding-interview-university/issues/87) - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) - [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) - [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) @@ -42,7 +43,6 @@ - [Greek](https://github.com/jwasham/coding-interview-university/issues/166) - [Italian](https://github.com/jwasham/coding-interview-university/issues/170) - [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) -- [Japanese (日本語)](https://github.com/jwasham/coding-interview-university/issues/257) From ebfc5bdcb75f062f706a1088dd00e5f25814e1cf Mon Sep 17 00:00:00 2001 From: Williams Date: Thu, 10 Dec 2020 01:53:56 -0300 Subject: [PATCH 255/263] correct spelling mistake --- translations/README-es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-es.md b/translations/README-es.md index 0339e28..01eef11 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -172,7 +172,7 @@ Si desea ser un Ingeniero de Escalabilidad/Seguridad o un Ingeniero de Sistemas, Cuando comencé este proyecto, no sabía la diferencia entre un stack y un heap, no conocía la notación Big-O, nada acerca de árboles, ni cómo sacar la transversal de una gráfica. Si tenía que programar un algoritmo de clasificación, puedo decir que no hubiera sido muy bueno. Cada estructura de datos que había utilizado estaba incorporada al lenguaje, y yo no sabía cómo funcionaban realmente. Yo nunca tuve que manejar la memoria a menos que un proceso que yo estaba corriendo diera un error de “out of memory”, y tenía que encontrar una alternativa. He usado pocos arreglos de varias dimensiones en mi vida y miles de arreglos asociativos, pero nunca he creado estructuras de datos desde cero. -Pero después de pasar por todo este plan de estudios tengo mucha confianza de que seré contratado. Me toará meses. Si mucho de esto te resulta familiar entonces te tomará mucho menos tiempo. +Pero después de pasar por todo este plan de estudios tengo mucha confianza de que seré contratado. Me tomará meses. Si mucho de esto te resulta familiar entonces te tomará mucho menos tiempo. Es un plan largo, puede tome unos meses; pero si le resulta familiar mucho de esto le tomara mucho menos tiempo. From b4f8c5f6d55632b3b2daddb8b2ba99e7232a7111 Mon Sep 17 00:00:00 2001 From: Saksham Gupta Date: Sun, 13 Dec 2020 12:16:09 +0530 Subject: [PATCH 256/263] added links to C++ --- programming-language-resources.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/programming-language-resources.md b/programming-language-resources.md index 957104b..fa77b47 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -12,17 +12,17 @@ - C++ - [C++ Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/Cpp_reference.pdf) - [STL Cheat Sheet](https://github.com/jwasham/coding-interview-university/blob/master/extras/cheat%20sheets/STL%20Quick%20Reference%201.29.pdf) - - basics - - pointers - - class and object - - functions - - references - - templates + - [basics](https://www.tutorialspoint.com/cplusplus/cpp_basic_syntax.htm) + - [pointers](https://www.cprogramming.com/tutorial/lesson6.html) + - [class and object](https://www.cprogramming.com/tutorial/lesson12.html) + - [functions](https://www.cprogramming.com/tutorial/lesson4.html) + - [references](https://www.geeksforgeeks.org/references-in-c/) + - [templates](https://www.cprogramming.com/tutorial/templates.html) - compilation - - scope & linkage - - namespaces - - OOP - - STL + - [scope & linkage](https://www.learncpp.com/cpp-tutorial/scope-duration-and-linkage-summary/) + - [namespaces](https://www.tutorialspoint.com/cplusplus/cpp_namespaces.htm) + - [OOP](https://www.geeksforgeeks.org/object-oriented-programming-in-cpp/) + - [STL](https://www.hackerearth.com/practice/notes/standard-template-library/) - [functors](http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html) - [C++ at Google (video)](https://www.youtube.com/watch?v=NOCElcMcFik) - [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) From 8661dc75cfc5689a1ce30514e177bb7ecb161bdd Mon Sep 17 00:00:00 2001 From: Saksham Gupta Date: Sun, 13 Dec 2020 13:03:25 +0530 Subject: [PATCH 257/263] updated compilation link --- programming-language-resources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programming-language-resources.md b/programming-language-resources.md index fa77b47..5329544 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -18,7 +18,7 @@ - [functions](https://www.cprogramming.com/tutorial/lesson4.html) - [references](https://www.geeksforgeeks.org/references-in-c/) - [templates](https://www.cprogramming.com/tutorial/templates.html) - - compilation + - [compilation](https://www.youtube.com/watch?v=ZTu0kf-7h08) - [scope & linkage](https://www.learncpp.com/cpp-tutorial/scope-duration-and-linkage-summary/) - [namespaces](https://www.tutorialspoint.com/cplusplus/cpp_namespaces.htm) - [OOP](https://www.geeksforgeeks.org/object-oriented-programming-in-cpp/) From 7531c4ff422ef4921be03e3f456f3263f91ca899 Mon Sep 17 00:00:00 2001 From: Oleksii Trekhleb Date: Wed, 16 Dec 2020 20:36:03 +0100 Subject: [PATCH 258/263] Adding a link to JavaScript algorithms --- programming-language-resources.md | 1 + 1 file changed, 1 insertion(+) diff --git a/programming-language-resources.md b/programming-language-resources.md index 5329544..ad54e4c 100644 --- a/programming-language-resources.md +++ b/programming-language-resources.md @@ -71,6 +71,7 @@ - [Learn Javascript in 12 minutes](https://www.youtube.com/watch?v=Ukg_U3CnJWI) - [Javascript Beginner Tutorials](https://www.youtube.com/playlist?list=PL41lfR-6DnOrwYi5d824q9-Y6z3JdSgQa) - [Javascript Algorithms and Data Structures](https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/) + - [Javascript Algorithms With Explanations](https://github.com/trekhleb/javascript-algorithms) - Other Language 1 - Other Language 2 - etc From 287a8fb7768a380c2e46d2f76a2780554d3d46dc Mon Sep 17 00:00:00 2001 From: Pablo Cordero Romero Date: Fri, 18 Dec 2020 10:50:49 +0100 Subject: [PATCH 259/263] Fix link to the main article (English version) The link to the main article was broken in the Spanish translation. It redirected to a non-existent file. That it's because the link is for `translations/README.md` which doesn't exist. I've linked to the `README.md` of the previous folder (root folder). --- translations/README-es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-es.md b/translations/README-es.md index 01eef11..0450b15 100644 --- a/translations/README-es.md +++ b/translations/README-es.md @@ -1,6 +1,6 @@ # Coding Interview University -- Versión original: [Inglés](README.md) +- Versión original: [Inglés](../README.md) > Originalmente creé esto como una lista corta de tópicos a estudiar para volverse un Ingeniero de Software, pero creció hasta ser la gran lista puede apreciar actualmente. Después de pasar por este plan de estudios ¡[fui contratado como Ingeniero de Desarrollo de Software en Amazon!(Art. Inglés)](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu) From 9babde379aa20c5cbe99828fa690f58dbdf4cb5e Mon Sep 17 00:00:00 2001 From: sidram05 <38928563+sidram05@users.noreply.github.com> Date: Sat, 26 Dec 2020 19:41:28 -0600 Subject: [PATCH 260/263] CAP Theorem link broken --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 92161f1..16f7d9d 100644 --- a/README.md +++ b/README.md @@ -1130,7 +1130,7 @@ Graphs can be used to represent many problems in computer science, so this secti - [ ] [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/) +- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem) - [ ] Consensus Algorithms: - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) From 5536db7d8d43358d3459cafa0768d2b9c8cc0cbe Mon Sep 17 00:00:00 2001 From: Eihab Khan Date: Sun, 27 Dec 2020 17:55:16 +0100 Subject: [PATCH 261/263] Update README-ar.md - Improved existing translation - Translated Intro and Table of content --- translations/README-ar.md | 85 +++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 31 deletions(-) diff --git a/translations/README-ar.md b/translations/README-ar.md index 9a7fddd..bbc3a80 100644 --- a/translations/README-ar.md +++ b/translations/README-ar.md @@ -1,37 +1,60 @@ -# الإعداد لجوجل +# الإعداد لمقابلة البرمجة -الترجمه: -- [中文版本](README-cn.md) -- الترجمات تحت الاعداد: - - [Español](https://github.com/jwasham/coding-interview-university/issues/80) - - [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) - - [עברית](https://github.com/jwasham/coding-interview-university/issues/82) - - [Bahasa Indonesia](https://github.com/jwasham/coding-interview-university/issues/101) - - [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) - - [Vietnamese](https://github.com/jwasham/coding-interview-university/issues/92) - - [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) - - [French](https://github.com/jwasham/coding-interview-university/issues/89) - - [Russian](https://github.com/jwasham/coding-interview-university/issues/87) - - [Ukrainian](https://github.com/jwasham/coding-interview-university/issues/106) - - [Brazilian Portuguese](https://github.com/jwasham/coding-interview-university/issues/113) - - [Korean](https://github.com/jwasham/coding-interview-university/issues/118) - - [Polish](https://github.com/jwasham/coding-interview-university/issues/122) +> أنشأتها في المقام الأول كلائحة قصيرة من المواضيع الدراسية لكيف يصبح المرء مهندس برمجيات, و ولكن سرعان ما كبرت هذه القائمة الى ما تراه امامك اليوم. بعد خوض هذه الخطة الدراسية, +[تم توظيفي كمهندس تطوير برمجيات لدى أمازون](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! على الاغلب لن تحتاج إلى ان تدرس بالقدر الذي درسته أنا. لكن على كل حال كل ما تحتاج إليه موجود +هنا +> +> درست لمدة ٨-١٢ ساعة في اليوم, لعدة أشهر. هذه هي قصتي: [لماذا درست دواما كاملا لمدة ثمانية أشهر من أجل مقابلة لدا قوقل](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> +> العناصر المذكورة في هذه اللائحة ستجهزك جيدا لمقابلة تقنية مع تقريبا أي شركة برمجية, حتى الشركات العملاقة: أمازون, فيسبوك, قوقل, و ميكروسوف +> +> بالتوفيق + +
+الترجمات: + +- [中文版本](translations/README-cn.md) +- [Tiếng Việt - الفيتنامبة](translations/README-vi.md) +- [الإسبانية](translations/README-es.md) +- [(البرتغالية (البرازيلية](translations/README-ptbr.md) +- [البولندية](translations/README-pl.md) +- [繁體中文](translations/README-tw.md) +- [اليابانية (日本語)](translations/README-ja.md) +- [الروسية](translations/README-ru.md) + +
+ +
+ترجمات تحت الإعداد: + +- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) +- [עברית](https://github.com/jwasham/coding-interview-university/issues/82) +- [الإندونيسية](https://github.com/jwasham/coding-interview-university/issues/101) +- [العربية](https://github.com/jwasham/coding-interview-university/issues/98) +- [التركية](https://github.com/jwasham/coding-interview-university/issues/90) +- [الفرنسية](https://github.com/jwasham/coding-interview-university/issues/89) +- [الأكرانية](https://github.com/jwasham/coding-interview-university/issues/106) +- [الكورية(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) +- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) +- [أردو](https://github.com/jwasham/coding-interview-university/issues/140) +- [التايلندية](https://github.com/jwasham/coding-interview-university/issues/156) +- [اليونانية](https://github.com/jwasham/coding-interview-university/issues/166) +- [الإيطالية](https://github.com/jwasham/coding-interview-university/issues/170) +- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) + +
## ماهذا؟ -هي خطة من عدة أشهر من مطور تطبيقات ويب (قائمة على التعليم الذاتي، ومبدون درجة علمية في علوم الحاسب) لمنصب مهندس برمجيات بجوجل +هي خطتي متعددة الأشهر للوصول من مطور ويب (تعليم ذاتي، بدون درجة علمية في علوم الحاسب) لمنصب مهندس برمجيات لشركة عملاقة -![HBO كتابة الكود علي السبورة - من وادي السيليكون](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) +![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png) -هذه القائمة الطويلة تم إعدادها من ملاحظات الإعداد لجوجل، لذلك هي الأشياء مطالب بمعرفتها. -هناك أشياء إضافية أضفتها في آخر القائمة التي ربما تأتي في المقابلة الشخصية أو تساعد في حل المشاكل البرمجية. كتيرا من العناصر من: كتاب ستيف ياج "[احصل على وظيفة بجوجل](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" ومن حين لآخر ملاحظات الإعداد لجوجل. -لقد قلصت ماستحتاجه من ملاحظات ياج. وقمت بتعديل متطلبات ياج. -من معلومات تم الحصول عليها من معارفي بجوجل. هذا يعني أنه من **من مهندسين برمجيات جدد** أو من الذين غيروا مسار العمل من تطوير الويب والبرمجيات إلى مهندس برمجيات(حيث علوم الحساب أمر أساسي). لو لديك كتير من سنوات الخبرة في هندسة البرمجيات توقع المقابلة الشخصية الأصعب. -[اقرأ المزيد](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/). +تم إعدادها لمهنسي البرمجيات الجدد او أولئك المنتقلين من تطوير الويب إلى هندسة البرمجيات (حيث المعرفة بعلوم الحاسب ضرورية) إذا كان لديك العديد من سنوات الخبرة في بناء تطبيقات الويب أو البرمجيات، خذ في عين الإعتبار ان المقابلة ستكون اصعب -إذا كان لديك العديد من سنوات الخبرة في بناء تطبيقات الويب أو البرمجيات، لاحظ أن رؤية جوجل لهندسة البرمجيات تختلف عن منظور تطوير التطبيقات أو البرمجيات وتطلب معرفة بعلوم الحاسب. +إذا كانت لديك العديد من سنوات الخبرة في تطوير الويب, خذ في عين الإعتبار أن الشركات االبرمجية الضخمة مثل قوقل, فيسبوك, و ميكروسوفت ينظرون إلى هندسة البرمجيات بشكل مختلف عن تطوير البرمجيات/ويب, و تحتاج إلى معرفة علوم الحاسب -أذا كنت تريد أن تصبح مهندس أنظمة أو مهندس ++، اقرأ المزيد من القائمة الاختيارية عن(شبكات الحاسب، والحماية). +إذا اردت ان تصبح مهندس موثوقية أو مهندس عمليات, ادرس اكثر من القائمة الإختيارية (شبكات, امن) --- @@ -48,11 +71,11 @@ - [عن مصادر الفديو](#about-video-resources) - [مراحل المقابلة الشخصية & الإستعداد العام للمقابلة](#interview-process--general-interview-prep) - [اختر لغة برمجية واحدة للمقابلة البرمجية](#pick-one-language-for-the-interview) -- [Book List](#book-list) -- [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) +- [لائحة الكتب](#book-list) +- [قبل أن تبدأ](#before-you-get-started) +- [ما لن تجده هنا](#what-you-wont-see-covered) +- [معرفة مسبقة](#prerequisite-knowledge) +- [الخطة اليومية](#the-daily-plan) - [Algorithmic complexity / Big-O / Asymptotic analysis](#algorithmic-complexity--big-o--asymptotic-analysis) - [Data Structures](#data-structures) - [Arrays](#arrays) From b4ca3b6b6c5b8f0998d519cdfed1fc432beaad09 Mon Sep 17 00:00:00 2001 From: John Washam Date: Mon, 28 Dec 2020 17:37:15 -0800 Subject: [PATCH 262/263] Updates link to programming language resources. Fixes: https://github.com/jwasham/coding-interview-university/issues/707 --- translations/README-ptbr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index 70cbfe8..b34ff50 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -316,7 +316,7 @@ Se você tem mais tempo (eu quero esse livro): Se você ler um desses, você deverá ter todo conhecimento de estrutura de dados e algoritmos que precisará para começar a resolver problemas de programação. **Você pode pular todas as aulas em vídeo nesse projeto**, a não ser que você queira uma revisão. -[Recursos adicionais específicos a cada linguagem aqui.](programming-language-resources.md) +[Recursos adicionais específicos a cada linguagem aqui.](/jwasham/coding-interview-university/blob/master/programming-language-resources.md) ### C++ From 3581530024b9721a51355880a37e35af2d4fa3a1 Mon Sep 17 00:00:00 2001 From: John Washam Date: Mon, 28 Dec 2020 17:40:59 -0800 Subject: [PATCH 263/263] Updates link to programming language resources. --- translations/README-ptbr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ptbr.md b/translations/README-ptbr.md index b34ff50..bc77960 100644 --- a/translations/README-ptbr.md +++ b/translations/README-ptbr.md @@ -316,7 +316,7 @@ Se você tem mais tempo (eu quero esse livro): Se você ler um desses, você deverá ter todo conhecimento de estrutura de dados e algoritmos que precisará para começar a resolver problemas de programação. **Você pode pular todas as aulas em vídeo nesse projeto**, a não ser que você queira uma revisão. -[Recursos adicionais específicos a cada linguagem aqui.](/jwasham/coding-interview-university/blob/master/programming-language-resources.md) +[Recursos adicionais específicos a cada linguagem aqui.](../programming-language-resources.md) ### C++