cswork / libraryOpen practice workspace

Interview guides · Meta

Meta Software Engineer Interview Guide 2026

Prepare for Meta SWE interviews with sourced traditional and AI-enabled guidance, a tested code-review mock, system design and a focused four-week plan.

Interviewing at Meta

  • Practice bank: 399+ questions
  • Rounds: 4
  • Typical prep: 2–4 weeks
  • Interview reports: 46

Interview rounds

RoundQuestions
HR Screen6
Online Assessment30
Technical Screen156
Onsite207

How hard is the Meta Software Engineer interview?

DifficultyShareQuestions
Easy5%19
Medium80%319
Hard15%61

What Meta actually tests for

TopicShareQuestions
Coding & Algorithms61%242
System Design21%85
Behavioral & Leadership12%47
Software Engineering Fundamentals4%14
ML System Design2%6
Statistics & Math1%3
Data Manipulation (SQL/Python)0%1
Machine Learning0%1

Meta software engineer interview preparation needs two clear routes: traditional coding under the instructions in your candidate materials, and an AI-enabled exercise only when your invitation explicitly describes one. Both require you to understand the problem, explain a decision and verify the result. They do not have the same tool rules.

This guide aligns the round map, opening and FAQ to that distinction. It keeps the coding, design, behavioral and four-week preparation structure, then adds an original code-review exercise with a flawed proposed change, a runnable repair and independent checks. The exercise is practice material, not a Meta internal codebase or private interview question.

What is confirmed about the interview format?

Meta’s official software engineering full-loop page describes several conversations and links its preparation guide. The currently linked standard guide describes coding, design and behavioral interviews, with four to six approximately 45-minute interviews. Your recruiter supplies the role-specific schedule; a general guide does not establish every specialist or early-career loop.

For traditional coding, that guide discusses about two problems in roughly 40 minutes and practicing without executing code. It emphasizes problem solving, communication, coding and verification. Use those as preparation targets, then confirm the actual session timing and whether your code can run.

The standard guide also prohibits unauthorized outside assistance, including AI tools. In contrast, CoderPad’s October 30, 2025 partner announcement describes Meta’s AI-enabled coding pilot, with code execution and practical problem solving. It supports preparing for a separately invited format; it does not establish that every 2026 applicant receives an AI round, or whether one universally adds to or replaces traditional coding.

CoderPad’s July 2, 2026 documentation explains that interviewers can enable or disable AI Assist per pad. Ask and Edit modes differ, and shared prompts/output can be reviewed in playback. Platform capability is not interview permission. Confirm the approved tools, mode and external-resource rules before using them.

Build the round map from your invitation

ConversationPreparation targetWhat to confirm
Recruiter or initial discussionConcise background, role fit and logisticsTeam, level, schedule and assessment stages
Coding screen or full-loop codingCorrect algorithm, explanation, edge checks and complexityLanguage, task count, execution and allowed references
AI-enabled coding, if explicitly invitedRead a codebase, review suggestions and test a bounded changeApproved assistant, files, terminal access and session rules
Systems or product architecture designRequirements, interfaces, scale, failure handling and trade-offsDesign track and depth for the role
Behavioral or project discussionYour contribution, collaboration, imperfect outcomes and learningFormat and any requested project preparation

An online assessment, specialized design stage or different screen belongs in this map only when recruiting confirms it. Do not infer a CodeSignal timer, pass score or universal hiring timeline from another candidate’s process.

Traditional coding: make verification fit the time

Practice arrays, strings, maps, two pointers, sliding windows, trees, graphs, heaps, stacks, queues and recursion. Select drills that expose a reusable invariant rather than memorizing one company-tagged solution. Start by clarifying input sizes, duplicates, ordering, mutation and error behavior.

For a longest-substring problem, explain what the window contains and when the left boundary moves. For graph traversal, name when a vertex becomes visited so repeated neighbors do not multiply work. Test an empty input, a small ordinary case and an adversarial boundary before claiming correctness.

If execution is unavailable, trace state changes on paper or in comments. If execution is available, run a test that could falsify the key assumption. A green result on one ordinary sample is not evidence that a capacity boundary, duplicate or off-by-one case works.

Treat that permission as belonging to that record, not to every Meta interview. Use only the tools confirmed for your actual session.

AI-enabled practice: reject a plausible shortcut

