Meta E4 | Onsite | Reject
Summary
I interviewed for an E4 position at Meta and was ultimately rejected, primarily due to struggles in the mobile system design round, despite performing well in coding and behavioral interviews.
Full Experience
I interviewed for an E4 position at Meta, starting with a phone screen. I was given the LRU Cache problem, which I solved optimally using a doubly linked list and hashmap. The interviewer indicated that one question was sufficient due to its length. He then gave me a conceptual question very similar to Daily Temperatures, asking only for an explanation of the solution. I cleared this round and proceeded to the onsite interviews.
The onsite consisted of two coding rounds, a behavioral round, and a system design round. In the first coding round, I solved a fairly simple problem to find the moving average within a given window (e.g., [1,2,3,4,5,6,7] k = 3 output [2, 3, 4, 5, 6]), which was a straightforward solution. This was followed by the Word Ladder graph problem, which I knew and coded smoothly.
The second coding round included a simple question similar to Valid Word Abbreviation, which I coded and walked through in about 5 minutes. The second question was similar to Binary Tree Right Side View, which was also simple, and I quickly completed the code and walkthrough.
My behavioral round was one of my best. The interviewer was very kind and friendly, and we spoke about some of my complex projects and how I solved problems within them.
The system design round was where I struggled. I was asked to design a library that, given a URL, downloads files from outside. The interviewer provided a function definition func($url, ?= parameters) and directed me to focus on the client-side, seemingly judging my JavaScript abilities, specifically focusing on concepts like promises and threads. I kept answering based on what I thought would be a good design for such a library, and he asked questions about thread counts and safe numbers. Upon doing some research afterward, I found the problem was similar to a mobile system design exercise. Despite my extensive preparation in backend system design, this mobile-focused problem caught me off guard. I was ultimately rejected, and I believe my performance in this round was the primary reason for the outcome. I was fairly disappointed as I had prepared extensively for backend system design.
Interview Questions (8)
In the first onsite coding round, I was asked a fairly simple question: given a window size, get the moving average within that window and output it. 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 asked a problem similar to Binary Tree Right Side View, which was also simple. I completed the code and walkthrough very quickly.
This was one of my best rounds. The interviewer was very kind and friendly. We discussed some of my complex projects and how I solved problems within them.
I was asked to design a library that, given a URL, downloads files from outside. The interviewer provided a function definition func($url, ?= parameters) and guided me to focus on the client-side, seemingly assessing my JavaScript abilities, specifically around promises and threads. I was asked questions about the number of threads to use and what constitutes a safe number. I later found that the problem was similar to a mobile system design exercise.
Preparation Tips
My preparation for system design primarily focused on backend concepts. I studied Alex Xu's System Design books (Volume 1 and 2) and completed 'Grokking the System Design Interview.' I also watched some random videos, but my main focus was on these books.
My advice to everyone is to make sure you prepare for mobile system design as well, in addition to regular backend system design. If you have no clue what mobile system design looks like, the struggle can be natural. Also, make sure to revise your JavaScript concepts, as that might or might not help, but hopefully, it will be useful.