Meta E4 | Interview experience | Reject
Summary
I interviewed for an E4 position at Meta and was ultimately rejected. While I performed well in the coding and behavioral rounds, my lack of preparation for mobile system design questions led to a struggle in that crucial round.
Full Experience
I wanted to share my interview experience with the LeetCode community.
Phone Screen Interview:
The first question was LRU Cache. I was familiar with this problem and managed to solve it with the optimal solution using a doubly linked list and a hashmap. The interviewer mentioned that since it's a long question, one problem would suffice. However, they then asked me another question, very similar to Daily Temperatures. For this, I only had to explain the solution, not code it. After explaining, I proceeded to the onsite rounds.
Onsite Interview:
Coding Round 1:
The first question was quite simple: given a window size, get the moving average within that window and output it. For example, with an input like [1,2,3,4,5,6,7] and k = 3, the output should be [2, 3, 4, 5, 6]. I found this to be a straightforward solution. The second question was a graph problem, Word Ladder. I knew this problem and coded the solution smoothly.
Coding Round 2:
The first question was similar to Valid Word Abbreviation. Again, it was very simple; I coded it and walked through the solution in about 5 minutes. The second question was similar to Binary Tree Right Side View, also straightforward. I quickly coded and walked through this solution too.
Behavioral Round:
This round was one of my best. The interviewer was very kind and friendly. We discussed some of my complex projects and how I approached solving the problems within them.
System Design Round:
This is where I struggled significantly. I had prepared system design primarily from Alex Xu's volumes 1 and 2, Grokking the System Design, and some random videos, with a strong focus on backend system design. The question I received was more akin to mobile system design than a typical backend one: "Design a library that, given a URL, downloads files from an external source." The interviewer provided a function definition func($url, ?= parameters) and indicated optional parameters. As I asked more clarifying questions, he directed me to focus on the client-side aspects, and it seemed he was evaluating my JavaScript abilities, particularly concepts like promises and threads in JavaScript. Despite this, I tried to answer based on what I believed would be a good design for such a library, discussing aspects like the number of threads. Later, upon researching, I found the problem to be similar to a mobile system design exercise for a file downloader library. I was quite disappointed, as I had put in a lot of effort preparing for backend system design, only to be rejected due to a mobile-focused question I hadn't prepared for.
Interview Questions (7)
I was asked to design and implement an LRU Cache. The optimal solution requires using a doubly linked list and a hashmap to achieve O(1) time complexity for both get and put operations.
I was presented with a problem very similar to LeetCode's Daily Temperatures. The goal is to return an array answer such that answer[i] is the number of days you have to wait after the i-th day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.
Given an array of integers and a window size k, calculate the moving average for each window. For example, if the input is [1,2,3,4,5,6,7] and k = 3, the output should be [2, 3, 4, 5, 6].
I was given the Word Ladder problem. The task is to find the length of the shortest transformation sequence from a beginWord to an endWord, such that only one letter can be changed at each step, and each transformed word must exist in the given wordList.
I encountered a problem similar to LeetCode's Valid Word Abbreviation. The question involves determining if a string can be abbreviated to a given abbreviation, where numbers in the abbreviation represent consecutive characters to be skipped.
I was asked a question similar to the Binary Tree Right Side View problem. The goal is to imagine standing on the right side of a binary tree and return the values of the nodes you can see ordered from top to bottom.
I was tasked with designing a client-side library capable of downloading files from a given URL. The interviewer guided me to focus on client-side aspects, particularly JavaScript concepts like promises and threading models. The problem was later identified as being similar to a mobile system design exercise for a file downloader library.
Preparation Tips
For coding, I consistently used LeetCode to practice a wide range of problems across various data structures and algorithms.
For system design, I prepared diligently using Alex Xu's volumes 1 and 2, and I also went through the entire Grokking the System Design book. Additionally, I watched several random videos on system design topics. My preparation, however, was heavily focused on backend system design principles and patterns, which left me underprepared for the mobile-specific system design question I encountered.