What does HackerNews think of system-design-primer?
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
https://github.com/donnemartin/system-design-primer (see https://hn.algolia.com/?q=system-design-primer for discussions)
This looks like a nice Anki deck for reviewing system design concepts: https://github.com/donnemartin/system-design-primer
You might also be interested in Alex Xu's System Design Interview Book.
> I don't have good grades in my undergrad
Don't furnish that information. If the company asks you, bow out - it's an absurd question when you have 5 years of experience.
A masters won't help you much and I wouldn't recommend it in your situation. It's the kind of thing a person thinks about when they feel stuck - I've had the same impulse at every career junction.
> Should I work on solving LeetCode questions, and aim to get into FAANG companies
I'd certainly recommend LeetCode, but not just for interviews. There are benefits to it that nobody mentions: your initial code correctness, your debugging skills, your communication skills, and your familiarity with your programming language all go up.
I just went through this process and the time investment has paid off quite well. I used to hate LC and thought I wasn't capable of landing any job, let alone a top tier job.
FAANG is good for compensation, but not necessarily the most exciting work, so keep that in mind. There are many non-FAANG companies that are good catches.
teamblind.com is a great resource for interview tips, if used carefully.
Expect months-long practice and to do a lot of interviews. Rejection is just part of the process. Interview with companies you haven't heard of/don't care much about first. Respond to random recruiters who reach out.
Don't forget to study for behavioral questions (STAR method) and system design (https://github.com/donnemartin/system-design-primer).
For practical LeetCode tips - expect to complete a few hundred of them if you want to get into a top-tier shop. Speak out loud and explain as if you're in an actual interview. Timegate yourself: 7.5 minutes for easy, 12.5 minutes for medium, 20 minutes for hard. These are very aggressive times. If you haven't finished in that time, look at the solution, take notes, and understand it.
Here's a Python script I wrote to help myself with this process. `pip install rich` should take care of the only external dependency. This script randomly selects LeetCode question numbers and creates a markdown file for note-taking. When I failed a question, I would stick it in `attempted` and it would come back up eventually.
#!/usr/bin/env python
import random
import sys
from pathlib import Path
from rich.console import Console
LC_COUNT = 2218
TIME_LIMITS = {
"Hard": "20:00",
"Medium": "12:30",
"Easy": "7:30",
}
crushed = {}
mediocre = {}
attempted = {}
short_list = {
# Blind 75
76,
102,
105,
124,
128,
143,
152,
153,
198,
207,
208,
211,
212,
213,
230,
238,
252,
269,
271,
295,
300,
322,
323,
371,
417,
422,
424,
435,
449,
1143,
}
all_lc = {num for num in range(1, LC_COUNT + 1)}
untried = all_lc.difference(crushed)
lc_options = short_list or attempted or untried or mediocre
lc_options = lc_options.difference(crushed)
if len(sys.argv) > 1:
num = sys.argv[1]
else:
num = random.choice(list(lc_options))
console = Console()
def user_input() -> str:
return console.input(prompt="[bold blue]>>>[/bold blue] ")
console.print("LC:", num)
base_path = Path.home() / "LC/"
for existing_path in base_path.glob(f"*/{num}-*.md"):
console.print("File already exists:", existing_path)
exit()
difficulty = ""
while difficulty not in TIME_LIMITS:
console.print(f"Difficulty {list(TIME_LIMITS.keys())}:")
difficulty = user_input().strip().capitalize()
name = ""
while not name:
console.print("Name:")
name = user_input().strip().replace(" ", " ")
url_name = name.lower().replace(" ", "-")
path = base_path / f"{difficulty}/{num}-{url_name}.md"
template = f"""# Problem: {name.title()}
https://leetcode.com/problems/{url_name}/
*Difficulty:* {difficulty}
*Status:* Untried
*Time:* ? left out of {TIME_LIMITS[difficulty]} minutes
# Notes:
# Attempts:
##
Time: O(?)
Space: O(?)
```
```
# Solutions:
##
Time: O(?)
Space: O(?)
"""
if path.exists():
console.print("File already exists:", path)
else:
console.print("Creating file:", path)
with open(path, "w") as outfile:
outfile.write(template)
console.print("Done", style="bold green")
- Any up to date book on the programming language of your choice
- Any up to date online course of the programming language of your choice
- https://hpbn.co/ (networking)
- Build APIs You Won't Hate (api design)
- https://github.com/donnemartin/system-design-primer (system design)
- API Design Patterns by Geewax (somewhat opinionated, but overall good resource for api design)
Or just use mature solution like Rails for example it solves most of typical problems and has easy itegrations. If you need more flexibility then maybe Node.js or other ecosystem is better.
Generally theme about architecture is called System Design and there are resources to learn it for interviews/learning purposes but most of it only is applicable at very big scale and you might never need it. Read "Designing Data Intensive Applications" and look into [1] if still interested.
IMO better to invest time into data design/querying (caching) so that you won't think you need some vodoo to handle your traffic. Like 90%+ of sites/apps don't have 1000req/second and this should be handled by Python on Arduino so as long as your DB design is good you are fine.
For async processing it's worth taking a look into Temporal [2] as it looks as promising alternative to job ques and cronjobs.
I can also recommend [3] to learn some cloud patterns
[1] https://github.com/donnemartin/system-design-primer
[3] https://docs.microsoft.com/en-us/azure/architecture/patterns...
- System Design Interview – An insider's guide: https://smile.amazon.com/gp/product/B08CMF2CQF
- System Design Interview Vol 2: https://smile.amazon.com/System-Design-Interview-Insiders-Gu...
- Designing Data-Intensive Applications: https://smile.amazon.com/gp/product/1449373321
- System Design Primer: https://github.com/donnemartin/system-design-primer
Especially: https://github.com/donnemartin/system-design-primer#how-to-a...
- The Architecture of Open Source Applications: http://aosabook.org/
I'd disagree:
- System Design Interview – An insider's guide: https://smile.amazon.com/gp/product/B08CMF2CQF
- System Design Interview Vol 2: https://smile.amazon.com/System-Design-Interview-Insiders-Gu...
- Designing Data-Intensive Applications: https://smile.amazon.com/gp/product/1449373321
- System Design Primer: https://github.com/donnemartin/system-design-primer
Especially: https://github.com/donnemartin/system-design-primer#how-to-a...
There's also a list here with more resource links: https://github.com/madd86/awesome-system-design