The Meta Production Engineer interview has three stages: a recruiter call, two 45-minute technical screens, and a final loop of three to five 45-minute interviews. The rounds cover coding, Linux systems, networking, system design, and behaviour. This guide lists more than 110 questions that candidates have reported, round by round. Each technical round opens with its most asked questions, with answers you can open, followed by the full question list.
A Production Engineer, or PE, is Meta's version of a site reliability engineer. Meta's job posting calls the role "a hybrid between software and systems engineers". Older guides call this the Facebook Production Engineer interview. It is the same role.

What are the Meta Production Engineer interview rounds?
| Stage | Format | What it covers |
|---|---|---|
| Recruiter call | 15 to 30 minutes by phone | Your background, why Meta, and why this role. |
| Online assessment | 18 to 20 multiple-choice questions in about 20 minutes | Linux commands, operating systems, and networking. Not every candidate gets it. |
| Technical screen | Two 45-minute interviews | Coding, and Linux troubleshooting. |
| Final loop | Three to five 45-minute interviews | Coding, systems, networking, design, and behavioural. Design is usually for experienced hires. |
| Review and team matching | One to several weeks | The decision, your level, and your team. |
The whole process usually takes two to eight weeks. Ask your recruiter which rounds you will get, which languages you can use, and whether AI tools are allowed in any round.
Recruiter call: what do they ask?
- Tell me about yourself.
- Why Meta, and why Production Engineering?
- What is the hardest thing you have worked on?
Prepare a two-minute answer to each. Some recruiters add a few quick Linux or networking questions, like the ones in the next section.
Online assessment: what is on the quiz?
The quiz covers processes (fork, exec, zombies, orphans), file permissions, command-line tools such as grep, awk, ps, and lsof, the /proc directory, redirection, and inodes. Cover the right-hand column and test yourself.
| Question | Short answer |
|---|---|
What does $? hold in Bash? | The exit status of the last command. Zero means success. |
What does uname -r print? | The release of the running kernel, such as 6.8.0-45-generic. |
Which signal does kill send by default? | SIGTERM, signal 15. A process can catch it and shut down cleanly. SIGKILL, signal 9, cannot be caught. |
| Which signal does a parent receive when a child exits? | SIGCHLD. |
| What is the difference between a process and a thread? | A process has its own address space. Threads in one process share that address space and each has its own stack. |
| How do you see which disks are mounted, and whether one is full? | findmnt or lsblk shows what is mounted. df -h shows space, and df -i shows inodes, which can run out first. |
| How do you find the process using the most memory? | ps aux --sort=-%mem | head, or press Shift+M in top. |
What do nice, renice, and top do? | nice starts a process with a chosen priority. renice changes the priority of a running process. top shows it in the NI column. |
| Where does a Linux system keep its DNS settings? | /etc/resolv.conf names the resolvers, /etc/hosts holds fixed names, and /etc/nsswitch.conf sets the lookup order. |
| What is the IPv6 equivalent of an A record? | An AAAA record. |
Which header field does traceroute change? | The time to live (TTL) in the IP header, called the hop limit in IPv6. It is not a TCP field. |
Coding round: what questions does Meta ask?
Coding comes up in the technical screen and again in the final loop. Expect two questions in 45 minutes, in a plain shared editor with no auto-completion. You choose the language, and Python suits both kinds of question.
Most asked coding questions
Rank dinosaurs by speed from two CSV files
This is the most repeated scripting question. One file holds each dinosaur's name, leg length, and diet. The other holds its name, stride length, and stance. Speed is ((stride / leg) - 1) * sqrt(leg * g), with g equal to 9.8. Print the names of the bipedal dinosaurs, fastest first.
import csv
import math
G = 9.8 # metres per second squared
def bipedal_by_speed(legs_path, strides_path):
leg_length = {}
with open(legs_path, newline="") as f:
for row in csv.DictReader(f):
leg_length[row["NAME"]] = float(row["LEG_LENGTH"])
speeds = []
with open(strides_path, newline="") as f:
for row in csv.DictReader(f):
if row["STANCE"].strip().lower() != "bipedal":
continue
leg = leg_length.get(row["NAME"])
if leg is None: # listed in one file but not the other
continue
stride = float(row["STRIDE_LENGTH"])
speed = (stride / leg - 1) * math.sqrt(leg * G)
speeds.append((speed, row["NAME"]))
return [name for speed, name in sorted(speeds, reverse=True)]
The question is a join on the name column. Load the first file into a dictionary, then read the second file once.
The data has traps. One name is misspelled, and one dinosaur appears in only one file. Say what you will do with a row that has no match. This code skips it.
If the first file does not fit in memory, sort both files by name and merge them in one streaming pass.
Check a process on 100 hosts and email a report
The interviewer is checking whether you plan for slow and broken hosts. A loop that works on three healthy machines can hang for hours on a real fleet.
import shlex
import subprocess
from concurrent.futures import ThreadPoolExecutor
def check(host, process):
cmd = ["ssh", "-o", "BatchMode=yes", "-o", "ConnectTimeout=5",
host, f"pgrep -x {shlex.quote(process)}"]
try:
result = subprocess.run(cmd, capture_output=True, timeout=15,
stdin=subprocess.DEVNULL)
except subprocess.TimeoutExpired:
return host, "timed out"
if result.returncode == 0:
return host, "running"
if result.returncode == 1:
return host, "not running"
if result.returncode == 255: # ssh itself failed: network, key, or host key
return host, "ssh failed"
return host, f"error {result.returncode}"
def report(hosts, process):
with ThreadPoolExecutor(max_workers=20) as pool:
results = list(pool.map(lambda host: check(host, process), hosts))
lines = [f"{host}: {status}" for host, status in sorted(results)]
healthy = sum(status == "running" for _, status in results)
return f"{process} is running on {healthy} of {len(hosts)} hosts\n\n" + "\n".join(lines)
- Run the checks in parallel, with a limit. Twenty workers finish 100 hosts quickly without opening 100 connections at once.
- Set two timeouts.
ConnectTimeoutcovers a host that never answers. Thetimeoutargument covers a host that connects and then hangs. - Keep the failures apart.
pgrepexits with 1 when nothing matches.sshexits with 255 for any error of its own, such as a refused connection or a rejected key. - Never wait for input.
BatchMode=yesmakessshfail at once when a key is missing, and closing standard input stops 20sshprocesses competing for the terminal.
pgrep -x compares against the kernel's process name, which is cut to 15 characters. For a longer name, or a script run by an interpreter, use pgrep -f or systemctl is-active.
To send the report, pass an EmailMessage to smtplib.SMTP. At 10,000 hosts, stop opening SSH sessions and read the answer from an agent that already runs on every machine.
Practical scripting questions
- Read two CSV files of dinosaur data, calculate each dinosaur's speed from a formula, and print the bipedal ones from fastest to slowest.
- Read a file and count the email addresses in it.
- Connect to 100 hosts, check whether a given process is running on each, and email a report.
- Fetch JSON from an API and rearrange it into a requested format.
- Read a host and a port from standard input and report whether it is reachable. Follow-up: what changes if the input file is 1 TB?
- Read log files, extract certain columns, sort or filter them, and write the result to a file.
- Find a battleship in a two-dimensional grid and return its coordinates.
- Generate a Minesweeper grid with mines placed at random.
- Given a series of commits, find the one where a fault was introduced.
Algorithm questions
- Decide whether an array of positive integers can be split into two contiguous parts with equal sums, and print the parts.
- Check whether a string is a palindrome, or one character away from a palindrome.
- Reverse the elements between two positions in an array, or rotate part of an array.
- Count the cells in a two-dimensional grid that meet a condition.
- Reverse a linked list in place.
- Merge k sorted linked lists.
- Parse and evaluate a mathematical expression given as a string.
- Implement a trie that supports prefix search.
- Detect a cycle in a directed graph.
- Traverse a binary tree depth-first, and find the k-th smallest element in a binary search tree.
- Find the largest sum of any contiguous subarray.
- Solve two-sum, and find the longest substring without repeating characters.
- Use binary search to find an item that meets a condition in a sorted array.
Dynamic programming is rare. Since late 2025, Meta has also run an AI-assisted coding round for software engineers: 60 minutes in CoderPad with an AI assistant and a small codebase of several files. Ask your recruiter whether your loop includes it.
Systems round: what Linux questions does Meta ask?
This round sets the loop apart from a software engineering loop. The interviewer asks an open question and follows your answer down until you reach the edge of what you know. They watch how you diagnose, which tools you reach for, and what fix you propose. At the edge, say how you would find out.
Most asked systems questions
What happens when you run ls -l?
Follow the command through the shell, the system calls, and the kernel.

