{"id":959,"date":"2026-06-23T09:12:52","date_gmt":"2026-06-23T09:12:52","guid":{"rendered":"https:\/\/lastroundai.com\/blog\/?post_type=iq&#038;p=959"},"modified":"2026-07-19T10:54:09","modified_gmt":"2026-07-19T05:24:09","slug":"meta-e5","status":"publish","type":"iq","link":"https:\/\/lastroundai.com\/interview-questions\/meta-e5","title":{"rendered":"Meta E5 Interview Questions (2026): What They Actually Ask"},"content":{"rendered":"<p>Somewhere around the second week of prep, most Meta candidates realize they&#8217;ve been doing the wrong kind of work. They&#8217;ve been grinding LeetCode hard problems when the actual coding rounds skew medium. They&#8217;ve been ignoring behavioral prep when the behavioral round, at E5, can decide whether you get the offer or get downleveled to E4. The format mismatch is real, and it&#8217;s consistent enough that it shows up as a pattern across hundreds of candidate reports.<\/p>\n<p>This page covers what the 2026 Meta E5 loop actually looks like: the stages, the timing, what interviewers are scoring, and the specific questions reported from candidates who went through the process between 2024 and early 2026. Sources include interviewing.io&#8217;s senior engineer guide, HelloInterview&#8217;s E5 breakdown, Prepfully&#8217;s candidate reports, and community threads from Blind and Glassdoor. Where something is specific to infrastructure vs. product tracks, I&#8217;ve noted it. Where something is unconfirmed or varies by team, I&#8217;ve said so.<\/p>\n<div class=\"iq-stats not-prose\"><div class=\"iq-stat\"><span class=\"iq-stat__value\">3-4 weeks<\/span><span class=\"iq-stat__label\">Process<\/span><\/div><div class=\"iq-stat\"><span class=\"iq-stat__value\">5-6 total<\/span><span class=\"iq-stat__label\">Rounds<\/span><\/div><div class=\"iq-stat\"><span class=\"iq-stat__value\">LC Medium<\/span><span class=\"iq-stat__label\">Coding<\/span><\/div><div class=\"iq-stat\"><span class=\"iq-stat__value\">Virtual onsite<\/span><span class=\"iq-stat__label\">Format<\/span><\/div><\/div>\n<div class=\"iq-dsec iq-dsec--easy\"><div class=\"iq-dsec__row\"><h2 class=\"iq-dsec__h\" id=\"easy\"><span class=\"iq-dsec__dot\" aria-hidden=\"true\"><\/span>Easy questions<\/h2><span class=\"iq-dsec__n\">9<\/span><\/div><div class=\"iq-dsec__bar\" aria-hidden=\"true\"><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">How do you handle a situation where you&#039;re stuck and making no progress?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Short answer: have a real process. Meta&#8217;s version of this question is checking whether you&#8217;re someone who spins for hours on a blocker or someone who has a time-boxed escalation protocol. The answer interviewers want to hear is something like: I timebox independent debugging to about an hour. If I&#8217;m not closer to a root cause, I document what I&#8217;ve tried and ask for help with a clear question, not a &#8220;can you take a look?&#8221;<\/p>\n<p>The E5 version of this question also sometimes covers: how do you handle this when you&#8217;re the most senior person on the team and there&#8217;s nobody obvious to ask? The right answer involves reaching outside the team, to the oncall for the service you&#8217;re integrating with, to documentation, to vendor support, to the original author of the code even if they&#8217;re in a different time zone.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Why Meta? What specifically about the company&#039;s technical direction interests you?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Every company asks this. Meta&#8217;s version carries more weight than most because the company has had a complicated few years in terms of public perception, and interviewers genuinely want to know if you&#8217;ve thought about why you want to be there specifically. Generic &#8220;social media is important&#8221; answers don&#8217;t work. &#8220;I want to work on systems that serve billions of users&#8221; is better but still generic.<\/p>\n<p>The answers that land: specific technical interest in Meta&#8217;s open-source work (PyTorch, Llama, React, Hack), the specific team and what it works on, or a genuine interest in the infrastructure challenges that come from building at Meta&#8217;s scale. Research the team before your interview. If you know which team you&#8217;re targeting, name something specific about what they ship.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">How long does the Meta E5 interview process take?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">FAQ<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Most candidates report 3 to 4 weeks from recruiter call to verbal offer. The CodeSignal OA and phone screen typically happen within the first two weeks. The onsite loop can be scheduled within a week of passing the phone screen. The longest wait is usually the team-matching phase after the loop completes, which takes 1 to 2 weeks. Referrals don&#8217;t meaningfully compress the timeline at Meta the way they do at some other companies.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">What is the difference between the Product Architecture and System Design rounds at Meta?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">FAQ<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Product Architecture is for product-track SWE roles (Instagram, Messenger, News Feed teams). It focuses on API design, client-server data flow, and how a feature scales as user behavior changes. System Design is for infrastructure-track roles. It focuses on distributed systems, database choices, consistency models, and backend pipeline architecture. Your recruiter will tell you which track you&#8217;re on. If they don&#8217;t, ask. Prepping for the wrong round is a very avoidable mistake.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">How important is the behavioral round for getting an E5 offer vs. E4?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">FAQ<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Very important. Multiple sources, including HelloInterview&#8217;s E5 breakdown and former Meta interviewers, confirm that behavioral round performance alone can shift the outcome between E5 and E4. The coding rounds establish a hire or no-hire bar. Design rounds and behavioral rounds together determine leveling. A strong behavioral round where you clearly demonstrate E5-scope ownership can protect you if your system design was middling. A weak behavioral round can drag you to E4 even if everything else was strong.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Does Meta ask dynamic programming questions in coding interviews?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">FAQ<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>No. Meta explicitly avoids pure dynamic programming questions. This is confirmed by interviewing.io&#8217;s guide and consistent with what candidates report. You&#8217;ll see recursion with memoization occasionally, but the intent is problem-solving clarity, not DP pattern recognition. Don&#8217;t spend prep time on DP problems at the expense of trees, graphs, sliding window, and string manipulation, which are far more common at Meta.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">What happens after the Meta onsite loop?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">FAQ<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>After the loop, your packet goes to a hiring committee. If you clear the hire bar, you enter team matching, which is a series of conversations with hiring managers from teams that have open E5 headcount. Both you and the manager must opt in. You may speak with two, three, or more managers before finding a match. Once you match, the formal offer comes. Meta is known for short offer deadlines, sometimes just a few days, so have a clear sense of your competing offers and timeline before the team-matching calls start.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Can I choose which AI model to use during the AI-enabled coding round?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">FAQ<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Yes. The custom CoderPad environment for this round provides access to several model options including lightweight versions of GPT, Claude, Llama 4, and Gemini. Meta&#8217;s official position is that your choice of model and how much you use the AI has no bearing on your score. Interviewers are scoring communication, problem-solving, code quality, and judgment, not prompt construction. Use whatever models you&#8217;re most comfortable working with and reviewing critically.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Reverse a singly linked list, iteratively and recursively<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Linked Lists<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>This shows up early in Meta phone screens as a warmup before a harder linked-list problem, so interviewers expect you to write it clean and fast without narrating every line. The iterative version keeps three pointers: prev, current, and a saved next, and walks the list once, reversing each link as you pass it.<\/p>\n<p>The recursive version is shorter to write but worth understanding at the stack level, since Meta interviewers often ask a follow-up about its space cost. It recurses to the tail first, then rewires each node&#8217;s next pointer on the way back up.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\ndef reverse_iterative(head):\n\n    prev = None\n\n    current = head\n\n    while current:\n\n        next_node = current.next\n\n        current.next = prev\n\n        prev = current\n\n        current = next_node\n\n    return prev\ndef reverse_recursive(head):\n\n    if not head or not head.next:\n\n        return head\n\n    new_head = reverse_recursive(head.next)\n\n    head.next.next = head\n\n    head.next = None\n\n    return new_head\n<\/code><\/pre><\/div><\/p>\n<p>Both run in O(n) time. The iterative version is O(1) extra space, the recursive one is O(n) due to the call stack, which matters if the list is long enough to risk a stack overflow. A common mistake is forgetting to null out the old head&#8217;s next pointer at the end, which silently creates a cycle back into the original list. If you&#8217;re asked to reverse only a sublist between positions m and n, keep a pointer to the node just before m so you can splice the reversed segment back in without losing the rest of the list.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-dsec iq-dsec--medium\"><div class=\"iq-dsec__row\"><h2 class=\"iq-dsec__h\" id=\"medium\"><span class=\"iq-dsec__dot\" aria-hidden=\"true\"><\/span>Medium questions<\/h2><span class=\"iq-dsec__n\">29<\/span><\/div><div class=\"iq-dsec__bar\" aria-hidden=\"true\"><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Binary tree vertical order traversal<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Trees \/ BFS<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>BFS with column tracking. Use a queue storing (node, column) pairs, starting at column 0. Left children get column &#8211; 1, right children get column + 1. Use a hash map from column to list of node values. After traversal, sort by column key and return the lists in order.<\/p>\n<p>This is one of the most-reported Meta coding questions across multiple 2024 and 2025 candidate accounts. The BFS approach is cleanest under interview time pressure. DFS works too but requires more careful coordination of levels if the problem asks for top-to-bottom ordering within a column.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\nfrom collections import defaultdict, deque\ndef verticalOrder(root):\n\n    if not root:\n\n        return []\n\n    col_map = defaultdict(list)\n\n    queue = deque([(root, 0)])\n\n    min_col = max_col = 0\n    while queue:\n\n        node, col = queue.popleft()\n\n        col_map[col].append(node.val)\n\n        min_col = min(min_col, col)\n\n        max_col = max(max_col, col)\n\n        if node.left:\n\n            queue.append((node.left, col \u2013 1))\n\n        if node.right:\n\n            queue.append((node.right, col + 1))\n    return [col_map[c] for c in range(min_col, max_col + 1)]\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Determine if a binary tree is height-balanced<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Trees \/ DFS<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Bottom-up DFS. For each node, compute the height of left and right subtrees. If either subtree returns -1 (already unbalanced), propagate -1 upward. Otherwise, if the difference in heights exceeds 1, return -1. Otherwise, return 1 + max(left_height, right_height).<\/p>\n<p>The naive top-down approach that calls height() at each node is O(n^2). The bottom-up version is O(n). Meta interviewers at E5 will notice which you reach for first, and the complexity discussion is part of the expected follow-up. Reported in a 2025 phone screen.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\ndef isBalanced(root):\n\n    def check(node):\n\n        if not node:\n\n            return 0\n\n        left = check(node.left)\n\n        if left == -1:\n\n            return -1\n\n        right = check(node.right)\n\n        if right == -1:\n\n            return -1\n\n        if abs(left \u2013 right) &gt; 1:\n\n            return -1\n\n        return 1 + max(left, right)\n\n    return check(root) != -1\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Find the lowest common ancestor of two nodes in a binary tree<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Trees \/ DFS<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Recursive DFS. If the current node is null, or is one of the target nodes, return it. Recurse on left and right subtrees. If both return non-null values, the current node is the LCA. If only one returns non-null, propagate that upward.<\/p>\n<p>Reported from multiple Meta onsites. The follow-up at E5 often pushes toward: &#8220;what if the tree is a BST instead?&#8221; (use BST properties to skip a subtree) or &#8220;what if one node might not exist in the tree?&#8221; (need to count how many targets you found before claiming you have an ancestor).<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Longest substring without repeating characters<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Sliding Window<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Sliding window with a set. Move the right pointer to expand the window, adding each character. When a duplicate is found, move the left pointer rightward, removing characters from the set, until the duplicate is eliminated. Track the maximum window size seen.<\/p>\n<p>One of the most frequently reported Meta phone screen questions, appearing in candidate accounts from 2024 through 2025. At E5, the coding round is typically problem two after this or something of similar difficulty, so this shows up more in phone screens than onsites.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Remove minimum to make valid parentheses<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Stack \/ Strings<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Two-pass approach. First pass: scan left to right, use a stack of open-bracket indices. When you see a closing bracket and the stack is empty, mark it for removal. When you see an opening bracket, push its index. After the first pass, all remaining indices in the stack are unmatched opens, mark them for removal. Build the result string skipping all marked indices.<\/p>\n<p>This is LeetCode 1249 and one of the single most-reported Meta coding questions in 2024-2025. It appears in both phone screens and onsites. If you prep one string question for Meta, prep this one. Follow-up: &#8220;what if you also need to add brackets, not just remove?&#8221; takes this into a harder problem (LeetCode 921).<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\ndef minRemoveToMakeValid(s):\n\n    stack = []\n\n    to_remove = set()\n\n    for i, c in enumerate(s):\n\n        if c == \u2018(\u2018:\n\n            stack.append(i)\n\n        elif c == \u2018)\u2019:\n\n            if stack:\n\n                stack.pop()\n\n            else:\n\n                to_remove.add(i)\n\n    to_remove |= set(stack)\n\n    return \u201d.join(c for i, c in enumerate(s) if i not in to_remove)\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Find the k-th largest element in an array<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Heap<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Min-heap of size k. Iterate through the array. Push each element. If the heap exceeds size k, pop the minimum. At the end, the heap&#8217;s minimum is the k-th largest element. O(n log k) time, O(k) space. Alternatively, quickselect gives O(n) average time but O(n) worst case.<\/p>\n<p>This is LeetCode 215, reported from multiple Meta onsites in 2024-2025. Interviewers at Meta sometimes ask which approach you&#8217;d choose and why. Quickselect is the right choice when k is large relative to n; the heap approach wins when you need online processing of a stream.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Find the length of the longest subarray with at most k distinct elements<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Sliding Window \/ HashMap<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Sliding window with a character frequency map. Expand right pointer, adding characters to the map. When the map has more than k distinct keys, shrink from the left, decrementing counts and removing keys that hit zero. Track the maximum window length throughout.<\/p>\n<p>Reported from a 2024 Meta onsite. This is a clean application of the variable sliding window pattern. The map-based approach generalizes better than a set-based approach because you need to know when a character is fully exited from the window.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Basic Calculator II (evaluate expression with +, -, *, \/)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Stack<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Single-pass with a stack. Track the current number and the last seen operator. On &#8216;+&#8217; or &#8216;-&#8216;, push the current number (negated for &#8216;-&#8216;) onto the stack. On &#8216;*&#8217; or &#8216;\/&#8217;, pop the top of the stack, apply the operator, and push the result. Sum the stack at the end. This handles operator precedence without recursion or building an AST.<\/p>\n<p>This is LeetCode 227 and a verified Meta interview question. Follow-up at E5: &#8220;extend this to handle parentheses&#8221; moves it to LeetCode 224 (Basic Calculator), which requires recursive processing or a stack that handles nested expressions. Know both.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Number of Islands (count connected regions in a grid)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Graphs \/ BFS-DFS<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Flood fill. Scan the grid cell by cell. When you hit an unvisited land cell (&#8216;1&#8217;), increment the island count and run DFS or BFS from that cell, marking every connected land cell as visited so you don&#8217;t count it again. Four-directional adjacency is standard unless the question specifies diagonals.<\/p>\n<p>This is one of the most consistently tagged Meta questions on LeetCode&#8217;s own company-specific problem list, and it shows up often enough as a phone screen opener that some candidates report seeing it twice across different rounds. The follow-up worth prepping: count the number of distinct island shapes, which needs you to normalize each island&#8217;s cell coordinates relative to its top-left corner before comparing shapes.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\ndef numIslands(grid):\n\n    if not grid:\n\n        return 0\n\n    rows, cols = len(grid), len(grid[0])\n\n    count = 0\n    def dfs(r, c):\n\n        if r &lt; 0 or r &gt;= rows or c &lt; 0 or c &gt;= cols or grid[r][c] != \u20181\u2019:\n\n            return\n\n        grid[r][c] = \u20180\u2019\n\n        dfs(r + 1, c)\n\n        dfs(r \u2013 1, c)\n\n        dfs(r, c + 1)\n\n        dfs(r, c \u2013 1)\n    for r in range(rows):\n\n        for c in range(cols):\n\n            if grid[r][c] == \u20181\u2019:\n\n                count += 1\n\n                dfs(r, c)\n\n    return count\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Clone a graph (deep copy with cycles)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Graphs \/ DFS<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>DFS or BFS with a hash map from original node to its clone. Start at the given node, create its clone, then for each neighbor: if it&#8217;s already in the map, wire up the reference; if not, recurse into it first. The map is what keeps cycles from causing infinite recursion, since a node already being cloned is a signal to stop and reuse the existing clone.<\/p>\n<p>Reported across multiple 2024 and 2025 Meta phone screens, often paired with a linked list question as problem two. Interviewers sometimes ask you to do it iteratively with an explicit stack instead of recursion, mostly to see if you understand why the hash map matters rather than just reciting the recursive template.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Course Schedule (can you finish all courses given prerequisites)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Graphs \/ Topological Sort<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Build an adjacency list from the prerequisite pairs and track in-degree per course. Use Kahn&#8217;s algorithm: push every course with in-degree zero onto a queue, pop each one, decrement the in-degree of its neighbors, and push any neighbor that drops to zero. If you process every course this way, there&#8217;s no cycle and the answer is true. If courses remain unprocessed, a cycle exists somewhere in that subset.<\/p>\n<p>This tests whether topological sort is a pattern you reach for automatically instead of trying to brute-force a cycle check with repeated DFS calls. Meta sometimes reskins it as a build-dependency or task-scheduling system, same underlying graph.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\nfrom collections import deque, defaultdict\ndef canFinish(numCourses, prerequisites):\n\n    graph = defaultdict(list)\n\n    indegree = [0] * numCourses\n\n    for course, prereq in prerequisites:\n\n        graph[prereq].append(course)\n\n        indegree[course] += 1\n    queue = deque([c for c in range(numCourses) if indegree[c] == 0])\n\n    processed = 0\n\n    while queue:\n\n        node = queue.popleft()\n\n        processed += 1\n\n        for neighbor in graph[node]:\n\n            indegree[neighbor] -= 1\n\n            if indegree[neighbor] == 0:\n\n                queue.append(neighbor)\n\n    return processed == numCourses\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Copy a linked list with random pointers<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Linked Lists<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>The O(1)-space trick: interleave a clone of each node right after its original (A -> A&#8217; -> B -> B&#8217; -> C -> C&#8217;), then set each clone&#8217;s random pointer using original.random.next, since the clone of any node always sits directly after it. Finally, unweave the list back into two separate lists. A hash map from original node to clone works too and is easier to explain under pressure, at the cost of O(n) extra space.<\/p>\n<p>A recurring Meta-tagged linked list question. Interviewers generally accept the hash map solution as a correct starting point, then ask whether you can do it without extra space, which is where the interleaving approach comes in.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Merge overlapping intervals<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Intervals<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Sort intervals by start time. Walk through them keeping a running &#8220;merged&#8221; interval. If the next interval&#8217;s start is less than or equal to the current merged interval&#8217;s end, extend the end to the max of the two. Otherwise, close out the current merged interval, add it to the results, and start a new one.<\/p>\n<p>Shows up standalone and as a building block for the calendar and meeting-room style questions Meta likes to layer on top: minimum meeting rooms needed, whether a new event can be inserted without conflict, or employee free-time across several schedules. Get the base merge pattern automatic and the follow-ups become much faster.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\ndef merge(intervals):\n\n    intervals.sort(key=lambda x: x[0])\n\n    merged = [intervals[0]]\n\n    for start, end in intervals[1:]:\n\n        if start &lt;= merged[-1][1]:\n\n            merged[-1][1] = max(merged[-1][1], end)\n\n        else:\n\n            merged.append([start, end])\n\n    return merged\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Valid Palindrome II (can you delete at most one character to make it a palindrome)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Two Pointers<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Two pointers closing in from both ends. On a mismatch, you have exactly one shot left: check if skipping the left character makes the remaining substring a palindrome, or if skipping the right one does. If either works, return true.<\/p>\n<p>Common as the first, faster-paced problem in a phone screen before a harder second question. The trap is writing two nearly-identical palindrome-check helper calls instead of one shared helper parameterized by the sub-range, which costs time you don&#8217;t have in a 35-minute window.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Dot product of two sparse vectors<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Arrays \/ Design<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Store each vector as a list of (index, value) pairs for only the nonzero entries. To compute the dot product, walk both index lists with two pointers: when indices match, multiply and add to the running total; when they don&#8217;t, advance whichever pointer has the smaller index. This beats a dense O(n) full-array multiply whenever the vectors are actually sparse, which is the entire point of the question.<\/p>\n<p>One of the most consistently mentioned Meta questions across LeetCode&#8217;s company tag and candidate threads over the past few interview cycles. The interviewer is checking whether you notice &#8220;sparse&#8221; in the prompt and design around it, rather than defaulting to a dense array multiply that technically works but misses the intent.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\nclass SparseVector:\n\n    def __init__(self, nums):\n\n        self.pairs = [(i, v) for i, v in enumerate(nums) if v != 0]\n    def dotProduct(self, vec):\n\n        result = 0\n\n        i = j = 0\n\n        while i &lt; len(self.pairs) and j &lt; len(vec.pairs):\n\n            idx1, val1 = self.pairs[i]\n\n            idx2, val2 = vec.pairs[j]\n\n            if idx1 == idx2:\n\n                result += val1 * val2\n\n                i += 1\n\n                j += 1\n\n            elif idx1 &lt; idx2:\n\n                i += 1\n\n            else:\n\n                j += 1\n\n        return result\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Random Pick with Weight<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Arrays \/ Math<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Build a prefix sum array from the weights. Pick a random integer between 1 and the total weight. Binary search the prefix sums for the smallest index whose prefix sum is greater than or equal to that random number, that index is your weighted pick.<\/p>\n<p>Tests binary search on a derived structure rather than the input array directly. A common miss: scanning the prefix sums linearly instead of binary searching. It still passes small test cases, so it&#8217;s easy to walk away thinking the round went fine, but the complexity follow-up at E5 usually catches it.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Word Break (can a string be segmented into dictionary words)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Strings \/ Recursion<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Recursion with memoization over string positions. At each index, try every word in the dictionary as a possible prefix of the remaining substring; if a word matches, recurse on the rest of the string starting after it. Memoize the positions you&#8217;ve already determined are unreachable so you don&#8217;t redo that work.<\/p>\n<p>This one looks like a textbook DP problem, and technically it can be framed as one, but Meta&#8217;s ban on pure dynamic programming means interviewers usually want you to describe it as recursion with memoization over reachable string positions rather than a bottom-up table. Say it out loud that way and you&#8217;ll match how the interviewer is scoring it.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Continuous Subarray Sum (does a subarray of length 2+ sum to a multiple of k)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Arrays \/ HashMap<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Track the running sum modulo k as you iterate, and store the first index where each remainder was seen in a hash map. If the same remainder shows up again at least two indices later, the subarray between those two points sums to a multiple of k.<\/p>\n<p>The modulo-and-prefix-sum trick is the whole question. It&#8217;s frequently the second, faster problem in a phone screen after an easier warm-up, and it rewards candidates who recognize the pattern quickly instead of trying to brute-force every subarray.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">How should I approach the AI-enabled coding round at Meta?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">AI Round \/ Process<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Meta says AI usage has &#8220;no bearing on the outcome&#8221; in official materials, but interviewing.io&#8217;s analysis draws a sharper line: using AI to verify, sanity-check, and speed up implementation is expected. Using it as a crutch that you can&#8217;t evaluate is the failure mode. Interviewers are scoring communication, problem-solving judgment, and code quality, not prompt engineering skill.<\/p>\n<p>Treat the AI models the way you&#8217;d treat a junior engineer on your team: delegate well-scoped subtasks, review everything they produce before running it, and catch the bugs they introduce. The round is testing whether you can work with AI-generated code responsibly, not whether you can avoid using the tools in front of you. Practice in a local environment where you have an AI assistant and deliberately review and correct its output.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">What kinds of problems appear in the AI-enabled round?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">AI Round \/ Process<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Reported problem types from 2025 include: Flask REST API implementation across multiple files, Kubernetes deployment configuration debugging, shell scripting for log parsing and data aggregation, Pydantic model definition with validation logic, and Docker configuration fixes for multi-service setups. These are operational and backend engineering tasks, not algorithmic puzzles.<\/p>\n<p>The implication for prep: you need to be comfortable reading and debugging unfamiliar code in Python or a backend language quickly. Practice inheriting a messy codebase, finding the bug, and writing a clean extension without breaking existing functionality. That skill is more applicable here than any LeetCode pattern.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a time your role evolved significantly during a project. How did you adapt?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Answer structure: name the project, describe what your initial scope was, then specifically describe the moment when scope expanded and why it fell to you. The &#8220;why it fell to you&#8221; is the E5 signal. If it fell to you because you were the most senior engineer, that&#8217;s okay. If it fell to you because you had proactively built context that nobody else had, that&#8217;s better. Quantify what the expanded scope delivered.<\/p>\n<p>Interviewers follow up by asking what you&#8217;d do differently if you could go back. The honest answer is almost always about communication (&#8220;I would have over-communicated the scope change to stakeholders earlier&#8221;) or about delegation (&#8220;I would have pulled in a more junior engineer for the logging layer earlier instead of doing it myself&#8221;). Have a real retrospective, not a polished non-answer.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Describe a decision you made that was unpopular with your team but you still stand by.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>This is testing intellectual independence. The failure mode is giving a story where you eventually turned out to be wrong and learned from it, then tagging it as a &#8220;decision you still stand by.&#8221; Pick a real example where you made a call that was controversial, the outcome justified it, and you&#8217;d make the same call today even knowing the friction it caused.<\/p>\n<p>Technical examples work well here: choosing a technology the team wasn&#8217;t comfortable with, refusing to scope a feature down when the product team pushed for it, or insisting on a more complex architecture because you could see the future load. The decision needs to have had real consequences, positive and negative, not just mild disagreement that resolved quickly.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a project where you identified a risk that others didn&#039;t initially see.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Frame this as a technical judgment story, not a blame story. You spotted a risk; you brought evidence; you changed the course of the project. What made the risk non-obvious is as interesting to interviewers as what you did about it. Was it a subtle architectural assumption that would break at 10x load? A third-party dependency that had a history of instability you&#8217;d seen in a previous role?<\/p>\n<p>E5 candidates should be able to trace the impact of the risk they identified to a team-level outcome: &#8220;if we hadn&#8217;t caught it, the launch would have been delayed by at least a month&#8221; or &#8220;it would have required a costly migration six months later.&#8221; Vague outcomes (&#8220;it would have been bad&#8221;) don&#8217;t land well.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Describe a time you had to resolve conflict between two senior engineers on a technical decision.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>At E5, you&#8217;re expected to have done this, not just witnessed it. The question is asking whether you can mediate a technical dispute using evidence and structured process, not just by escalating to a manager. Describe the specific technical disagreement, what each side&#8217;s position was, what data or reasoning you brought to move the conversation forward, and how the decision was made.<\/p>\n<p>The outcome doesn&#8217;t need to be perfect. It&#8217;s fine if the decision you helped reach turned out to be wrong later. The interviewer cares about whether you can operate as a de facto technical lead in a room of senior engineers, not whether you&#8217;re always right.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a time you drove a technical initiative that wasn&#039;t assigned to you.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>This tests proactive ownership. Meta calls it &#8220;moving fast&#8221; but what they really want is engineers who identify an opportunity or problem before it&#8217;s on anyone&#8217;s roadmap and execute against it. The story needs to have real scope: something that took more than a few days, involved at least one other person, and had measurable impact.<\/p>\n<p>Be concrete about the initial condition (&#8220;our P99 latency on the search endpoint was climbing and nobody had a project to fix it&#8221;), what you did to build support (&#8220;I put together a one-pager with the data and brought it to the weekly eng sync&#8221;), and what happened as a result. If the initiative succeeded, quantify it. If it didn&#8217;t ship, say why and what you learned about driving unsolicited work in your organization.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a time you mentored someone or helped raise the technical bar on your team.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>This maps to Meta&#8217;s &#8220;growing continuously&#8221; area, and it&#8217;s one interviewers ask surprisingly often at E5 because mentorship is an expected part of the level, not a bonus. Name the person (by role, not necessarily by name), the specific gap you noticed, and what you actually did: pairing sessions, turning recurring code review comments into a written guide, a short internal talk. Vague answers like &#8220;I always help junior engineers&#8221; without a concrete instance don&#8217;t land.<\/p>\n<p>The strongest version of this answer ends with a change that outlived the specific interaction: the guide got adopted by the team, the mentee started catching the same class of bug independently, the pairing cadence became a standing practice. If your story ends at &#8220;and they said thanks,&#8221; it&#8217;s missing the part Meta is actually scoring.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Describe a time you had to give a colleague or manager feedback they didn&#039;t want to hear.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>This is a communicating-effectively question, and at E5 the bar includes giving feedback upward, not just to peers or reports. Structure the story around what made the feedback hard to deliver, how you framed it (specific, timely, tied to observed behavior rather than character), and what happened afterward, good or bad.<\/p>\n<p>Interviewers are listening for whether you avoided the conversation, softened it into something unactionable, or delivered it clearly and stood behind it when there was pushback. A story where the feedback was well received every time is a little suspicious. It&#8217;s fine, and often stronger, if the first reaction was defensive and you had to follow up.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a mistake you made that had real consequences. What did you change afterward?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Meta interviewers ask a version of this specifically to filter out candidates who can&#8217;t own a failure without deflecting to unclear requirements or someone else&#8217;s code. Pick something that actually mattered (a production incident, a bad estimate that blew a deadline, a design choice that had to be reverted), and describe your own role in it plainly, using &#8220;I&#8221; language rather than &#8220;the team&#8221; or &#8220;the requirements.&#8221;<\/p>\n<p>The part that separates a strong answer from a generic one: name one specific process change that came out of it and stuck around after the incident closed. A new test, a monitoring alert, a review checklist item, a habit you changed. &#8220;I learned to be more careful&#8221; isn&#8217;t a change, it&#8217;s a feeling.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a time you had to prioritize among multiple deadlines with limited engineering resources.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>This sits under driving results and embracing ambiguity at once, since you&#8217;re rarely handed a clean framework for these calls in practice. Describe the actual competing asks, the reasoning you used to rank them (impact versus effort, a stakeholder conversation, a hard external constraint like a legal deadline), and what you told the people whose request didn&#8217;t make the cut.<\/p>\n<p>The part candidates often skip: how you managed the fallout with whoever got deprioritized. Interviewers want to hear that you had that conversation directly rather than letting a deadline quietly slip without telling anyone. &#8220;I made a spreadsheet and ranked everything&#8221; is a fine start but incomplete without the human part of the story.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-dsec iq-dsec--hard\"><div class=\"iq-dsec__row\"><h2 class=\"iq-dsec__h\" id=\"hard\"><span class=\"iq-dsec__dot\" aria-hidden=\"true\"><\/span>Hard questions<\/h2><span class=\"iq-dsec__n\">8<\/span><\/div><div class=\"iq-dsec__bar\" aria-hidden=\"true\"><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Minimum window substring<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Sliding Window<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Two pointers with a character frequency map. Expand the right pointer until you have all required characters. Then contract the left pointer to find the minimum valid window. Track the minimum length and starting index. This is O(n) time.<\/p>\n<p>Reported in a 2025 Meta onsite coding round. This is one of the harder problems that appears at E5. The character of the question is testing whether you can implement the two-pointer pattern cleanly under time pressure. Candidates who get confused about the &#8220;valid window&#8221; invariant tend to lose time here.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\nfrom collections import Counter\ndef minWindow(s, t):\n\n    need = Counter(t)\n\n    have, total = 0, len(need)\n\n    window = {}\n\n    res = \u201c\u201d\n\n    res_len = float(\u201cinf\u201d)\n\n    l = 0\n    for r, c in enumerate(s):\n\n        window[c] = window.get(c, 0) + 1\n\n        if c in need and window[c] == need[c]:\n\n            have += 1\n\n        while have == total:\n\n            if (r \u2013 l + 1) &lt; res_len:\n\n                res_len = r \u2013 l + 1\n\n                res = s[l:r+1]\n\n            window[s[l]] -= 1\n\n            if s[l] in need and window[s[l]] &lt; need[s[l]]:\n\n                have -= 1\n\n            l += 1\n\n    return res\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Find all pairs of unique indices where concatenation is a palindrome<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Strings<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>For each word, check if any other word is: (a) the reverse of the full word, (b) a prefix whose reverse creates a valid combination with the remaining suffix being a palindrome, or (c) a suffix whose reverse creates a valid combination. Store words in a hash map for O(1) lookup. Total time is O(n * k^2) where k is average word length.<\/p>\n<p>Reported from a 2025 Meta E5 onsite. This is genuinely hard and tests whether you can enumerate cases correctly, the brute force O(n^2 * k) solution works on small inputs but interviewers push toward the hash-map approach at senior level.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Merge k sorted linked lists<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Heap \/ Linked Lists<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Push the head of each of the k lists onto a min-heap keyed by node value, along with a tiebreaker index to avoid comparing node objects directly. Pop the smallest, append it to the result, and if that node has a successor, push the successor. This runs in O(n log k) time where n is the total number of nodes across all lists.<\/p>\n<p>Sits at the harder end of what actually appears in an E5 onsite. It&#8217;s often the natural follow-up when a candidate solves the two-list merge quickly in a phone screen and the interviewer wants to see if the heap generalization is obvious to them or not.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design Facebook&#039;s News Feed<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Start with scale: 2 billion users, assume 10% daily active, average user follows 200 people each posting twice a day. That&#8217;s 40 billion feed items generated daily, about 460,000 per second at peak. The core trade-off is fan-out on write vs. fan-out on read. Fan-out on write (precompute feeds and push to a cache per user) has low read latency but high write amplification for users with millions of followers. Fan-out on read (compute the feed at request time by querying all followed users&#8217; posts) is simpler but doesn&#8217;t scale at this volume.<\/p>\n<p>Meta&#8217;s actual approach is a hybrid: fan-out on write for most users, but for celebrities with very large follower counts, pull those posts at read time and merge. Your feed cache stores pre-ranked post IDs, not full post objects. A separate ranking service applies the ML ranking model to the cached ID list at read time.<\/p>\n<p>Deep dives interviewers push at E5: how do you handle feed consistency when a post is deleted after it&#8217;s been added to 50 million precomputed caches? How do you manage the feed cache for a user who hasn&#8217;t opened Facebook in 6 months? What does the ranking pipeline look like at a high level?<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\n# Feed service pseudocode: fan-out on write for regular users\n\ndef publish_post(user_id, post_id, content):\n\n    followers = follower_service.get_followers(user_id)\n\n    post_store.save(post_id, content, user_id, timestamp=now())\n    if len(followers) &lt; CELEBRITY_THRESHOLD:\n\n        # fan-out on write\n\n        for follower_id in followers:\n\n            feed_cache.prepend(follower_id, post_id)\n\n    else:\n\n        # mark as celebrity post; readers pull at read time\n\n        celebrity_post_index.add(user_id, post_id)\ndef get_feed(viewer_id, page_token):\n\n    cached_ids = feed_cache.get(viewer_id, limit=200)\n\n    followed_celebrities = follower_service.get_followed_celebrities(viewer_id)\n\n    celebrity_ids = celebrity_post_index.get_recent(followed_celebrities)\n\n    merged = merge_and_rank(cached_ids, celebrity_ids)\n\n    return post_store.batch_get(merged[:20])\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design Instagram Stories, ephemeral content that disappears after 24 hours<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Product Architecture<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Story metadata lives separately from permanent feed posts, in a store with a built-in expiry (a TTL index, or a background sweep job that runs every few minutes and removes anything past its 24-hour window). The stories tray at the top of the app is ordered by a closeness or interaction score Meta computes per viewer, not strict chronological order, which is a detail interviewers sometimes ask you to justify.<\/p>\n<p>The harder design problem is view tracking. Storing a row per (story, viewer) pair works at small scale but gets expensive fast for an account with millions of followers watching the same story. A cheaper approach: a compact per-viewer cursor of &#8220;last story ID seen&#8221; combined with a probabilistic structure like a bit array or HyperLogLog for approximate unique-view counts, exact counts only where the product actually needs them (the story owner&#8217;s own view list).<\/p>\n<p>Same celebrity fan-out problem as News Feed shows up again here: a story from an account with 50 million followers can&#8217;t be pushed to every follower&#8217;s tray synchronously at post time, so it gets pulled at read time for high-follower accounts, same hybrid pattern.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design Nearby Friends, Meta&#039;s location-sharing feature<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>This one is grounded in a real system Meta&#8217;s own engineering team has written about. The core idea is geohashing: encode each user&#8217;s location into a grid cell string of variable precision, longer strings mean smaller, more precise cells. When a user&#8217;s location update lands in a new cell, the service only broadcasts an update to friends who have the feature turned on and whose last known cell is nearby, not to every friend on every location ping.<\/p>\n<p>The precision trade-off is the interesting design lever: use a coarser (shorter) geohash for friends-of-friends-level proximity and a finer one for close friends who&#8217;ve opted into more precise sharing. E5 deep dives: how do you throttle location update frequency to manage battery and bandwidth on the client (exponential backoff when the user hasn&#8217;t moved cells), and how do you fan out an update to a user with 5,000 friends without a location ping turning into 5,000 individual pushes (batch and debounce the fan-out on a short delay instead of pushing instantly on every single update).<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a time you made a high-consequence call with limited reversibility.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Reported verbatim from a 2025 Meta E5 behavioral round. This question is testing decision-making maturity: how you reason about irreversibility, how you gathered enough confidence to proceed, and whether you built in monitoring to catch the failure case early if the call was wrong.<\/p>\n<p>Strong answer structure: describe what made it irreversible (a live migration, a public API contract change, a data schema modification), what evidence you had before committing, what you did to reduce the blast radius (staged rollout, feature flag, backup plan), and what actually happened. If the call turned out wrong, that&#8217;s a valid story too, what matters is the reasoning process, not the outcome.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a time you pushed back on your manager&#039;s or a senior stakeholder&#039;s technical direction.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Different from disagreeing with a peer: this is specifically about disagreeing upward, and it&#8217;s testing whether you do it with evidence or with deference disguised as agreement. Pick a real example where you thought a decision from someone more senior was wrong, describe exactly what data or reasoning you brought to the conversation, and what actually happened. Not every version of this story ends with you winning the argument, and that&#8217;s fine to say.<\/p>\n<p>What Meta doesn&#8217;t want to hear is a story that&#8217;s really about being stubborn rather than being right. If your framing sounds like &#8220;I refused to do it their way,&#8221; reframe around what evidence changed the conversation, or what you learned about when to escalate versus when to align and move on.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-dsec iq-dsec--scenario\"><div class=\"iq-dsec__row\"><h2 class=\"iq-dsec__h\" id=\"scenario\"><span class=\"iq-dsec__dot\" aria-hidden=\"true\"><\/span>Real-time scenario questions<\/h2><span class=\"iq-dsec__n\">6<\/span><\/div><div class=\"iq-dsec__bar\" aria-hidden=\"true\"><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design a rate limiter for Meta&#039;s API gateway<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Clarify the scope first: per-user limit, per-API-key limit, or global rate limiting? Sliding window vs. token bucket? At Meta&#8217;s scale, a centralized Redis-based solution is viable but introduces network latency on every API call. A distributed approach uses local in-memory counters with periodic synchronization, accepting slight over-limit risk in exchange for sub-millisecond enforcement latency.<\/p>\n<p>Token bucket is well-suited for burst tolerance (users can accumulate tokens during quiet periods and spend them quickly). Fixed window counters are simple but allow double the rate at window boundaries. Sliding window log is accurate but memory-heavy. Sliding window counter (hybrid) is the practical choice at scale. Store counters in Redis with TTL expiration. For 100 million requests per minute, shard the Redis cluster by user ID prefix.<\/p>\n<p>E5 deep dive questions: how do you handle distributed enforcement when a user&#8217;s requests hit multiple edge nodes? How do you design the system so that adding a new rate limit tier doesn&#8217;t require deploying new code? What&#8217;s the failure mode when Redis is down, fail open or fail closed, and who makes that call?<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design a behavioral analytics system for fraud prevention at Meta<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>This was reported verbatim from a 2025 Meta E5 onsite. The system needs to ingest user action events (clicks, scrolls, ad interactions, account changes) at very high volume, apply fraud detection logic in near-real-time, and flag suspicious accounts for review. The ingestion layer is Kafka. Events go into a stream processing layer (Flink or Spark Streaming) that maintains rolling behavioral fingerprints per user. Feature vectors are stored in a low-latency feature store (Redis or Cassandra) for the ML model to query at decision time.<\/p>\n<p>The hard parts: defining &#8220;behavioral fingerprint&#8221; at the right granularity (too coarse misses patterns, too fine blows up the feature space), managing the latency budget for real-time decisions (fraud flagging at ad click time needs to complete in under 200ms), and handling the cold-start problem for new accounts that have no behavioral history.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design a distributed cache like Memcached<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Core components: a consistent hashing ring to distribute keys across cache nodes (with virtual nodes to handle uneven key distribution), a slab allocator for memory management within each node, and an LRU eviction policy. Client libraries handle node selection using the hash ring; no central coordinator is needed for reads and writes.<\/p>\n<p>Consistency model: Memcached is deliberately not strongly consistent. Cache invalidation on writes can use a delete-and-recompute pattern (delete the cache key on write, let the next read trigger a cache fill from the database) or a write-through pattern (update cache synchronously on every write, at the cost of write latency). At Meta&#8217;s scale, delete-and-recompute is the safer default because it avoids write amplification.<\/p>\n<p>E5 follow-ups: how do you handle thundering herd (many requests hitting the database simultaneously when a popular key expires)? The answer is lease-based cache fills: the first request to miss gets a lease token, subsequent requests wait briefly and retry rather than all going to the database. How do you handle cache node failure? Consistent hashing means only the keys on the failed node need to be remapped.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design a product architecture for an ad click aggregation system<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Product Architecture<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Ad click aggregation is one of Meta&#8217;s own core systems, so expect depth here. Ingestion: clicks arrive via a client event API at hundreds of thousands per second. Each click event contains ad ID, user ID, placement ID, and timestamp. The event goes into Kafka immediately; the API response doesn&#8217;t wait for aggregation.<\/p>\n<p>Aggregation layer: a stream processor (Flink) maintains rolling counts per ad ID over time windows (1-minute, 1-hour, 1-day). These counts feed a real-time reporting API and a batch analytics pipeline for billing reconciliation. The hard problem is exactly-once processing for billing, duplicate clicks must be deduplicated before they&#8217;re counted in the billing ledger. Use a dedup store (Redis with a TTL matching your dedup window) keyed on click event ID.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design Messenger, Meta&#039;s real-time chat system<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Clients hold a persistent WebSocket connection to a routing layer that maps user ID to the specific server holding their live socket, a presence service. When user A sends a message, it&#8217;s written to a per-conversation message store (a wide-column store keyed by conversation ID, ordered by a monotonically increasing sequence number) and the routing layer looks up whether user B is online. If B is online, the message is pushed over their socket immediately. If not, it waits in a per-user pending queue and gets delivered as a push notification, then drained fully once B reconnects.<\/p>\n<p>The sequence number per conversation, not a wall-clock timestamp, is what keeps message ordering correct even when two messages arrive at the backend within the same millisecond from different servers. Deep dives Meta pushes on at E5: how do you fan out a message to a 200-person group chat without 200 separate writes blocking the sender&#8217;s perceived latency (answer: write once to the conversation store, then fan out delivery asynchronously), and how do read receipts and typing indicators stay best-effort and never block the actual message path.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design a search typeahead \/ autocomplete system<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>A trie is the natural data structure for prefix matching, but the interesting design decision is what you store at each trie node. Storing just the sub-tree isn&#8217;t enough, since ranking millions of completions on every keystroke is too slow. Instead, precompute and cache the top-k most popular completions at each node, refreshed periodically by a background job that reads query logs, not on every request.<\/p>\n<p>Client-side debouncing matters too: firing a request on every keystroke wastes bandwidth and server capacity, so most implementations wait 100 to 200ms after the user stops typing before querying. Deep dives at E5: how do you personalize results (blend a user&#8217;s own search history with global popularity, usually a weighted score) and how do you keep the cached top-k lists from going stale without rebuilding the whole trie on every update.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-callout iq-callout--insight not-prose\"><div class=\"iq-callout__title\">What we&#039;ve seen across Meta E5 loops<\/div><div class=\"iq-callout__body\"><\/p>\n<p>The pattern that ends Meta E5 loops early isn&#8217;t coding failures. It&#8217;s behavioral round misfires at the wrong level. Candidates who prepared behavioral stories scoped to E4 (individual feature ownership, solo technical decisions) routinely get downleveled or rejected because the stories don&#8217;t demonstrate the E5-level scope Meta is scoring for.<\/p>\n<p>At E5, Meta wants to hear about multi-quarter projects where your decisions affected a team of 3 or more engineers. Projects where the requirements were loosely defined and you drove scoping. Situations where you influenced peers without direct authority. If your best story is &#8220;I built a feature end to end in 6 weeks,&#8221; that&#8217;s an E4 story. The same project gets reframed as an E5 story when you talk about the cross-functional coordination, the architectural decision that shaped how three other engineers built their components, and the measurable impact you owned post-launch.<\/p>\n<p>Across mock sessions on LastRoundAI, the behavioral round is the most consistently under-prepared section for candidates with strong technical skills. It&#8217;s also the round where, at E5, the scoring is most consequential for leveling.<\/p>\n<p><\/div><\/div>\n<div class=\"iq-callout iq-callout--tip not-prose\"><div class=\"iq-callout__title\">On E5 behavioral stories and scope<\/div><div class=\"iq-callout__body\"><\/p>\n<p>The most common feedback we hear from candidates who get downleveled is that their behavioral stories were technically strong but personally scoped. A project where you built something impressive alone reads as E4. The same project, told from the angle of how you shaped the technical direction, brought in two other engineers, and delivered a metric the team could point to in a review, reads as E5. The facts of the project don&#8217;t change. The frame does.<\/p>\n<p>Before your Meta loop, pick your four strongest projects and write one sentence per project that starts with &#8220;I influenced&#8230;&#8221; not &#8220;I built&#8230;&#8221; That reframe alone tends to surface the right framing for behavioral answers.<\/p>\n<p><\/div><\/div>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How long does the Meta E5 interview process take?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Most candidates report 3 to 4 weeks from recruiter call to verbal offer. The CodeSignal OA and phone screen happen within the first two weeks. The onsite loop can be scheduled within a week of passing the phone screen. Team matching after the loop takes 1 to 2 weeks and is typically the longest wait.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is the difference between the Product Architecture and System Design rounds at Meta?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Product Architecture is for product-track roles and focuses on API design, client-server data flow, and feature scaling. System Design is for infrastructure-track roles and covers distributed systems, database choices, and backend pipeline architecture. Your recruiter will tell you which one you're getting.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How important is the behavioral round for getting an E5 offer vs. E4?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Very important. Behavioral round performance alone can shift the outcome between E5 and E4. Coding rounds establish hire or no-hire. Design and behavioral rounds together determine leveling. A strong behavioral round demonstrating E5-scope ownership can protect a middling design performance.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Does Meta ask dynamic programming questions in coding interviews?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"No. Meta explicitly avoids pure dynamic programming questions, confirmed by interviewing.io's guide and consistent with candidate reports. You may see recursion with memoization occasionally. Focus prep time on trees, graphs, sliding window, and string manipulation instead.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What happens after the Meta onsite loop?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Your packet goes to a hiring committee. If you clear the hire bar, you enter team matching, a series of opt-in conversations with hiring managers from teams with open E5 headcount. Once you match with a team, the formal offer comes. Meta is known for short offer deadlines, sometimes just a few days.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Can I choose which AI model to use during the AI-enabled coding round?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes. The custom CoderPad environment provides access to lightweight versions of GPT, Claude, Llama 4, and Gemini. Meta's official position is that model choice and AI usage level have no bearing on your score. Interviewers score communication, problem-solving, code quality, and judgment.\"\n      }\n    }\n  ]\n}\n<\/script><\/p>\n<div class=\"iq-related not-prose\"><div class=\"iq-related__title\">Related interview guides<\/div><div class=\"iq-related__grid\"><a class=\"iq-rel__card\" href=\"https:\/\/lastroundai.com\/interview-questions\/google-l4\"><span class=\"iq-rel__t\">Google L4 Interview Questions (2026): What They Actually Ask<\/span><span class=\"iq-rel__arrow\" aria-hidden=\"true\">&rarr;<\/span><\/a><a class=\"iq-rel__card\" href=\"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2\"><span class=\"iq-rel__t\">Amazon SDE-2 Interview Questions (2026): What They Actually Ask<\/span><span class=\"iq-rel__arrow\" aria-hidden=\"true\">&rarr;<\/span><\/a><a class=\"iq-rel__card\" href=\"https:\/\/lastroundai.com\/interview-questions\/apple\"><span class=\"iq-rel__t\">Apple Software Engineer Interview Questions (2026): What They Actually Ask<\/span><span class=\"iq-rel__arrow\" aria-hidden=\"true\">&rarr;<\/span><\/a><a class=\"iq-rel__card\" href=\"https:\/\/lastroundai.com\/interview-questions\/netflix\"><span class=\"iq-rel__t\">Netflix Interview Questions (2026): What Senior Engineers Actually Face<\/span><span class=\"iq-rel__arrow\" aria-hidden=\"true\">&rarr;<\/span><\/a><a class=\"iq-rel__card\" href=\"https:\/\/lastroundai.com\/interview-questions\/system-design\"><span class=\"iq-rel__t\">System Design Interview Questions (2026): Must-Know Q&#038;A<\/span><span class=\"iq-rel__arrow\" aria-hidden=\"true\">&rarr;<\/span><\/a><\/div><\/div>\n<div class=\"iq-sources not-prose\"><div class=\"iq-sources__title\">Sources &amp; further reading<\/div><ul class=\"iq-sources__list\"><li><a href=\"https:\/\/interviewing.io\/guides\/hiring-process\/meta-facebook\" target=\"_blank\" rel=\"nofollow noopener\">interviewing.io Meta Guide<\/a><\/li><li><a href=\"https:\/\/www.hellointerview.com\/guides\/meta\/e5\" target=\"_blank\" rel=\"nofollow noopener\">HelloInterview E5 Guide<\/a><\/li><li><a href=\"https:\/\/prepfully.com\/interview-guides\/meta-software-engineer\" target=\"_blank\" rel=\"nofollow noopener\">Prepfully Meta SWE Guide<\/a><\/li><li><a href=\"https:\/\/interviewing.io\/blog\/how-to-use-ai-in-meta-s-ai-assisted-coding-interview-with-real-prompts-and-examples\" target=\"_blank\" rel=\"nofollow noopener\">interviewing.io AI-Assisted Coding<\/a><\/li><li><a href=\"https:\/\/www.hellointerview.com\/blog\/meta-ai-enabled-coding\" target=\"_blank\" rel=\"nofollow noopener\">HelloInterview AI Round<\/a><\/li><li><a href=\"https:\/\/www.onsites.fyi\/blog\/article\/meta-e5-software-engineer-interview-questions\" target=\"_blank\" rel=\"nofollow noopener\">Onsites.fyi E5 Questions<\/a><\/li><li><a href=\"https:\/\/www.designgurus.io\/blog\/meta-system-design-interview-questions\" target=\"_blank\" rel=\"nofollow noopener\">DesignGurus Meta System Design<\/a><\/li><\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Somewhere around the second week of prep, most Meta candidates realize they&#8217;ve been doing the wrong kind of work. They&#8217;ve been grinding LeetCode hard problems when the actual coding rounds skew medium. They&#8217;ve been ignoring behavioral prep when the behavioral round, at E5, can decide whether you get the offer or get downleveled to E4&#8230;.<\/p>\n","protected":false},"author":5,"featured_media":1737,"comment_status":"open","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"tags":[],"class_list":["post-959","iq","type-iq","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Meta E5 Interview Questions (2026) | LastRoundAI<\/title>\n<meta name=\"description\" content=\"Real Meta E5 senior software engineer interview questions for 2026: coding, system design, AI-enabled round, and behavioral. Verified from candidate reports.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/lastroundai.com\/interview-questions\/meta-e5\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Meta E5 Interview Questions (2026) | LastRoundAI\" \/>\n<meta property=\"og:description\" content=\"Real Meta E5 senior software engineer interview questions for 2026: coding, system design, AI-enabled round, and behavioral. Verified from candidate reports.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/lastroundai.com\/interview-questions\/meta-e5\" \/>\n<meta property=\"og:site_name\" content=\"LastRound AI\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-19T05:24:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-meta-e5-og.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"25 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/meta-e5\",\"url\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/meta-e5\",\"name\":\"Meta E5 Interview Questions (2026) | LastRoundAI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/meta-e5#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/meta-e5#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/iq-meta-e5-og.png\",\"datePublished\":\"2026-06-23T09:12:52+00:00\",\"dateModified\":\"2026-07-19T05:24:09+00:00\",\"description\":\"Real Meta E5 senior software engineer interview questions for 2026: coding, system design, AI-enabled round, and behavioral. Verified from candidate reports.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/meta-e5#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/meta-e5\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/meta-e5#primaryimage\",\"url\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/iq-meta-e5-og.png\",\"contentUrl\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/iq-meta-e5-og.png\",\"width\":1200,\"height\":630,\"caption\":\"Meta E5 interview questions \u2014 LastRoundAI\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/meta-e5#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/lastroundai.com\\\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Interview Questions\",\"item\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Meta E5 Interview Questions (2026): What They Actually Ask\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/\",\"name\":\"LastRound AI\",\"description\":\"Interview Assistant prep, tech careers and AI tools\",\"publisher\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/#organization\",\"name\":\"LastRound AI\",\"url\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/lastroundai-transprant-logo-optimized-BxEo2Wtq.png\",\"contentUrl\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/lastroundai-transprant-logo-optimized-BxEo2Wtq.png\",\"width\":400,\"height\":400,\"caption\":\"LastRound AI\"},\"image\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Meta E5 Interview Questions (2026) | LastRoundAI","description":"Real Meta E5 senior software engineer interview questions for 2026: coding, system design, AI-enabled round, and behavioral. Verified from candidate reports.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/lastroundai.com\/interview-questions\/meta-e5","og_locale":"en_US","og_type":"article","og_title":"Meta E5 Interview Questions (2026) | LastRoundAI","og_description":"Real Meta E5 senior software engineer interview questions for 2026: coding, system design, AI-enabled round, and behavioral. Verified from candidate reports.","og_url":"https:\/\/lastroundai.com\/interview-questions\/meta-e5","og_site_name":"LastRound AI","article_modified_time":"2026-07-19T05:24:09+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-meta-e5-og.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"25 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/lastroundai.com\/interview-questions\/meta-e5","url":"https:\/\/lastroundai.com\/interview-questions\/meta-e5","name":"Meta E5 Interview Questions (2026) | LastRoundAI","isPartOf":{"@id":"https:\/\/lastroundai.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/lastroundai.com\/interview-questions\/meta-e5#primaryimage"},"image":{"@id":"https:\/\/lastroundai.com\/interview-questions\/meta-e5#primaryimage"},"thumbnailUrl":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-meta-e5-og.png","datePublished":"2026-06-23T09:12:52+00:00","dateModified":"2026-07-19T05:24:09+00:00","description":"Real Meta E5 senior software engineer interview questions for 2026: coding, system design, AI-enabled round, and behavioral. Verified from candidate reports.","breadcrumb":{"@id":"https:\/\/lastroundai.com\/interview-questions\/meta-e5#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/lastroundai.com\/interview-questions\/meta-e5"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lastroundai.com\/interview-questions\/meta-e5#primaryimage","url":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-meta-e5-og.png","contentUrl":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-meta-e5-og.png","width":1200,"height":630,"caption":"Meta E5 interview questions \u2014 LastRoundAI"},{"@type":"BreadcrumbList","@id":"https:\/\/lastroundai.com\/interview-questions\/meta-e5#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/lastroundai.com\/blog"},{"@type":"ListItem","position":2,"name":"Interview Questions","item":"https:\/\/lastroundai.com\/interview-questions"},{"@type":"ListItem","position":3,"name":"Meta E5 Interview Questions (2026): What They Actually Ask"}]},{"@type":"WebSite","@id":"https:\/\/lastroundai.com\/blog\/#website","url":"https:\/\/lastroundai.com\/blog\/","name":"LastRound AI","description":"Interview Assistant prep, tech careers and AI tools","publisher":{"@id":"https:\/\/lastroundai.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/lastroundai.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/lastroundai.com\/blog\/#organization","name":"LastRound AI","url":"https:\/\/lastroundai.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lastroundai.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/06\/lastroundai-transprant-logo-optimized-BxEo2Wtq.png","contentUrl":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/06\/lastroundai-transprant-logo-optimized-BxEo2Wtq.png","width":400,"height":400,"caption":"LastRound AI"},"image":{"@id":"https:\/\/lastroundai.com\/blog\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/iq\/959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/iq"}],"about":[{"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/types\/iq"}],"author":[{"embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/comments?post=959"}],"version-history":[{"count":4,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/iq\/959\/revisions"}],"predecessor-version":[{"id":1836,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/iq\/959\/revisions\/1836"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/media\/1737"}],"wp:attachment":[{"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/media?parent=959"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/tags?post=959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}