Facebook E5 London Offer
Summary
I successfully navigated the E5 Lead Engineer interview process at Facebook in London, securing an offer after a series of technical, behavioral, and system design rounds.
Full Experience
I had an interview for an E5 Lead Engineer position at Facebook in London. My experience level was 12 years.
Talk with the recruiter (30 mins):
This discussion was crucial for setting my expectations and understanding the interview process. The recruiter provided valuable insights and resources for preparation. I treated this as an interview itself, asking all my questions about the preparation process.
Technical Phone Screen (45 mins):
I was asked two coding questions in this round. Both were relatively easy, and the key was to articulate my thought process clearly. I made sure to test my code immediately after writing it, which impressed the interviewer.
Virtual Onsite (4 rounds):
Behavioral (45 mins):
This round focused on my past experiences in teams and how I handled technical challenges. The questions were open-ended, and each answer led to follow-up questions. I wasn't asked any coding questions in this round. My recruiter had mentioned that a strong positive signal in this round is critical, as a negative signal here can lead to a 'no-hire' decision even with strong technical performance.
System/Product Design (45 mins):
I was tasked with designing a file-sharing system similar to Dropbox. During requirement gathering, I pointed out a potential security issue with auto-sync, which seemed to impress the interviewer. My proposal for staggered scale-up based on usage trends also received positive feedback. I drove the discussion, answering clarification questions and providing high-level differences between SQL and NoSQL without getting bogged down in details.
Coding 1 (45 mins):
This round was similar to the phone screen but with a higher bar. I tackled two coding problems. The first involved a LeetCode problem, where I used Breadth-First Traversal and discussed follow-up questions on parallelization and memory constraints. The second was another LeetCode problem, which I solved very quickly.
Coding 2 (45 mins):
I faced two more coding questions here. For the first, which involved checking interval coverage, I initially missed a boundary case but caught and fixed it during testing without prompting, which was viewed positively. For the second, finding connected sub-graphs in an undirected graph, I used Depth-First Traversal. I ran out of time to complete the code, but because I had modularized my solution, I could clearly outline the remaining implementation details for the interviewer.
The next day, I received positive feedback from my recruiter for all four rounds and was informed that I would proceed to the review board. The offer came through the day after that.
Interview Questions (7)
Given a binary tree of integers, write a function that returns the sums of all the root-to-leaf paths.
Given a string representing an arithmetic expression with only addition and multiplication operators, return the result of the calculation.
Design a file sharing system similar to Dropbox. I discussed potential security issues with auto-sync, proposed staggered scale-up based on usage trends, and drove the design discussion, keeping it high-level and focused on requirements.
Given two integers X and Y (X<Y) and a list of intervals [(i,j)...] (where i is the start and j is the end of the interval), find if the intervals completely cover the given integer range [X,Y]. The intervals are sorted according to their start value. Example1: X=1, Y=6, List: [[1, 3], [3, 5]], output: true; Example2: X=3, Y=5, List: [[1, 4], [4, 7]], output: false.
Given an undirected graph (represented by pairs of nodes), list all connected sub-graphs (components).
Preparation Tips
Tips from my experience:
- Treat the recruiter call as an interview and an opportunity to ask about preparation resources and tips. Recruiters can be very helpful.
- For behavioral interviews, being genuine and self-critical goes a long way. Have significant projects from your CV ready with narratives, and be prepared for follow-up questions.
- For system design, keep the design high-level unless specifically asked to dive deeper. Stay focused on requirements and design a working solution. It's crucial to understand concepts in depth; avoid name-dropping technologies you can't elaborate on. At the same time, keep the big picture in mind and don't get lost in details.
- For coding rounds, always talk through your thought process and test your code without waiting for the interviewer to prompt you. This creates a positive impression.
Recommended Resources:
- Video on approaching problems and testing: https://www.youtube.com/watch?v=1wMBw38rAlw&t=358s
- System Design Reference Video (SQL vs NoSQL): https://www.youtube.com/watch?v=qI_g07C_Q5I&t=2130s
- Michail Smarchchok's YouTube channel: https://www.youtube.com/channel/UC9vLsnF6QPYuH51njmIooCQ (for concepts like caching, queues)
- Gaurav Sen's YouTube channel: https://www.youtube.com/channel/UCRPMAqdtSgd0Ipeef7iFsKw (for consistent hashing, hyperloglog, quad trees, bloom filters)
- Facebook live commenting talk (trade-off decisions): https://www.youtube.com/watch?v=IO4teCbHvZw&t=2300s&ab_channel=InfoQ
- Video on keeping design simple and confident communication: https://youtu.be/Z-0g_aJL5Fw