The FAANG Software Engineering Interview Process

Interview Stages

  • Online coding challenge: typically done on
  • 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 …

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


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 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(“Design a parking lot system”) 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 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?
  • 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:

Are You Ready For FAANG Engineering Development Manager Phone Screen?

Enroll Now

comments powered by Disqus