Technical Interview Prep
Technical Interview Prep
Technical Preparation
Why would any company do this, you ask? Because the fail/pass ratio
for technical interviews is extraordinarily high (on average, over 90%
fail), and companies want well-prepared candidates. Interviewing 100
people and hiring 10 is not an efficient use of anyone's time. Hiring
takes a lot of time, and every company wants to do better.
OK. So with all of this material available on the Web and elsewhere,
why are so many folks out there still bombing technical interviews?
Simple. From my experience, and in speaking to countless colleagues
in technology that are highly experienced interviewers, one thing is
patently clear: Engineers of all types and educational backgrounds
either passed or failed the tech screens and coding loops due to a
simple root cause: preparation or lack thereof. So let's address and fix
that, right now.
Assumptions
First and foremost, you already know how to code. You may or may
not have a CS background - this is OK, but you're already a good
coder, you just need a CS refresher, and a game plan for interview day.
The Basics
First, the good news. Virtually all software companies, especially the
large ones, use the same interview process (in many cases to a great
degree of similarity). We won't cover the process here, but these 3 blog
posts cover what you should expect to encounter in 90% or more of
your technical interviews at most companies:
1. "Get that job at Google" - Steve Yegge. The original article, and by far
the best reference on the topic
2. "Get that job at Facebook" - Carlos Bueno
3. "Get that job at Microsoft" - Nick Ciubotariu (shameless plug)
If you only read one article, read the first one. Then read it again. It's
must know for anyone who will go through a code-intensive technical
interview, now or in the future.
Now, the irritating news. The articles are great, but also broad. That's a
ton of material to cover. And they just tell you to study everything.
And it gets worse. In Computer Science, there are an infinite amount of
questions that can be asked. So we need specifics.
What to Study
First, the absolute must-haves, in order:
1. Trees (especially Binary Search Trees)
2. Trees (especially Binary Search Trees) - again
3. Big O Notation
4. Hash Tables
The rest of the study topics are self explanatory. Big O notation is
absolutely necessary - you will be asked to determine time/space
complexity in almost all your interview questions, and how to
optimize your code for better time/space complexity. You are almost
guaranteed to be given time/space complexity guidelines for designing
your code. You are extremely likely to see a question where the
solution will involve the use of hash tables. You are guaranteed to see
at least one OO Design question or Systems Design question. And you
are guaranteed at least one algorithmically driven question.
1. Arrays
2. Recursion
3. Linked Lists
4. Stacks/Queues
5. Bit Manipulation
Dedicate one day to reviewing that week's questions and study topics.
This is extremely important for material retention. Take one day off per
week to give your brain a break. This is important, everyone needs to
rest and reset.
No, no and no ☺
Do not interview while you're sick!! It's not only not good for your
own personal sake of well being, no one wants you there to get them
sick! I admit to having done this once - I was on the verge of
pneumonia, and my interviews had to be halted and I had to be helped
out of the building as I was about to pass out from dehydration.
Thankfully, I interviewed with a very understanding and courteous
company who offered me another chance to come on campus and
interview once I was healthy again.
Relax and listen closely. When you engage your interviewer after a
coding question has been given to you, do not start coding right away!
Ask clarifying questions - this is absolutely expected. For instance, you
may be asked a question such as "Delete the nth to last item from a
list". Would you start coding this immediately? I posit that you really
couldn't - here are clarifying questions that I would ask prior to
formulating an attack vector or designing an algorithm to solve the
problem.
What type of list are we discussing? "A linked list"
Do you want me to code the helper Node class? "No, you can assume
you have int data and Node next"
Additional pointers
Use the whiteboard judiciously. Start at the top left and work your way
down, then right. Write as legibly as possible. Clearly separate pseudo-
code from real code. Use generally-accepted coding conventions (in
Java, for instance, method names have mixed case letters, beginning
with a lower case letter and starting each subsequent word with an
upper case letter). Make sure your parentheses and brackets are
balanced, and you're not missing a sea of semicolons in your functions.
Stay away from one letter variable names if possible; of course, this
excludes loop constructs (int i, j) and try/catch blocks (exception e).
Loop counters always start with i for index.
Be sure to take at least one break. I've been through an interview with 7
interviewers on the panel where a bio break wasn't offered. Ask for one
if needed. Stay hydrated and stay positive.
Study Guides
(for clarity, I have no affiliation with anyone or anything I will
recommend in this article, and will receive zero compensation for the
recommendations I make). These are, in my opinion, just great
resources to help you along the way.
Books:
1. Cracking the Coding Interview: 150 Programming Questions and
Solutions – to date, there is not a better book out there for technical
interview preparation
Interactive Learning:
1. My Code School - One of the best resources I have found that
comprehensively covers data structures, algorithms and CS concepts in
general. Best of all, it's free!
2. Udemy – Data Structures and Algorithms. – For those unfamiliar, or
those that need a good refresher. There is a cost for this course ($49)
Online Training:
1. Leetcode – With over 150 questions and counting, this should be your
absolute first destination for practicing programming questions and
code katas.
Useful Sites:
1. GeeksforGeeks – everything but the kitchen sink is here :), including a
very nice “interview corner” section, and countless programming
questions
2. careercup – Developed by the author of “Cracking the Coding
Interview”, this site remains an invaluable resource to everyone
looking to improve their technical interview skills
Improve and maintain, over time
Once the rust is gone, and you're fully prepped, it is dead easy to keep
your CS and interview skills sharp: solve one coding question per
day. I've been doing this for the past 3 years or so, and I've realized the
following benefits:
I'm never out of practice