First off, I’ll spare you the suspense. I did **NOT** get offered a job at Google… but I did have a lot of fun!

I was first contacted back in December by a Google talent recruiter. Mike had been in the middle of his Google interviews, so it was an exciting time.

Was I interested? Definitely! There are few in the software industry that wouldn’t jump at a chance to work for Google - one might call them the Mecca of the software industry (but only if it doesn’t offend anyone; if it does, let’s just call it a pretty neat place to work).

I first received an email from the recruiter asking if I was interested, and where I wanted to look for a position. She told me that she thought there was a good fit for me for a Java position in Mountain View, but I asked her about looking for a job in Waterloo. Was it a mistake? Maybe, but she did mention that I could look into a position in Mountain View if the Waterloo position didn’t work out.

Over the Christmas holidays, the recruited emailed me to let me know that the Waterloo position was a C++ position, and that perhaps I would have a better chance finding interest in Mountain View, but the next day she emailed me back to let me know that the Waterloo offices were interested.

I was excited. One of my goals, new years resolutions if you will, was to step out of my comfort zone with regards to software development. It seems that every script I needed to write was being written in Perl and Bash script and every piece of software I was writing professionally was in Java. I wanted get out of the habbit of relying on Java/Perl/Bash. This seemed like a good opportunity as C++ is one of many languages I wanted to work on this year.

Well, I guess what you really want to know is what sorts of things I
was asked on my interviews. Well, before that, there are a lot of
things that need to be reviewed; first and foremost, **asymptotic notation and complexity**.
The interview questions consisted of asking me to come up with a
semi-high level algorithm and then to explain the asymptotic complexity
of each part as I went along, and then what the final complexity of the
algorithm would be.

The next thing that should be reviewed is your basic sorting algorithms and their respective complexities. I made sure to know heap sort, bubble sort, selection sort, binary sort, merge sort, quick sort and insertion sort. Also important, you should know the memory requirements that each algorithm uses to run (in big-O notation). I was asked in my first interview to not only minimize the runtime, but also the memory footprint (ie. insertion sort although is O(n^2) in runtime, it is O(1) with regards to memory).

The next thing I reviewed was memory structures. Hash’s, binary trees, n-tier trees, etc and the properties that each one possesses. If the interviewer asks you about a binary tree, make sure you know the properties that make a binary tree special so that you can leverage it in your solution.

Now, on to the interviews.

The first interview started with a quick introduction from Steve about where he worked within Google (Google NYC) and what he worked on there (Google maps). Then it was right down to business. The first questions (from my memory, so don’t blame me if it isn’t 100% correct) was as follows:

*Given a binary tree, and two leaves, can you find the lowest common node of those leaves?*

I won’t give you the answer here. I’ll let you work it out for a bit and perhaps if there is enough discussion in the comments, I’ll leave the answer there. When giving my answer to the interviewer, I think I could have been a lot clearer. I was nervous; very nervous. I really didn’t know what to expect, even though Mike prepared me the night before. The answer I gave was right (as far as a solution and its complexity) however, about 10 minutes after completing my interview, I figured out a way to better leverage the binary tree structure which would have also given a much clearer answer. Also, I was asked to minimize both the runtime and memory usage in my solution.

The next interview I had was about 2 weeks later and it was with Chris (also from the Google NYC offices) but he worked for Google’s blog search. This one started a little different; he asked about what I had worked on at my previous companies and more specifically what I felt the coolest project was. I had so many to choose from at Pason, but I went with the biggest and more complex, the DataStream project. After that, he asked me my ideal problem to solve was if I could leverage all that is Google. This really caught me off guard. I should have known it was going to come; I even read about someone who was asked a similar questions. I spent so much time preparing for the technical part of the interview, I forgot about the lighter part. I wish I could have done it over. My answer was a lame scheduling mash-up for Google maps. I really needed to think bigger… hell, my friends and I have talked for years about cool stuff that we could do if only we had a company that was as big as Google.

I felt like an idiot, but what can you do. No sense dwelling on that. There were two technical questions that comprised this part of the interview. The first was:

*If you were designing the Vector class in Java, how would you code the add(Object) method?*

Deceptive; not hard per se, but there are a few things that need to be worried about when solving this question.

The next question was the algorithm question:

*If you were given an unordered set of plane tickets
which represented legs in a trip, can you figure out the order in which
to use the tickets?*

This was a really fun problem to work on, and again, I’ll save the answer for the comments. Remember that they want you to come up with the lowest runtime algorithm that you can.

Three days after I completed this interview, I got my letter letting me know that they were not going to be offering me a position. Was I disappointed? Sure. I have to admit that I thought about how neat it would be to work at Google, but it wasn’t all bad. It helped me fulfill another one of my new years resolutions - to get back into studying the “science” of computer science, and although stressful, the whole experience was a lot of fun.