My Google Onsite Interview experience

First and foremost, I didn’t expect to be invited for an interview with Google (GG) at all. A GG recruiter contacted me telling there is an opening Software Engineer (SWE) position, and asked whether I want to participate or not. Probably, they are looking for more SWE during this period. A little doubt since I know in order to pass their interviews, you have to prepare a lot, I know some have to dedicate their 6 months just to be ready for GG gruesome interview questions. Ultimately, I said yes, why not, I might not pass, but that will be a good learning experience.

After 1st Phone Screen interview, I prepared 3 weeks for 2nd and true Technical Phone Screen interview round with a GG engineer from New York. I passed it since the questions are quite forgiving. One recursion and one Dynamic Programming question.

After a week, the recruiter contacted me and said I will be invited for onsite interviews at GG office in Singapore. This typically the last round deciding whether you get hired or not. There will be 5 interview sessions, each in 45 minutes conducted by different GG engineers asking algorithm and design questions. All 5 will be done in a single day. GG generally allow you to choose as many months to prepare as possible before the actual interviews. I chose a month to get myself ready. Thought I was only truly able to use half of that time to practice my problem solving skills.

So now enter the actual onsite interviews:

  • First interviewer is quite nice, he asked whether I am nervous or not, and said it’s OK. For the actual question, it’s an array based question. The type of questions will generally lead you to a Dynamic Programming (DP) solution. After discussing with the interviewer about my Memorization variant of DP, I suddenly realized there is a better approach without using DP at all, it doesn’t use memory and has better runtime. So that’s it, the 1st interview went quite well, boosted my confident a bit.
  • Second interview had two string based questions, first one is easy, the second one is tougher. For the second question, within the allowed time frame, I was able to come up with some what a two pointers solution, that’s the best I can think of at that moment. In the end, I couldn’t derive to a more optimal approach. Also I think I had some difficulties communicating with the interviewer. Honestly, this interview did impact my morale.
  • The 3rd one was a design challenge. Some kinds of file content parsing. For this challenge, I used state machine approach. I think it’s open ended question. Some followed up Q/A after that and some chit chats. The interviewer is very friendly, of course the design interview is supposed to be more lighthearted than algorithmic interviews.
  • So after the 3 interviews, I had a lunch with a GG engineer in their campus. He is not one of the interviewers. We had nice conversations, about video games, console emulators and works.
  • After the lunch, 4th interviewer invited me for another session. This time she asked me to implement a parser for a specific language, but only a subset of it syntax, not the full version. I implemented a state machine based parser which handles more general cases than what she asked for. And it took too damn long to code. In the end, she said my solution could be simpler as told me that I overthought too much. I think it was a mistake, I think there was supposedly a harder version of this question which we hadn’t enough time to tackle.
  • So then the last interviewer came in. And the communication difficulties happened again. From the look of it, he seemed to not enjoy my problem solving approach. There was some disappointments on his face. Unfortunately, that made me enter nervous mode. I came up with a linear solution, but seemed my explanation was not convincing enough for him. Then I coded, with nervous mode, I think it’s obvious that I left some bugs here and there. I’m not sure there was supposed to be another question or not. And his disappointing face made me think my final solution was not correct. (After going home and discussing with my friend who is an active competitive programmer, and is better in algorithm than I am. This time with a calm mind and more clear and refined explanation, we concluded that my solution is correct. However, I know being correct or not is not enough. You have to be able to convince your interviewer with good explanation of your thoughts. For this reason, I think I failed that interview).

That’s the end of the interviews, the interviewer walked me through the exit door, and that’s it. I couldn’t stop thinking I could have done better, but what’s being done is done. Overall, it’s still a good experience for me.

 

 

Leave a comment