I was contacted by a Google recruiter on my birthday, June 24th, and asked to interview with Google for an opportunity on the SRE team. A few days later I had a phone screen.
The interviewer asked me to rate myself in various languages, linux concepts, and a few other technical aspects between 1-10. A “10” being you wrote a book on the subject… or actually invented the technology. Needless to say, I actually didn’t rate myself higher than a 6 on anything. I honestly didn’t know quite how to rate myself in “Java”. I know a lot about parts of Java, and little about other parts.
The self-rating was to guide the interviewer on what questions to ask next– which I honestly didn’t do that well on. She asked a question— something like how to count the number of 1’s in a binary number— which is a problem straight out of the must-read book I will mention later on. I fumbled my way through it, but it was far from optimal. Also, I should have memorized my powers of 2.
Somehow, I managed to move on to the technical phone interview (wait, this wasn’t technical???). Google has a reputation for having a very difficult interview process. After this slightly shaky phone screen, I was worried about what I was getting into.
Technical Phone Interview
The technical phone interviewer had me code a solution in a live Google Doc where we could see each other type. I found it difficult to program without the aid of the IDE. I won’t divulge the exact question here but I will speak generally about it.
The interviewer posed a problem and said I could first solve it simply, and then move into solving it with a distributed system. I immediately went to solve it using the distributed system because I didn’t think it would be that difficult. At my current job, I had already been working on developing distributed systems so I was familiar with different techniques and algorithms. The solution ended up requiring a basic knowledge of hash maps, map-reduce, and distributed systems. The interviewer allowed shortcuts like calling a method like sendTaskToServer(serverId, task) and we could assume the implementation.
The real test was on how to divide the workload and combine the results into the correct answer. I found the problem very fair and enjoyable to do, and felt really good about this interview. I don’t think I could have done a better job and I was feeling confident.
The recruiter got back to me and said I did really well. She asked if I knew anyone who worked at Google who I could use as a reference. Apparently, if you know someone at Google and they vouch for you— you can skip the second technical phone interview and move straight to the onsite interviews.
Unfortunately I didn’t know anyone at Google. Even so, a few days later the recruiter told me I would be able to skip the second phone interview and she would pass me off to another recruiter to work with setting up my onsite interview.
The Onsite Interviews
I setup my onsite interviews for a date 2 weeks out. The recruiter gave me a link to the Google Interview Resources which can be used for preparation. The recruiter strongly recommended the book: Cracking the Coding Interview: 150 Programming Questions and Solutions. If you want to interview at Google— or Amazon, or Netflix, or Apple, or etc— you must absolutely read this book. This book will get you ready. I picked it up and read it cover to cover.
In the first chapter it recommends prepping at least a month in advance. I had 2 weeks…. crap. Every night for 2 weeks I did problems, I studied tree traversal, sorting, big-o… it was like cramming for college exams. It was all stuff I already knew but just hadn’t used in years.
I flew out of Denver on my way to Mountain View with my wife in tow for moral support. We decided to tack a little Napa vacation on the end as a celebration– or consolation– depending on how it went. So, at least we would have some fun after it was over. The interviews started the next morning, so we checked into the hotel and I did some last minute reviewing before bed. Instead of the traditional sheep counting to fall asleep, I was doing red-black-tree manipulations in my head.
The next morning came all too soon. My wife drove me to the Google campus to drop me off. At this point I was so nervous I was afraid I would be sick. More than anything I was praying that I would be able to end the day thinking that I did the best job I could have– no regrets. I walked to the building I was told to meet my recruiter at. I passed a lot of people on the way and thought about how each and every one of them had gone through what I was about to.
I was met in the lobby by my recruiter. After a brief introduction he led me outside to walk to another building.
“How are you?” he asked.
My voice wobbled, “Incredibly nervous”.
“Good” he replied. “If you weren’t, I’d be nervous”
I thought to myself, “What have I gotten myself into. What if I just take this Google bike and ride away and never come back?”
In the next building he led me to an interview room and presented me with the schedule and a goody bag. The goody bag contained a Google mug.
I laughed nervously, “Well, I guess at least I get this mug”.
He explained, “There would be 6 interviews total. 2 before lunch, a lunch interview, and then 3 after lunch. Each interviewer will provide a score that the hiring committee will use to determine if an offer will be made. Except the lunch interviewer. They will leave feedback, but no score so its meant to be more informal.”
And then, my first interviewer arrived. My recruiter said his goodbyes– I wouldn’t see him again. The first interviewer’s question revolved around a game he had made up. How you could design a program to verify a particular move was valid, a program to list the next move possibilities, etc. This was one of the more challenging interviews. Most of the interview was talking through algorithms with mock pieces on the table. There was about 15 minutes of whiteboard coding thrown in. I think I did well, didn’t ace it… but well enough.
My second interviewer questioned me about Java concurrency. For example, how to construct a Singleton in a thread safe manner– which is something everyone is familiar with and people rarely do correctly. His main interview problem which required extensive whiteboard coding was a variation of a classic computer science problem only with a twist that required you to think about scalability.
I often tell people that the single most useful data structure ever invented is the HashMap. Everyone should know how a HashMap works and understanding it was the key to solving this interview challenge. I did really well on this interview and was very happy with my performance. I know, I know, I am not telling you the exact problems I was asked. Sorry, NDA :-).
Finally, it was lunch time. The building where we would eat was quite the walk away. Google’s campus in Mountain View is composed of many buildings over several square miles. It was really nice outside so I didn’t mind the walk. It was better than standing in front of a whiteboard.
We chatted generally about various things, personal background, Google technology, things I have been working on, where I was from– it was a friendly conversation. The main Google cafeteria is enormous. Inside its basically a mall food court with all different types of foods– all free. Unfortunately, my nerves killed most of my appetite so I just pushed a salad around my plate. He asked about some work I had done building distributed systems and how certain things were implemented.
After lunch, I was escorted to another building– The Google Maps building. This is where I would have my final few interviews. The first one was related to a tree traversal algorithm and the second one, HashMaps. I did well on both– except when asked to analyze the running time. I am really not great at that.
The last and final interview was on systems architecture and was by far the most “fun” (for small degrees of “fun”). I was given a real-world problem of scalability and asked to come up with various distributed systems architectures to address the problems and various other ones that were thrown in later. This was a good interview to go out on. I feel like I really nailed it. It was over. I did it. No regrets.
I sat outside the Google Maps building and reflected on what I had just done. I had gone through arguably the most rigorous technical interview process in my industry and I felt good about what I had done. I didn’t know if I would get an offer, but I did as well as I could have and that was enough for me.