Marked x
This commit is contained in:
parent
5ddb843a7b
commit
8a022af9b5
451
README.md
451
README.md
|
@ -1,113 +1,3 @@
|
|||
# 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)
|
||||
>
|
||||
> **Please Note:** You won't need to study as much as I did. I wasted a lot of time on things I didn't need to know. More info about that below. I'll help you get there without wasting your precious time.
|
||||
>
|
||||
> 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!*
|
||||
|
||||
<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)
|
||||
- [Polish](translations/README-pl.md)
|
||||
- [繁體中文](translations/README-tw.md)
|
||||
- [Japanese (日本語)](translations/README-ja.md)
|
||||
- [Russian](translations/README-ru.md)
|
||||
- [German](translations/README-de.md)
|
||||
- [Bahasa Indonesia](translations/README-id.md)
|
||||
- [ខ្មែរ - Khmer](translations/README-kh.md)
|
||||
- [Uzbek](translations/README-uz.md)
|
||||
- [Bulgarian](translations/README-bg.md)
|
||||
- [বাংলা - Bangla](translations/README-bn.md)
|
||||
|
||||
</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)
|
||||
- [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)
|
||||
- [Українська](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/519)
|
||||
- [Thai](https://github.com/jwasham/coding-interview-university/issues/156)
|
||||
- [Greek](https://github.com/jwasham/coding-interview-university/issues/166)
|
||||
- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239)
|
||||
- [Persian - Farsi](https://github.com/jwasham/coding-interview-university/issues/186)
|
||||
|
||||
</details>
|
||||
|
||||
<div align="center">
|
||||
<hr />
|
||||
<p>
|
||||
<a href="https://github.com/sponsors/jwasham"><strong>Become a sponsor</strong> and support Coding Interview University!</a>
|
||||
</p>
|
||||
<p>
|
||||
<strong>Special thanks to:</strong>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://oss.capital/">
|
||||
<div>
|
||||
<img src="https://d3j2pkmjtin6ou.cloudfront.net/sponsors/oss-capital.svg" width="350" alt="OSS Capital">
|
||||
</div>
|
||||
<div>
|
||||
<sup><strong>Founded in 2018, OSS Capital is the first and only venture capital platform focused<br>exclusively on supporting early-stage COSS (commercial open source) startup founders.</strong></sup>
|
||||
</div>
|
||||
</a>
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="https://www.gitpod.io/?utm_campaign=jwasham&utm_medium=referral&utm_content=coding-interview-university&utm_source=github">
|
||||
<div>
|
||||
<img src="https://d3j2pkmjtin6ou.cloudfront.net/sponsors/gitpod-logo-light-theme.svg" width="300" alt="Gitpod">
|
||||
</div>
|
||||
<div>
|
||||
<p>
|
||||
<strong>Dev environments built for the cloud</strong>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<sup>Natively integrated with GitLab, GitHub, and Bitbucket, Gitpod automatically and continuously prebuilds dev environments for all your branches. As a result team members can instantly start coding with fresh dev environments for each new task - no matter if you are building a new feature, want to fix a bug, or work on a code review.</sup>
|
||||
</div>
|
||||
</a>
|
||||
</p>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
## What is it?
|
||||
|
||||
![Coding at the whiteboard - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-whiteboard-silicon-valley.png)
|
||||
|
||||
This is my multi-month study plan for becoming a software engineer for a large company.
|
||||
|
||||
**Required:**
|
||||
* A little experience with coding (variables, loops, methods/functions, etc)
|
||||
* Patience
|
||||
* Time
|
||||
|
||||
Note this is a study plan for **software engineering**, not web development. Large software companies like Google, Amazon,
|
||||
Facebook and Microsoft view software engineering as different from web development. For example, Amazon has
|
||||
Frontend Engineers (FEE) and Software Development Engineers (SDE). These are 2 separate roles and the interviews for
|
||||
them will not be the same, as each has its own competencies. These companies require computer science knowledge for
|
||||
software development/engineering roles.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
|
@ -235,35 +125,8 @@ software development/engineering roles.
|
|||
|
||||
---
|
||||
|
||||
## Why use it?
|
||||
|
||||
If you want to work as a software engineer for a large company, these are the things you have to know.
|
||||
|
||||
If you missed out on getting a degree in computer science, like I did, this will catch you up and save four years of your life.
|
||||
|
||||
When I started this project, I didn't know a stack from a heap, didn't know Big-O anything, or anything about trees, or how to
|
||||
traverse a graph. If I had to code a sorting algorithm, I can tell ya it would have been terrible.
|
||||
Every data structure I had ever used was built into the language, and I didn't know how they worked
|
||||
under the hood at all. I 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 used a few multidimensional arrays in my life and
|
||||
thousands of associative arrays, but I 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 track progress.
|
||||
- [More about GitHub-flavored markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
|
||||
|
||||
### If you don't want to use git
|
||||
|
||||
On this page, click the Code button near the top, then click "Download ZIP". Unzip the file and you can work with the text files.
|
||||
|
||||
If you're open in a code editor that understands markdown, you'll see everything formatted nicely.
|
||||
|
||||
![How to download the repo as a zip file](https://d3j2pkmjtin6ou.cloudfront.net/how-to-download-as-zip.png)
|
||||
|
||||
### If you're comfortable with git
|
||||
|
||||
|
@ -288,141 +151,7 @@ Mark all boxes with X after you completed your changes:
|
|||
git push --set-upstream origin progress
|
||||
git push --force
|
||||
|
||||
## 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)
|
||||
|
||||
## A Note 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.
|
||||
|
||||
It would be great to replace the online course resources with free and always-available public sources,
|
||||
such as YouTube videos (preferably university lectures), so that you people can study these anytime,
|
||||
not just when a specific online course is in session.
|
||||
|
||||
## Choose a Programming Language
|
||||
|
||||
You'll need to choose a programming language for the coding interviews you do,
|
||||
but you'll also need to find a language that you can use to study computer science concepts.
|
||||
|
||||
Preferably the language would be the same, so that you only need to be proficient in one.
|
||||
|
||||
### For this Study Plan
|
||||
|
||||
When I did the study plan, I used 2 languages for most of it: C and Python
|
||||
|
||||
* C: Very low level. Allows you to deal with pointers and memory allocation/deallocation, so you feel the data structures
|
||||
and algorithms in your bones. In higher level languages like Python or Java, these are hidden from you. In day to day work, that's terrific,
|
||||
but when you're learning how these low-level data structures are built, it's great to feel close to the metal.
|
||||
- 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 don't need to go super deep in the book (or even finish it). Just get to where you're comfortable reading and writing in C.
|
||||
- [Answers to questions in the book](https://github.com/lekkas/c-algorithms)
|
||||
* Python: Modern and very expressive, I learned it because it's just super useful and also allows me to write less code in an interview.
|
||||
|
||||
This is my preference. You do what you like, of course.
|
||||
|
||||
You may not need it, but here are some sites for learning a new language:
|
||||
- [Exercism](https://exercism.org/tracks)
|
||||
- [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/)
|
||||
- [Codeforces](https://codeforces.com/)
|
||||
|
||||
### For your Coding 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/).
|
||||
This is the original article my post was based on: http://blog.codingforinterviews.com/best-programming-language-jobs/
|
||||
|
||||
You need to be very comfortable in the language and be knowledgeable.
|
||||
|
||||
Read more about choices:
|
||||
- [Choose the Right Language for Your Coding Interview](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/)
|
||||
|
||||
[See language-specific resources here](programming-language-resources.md)
|
||||
|
||||
## Books for Data Structures and Algorithms
|
||||
|
||||
This book will form your foundation for computer science.
|
||||
|
||||
Just choose one, in a language that you will be comfortable with. You'll be doing a lot of reading and coding.
|
||||
|
||||
### C
|
||||
|
||||
- [Algorithms in C, Parts 1-5 (Bundle), 3rd Edition](https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080)
|
||||
- Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms
|
||||
|
||||
### 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/
|
||||
|
||||
### Java
|
||||
|
||||
Your choice:
|
||||
|
||||
- Goodrich, Tamassia, Goldwasser
|
||||
- [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/)
|
||||
- Sedgewick and Wayne:
|
||||
- [Algorithms](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/)
|
||||
- Free Coursera course that covers the book (taught by the authors!):
|
||||
- [Algorithms I](https://www.coursera.org/learn/algorithms-part1)
|
||||
- [Algorithms II](https://www.coursera.org/learn/algorithms-part2)
|
||||
|
||||
### C++
|
||||
|
||||
Your choice:
|
||||
|
||||
- Goodrich, Tamassia, and Mount
|
||||
- [Data Structures and Algorithms in C++, 2nd Edition](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275)
|
||||
- Sedgewick and Wayne
|
||||
- [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/)
|
||||
|
||||
## Interview Prep Books
|
||||
|
||||
You don't need to buy a bunch of these. Honestly "Cracking the Coding Interview" is probably enough,
|
||||
but I bought more to give myself more practice. But I always do too much.
|
||||
|
||||
I bought both of these. They gave me plenty of practice.
|
||||
|
||||
- [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)](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)
|
||||
|
||||
## Don't Make My Mistakes
|
||||
|
||||
|
@ -441,33 +170,12 @@ Please, read so you won't make my mistakes:
|
|||
|
||||
### 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 or tablet, wherever I am.
|
||||
|
||||
Make your own for free:
|
||||
|
||||
- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards)
|
||||
|
||||
**I DON'T RECOMMEND using my flashcards.** There are too many and many of them are trivia that you don't need.
|
||||
|
||||
But if you don't want to listen to me, here you go:
|
||||
- [My flash cards database (1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db):
|
||||
- [My flash cards database (extreme - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/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)).
|
||||
|
||||
Some students have mentioned formatting issues with white space that can be fixed by doing the following: open deck, edit card, click cards, select the "styling" radio button, add the member "white-space: pre;" to the card class.
|
||||
|
||||
### 3. Do Coding Interview Questions While You're Learning
|
||||
|
||||
|
@ -495,53 +203,6 @@ There are many resources for this, listed below. Keep going.
|
|||
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
|
||||
|
||||
This course goes over a lot of subjects. Each will probably take you a few days, or maybe even a week or more. It depends on your schedule.
|
||||
|
||||
Each day, take the next subject in the list, watch some videos about that subject, and then write an implementation
|
||||
of that data structure or algorithm in the language you chose for this course.
|
||||
|
||||
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 every algorithm. You just need to be able to understand it enough to be able to write your own implementation.
|
||||
|
||||
## Coding Question Practice
|
||||
|
||||
Why is this here? I'm not ready to interview.
|
||||
|
||||
[Then go back and read this.](#3-do-coding-interview-questions-while-youre-learning)
|
||||
|
||||
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 (see Big-O below)
|
||||
- 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/)
|
||||
|
||||
Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then type it and test it out on a computer.
|
||||
|
||||
If you don't have a whiteboard at home, 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 just 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)
|
||||
|
||||
**Coding question practice is not about memorizing answers to programming problems.**
|
||||
|
||||
|
@ -572,11 +233,6 @@ Challenge sites:
|
|||
- [InterviewBit](https://www.interviewbit.com/)
|
||||
- [Project Euler](https://projecteuler.net/)
|
||||
|
||||
## Let's Get Started
|
||||
|
||||
Alright, enough talk, let's learn!
|
||||
|
||||
But don't forget to do coding problems from above while you learn!
|
||||
|
||||
## Algorithmic complexity / Big-O / Asymptotic analysis
|
||||
|
||||
|
@ -584,16 +240,16 @@ But don't forget to do coding problems from above while you learn!
|
|||
- There are a lot of videos here. Just watch enough until you understand it. You can always come back and review.
|
||||
- Don't worry if you don't understand all the math behind it.
|
||||
- You just need to understand how to express the complexity of an algorithm in terms of Big-O.
|
||||
- [X] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4)
|
||||
- [X] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU)
|
||||
- [X] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
|
||||
- [X] [Skiena (video)](https://www.youtube.com/watch?v=z1mkCe3kVUA)
|
||||
- [X] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98)
|
||||
- [X] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
|
||||
- [X] TopCoder (includes recurrence relations and master theorem):
|
||||
- [ ] [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=z1mkCe3kVUA)
|
||||
- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98)
|
||||
- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN)
|
||||
- [ ] 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/)
|
||||
- [X] [Cheat sheet](http://bigocheatsheet.com/)
|
||||
- [ ] [Cheat sheet](http://bigocheatsheet.com/)
|
||||
|
||||
Well, that's about enough of that.
|
||||
|
||||
|
@ -603,34 +259,34 @@ if you can identify the runtime complexity of different algorithms. It's a super
|
|||
## Data Structures
|
||||
|
||||
- ### Arrays
|
||||
- [X] About Arrays:
|
||||
- [ ] About 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)
|
||||
- [Dynamic Arrays (video)](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV)
|
||||
- [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g)
|
||||
- [X] Implement a vector (mutable array with automatic resizing):
|
||||
- [X] Practice coding using arrays and pointers, and pointer math to jump to an index instead of using indexing.
|
||||
- [X] New raw data array with allocated memory
|
||||
- [ ] 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
|
||||
- [X] size() - number of items
|
||||
- [X] capacity() - number of items it can hold
|
||||
- [X] is_empty()
|
||||
- [X] at(index) - returns item at given index, blows up if index out of bounds
|
||||
- [X] push(item)
|
||||
- [X] insert(index, item) - inserts item at index, shifts that index's value and trailing elements to the right
|
||||
- [X] prepend(item) - can use insert above at index 0
|
||||
- [X] pop() - remove from end, return value
|
||||
- [X] delete(index) - delete item at index, shifting all trailing elements left
|
||||
- [X] remove(item) - looks for value and removes index holding it (even if in multiple places)
|
||||
- [X] find(item) - looks for value and returns first index with that value, -1 if not found
|
||||
- [X] resize(new_capacity) // private function
|
||||
- [ ] 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
|
||||
- [X] Time
|
||||
- [ ] Time
|
||||
- O(1) to add/remove at end (amortized for allocations for more space), index, or update
|
||||
- O(n) to insert/remove elsewhere
|
||||
- [X] Space
|
||||
- [ ] 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)
|
||||
|
||||
|
@ -1222,9 +878,6 @@ Graphs can be used to represent many problems in computer science, so this secti
|
|||
- Detailed guide on how to set up your resume from scratch, write effective resume content, optimize it, and test your resume
|
||||
|
||||
|
||||
## Find a Job
|
||||
|
||||
- [Sites for Finding Jobs](https://ayedot.com/151/MiniBlog/Top-10-Best-Websites-for-Careers--Jobs)
|
||||
|
||||
## Interview Process & General Interview Prep
|
||||
|
||||
|
@ -1292,27 +945,9 @@ Some of mine (I already may know the answers, but want their opinion or team per
|
|||
- What is the work life like?
|
||||
- How is the work/life balance?
|
||||
|
||||
## Once You've Got The Job
|
||||
|
||||
Congratulations!
|
||||
|
||||
Keep learning.
|
||||
|
||||
You're never really done.
|
||||
|
||||
---
|
||||
|
||||
*****************************************************************************************************
|
||||
*****************************************************************************************************
|
||||
|
||||
Everything below this point is optional. It is NOT needed for an entry-level interview.
|
||||
However, 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
|
||||
|
||||
|
@ -1953,43 +1588,9 @@ Sit back and enjoy.
|
|||
|
||||
- [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)
|
||||
|
||||
## 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/)
|
||||
- [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)
|
||||
- [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)
|
||||
- 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)
|
||||
- More papers: [1,000 papers](https://github.com/0voice/computer_expert_paper)
|
||||
|
||||
## LICENSE
|
||||
|
||||
[CC-BY-SA-4.0](./LICENSE.txt)
|
||||
|
|
Loading…
Reference in New Issue