The Hitchhiker's Guide to Tech Interviews
How I passed interviews with 8 tech companies with less than 2 months of interview prepping
TECHINTERVIEWJOB
A year ago, I interviewed with 14 companies, failed phone screen for 1 of them, withdrew from onsite for 3 of the fintech companies that were based in NYC, and for the remaining 10 companies that I had an onsite interview with, I received an offer from 8 of them. Here is how I prepared for the interviews:
Coding
The hands down best decision I ever made for preparing for coding interviews was to learn Python. There was an upfront learning cost for sure but it saved me so much time coding and freed so much more time for me to explain my solutions and communicate with the interviewer.
Here is my Leetcode if you want to check out all the problems I did: https://leetcode.com/ChubbyViews/
I started Leetcoding by categories. I used this list: https://zxi.mytechroad.com/blog/leetcode-problem-categories/ and only did the problems linked and none of the similar problems. Of course there was no way that I would intuitively know how to solve all of the questions, so I would watch the same guy's Youtube videos or solutions, fully understand each solution, and go back to the Leetcode problem and code out my own solution. I never skipped the actual coding part for any of the problems on that list. Just reading the solution is not sufficient; you have to have digested it to be able to write it, and you have to write it yourself to make it your own. Otherwise it just won't stick.
I did not do a crazy amount of problems. 70/518 Easy 118/1085 Medium 30/433 Hard. 218 in total. You are never going to feel ready. But there is a point at which you are ready. And that point for me was somewhere between 90~100 problems. After that point I felt pretty confident and comfortable with all kinds of questions that they threw at me in interviews and only did Leetcode to keep my skills honed. If I couldn't solve the problem during the interview, then it was just not meant to be. Because if they really wanted, they could always give you a really hard question that you are just not going to be able to solve regardless of how many Leetcode problems you do. You just cannot ever achieve 100% coverage. It's unrealistic. And the companies that ask questions that are outside your knowledge with interviewers who failed to guide you to the solution, are just not meant to be. 🤷🏼♂️
Interview is an arbitrary process and requires an element of luck.
System Design
The only reference material I used to prepare for system design was Grokking the System Design Interview and a little bit of Distributed Computer Systems Engineering from MIT OpenCourseWare. Shout out to my friend for letting me borrow his GTSDI account lol you are a real G.
I studied all the concepts mentioned in Grokking the System Design Interview meticulously. I Googled, YouTubed, and Wikipedia'ed concepts such as Consistent Hashing, different Cache policies (write-through vs write-back for example), different load balancing algorithms (round robin, least connection, weighted response time, etc.). I made sure that I understood each concept enough that I could elaborate on it when prompted, which happened several time during my actual design interviews. I would say, "to scale this, we could use consistent hashing," and I would see the interviewers eyes light up upon hearing the buzzword. And almost always they'll follow up with, "what is consistent hashing?" If you can't answer that, they know that you're not the real deal. So if you are going to fake it, fake it at least 1 layer deeper than they're going to probe.
I did not take any classes in Distributed Systems in college so the MIT course helped me understand some of the fundamental principles. I did not have enough time to watch all the lectures unfortunately, but I got the basics down. One thing I would say is: Study your CAP theorem.
You need to have that shit etched in your brain. Every design decision you make, you need to articulate why by reciting the CAP theorem and explaining the trade-offs. When you can drive the dialogue and reason about the trade-offs and how the system handles failures unprompted, you will leave a really good impression on your interviewers. This is also what separates senior candidates from junior candidates.
System design turned out to be one of the easiest round for me, along with the behavioral round.
Behavioral
I probably have an unfair advantage when it comes to the behavioral round as I used to interview candidates for my previous companies and had to know the company's core values inside out. We used certain questions to probe candidates to give us data points that would map to certain core values. That's how I learned to identify the data points the interviewers are looking for from the questions they ask and I would just feed them the exact data points.
This is not something that is easily teachable so my advice would be to study your current company core values and understand each of them thoroughly. Every tech company shares more or less the same set of values and they can almost always be mapped to one or several core values at your company. Also, volunteer to interview candidates if your company offers such opportunities. I think my experience interviewing candidates also helped me recognize the red flags and green flags in interviews and allowed me to use those insights to my advantage during my own interviews.
When it comes to gathering material/stories/STAR examples for the behavioral round, I went back to the brag sheet that I wrote (keeping a brag sheet is a good move for your career in general) and the promotion packet that I prepared with all the supplemental materials. I brushed up on those memories and roughly mapped out which examples I was going to use for which core value. And I was set.
If it's meant to be, it'll be.
I said it once and I'll say it again -- interview is a very arbitrary process. Not getting an offer from a company doesn't mean that you're worse than the people who had gotten an offer. It just means that they were a little bit luckier than you were. But that doesn't matter, because you only need one company that is willing to give you the chance; nobody cares about the other 99 that didn't.
Happy interviewing and happy negotiating!