Original mock. A small calendar service returns consolidated bookings per room. Its input is a list of (room, start, end) records. Times are nonnegative integer units, and intervals are half-open: the start is included and the end is excluded. Require start < end and a nonempty room name.

Merge overlapping bookings within the same room. By default, touching intervals remain separate: [0,10) and [10,20) do not overlap. Return room-sorted records, preserve the input and reject malformed records rather than silently dropping them. Duplicate or nested intervals should not duplicate occupied time.

A hypothetical assistant proposes one global sort followed by start <= previous_end. The proposal passes a same-room overlapping sample. It still violates three independent requirements.

Discriminating caseRequired resultShortcut failure
A [0,10), B [5,15)Keep one interval for each roomMerges B into room A
A [0,10), A [10,20)Keep two intervals by defaultJoins adjacency
Caller supplies reversed recordsPreserve original list orderSorts caller input in place

These tiny tests identify the problem more clearly than asking an assistant to “improve correctness.” The candidate owns the contract; a suggested implementation must meet it even when the visible tests are incomplete.

A complete runnable repair

Save this as calendar_merge.py and run python calendar_merge.py. It uses the standard library. The deliberately wrong function is included for comparison; it is a constructed proposal, not a claim that a particular model produced this code.

from collections import defaultdict

def merge_bookings(rows, *, join_adjacent=False):
    """Return room-sorted unions; integer half-open intervals, no mutation."""
    if type(join_adjacent) is not bool:
        raise ValueError('join_adjacent must be bool')
    groups = defaultdict(list)
    for row in rows:
        if not isinstance(row, (tuple, list)) or len(row) != 3:
            raise ValueError('expected (room, start, end)')
        room, start, end = row
        if not isinstance(room, str) or not room:
            raise ValueError('nonempty room required')
        if type(start) is not int or type(end) is not int or not 0 <= start < end:
            raise ValueError('expected 0 <= integer start < end')
        groups[room].append((start, end))
    result = []
    for room in sorted(groups):
        current = None
        for start, end in sorted(groups[room]):
            overlaps = current is not None and (
                start < current[1] or (join_adjacent and start == current[1]))
            if overlaps:
                current = (current[0], max(current[1], end))
            else:
                if current is not None:
                    result.append((room, *current))
                current = (start, end)
        if current is not None:
            result.append((room, *current))
    return result

def rejected_shortcut(rows):
    # Hypothetical AI proposal, deliberately wrong for the stated contract.
    rows.sort(key=lambda row: row[1])
    out = []
    for room, start, end in rows:
        if out and start <= out[-1][2]:
            out[-1] = (out[-1][0], out[-1][1], max(out[-1][2], end))
        else:
            out.append((room, start, end))
    return out

if __name__ == '__main__':
    sample = [('A', 0, 10), ('B', 5, 15), ('A', 10, 20), ('A', 8, 12)]
    print('rejected:', rejected_shortcut(sample.copy()))
    print('repair:', merge_bookings(sample))
    boundary = [('A', 0, 10), ('A', 10, 20)]
    print('default:', merge_bookings(boundary))
    print('changed contract:', merge_bookings(boundary, join_adjacent=True))

The mixed-room sample produces A [0,20) and B [5,15) after repair. A’s [8,12) bridges its [0,10) and [10,20) intervals through actual overlap, so merging A is correct. The shortcut incorrectly returns only A and loses B’s separate booking.

The separate boundary sample is different: without the bridging interval, the two touching A bookings remain separate. With join_adjacent=True, they become A [0,20). That flag makes the changed requirement explicit rather than accidentally changing the original contract everywhere.

Explain why the repair is correct

Validation happens before any result is returned. The function stores local interval pairs, sorts each room independently and never writes to an input record. A malformed later row raises an error without partially modifying the caller’s earlier rows. This is a pure return-value contract, not a database transaction.

During a room’s sweep, current is the union of the connected overlapping intervals seen since the last output. A new interval whose start is strictly below the current end overlaps; extend the end to the maximum. Otherwise, emit current and begin the next one. Sorting by start ensures a later interval cannot bridge back across a gap already emitted.

The room partition prevents cross-room merging. Strict integer checks reject booleans as times, even though Python treats bool as an integer subclass. The adjacency flag is also required to be an actual boolean. These choices are part of this mock’s contract, not universal calendar requirements.

