Meta | Onsite | Reject
Summary
I recently interviewed at Meta for an onsite role and received a rejection, primarily due to my struggle with a mobile system design question during the final round, despite performing well in the coding and behavioral interviews.
Full Experience
Time to give back to the LeetCode community! My interview process at Meta consisted of a phone screen and an onsite round.
1. Phone Screen Interview
I was given LRU Cache. I had seen this question before and was able 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 was enough. However, he then asked me another question, which was very similar to Daily Temperatures. For this one, I just had to explain the solution and didn't need to worry about coding. After explaining, I moved on to the onsite round.2. Onsite Interviews
Coding Round 1:
Q1: This was a fairly simple question. I was asked to implement a moving average within a given window size. For example, given [1,2,3,4,5,6,7] and k = 3, the output should be [2, 3, 4, 5, 6]. It was a straightforward sliding window solution.
Q2: The next question was a graph problem: Word Ladder. I was familiar with this problem and coded the solution smoothly.
Coding Round 2:
Q1: This was similar to Valid Word Abbreviation. It was very simple, and I managed to code and walk through the solution in about 5 minutes.
Q2: The second question was similar to Binary Tree Right Side View. Again, it was simple, and I quickly completed the code and walkthrough.
Behavioral Round:
This was one of my best rounds. The interviewer was very kind and friendly. We discussed some of my complex projects and how I approached solving problems in them.System Design Round:
This is where I truly struggled. I had prepared system design using various sources, mainly focusing on backend systems. The question I received was more of a mobile system design problem than a typical backend one. I was asked to design a library that, given a URL, downloads files from an external source. The interviewer had written a function definition:func($url, ?= parameters) and emphasized the parameters with a question mark. As I asked more clarifying questions, he steered me towards focusing on the client side and seemed to be evaluating my JavaScript abilities, specifically concepts like promises and threads in JavaScript.
Nevertheless, I tried my best to answer according to what I believed would be a good design for such a library. He asked follow-up questions about the number of threads I would use and what a safe number would be. Upon doing some research later, I found that the problem was similar to the concepts discussed in this article: Mobile System Design Exercise: File Downloader Library.
I genuinely don't know whether everyone is expected to be proficient in mobile system design, but interviews don't come with excuses. I was quite disappointed, having put in all the effort for backend system design, only to be rejected based on my performance in mobile system design. If you're preparing, make sure to cover both mobile and backend system design. Also, it might be beneficial to revise your JavaScript concepts.
Interview Questions (7)
Design and implement a data structure for a Least Recently Used (LRU) cache. It should support the following operations: get and put. get(key) will retrieve the value of the key if it exists, otherwise return -1. put(key, value) will insert or update the value. If the cache reaches its capacity, it should invalidate the least recently used item before inserting a new item.
Given an array of integers temperatures representing the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead. The problem was very similar to this concept.
Given a window size, calculate the moving average of elements within that window as new elements arrive. For example, given the stream [1,2,3,4,5,6,7] and a window size k = 3, the output should be [2, 3, 4, 5, 6].
Given two words, beginWord and endWord, and a dictionary wordList, return the number of words in the shortest transformation sequence from beginWord to endWord, such that: 1. Only one letter can be changed at each step. 2. Each transformed word must exist in the wordList. If there is no such sequence, return 0.
Given a word and an abbreviation, check if the word matches the abbreviation. An abbreviation can be formed by replacing a contiguous non-empty substring of a word with its length. For example, 'internationalization' can be abbreviated as 'i12n', 'i5al', etc. This question was similar to the problem described.
Design a client-side library that, given a URL, downloads files from an external source. The interviewer provided a function signature: func($url, ?= parameters). The discussion focused heavily on client-side aspects and JavaScript concepts like promises and threads. The problem was similar to the concepts discussed in this article: Mobile System Design Exercise: File Downloader Library.
Preparation Tips
My preparation for system design included:
- Reading Alex Xu's System Design Interview (Volume 1 and Volume 2).
- Completing 'Grokking the System Design' book.
- Watching various random videos.