This community has given a lot to me, so I wanted to spare a few mins to talk about my experience with Google. This post is a bit long, so hold on tight.
1. My Background
- 1.75 YOE
- Top 20 School (US News), degrees in Statistics and CS
- Prop trading + quant + SWE background (my prior role gave me exposure to aspects of tech and quant, although day to day was mostly Python scripting and building trading strategies; very little in terms of system design and architecting)
2. The Timeline
Google has quite a long process. As I’ll elaborate later, mine was even longer than what's typical because I had to redo the phone interview. From start to finish, expect at least 2 months (in my case, 3 months and ongoing).
- Mid May: Approached by a recruiter for an L4 SWE position. I decided to take about 5 weeks for prep time
- Late June: Phone interview
- Early July: Phone Interview 2
- Mid July: Got the thumbs up for the onsite
- Early August: Virtual Onsite
- Mid August: Passed Hiring Committee
- Currently: Just started team match
3. My Prep
- ~250 LC problems with an easy / medium / hard split of 25%, 50%, 25%. I think this is a good distribution to stick to. You need to pepper in easy to keep up motivation, but the bulk of interview questions from Google will likely be at a medium range (mixed in with easy-medium and medium-hard). Did all of this prep in 2.5 months (late May - early August). I stuck to questions from Google’s most frequent and Google top 100 lists.
- As the interviews approached, I solved many of the most frequent questions once again. Don’t forget to do this! It’s very easy to treat LC grinding as a numbers game, but repetition of high quality / frequent problems is key. IMO you start to quickly see diminishing returns after 200 problems (assuming you picked by frequency).
4. The Interview
I won’t be giving out specific questions because of NDA, but this should give you a solid idea. I also grade myself out of 5 for each interview. While I know it's quite hard to judge how we perform, I think I’m better than most at grading myself. I would often guess my exam grades to the T :)
Phone Interview 1
To preface, I was probably somewhat underprepared at this point. I had not even 1 month of prep and was at maybe 80 LC problems (and was coming off finance industry so my on the job experience didn’t help me a ton either)
- Q1: (Easy) Some trivial string manipulation question. I can’t even recall but involved parsing/splitting strings
- Q2: (Medium) Efficiently representing a language (ie. the English language). Think tries. There was some follow up about how we could modify the trie to represent multiple languages.
- Result: The interviewer was apparently on the fence in regards to whether I should proceed to the onsite. While I solved both problems, I’d messed up a couple of edge cases. When the interviewer pointed them out, somehow I introduced another edge case bug. I guess “sloppy” testing costed me here. Google decided to let me do another phone interview to prove my worth
- My Grade: 4/5 (I thought getting docked because of some edge cases was a bit harsh, especially when you don’t have a debugger and coding in a Google Doc).
Phone Interview 2
Had a lighthearted, engaging interviewer that made this interview a pleasure.
- Q: (Medium) Calculate stats about the “top K” elements in streaming data. Think heaps. I have some stats and data background so we spent a bit of time talking qualitatively about how we can use heuristics to handle massive input sizes (i.e. how do we extend the results of our sample to a much larger population)
- Result: The recruiter told me I aced the interview and had very positive feedback. To the onsite baby!
- My Grade: 5 / 5
Onsite Interview 1
This was definitely a close variant to a problem in Google’s 100 most frequent. I vaguely recalled solving the variant at some point, but frankly didn’t come in remembering how.
Onsite Interview 2
This ended up being the behavioral/Googlyness interview. It caught me off guard because I expected this to be the final interview of the day.
- Q: A bunch of general stuff. But there was a focus on resolving team conflicts. Also some hypotheticals similar to “what would you do if a teammate didn’t want to participate in an event that you organized”
Result: Had a really chill interviewer. He was casual and seemed a bit inexperienced himself, which made this a very friendly and less stressful experience :)
- My Grade: 4 / 5
Onsite Interview 3
Another very friendly interviewer. We chatted a bit too long before getting to the problem, which I think really costed me. Probably was 15 mins into the 45 min interview before we even got to the problem statement.
- Q: (Medium) Directed graphs and cycle detections
- Result: I struggled with this one. I went on a tangent that wasn’t fruitful at all. I should’ve thought through examples before diving into the code. I had maybe 20 mins left (keep in mind I didn’t start till 15 mins in) before I completely pivoted to a different solution. Didn’t really get hints from the interviewer, and actually almost figured out a solution. But the interviewer gave a few suggestions about how to clean up the code and succinctly represent certain data structures, and I really lost my rhythm. It was frustrating because I’m quite sure I would’ve solved the problem had I not been distracted with all the back and forth with the interviewer. There’s always a delicate balance between how much time to spend talking and explaining your thoughts, and the deep thinking that’s needed for some questions.
- My Grade: 3 / 5 (I didn’t completely solve the problem, but I would say at least 75% of the way towards a solution. I think to anyone reading the code it would’ve been obvious that it was nearly solved)
Onsite Interview 4
Had a quiet and seemingly introverted interviewer but was also super friendly. This time we jumped straight into the problem statement (thank goodness)
- Q (Easy): Super simple question involving strings and hash maps. This was at the easy end of an easy question.
- Q (Medium): Question involving autocomplete and english language. It quickly evolved into another trie question. There was a follow up discussion about how to handle misspellings, and alternate languages (i.e. Spanish). Some aspects were surprisingly similar to my first phone interview.
- Result: I think I nailed this interview. Solved questions quickly and talked in depth about the follow up questions.
- My Grade: 5 / 5
Onsite Interview 5
This interviewer came off as a bit curt frankly. I was also ready to be done with the onsite so I didn’t put much effort into appearing enthusiastic lol.
- Q (Hard): This was truly a hard question. Not some medium/hard borderline thing. This involved an insightful observation and two usages of dynamic prgramming (as in 2 helper methods, each which needed dp). I know this is very vague but can’t really come up with a one liner to describe this problem.
- Result: I needed some hints for this problem. I also took a long time to get to that “aha moment” with the insight. The interviewer nudged me in the right direction but after that I will say that I figured out most of it myself. I narrowly solved the problem in the time limit, but had some sloppy code as I started speeding towards the end.
- My Grade: 3 / 5. This one is hard to grade because I assume not many people are expected to do this all by themselves in an interview setting. So if we can assume that we’re “allowed a hint” on this question, I would grade myself more like a 3.5 or 4.
5. Advice
- Quality over quantity, seriously. Practice the fundamentals and the frequent questions over and over till you drill in basic patterns. I don’t believe in doing 500+ LC questions without redoing say the top 100 over and over and truly being able to nail the majority of medium level questions.
- There are a lot of topics that I feel are too infrequent to worry a ton about (i.e. things like balanced trees, more obscure graph algos). Focus hard on string manipulation, applications of stacks / queues, heaps, graphs, dynamic programming, recursion, a bit of math basics (combinatorics, math tricks), and tries!
- Did I mention focus on tries? I had 2 trie questions! I used to think this was a lesser topic in interviews, but really focus on tries! Know how to implement one by heart (and do operations like search and insert), and get comfortable with possible variants (how to handle misspellings, etc)
- Think out loud when you practice! You’re expected to in interviews. Scratch that. You’re basically required to (in order to have a shot of getting in)! Get comfortable explaining your solution to yourself. See if you can teach your friend your solution in a nearly ELI5 setting.
- Super cliche I’m assuming, but be yourself! Especially with the behavioral, give honest, true to heart answers and treat your interviewer like a coworker/friend.
- You’ve got to get into a “reset” headspace. A bad interview can mentally weigh you down a ton. So after every interview, wash your face, take gulps of some ice cold water, and pretend like its your first interview of the day
6. Overall Result
About 10 days after the onsite, my recruiter told me that I passed the hiring committee. However the sucky part is that I was down leveled from L4 -> L3. I’m guessing I sent mixed signals with my 3rd onsite interview. And my 5th onsite interview could’ve definitely been smoother as well. Given my YOE and the fact that I’m not even from a SWE background at a "pure tech company", I think this is appropriate. But the road’s not over yet. Just starting team match, and from the look of it hiring has dried up and this might take a while.
Good luck, and soldier on!
Edit 1: (9/20/2020): Its been over a month since I was approved by HC, but still haven't had a single team match interview :/ Recruiter has said that hiring has really, really dried up at L3 level.
Edit 2: (11/7/2020): I officially team matched mid October and just completed week 1 at Google! Was waiting in team match for about a month and a half, and only had one team match call (the one I ultimately joined) in that time.