Date: 2020-01-27
Time to Read: 2 Minutes
Tags: personal development career interview system design
CommentsPhoto By: imgix
In the previous post, I covered a significant bulk of what most people will encounter (and what most people think of) when undergoing the technical aspect of the interview process and how to effectively prepare for these programming/algorithm challenges. This post will cover the remainder.
If you’re interviewing for a more senior role (not always the case), you’ll likely be asked to solve what are generally called “System Design Problems”. These problems are less focused on actual programming and more on, well, the design of systems. As a result, these questions are typically more open-ended. You might notice if you’ve worked through the previous two programming interview books that they do actually touch on these styles of questions, however I would argue that the following resources provide more in-depth information in this arena.
I’ll just redirect you to three of the most recommended resources for this aspect of the interview process:
Designing Data-Intensive Applications
System Design Primer
Grokking the System Design Interview
I would recommend starting with the primer and then continuing into the course while reading the book as technical reading on the side.
The next section includes programming-specific/technical short answer questions.
Many of the resources in the previous post are helpful in covering this area in addition to more programming-specific challenges; however it is imperative that you understand most of the aspects of the programming language that the job position requires (what methods are better than others or what data structures are more efficient to others).
For example: In Java, what is the difference between final, finally, finalize? (Google it)
These are the types of questions that you’ll typically encounter in this category. Sometimes a quick Google search can unveil these sometimes esoteric language-specific questions, other times you may not be asked anything deeper than a surface-level understanding of the language’s specifics.
Though, I tried to categorize the three types of questions that you’ll encounter in three broad, generalized categories, different companies may have different approaches that don’t fit perfectly into those categories (no matter how broad). I’ve heard of the following cases at various companies where applicants had to pair-program with their interviewer, complete a extensive take home assignment, or even debug existing code in front of their interviewer.
Going back to what was said in a previous post, use the resources available to help better prepare yourself for what might lay ahead before beginning this stage in the interview process.