I started a new job in November and recently went through the technical interview ringer. I wanted to jot down my preparation process for future endeavors and I thought others might find it useful. This is geared for people with some experience and some prep time.
I think a month to prepare for phone screens and technical review is plenty. Here’s how to prep:
- Get the latest edition of Cracking the Coding Interview by Gayle Laakmann McDowell. Go through some sections that you’re rusty on. Do some of the basic problems. Then go through all the Medium problems.
- Do timed Mock Interviews on LeetCode. The time factor really forces you to be diligent and focus on the problem. Also, work through the ones you struggle with; there are solutions posted for a lot of them (some in the comments). Once you understand it, try it again later.
- Have friends conduct some whiteboard/shared screen interviews (Coderpad). If they’ve done this before, they’ll know what questions to ask, and where to push. Leetcode might let you get away with brute forcing a problem, but a person can ask about refactoring, refining, more optimal solutions, and time & space complexity.
- Review some system design concepts, and try to do some whiteboard (virtual or otherwise) problem with a friend
- Take a look at recent developments in relevant areas that you’re less familiar with. For instance, a couple of my interviews were going to be geared towards front-end dev, but I haven’t worked much with some modern CSS features like flexbox and grids. Also, take look at things that maybe you take for granted. For instance, in Javascript, I always use strict mode (‘use strict’), but I couldn’t remember all the benefits it gives me.
At the beginning of this month, start applying to places and using your network to get referrals. I either didn’t hear back at all, or I heard back within a week. Assuming the jobs are somewhat evergreen, you can delay your phone screen more/or less as much as you want. You can be clear you need a few weeks to prepare. Consider applying to places where you’re pretty sure you’re not interested. This can be handy to get for interview practice, offer negotiation, and if you have an open mind they may surprise you! Additionally, interview your top contenders a little later if possible, so you get some practice interviews under your belt. Phone screens usually take an hour. They’re not particularly exhausting, but I wouldn’t do more than one per day, unless absolutely necessary. Most of my phone screens used Coderpad on a relatively straightforward programming problem.
After phone screens, leave a week or two before you first onsite interview. Again, try to schedule the company your least excited for first. Try to leave at least day in between each onsite; these can be exhausting.
Before onsites, keep sprinkling in a couple problems from Leetcode. Try to do a whiteboard problem with a friend. Take the time to prepare your answers to “soft” questions like: “Tell me about a recent technical problem” “Tell me about a difficult interaction with a team member”
You may also get the actual topics from the recruiter, so think about those.
Also, if you’re going to have questions on a particular topic like databases or front-end, find someone who can drill you a bit on it. Try to do some system design questions too.
I was able to pass all 6 of my phone screens, and I got a few job offers. Anyways, I hope this helps. Good luck!