I want to share my interviewing experience with various companies, including many failed interviews and a Google offer at the end. I have 5 years of experience and a Master's degree in Computer Science. This was my second time looking for a job (not counting internships).
I was referred to Google by a friend. A recruiter contacted me, and I scheduled an onsite interview two months later. I began practicing LeetCode questions vigorously. I tried to have as many onsites with other companies as possible before the Google one. I decided to reply to every recruiter who contacted me and started scheduling phone screens and onsites. My first interview was with Amazon. As a former Amazonian, I didn't think it would be difficult to pass, but I failed. I believe it was due to the behavioral portion of the interviews.
I also had phone screens with Stripe, Snapchat, and a couple of startups. I only passed the Snapchat phone screen. I realized I needed more time to be ready for Google, so I asked the recruiter to move the interviews six weeks later. During those weeks, I also had two Microsoft onsite interviews, Bloomberg, Snapchat, two Apple, and more startups. All failed except for one Microsoft interview. Due to all these failures, I began to feel disappointed and tired. What was worst is that I sometimes felt like I passed. I literally memorized some of the most commonly asked questions and was lucky to be asked some of them. I behaved nicely and answered the best to all the tricky behavioral questions, and still, no success. I wasn't sure what was wrong, why did they reject me? But Google was coming closer, and I had to get together and be as ready as I could.
For Google, I redid all the LeetCode Explore cards and most commonly asked questions again. I tried to memorize and understand all the main algorithmic approaches in their essence. When I was doing a question that I had done before, I tried to do it quickly and optimally from the first glance to practice speed and bug-free coding. Some of the questions, such as for dynamic programming, I was failing constantly, especially the hard ones, so I decided to just forget about it and hope I wouldn't be asked any. Luckily, I wasn't.
For design, I drew pictures and put notes to each of them. I used https://excalidraw.com for all my practices. From all the onsites I had before, I knew what was expected (most of the time). I had a standard diagram I could fit into almost every design question - a queue and workers grouped in a cluster (autoscaling group for ex.) + different datastores options (rdbm vs. key-value and their tradeoffs), write-through and read-through cache; mention about security!, etc.
The Snapchat onsite interview was two days before the Google one. The coding questions were from the Snapchat section here. The design question was to design a push service for snaps. I was 75% sure I passed it, but the design part of the interview was horrible. At the end, I forgot how to speak English. The interviewers were not supportive and very pushy. I failed it, in my opinion, because of the design and the absence of normal feedback from the interviewers.
Apple was weird. The interviewers were kind of arrogant. I kept hearing - "no one does security better than us", or "our rate is insane, you won't find such a loaded service as ours" (I worked at AWS, speaking about load). The coding questions were okay, medium level difficulty. But one of them was very unsuitable for coding, in my opinion. I was given an interface in Java and was expected to implement a JSON parsing function using it. This was the first time I did JSON parsing - it took me some time to understand all the JSON related terms: object, array of objects, element, JSON string, etc. and what's the difference between them. What is the purpose of such a question? And it was for 20 minutes.
Then I had a Google onsite. Unfortunately, I can't share much about the questions, but all I can say is that they were easier than some of my previous onsites and very detail-oriented. The interviewers kept asking me to implement every approach I came up with. I may have provided at least a couple of solutions for each of the coding questions I was asked. I had to code quickly and come up with ideas on the fly. I feel like it was more about the speed and writing bug-free code than about crazy solution ideas. If it wasn't for my constant coding practice, I probably wouldn't have passed. For Google, I suggest knowing all the common algorithmic templates - BFS, DFS, sliding windows, etc. and code it quickly! The design question was about scanning many software packages (like RPMs) for some metrics. How to make this process regular? What if new packages arrive every other time? Etc.
In two long weeks, I received an email from my recruiter, saying that I passed.
Also, I had to do one more onsite after Google, as I forgot to cancel it :D. Still waiting for the results on it ....
My feeling right now is that I can pass any interview :D I stopped being scared of them, and that's probably the best lesson from this interview period I had.
Also, a note to all the people (men) who were crying about not passing because they are males. I am a girl, I failed almost all the interviews I had, despite the market being hot, despite the "need to hire females", etc., so relax, I am a living proof that the bar is not different for us, we have to work hard, same as you guys. If you haven't passed your interview, it's not because you are a boy, it's probably because of bad luck, you not being ready, the stars didn't match on that day, etc., just keep trying and stop crying.