- The shell finds the program. It splits the line into
lsand-l, then searches each directory inPATHuntil it finds/usr/bin/ls. - The shell creates a child process. It calls
clone(), the system call behindfork(), and waits for the child withwait4(). - The child becomes ls. It calls
execve("/usr/bin/ls", ...). The kernel replaces the child's memory with thelsprogram, and the dynamic loader maps its shared libraries. - ls reads the directory. It opens the directory with
openat()and reads the entries withgetdents64(). An entry holds a name, an inode number, and a file-type hint. It does not hold permissions, owner, size, or times. - ls reads each file's metadata. The
-lflag needs permissions, owner, size, and time, solscallsstatx()once for every entry. The kernel answers from the file's inode. - ls turns numbers into names. The inode stores numeric user and group IDs.
lsreads/etc/nsswitch.conf, then/etc/passwdand/etc/group, the first time it meets an ID. - ls prints and exits. It sorts the entries, calls
write()on standard output, and callsexit_group(0). - The shell collects the result. The kernel sends SIGCHLD to the shell,
wait4()returns the exit status, and the shell stores it in$?.
Run strace -f on ls -l before your interview. The trace is short enough to read in ten minutes.
Follow-up: how does a system call enter the kernel? On x86-64 the program puts the call number in the rax register, puts the arguments in other registers, and executes the syscall instruction. The processor switches to kernel mode and jumps to the kernel's entry point. The kernel looks up the handler in its system call table, runs it, and returns to user mode. For a file call, the handler goes through the VFS layer, which checks the directory entry and inode caches before it asks the filesystem to read the disk.
Follow-up: how does strace work? It uses the ptrace() system call to stop the traced process at the entry and exit of every system call, then reads the registers to print the arguments and the result. Two stops for every call make the process much slower, so use it with care on a busy production service.
A program asks for 1 TB of memory on a 16 GB machine. What happens?
The request may fail at once or succeed, depending on one kernel setting.

