# The FAANG Software Engineering Interview Process

## Interview Stages

• Online coding challenge: typically done on hackerrank.com
• HR phone screen: why are you interested in the company, what role (front-end/ back-end/full-stack/data engineer/devops), high-level overview of your professional and academic experience, visa status etc
• One round of phone interview
• (Virtual) onsite interview comprising around five one-hour interviews

Here’s an overview what FAANG engineer interview may cover …

"This guide is a game-changer for anyone looking to break into the software development industry. The expert tips and advice helped me land a job as an SDE at a top tech company. Highly recommend!" - Sarah, Software Development Engineer

## Coding question

• Coding Question where you need to
1. Develop the algorithm
2. Implement your algorithm in Java/C++/Python/…
3. Come up with test cases to find and fix the bugs in your code
4. Analyze the time and space complexity of your implementation
• For best practices refer to our blog 12 do’s and dont’s for coding interview

## Algorithms

For the following algorithms, especially those in bold, you need to know their time and space complexities and implementation details.

• Sorting algorithms: merge sort, quicksort (merge sort can be highly useful in situations where quicksort is impractical, why?), selection sort, bucket sort, quickselect
• Binary search
• Graph algorithms: tree traversals (preorder, inorder, postorder), BFS, DFS(tradeoffs between BFS and DFS), topological sort, dijkstra’s algorithm
• Recursion and divide-and-conquer
• Dynamic programming
• Bit manipulations
• Greedy Algorithms
• Backtracking

## Data Structures

• Arrays
• Strings
• Linked Lists (when to use a linked list over an array and vice versa)
• Stacks, Queues, and Deques
• Heaps
• Binary Search Tree (lookup, insertion, deletion)
• N-ary Trees
• Graphs: There are three basic ways to represent a graph in memory (objects and pointers, matrix, and adjacency list); familiarize yourself with each representation and its pros and cons.
• HashSet (Why use a set over an array? Why use a HashSet over a HashMap?)
• HashMap (single most important data structure to know; you need to know everything about hashtables!). Also, HashMap vs TreeMap
• Tries[^1]
• Union Find[^1]

[^1]: These problems are less frequent.

## System Design

• Typically asked of SDE-2 and above

• Throughput vs latency

• CAP Theorem

• Dynamic binding vs static binding

• TCP vs UDP

• What are the benefits and drawbacks of database normalization?

• How would you find whether a remote server is online or not?

• How does the domain name map to IP address?

• Designing a storage/sharing service: Dropbox, Youtube, Instagram, etc.

• Designing a service that deals with geographical data: Uber, Yelp, Lyft, etc.

• Designing a communication service: Messenger, High traffic web server, etc.

• Designing a search related service: Search engine, Web crawler, etc.

• Designing location sharing service: Uber, Google map, Zomato

## Object oriented design

• Typically asked for junior level SDE-1 or SDE-2 positions

• What’s an object?

• Design patterns: when to use them? Which ones have you used?

• Cricket scoreboard system, which will keep track of batsmen on pitch, on strike, their runs, and events which could happened on each ball(wide, out, 6, wide+4, etc…). How would you go about it?

• Explain low level design for 2 player chess game, assume both players are human, the app is just providing a platform to the players.

• Design Meeting Scheduler. Here there are n given meeting rooms. Book a meeting in any meeting room at given interval(starting time, end time).

• Design a multi shelf book case using OOD principles (multiple rows and columns).
Parameters:

Should be able to locate the Nth book (N given as input)
Should be able to return the row, column of the book in the shelf given book title
Should be able to return the given book position, the book in front of the input book and the one after the input book

## Concurrency

• Concurrency issues: Know about locks and mutexes and semaphores and monitors and how they work.
• When can a deadlock occur? What’s the difference between a deadlock and a livelock? How do we avoid them?
• Know what resources a processes needs, and a thread needs, and how context switching works, and how it’s initiated by the operating system and underlying hardware.
• Know a little about scheduling. The world is rapidly moving towards multi-core, so know the fundamentals of “modern” concurrency constructs.

## Language specific Questions

• What objects in Python are immutable? Are they truly “immutable”?
• When to use Reflection in Java?
• Difference between vector and array in C++.
• In Java, what purpose do the keywords `final`, `finally` and `finalize` serve?
• Difference between an abstract class and an interface in Java.

## Behavioral Questions

• What made you want to study computer science?
• What is your favorite programming language? Why?
• If you could change one thing about that language, what would that be?