Sorting dominates at O(n log n) total time in the worst case; local groups and output use O(n) space. There is no HTTP handler, authentication layer, time zone conversion or concurrent booking admission. A real calendar would need those separately. This function computes a union of supplied intervals; it does not detect or prevent conflicting reservations.

Test independently, then review the diff

The repair passed 19,512 checks across 1,500 randomized fixtures and focused boundary cases. The reference uses connected components in an interval-overlap graph, not another sorted sweep. Checks also compare occupied integer units per room, preserve input, verify idempotence and test shuffled records.

Both adjacency modes are compared with the reference. Focused tests reject equal/reversed boundaries, negatives, booleans, floats, empty rooms and malformed records. Separate counterexamples demonstrate all three shortcut failures. These results cover bounded deterministic integer intervals; they do not establish production calendar correctness or model reliability.

A useful review explanation is: “The visible example missed room isolation and the touching boundary. I added those tests before editing, grouped by room and made adjacency explicit. The independent reference agrees on randomized cases, and the input remains unchanged.” That describes evidence rather than declaring that AI is either trustworthy or useless.

If AI is permitted, ask a bounded question with the contract and failing case. Review the changed files, inspect imports and dependencies, and run the tests independently. Decline a suggestion to delete the failing assertion, suppress validation errors or broaden the boundary rule without a confirmed requirement. If assistance is not permitted, use the same review method on your own implementation.

What happens when the interviewer changes the requirement?

Suppose the service should now coalesce adjacent bookings in the same room. Confirm whether that applies to all callers or only one output mode. The explicit flag supports both behaviors while preserving the original default. Add a test for the changed boundary and retain the room-isolation and input-ownership tests.

If times become floating point or real timestamps, this implementation rejects them. Do not remove type checks and hope that equality works. Define precision, time-zone normalization and boundary semantics first. If the service must preserve source booking IDs, the current return schema is insufficient; add provenance and specify how merged intervals retain their contributing IDs.

If concurrent reservation creation enters scope, unioning a snapshot is not an admission check. State the authority that commits a booking and how conflicting requests are ordered. An algorithm that is correct for a static list can still be unsuitable for a live reservation service.

Design preparation: select the right conversation

Meta’s standard guide distinguishes systems design from product architectural design. For systems work, practice decomposition, scalability, reliability and distributed failure boundaries. For product architecture, emphasize APIs, data models and interactions that support a coherent user workflow. Confirm your track instead of using the same infrastructure diagram for every role.

For a calendar-shaped design, begin with whether the task is availability search, booking admission or a digest of existing reservations. Define the user, room identity, data ownership and consistency requirement. Then discuss indexing, authorization, concurrent writes, retries and recovery in that order of need.

Use concrete load assumptions and label them as assumptions. Explain the bottleneck a proposed cache or queue resolves and what correctness it risks. Close with an observable success measure and a failure scenario, such as duplicate request delivery or an authorization change before a write commits.

Behavioral preparation: keep personal ownership precise

Choose real stories about ambiguity, conflict, feedback, failure and delivery. Separate your actions from the team’s actions. Explain the original problem, alternatives, decision, result and what you changed afterward. A result can be mixed; do not replace an imperfect outcome with “everything became reliable.”

For a tooling story, discuss a suggestion you rejected and the evidence that changed your mind. Do not present this mock as work you performed at Meta or as employment experience. In your own story, be ready for “What did you personally change?”, “Who disagreed?” and “Which metric remained poor?”

A four-week plan with two coding routes

WeekShared preparationTraditional routeExplicitly AI-enabled route
1Core data structures and clear contractsWrite solutions independentlyRead a small codebase and identify invariants
2Boundary tests and complexityTimed problems, including manual tracesBounded change, diff review and independent tests
3Recruiter-confirmed design trackPreserve coding pace while adding designTest a flawed proposal and a changed requirement
4True project stories and mixed mocksRehearse in the confirmed environmentRehearse only with approved tools and modes

The calendar mock works in either route. The difference is how help is obtained, not whether correctness belongs to you. After each mock, record one missed assumption, one useful test and one concrete next practice task. Allocate the next session to the actual gap rather than adding random questions.

Sources and scope

Checked October 9, 2026; the currently linked Meta standard guide was read October 8. The booking service, proposed shortcut and checks are original local practice material. Follow your invitation’s specific assessment and tool instructions.