Levels of Technical Interviewing
What to expect when interviewing to code at a software company
So I've done a lot of interviewing in my time in the Tech industry and over that time I've learned a lot about interviewing for technical roles at software companies from both sides (as an interviewee and interviewer).
The pattern I've noticed with interviews is that there’s levels to this shit.
Level Overview
Level 0 : Behavioral questions and asking what projects you've done before
Level 1: Mostly Domain specific questions
Level 2: Code a data structure or algorithm or notice to code it from word problem
Level 3: Compose several data structures and algorithms to build a new one with the properties of its parts.
Level 4: Mixture of previous levels but add combinatorics, maybe fermi problems, statistical analysis, and/or other interesting mathematics.
Here’s some more detail on what you’ll encounter if you want to interview for a technical role.
The levels are aimed phone screens and onsites. I’ll have an addendum at the end for other styles as well.
Level 0
Behavioral and background questions
In these interviews interviewers want to know
- That you aren't crazy.
- That you've done some things before that at least seem to imply that you can do the job they want you to do now.
These are easy. As long as you seem like a normal enough person and you’ve done some coding before you’re in there.
Level 1
Domain Specific and (maybe) some general code design pattern questions
In these interviews interviewers want to know
- That you can code at all
- That you have written some code or worked with some systems like the systems they are looking to get someone to work on now.
- The code you produce will be at least somewhat maintainable in the future
i.e. for a web development role (my specialty) they will ask questions that test your knowledge of:
- html, css, and JavaScript
- cross browser issues
- responsive development (so many different screen sizes nowadays)
- whatever back-end programming language or stack the company is working with
- basic object oriented programming or code organization
- etc.
But it will all only be things that you could learn strictly from the experience of building things with whatever technologies.
Level 2
Intro To Data Structures and Algorithms
In these interviews interviewers want to know…
Now before I go any further whenever I get to this point in a conversation about interviews people start to get bent out of shape about it and question whether or not these questions are really pertinent to the job you would do.
You should really read my other posts about that.
- https://medium.com/@thatboiwill/least-bad-11531dfce122
- http://www.quora.com/I-am-quite-bad-at-algorithms-but-good-with-Android-and-iOS-Is-there-a-place-for-me-at-companies-like-Facebook-Palantir-Google-etc/answer/William-Harris
Really though stop and read them…
(the quora one even has a step by step program on how to get good at this)
Now that you understand lets continue.
On this level people are testing:
- that you understand some basic computer science theory and its implications on the performance of the code you would write and invariably the systems that would be built with it.
- that you understand how to think about code well enough to do it without a computer in front of you
Usually at this level your interviewer will either directly ask you to code an algorithm or data structure (i.e. a linked list) or they will give you a word problem and expect you to identify that you should use a certain data structure or algorithm to solve the problem.
Level 3
Now we’re getting in deep.
I will say in my experience of software interviews if you master level 2 enough to be decent at level 3 that will get you an offer from 80% of companies.
What is level 3? Level 3 is understanding data structures and algorithms well enough that you can compose them in to a new one with the properties of its parts or transform one into another.
Great example from glassdoor
Convert a binary search tree to a sorted, circular , doubly-linked list, in place (using the tree nodes as the new list nodes).
To answer this question you have to know about binary search trees, how to do an in order traversal of one, and then be able to take that knowledge to turn said tree into a linked list.
Also at this level graphing algorithms (just BFS and DFS) and maybe heaps come into play.
If your interviewer really wants to get in your head they’ll give you a problem that has a dynamic programming solution that is the most efficient answer but can be answered without it.
At this level is where if you develop enough mastery you have a legit shot at a dev role even at one of the more notoriously difficult places to interview.
Level 4
Master this level and people will beg to hire you.
Level 4 composes all the previous levels and also adds in
- discrete math
- probability and statistics
- maybe fermi questions
- <insert question from your interviewers favorite math subject>
Great explanation of the study prep to make it through a level 4 interview
The syllabus for the interviews […]
1) Dynamic Programming
2) Super recursion (permutation, combination,…2^n, m^n, n!…etc. type of program. (NP hard, NP programs)
3) Probability related programs
4) Graphs: BFS/DFS are usually enough
5) All basic data structures from Arrays/Lists to circular queues, BSTs, Hash tables, B-Trees, and Red-Black trees, and all basic algorithms like sorting, binary search, median,…
6) Problem solving ability at a level similar to TopCoder Division 1, 250 points. If you can consistently solve these, then you are almost sure to get in with 2-weeks brush up.
7) Review all old interview questions in Glassdoor to get a feel. If you can solve 95% of them at home (including coding them up quickly and testing them out in a debugger + editor setup), you are in good shape.
8) Practice coding — write often and write a lot. If you can think of a solution, you should be able to code it easily…without much thought.
9) Very good to have for design interview: distributed systems knowledge and practical experience.
10) Good understanding of basic discrete math, computer architecture, basic math.
11) Coursera courses and assignments give a lot of what you need to know.
12) Note that all the above except the first 2 are useful in “real life” programming too!
Also you can check my quora post linked earlier in the blog.
If you want to work on the best teams in the software industry be they where-ever they are: Google, Facebook, Palantir, or <insert hot startup>…
This is the level you need to be at to have any strong chance to get an offer.
Level 5
At this level people are just showing off.
They’ll ask you about physics, random esoteric math. Anything goes.
As long as its hard to answer.
Only God can help you here lol.
Also sometimes if you get a question at this level your interviewer is messing with your head. They are already planning to recommend you get offered and just want to see how far you knowledge stretches for amusement.
System Design Interview
(update 7–23–2018)
In a lively disscussion on the Hackathon Hackers group on facebook someone pointed out that I did not emphasize the importance of system design interview enough. I will flesh this out more over time but in a nut shell.
“ level 0 you can turn on a computer and Level 4 you can design at least a toy cloud infrastructure”
that feels about right
New age interviews
So the levels I described (for top tier teams whose mantra is “keep the hiring bar high”) above were basically started at Microsoft in the late 80s and while they dominated the industry in the 90s (and who knows maybe even IBM before them).
Very little had changed since then up through Google in the 2000s, and Facebook in the late 2000s to now.
Until now. (jk there have always been other styles. they’re just less popular)
Pair Programming
I’ll let a post from Square’s blog explain this style:
I did 3 pairing interviews with 3 different Square engineers. They would usually start off the problem by providing some of the boilerplate code, (sometimes even write tests), and then we would work through it together.
These interviews stood out because I was coding just as I would in the real world. I got to sit at a computer and just program — working through the problem, bouncing ideas off and asking question of the engineer who was interviewing me, googling syntax and APIs that I had forgotten, and actually running, testing, and debugging the code until it worked. I didn't even have time to be stressed during the interview process because I was having fun doing what I loved: coding.
Apparently Stripe also uses this style.
Work Sample or take home tests
Prolific Hacker news poster Thomas Ptacek is a passionate advocate of these
The company will give you a problem to work on at home.
Generally its build an small program or application.
Pretty straight forward.
Code Challenge or Capture the Flag
Lastly but not leastly companies are experimenting with using competitions such as topcoder and hackerrank as interview processes.
Also capture the flag hacking games. I’m the most excited about this style.
A CTF (as they are referred to) is a challenge where you must write code and/or figure out how a system works and alter to win.
Fun cnbc article about them here
Thomas Ptacek is working on a startup dedicated solely to creating these for the purpose of interviewing talent.
Can’t wait!
Fin
Thats that. Now you know all I know about interviewing.
— Will