A large malloc() calls mmap(), which asks the kernel for virtual address space. No physical memory changes hands yet. A process on x86-64 Linux normally has 128 TB of user address space, so 1 TB fits easily.
The kernel then decides whether to grant the request, using vm.overcommit_memory:
- 0, the default. The kernel refuses a single request larger than RAM plus swap. The 1 TB request fails, and
malloc()returns NULL. - 1, always. The request succeeds.
- 2, strict. The kernel caps the total it will promise at swap plus a share of RAM, 50% by default. The request fails.
When the request succeeds, memory arrives one page at a time. The first write to each 4 KB page causes a page fault, and the kernel maps a physical page at that moment.
The trouble starts when the process writes to more pages than the machine has. The kernel reclaims file cache and swaps pages out. When that is not enough, the out-of-memory killer picks the process with the highest oom_score, roughly the one using the most memory, and sends it SIGKILL. dmesg shows the kill.
We tested this on a machine with 8 GB of RAM and the default setting. A single 1 TB request failed with ENOMEM. The same terabyte requested in 7 GB pieces succeeded and used 9 MB of real memory, because the default check looks at each request by itself.
What is a zombie process, and can you kill it?
A zombie is a process that has exited but whose parent has not yet collected its exit status. It has released its memory and uses no CPU. Only its entry in the process table remains, shown as state Z in ps.
You cannot kill a zombie, because it is already dead. There are two ways to clear one:
- Make the parent collect it. The kernel sent the parent SIGCHLD when the child exited, and a correct parent responds by calling
wait(). - End the parent. The zombie is then adopted by process 1, usually systemd, or by the nearest subreaper, which collects it.
A few zombies are harmless. Thousands point to a bug in the parent, and they can use up the process ID space so that nothing new can start.
An application will not start. What do you check?
Work from the cheapest evidence to the most expensive, and say what each step rules out.
- Ask what changed. A deployment, a configuration change, or a restart.
- Read what the service manager saw.
systemctl status myappshows the exit code, andjournalctl -u myapp -n 50shows the last log lines. - Start it by hand as the service user. The error message is often the whole answer.
- Check what it needs to run. A missing library (
ldd), a configuration file with a syntax error, or wrong file permissions. - Check what it needs to claim. A port that is already in use (
ss -ltnp), a full disk (df -handdf -i), a memory limit, or a limit on open files. - Check what it depends on. DNS, the database, and any service it calls during start-up.
- Trace it.
strace -fshows the last system call that failed. ENOENT means a missing file, EACCES means a permission problem, and EADDRINUSE means the port is taken.
Expect to be asked for a temporary fix and a long-term fix. The temporary fix is usually to roll back to the last version that worked. The long-term fix is a check that would have caught the fault before release. Our lessons on investigating without guessing and rolling back safely practise both.
How do you tell whether a process is CPU-bound or I/O-bound?
A CPU-bound process spends its time computing. An I/O-bound process spends its time waiting.
| Where to look | CPU-bound | Waiting on a disk |
|---|---|---|
top or vmstat 1 | High us or sy, low wa | High wa, CPU mostly idle |
Process state in ps | R, running | D or S, waiting |
pidstat -u -d 1 | High %CPU for the process | High read or write rate for the process |
iostat -x 1 | Disks are quiet | A disk shows high utilisation and long waits |
A process waiting on the network looks different again: state S, low CPU, low wa, and quiet disks.
For a CPU-bound process, perf top shows which functions use the time. For a waiting one, strace -c -w -p followed by the process ID totals the wall-clock time spent in each system call. Without -w, the time column counts CPU time only, so a blocked read() looks free.
Processes and signals
- Walk through the Linux boot process, from power-on to the login prompt.
- What does the kernel do when you type
ls -l? - How does a system call get from user space into the kernel?
- How does
stracework, and when would you use it? - How would you trace every function call in a running process?
- What is a zombie process? Can you kill one?
- What is the difference between SIGINT and SIGTERM?
- How does the kernel deliver a signal, and what does
killdo inside the kernel? - How can you catch signals in a program when you do not have its source code?
- How do you turn a process into a service?
- Describe the memory layout of a process. What is the difference between a stack overflow and a heap overflow?
- What are interrupts, and what is the interrupt vector table?
- How does the kernel schedule processes, and which algorithms does it use?
- Compare pipes, named pipes, shared memory, message queues, and sockets. Can two processes write to one pipe at the same time?
Memory
- A program asks for 1 TB of memory on a machine with 16 GB. What happens?
- What is swap, and how does Linux use it?
- What happens when a Linux machine runs out of memory?
- How does virtual memory work? Walk through a process reading one address.
- A process cannot allocate 1 GB although
free -hshows 1 GB free and swap is off. Why? - How do you read the output of
free -h? - An application is slow and the machine is swapping heavily. What do you do?
Files, kernel, and containers
- What is a filesystem, and how does it work?
- What does the virtual file system (VFS) layer do?
- How do you load a kernel module?
- What is a container? How do cgroups and namespaces make one?
Troubleshooting scenarios
- An application fails to start on a server. Walk through what you check.
- How do you tell whether a process is CPU-bound or I/O-bound?
- CPU usage is high and disk I/O is low. How do you find the cause?
- A web server is slow although its resource metrics look normal. What next?
- A server crashes every five minutes and restarts by itself. How do you investigate?
- Here is the output of
vmstat. What state is this machine in? - A service deployment failed. Give a temporary fix, then a long-term fix.
- How would you find a memory leak in a Linux service?
Networking round: what questions does Meta ask?
Networking is sometimes its own interview and sometimes part of the systems round. Expect the browser question either way.
Most asked networking questions
What happens when you type facebook.com into a browser?
Give the six steps in order, then go deeper wherever the interviewer stops you.

