Disclaimer: I work at Google. The opinions stated here are my own, not necessarily those of my company.
In September 2014, I interviewed with a few major large-scale software companies for an engineering position and managed to get multiple offers. After that some of my friends asked me about interview preparations tips and strategies. I decided to compile those into a clean list and post it here. I hope it would be helpful for others as well.
This is by no means a complete list. It consists mostly of my notes prioritized based on my needs at that time. For context, I was working on an operating systems project and I was looking for a new project related to distributed systems.
Technical interviews usually have three components:
Algorithm & Data Structure Questions
You need to be able to answer these questions in about 15 minutes each, with a working code. In other words, interviewers typically expect you to solve 2-3 of these in a 45-60 minute interview session.
My preparation strategy was to brush up (read) and practice (solve) as much as possible. There are a few resources to help:
* [Cracking the Coding Interview](http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X) – Try to solve as many questions as possible. The real value of this book is the questions rather than the answers. Some questions (especially the ones in the latter sections) are complicated for an interview setting, skip them if they become time-consuming.
* [CareerCup](http://www.careercup.com/) – I suggest solving algorithm questions especially the ones tagged Google, Microsoft, Amazon, Facebook and LinkedIn first. Once you are comfortable enough start timing your solutions and try to solve them in 15 minutes.
* Do some online coding exercises. This will be especially helpful for phone interviews.
* Do not just go over the problems and solve them mentally. Use pen and paper, talk through your problem and write a real working solution.
These are generic questions about designing a system. Usually a big system that needs to scale. These questions typically take 1 full interview session. Actual questions might be vaguely related to the real systems of that company. It is worthwhile think/read about their problems and scale. You can get some insight if you read their blog (e.g. New Tweets per second record, and how!).
- HiredInTech has a great resource on this for getting this started, start from The System Design Process.
- Make sure to watch David Malan’s lecture on scalability.
- Try to make up and solve as many question as possible on paper.
- Additional resources:
- Amazon Dynamo Paper – Good overview of consistent hashing and other concepts.
- High scalability blog. There are interesting articles, but some are more useful for interview preparation, such as:
This is where you will be asked to talk about an old project of yours. In some places it will be one full interview session. And in other places each interviewer will take some time to ask about old projects. There is also a behavioral aspect to it to. Interviewers would like to see how excited and confident you are about your earlier work.
You will usually have freedom to pick one of your projects and talk about it. Because of that it is easier to prepare for it. Think about one or two of your projects and explain it to someone else with a technical background in about 15 minutes.
That is all. You can find lots of useful general, non-technical tips in other places. Go ahead and read about them in your down time. I have a few of mine:
- Most importantly, take your interviews seriously and prepare well before you go.
- Right before the interview solve a simple question on paper. This is to get yourself into problem solving mode. For me this was something like writing down a working quick sort in the parking lot before I walked into the building.
- Be physically ready as well as mentally. I stayed physically active during my preparation, mostly doing outdoor activities. It helped me relax and I also had lots of energy when I was ready to study.
Once again, this is mostly a partial list of resources to help you and does not necessarily reflect the interview process at my current company. Hope you will find a project that you are excited about. Good luck!