- Published on
Meta | SWE | E4 | US [Offer]
- Author
- Shared Anonymously
Status: 5 YOE at startups + freelance. Tier-2/3 university.
Position: Senior engineer at EU startup.
Location: US
Date: Summer of 2024
So I finally found the motivation to write this post about my recent interview experience with Meta, where I received my first MAANG offer. I won’t disclose specific questions for obvious reasons. This post is more of a motivator because many people say you need to clear all of the interviews perfectly to get an offer—that wasn't the case for me, yet I still passed. In each of my interviews, there were actually some challenges and areas for improvement
Screening interview (coding, 45 min):
I was asked two questions: one easy and one medium. I completed the first question flawlessly, but the second question was a variation of a popular question I had solved before, which I only realized during the implementation phase. The interviewer began asking follow-up questions about the problem itself and some general algorithm questions, like why I chose BFS over DFS, how each works, and the trade-offs between them. My dry run for the second question was quite slow since I selected a complex example. Midway through the dry run, I even told the interviewer something like, 'This is going to take a while to complete, but I think we’re okay here.' (not my best move), but the interviewer insisted that I continue debugging. Overall, I spent about 15 minutes on the first question and 25 minutes on the second. Both questions were solved optimally. The next day, I got a message that I had passed to the virtual onsite.
Virtual onsite (4 rounds):
Coding 1 (45 min):
I was given two questions again: one easy and one medium. I solved the easy one flawlessly in 10 minutes. For the medium question, I initially came up with an O(N\xB3) time complexity solution, then optimized it to O(N\xB2). After that, I was asked to optimize it further to O(N). It took me a while, but I eventually figured out how to achieve O(N) time complexity and explained it to the interviewer before coding it out. I felt good about the interview at first, but afterward, I realized my code didn’t handle some edge cases. There was also a more efficient solution with O(1) space complexity (mine used O(N)), and I had made a typos. At this point, I felt it would likely be a \u2018lean hire’ at best.
Coding 2 (45 min):
I was given two questions: the first one was medium difficulty, and the second was easy but had many edge cases. I solved the medium question without issues, but I struggled with the second one. I made some bugs, didn’t clarify edge cases, and didn’t even consider them. However, both questions were generally solved optimally. Spent ~20 minutes for each question. Once again, I didn’t feel great about the round and thought it would likely result in a \u2018lean hire'.
System Design (45 min):
This was the most challenging interview for me, as I hadn’t had a system design interview before (only mock ones), and I was given a fairly uncommon problem. I did well in clarifying the scope, designing the high-level design (HLD), and answering some follow-up questions from the interviewer. However, my design wasn’t scalable and wouldn’t work effectively at scale, which I realized after completing the HLD. I pointed this out to the interviewer, and he agreed. From my perspective, this was my weakest round. It’s not that I did very poorly, but I felt I was 'not good enough,' so I expected a 'lean hire' at best.
Behavioural (45 min):
This was a generally relaxed round, and I connected well with the interviewer. Some of the questions were well-suited to my experience, and I even had a few stories that could be considered for an E5 level. There were a lot of follow-ups on these stories, so make sure your examples are well-prepared and genuine. After the interview, though, I realized during self-reflection that I talked too much about failures and 'areas for improvement.' I even thought, 'Dude, why you were talking that much about how bad you are instead of talking how good you are :D?'. So it was hard for me to judge if I actually did well or not. Thought it might be something from "lean hire" to "strong hire" depending how they will score talking about weaknesses.
So all these rounds were not perfect, i was expecting to get "follow-up rounds" at best, but...
Two days after the final interview, I received a message saying I passed the debrief and was moving to HC.
The next day, I got another message that I had passed HC.
Preparation advices:
For algo:
- Make sure to solve the top Meta questions on LeetCode.
- Always follow a framework for coding:
- Get a question → clarify to ensure you understand it correctly, including possible inputs and edge cases.
- Write a function definition (input parameters, output parameters, and their data types).
- Explain your approach and confirm the interviewer understands it.
- State the expected time and memory complexity(Or you can make it after implementation. Just make sure interviewer is satisfied with efficiency of your approach before implementing it).
- Implement the code, explaining each step out loud.
- Quickly review the code for syntax errors, readability, naming conventions, and code reuse.
- Do a dry run. If there is a time, do 2. First one on a simple example, second on a more complex example.
- Be very careful. Interviewers often ask popular questions with slight tweaks. Even if you've solved a similar problem before, don’t rely on memory alone, as you might fall into the trap of solving the wrong problem.
For system design:
- Follow a framework for system design as well:
- Get a question
- Define the functional requirements.
- Define the non-functional requirements.
- Do calculations (if needed).
- Create a high-level design.
- Handle deep dives..
- Don't waste time. I found this interview to be the hardest in terms of time management because the scope is extensive. Spend your time wisely. Try to identify the 'main puzzle' of the problem and go to it as quickly as possible. For example, if you are asked to 'design a task scheduler,' it’s unlikely that your interviewer will be interested in details like 'which load balancing algorithm to choose.' Instead, they will want to know how you plan to run tasks at a specific time, how you will track task execution, how to ensure tasks are completed even in the event of failures, and how to prevent tasks from running twice. Therefore, only mention other aspects briefly and focus on solving the main puzzle
For behavioral interviews:
Create stories for popular questions on the internet in a STAR format according to the level for which you are aiming. Make sure they are real(you will be asked about details)
General advices:
-
Try to be proactive and lead the interview—don’t wait for the interviewer to guide you. But it does not mean you should ignore your interviewer, engage but only when it makes sense(for example asking about possible edge cases).
-
Do as many mock interviews as possible. Try to find a community of people who practice together. There are a lot of skills you can’t fully practice just by solving LeetCode problems or watching system design materials, including:
- Time management.
- Staying calm when you’re stuck, and knowing how to get unstuck.
- Talking through your thought process out loud.
- Clarifying ambiquoity(Leetcode problems are well defined with a clear input/output definition, real interviews... Not always.)
- Practicing your interview framework.
In fact, four years ago, I had an interview with Google. At that time, I was much more prepared in terms of pure algorithms knowledge, but I completely failed the onsite because I hadn’t done mock interviews so i felt very nervous during the actual interviews and realized that i can't think and talk at the same time, especially in English :D.
This is my first MAANG offer and second try with big tech companies overall so i super excited about opportunity. Overall the process was not that hard, but you need to prepare correctly and also don't be hard on yourself if you fail, remember that it is a game of numbers -> Interviews are very random
Wish everyone good luck.