feat: collapsible sections

This commit is contained in:
Aung Myo Kyaw 2018-11-16 16:14:55 +06:30
parent 7a1308d287
commit 2625568ec0
1 changed files with 127 additions and 5 deletions

132
README.md
View File

@ -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
<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.
@ -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)
</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)
@ -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:
<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
@ -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):
</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
@ -339,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/)
@ -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.
</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)
@ -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.
</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.
@ -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.
</details>
## 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
<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)
@ -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)
</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)
@ -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.
</details>
## Data Structures
<details>
<summary>Data Structures</summary>
- ### 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)
</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)
@ -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)
</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)
@ -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).
</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
@ -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)
</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:
@ -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
</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)
@ -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)
</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.
@ -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/)
</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.
@ -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)
</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.**
@ -1386,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.
@ -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.
</details>
## 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
<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/)
@ -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/)
</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.
@ -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/
--
</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?
@ -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)
</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)
@ -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)
</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)