Update: My Google on-site results were positive :)
This is a post detailing how I went from bombing almost all interviews to clearing Uber, Apple, Amazon, Linkedin, Google and a bunch of other companies
A little bit of history
I was working at Microsoft where I converted my internship into a full time offer. Back then I had just relied on the knowledge that was fresh in my mind from my undergrad. After spending a few years at Microsoft, I decided to move out in search of more interesting work (and higher pay).
Around 2017 - I gave the following interviews:
Uber - didn't get past the phone screen
Salesforce - failed onsite
LinkedIn - failed onsite
Google - failed phone screen
I was dejected, I had done a lot of my preparation from another site, and I found three major issues there -
I heard of Leetcode way back in 2013, when the community was much smaller than it currently is. A colleague of mine suggested and said that Leetcode has very good quality questions. So I figured I should give it a try.
Leetcode preparation phase
The reason I was hooked to Leetcode was the no-bullshit question format, with a clean and intuitive UI. I decided to do two questions a day consistently, gauge my progress over time and then schedule my interviews. When I first started out, I found even the ‘Easy’ questions hard to pass in the first attempt. I was easily spending 45 minutes on trivial questions. As time progressed, I started seeing improvements. In about two weeks, I was solving ‘Easy’ questions in 20-25 minutes and most of them were passing in my first attempt.
I decided to proceed to Medium questions and the same story repeated. Found them extremely hard, but as time progressed, I could solve a good number of those questions as well. I have to admit that I can do very few hard questions within an hour even after solving 250+ questions. And sometimes it takes hours to understand the solution as well.
Current Status
Eventually after about 150 questions, my interviews were as follows:
Confirmed offers from:
Narrowly lost out on Facebook - I got a positive in problem solving, and a borderline positive in System Design.
I did face a lot of questions which from Leetcode, and I found a bunch of new questions as well. But solving questions here helped a lot in shaping my thinking process.
My advice to people in the same position as I was in
Cheers! (also thanks to Leetcode and the amazing guys who keep posting epic stuff in the forums! I owe a lot to all of you)
I'm updating the post with the resources I used for system design interviews as some of the fellow leetcoders wanted to know.
First of all, depending on your experience, the expectation in system design round varies. If you are interviewing for SDE1/entry level SDE role, most companies don't bother asking system design. As the level progresses, you will be evaluated on things like the breadth and depth you possess, the variety of approaches you are able to take and trade-offs you are able to make etc.
On to the preparation part - clearly, experience is the best teacher in this area. But for beginners, I would suggest going through System Design Primer. This has been the single best resource for me to lay down my basics. If you have time, I would highly recommend going through every link listed under references in the repo. Highly useful!
Second, I purchased a course on Systems Design Interview. The theory part of this is not great, but the questions cover a lot of variety and take a very structured approach. This helped me a lot! Honestly the most return on investment for system design. If you are done with these two steps, you should be comfortable enough to crack most system design interviews.
Third, as an added bonus, you can go through some of the seminal research papers in the field of distributed systems. These discuss the most fundamental ideas and trade-offs in designing large scale systems. It is not necessary to do this to pass the system design round, but it will clearly spike your curiosity and lay down a much stronger foundation:
Everything from here on is for people targeting senior engineering positions
The next steps, for people who are applying for more senior positions (8-10+ years of experience, for example) would be to demonstrate a larger depth and breadth of the area. The best way to gain this is by deepening your theoretical understanding and practical understanding.
For deepening theoretical understanding, I found the following two resources immensely helpful:
For deepening practical understanding, going through companies' engineering blogs is the best resource.
/watch?v=modXC5IWTJI/watch?v=bxhYNfFeVF4/watch?v=CZ3wIuvmHeM/watch?v=HaEPXoXVf2kHope this helps!