Hacking the Software Engineer Interview

7029 2018-11-10 12:55

This topic is work in process

Table of Contents


The overall process:

  1. HR screen: HR will clarify the interview process and ask quick questions to filter out know-nothings
  2. Phone screen: 1 or 2 rounds of phone screens on coding
  3. Onsite: spending a whole day interviewing at the office in person
    1. 2 or 3 rounds of coding interviews
    2. 1 round of system design and architecture
    3. 1 round of behavior questions or culture fit
    4. (optional) 1 round of bar raiser interview
  4. 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.

How to crack the coding interview?

  1. 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.
  2. 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.

What can we communicate in the interview?

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)

Intro to Relational Database / SQL Database

Intro to 4 kinds of No-SQL database

Stream Processing (TODO)

Cloud Design Patterns

Communication Protocols and APIs (TODO)

Lambda architecture

System Design in Practice

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

Design a key-value store with external storage

How to write solid code?

  1. empathy is the most important.

    1. realize that code is written for human to read first and then for machines to execute.
    2. 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.
  2. choose a sustainable architecture to reduce human resources costs per feature.

  1. adopt patterns and best practices.

  2. avoid anti-patterns

    • callback hell = spaghetti code + unpredictable error handling
    • over-long inheritance chain
    • circular dependency
  3. effective refactoring

    • semantic version
    • never introduce breaking change to non major versions
      • two legged change
© 2018 硅谷IO
Built with ❤️ in San Francisco