The FAANG Software Engineering Interview Process
- Online coding challenge: typically done on www.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 …
- Anything on your resume (projects at previous companies, internships, etc)
- Coding question covering Basic data structures and algorithms - hash tables, binary search trees, sorting algorithms, heaps, etc.
- System Design
- Language-specific questions
- Object oriented design
- Behavioral Questions
- Coding Question where you need to
- Develop the algorithm
- Implement your algorithm in Java/C++/Python/…
- Come up with test cases to find and fix the bugs in your code
- 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
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
- Linked Lists (when to use a linked list over an array and vice versa)
- Stacks, Queues, and Deques
- 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
- Union Find[^1]
[^1]: These problems are less frequent.
Typically asked of SDE-2 and above
Throughput vs latency
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 social media service: Facebook, Twitter, Instagram, Snapchat, 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.
Parking Lot System Design is a commonly asked Object-Oriented Design Interview
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).
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
- Difference between threads and processes. How do threads communicate?
- 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
- Difference between an abstract class and an interface in Java.
- 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?
- Tell me about your favorite/most challenging programming project.
- Tell me about a project where you worked as part of a team.
- Have you ever had a disagreement with a team member? How was it resolved?
- Tell me about a bug that you recently faced. How did you discover it? How did you fix it?
- If your teammates were to complain something about you, what would that be?
- Among all the courses you are taking right now, which one is your least favorite? Why?
Related read: Machine Learning Engineer Interview Questions for FAANG