Wednesday, January 11, 2017

My Google Interview Journey

The Hook


It's mid November and I'm minding my own business, when out of the blue I get a message on LinkedIn.  It's a technical recruiter from Google, we'll call her "K" (you know, like in The English Patient), and she says she was impressed by my HackerRank badge for Algorithms.  She wants to have a chat and learn a little bit about my background, she says.  Of course this blew my mind, in a sort of "glitter and confetti shooting out my ears" sort of way.  I've had recruiters hit my up on LinkedIn before, but this was Google!  I allowed myself to glow in it for a little while, but I tried to keep myself in check too.  At this stage, it was just one phone call with a recruiter.


Later that week she called me and we chatted for about 30-45 minutes.  She explained how the technical recruiting process worked at Google, we talked about my background and what I'm looking for in my career.  She also gave me a short "quiz" that I apparently did reasonably well on.  We also discussed my doing a proper phone interview with an engineer.  "Oh my, this is getting all too real!" I'm thinking.  

This meant, of course, that I had to consider the idea of relocating, which brought a basic assumption I'd always made about myself screaming to the surface:  That I would live in Wyoming pretty much forever.  I've figured for a while that I might end up working in Fort Collins CO and commuting, or maybe even working remote... but underlying my entire career road map was this idea that I was going to live in my current house forever.  The positions K was talking about would require me to move to one of the bigger Google offices:  Mountain View, Seattle, New York.  Was I ready for this?

K gave me some tips on preparation, and signed me up for a couple of small workshops Google puts on via hangouts that cover algorithms and coding.  I felt like this was my shot, and I wasn't going to flame out for lack of effort.  So I sought out as many resources as I could find to help me prepare for a technical interview.  


Preparation 1.0


The very first thing I did was binge watch the lectures for the MIT 6.172 class "Performance Engineering".  It seemed like a good subject to have a little bit of exposure to, and there were definitely a few interesting bit twiddling tricks I picked up, so I think that was worth the time investment.  I'll go back and give the class the proper treatment later, it was definitely an interesting subject.

While 6.172 was good, I wanted to spend as much time as possible on resources that were specifically geared to helping me with a technical interview.  I found a seminar from MIT called Hacking a Google Interview, which I added to my wish list.  I also found a workshop by Harvard student Kenny Yu, which included some good tips and a handout with some sample problems.  There was also a 2+ hour course on PluralSight, Preparing for a Job Interview, by John Sonmez, that I worked through.  

After spending a day or two on these disparate resources I decided I just needed to suck it up and work through as much of Gayle Laakmann McDowell's book Cracking the Coding Interview, that I could get through in the three weeks I had to prepare.  Interspersed with reading and coding, I managed to squeeze in a few videos on mock interviews: Gayle and Danny, FizzBuzz, Edgar and Becky (Google), Histogram.  Also liked Moishe Lettvin's talk about doing interviews at Google.

One thing that seemed to be repeated in every resource I found, was the fact that coding on a white board is much different than coding in an IDE, and that one should practice accordingly.  I took this advice to heart early on and started filling up notepads with Java code.  I felt like this was a really strong experience for me as I was preparing, because it really brought to light a lot of the things I take for granted when I have an IDE in front of me.  It's so much easier to refactor code when you don't have to physically erase it and rewrite it! 

I learned the value of carefully considering the flow of my code.  It's so easy to write a couple quick test cases or throw in a few System.out.println() to get a feel for your code, I found myself being more deliberate and mindful as I was stepping through the logic of my algorithms and the actual behavior of my implementation.

I spent hours and hours on Cracking.  With my interview only a few days away, I really wanted to get at least one mock interview under my belt.  I stumbled on Pramp.com, which is a free peer-to-peer mock interview service.  To use the service, you select a few time slots, and it matches you with a partner.  They give you a question to present the other person, and you take turns working through it.  I managed to squeeze in one session the weekend before my phone interview, and it was great experience.


The First Payoff


