Before you read any further, I have to say I'm feeling miserable right now because I just for the recruiter email saying it was bad news. I told myself that if it is bad news, I would post it to Leetcode so here we go...
Google has been my dream company to work for the longest time and as such, I don't think I had interviewed at and failed at any other companies as many times as I have at Google. I remember the very first time I interviewed for Google, I was one semester into my computer science class, I had barely learnt what strings meant and what loops were so obviously I failed the phone screening. This was about 5 years ago.
Fast forward 3.5 years later, I was finishing up university and had been applying for graduate jobs. I applied for Google not really expecting anything to come out of it. At this stage I didn't really know what coding interviews meant. By some miracle, I passed the phone screening and got invited for an onsite round. I was overjoyed. GOOGLE? FREE FLIGHTS? FREE HOTEL? Being the noob that I was back then, I was afraid of pushing it back too much so I scheduled my onsite for 2 weeks after my phone screening (big mistake, I had barely any time to prep as well as try to keep up with uni work). It was probably during this 2 weeks that I found out about Leetcode, Cracking the Coding Interview, and Blind. As you can imagine, I blindly leetcoded and did not crack my onsite interviews. I had 4 rounds and I think I only did well in 2 out of the 4 rounds.
Fast forward a year later, I applied for some random Google office location that I have not heard of before. They sent me a coding online assessement. I was a bit annoyed that I didn't even get a phone screening so I didn't try that hard so I didn't hear anything back.
Fast forward to now, I started this journey several months ago. I managed to get in touch with a Google recruiter. It was in my dream location. My dream company, my dream job in my dream location so I started studying. I brought the Cracking the Coding Interview book this time (rather than download illegal copies online), I started to Leetcode, I spent most of my free time and weekends "going back to school again". It was kind of miserable (not going to lie) but I was determined. By the phone screening round, I felt ready. And I passed the phone screening with pretty positive feedback.
But the recruiter said, because of COVID, they had to change the priorities of their hiring at the moment so I was to be considered for another role. I wasn't that pleased about the change but still dream company, dream location, semi-dream job. As the role and team I was being considered for is slightly different I had to go through System Design interviews. No problem I said (with the fake confidence I should not have had). I asked if I could get around 3 months time to brush up on my coding skills and prepare for these "System Design" interviews (whatever that meant). Then I spent the next 3 months doing on-and-off coding and data structures and algorithms questions. I did a few System Design questions but thought it was ok as long as I know the basic components of designing a system (and boy was I wrong but more on that later).
Anyway after my long 3 months of on-and-off, half-assing around, pretending the world is not on fire, I decided to do my virtual onsite interviews. No free flights. No free hotels. But still Google and that was all that mattered.
I remembered being so nervous for my last onsite that my nerves almost had a breakdown so this time round I decided to be as chill as a stoner (minus the weed). Whilst this calmed my nerves significantly, it also meant I had a bit of a cold start for the first interview which went something like this:
Google Interviewer: "Given a list of versioning strings, can you sort them in order".
Me: "What are versioning strings?"
The problem was essentially, given ["1.1.0", "1.2.1", "0.9.1", "1.1.2", "1.3.4", .... ] sort them so that it is in ascending order.
I spent a majority of the time implementing a comparator method to compare two strings. Then even longer trying to test and debug the code. Then he identified a flaw in my implementation so I spent the next 5 decades fixing it and by the time I was done, he was done, God was done, everyone was done with me. I didn't score full points on this round but I could still qualify if I did well on the next 4 rounds.
The second interview went too well. I was definitely warmed up after my cold start from the first one. The interviewer told me, given a list of floating points, find all the pair of floating points whose sum would be less than or equal to some limit. I started rambling a little bit, turns out I somehow rambled on the right tracks and then got to a working solution about 10-15 mins later. The coding part took even less time then we just spent the remainder of the time having a chat. I felt good after this one because I definitely passed it and scored full points.
Then came the System Design interview. The one I brushed off thinking I just had to draw some diagram and talk through it. I was probably feeling a little too over-confident after my last round as well at this point. The interviewer asked me to design a key-value data store. And I just froze. Did he just tell me to design a cache? No, design a key-value data store like a simple database. It sounded like a really simple question and yet I had no idea where to start. All that crap I had learn about scoping out the problem, figuring out the features of the system, who the users are, how many users there will be, how much data there will be, etc went flying out of my head and checked into some free hotel I couldn't stay in because of COVID and well, I pretty much struggled through the entire session. I remember at one point I looked down at the time and thought, dear lord could this go any slower? I just want it to end. When it did end, I didn't want to continue with the next two rounds. I knew I had little chance of coming back after this embarrassment.
But I picked myself up and told myself I should still give it my best and I did. The next round was anothing coding round. The interviewer started by saying, "Given some coordinates...." and I thought, oh dear god, its a matrix and some robots needs to traverse the matrix and I need to do DP or some crap like that, "...which are the coordinates of routers in a network. These routers can broadcast messages from one router to another as long as the coordinates are within 10 feet of each other. So given one router's coordinates (A) and another router's coordinates (B), find if it is possible for router A to broadcast a message to router B." I ended up using a Map to build a directory of all the routers a particular router could broadcast to. And it was only during the testing and debugging stage when the interviewer let it slip that I had implemented a BFS solution that I realized that I had indeed implemented a BFS solution. I didn't even realize, how embarrassing. Luckily, he didn't realize that I didn't realize. So all in all, it was a good interview. If I didn't score full points for this one, I could only hope I scored Full Points minus 1.
My last interview was a behavourial one or Googleness/Leadership interview but it was just a chat. More of a Q&A about your professional life really. I got asked questions like, "Tell me about a challenging time you had face at work" and "Tell me about a project you took initiative on" and "Tell me about a time you notice team conflict and how did you deal with it" and other absolutely life-changing questions that I don't really remember. Sacarsm over, it went well. I think I passed my behavioural round.
So if I scored myself, I think I did 50%, 100%, 20% (out of self-pity/sympathy), 80% (maybe 90% actually), and 90% (or maybe 80%) = 3.4. I don't know what the scoring metric that Google uses to measure candidates are and I may be a failure at onsites/system design interviews but even I knew that self-estimated score is too low to pass so when the recruiter email came today to confirm it, I'm not shocked but I'm still sad.
I'm disappointed about the outcome but I am also very glad I embarked on this journey because I could feel the sense of commitment and support from this community and so with that, I just want to say thank you and for anyone who is crazy enough to read to the end which is more of a rant post more than anything else, I wish you all the best and I hope you fail less than me (by learning from me - maybe) and I hope I will be able to read your success stories on here and live vicariously thought you while I wait for another year of my suspension from Google to expire.
:)