- DNS turns the name into an address. The browser checks its own cache, then the operating system's cache and
/etc/hosts, then asks the configured resolver. On a miss, the resolver asks a root server, which refers it to the.comservers, which refer it to Facebook's own name servers. Each answer is cached for its time to live. - A connection opens. The operating system picks a route, normally the default gateway, and uses ARP to learn the gateway's hardware address. Routers then forward each packet by the longest matching prefix in their routing tables. Over TCP, the connection starts with the three-way handshake to port 443: SYN, SYN-ACK, ACK. Over QUIC, which runs on UDP, the connection and encryption handshakes happen together in one round trip.
- TLS secures it. The browser sends the server name and a key share. The server replies with its certificate and its own key share. The browser checks the certificate against its trusted roots, and both sides derive the same keys. TLS 1.3 needs one round trip.
- The browser sends the HTTP request. A
GET /with headers and cookies, over HTTP/2 or HTTP/3. - Meta's servers answer. The connection from step 2 ended at a nearby point of presence, where a layer 4 load balancer picked a proxy. That proxy holds the TLS session and forwards the request to a web server, which builds the page from caches and databases.
- The browser renders. It parses the HTML, fetches the CSS, JavaScript, and images it finds, runs the scripts, and paints the page.
Two details show you know Meta's own network. More than 75% of its internet traffic was already on QUIC and HTTP/3 in 2020. Its layer 4 load balancer, Katran, is open source.
Mention DNS and expect "what are the layers of DNS caching?" Prepare one level of extra depth for every step.
Quick follow-ups: HTTP versions, TLS 1.3, congestion control, root servers, slow databases
| Version | Runs on | Requests at once | When a packet is lost |
|---|---|---|---|
| HTTP/1.1 | TCP | One per connection, so browsers open several connections | Only that connection waits |
| HTTP/2 | TCP | Many streams on one connection | Every stream waits, because TCP delivers bytes in order |
| HTTP/3 | QUIC over UDP | Many streams on one connection | Only the stream that lost the packet waits |
- Can HTTP run over UDP? Yes. HTTP/3 does. QUIC adds the reliability and ordering that UDP lacks, one stream at a time.
- What changed in TLS 1.3? The handshake takes one round trip instead of two. Older key exchanges and ciphers were removed, so every full handshake has forward secrecy. More of the handshake is encrypted, including the certificate.
- Why is TCP congestion control a problem? Classic TCP treats every lost packet as a sign of congestion and slows down. On a wireless link, loss often has nothing to do with congestion. A new connection also needs several round trips to reach full speed. TCP lives in the kernel, so improvements reach users slowly. QUIC moves congestion control into the application.
- Why does a root server refer you elsewhere? The root zone only lists the name servers for top-level domains such as
.com. Delegation keeps each zone's records with its owner, spreads the load, and lets resolvers cache each level separately. - Which causes make a database slow? On the machine: a saturated disk, swapping, CPU saturation, or lock contention from slow queries. On the network: packet loss and retransmits, a slow DNS lookup on every new connection, or a client pool that has run out of connections. Ask first whether every query is slow or only some.
All networking questions
- What happens, at every layer, when you type facebook.com into a browser?
- How do DNS, TCP, UDP, and HTTP work?
- What is the difference between TCP and UDP, and when would you choose each?
- How does the TCP three-way handshake work?
- Compare HTTP/1.1, HTTP/2, and HTTP/3. Can HTTP run over UDP?
- What changed between TLS 1.2 and TLS 1.3?
- How does QUIC improve on TLS over TCP?
- Why is TCP congestion control a problem, and how would you fix it?
- What is your favourite protocol? What are its drawbacks, and how would you improve it?
- How does a router forward a packet? How is a router different from a switch?
- How does ARP work?
- What is
tcpdumpfor? - How does
traceroutework? - What are the layers of DNS caching?
- Why does a root DNS server refer you elsewhere when it could answer the query?
- A production database is unusually slow. Which network and system causes would you check?
- How would you push a package to thousands of machines, and how would you troubleshoot the ones that did not update?
- You share a wireless network and have no admin rights. How could you stop someone using all the bandwidth?
- Design a protocol for a cache service like memcached.
Design round: what questions does Meta ask?
You get a vague goal and design a system that works at Meta's scale. Go past the boxes and arrows. Say how the system fails, how you would know, how you would release a change, and what would wake someone at night. Our lessons on capacity, monitoring, and safe releases cover those habits.
Most asked design question
Design a crawler on 10,000 small machines that never fetches a page twice
The usual way to fail this question is to run out of time. Reach a simple, complete design in the first 25 minutes, then deepen it.
Clarify first. How many pages? Is "never twice" a hard rule or a goal? How often do machines fail? How small is a low-end machine?
Put numbers on it. Assume 1 billion pages and 10 fetches a second on each machine. The fleet then fetches 100,000 pages a second, and the crawl takes 10,000 seconds, a little under three hours. That is the best case. Per-site rate limits stretch the real crawl. A list of every seen page, stored as an 8-byte fingerprint of each URL, takes 8 GB in total, or under 1 MB on each machine. Memory is not the hard part. Coordination is.
Give every URL one owner. Hash the site name of each URL to pick the machine that owns it. Only the owner may fetch that URL, and the owner keeps the list of what it has already seen. A machine that finds a link it does not own sends the link to the owner. Hashing by site also lets one machine limit how fast it requests pages from that site. A very large site needs several owners.
Decide what happens when a machine dies. Use consistent hashing so that a dead machine's sites move to a neighbour and nothing else moves. The seen list must survive the failure, so write each fingerprint to a replicated log.
State the trade-off. If a machine records a URL before fetching it and then dies, the page is never fetched. If it fetches first and dies before recording, the page is fetched twice. With failures you cannot rule out both. "Never twice" as a hard rule means recording first and accepting that a page is lost when its fetcher dies. A later repair pass can recover those pages, but it will fetch again any page that was fetched and not yet stored. Ask the interviewer which they want: at most once with gaps, or full coverage with rare repeats.
Run it. Watch pages fetched each second, queue length on each machine, errors for each site, and a counter of duplicate fetches that should stay near zero. Release new crawler code to a few machines before the rest.
The interview capstone practises the same order on a different problem.
All design questions
- Design a fleet of 10,000 low-end machines that crawls the web without fetching any page twice.
- Design image storage and retrieval for Facebook.
- Design an in-memory cache service like Memcached, including its API.
- Design a system that filters offensive words from content that users submit.
- Design a logging system that ingests logs from millions of servers in real time.
- Design a system that detects and mitigates DDoS attacks.
- Design monitoring and alerting for a large fleet of services.
- Design multi-region failover.
- Design load balancing for Meta's web servers.
- Design a service that distributes configuration to every machine.
- Automate the deployment of a new service to thousands of servers.
- Plan capacity for a service that is growing fast.
- Design a distributed message broker.
- Design a system that handles billions of requests a day.
- Design a chat application like WhatsApp.
Behavioural round: what questions does Meta ask?
- Why should Meta hire you?
- Describe your current project. What makes it hard?
- How does your work affect customers?
- How do you bring new ideas into your work?
- Tell me about a disagreement with a teammate and how it ended.
- Describe a good manager and a bad manager you have worked with.
- Tell me about a failure or an outage. What did you learn?
- What was your hardest project, and what was the biggest obstacle?
- Tell me about an incident you handled under pressure. What would you do differently?
- Tell me about a time you took ownership of a failing service.
- How do you choose what to fix first when several production problems arrive together?
- Give an example of influencing a team decision.
- Describe a project where you made a measurable difference.
Prepare six true stories and practise telling each in two minutes: the situation, what you did, the result, and what you changed afterwards. Meta's values since 2022 are: move fast; focus on long-term impact; build awesome things; live in the future; be direct and respect your colleagues; and Meta, Metamates, me. For the failure question, follow the shape of a blameless postmortem.
How should you prepare for the Meta Production Engineer interview?
- Week one, Linux internals. Work through the systems questions. Run
straceonls,cat, and a short script, and explain every line. Read The Linux Programming Interface by Michael Kerrisk and Systems Performance by Brendan Gregg. - Week two, coding. Each day, write one practical script and solve two algorithm questions, in a plain editor, with 20 minutes for each.
- Week three, networking and troubleshooting. Rehearse the browser answer until you can go one level deeper at any step. Use
dig,tcpdump,traceroute, andsson your own machine. - Week four, design and stories. Outline three design questions with numbers, write your six stories, and do two timed mock interviews.
New to reliability work? Start with the SRE 101 track and the incident response track. Hands-on labs for the coding and troubleshooting rounds are in development. Get an email when they open.
Quick answers
How hard is the Meta Production Engineer interview?
Hard. Most candidates rate it difficult. The questions are well known, but the systems round goes deep and the coding round expects two solutions in 45 minutes.
Is a Production Engineer at Meta the same as an SRE?
Very nearly. Both keep large services reliable through software, share on-call duty, and plan capacity. Meta places its Production Engineers inside product and infrastructure teams. If the SRE role is new to you, read what an SRE does.
Which programming language should you use in the Meta Production Engineer interview?
The one you write fastest. Python fits both the scripting and the algorithm questions. Confirm your choice with your recruiter.
Does the Meta Production Engineer interview include LeetCode-style questions?
Yes. One coding interview is a standard algorithm round at easy to medium difficulty. The other is practical scripting with files and logs.
How long does the Meta Production Engineer interview process take?
Usually two to eight weeks from the recruiter call to a decision.
How much does a Meta Production Engineer earn?
Meta's United States posting for university graduates listed a base salary of $117,000 to $137,000 a year, plus bonus and equity, in October 2026. Our SRE salary guide compares the wider market.
Is the Facebook Production Engineer interview different from the Meta one?
No. It is the same role and the same interview under the company's old name.