Saturday, April 20, 2013

How to prepare for Google Software Engineering Internship interviews?

I have been asked several times how to prepare for the Google internship, after I came back from the Google fall internship in 2012. So, I decided to sum up my experience of preparation for the technical phone interviews in companies such as Google, Facebook, Microsoft and so on. Here are my suggestions:

  • No matter what your background is you should know basic algorithms and data structure concepts. It is also important to know concurrent programming concepts (I assume you have a background in programming). I strongly recommend you to read two books: The Algorithm Design Manual by Steven Skiena and Programming Interviews Exposed: Secrets to Landing Your Next Job. For the first book, read data structures, sort and search, Graphs and solve all the exercises. You can find the answer of the exercises by Googling. For the latter book, read all chapters. It’s easy to go through it. If you don’t have enough time just read the first book. It gives a good recap of algorithms quickly. However, I found out that some solutions mentioned in the first book are not really the best solution to solve the problems. If you really are eager to learn algorithms and have enough time, go for CLRS book.

  • It’s not about solving the given problem with the best solution, it’s about solving the problem completely. Of Course best solution is a plus and solving with a naive solution is not acceptable. You should be able to have a complete solution in the end, ignoring some minor bugs or syntax errors. Sometimes, even pseudo codes are accepted, depending to your interviewers, as far as they represent a complete solution.

  • Find someone to practice pair interviews. If you have phone interviews, practice phone interviews with your friend sitting in the same room you want to have the real interviews.

  • Practice coding on a board or Google doc.

  • Try to solve the problems in a top down fashion. Do not start coding unless you fully understand the problem and you found the solution. Or at least try to simplify the problem to a simpler version of the original problem and solve that first. And then extend the solution to solve the original problem.

  • This is very important to know that, all the interview questions are solvable in 45 minutes and most of them can be solved using a good knowledge of algorithms, data structures and some other topics like concurrent programming. So, if you see that the question looks complicated and it’s likely you’re not familiar with the context, do not panic. Stay calm and try to avoid the surface complexity of the problem and find the similarity of the problem to the known contexts. Then the answer just will appear to you (hopefully!). For example, you may face a question about cryptography or breaking a code and you have no background in this area. But stay calm. Be sure that the question is in your circle of knowledge. So ignore the context of the problem and try to simplify the problem to a known context.

  • Practice quantitative and logical reasoning beforehand!

  • Practice to be calm and thoughtful. Sometimes standing firmly and looking straight can help you become calm and confident. Don’t forget deep breaths.

  • In the end, there are a couple of helpful blogs out there which I recommend you to read them also. 

Hope this can be helpful to you, wish you good luck! :)