Facebook: Production Engineer Internship Process
Recently, I had interviews with Facebook regarding the Production Engineer Intern role at the London office. Though I got rejection after the second interview, it was an experience worth sharing.
What is Production Engineering@Facebook?
Production Engineering at Facebook is a hybrid between software and systems engineering; it keeps Facebook running smoothly and scaling efficiently. The Production Engineering team works within Facebook’s product and infrastructure teams to make sure their services are reliable and scalable.
The Process…
This process is a lot different from that of a Software Engineer Internship. They don’t judge you on how well you can retain algorithms in your mind or how many types of coding problems you can solve. It’s mostly about how well can you use your knowledge in a practical scenario.
The process is divided into three phases:
- MCQs on Linux Internals
- Coding Interview
- Systems Interview
MCQs on Linux Internals
This round consists of 20 MCQ questions which are quite straightforward. The questions are based on basic Linux commands( like grep, find, mount, etc.), file permissions, environment variables, process handling(signals), etc.
Coding Interview
This round is quite different from that of other programming interviews you might have taken or heard of before. They won’t ask you complex algorithmic questions. The questions are designed to check your understanding of basic algorithms and data structures. It will also focus on how well you can use your skills to solve sophisticated problems involving string manipulation, File I/O, threads, pipes, memory or other systems related stuff.
Tips: You must take care of the system’s limitations while solving the questions. E.g. While working on a problem related to File I/O, you must also consider the case where the files might be too large to fit in system memory.
Some Resources that might be of help:
- Facebook Engineering: Crush Your Coding Interview
- The HackerRank Interview Preparation Kit | HackerRank
- LeetCode
- CareerCup
- LintCode
Examples of some previously asked questions:
- Read data from an API call that gives structured data in JSON format and arrange that data in the requested format.
- RegEx: Eliminate email addresses from the given HTML file.
- File I/O(Multiple Files): Facebook Production Engineer Interview question
Systems Interview
I found this round of interview very challenging, yet the most intriguing. This round is designed to check your familiarity with the various sub-systems in Linux and their workings. Generally, two different categories of questions can be framed for this round of interview.
Internals (Theory)
Believe me, when I say, you must be thorough enough with the internals to be able to build a simple prototype if asked. Though they would never ask you to build it, questions would be enough to judge your knowledge.
The discussion would start at a reasonably high level, but they would go deeper until you break and surrender.
Essential books to consider(If you are into books):
- Linux Kernel Development: Robert Love — This book has some good explanations of how various features are implemented, at the lowest levels, inside Linux.
- Advanced Programming in the UNIX Environment: W. Richard Stevens- Use this as a reference for understanding various topics.
Important Links:
- https://jvns.ca/: There is a lot of excellent content on this blog!
- Linux Inside: This has pretty good explanations of various sub-systems.
- The Bits and Bytes of Computer Networking: I feel that this course is more or less enough for the networking part!
- How the web works: HTTP and CGI explained
- Linux Boot Process — Part 1 — A Cloud Chef — Medium
- Linux Boot Process — Part 2 — A Cloud Chef — Medium
- What happens when…
There are many blogs out there which can familiarize you with various Linux internals, use Google!
Troubleshooting
Here, you would be given a practical systems issue, and you would be asked to troubleshoot errors.
E.g., A user is trying to communicate with a server bill over port 80 (port 80 -> HTTP) through a browser, but he is not able to establish the connection, what might be the problem?
There can be lots of reasons for such an incident, like network issues, firewall blocked ports, bad gateway config, bad DNS config, etc. After figuring out various possible causes, you can start to eliminate some using Linux tools like ping, nmap, nslookup, etc.
There won’t be the right solution for these types of questions, but a “better” solution!
Important Links:
- Netflix at Velocity — 2015
- Linux Performance Analysis in 60,000 Milliseconds
- Linux Troubleshooting: High Load
- Linux Troubleshooting: Local Network
- Linux Troubleshooting: Remote Networks
- Hunting the Performance Wumpus
- Performance Tuning
For practice, you might want to work on some projects. It would help you in understanding things better! Some of the projects you can work on:
- You can start with implementing some essential Linux utilities like grep, cat, zip/unzip in C
- Code your own UNIX like a shell: this would be of great help!
If interested, more projects can be found here: https://github.com/remzi-arpacidusseau/ostep-projects
Few more miscellaneous blogs: