Company Interview Questions · Big Tech
Meta: Machine Learning Engineer
Meta: Machine Learning Engineer Interview Experiences (2025). Rounds, real reported questions and model answers, compiled from public candidate reports (sources at the end). Practice mode hides every answer: say your answer first, press Show answer, then rate yourself. Use 🔁 Review again to build your revision list and 🎲 Random question for a quick drill.
About this interview
Compiled from public candidate reports for Meta Machine Learning Engineer roles: London (September 2025, offer received and declined) and Seattle (July 2025; 3 of 4 interviewers reportedly voted to hire, no offer). The questions are paraphrased, and the model answers are written by EasyLearnSpace.
| Role | Machine Learning Engineer (E4/E5) |
| Rounds | HR call → coding round 1 (2 problems) → coding round 2 (2 harder problems) → behavioural → ML system design |
| Reported questions | Implement an LRU cache; design a news-feed ranking system; "have you maintained an end-to-end ML pipeline in production?" |
| Outcome | London: offer (declined); Seattle: no offer despite mostly positive votes |
| Lesson | Every round counts: one weak signal can sink a strong loop |
01Rounds at a glance
- Coding: 2 problems in about 40 minutes, so speed and clean edge-case handling matter.
- ML system design: end to end (data → features → model → serving → monitoring → scale → ethics).
- Behavioural: ownership, conflict, leadership, with STAR stories.
02Questions and model answers
Q1
Implement an LRU cache with O(1) get and put.
from collections import OrderedDict
class LRUCache:
def __init__(self, capacity: int):
self.cap, self.d = capacity, OrderedDict()
def get(self, key):
if key not in self.d: return -1
self.d.move_to_end(key); return self.d[key]
def put(self, key, value):
if key in self.d: self.d.move_to_end(key)
self.d[key] = value
if len(self.d) > self.cap: self.d.popitem(last=False)
- Mention the classic version: a hash map + doubly-linked list (move a node to the head on access, evict the tail), which interviewers may ask you to write without
OrderedDict.
Q2
Design a ranking system for a news feed.
- Goal: maximise long-term meaningful engagement (not just clicks), with integrity constraints.
- Stages: 1. Candidate generation: recent posts from friends, groups and pages plus recommended content (two-tower embeddings, ANN), giving thousands of candidates. 2. Light ranker: a cheap model trims to hundreds. 3. Heavy ranker: a multi-task deep model (DLRM-style) predicts P(like), P(comment), P(share), P(hide/report) and dwell time, combined with a value function of weighted predictions. 4. Re-ranking: diversity, freshness, creator fairness, integrity filters, ad insertion.
- Features: user–author affinity, content embeddings, recency, engagement velocity, context (device, time).
- Training: logged impressions; handle position bias; daily or online updates.
- Evaluation: offline NDCG and AUC per task → online A/B on engagement and guardrails (reports, time well spent).
- Serving and scale: feature store, caching, under 200 ms end to end; monitor drift and feedback loops.
Q3
Have you maintained an end-to-end ML pipeline in production? What did "maintaining" involve?
Answer (show operational ownership):
- Data: scheduled ingestion with data-quality checks (schema, nulls, distributions) and alerts.
- Training: automated weekly retraining, experiment tracking, and an evaluation gate against the current model.
- Deployment: model registry, canary release, rollback.
- Monitoring: feature drift (PSI), prediction drift, latency, business KPIs, and label-delayed performance tracking.
- Incidents: "An upstream logging change broke a feature. Our drift alert fired, we rolled back within an hour, and we added a data contract."
- Interviewers want evidence that you owned it after launch, not just trained a notebook model.
Q4
Coding: find the k most frequent elements.
from collections import Counter
import heapq
def top_k(nums, k):
return [x for x, _ in heapq.nlargest(k, Counter(nums).items(), key=lambda t: t[1])]
- O(n log k) with a heap. Bucket sort by frequency gives O(n). Discuss ties and streaming variants (Count-Min Sketch).
Q5
How do you handle position bias in ranking training data?
- Users click higher positions more regardless of relevance, so naïve training learns "position = relevance".
- Fixes:
- Add position as a feature during training, and set it to a constant at serving.
- Inverse propensity weighting using estimated examination probabilities (from randomisation or result swaps).
- Click models such as cascade or DBN.
- Small exploration traffic to collect less-biased data.
Q6
Behavioural: tell me about a time you took ownership beyond your role.
Answer (STAR):
- Situation: "Our model's online gains disappeared after launch; nobody owned the logging pipeline."
- Action: "I traced it to a mismatch between training and serving features, wrote a parity test, and set up a weekly cross-team review with the data platform team."
- Result: "We recovered the +2.1% engagement lift, and the parity test caught two later issues before launch."
- Meta values move fast with ownership and impact backed by metrics.
03How to prepare for Meta
- Practise solving 2 medium LeetCode problems in 40 minutes (hash maps, heaps, graphs, design problems like LRU).
- Practise ML system design for feeds, ads, recommendations and integrity.
- Prepare 5–6 STAR stories (conflict, ownership, failure, influence).
Sources
Created by Ajeetkumar