My Interview Experience at Meta [E5 Offer]

From Getting a Referral to Receiving the Offer

Rohit Verma
10 min readNov 20, 2023

Note: While I am excited to share my interview experience, please be aware that I won’t be able to provide the exact questions due to the confidentiality agreement (NDA) in place.

Getting the Referral (July 2021)

In July 2021, I reached out to a friend working as a software engineer at Meta, requesting a referral for an open engineering role. Within a week of me sending across my resume, a recruiter from Meta’s talent acquisition team got in touch with me over email to schedule an introductory call.

Introductory Call with Recruiter (Last week of July 2021)

  • The recruiter walked me through Meta’s interview process in great detail, explaining the initial screening round and the 4 final interview rounds — 2 coding, 1 system design and 1 behavioral/culture-fit.
  • She advised me to brush up data structures, algorithms and coding skills properly to be able to clear the initial screening rounds.
  • I candidly mentioned that I had been out of touch with coding interviews for over 2–3 years at that point. I requested for a month’s time to prepare before appearing for the screening interview.
  • The recruiter was very supportive and agreed to my request also sent across online preparation resources, sample coding questions across various topics and useful interview preparation tips to help me prepare better.

Preparation for Screening Round

I spent the month of August preparing for the screening interview in the following ways:

  • Previously, I used to give my coding interviews in C++. But this time, I opted to use JAVA. You might wonder why JAVA. My reasoning behind this choice was the possibility of a low-level design round, and since most design patterns and other low-level design resources available online are in JAVA. However, in hindsight, I would now prefer Python, as it can potentially save 5–8 crucial minutes in coding interviews.
  • Thoroughly revised data structures, collections framework and object-oriented design patterns in Java.
  • I aspire to delve deeply into Java and enhance my hands-on experience. I initiated my journey by studying data structures in Java, focusing particularly on Collections. I developed a routine of revising all the functions associated with each Collections class. This diligence stemmed from the awareness that coding during interviews often occurs in a plain text editor without code suggestions. Therefore, I aimed to grasp essential skills such as utilizing collection classes, sorting collections, implementing hashCode and equals functions in a class, and understanding the most useful functions within each Collection, such as HashMap, TreeMap, PriorityQueue, and others.
  • After gaining proficiency in JAVA coding and mastering the use of data structures in JAVA, I delved into solving coding questions tailored to specific data structures. This practical approach significantly contributed to my understanding of how these structures are applied in real-world scenarios.
  • Subsequently, I dedicated time to revisiting and implementing well-known algorithms in JAVA, including Dijkstra, Prims, Kruskals, Kosarajus, Kadane’s, 2D Kadane, quicksort, mergesort, and Binary search.
  • Following this, I tackled approximately 60–70 LeetCode problems with a unique strategy. Instead of categorizing them into easy, medium, or hard, I opted for a different route. I first filtered problems by company, then sorted them based on frequency, prioritizing those with an acceptance rate above 60%. This approach stemmed from a valuable insight — the conventional easy, medium, and hard tags on LeetCode might not always accurately reflect a question’s actual difficulty. The acceptance percentage, indicating the success rate in solving a problem, emerged as a more reliable gauge for me.

Originally, I was scheduled to undergo my screening round in August. However, my entire family, including myself, contracted COVID during the second wave. In response, I reached out to the Facebook recruiter via email, requesting a rescheduling of the interview, and the request was accommodated.

The recruiter, I believe, is genuinely supportive and keen on seeing you succeed in the interview.

Ultimately, I completed my screening round in the first week of September 2021.

Appearing for Meta’s Screening Round (First week of September 2021)

Meta strongly adheres to the “move fast” principle, which is evidently reflected in their technical interviews. They expect to solve problems fast. In a 45 minute interview you only have 35 effective minutes to solve problems in that they expect you to solve 2–3 coding problems.

The initial question in this round centered around arrays. Although the question seemed surprisingly easy, it took me some time to accept that it was indeed straightforward. Throughout, I kept pondering if I might be overlooking something crucial; it seemed improbable for the problem to be that simple. Despite my initial disbelief, I provided a solution, which the interviewer found satisfactory. I proceeded to code the solution in a swift 3–4 minutes. The interviewer then posed a follow-up question, which, again, proved to be relatively easy. Extending my previous solution sufficed, and I completed this task in another 3–4 minutes.

