Facebook senior software engineer interview: the only post you’ll need to read

I have been working at Facebook as a software engineer for a while now. During this time, I have got different inquiries from friends and strangers alike on landing a senior engineering position at Facebook. This post will explain the process that could help you achieve your dream job at Facebook or any other FANG company. It will explain the steps I took before applying for a job at Facebook.

Disclaimer: This is the path I personally took before my Facebook interviews. Most of the materials I’m mentioning here are optional. I went through them because I wasn’t in a rush. My goal was not to land a job at a FANG company but learn in the process.

There is no doubt that the technical interviews are stressful, but having a robust process helps the candidate to mitigate and manage their stress level.


Choose a language

Before coming to Facebook, I coded primarily in Ruby, Javascript, and Erlang; although, for my interviews, I decided to go with Python as it resembles Ruby. Another reason is that Python and Java are well known in big tech companies. The Python syntax is very terse, which makes it a suitable candidate for whiteboard interviews. To refresh my knowledge of the language, I dedicated a couple of days to go through the Python 3.7 tutorial. This helped me to get myself familiar with Python 3 syntax and idioms. People must avoid using less mainstream languages in their coding interviews as it’s possible that your interviewer might not be familiar with those languages. Anyhow, as a word of advice, don’t shoot yourself in the foot, and stick to a classic interview language.

I also spent a couple of hours reading Python Glossary. That made me familiar with the terminology used in the Python community.

Making a weekly/daily plan

Take notes

What and how to study?

Introduction to Algorithms serves as an introductory textbook to algorithms. I had read it back in college, but I needed to refresh my memory, so I decided to study it first. Note, that you won’t need to go through CLRS to be succesful in your interview. I just read it because I remember liking it in college.

Here is the daily plan that I used to study the CLRS book:

Day 1 — CLRS (ch 2, 3)

Day 2 — CLRS (ch 4)

Day 3 — CLRS (ch 5)

Day 4 — CLRS (ch 6, 7)

Day 5 — CLRS (ch 8, 9)

Day 6 — CLRS (ch 10, 11, 12)

Day 7 — CLRS (ch 13, 14)

Day 8 — CLRS (ch 15)

Day 9 — CLRS (ch 16)

Day 10 — CLRS (ch 17)

Day 11 — CLRS (ch 18, 19, 20, 21)

Day 12 — CLRS (ch 22, 23, 24, 25, 26)

Day 13 — CLRS (ch 27, 28, 29, 30) (Optional)

Day 14 — CLRS (ch 31, 32) (Optional)

Day 15 — CLRS (ch 33, 34) (Optional)

Day 16 — CLRS (ch 35) (Optional)

For the most part, I stuck to my plan, but they were days that I fell behind. Don’t feel bad if that happens; just notice it fast and try to adjust your plan.

After studying CLRS, I decided to prepare my mind for solving questions. Based on my previous research, one of the books that help you think algorithmically is classic Programming Pearls. Some people call that book archaic and futile, but I can’t disagree more. There are a lot of valuable insights packed in such a small book. I had Programming Pearls in my reading list for a long time, but I never got a chance to go through it. Preparing for the interviews finally gave me the chance to read it. I studied it based on the following plan:

Day 17 — PP (columns 1, 2, 3)

Day 18 — PP (columns 4, 5, 6)

Day 19 — PP (columns 7, 8, 9)

Day 20 — PP (columns 10, 11, 12)

Day 21 — PP (columns 13, 14, 15)

When studying CLRS or PP, it’s essential to solve some of the exercises at the end of each chapter. That will help you to solidify what you have learned into your brain.

After studying CLRS and PP, you should have a good grasp of the following topics:

  • Primitive Types
  • Arrays
  • Strings
  • Linked Lists
  • Stacks and Queues
  • Binary Trees
  • Graphs
  • Heaps
  • Searching
  • Sorting
  • Binary Search Trees
  • Hashing
  • Recursion
  • Dynamic Programming

The next book I studied was “Elements of Programming Interviews In Python”. The reason I chose EPIP over CTCI (Cracking the coding interview) is that EPIP uses Python, and in my opinion, it has a better set of questions.

My initial plan was to study one chapter per day. That included solving all the questions presented in that chapter. I timeboxed myself to one hour per question. If I weren’t able to solve it, I’d come back to it the next day. If, on the second day, I couldn’t make progress on the question, I’d sneak a peek at the answer. I would make sure that I’m understanding the solution and not just memorizing it.

Besides studying one chapter of EPIP per day, I also started reading Designing Data-Intensive Applications (DDIA). This book provides you with a lot of useful materials that are handy in System Design interviews. I had already studied half of the book and had taken notes; so I just ended up working through the second half and reviewing my notes from the first half:

Day 22 — DDIA (Studying my notes for chapters 1 to 6.)

Day 23 — DDIA (ch. 7)

Day 24 — DDIA (ch. 8)

Day 25 — DDIA (ch. 9)

Day 26 — DDIA (ch. 10)

Day 27 — DDIA (ch. 11)

Day 28 — DDIA (ch. 12)

Most candidates spend a lot of time preparing for coding interviews, and they neglect the system design preparation. Studying DDIA put me on the right track for my system design interviews.

Another great source of study for design interviews is “System Design Primer”. It teaches you the foundation of designing large-scale systems, and it also includes Anki flashcards (Disclaimer: I didn’t use the flashcards, so I’m not sure about the quality).

System Design Interviews

As a starting point, try to design the following services:

  1. URL Shortener like bit.ly
  2. Instagram
  3. Twitter
  4. Twitter Search
  5. Facebook News Feed
  6. Whatsapp/Facebook Messenger
  7. Typeahead Suggestion
  8. Dropbox
  9. Netflix/Youtube
  10. Yelp
  11. Lyft
  12. Put the name of your favorite service here

As mentioned before, DDIA and System Design Primer are great resources to study to nail your next system design interview.

Coding Interviews


Software Engineer living in the Bay Area