[NDA] Google | L4 | Japan | Feb 2020 [Offer]
Anonymous User
29065
  • Status: BS, 5+ Yoe in Tier-1 Company (In Japan), Top University in Japan
  • Position: Software Engineer (L4)
  • Location: Japan
  • Date: Feb 2020
  • I just want to start by saying big thanks to Leetcode and the community here. I felt it is a much more fair game now, since everyone can access the same amount of resources.
  1. Background
  • I was contacted every year by Google recruiter for several years, but I loved my job and refused every single time. Until late last year, I think I needed a change and proactively contact the recruiter who approached me before. I told her I am ready to apply but need some time to prepare. She told me to prepare first and then let her know 1 month before I was ready for phone interview.
  1. Preparation
  • I started my preparation around October. I used Leetcode for practicing, Geeks4Geeks for refreshing, CLRS+Algorithms (Sedgewick) for references, *** for System Design. I really love math and algorithms, so it was really enjoyable.
  1. Technical Phone Screen
  • After 1,2 months (December), I got my phone interview scheduled on January. I still had another month to prepare, but I felt pretty confident at this point.
  • The interviewer went straight to ask a programming question. One was related to tree traversal (similar to LC Medium), which I solved in 10 minutes. He then moved on to ask an LC Hard level problem. I had never seen it before, but I figured out I needed to use Line Sweep, so I coded and made it work. I missed on edge case, but I noticed it myself and was able to partilly resolve that.
  • 8AM the next morning, I received an email from my recruiter to schedule a phone call from 9AM, and the wording really sounded like bad news. I searched on Blind "Google phone interview call the next day" or something like that. More than half said it was bad news, and I was really confused, since I thought I did OK. Thankfully, the recruiter just tried to talk to me to make sure my experience matched the feedback, which was positive.
  1. Onsites
  • 3 coding interviews + 1 System Design + 1 Googliness
  • 1st, I was asked to code in Laptop so the interviewer didn't need to note my code :). I didn't know I would have other choice other than the whiteboard, but I was happy to accept. He started with a very basic question, then follow up, then another follow up (anyone knows graph would be able to crush these questions easily). He then asked me another question, kind of strange question, I think I was able to analyze and made a working solution (probably not optimal), but I think he was happy with it since it was only 10 minutes left.
  • 2nd interview was Googliness, so you know, a bunch of behaviors.
  • 3rd interview is another coding, he started by asking an LC-Easy question, I made it work in 10 minutes including testing time, so he moved on to ask an LC-Medium question. I explained the logic, how I would do it, he clearly knew that I was in the right track, so he told me no need to code, and keep asking follow up questions (generic, thread safe, etc).
  • 4th interview, so far, the only one I felt challenged. It was a very interesting question, which I never seen before (not similar to any LC I know). After analyzing it, I was able to come up with the solution by using Graph (It's Google, prepare for GRAPH) representation and cycle detection. I barely finished coding before time, and we tested it together, and the interviewer told me it was correct (so nice of him, some interviewers won't tell you if you're wrong or correct).
  • 5th interview was System Design, I was worried about this as I don't really know what to expect. However, I was so lucky, he asked me a question that I knew so well that after 15 minutes asking, he litterlly told me that he would give up asking this question (since he realized that I knew too much) and switch to another one. The next question, is again, something I built before, so I was able to come up with a workable design and answer all follow up questions.
  1. Results
  • I was called by my recruiter 2 hours after my interview and she told me the initial feedback was very positive, with zero red flag, so she will move my application to HC asap.
  • I finally got the offer as L4 (strong L4, noted by HC). The feedback was: My system design went very well, but the question itself is not big enough to justify me as L5. I guess I have never had chance to actually aim for L5 anyway, since what else I could do if it's because of the question :(. Anyway, I really did what I could.
  1. Tips For Coding
  • I did a crazy amount of LC, 613 Mediums, 213 Hards (in 3 months). I would say 70% medium and 50% of hard I could do by myself, the rest I need to read the solution or hints or discussion. I know lots of people do a lot less and still pass, but I just wanted to make sure I prepared the best that I can. I learned a lot, probably too much. Some of my favorite topics are: Segmented Tree, Line Sweep, Cycle Detection, Sliding Window.
  • I started with Medium. At the beginning, I struggled a lot, but still be able to solve around 2 medium in one hour. Then after I solved around 2,3 hundreds of those, things change. During my vacation, I just keep coding, and was able to solve 25 mediums/day. I kept pushing myself for that speed, sometimes I would stay up late just to maintain it. As for hard, I did by category, start with those I am most confident with: Tree+Graph+LinkedList+Stack. I read books and *** article, Leetcode discussion and official solution. I master all graph algorithm (mst, shortest path, dfs, toposort, cycle detection), I can literally code those without even think. Next I move on to the really hard ones, those tricky problems. Honestly speaking, I did those just in case and I also wanted to learn, but I really doubted I would see any in actual interview. I skipped dozens of hard problems such as Design Skiplist, who would ask that?
  • 1,2 weeks before onsites, I made a bunch of lists to keep track of problems I want to check again or I need to finish before the interview. I scanned through ALL problems in Algorithms section (>1000), including Easy, Medium, Hard. Then I classified those to: A-Easy Problem (according to me, not LC), B-Problem I know exactly how to solve, but I prefer to revisit again, C-Problem that I certainly need to revisit. Put B and C in one list or separated lists I repeatedly do the process for a week. I did around 5,6 iterations. Each time, the size of those lists subdue. From the whole algorithms section (>1000), at the end, I think I had a list called "2020-ALastTime" containing around 20 hard problems. I skimmed through that list the morning I had Google onsites.
  • Try mock interview with LeetCode premium. It helped me prepare mentally for actual interview. I felt the time constraint and always pushed myself. My overall score in October was 5.5, and now, it is 9.4. Two weeks before the onsite at Google, I did 10 Google onsites (normally 2 mediums+1 hard), average time to complete is about 40 minutes. The high score is kind of cheating, since at the time I started to do mock again, I already finished "a lot" of hard + medium problems. Still, I felt I made some progress.
  • Try to code fast and concise. It will make it a lot easier to impress in an interview, since the faster you code, the more time you can think.
  • Try to really really understand a solution. Try to classify what techniques should be used in what problems. I think this is the skill that will make you thrive in an interview. At the end, you will most likely meet a problem you never met before.
  • Always read the solution even if you can do the problem yourself. You can find something new!
  • Answer the coding question itself is very important, but follow-ups will be a big factor as well. I was asked many follow-ups in my >10 interviews in 2020, it can range from checking your understanding about data structure (tree, list, stack, queue) or to more engineering specific such as deadlock, threadsafe, generics, operating system. Follow-ups are exceptionally important in System Design interview.
  1. Tips For System Design
  • *** The System Design Interview was the one I used the most, but each session was too long. I have gained a lot of knowledge from that course, but I disagreed with their lengthy, lack of focus approach. Still, it is worth the money I paid for, but I am not sure if everyone will feel the same.
  • For a system design question, I recommend a direct approach, go straight to the points the company you're interviewing for cares about. For example, if availability and reliablity are critical, then talk about how you will monitor the system you design, how to handle failure, replication. If knowledge about database is important, then know SQL, No-SQL, Wide-Column DB. I I know for sure Amazon and Google recruiters will send candidates document talking about their expectation.
  • At the end, System Design interview will most likely start with a simple question, then a bunch of follow-ups. Answering the follow-ups with confidence and expertise is the key for success. I believe experience matters as much as preparation for System Design.
  1. Others
  • Take a long vacation! I used 35 days off (with good excuse, and not continuous) + Winter vacation.
  • Buy a big WHITEBOARD at home!!! That's the first thing I did in October.
  • I already have a competing offer in hand, so the process from onsites for me is very fast. I'd recommend everyone has a competing offer before doing interview with FAANG, even it actually cannot compete financially, it may help to speed up the process. The team matching for me started even before HC result comes out.
  • Big thanks again and good luck to everyone!
  1. References
Comments (70)