Companies
Meta Data Engineer Interview Questions & Process (2026)
— docs/Meta Data Engineer Interview Questions & Process (2026).pdf
Meta(Facebook)의 데이터 엔지니어 면접은 별도의 행동면접(behavioral) 라운드가 없다는 점이 가장 큰 특징이다. 대신 SQL, 데이터 모델링, 프로덕트 센스, Python이 하나의 45분 라운드 안에서 동시에 뒤섞여 평가되며, 지원자는 한 라운드 안에서 여러 역량을 동시에 증명해야 한다. 저자는 이를 '블렌디드(blended) 포맷'이라 부르며, Amazon보다 느리고 Google보다는 빠른 4~10주짜리 프로세스로 설명한다.
| # | 단계 | 형식 | 소요 시간 | 평가 항목 |
|---|---|---|---|---|
| 1 | Recruiter Screen | Phone call | 30 min | Role fit, level calibration, salary, visa |
| 2 | Technical Phone Screen | Video call | 60 min | SQL, Python, product, modeling 4개 영역에 걸친 약 10개의 빠른 문답 |
| 3 | Virtual Onsite | 45분씩 4개 라운드 | 약 3시간 | SQL, Data Modeling, Product Sense, Coding + Pipeline |
| 4 | Hiring Committee Review | Internal | 1-2 weeks | 모든 인터뷰어 피드백을 루브릭 기준으로 종합 채점 |
| 5 | Team Matching | Light interviews | 1-2 weeks | 관심 있는 팀이 여러 곳일 경우 팀 매칭 |
| 6 | Offer & Negotiation | Recruiter | 1 week | 보상위원회(comp committee)가 최종 금액 확정 |
"You have an events table with user_id, event_name, and event_timestamp. Compute the 7-day rolling DAU for the last 90 days. Then compute the DAU/MAU ratio as a stickiness metric. Then identify the top 100 users by stickiness." (하나의 프롬프트 안에 세 개의 쿼리가 중첩된 구조 — 대부분은 첫 번째는 작성하고, 절반 정도가 두 번째까지 작성하며, 세 번째는 'stickiness'를 유저 단위에서 어떻게 정의할지부터 스스로 정해야 하는 프로덕트 센스 영역이라고 서술됨.)
쿼리를 바로 작성하지 않고 먼저 'stickiness'와 같은 모호한 지표를 어떻게 정의할지 인터뷰어에게 확인한 뒤 작성한다. 정의를 말로 설명하는 과정 자체가 평가의 절반을 차지한다고 서술됨.
"I am thinking of stickiness here as the number of active days in a 28-day window divided by 28. Is that the definition you want, or do you have a different one in mind?" 이후 쿼리 작성.
"I would compute it in pandas, this is a lot of SQL." — Meta는 Presto와 Spark SQL 위에서 동작하므로, SQL로 풀지 못하면 Meta에서 일할 수 없다고 판단된다는 서술.
"Design a data model for Facebook Marketplace. We want to answer: how many listings does each seller have, how many sold in the last 30 days, what is the average sale price, and how does seller performance change over time? Walk me through your fact tables, dimensions, and grain." (주니어 답변은 모든 것을 리스팅 레벨 팩트 테이블 하나에 담으려 하고, 강한 답변은 리스팅/트랜잭션/셀러 일별 스냅샷이 서로 다른 세 가지 그레인임을 인식해 세 개의 팩트 테이블로 분리한다고 서술됨.)
그림을 그리기 전에 먼저 답해야 할 질문들을 확인한다 — 요구된 지표들이 리스팅/트랜잭션/셀러 일별 스냅샷이라는 세 개의 서로 다른 그레인에 걸쳐 있음을 인식하고 그레인별로 팩트 테이블을 분리해 설계한다.
"Before I draw anything, I want to confirm the questions we need to answer. The metrics you described span three grains: listing level, transaction level, and seller daily snapshot. I am going to design three fact tables to keep the grains clean." 이후 스케치.
"I would just put everything in one big table and pivot." — Meta는 Presto/Spark 위에서 차원 모델을 운영하므로, 원빅테이블식 사고는 프로덕션 분석 웨어하우스를 구축해본 적이 없다는 신호로 읽힌다는 서술.
"You are working with a PM on Facebook Marketplace. They want to know if Marketplace is healthy. Define the metrics. Prioritize them. Write the SQL for the top one. Then tell me what you would do if it dropped 10% next week." (사실상 네 개의 질문이 하나로 합쳐진 문제.)
4단계 프레임워크: (1) 노스스타 지표와 보조 지표 정의 — 예: 완료된 거래 수를 노스스타로, 신규 리스팅 수/리스팅→메시지 전환율/메시지→거래 전환율/30일 셀러 리텐션을 보조 지표로. (2) 우선순위화 — 선행지표(리스팅→메시지 전환율)를 매일 모니터링. (3) 실제로 SQL을 작성 — 이 단계를 건너뛰고 앞의 두 단계만 말로 때우는 지원자가 많다고 서술됨. (4) 해석과 제안 — 하락이 균일한지 특정 세그먼트에 집중되어 있는지 지역/카테고리/구매자 코호트별로 슬라이스하고, 최근 14일 내 제품 변경 사항이 있었는지 확인.
"Before I define metrics, let me restate the goal. We want to measure health, which means engagement, retention, and revenue. Different metrics map to different parts of health, so I am going to pick one for each."
"I'd just look at DAU." — 대부분의 지원자가 기본값으로 삼는 답변이며, Meta는 DAU가 자사 제품 절반에서 부적절한 지표임을 아는 사람을 채용한다고 서술됨.
"You receive a stream of user events as JSON records. Each record has user_id, event_type, event_timestamp, and a properties dict that varies by event_type. Write a function that produces a flat record per user per day with counts per event_type. Some records are out of order. Some are duplicates. The function should be idempotent for backfill."
상태 관리, 멱등성, 엣지 케이스 처리를 테스트하는 문제. 강한 답변은 타임스탬프 기준 정렬 후 (user_id, event_id) 기준 중복 제거를 적용해, 입력 순서와 무관하게 안정적인 출력을 만드는 방식이라고 서술됨.
"Before I write anything, let me confirm a few things. The properties dict varies by event_type. Should I flatten it, or just count? Also, when you say idempotent, do you mean re-running on the same input window produces the same output, or do you mean the function handles late-arriving data gracefully?" 이후 코드 작성.
"This is basically a Spark job, can I just describe the DataFrame transformations?" — Meta는 실제 Python 코드 작성을 원하며, Spark 잡을 말로만 설명하는 것은 실패로 간주된다는 서술.
Meta는 별도의 행동면접 라운드가 없는 대신, SQL을 작성하는 동안, 데이터 모델을 스케치하는 동안 다섯 가지 가치를 상시 관찰한다고 서술됨: (1) Move Fast — 마감 안에 동작하는 해법을 내놓고 개선할 수 있는가, (2) Be Bold — 모호하고 임팩트가 큰 문제를 자발적으로 맡는가(인터뷰어가 제시한 더 어려운 버전의 문제를 받아들이는 것으로 드러남), (3) Focus on Impact — 모든 기술적 결정을 비즈니스 성과와 연결하는가, (4) Be Open — 실시간 피드백을 수용하고 필요하면 반박할 수 있는가(인터뷰어가 반박했을 때 근거로 방어하거나 우아하게 의견을 바꾸는 것으로 드러남), (5) Build Social Value — 자신의 데이터 작업이 제품과 사용자에게 미치는 영향을 이해하는가. "Tell me about a time" 식의 질문은 없으며, 기술 작업을 수행하는 동안 Meta 엔지니어답게 행동하는지가 관찰된다.