Finally, after three long weeks, I got my shot.  I stayed home that morning and took over our study (My wife did yeoman's work keeping our three year old out of my hair).  The engineer from Google called me up and I put him on my headphones to keep my hands free.  He asked me one quick "soft" question (which felt more like ice breaking than anything) and then we pretty much dived right in.  I came out 45 minutes later feeling better about that interview than I have any interview in my life.

I thought it would be a week or more before I heard one way or the other from the recruiter, but it was just two days later that she called me up and delivered the good news:  I was getting an onsite!  I was so stoked I wanted to do backflips and cartwheels... but that would have landed me in the hospital and then I couldn't have studied.  I got curious and looked into what the chances of getting an offer at any of the various stages of the interview process.  
  • Application: I've seen various figures, from 100+ to 400+ applications per hire.  That's less than 1%.  Thanks to K, I got to skip this stage.
  • Phone interview:  This starts to get into murky waters.  I saw "35% get an onsite" somewhere but can't recall if it was a credible source.  Some anecdotal accounts were pretty bleak.  
  • Onsite:  Again all over the place.  Some accounts say 10%, others 50%+.
In other words, Google knows and everyone else can just sort of guess.  Whatever happens, ultimately there is one thing I have control over, and that is my effort.  So it was time to redouble those, and roll up my sleeves.  


Preparation 2.0


I decided to give HackerRank some renewed attention (since it opened the door in the first place).  So I started cranking out challenges.  These were mostly easy and medium difficulty, but I tackled a few hard problems as well.  Over the course of a week I tacked on another 1500 pts, moved my rank in algorithms from 1000+ to the low 200s, and moved up into the 99th percentile.  It was a great boost for confidence and morale, but I knew it wasn't quite what I needed to be doing.  The hand coding and mock interviews were going to be my greatest tool, so I moved back to those.  

I still have most of the "medium" and "hard" challenges from Gayle's book, as well as the extra problems from the Harvard and MIT seminars, so the plan is to continue pounding those out.  My flights, hotels, and rental car are all booked.  I have a date with destiny on January 11.

[12/30/2016]
I managed to read all of Steven Skiena's book The Algorithm Design Manual. I thought it was a very readable treatment of algorithms and data structures, though it seems like it spent a lot of time on NP reducibility and funky set and network flow problems... so I guess if that is a big thing in my interview I'll be set.  I also burned through the Udacity course Computability, Complexity, and Algorithms.  This course was put together by Georgia Tech, and covered many of the same concepts as Skiena's book, which made it a nice companion.

I have four pramp mock interviews under my belt, with another scheduled for tomorrow.  After four positive reviews, apparently they give you unlimited "interview credits"... which I wasn't really worried about anyway since I got a free one after every positive interview feedback.  At least now it's a complete nonissue.  Now that I've done a few, I can say I really see the value in doing them.  They really force you to think about the problems and communicate your thinking to another person.  There is a big difference between "vocalizing" in your head to an imaginary interviewer, and actually making coherent sounds come out of your mouth.  I tend to get really tense and nervous in interviews, and my hope is that by acclimating to the interview atmosphere, talking strangers through my problem solving steps, and coding in front of them, that I'll be at ease when I get to Mountain View.

On another note, I did work through the MIT "Hacking the Google Interview" material, and frankly I wasn't impressed.  Cracking the Coding Interview gave better advise, had deeper coverage, and a much better collection of problems.  The Kenny Yu workshop materials look more promising.

[1/3/2017]
Happy New Year!  So the Harvard Computer Society material is actually very good, it really complements Cracking well.  Another resource I've found myself leaning on of late has been the video tutorials by Tushar Roy on YouTube.  He walks though a ton of algorithms, step by step, and often will also code up a solution as well.  Jackson Gabbard is another YouTuber that walks through a few interview question, and I thought his videos were decent too.


The Big Day


My flight from Denver was delayed by about an hour because they got a warning in the cockpit and had to "reboot" the plane.  Apparently the pilots get to call the help desk too lol.  Pretty much everything else on the trip so far has run pretty smoothly.  

At this point, I felt like I was about as prepared as I could hope to be.  I've done a total of seven mock interviews since mid-November.  I've probably completed 100+ challenge problems.  Read books and articles.  Watched hours of video.  It was all down to this.  I was the guy who studied all semester and went out to a movie the night before the final.  Because I was ready.  All that was left to do was relax, take a deep breath, and execute.  

Last night I did a coding problem from CtCI, then did a simple Knapsack challenge on HackerRank this morning before heading over to Google.  Nothing too strenuous, I just wanted to "keep loose" so to speak.  I went to bed pretty early, around 10pm.  I wanted to have a good nights sleep.  My interviews weren't until 1030am this morning, so I didn't have to get up very early, but I was out of bed by 7am anyway.  Had a good continental breakfast, and left about a quarter to 10.  The traffic on Shoreline was bumper to bumper, but it was still a quick drive (helps that the hotel is only 3 miles away).  

The interviews were pretty much what I'd expected.  A few minutes of talking about me or my resume (at least two Googlers asked me about my appraisal background), and most of it was spent talking about algorithm problems.  Some I struggled on, others I felt like I knocked out of the park.  I tried to make a conscious effort to give my interviewer vocal cues when I was thinking, particularly when I was kind of stuck.  The questions really ran the gamut, and some really caught me off guard, but overall I feel like I did well.

Lunch was really great.  My second interviewer got roped into taking me to lunch because my lunch chaperone was a no-show, but he was really gracious about the whole thing.  We talked a bit about the culture at Google and life in the Bay Area.  He was really selling me hard on the company shuttles.  I had steamed cabbage, parsnip steak-fries, roast chicken breast, and lentils, but the best was the cinnamon rice pudding for desert... holy cow I could have eaten a half dozen of those!

My recruiter told me it would be less than a week for me to hear whether I'll move to the next step in the process.  If my performance was borderline, I may have to interview again, but it seems more likely I'll either bomb out now, or move on and (fingers crossed) get an offer if they can match me to a team.  We'll see...



8 comments:

  1. Wow, talk about serious preparation, but then again, as you said it's Google!

    Either way, please keep us updated.

    Good luck!!

    ReplyDelete
  2. Thank you! I'll update this page when I have some news, one way or the other.

    ReplyDelete
  3. I just saw this post today. That's great! Whatever happens, congrats!

    ReplyDelete
    Replies
    1. Thanks Terry. I didn't make the cut *this* time, but it was a great experience and I'm sure the future is still bright for me =)

      Delete
    2. I'm sure it was a great experience just to go there. You might find this Google study guide on Github of some interest: https://github.com/jwasham/google-interview-university

      Delete
    3. Thanks for the link, Terry. Very impressive breadth and depth on the resources there, awesome!

      Delete
  4. I'm not sure about Pramp because the concept doesn't let you know how the interviewer is good in his domain so I suggest using mockrabbit.com or interviewbuddy both are good in their respective domain.

    ReplyDelete
    Replies
    1. I didn't really think of it like it was an expert coaching session, more just practice in solving the problem and communicating with the interviewer effectively. So for my purposes Pramp was good enough and had the advantage of being free. For someone who wanted expert feedback, then one of those services would be a good option, you just have to be willing to pay for them.

      Delete