Amazon and Google

Preparing for an interview with Google or Amazon

If you are set for a technical interview for the internship with one of the software companies, congratulations! Although the hard work is still ahead of you, from now on your offer depends solely on your preparation and performance. It might not sound very assuring, but trust me, you’ve made it through the gambling part of the process, when you are not sure if your resume will make it to the hands of the right recruiter, and if she’ll be interested. You are at the stage when you reward depends solely on you. Now it’s time to crack the interview.

There are some speculations about the degree of complexity of the technical interviews in different software companies. Some would say that Google interviews are harder than at Twitter; some would say Facebook’s interviews are toughest in the industry. I personally have gone through the interviews with Amazon, Google, Bloomberg, Microsoft, and some startups. I have to say that I did not spot significant differences in the degree of interview complexity. That being said, not all of these interviews were successful for me. In this article I will share what I think were the most useful resources for technical interview preparation, and I will concentrate mostly on my experience from Amazon and Google interviews. I will not walk you through the whole preparation point, but I will point you to the right books and articles. As my life credo goes, get the maximum result with the minimum effort. Hence, I will point you to one college textbook, one online article, and one book. I believe this is the minimum effective dose to ensure you will pass the interview. Let’s roll.

If you are a Computer Science major (or related) and you are going to intern at Amazon, you will be called Software Development Engineer Intern (SDE intern). At the same position at Google you’d be called Software Engineering Intern, which is the same thing. In both companies it usually takes two 45-minutes phone interviews to be considered for an internship. These phone interviews usually happen back-to-back with 15 minutes short break in between. Two mediums are used to conduct a remote interview: phone call for audio and internet-based shared document to see how you code. In both cases the interviewer will take 15-20 minutes to talk about your background, strengths, preferences, and the rest of the time to solve one or two problems that involve testing your critical thinking and coding ability. At the end of each call there’s usually some time left for short questions that you might have for the interviewer. Let’s consider each piece in detail.

Interview structure

Talking about your experience (15-20 minutes)

The interviewer will have your resume in front of her, and she will be asking related questions. This is your chance to expand on those projects that you had to briefly summarize on paper, and give the interviewer more details about yourself. Depending on how the process works inside the company, your interviewer might be interviewing candidates for her own team, or might be interviewing interns for the company in general. In the former case the interviewer is well aware of the set of skills and technologies needed for the project her team is working on, so she might ask you whether or not you have this specific knowledge. Be honest, the interviewer does not judge you on the type of technologies you know.

Basically, make sure to give a good and honest overview of your abilities and you should be fine. If the company is interested enough to interview you, it’s likely that your resume is already attractive. Just cover details in your talk.

Technical part (20-30 minutes)

As you might imagine, coding and solving the problems is the cornerstone of the technical interview. It is the most challenging part too. But as with many other things, practice will make it much easier for you.

Keep in mind that the interviewer will not give you a poor evaluation if you don’t know some fancy frameworks or obscure programming languages. (By obscure I mean anything other than C/C++ or Java). The question that they are trying to answer for themselves is a) if you have a minimum basis in computer science theory; b) if you can code in at least one common language; c) if you are brainy enough. If the answer is yes for all three sub-questions, they know that you can pick up the technologies, frameworks, or even new languages on the way. So concentrate on demonstrating the ability to figure things out, rather than knowing things.

Speaking of the basic knowledge of computer science theory, there’s a textbook I highly recommend. If you have an option of taking a class that uses this book, go ahead and do it! The book is Algorithms by Robert Sedgewick and Kevin Wayne.

algorithms_cover

The book covers the basic data structures and algorithms. They cover sort and search algorithms, graphs, strings, and explain the basic concepts like the complexity of algorithm. What’s more important, the authors do a pretty good job of comparing different algorithms and data structures. For example, once you cover all the sorting algorithms, they would highlight that this one is fast, but takes up a lot of memory; that one is also fast, but isn’t stable; that third one easily degenerates for specific inputs, etc. This is great because in the industry they don’t expect you to implement the sorting algorithms (as they are already implemented, just load the library), but they do expect you to understand them, and know which one is most suited for specific needs dictated by the project. Hence, these comparative summaries are extremely useful, and will be very handy in your interview.

The book is simply a pleasure to read due to the great detailed explanations, talks on practicality, and brilliant examples. If you read the whole book and understand it 100%, you are in a good shape for the interview. However, it is unlikely that you can read the whole book over a short period of time. So if you are short on time, glance over the book, refresh some basics. If you are only planning to score an interview with a software company in the future, take your time and enjoy this great textbook.

Awesome news is that you don’t have to buy it. The whole text is available online at the book site and the PDF version is not hard to find either. (Great example of Google eating Amazon’s bread, huh?)

Another book is more of a help-yourself piece of reading. It’s called Programming Interviews Exposed by John Mongan and Noah Kindler. I had the very first edition of the book when I was preparing for the interview with Google, and some of the chapters seemed a little outdated. Luckily for you, they are now in their 3rd edition. But even in the older book they did a great job covering the most frequently encountered data structures and algorithms that you are likely to face in your interview.

programming_interviews_cover

It took me about a week-and-a-half to get through the book, refreshing my knowledge and solving the problems in the book. The authors wrote their book revealing what’s going on in the mind of the interviewer, which helps understanding the psychology behind the interviewer’s questions and hints.

Finally, there’s an article online that you are likely to be referred to by the recruiter when she advises you on how to prepare for the upcoming interview.

Follow this link: https://sites.google.com/site/steveyegge2/five-essential-phone-screen-questions

The article is named The Five Essential Phone Screen Questions. The author lists the expected knowledge of topics. He makes a good distinction between the interns and full-timer requirements, so you will know exactly what you are expected to know to pass the minimum bar.

Questions for the interviewer (5 minutes)

Now that you’ve maid it through the technical part you will be tempted to wrap up the interview and be on your way. Resist the temptation. The interviewer will ask if you have any questions for her. Don’t say no. Use these last 5 minutes to build up some relation (as I said you might end up on the interviewers team) and show that you are interested in the company.

Ask the interviewer about the team she’s working on. It is a fair game to ask if you are likely to end up on her team if you get an offer. In that case, there are tons of things to figure out: how big is the team, what are the projects, etc. Basically, if you set a goal to get all the info to have a good picture in your head of what your internship is going to look like, you’ll come up with gazillions of good questions to ask. What’s even better, your interest will be sincere and the recruiter will feel your enthusiasm about joining the company. That’s the kind of impression you want to leave her with.

Final hints

I will leave you with just a few final hints on how to make a better impression in the interview.

Never shut up. It doesn’t matter if you need a moment to think something through or you are completely stuck. Don’t shut up. Let the interviewer be aware of you thought process. Don’t be afraid to look dumb. If the interviewer knows where you are, she will try to steer you in the right direction if she feels you need some help.

When you start the problem, don’t be afraid to take the most trivial approach if anything more sophisticated isn’t striking your mind. Just say: “Hey, I know this is not the most efficient way to do that, but I’m thinking of sorting the whole input set and go from there”. If you are completely off the track, the interviewer will try to steer you away from that idea. However, a lot of times it is a valid way to start with a simple algorithm and then see if there are corners that you can cut and heuristics to apply.

Feel free to leave your comments and questions below. I’ll try to see if there are big blind spots I left uncovered, and will follow with new posts if needed.

Good luck with your interviews!

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>