How to prepare for an software developer interview
Published: 2019-11-23 18:16:41

A note on timeframe: Three months is a reasonable for preparing. 4–6 weeks is the minimum if 3 months isn’t possible. Let’s break that down.

Week 1: Brush up on the basics of your programming language

Pick the programming language you’re most comfortable with and stick with it. Most companies won’t really care which you use as long as you show mainstream proficiency. You’ll likely be nervous during your interview, so even the basics can get lost. Refresh basics, and you’ll demonstrate real problem-solving skills.

Depending on the company, you’ll either solve problems on a laptop or white board. Know ahead of time and practice with that method. Lyft and Salesforce require a laptop. Most companies, including Amazon and Google, will provide a white board.

Week 2 & 3: Study data structures and algorithms

These concepts are actually quite useful in coding interviews. Here are some relevant resources:

For data structures, visit Mastering Data Structures: An interview refresher
For algorithms and complexity analysis, visit Algorithms and Complexity Analysis: An interview refresher
Weeks 4 & 5: Practice simple data structures and algorithmic challenges

Start practicing relatively simple coding problems associated with data structures and algorithms. This will help you internalize the data structures so you can tackle harder questions later in the preparation process.

Check out this guideline for an extensive list of questions at this phase

Weeks 6-8: Practice complex interview problems

It’s time to start practicing harder questions that are likely to be asked during coding interviews. For practice and challenges, look at Grokking the Coding Interview: Patterns for Coding Questions

​Here are some guidelines to keep in mind as you solve these :

Start timing yourself. Ideally, you shouldn’t spend more than 20–30 minutes solving any given problem.
Don’t be discouraged if you are not able to solve a problem quickly enough.
Start thinking about the Runtime and Memory complexity of each solution. You will have to clearly articulate the complexities in the interview.
Weeks 9 & 10: System Design Interviews

System design interviews are now integral to the interview process. These interviews have a significant impact on your “hiring level.” Learn distributed systems concepts like Cap Theorem, Consistency, Partitioning, Load-Balancing etc. Interviewers are interested in evaluating your ability to describe the different parts of a scale-able service, such as:

How are web-servers load-balanced?
How are databases shared?
How are large files stored?
How is the network set up for redundancy and maximum throughput?
Week 11: OS and Concurrency

Understanding concepts like Threads, Locks, Synchronization, etc. are beneficial whether you are building a mobile app or a web-scale service. Multi-Threading and Concurrency Interview questions are useful in gauging your level.

Java Multithreading and Concurrency for Senior Engineering Interviews is a good resource to check out.

Week 12: Object Oriented Design Interviews

Some common questions include:

Design an ATM
Design an elevator
Design a Parking System
Interviewers are looking for your ability to transform the requirements into comprehensible Classes. You spend most of your time explaining the various components, their interfaces, and how different components interact with each other. Take a look at Grokking the Object-Oriented Design Interview.