About the interview

Time
2 hours
Topics covered
Programming
System design
Debugging
Specialized knowledge
Tools needed

Working dev environment
Google account
Google Chrome 72+ or Mozilla Firefox 66+
Microphone
Quiet place

Topics covered
Programming
What’s covered:
In this section, we ask you to write a console application.
Things to keep in mind:

This will be text-based (no graphics).
This is largely a solo coding exercise where the interviewer will observe you as you write.
The exercise will involve writing output to the console, and will sometimes also involve reading input (strings and numbers) from the console.

How to prepare:
Choose a programming language that you're comfortable with

Make sure you have a working dev environment for that language (Google Docs and most online IDEs don't work)

If you would like a practice problem, implementing the game Minesweeper in the console would be a good one.
Short Answer Discussion
What’s covered:
In this section, we ask questions in a range of technical topics. We’ll focus on web systems, data structures, and low-level systems.
Things to keep in mind:

We do not expect anyone to be strong in all of the above areas.
The idea of this section is to find what each engineer knows the most about (we generally view the interview as a search for areas of strength).

How to prepare:
This section is naturally a bit difficult to prepare for. However, resources we like on these topics include Advanced Programming in the UNIX Environment and The Algorithm Design Manual.
Debugging
What’s covered:
In this section, we give you an existing codebase (of several hundred lines) and ask you to fix several bugs (or failed test cases).

We will be debugging a program designed to crawl a website and look for broken links. The program takes an initial URL, loads that page, makes sure that all links on that page are functioning, and then recursively checks all links on the same domain. The program is a bit clever in how it works, however. It only needs to make a full GET request if a link points to an HTML page on the original domain. If the link is to a JPG image, say, or a page on another domain, the program can send a HEAD request instead to verify that the resource exists, but does not need to use a full GET request to download the resource. HEAD requests, in case you’re not familiar, are an HTTP method which means “Tell me all the headers and status code you’d send me if I sent this as a GET request, but don’t actually send me the data.” They’re nice if you want to quickly determine if a server will give you a 404 without taking the time to read the whole response.
Things to keep in mind:

This section is available in Python 2 and 3, Ruby, Java, Go, C++, C#, and Javascript.
We’ll give you access to the program in the language of your choice, a set of regression tests, and several failing test cases we would like you to fix.
This is largely a solo coding exercise where the interviewer will observe you as you write.
You’re free to Google anything you want. Generally treat this as if you were debugging code at work. Anything you’d do in the process of debugging in that situation is fair game.

How to prepare:
If you want to prepare, make sure that you are comfortable in debugging tools in your language of choice.

Python: Before the call, you should install the Python requests library. If you use Python 2, you can do this with pip install requests; in Python 3 it might be pip3 install requests. This should be pretty painless.
Ruby: The library we’ll send you relies on the following gems. It would be great if you install them before the interview:
arg-parser, curb, rspec, and rspec-core.
Java: The project requires Java 8. It’s a Maven project, so you need to be able to import a Maven project into your IDE.
Javascript: The project requires Node major version 7 or greater.
Go: The project requires Go 1.8 or greater.
C++: The library relies on libcurl. If you want to use C++, please figure out how to build this skeleton project before the call, as we often don’t have enough time to get it set up during the interview itself.
C#: The library relies on NLog, and Visual Studio 2015 or a more recent version.

System Design
What’s covered:
In this section, we’ll talk through the design for a hypothetical web system.
Things to keep in mind:

Here we look mostly for practical experience building websites/web systems.
If you do not have experience building websites and/or web systems, that is fine; we look for all kinds of strengths.

How to prepare:
We recommend making sure you’re familiar with databases, app servers, web servers, HTTP, and how all these fit together behind a modern web system.