Navigating Tech Job Interviews in a Competitive Job Market: Strategies and Resources
Navigating a job interview in the tech industry can be very challenging. In this article, I'll be sharing some valuable tips and study materials that I find helpful for my interview preparation.
In 2023, after a seven-month job search journey filled with numerous job interviews, I must acknowledge that the process was undeniably challenging!
However, along the way, I unearthed several invaluable tips that I'm eager to share with you. So, let's dive right in!
Framework that I use
This is the high level framework that I use for my interview preparation, it can be broken down into 5 key steps:
Identify the specific role you are going for. Whether it's Front End, Back End, DevOps, or another specialisation, keep in mind that the focus and requirements will vary significantly across these different positions.
Familiarise with the interview process. While the process generally follows a standard structure, it might have some slight variations depending on the company. Typically, the interview process can be broken down into several stages:
HR Screening
Founder/Hiring Manager Screening
Coding Test
System Design
HR + Manager Behavioural Round
Research the topics relevant to your intended role. To do this effectively, consider the following strategies:
Google search with keywords: You can start by searching for keywords like 'Top 100 Interview Questions for …' . Review them to identify unfamiliar topics, and then conduct further research on those areas.
Seek advice from friends or senior professionals: Request their guidance to pinpoint specific areas of focus to save time and energy on unnecessary topics.
Utilize Glassdoor to explore interview questions: Research questions that are specific to the company you are targeting. This can help you identify recurring patterns and areas where you might need additional preparation.
Broaden your research based on the industry: Different industries may present unique technical challenges, so gaining a preliminary understanding can be beneficial.
For instance, in the payment industry, addressing issues like double charging users is a significant concern.
If you are interviewing for a role in the web3 industry, it's crucial to grasp the security challenges and common types of attacks prevalent in that space.
Design a plan & stick to the plan: Organize the information you've gathered thus far and establish a timeline for studying each topic. This step is crucial to prevent feeling overwhelmed and to maintain a sense of progress as you delve into your study materials.
Next, I'll dive into specific key points within this framework and introduce the tips and resources I utilised for this interview.
1 - Identify the specific software engineering role you are going for
When it comes to deciding on my next career move, I focus on two key questions:
What am I interested in?
What skill do I need in the future?
Interest: My passion as a software engineer has consistently leaned towards backend engineering. In many cases, backend systems are where the core business logic is implemented. I find it exceptionally meaningful to build systems that align closely with the business requirements.
Skills that I need: I've come to appreciate the value of strong front-end skills, particularly in the context of rapid prototyping. In the future, I aspire to create my own products, which makes enhancing my front-end development skills an enticing goal.
As a result, I'm actively seeking a role that aligns with my preferences, either as a backend engineer or in a full-stack role with stronger focus on backend development.
2 - Familiarise with the interview process of the prospective company
Based on my personal experience, most companies typically structure their interview processes into these different rounds, each with its specific focus:
HR Screening
This initial round primarily delves into behavioural aspects. Expect questions like, "Why did you leave your previous job?" and "Why do you want to join our company?". Prior research is crucial to address these queries effectively.
Founder/Hiring Manager Screening
In this round, the evaluation combines technical and behavioural aspects. You'll likely discuss challenging projects from your past experiences. Therefore, it's essential to understand the business context, technical architecture decisions, technical complexities and solutions for your past projects.
Be ready to delve into relevant technical points that might stem from these projects.
For example, if you've had experience with a login system, it's important to grasp concepts like OAuth 2.0, the token exchange process, JWT token principles, and best practices for securely storing tokens in web browsers.
Coding Test
This stage predominantly assesses your knowledge of data structures and algorithms. Ensure you have a solid grasp of fundamental data structures and algorithms.
Some companies may present customised questions that require you to design extensible and reusable solutions on the spot. To excel in such sessions, implementing design patterns and adhering to good coding practices is crucial.
System Design
In this round, you will act as a system architect, proposing a relevant system design while the interviewer plays the role of a product manager. Clear communication is key, and it's beneficial to explain your approach from a top-down perspective. More details on system design will be covered in the following section of this article.
Manager Behavioural Round
Typically the final round, you will meet the upper management. From my experience, the aim of this round is to provide you with an overview of the company and its products. Concurrently, they'll assess if any red flags were missed in previous rounds. This round usually focuses on behavioural questions and includes high-level product introductions.
3 - Research the topics and areas relevant to your intended role
The knowledge and materials that I listed down here is highly relevant to the role that I am applying for — Backend Engineering / Full Stack with a Backend Focus. You might want to do more research if you are interviewing for Front End or DevOps position.
Data Structure & Algorithms
Computer Science Fundamentals
Fundamental Frontend Knowledge
Backend Knowledge
System Design
3.1 Data Structure & Algorithms
Focus Area
Ensure that you have a strong understanding of these topics and practice extensively with related questions.
Data Structure: Array, LinkedList, Set, Stack, Binary Tree, Hash Map
Algorithms: Sorting algorithms (Quick Sort, Merge Sort), Dynamic Programming, Binary Search, DFS, BFS, Backtracking
Tips in preparation
Select & filter your questions: In preparation for the interview, I primarily focus on solving questions from the "Top 100 Liked Questions" and carefully filter them based on the specific topics I want to emphasise.
Understand and memorise the techniques: After solving a problem, I will usually convert some of the interesting techniques that I discover into flash card. I view these techniques as essential tools in my skillset, readily available for quick reference when addressing similar questions.
Materials that I recommend
Leetcode: I mainly use this platform for my daily coding practice
Hackerrank: I use this platform to get familiarised with its format since some companies incorporate this into their interview process.
Pramp: I use Pramp to setup mock interview sessions with random peers online. It effectively simulates the pair programming experience, mirroring real interview scenarios.
3.2 Computer Science Fundamentals
This list is by no means exhaustive, but it comprises some of the topics I personally consider important to master, including questions that tend to be frequently asked during interviews.
Focus Area
Network
7 layers of network model
TCP’s three way handshake
HTTP/HTTPS
Operating System:
Basics of processes and threads
Concurrency
Context Switching
User Mode & Kernel Mode
Security
Symmetric & Asymmetric Encryption
Working Principle of HTTPS
Common Security Attack & Remediation
Authentication & Authorisation
OAuth 2.0, JWT Token
Object Oriented Programming
Understand why OOP is so commonly used.
Understand how different OOP concept (encapsulation, polymorphism, abstraction) contribute to building a good software.
Design Pattern
Understand why do we need design pattern
Propose the scenarios where these design patterns will be helpful
Familiarise with some of the top design patterns (My Personal Favourite) - Factory, Singleton, Adapter, Facade, Template & Observer
Tips in preparation
Research and compile: Once I've identified the topics, I conduct thorough online research, compiling a list of links and study materials related to these subjects. A quick search, such as "Top 100 Interview Questions for XX," should give you pretty good results into these areas.
Leverage short breaks: I often utilize short breaks for study sessions, making the initial step of gathering high-quality study materials crucial. By having these resources readily available, I can efficiently make significant progress in absorbing the material during these brief intervals.
Materials that I recommend
Much of the information listed above is readily available through simple online searches. However, it's essential to create your personalised list and adhere to your study plan. Below, I've shared some of my personal favourites:
Refactoring Guru: This is my top choice for revisiting and reinforcing my understanding of design patterns.
OWASP Cheat Sheet: I frequently rely on this cheatsheet to quickly refresh my memory on crucial security concepts.
Introduction to OAuth 2: It's a straightforward and easily digestible read. I often turn to this resource when I need to refresh my knowledge of OAuth concepts.
3.3 Fundamental Front End Knowledge
As I'm currently interviewing for a full-stack engineer position, I recognise the importance of refining my front-end engineering skills. My primary goal is to establish a good foundation while becoming proficient in one of the most widely used front-end frameworks, React.
This approach serves two key purposes:
Demonstrate my strong fundamentals. Showcasing my ability to swiftly adapt to any new front-end framework as needed.
Show my expertise in a particular framework. Assuring potential employers that I can deliver meaningful results promptly upon joining the team.
Focus Area
HTML & CSS: These two are the most basic components of a webpage. Gaining a solid understanding of the basic HTML syntax and CSS styling options is important.
JavaScript
Strong understanding of core JavaScript concepts (variables, data types, functions, etc.).
Manipulating the DOM (Document Object Model) with JavaScript.
Asynchronous programming with Promises and async/await.
Understanding of closures, scope, and this keyword.
Knowledge of ES6+ features (e.g., arrow functions, de-structuring, modules).
Know your browser well: Browser provides a lot of powerful features that make frontend development easier such as request monitoring, debugging, inspect local storage/cookie and etc. During pair programming interview, if you are not familiar with the features that the browser provides, it is usually a red flag for the interviewer.
Build Tools: Understand build tools such as Webpack and Babel. These tools are the magic that convert framework code to the file formats that the browser interprets.
React:
JSX: How to add styles, display data, render list using JSX
Hooks: The basic concepts of hook and the three most important hooks, useState, useEffect and useContext.
Props: Passing data and callback function between parent and child components
Tips in preparation
Master the knowledge listed above ☝️
Build a simple project. Choose a simple project and start building. The aim is to ensure comprehensive coverage of all essential aspects in constructing a basic yet fully functional web application.
Prepare a good template. Before joining a front end interview, I recommend setting up a project using create-react-app, tailwindcss and react-router. I prefer these libraries because they enable you to start building web components without the need for excessive boilerplate code.
Materials that I recommend
W3Schools: My personal favourite is W3Schools. It neatly organises key HTML, CSS, and JavaScript concepts by topics. Moreover, it offers interactive guides for hands-on experimentation.
React Official Tutorial: For a practical grasp of essential features, I highly recommend the "Tic Tac Toe" tutorial. It strikes the right balance between simplicity and functionality.
FrontendMentor.io: To spark project ideas, I turn to FrontendMentor.io. What's particularly helpful is that some projects include Figma files, serving as valuable references for building front-end projects.
3.4 Backend Knowledge
This section is important to me because I mostly focused on backend development in my job applications. To cover this broad topics in this article effectively, I’ve broken them down into three sections:
Mind map with a list of key topics. (⚠️ Make sure you are aware of these topics)
Concise explanations of the most important topics (⚠️ Make sure you research and understand these topics)
Resources for those seeking more detailed information on these subjects.
Mind Map
Focus Area
Microservices
Pros & Cons: Understand the advantages and disadvantages of employing microservices.
Microservice Design Patterns: Familiarise yourself with all the design patterns listed in the mind map, these design patterns serve as strategic guidelines for proper execution.
Relational Database
ACID: Understand the concept and importance of ACID.
Transactions: Understand the concepts and limitations of database transactions.
Indexes: Understand the data structure, mechanism, and trade-offs involved in using indexes to enhance lookup performance.
Message Queue
Motivation for Message Queues: Understand the reasons for using message queues and the benefits they offer.
Types of Message Queues: Differentiate between pull-based and push-based message queues and determine which is preferable for specific scenarios.
Famous Message Queue Libraries: Explore popular message queue libraries like Kafka and RabbitMQ.
Edge Cases
Ensuring Message Order: Study different methods to ensure the correct consumption order of messages.
Preventing Message Loss: Understand the strategies available for preventing message loss.
Handling Duplicate Messages: Learn how to handle duplicate messages.
Cache
Types of Caches: Examine various cache types, including in-memory caching and distributed caching.
Cache Design Patterns: Learn about common cache reading and writing patterns, e.g.: (cache aside, read through, write through and so on).
Consistency Between Cache and Database: Study how to address inconsistencies between cache & database and explore available strategies for mitigation.
Cache Eviction Strategies: Learn about the strategies to refresh the cache and prevent serving stale data to users.
Cache Failure & Failover: Understand different methods to prevent cache penetration and cache avalanche, along with mitigation strategies.
Sharding/Partitioning
Common Key Generation Strategies: Explore key generation strategies to ensure equal load distribution, such as Division Hashing and Consistent Hashing.
Common Sharding Strategies: Understand how data is split, two of the popular methods are Vertical Sharding and Horizontal Sharding.
Concurrency
Locking: Learn about the different levels of locking, such as Application Lock, Database Lock, and Distributed Lock.
Thread Safety: Grasp the concept of thread safety, especially relevant when using languages like Java or Python, to ensure parallel request processing without interference.
Deadlock & Race Conditions: Explore the concepts of deadlock, its causes, detection methods, and potential solutions.
Idempotence: Understand the importance of idempotence in certain operations. This concept is crucial, particularly in applications like payment systems to prevent double charges to customers.
Tips in preparation
Master the knowledge listed above ☝️
Retain Knowledge Using Spaced-Repetition: Most of the knowledge provided can be broken down into bite-sized content. I convert key points into flashcards and review them while walking or working out on the treadmill.
Mind Map to Connect the Dots: After absorbing knowledge from various topics, I organize my thoughts using a mind map and diagrams. This helps establish connections between them, reinforcing my understanding.
Materials that I recommend
Microservices
[Book] Spring Microservices In Action: This is a good book that introduces different microservices patterns. While most of the code samples are written in Spring, the concepts are language-agnostic.
[Book] Designing Data-Intensive Applications: One of my favourite books on building distributed systems. It covers essential topics in distributed systems such as different storage engines, database replication strategies, partitioning, and more. Highly recommended!
Microservice.io: Another interesting book that delves into various microservices patterns. You'll learn how to manage transactions with the SAGA pattern, implement services using the event sourcing pattern, and split your microservices using Domain-Driven Design principles.
Relational Database
Single Vs Composite Indexes: A concise article that introduces the underlying data structure of indexes and helps avoid common mistakes when designing composite indexes.
B-Tree Searching & Insertion: This article provides a clear visualisation of searching and inserting into B-Trees, which form the underlying data structure for many relational databases.
Sharding
Understand Database Sharding: This simple explanation offers a high-level overview of the motivation, benefits, and different types of sharding.
A Guide to Consistent Hashing: Consistent hashing is the algorithm used in most sharding key generation. This article is useful for understanding how consistent hashing works.
Concurrency
Avoiding Double Payments in a Distributed Payments System: This article illustrates how Airbnb incorporates the concept of idempotence into a library to prevent the notorious issue of double payments in a distributed payments system.
3.5 System Design
Focus Area
Everything Listed Above☝️: When it comes to System Design, it's a collaborative exercise with the interviewer where you create a high-level project design. Every aspect of your design is subject to further discussion, underscoring the importance of a strong foundation in the software engineering knowledge mentioned earlier.
Structured Thought Process for Addressing Questions: During a system interview, certain crucial topics must be addressed. The best approach is to begin with a high-level overview and then delve into the specifics of the technical design. Ensure that your interview covers the following:
User Requirements: Gather information about the feature and user needs.
Non-User Requirements: Explore areas such as expected user numbers, traffic estimates, and latency requirements.
High-Level Design: Provide a high-level perspective on how different components interact and the responsibilities of each.
Deep Dive: Seek clarification from the interviewer to understand potential discussion directions. Discuss assumptions, potential performance bottlenecks, and techniques to mitigate them.
Wrap Up and Summarise: Conclude the discussion with a brief summary of your overall design. Highlight key technical solutions and the problems your design aims to solve.
Tips in preparation
Practice with Your Peers: Engage in practice sessions with others, whether it's a colleague, mentor, or even individuals in online forums. Practicing in a realistic setting is essential to build comfort and gain valuable feedback for improving your interview skills.
Familiarise Yourself with Drawing Tools: Prior to the interview, become proficient with one or two drawing tools that can effectively convey your ideas. You'll often need to create system component diagrams, activity diagrams, sequence diagrams, and entity-relationship diagrams during the interview to illustrate your points clearly.
Materials that I recommend
[Book] System Design Interview – An insider's guide: This book, in particular, stands out for its diverse range of system design interview questions. It reveals gaps in my knowledge, prompting extensive research to fill those gaps.
System Design Interview Guide: This guide is a gem! It succinctly outlines the crucial aspects of system design interviews. It provides valuable insights into the ideal approach to tackle a system design interview.
[Youtube Channel] System Design Interview Video From Exponent: Explore mock interview examples conducted by industry experts on this channel. While there are numerous videos available, I recommend starting with these two that I found particularly useful.
🎉 All the best !
In this article, I've outlined the overarching framework for preparing for a tech interview, along with key focus areas and valuable tips that I believe are crucial for your interview success.
Lastly, I would like to highlight these two important messages:
Follow the framework, iterate and elevate: Execute and persevere are the cornerstones of successful interview preparation. Start by taking consistent steps and strive for incremental improvement along the journey. You will be surprised by the cumulative impact of these small improvements everyday.
Cultivate the right mindset: Instead of viewing the preparation process solely as a means to pass the interview, consider it an opportunity to reinforce your foundational knowledge and enhance your skills as an engineer.
I hope you find this article helpful and wish you the best of luck in securing your dream job!
Thank you for taking the time to read and support this newsletter.
If you've enjoyed what you've read, consider showing your support by clicking the ❤️ button at the bottom of this email. Even better, share it with your friends!
Thank you, article useful for me