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! :)

2 comments:

  1. Hey Hooman! It's nice that you started to share your thoughts to the world via a blog. I read this post yesterday. Interesting points indeed. I have to admit though that I was a bit puzzled by your penultimate remark that characterizes your submissive stand and that's what I'm addressing here:

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

    I'm totally aware of Google's overwhelming burden for anyone who's willing to venture into it. It is very difficult to get in and not just everyone is capable of it. So that puts you, who I personally know, in a special position.

    But at the end of the day, it's an interview just like others. What I infer from your post is "you must study EVERYTHING and they can ask you ANYTHING! If you have Chronicles of Narnia or Dalai Lama diaries in your book shelves, go and read them thoroughly! They may throw you one of them."

    A person who's not aware of data structures or who has no knowledge of logical reasoning should not even go for an interview. I remember a friend of mine who opted to do an interview with Google and they told her "What were you thinking?" from which she became pissed. But she had no right to get pissed.

    You're either the rocket scientist who deserves that job/internship or you have come to the wrong company. And you were from the first kind, and she, alas, from the latter.

    And that was the only thing I found wrong with this post. Keep writing and I will even be harsher in my feedback next time. People like you are not allowed to give people the cold feet.

    Have a nice day pal!

    ReplyDelete
  2. You need to follow a very organized and disciplined approach to prepare for the Software Engineering Job at Facebook/Google/Amazon/Microsoft etc.

    Actually all these companies e.g. MS, Google, Amazon, Facebook, Apple follow an approach on which that measure the thought process of a candidate.

    And they use different means to evaluate that, but yes most of them uses Algorithms/Data Structures/Open-ended questions(If you have applied for a software engineering job) as one of the approach to evaluate the talent.( As those are the base to develop the technologies).

    To be accustomed with algos/data structure/coding , you must have understood/practiced the minimum e.g. :

    (Step-1): You should have practical understanding of the Algorithms (e.g. When to use BackTracking, When to Use Divide and Conquer, Why double hashing required?, Where brute force concept can be applied?) (100 Hours).

    (Step-2): You should have practical understanding of Data Structures e.g. (Practical use cases related to :when to use circular buffer , or when to use adjacently list or the combination of both or something else to solve the problem ).
    (100 Hours)

    (Step-3) : You must practice several coding problems to implement the things which learn from Step-1 , and Step-2 (you may do the following choose any coding language for the choice of yours (C, C++ or Java or Python or PHP or any one else ).
    (100 Hours)

    (Step-4): Solving the problem doesn't mean just to solve it, but to understand the best way to solve it e.g. The given technical problem can use various ways to come to solution, and you might want to use the optimal one. (How you connect the given solution with the computing/memory resources e.g. Memory/Processing Power)
    (100 Hours)

    Most Important One.

    However other than programming you might need to understand the main concept for the interview is to keep the interview active and this requires some action from your side, such as the following:

    You need to talk.

    You need to explain.

    You need to discuss.

    You need to express your views.

    You need to understand clearly the questions given to you.

    You need to understand the interviewer’s expression and mindset to un- derstand those questions.

    You might need to ask appropriate questions to understand the question or any other discussion item. (100 Hours)

    And also :

    Prepare : "Please tell me about your self" , "Your skills related positive/negative further interest" , Basics for the most needed computer science concepts or anything as you presented on your "CV/Resume".
    (100 Hours)

    Above is just a sample plan, you may customize the way you want(e.g. 100 hours to 10 hours or something else) - Click to Amazon, to find the best books you might need.

    (Here Google doesn't mean the Google, it means any company which is very creative to introduce the computer science related products ).

    ReplyDelete