From 0 to clearing Uber/Apple/Amazon/LinkedIn/Google

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 -

  1. Too much information, too many questions
  2. No online judge to practice, although I hear this has changed now-a-days
  3. Horrible UI. It pains my eyes to even look at the site (this is a purely personal taste)

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:

  • Amazon (L5 / SDE2)
  • Apple (ICT3 / SDE2)
  • Uber (L4 / SDE2)
  • LinkedIn (Staff Software Engineer)
  • Salesforce (Senior MTS)
  • Google (L4 / SWE3)

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

  • Don't be demotivated at your current level. I started from a place where I was bombing every interview and now I've done much better than what I was expecting. Start and be consistent.
  • Try getting comfortable in every topic. Don't leave anything behind.
  • Don't spend more than an hour on any question. If you can't figure out the solution, mark it and revisit later.
  • Use the discuss forums. They are literally the best part about Leetcode and a key differentiator why no other platform can match up to Leetcode in terms of interview prep.
  • Upsolve when you can't solve a problem - i.e look at the solution, understand and then do it again on your own.
  • Keep taking notes about what a problem is teaching you. Keep revisiting them. Spaced repitition helps in committing things to memory.
  • Don't be in a hurry. Enjoy the ride :)

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)


Tips and Resources for System Design

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:

    1. Distributed Systems for Fun and Profit - free book, 100 pages or so, but excellent content
    2. Designing Data Intensive Applications by Martin Kleppman - this is a more in-depth book, and you can get it on Amazon/libgen
  • For deepening practical understanding, going through companies' engineering blogs is the best resource.

    • Netflix tech blog, Uber, Twitter, Airbnb engineering blogs are high quality and are constantly updated.
    • For a consolidated list of company-wise engineering blogs, refer to this awesome github repository
    • There are a lot of great Youtube videos (append to youtube.com).
      • Jeff Dean's talk at Stanford: /watch?v=modXC5IWTJI
      • Building Billion user Load Balancer at Facebook: /watch?v=bxhYNfFeVF4
      • Netflix Guide to Microservices: /watch?v=CZ3wIuvmHeM
      • Amazon DynamoDB deep dive: /watch?v=HaEPXoXVf2k

Hope this helps!

Comments (158)