Hacking the Software Engineer Interview

22540 2018-05-02 18:41 (Last Updated 2019-09-25 01:57)

This topic is work in process. You can also visit the google doc version - BigDataKV.

Welcome to join us for discussion: https://t.me/system_design_and_archiecture

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

Introduction to Architecture

Data Partition and Routing

Replica and Consistency

Availability (TODO)

Improving availability with failover

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 NoSQL database: Key-value Store vs. Document Store vs. Column-oriented Store vs. Graph Database

KV store

Stream and Batch Processing

Cloud Design Patterns

Communication Protocols and APIs

Public API Choices: JSON RPC vs. GraphQL vs. REST vs. gRPC

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 Memcached or an in-memory KV store

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?

he likes it

  1. empathy / perspective-taking 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

    • 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
  3. effective refactoring

    • semantic version
    • never introduce breaking change to non major versions
      • two legged change

If you find this article helpful

follow me on Github :)

© 2010-2018 Tian
Built with in San Francisco