|
@@ -10,13 +10,19 @@
|
|
|
>
|
|
|
> *Best of luck to you!*
|
|
|
|
|
|
-Translations:
|
|
|
+<details>
|
|
|
+<summary>Translations:</summary>
|
|
|
+
|
|
|
- [中文版本](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:
|
|
|
+</details>
|
|
|
+
|
|
|
+<details>
|
|
|
+<summary>Translations in progress:</summary>
|
|
|
+
|
|
|
- [हिन्दी](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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## 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.
|
|
@@ -125,6 +133,9 @@ If you want to be a reliability engineer or operations engineer, study more from
|
|
|
|
|
|
---------------- Everything below this point is optional ----------------
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Additional Resources</summary>
|
|
|
+
|
|
|
- [Additional Books](#additional-books)
|
|
|
- [Additional Learning](#additional-learning)
|
|
|
- [Compilers](#compilers)
|
|
@@ -168,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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
---
|
|
|
|
|
|
## Why use it?
|
|
@@ -183,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
|
|
|
|
|
|
+<details>
|
|
|
+<summary>How to use it</summary>
|
|
|
+
|
|
|
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.
|
|
@@ -210,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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## 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)
|
|
@@ -227,6 +245,9 @@ Sometimes the classes are not in session so you have to wait a couple of months,
|
|
|
|
|
|
## Interview Process & General Interview Prep
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Interview Process & General Interview Prep</summary>
|
|
|
+
|
|
|
- [ ] [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/)
|
|
@@ -243,6 +264,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.
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## 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:
|
|
@@ -279,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:
|
|
|
+<details>
|
|
|
+<summary>If you have tons of extra time:</summary>
|
|
|
|
|
|
- [ ] [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
|
|
|
+</details>
|
|
|
|
|
|
-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:
|
|
|
+ <details>
|
|
|
+ <summary>......</summary>
|
|
|
+
|
|
|
- Chapter 2 - Numeric Representation
|
|
|
- Chapter 3 - Binary Arithmetic and Bit Operations
|
|
|
- Chapter 4 - Floating-Point Representation
|
|
@@ -304,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):
|
|
|
+ </details>
|
|
|
+
|
|
|
+<details>
|
|
|
+<summary>If you have more time (I want this book):</summary>
|
|
|
|
|
|
- [ ] [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055)
|
|
|
- For a richer, more up-to-date (2017), but longer treatment
|
|
|
|
|
|
+</details>
|
|
|
|
|
|
### Language Specific
|
|
|
|
|
@@ -321,6 +352,9 @@ If you read though one of these, you should have all the data structures and alg
|
|
|
|
|
|
### C++
|
|
|
|
|
|
+<details>
|
|
|
+<summary>C++</summary>
|
|
|
+
|
|
|
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/)
|
|
@@ -328,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.
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
### Java
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Java</summary>
|
|
|
+
|
|
|
- [ ] [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)
|
|
@@ -342,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.
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
### Python
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Python</summary>
|
|
|
+
|
|
|
- [ ] [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/
|
|
|
|
|
|
+</details>
|
|
|
|
|
|
### 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:**
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Optional Books</summary>
|
|
|
+
|
|
|
- [ ] [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.
|
|
@@ -389,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.
|
|
|
|
|
|
+</details>
|
|
|
|
|
|
## Before you Get Started
|
|
|
|
|
@@ -479,6 +528,9 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
|
|
|
|
## Prerequisite Knowledge
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Prerequisite Knowledge</summary>
|
|
|
+
|
|
|
- [ ] **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)
|
|
@@ -493,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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Algorithmic complexity / Big-O / Asymptotic analysis
|
|
|
+
|
|
|
+<details>
|
|
|
+<summary>Algorithmic complexity / Big-O / Asymptotic analysis</summary>
|
|
|
+
|
|
|
- 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)
|
|
@@ -517,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.
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Data Structures
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Data Structures</summary>
|
|
|
+
|
|
|
- ### Arrays
|
|
|
- Implement an automatically resizing vector.
|
|
|
- [ ] Description:
|
|
@@ -644,8 +707,13 @@ Write code on a whiteboard or paper, not a computer. Test with some sample input
|
|
|
- get(key)
|
|
|
- remove(key)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## More Knowledge
|
|
|
|
|
|
+<details>
|
|
|
+<summary>More Knowledge</summary>
|
|
|
+
|
|
|
- ### 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)
|
|
@@ -681,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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Trees
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Trees</summary>
|
|
|
+
|
|
|
- ### 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)
|
|
@@ -762,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).
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Sorting
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Sorting</summary>
|
|
|
+
|
|
|
- [ ] 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
|
|
@@ -837,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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Graphs
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Graphs</summary>
|
|
|
+
|
|
|
Graphs can be used to represent many problems in computer science, so this section is long, like trees and sorting were.
|
|
|
|
|
|
- Notes:
|
|
@@ -899,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
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Even More Knowledge
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Even More Knowledge</summary>
|
|
|
+
|
|
|
- ### Recursion
|
|
|
- [ ] Stanford lectures on recursion & backtracking:
|
|
|
- [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8)
|
|
@@ -1186,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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## System Design, Scalability, Data Handling
|
|
|
+
|
|
|
+<details>
|
|
|
+<summary>System Design, Scalability, Data Handling</summary>
|
|
|
+
|
|
|
- **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.
|
|
@@ -1312,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/)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
---
|
|
|
|
|
|
## Final Review
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Final Review</summary>
|
|
|
+
|
|
|
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.
|
|
|
|
|
@@ -1326,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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
---
|
|
|
|
|
|
## Coding Question Practice
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Coding Question Practice</summary>
|
|
|
+
|
|
|
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.**
|
|
@@ -1368,8 +1472,13 @@ Supplemental:
|
|
|
|
|
|
See [Book List above](#book-list)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Coding exercises/challenges
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Coding Question Practice</summary>
|
|
|
+
|
|
|
Once you've learned your brains out, put those brains to work.
|
|
|
Take coding challenges every day, as many as you can.
|
|
|
|
|
@@ -1402,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.
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Once you're closer to the interview
|
|
|
|
|
|
- [ ] Cracking The Coding Interview Set 2 (videos):
|
|
@@ -1469,6 +1580,9 @@ You're never really done.
|
|
|
|
|
|
## Additional Books
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Additional Books</summary>
|
|
|
+
|
|
|
- [ ] [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/)
|
|
@@ -1481,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/)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Additional Learning
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Additional Learning</summary>
|
|
|
+
|
|
|
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.
|
|
|
|
|
@@ -1810,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/
|
|
|
|
|
|
---
|
|
|
+</details>
|
|
|
+
|
|
|
+---
|
|
|
|
|
|
## Additional Detail on Some Subjects
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Additional Detail on Some Subjects</summary>
|
|
|
+
|
|
|
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?
|
|
@@ -1882,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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Video Series
|
|
|
|
|
|
Sit back and enjoy. "Netflix and skill" :P
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Video Series</summary>
|
|
|
+
|
|
|
- [ ] [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)
|
|
@@ -1946,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)
|
|
|
|
|
|
+</details>
|
|
|
+
|
|
|
## Computer Science Courses
|
|
|
|
|
|
+<details>
|
|
|
+<summary>Computer Science Courses</summary>
|
|
|
+
|
|
|
- [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)
|
|
|
+
|
|
|
+</details>
|
|
|
+
|
|
|
+## LICENSE
|
|
|
+
|
|
|
+[CC-BY-SA-4.0](./LICENSE.txt)
|