Table of Contents |
---|
...
Algorithms-Specific Informational Websites (not programming challenge websites)
Nick Parlante - Pointers, Binary Trees, etc.
Very good explanations
OK explanations
...
Interview Prep sites
rec'd by Choketsu
Codility
Rec'd by Toptal
rec'd by Choketsu
via Tom A.
Non-Interview-Prep Challenge sites
Rec'd by Toptal
Someone who works with machine learning explaining how Kaggle is a simplification of real ML work:
Jason B Hill's Project Euler solutions
Rec'd by Toptal, Chris Uga
rec'd by Choketsu
How to get started training at the USACO Gateway:
What is it like to attend the USACO training camp?
It's only a week
New people just get 3 hours of lab/lecture in the morning
The top guys do a contest every day. Sometimes the contest goes until after lunch, otherwise they just review after lunch. (Seems like 5 hrs/day)
Then everyone has fun for the rest of the day
If one is stuck on a particular section, is it worthwhile to keep on trying to solve the given problem, or should one move on to other sources in preparation for programming contests?
Richard Peng, one of the most successful Canadian IOI competitors of all time, on the USACO training pages:
"USACO training was put together before the major IOI escalation (Finland/Korea/Wisconsin). A lot of the techniques described on it are no longer useful on *OI and a lot of the 'hot' topics over the past few years are not covered. Also, a lot of the bottle necks on training are quite meaningless, and they typically cause a lot of frustration and time waste on the scale of months."
Topics
Linked Lists
...
System Design
Step-by-step process
Ask clarifying questions. (Source)
Constrain the problem to make it solvable within the hourClarify the task.
Share what you know about the system with the interviewer.
If you’re not familiar with the system, tell the interviewer so they can fill you in.
Metrics
Specify some key metrics to help your high-level decision-making.
Exampleexplain how it should work.
Constrain the problem to make it solvable within the hour.
Clarify the scale of usage, the amount of data involved, the rate of requests.
Specify some key metrics to help your high-level decision-making.
Example: the number of users, the amount of data.
You don’t necessarily have to go into the details of scaling at this point.
Design the system at a high level.
At an early stage, it’s OK to have a few simple components; later on you can get more complex.
Example:
Design Spotify: “A If asked to design Spotify, you could draw a mobile app connects connected to a load balancer which connects to multiple a group of webservers, which connect to the database.”
Outline your database design.
After laying out your components, design your database.
Split out databases appropriate for different types of data.
In general, try to explain why you’re doing something upfront rather than waiting for your interviewer to ask you.
Learning resources
...
Go through particular use-cases and explain how it will work.
Consider how the webservers will retrieve data from the db and how they’ll send it to the end-user; will they use websockets?
Learning resources
Abbott & Fisher
https://blogwww.bytebytegoamazon.com/archive?sort=new/gp/product/B00YF0OSHC
https://www.amazon.co.ukcom/SystemScalability-Design-Rules-Principles-Scaling-Sites-ebook/dp/B00503D1TY/
Alex Xu
https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable-ebook/dp/B06XPJML5D/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=&sr=https://github.com/donnemartin/system-design-primer
https://www.designgurus.io/ - Grokking the System Design Interview (online course)
https://www.youtube.com/@sudocode@hnasr/playlistsvideos
https://www.youtube.com/@SystemDesignInterview/videos@IGotAnOffer-Engineering
NeetCode system design courses - https://wwwneetcode.youtube.com/@hnasr/videosio/courses
https://drive.google.com/file/d/1U7EchvgzCjTtF5JzGVVCFgjXC-qw7lIG/view?pli=1 ← They send you a link to this ebook when you sign up for their newsletter.
NeetCode system design courses - com/@sudocode/playlists
https://neetcode.io/courseswww.youtube.com/@SystemDesignInterview/videos
https://www.algoexpert.io/systems/product
Negative review: https://www.reddit.com/r/cscareerquestions/comments/s0e54f/warning_systems_expert_by_the_algoexpert_guy_is/
“modules are very light on information, and you'd have a better time just reading the wikipedia page on those topics.”
“topics aren't well explained and it's just an extremely high level overview of what they are”
Udemy: https://www.udemy.com/courses/search/?src=ukw&q=system+design
https://www.amazon.com/Scalability-Startup-Engineers-Artur-Ejsmont/dp/0071843655
Designing Data-Intensive Applications
IGotAnOffer
System Design Interviews: 10 Key Principles (with ex-Google EM)
Communicate efficiently.
The interview is definitely an artificially time-constrained environment.
So you need to be efficient. You don’t want the interviewer wondering what you’re thinking. You want the interviewer to be able to follow your thinking.
They work with a lot of engineers who understand the technical part but struggle to clearly communicate what they’re thinking.
Scope the problem.
Real systems (like YouTube) are too complicated to fully design in a one-hour interview.
So you need to ask, “Which part of the app/feature-set should I focus on?”
You need to go along with what the interviewer wants to focus on.
Start drawing ~15 minutes in
This isn’t a hard number, it’s just a guideline.
If you start drawing too soon, you may not fully understand what the interviewer wants you to focus on, and start going down a wrong path.
If you wait too long, you may not have enough time to come up with a working solution.
The interviewer says that in one mock the Google EM didn’t start until 20 minutes in and would’ve been struggling to finish.
Start with a simple design
Don’t add requirements that don’t exist.
Example: Adding tiering storage could prevent you from having a complete solution by the end of the interviewer.
You can tell the interviewer that a particular optimization is available and how you’d use it, but don’t let it stop you.
If the interviewer asks you to go deeper on a subject, follow their lead.
Use prep resources
GitHub has a system design study guide, for example
You might see some differences across guides
Properly understand the problem
Talk through specific use cases.
Imagine actually calling the API.
Try to catch assumptions you may have made.
Check in with the interviewer to see if you’re on the right path.
He mentions the name of the doc used for a full spec is “PRD” - Product Requirements Document
Practice, practice, practice!
System Design Primer
Articles / Forum posts
I’ve added the mentioned resources to the “learning resources” section on this page, but the most-common recommendations were the GitHub primer and the DDIA book.
https://medium.com/javarevisited/7-best-places-to-learn-system-design-79e2d261f343
TODO: Go through this.
...