What Did I Do To Prep?
Things were a little hectic with the end of Extreme Blue and our trip to New York, and my plan to read The Algorithm Design Manual (Amazon) on the bus fell apart somewhat after the bus broke down, I went 5 hours without water in the heat and had a small breakdown. There was (apparently) a hilarious ending that I don’t remember in it’s entirety, which I won’t be sharing on the internet…
That said, I did make it through section 1 which was really helpful and the book actually contains suggested interview questions – great for preparation. I also read more of Java(TM) Puzzlers (Amazon) and started Making it Big in Software (Amazon – good read, mostly for once you’ve made it through the interview though I think).
How Was It?
It was fun. I got to hang out with smart people and code for four hours! My first interviewer was a woman, who was super nice and that really helped. My lunch-buddy was a woman too, so even though diversity at Waterloo is not great it didn’t seem that bad at the time! I don’t know if they do that deliberately or not. I didn’t find the questions too tricky and could answer them all, probably because I’d done enough preparation that I’d got into that way of thinking. I had 3 technical interviews, and one architectural one (designing an API).
Much the same as last time. Knowledge of APIs, particuarly String, Collections and arrays, but additionally:
- If coding in Java, know 1.5 features. One of my interviewers was more C++ and hadn’t coded in Java 1.5, and so when I used a for-each they asked the question, and I could answer – for-each loop added as of 1.5. Generics, too. I coded one question using Generics. Some people can find the syntax tricky, so if you’re going to use it (and IMO you should for good design) – know it.
- Immutability! In the API-design question immutability made the second part of the question (how would you change it so you can do X) immeasurably easier. Know when you want to have immutable classes, and use get/set and visibility accordingly.
- Trade-off’s between space and time. For another question, before I started coding I could say, I can do it in this complexity with this space overhead, or this (higher) complexity with no space overhead. In the end, we coded both. But I started with the easier one!
Unusually for me, I was happy with how I did! Despite having less time to prepare for this round, I’d remembered the stuff I’d gone over for the last interview and left feeling that I’d done the best I could.
Incredibly, I heard the following day (!) that I’d made it through regional review, my references were collected the day after and I received an offer a week after that. The HR guy in Waterloo was amazing in terms of keeping me in the loop and I got emails from two of my interviewers (one from each round) congratulating me. I’ve read (and heard) about people having a miserable experience interviewing at Google, but that was not at all my experience. The process took a couple of months, but that was because of my schedule and not them. I really liked everyone I interviewed with and everyone I encountered was super nice. I’m really excited about going to work there – and frankly still in shock that I made it!
I start in January. I guess I’m leaving Ottawa and moving to Kitchener/Waterloo. Bring on the next adventure!