Hacking the Software Engineer Interview

5970 2018-11-10 12:55

This topic is work in process

# Table of Contents

# Overview

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
© 2010-2018 Tian
Built with ❤️ in San Francisco