Landing a software engineering job at Facebook

David Qorashi
Aug 27 · 6 min read

A couple of months ago, I decided to quit my job as the Director of Engineering at a startup and focus my time and energy on landing a job at Facebook in three months. Recently, I accepted the offer for a Software Engineering position at Facebook. In this post, I will explain the process I took to prepare for my interviews.

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.

Process

The interview process in big companies is comprised of having one or two phone interviews in the beginning. If everything goes well, they will invite you for the final on-site interview. Getting an offer depends on the cumulative performance for all these interviews.

Choose a language

The big tech companies will not get pedantic on the language that you decide to use in your interviews.

For the past couple of years, 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

Bootstrapping a project is the hardest part. To overcome that, it’s recommended to come up with a weekly plan. The weekly plans are less granular than the daily ones; they let you see the big picture and fail fast. After making my weekly plans, I came up with more detailed daily to-do items.

A page of my notebook dedicated to DDIA book

Take notes

Do yourself a favor and take notes of the topics you are studying. During this time, you will be covering so many different subjects, and being a human being guarantees that you will forget the majority of them, so take notes and review them once in a while. Your notes are also a valuable resource for the next time that you are preparing for the interviews. The notes belong to you, so feel free to get creative and make them less dull.

What and how to study?

I started studying with having the following items in my reading list:

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.

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 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
  • 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

To prepare yourself for system design interviews, take a look at any system and service that you use and ask yourself this question: If I was going to build this system, how would I do it? Try to come up with answers to that question. Later, try to validate your answers to make sure your solution is scalable. You could also use mock interviews to get yourself comfortable with system design questions. I didn’t use any for my preparation, but I know of some companies that offer system design mock 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

Besides studying EPIP thoroughly, try to solve as many questions as possible. You could use either of HackerRank or LeetCode. Solving more problems will train your mind and will make you prepare for your actual coding interviews. My approach was to start with easy questions, find my way gradually to medium questions, and in the end, work through the hard ones. Some people prefer to start with hard questions, but I don’t recommend that. Starting with easy questions will help you build confidence as you progress. Make sure you are timeboxing each question and are not lingering too much on a single problem.

Summary

Define a goal for yourself and then strive toward that goal. What I described in this post was my systematic approach to preparing for my Facebook technical interviews. Your journey could be a little bit different, so feel free to adjust my plans for your taste.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade