Hacking the Software Engineer Interview20648 2018-05-02 18:41 (Last Updated 2019-09-01 02:06)
This topic is work in process. You can also visit the google doc version - BigDataKV.
- Table of Contents
- Experience Deep Dive
- Cracking the System Design Interview (Designing Pinterest or Instagram as an example)
- System Design Theories
- Introduction to Architecture
- Data Partition and Routing
- Replica and Consistency
- Availability (TODO)
- Big Data Algorithms and Data Structures
- Resource Management and Scheduler (TODO)
- Distributed Coordination System (TODO)
- Data Stores (TODO)
- Stream and Batch Processing
- Cloud Design Patterns
- Communication Protocols and APIs
- Lambda architecture
- iOS Architecture Patterns
- System Design in Practice
- Designing Uber (or a realtime marketplace)
- Scaling Facebook social graph store
- Designing Netflix view state service
- Designing robust and predictable APIs with idempotency
- Designing video streaming over HTTP
- Designing a distributed logging system
- Designing a url shortener
- Designing a key-value store with external storage
- Designing Facebook Photo Storage (or a Blob storage)
- Designing Stock Exchange
- Designing Smart Notification of Stock Price Changes
- Designing Square Cash or PayPal Money Transfer System
- Designing payment webhook
- Designing a metric system
- How to write solid code?
The overall process:
- HR screen: HR will clarify the interview process and ask quick questions to filter out know-nothings
- Phone screen: 1 or 2 rounds of phone screens on coding
- Onsite: spending a whole day interviewing at the office in person
- 2 or 3 rounds of coding interviews
- 1 round of system design and architecture
- 1 round of behavior questions or culture fit
- (optional) 1 round of bar raiser interview
- Making decisions and negotiating. Never accept an offer without negotiating!
If the candidate is local, phone screens can be reduced or even skipped.
If it is a internship position, onsite is skipped.
- throw your book Cracking the Coding Interview into the trash. The coding questions there are obsolete and too easy. Elements of Programming Interviews is better. However, by and large, books are not very helpful because what you need is deliberate practice not reading books.
- Go to Online Judge like Leetcode and Lintcode. Solve at least 70 medium to hard questions. The key is to practice in a large amount and with speed repeatedly.
Since OJ can help you tackle the coding interviews, here in this documentation we focus on soft skills, experience deep dive, system design and architectures.
Intro to 4 kinds of NoSQL database: Key-value Store vs. Document Store vs. Column-oriented Store vs. Graph Database
empathy / perspective-taking is the most important.
- realize that code is written for human to read first and then for machines to execute.
- software is so “soft” and there are many ways to achieve one thing. It’s all about making the proper trade-offs to fulfill the requirements.
choose a sustainable architecture to reduce human resources costs per feature.
adopt patterns and best practices.
- missing error-handling
- callback hell = spaghetti code + unpredictable error handling
- over-long inheritance chain
- circular dependency
- over-complicated code
- nested tertiary operation
- comment out unused code
- missing i18n, especially RTL issues
- don’t repeat yourself
- simple copy-and-paste
- unreasonable comments
- semantic version
- never introduce breaking change to non major versions
- two legged change