Shifting gears, the interviewer presented a different question based on trees. This LeetCode problem involved post-order traversal of a binary tree. I successfully tackled this problem within 6–8 minutes. With 15 minutes still remaining, the interviewer introduced another question, this time focusing on graphs. It was a straightforward problem where the application of in-degree and out-degree concepts was required. Initially, I presented a solution using Disjoint Set Union, but the interviewer suggested to use a simpler approach. After pondering for 2–3 minutes, I provided a streamlined solution, and I translated it into code in a further 4–5 minutes.

In reflection, I find screening rounds generally straightforward. The expectation is to swiftly solve problems and produce functional code.

Advanced to Final Rounds after Getting ‘Strong Hire’ Rating

After receiving positive feedback within 3–4 days, the recruiter got in touch with me, expressing that we could proceed to the actual interviews and inquiring about my preferred dates. In response, I requested a one-month timeframe for interview preparation, a request that the recruiter happily accommodated.

In addition to granting me the necessary time, the recruiter also shared valuable resources for interview preparation. Notably, Facebook had established a dedicated career page featuring approximately 20 coding problems designed for practice. This resource not only facilitated honing coding skills but also provided insights into the types of questions that might arise during the interviews. Furthermore, the career page allowed me to conveniently track the progress of my job application.

Preparing for the Final Rounds

I spent the month of October preparing for the coding and system design rounds in the following manner:

LeetCode Problem Solving:

  • Engaged in a daily routine, solving three LeetCode problems each day.
  • Maintained a consistent and targeted approach to enhance problem-solving skills.

Tech Blog Reading and Theoretical Enhancement:

  • Devoted daily time to reading at least one tech blog.
  • Enhanced theoretical knowledge and stayed updated on industry trends.

System Design Case Studies:

  • Practiced approximately 20 system design case studies during the one-month preparation.
  • Honed the ability to conceptualize and articulate complex system architectures, fortifying readiness for upcoming interviews.
  • Thoroughly studied system design concepts like scaling, caching, load balancing, sharding etc. and made condensed revision notes on the topics.
  • Also read highly popular system design case studies from online platforms like Grokking the System Design Interview to gain practical understanding of building and scaling large systems.

The recruiter shared the sequence of upcoming interview rounds, which comprised:

  • 2 coding rounds
  • 1 system design round
  • 1 behavioral round

Additionally, the recruiter requested me to propose preferred time slots for these interviews.

Opting for a strategic approach, I scheduled my final interviews in the first week of November. I tackled the two coding rounds on the same day, followed by the remaining rounds after a 5-day interval. This deliberate spacing allowed me ample time for thorough revision, particularly in preparation for the system design interviews.

My Final Interview Rounds at Meta (First week of November 2021)

Round 1: Coding Interview

Question 1: Topological Sort (LeetCode Hard)

  • Successfully tackled a LeetCode hard problem centered around Topological Sort.
  • Spent approximately 10 minutes devising the optimal solution.
  • Invested an additional 10–15 minutes in writing the code, considering the intricacies of this longer code.
  • After a thorough dry run to ensure correctness, promptly answered the interviewer’s inquiry about the time complexity.

Question 2: Heap-Based Problem

  • Transitioned to the next question, which focused on Heap.
  • Presented 2–3 solutions but, unfortunately, could not devise the most optimal one within the allotted time.
  • Despite efforts, ran out of time before fully addressing the second question.

Round 2: Coding Interview

Question 1: Based on binary Search (LeetCode Medium)

  • Tackled a LeetCode medium problem centered around binary search.
  • Fortunate to have encountered a similar problem previously, easing the process of devising an optimal solution within the 20–30 minute timeframe.
  • Although the problem statement initially suggested a dynamic programming solution with O(N²) complexity, the more efficient approach involved a modified binary search.
  • Invested approximately 20 minutes in solving the problem, including a thorough code dry run and the determination of its time complexity.

Question 2: Based on Disjoint Set Union

  • Addressed another question where, after analyzing a few examples, I recognized the potential application of disjoint set union.
  • Explained the solution comprehensively and swiftly translated it into code.

Question 3: Based on String and sorting

  • With around 5 minutes remaining, the interviewer introduced another question, an easy LeetCode problem based on string sorting.
  • Successfully provided the optimal solution after several attempts, unfortunately running out of time to implement the code.

