Hacking the Software Engineer Interview7029 2018-11-10 12:55
This topic is work in process
- Table of Contents
- Experience Deep Dive
- Cracking the System Design Interview (Designing Pinterest or Instagram as an example)
- System Design Theories
- 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 Processing (TODO)
- Cloud Design Patterns
- Communication Protocols and APIs (TODO)
- Lambda architecture
- System Design in Practice
- 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.
empathy 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.
- callback hell = spaghetti code + unpredictable error handling
- over-long inheritance chain
- circular dependency
- semantic version
- never introduce breaking change to non major versions
- two legged change