Round 3: System Design Interview

The system design interview centered around crafting a feature for the Instagram app, and the process unfolded as follows:

Understanding Requirements (5 minutes):

  • Dedicated the initial 5 minutes to comprehending the requirements and features associated with the Instagram app feature in question.

Functional and Non-functional Requirements:

  • Formulated both functional and non-functional requirements, aligning them with the scale and demands of Instagram's extensive user base.
  • Gave particular consideration to the celebrity use case, ensuring a comprehensive and inclusive design.

High-Level Design with Distributed Systems (Horizontal Scaling):

  • Presented a high-level design grounded in distributed systems to facilitate horizontal scaling.
  • Explored how the architecture would cope with Instagram's massive scale, ensuring seamless functionality under heavy user loads.

Follow-up Questions and Alternatives:

  • Addressed numerous follow-up questions from the interviewer, delving into various aspects of the design.
  • Explored alternative approaches and considered other potential designs, demonstrating a thorough understanding of the design space.

Low-Level Design Focus:

  • The interviewer shifted the focus to low-level design intricacies, probing into details such as:
    - API management strategies.
    - Opportunities for optimization at the client side.
    - Consideration of the database schema.
    - Implementation-related queries.

Overall Evaluation:

  • The system design round concluded positively, with the interviewer expressing interest and satisfaction.

Round 4 (Behavioral)

  • Had an insightful discussion around my previous project work and how it relates to Meta’s core values such as ‘Focus on Impact’, ‘Move Fast’, ‘Live in the Future’ etc.
  • Provided real examples to situational & behavioral questions to demonstrate my approach in dealing with conflicts, handling mistakes, taking initiatives etc.

Got Offer

A week later, the recruiter arranged a call, and my nerves were on edge, particularly concerning my coding performance. I had managed to solve only one problem in the first round and failed to code the third problem in the second round.

To my delight, the recruiter delivered the good news — my feedback was positive. I received three strong hire ratings and one hire rating. The recruiter provided detailed feedback, extended congratulations, and ultimately offered me the E5 software engineer position at META in London.

Offer Negotiation and Acceptance

After I cleared my interviews, I conducted online research to ascertain the optimal compensation for an E5 Facebook engineer in London. My aim was to be well-prepared with a counteroffer when the recruiter presented the initial offer, minimizing the need for prolonged negotiations. After three days, the recruiter initiated a call to discuss the offer. I promptly provided a counteroffer, and when queried about competing offers, I disclosed that I have some competing offers (At that point, I had a couple of offers). The recruiter expressed her commitment to advocating for my expected offer and, after two days, arranged another call to convey the approval of an enhanced offer.

Additionally, Meta provided generous relocation benefits including 45 nights of accommodation in London, business class tickets for family, unlimited freight shipment from India and a one-time bonus to cover other relocation expenses. I relocated to London in December 2021 and Joined META.

Key Takeaways from my Interview Journey at Meta:

The entire process took around 4 months from referral to offer. I thoroughly enjoyed interviewing at Meta — the recruiters and engineers were friendly and welcoming throughout, making the experience truly conversational rather than stressful.

My journey to getting hired at Meta was filled with challenges, learning, and perseverance. From the initial referral to receiving the offer letter, it was a marathon effort spanning 4 months.

I hope my experience provides motivation to all aspiring engineers. With passion and diligent preparation, you can achieve your dream job. Keep hustling! When an opportunity comes knocking, grab it and put in your best effort.

All the long hours of algorithm practice, system design revisions and mock interviews will pay off. Have faith in your abilities. With the right strategy and mindset, you can successfully crack interviews at top companies.

Interviewing is a skill that can be honed over time. Don’t get discouraged by early setbacks. Keep at it! Learn from both successes and failures to improve consistently. Stay motivated and be proud of small wins.

Landing your dream role takes immense patience and work, but the satisfaction of getting there is worth it all. I hope my experience inspires you to keep chasing your goals. Remember, you’ve got this! With passion and diligence, you will eventually reach new heights in your career.

Best of luck, and feel free to connect with me on LinkedIn if you need any help!

Similar interesting read
Read about my interview experience at Google
Read about my interview experience at Amazon

--

--

Rohit Verma

Senior software engineer at Google | Ex Facebook | Ex Amazon | Mentor | connect at https://www.linkedin.com/in/rohive/