{"id":954,"date":"2026-06-23T09:13:33","date_gmt":"2026-06-23T09:13:33","guid":{"rendered":"https:\/\/lastroundai.com\/blog\/?post_type=iq&#038;p=954"},"modified":"2026-07-19T09:23:30","modified_gmt":"2026-07-19T03:53:30","slug":"amazon-sde-2","status":"publish","type":"iq","link":"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2","title":{"rendered":"Amazon SDE-2 Interview Questions (2026): What They Actually Ask"},"content":{"rendered":"<p>Something about the Amazon SDE-2 loop surprises almost every engineer who goes through it for the first time: the behavioral questions feel like half the interview. They are, by design. Amazon&#8217;s official SDE-II interview prep page says each of your four or five onsite rounds will evaluate Leadership Principles alongside the technical work, and at least one round, the Bar Raiser, is run by someone from a completely different team whose job is to raise the quality bar, not fill a headcount slot. Getting the coding right is necessary. It is not sufficient.<\/p>\n<p>This page covers what the Amazon SDE-2 loop actually looks like in 2026, based on verified candidate reports from Glassdoor, LeetCode discuss threads, Medium write-ups, Onsites.fyi, and Amazon&#8217;s own published interview prep guidance. Where I know a question is from a specific round, I&#8217;ve said so. Where something varies by team, I&#8217;ve said that too. The 16 Leadership Principles section is long on purpose. It needs to be.<\/p>\n<div class=\"iq-stats not-prose\"><div class=\"iq-stat\"><span class=\"iq-stat__value\">4-8 weeks<\/span><span class=\"iq-stat__label\">Process<\/span><\/div><div class=\"iq-stat\"><span class=\"iq-stat__value\">5-6<\/span><span class=\"iq-stat__label\">Rounds<\/span><\/div><div class=\"iq-stat\"><span class=\"iq-stat__value\">LC Medium-Hard<\/span><span class=\"iq-stat__label\">Coding<\/span><\/div><div class=\"iq-stat\"><span class=\"iq-stat__value\">Virtual onsite + OA<\/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\">Tell me about a recent technical concept or technology you learned about on your own initiative. Why, and what came of it?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Learn and Be Curious<\/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>The details matter more than the topic. &#8220;I read about Rust&#8221; is not an answer. &#8220;I spent three weekends building a small service in Rust to understand the ownership model before we decided whether to migrate our low-level data serialization layer to it, and the outcome was that I concluded the borrow checker friction wasn&#8217;t worth the memory safety gain for our use case, so I wrote a short doc explaining why we were keeping C++&#8221; is an answer.<\/p>\n<p>The Bar Raiser version follows up: &#8220;What specifically surprised you? What was the hardest concept to get right?&#8221; If you can answer those questions with technical specificity, the story is credible. If you can&#8217;t, the interviewer will assume you padded the 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\">How long does the Amazon SDE-2 interview process take from application to offer?<\/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 four to eight weeks from application to verbal offer. The OA is typically sent within a week of the recruiter call and given a one-week completion window. Onsite loops are scheduled one to three weeks after the OA clears. Amazon&#8217;s official guidance is a decision within five business days of the loop; in practice, candidates report one to two weeks, particularly when the hiring team needs to confirm headcount or when the Bar Raiser needs additional time to complete their debrief.<\/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 a Bar Raiser and what do they actually do in the 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>The Bar Raiser is a specially trained Amazon interviewer from a different team than the one you&#8217;re applying to. They are not evaluating fit for the specific role; they are evaluating whether you would raise the overall quality of Amazon&#8217;s engineering workforce. Their no-hire vote is a veto that cannot be overridden by the hiring manager without VP-level escalation, which almost never happens. The Bar Raiser&#8217;s round can look like any other round, coding, design, or LP-focused, but with deeper follow-up probing. They are typically more thorough on LP stories than the other interviewers and more likely to surface inconsistencies between your claims and the details you provide.<\/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 many Leadership Principle questions should I expect per 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>Each interviewer is assigned two to three LPs to evaluate in their round. They&#8217;ll typically ask two behavioral questions per round, each targeting one or two LPs. Over a five-round loop, you&#8217;ll face roughly ten to fifteen LP-focused questions in total. The same LP can appear in multiple rounds if the interviewers have overlapping assignments, so prepare stories flexible enough to vary based on the follow-up direction rather than memorizing a single answer per LP.<\/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 Amazon care which programming language I use for the coding rounds?<\/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>Amazon accepts most mainstream languages: Java, Python, C++, JavaScript, Go. Java is the most common choice among candidates and what most interviewers are fluent in for code review. Python is also well-accepted. The OA requires syntactically correct code (the HackerRank environment compiles it), so you need to be fluent enough to write error-free code under time pressure, not just pseudocode. Some interviewers may ask you to avoid certain built-in library functions and implement core logic yourself, especially for data structure questions.<\/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 SDE-2 level at Amazon, and how does it compare to other companies?<\/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>SDE-2 is Amazon&#8217;s L5 level, the mid-level software engineer tier. It maps roughly to L4 at Google, E4 at Meta, and SDE-II at Microsoft. Levels.fyi data from 2025 shows median total compensation for Amazon SDE-2 at approximately $274,000 per year, with the bulk of that in RSUs. SDE-2 is the most active hiring level at Amazon and the bar where the LP evaluation is most consequential, because L5 engineers are expected to operate with significant ownership and cross-team scope, not just execute on assigned tasks.<\/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\">Is system design really required for SDE-2, or is it just for senior roles?<\/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>System design is a standard part of the SDE-2 (L5) loop. Most loops include one LLD round and one HLD round, though some teams combine them into a single 90-minute session or include a hybrid design component in the hiring manager round. If your loop only has four rounds, one of them is almost certainly a design round. For context, the L4 (SDE-1) loop typically does not include a dedicated HLD round; that&#8217;s one of the key differentiators between the two levels.<\/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&#039;s the best way to structure a STAR answer for Amazon&#039;s Bar Raiser 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>Situation and Task together should take no more than 20-30 seconds, just enough context for the interviewer to follow the stakes. Action is where most of your time goes, and it needs to be specific to what you personally did, not what your team did, including the technical or interpersonal choices you made and why you made them. Result needs a number or a concrete outcome, not &#8220;it went well.&#8221; The mistake candidates make under Bar Raiser pressure is spending too long on Situation because it feels safer to talk about, then rushing Action, which is exactly the part the interviewer is 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\">What does the Work Style Survey section of the Amazon OA actually ask?<\/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>The eight-minute Work Style Survey presents short behavioral scenarios and asks you to rank a set of responses from most to least like how you&#8217;d actually act, closer in format to a personality assessment than an open-ended written question. It maps your rankings against the 16 Leadership Principles. Candidates report there&#8217;s no obvious single correct answer key, the scoring appears to look for consistency with the LPs across scenarios rather than one ideal response. It doesn&#8217;t gate you out on its own the way failing the coding section can, but recruiters have noted that a wildly inconsistent survey, answers that contradict each other on similar scenarios, can raise a flag during the debrief.<\/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\">Compare two hashmaps representing product title lists and identify additions, removals, or position changes<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">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>Build a frequency map for each list, then iterate through both maps. A key present in map A but absent from map B is a removal. A key present in map B but absent from map A is an addition. A key present in both but at a different index position is a relocation. For large-scale batch processing follow-ups, this extends naturally to streaming input with delta updates rather than full recomputes.<\/p>\n<p>This exact question was reported from a 2025 Amazon SDE-2 onsite round, Round 3 in the candidate&#8217;s loop, with Customer Obsession and Ownership as the LPs evaluated. The interviewer emphasized the scalability angle: how does your solution behave when the product catalog is 50 million entries and the diff needs to run continuously? The expected answer introduces a streaming approach with event-based updates rather than full recomputation.<\/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\">Coin change variant with constraints on valid coin counts<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Dynamic Programming<\/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>Standard coin change DP (bottom-up, dp[i] = minimum coins to make amount i) extended with an additional constraint on how many coins of each denomination can be used. The 1D DP table needs an extra dimension or a count-tracking pass to enforce per-denomination limits. Without the constraint, it&#8217;s a classic unbounded knapsack. With it, the state becomes dp[amount][denomination_index], treated as a 0-1 knapsack per denomination.<\/p>\n<p>Reported from a Bar Raiser round in 2025. The interviewer introduced the per-denomination count limit as a follow-up mid-problem, after the candidate had already implemented the basic version. Being able to extend a working DP without rewriting it from scratch is what the interviewer was testing, not whether you could recite the standard coin change solution.<\/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 coin_change_limited(coins, counts, amount):\n\n    # coins[i] can be used at most counts[i] times\n\n    dp = [float(\u2018inf\u2019)] * (amount + 1)\n\n    dp[0] = 0\n    for i, coin in enumerate(coins):\n\n        # iterate in reverse to enforce use-at-most-once per pass\n\n        for _ in range(counts[i]):\n\n            for a in range(amount, coin \u2013 1, -1):\n\n                if dp[a \u2013 coin] != float(\u2018inf\u2019):\n\n                    dp[a] = min(dp[a], dp[a \u2013 coin] + 1)\n    return dp[amount] if dp[amount] != float(\u2018inf\u2019) else -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\">Longest consecutive sequence in an unsorted array<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">HashSet<\/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>Load all elements into a hash set. Iterate through the array and for each element, check if it is the start of a sequence (i.e., element &#8211; 1 is not in the set). If it is the start, count the sequence length by repeatedly checking element + 1, element + 2, and so on. Track the maximum length seen. O(n) time because each element is visited at most twice.<\/p>\n<p>Reported from SDE-2 phone screens at Amazon in 2024-2025. The sorting approach is O(n log n) and technically correct but interviewers push for the O(n) set-based solution at mid-level. The follow-up asks what happens if the array contains duplicates: the hash set handles this automatically since set membership is duplicate-agnostic.<\/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\">Serialize and deserialize an N-ary tree<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Tree \/ 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-based serialization. Write each node&#8217;s value followed by the count of its children, then its children&#8217;s values in the same format. This lets the deserializer know exactly how many children to expect at each node without a delimiter. Alternatively, DFS with an explicit child-count marker works and is slightly simpler to implement recursively.<\/p>\n<p>Reported from a 2025 SDE-2 onsite, Round 2, with a follow-up asking for O(1) time for dynamic node additions and removals after the serialization is built. The O(1) dynamic update requirement changes the approach: instead of rebuilding the serialized string, maintain a doubly linked list of nodes at each level so insertions and deletions update only the affected position in O(1) time.<\/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\">Implement a rate limiter using the token bucket algorithm<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Concurrency \/ 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>The token bucket maintains a counter of available tokens, a max capacity, and a refill rate (tokens per second). On each request, check if at least one token is available. If yes, decrement and allow. If no, reject or queue. Refill tokens based on elapsed time since the last refill, capped at capacity. Thread safety requires either a mutex around the token check-and-decrement or an atomic compare-and-swap loop.<\/p>\n<p>Amazon&#8217;s API Gateway uses token bucket rate limiting internally, which makes this question particularly relevant for Amazon infrastructure teams. The interviewer typically asks you to compare token bucket vs. leaky bucket vs. fixed window vs. sliding window rate limiting, each has different burst behavior. Token bucket allows short bursts up to capacity; leaky bucket enforces a smooth outflow rate; fixed window can allow 2x the rate at window boundaries; sliding window is more accurate but computationally heavier.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">java<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-java\">\n\nimport java.util.concurrent.atomic.AtomicLong;\npublic class TokenBucketRateLimiter {\n\n    private final long capacity;\n\n    private final double refillRatePerMs;\n\n    private final AtomicLong tokens;\n\n    private volatile long lastRefillTime;\n    public TokenBucketRateLimiter(long capacity, long refillRatePerSecond) {\n\n        this.capacity = capacity;\n\n        this.refillRatePerMs = refillRatePerSecond \/ 1000.0;\n\n        this.tokens = new AtomicLong(capacity);\n\n        this.lastRefillTime = System.currentTimeMillis();\n\n    }\n    public synchronized boolean tryAcquire() {\n\n        refill();\n\n        if (tokens.get() &gt; 0) {\n\n            tokens.decrementAndGet();\n\n            return true;\n\n        }\n\n        return false;\n\n    }\n    private void refill() {\n\n        long now = System.currentTimeMillis();\n\n        long elapsed = now \u2013 lastRefillTime;\n\n        long newTokens = (long) (elapsed * refillRatePerMs);\n\n        if (newTokens &gt; 0) {\n\n            tokens.set(Math.min(capacity, tokens.get() + newTokens));\n\n            lastRefillTime = now;\n\n        }\n\n    }\n\n}\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\">Count the number of islands in a 2D grid of land and water cells<\/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>Scan every cell. When you hit an unvisited land cell, run a DFS or BFS that flips every connected land cell to visited and expands in all four directions. Each DFS call accounts for exactly one island, so the island counter only increments at the point a new, unvisited land cell is discovered. Time complexity is O(rows &times; cols) since every cell is visited once.<\/p>\n<p>This is one of the most frequently reported Amazon SDE-2 phone screen questions across 2024 and 2025 loop write-ups on Glassdoor and LeetCode Discuss. The follow-up interviewers ask most often: what if the grid isn&#8217;t static but a live stream of cell updates? That changes the approach to a Union-Find structure with incremental union operations on each update, rather than a full grid rescan per change.<\/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 num_islands(grid):\n\n    if not grid:\n\n        return 0\n\n    rows, cols = len(grid), len(grid[0])\n\n    visited = [[False] * cols for _ in range(rows)]\n    def dfs(r, c):\n\n        if r &lt; 0 or r &gt;= rows or c &lt; 0 or c &gt;= cols:\n\n            return\n\n        if visited[r][c] or grid[r][c] == \u201c0\u201d:\n\n            return\n\n        visited[r][c] = True\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    count = 0\n\n    for r in range(rows):\n\n        for c in range(cols):\n\n            if grid[r][c] == \u201c1\u201d and not visited[r][c]:\n\n                dfs(r, c)\n\n                count += 1\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\">Determine whether all courses can be finished given a list of prerequisite pairs<\/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 the in-degree of every course. Run Kahn&#8217;s algorithm: push every course with in-degree zero onto a queue, pop a course, decrement the in-degree of its dependents, and push any dependent whose in-degree drops to zero. If every course gets processed, there&#8217;s no cycle and the courses can all be finished. If some courses never enter the queue, a cycle exists among them.<\/p>\n<p>Amazon interviewers frame this as a build-dependency problem more often than the textbook version, something like &#8220;package A depends on package B, detect a circular build dependency before it breaks the release pipeline.&#8221; That framing matches Amazon&#8217;s actual internal build tooling. The standard follow-up asks you to also return a valid build order, not just a true\/false answer, which the same queue naturally produces if you record the pop order.<\/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\ndef can_finish(num_courses, prerequisites):\n\n    graph = [[] for _ in range(num_courses)]\n\n    in_degree = [0] * num_courses\n\n    for course, prereq in prerequisites:\n\n        graph[prereq].append(course)\n\n        in_degree[course] += 1\n    queue = deque(c for c in range(num_courses) if in_degree[c] == 0)\n\n    visited = 0\n    while queue:\n\n        node = queue.popleft()\n\n        visited += 1\n\n        for neighbor in graph[node]:\n\n            in_degree[neighbor] -= 1\n\n            if in_degree[neighbor] == 0:\n\n                queue.append(neighbor)\n    return visited == num_courses\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\">Tree \/ 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 from the root. If the current node is one of the two targets, return it immediately. Otherwise recurse into the left and right subtrees. If both recursive calls return a non-null node, the current node is the lowest common ancestor, since one target was found on each side. If only one side returns non-null, propagate that result up, since the ancestor must be further up that branch.<\/p>\n<p>Reported repeatedly in Amazon SDE-2 phone screens, usually as the second, easier problem after a harder opener. The two follow-ups worth preparing: what changes if each node has a parent pointer instead of the tree being passed in (it becomes a linked-list intersection problem, not a tree traversal one), and what happens if one of the two target nodes might not exist in the tree at all (you need a separate existence check before trusting the LCA result).<\/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 and implement a Least Recently Used (LRU) cache with O(1) get and put<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Design \/ 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>Combine a hash map for O(1) lookup with a doubly linked list for O(1) reordering. On every get, move the accessed node to the front of the list, since it&#8217;s now the most recently used. On every put, insert a new node at the front; if the cache exceeds capacity, evict the node at the tail, since that&#8217;s the least recently used, and remove its key from the hash map.<\/p>\n<p>This is one of Amazon&#8217;s most consistently reported SDE-2 coding questions across multiple years of loop write-ups, more so than at most other Big Tech companies. In 2025 loops it&#8217;s shown up both as a standalone coding round and as the opening 15 minutes of a Bar Raiser&#8217;s hybrid round before pivoting into Leadership Principles questions. The follow-up almost always asks how you&#8217;d make the cache thread-safe under concurrent get and put calls from multiple threads.<\/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 Node:\n\n    def __init__(self, key, value):\n\n        self.key = key\n\n        self.value = value\n\n        self.prev = None\n\n        self.next = None\nclass LRUCache:\n\n    def __init__(self, capacity):\n\n        self.capacity = capacity\n\n        self.cache = {}\n\n        self.head = Node(0, 0)\n\n        self.tail = Node(0, 0)\n\n        self.head.next = self.tail\n\n        self.tail.prev = self.head\n    def _remove(self, node):\n\n        node.prev.next = node.next\n\n        node.next.prev = node.prev\n    def _add_to_front(self, node):\n\n        node.next = self.head.next\n\n        node.prev = self.head\n\n        self.head.next.prev = node\n\n        self.head.next = node\n    def get(self, key):\n\n        if key not in self.cache:\n\n            return -1\n\n        node = self.cache[key]\n\n        self._remove(node)\n\n        self._add_to_front(node)\n\n        return node.value\n    def put(self, key, value):\n\n        if key in self.cache:\n\n            self._remove(self.cache[key])\n\n        node = Node(key, value)\n\n        self.cache[key] = node\n\n        self._add_to_front(node)\n\n        if len(self.cache) &gt; self.capacity:\n\n            lru = self.tail.prev\n\n            self._remove(lru)\n\n            del self.cache[lru.key]\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\">Given a list of meeting time intervals, find the minimum number of conference rooms required<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Heap \/ 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 meetings by start time. Keep a min-heap of end times representing rooms currently in use. For each meeting, check the smallest end time on the heap: if it&#8217;s less than or equal to the current meeting&#8217;s start time, that room has freed up, so pop it and push the new end time in its place. If not, no room is free, so push the new end time without popping, which allocates a new room. The final heap size is the answer.<\/p>\n<p>Reported from Amazon SDE-2 onsite loops tied to internal scheduling systems, conference-room booking and warehouse shift scheduling are the two framings candidates mention most. The follow-up worth preparing: what if meetings can be canceled after being scheduled? That breaks the simple min-heap approach and pushes toward an interval tree or a heap with lazy deletion instead.<\/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\nimport heapq\ndef min_meeting_rooms(intervals):\n\n    if not intervals:\n\n        return 0\n\n    intervals.sort(key=lambda x: x[0])\n\n    end_times = [intervals[0][1]]\n    for start, end in intervals[1:]:\n\n        if start &gt;= end_times[0]:\n\n            heapq.heapreplace(end_times, end)\n\n        else:\n\n            heapq.heappush(end_times, end)\n    return len(end_times)\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 length of the longest strictly increasing subsequence in an array<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Dynamic Programming<\/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(n^2) version defines dp[i] as the length of the longest increasing subsequence ending at index i, computed as 1 plus the max of dp[j] for every j less than i where nums[j] is less than nums[i]. The O(n log n) version keeps a &#8220;tails&#8221; array, where tails[k] holds the smallest possible tail value of an increasing subsequence of length k+1, and uses binary search to find where each new number belongs.<\/p>\n<p>Reported from SDE-2 phone screens where interviewers ask for the O(n^2) DP solution first and then push for the O(n log n) optimization as a mid-interview follow-up, the same escalation pattern seen on the coin-change question earlier on this page. Being able to walk from the straightforward DP to the binary-search optimization without starting over is what separates a pass from a borderline result at this 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\nimport bisect\ndef length_of_lis(nums):\n\n    tails = []\n\n    for num in nums:\n\n        pos = bisect.bisect_left(tails, num)\n\n        if pos == len(tails):\n\n            tails.append(num)\n\n        else:\n\n            tails[pos] = num\n\n    return len(tails)\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\">Tell me about a time you made a decision that was unpopular with your team but that you believed was right for the customer.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Customer Obsession<\/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>Amazon&#8217;s first and most prominent LP. The question is testing whether your customer-focus holds when it&#8217;s inconvenient. A strong answer identifies a specific customer impact (degraded latency, confusing UX, data quality issue), the internal pushback you faced (deadline pressure, technical debt concerns, stakeholder resistance), what you did anyway, and the measured result. Vague answers (&#8220;I always keep the customer in mind&#8221;) fail immediately.<\/p>\n<p>At SDE-2 level, the expected story involves a system-level decision, not a feature request. Something like: you delayed a release because monitoring showed an edge case that would affect 0.1% of customers with a specific usage pattern, the PM pushed to ship anyway, you held the release, and the post-hoc data confirmed the edge case would have triggered. That&#8217;s the granularity Amazon interviewers want.<\/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 worked backwards from the customer to define a technical requirement.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Customer Obsession<\/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>&#8220;Working backwards&#8221; is an Amazon-specific phrase that refers to their product development methodology: write the press release and FAQ before writing any code. Even if you didn&#8217;t use that format exactly, frame your answer around how customer feedback or behavior data drove a technical decision. Specific metrics help: &#8220;our error rate for this cohort was 2.3%, which translated to roughly 40,000 customers per week seeing a failure&#8221; is better than &#8220;customers were unhappy.&#8221;<\/p>\n<p>The follow-up is almost always: &#8220;How did you validate that your solution actually addressed the customer problem, not just the metric you were tracking?&#8221; Have a measurement story ready for how you confirmed the fix worked.<\/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 took on something significant outside your core responsibilities because you saw it needed to be done.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Ownership<\/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 LP that gets candidates rejected most often when their answer is too small. &#8220;I helped a teammate debug an issue&#8221; is not the answer Amazon is looking for at SDE-2. The expected story involves taking ownership of an operational problem, a technical debt item, or a cross-team dependency that nobody was explicitly responsible for, seeing it through to resolution, and having a measurable outcome. On-call improvements, reliability work that wasn&#8217;t in anyone&#8217;s sprint, tooling built for the whole team, these are the right categories.<\/p>\n<p>The follow-up probes whether you saw the thing through: &#8220;Did anything go wrong during the remediation? How did you handle it?&#8221; A story where everything went smoothly is less credible than one that includes a complication and how you resolved 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\">Describe a project you owned from inception to production deployment.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Ownership<\/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 SDE-2 level, &#8220;owned&#8221; means you designed it, wrote the design document, got buy-in from stakeholders, implemented it or led the implementation, and monitored it post-launch. Stories where ownership is ambiguous, &#8220;I led part of it&#8221; or &#8220;I was the main contributor,&#8221; get drilled. The interviewer will ask specific questions until they understand exactly what you were responsible for vs. what your team owned collectively.<\/p>\n<p>Prepare the technical details of the design, not just the narrative. &#8220;I used a message queue to decouple the ingestion from the processing layer&#8221; is better than &#8220;I built a scalable architecture.&#8221; At some point in your answer, the interviewer will stop the story and ask a technical question about a choice you made.<\/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 simplified a complex system or process.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Invent and Simplify<\/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>Simplification is harder to demonstrate than complexity. The best answers involve removing something (a service, a configuration option, an abstraction layer, a deployment step) that others believed was necessary, showing the data that justified removing it, and measuring the improvement. Adding more components or features is not simplification, even if the outcome is a better system.<\/p>\n<p>The follow-up is often: &#8220;Was there any resistance to removing the component? How did you convince the team?&#8221; This brings in Earn Trust and Have Backbone simultaneously. Prepare for those follow-ups.<\/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\">Give an example of an innovative solution you developed that was adopted more broadly than your original scope.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Invent and Simplify<\/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>Adoption breadth signals that the solution was genuinely better, not just a local optimization. If you built a tool for your team and three other teams started using it, that&#8217;s the pattern Amazon wants to see. Be specific about how the broader adoption happened (did you demo it? write documentation? other teams discovered it through a shared repo?) and what the impact was at the wider scale.<\/p>\n<p>At SDE-2 level, the expected scope is intra-org adoption, not company-wide. A solution that went from your team to two adjacent teams with measurable impact on both is a strong answer. Company-wide adoption stories are more appropriate for senior and principal levels.<\/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\">Walk me through debugging a critical production incident.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Dive Deep<\/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>Structure: what you observed first (alert, customer report, metric spike), how you formed and tested hypotheses (not &#8220;I started looking at logs&#8221; but &#8220;I checked the error rate by service, isolated it to the payment-service dependency, then pulled CloudWatch logs for that service and found a 40% increase in timeout errors starting at 14:32 UTC&#8221;), what the root cause was, how you confirmed it, what the fix was, and what you changed to prevent recurrence.<\/p>\n<p>This is the canonical Dive Deep question. The Bar Raiser version goes much deeper: they&#8217;ll ask about specific log lines, what the second hypothesis was when the first didn&#8217;t pan out, how you communicated status during the incident, and what the postmortem recommended. Prepare one production incident story in this level of detail. Most candidates prepare the high-level arc but not the specific technical detail, and the Bar Raiser will find the gap in the first 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\">Describe a time you went against the conventional wisdom in your team to get to a better technical answer.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Dive Deep \/ Are Right A Lot<\/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>Dive Deep and Are Right A Lot overlap heavily here. The story needs three components: what the conventional belief was and why it existed, what you investigated that changed your assessment, and what the outcome was. If the conventional wisdom turned out to be right and you changed your mind, that&#8217;s also a valid answer, it shows intellectual honesty and the ability to update on new data, which Amazon values as part of Are Right A Lot.<\/p>\n<p>The failure mode on this question is being vague about the investigation. &#8220;I did some analysis and found the approach was wrong&#8221; is not a Dive Deep answer. The analysis has to be specific: I profiled the query, I reviewed the access pattern logs, I benchmarked three approaches, I found that the existing solution was O(n^2) on inputs over 10,000 rows where we were getting 500,000 rows per batch. That level of specificity.<\/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 a decision, lost the argument, and had to commit to it anyway.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Have Backbone, Disagree and Commit<\/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 LP is specifically about what happens after you lose the argument. Amazon doesn&#8217;t want a story where you quietly complied the whole time (that isn&#8217;t disagreeing) or one where you kept re-litigating the decision after it was made (that isn&#8217;t committing). The strong version shows you stating your position once, clearly, with evidence, and then, once the decision went the other way, executing it as if it had been your own idea, including defending it to teammates who raised the same objection you originally had.<\/p>\n<p>Reported as a standalone follow-up in Bar Raiser rounds even when a candidate&#8217;s opening story already touched on disagreement, because interviewers want a second, cleaner example that isn&#8217;t tangled up with the Earn Trust angle of an earlier answer. Keep a separate story ready for this one.<\/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 shipped something despite incomplete information or ambiguous requirements.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Bias for Action<\/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>Amazon wants to see that you can scope a reversible decision and move quickly, not that you ignore risk. The answer structure should clarify what made the information incomplete (product requirements were still being finalized, third-party API behavior was uncertain, load testing data wasn&#8217;t available yet), what you identified as reversible vs. irreversible, and how you moved forward with the reversible parts while deferring the irreversible ones.<\/p>\n<p>At SDE-2, the expected story involves a system-level ambiguity, not just a missing feature spec. Ambiguity about data consistency semantics, SLA targets, or integration contract details are common scenarios.<\/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 a fast, reversible decision you made turned out to be wrong. What did you do next?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Bias for Action<\/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>Amazon&#8217;s own framing for Bias for Action leans on the &#8220;two-way door&#8221; idea: most decisions are reversible and should be made quickly with roughly 70% of the information you wish you had, not 90%. This question tests whether you can tell a two-way door from a one-way one, and whether you corrected course quickly once the signal showed up, rather than defending the original call.<\/p>\n<p>A credible answer includes an actual negative outcome, not a near-miss you caught before anyone noticed. Something like: you shipped a config change without a full load test because the risk looked low and reversible, it caused a brief latency regression for a slice of traffic, you rolled it back within the hour, and afterward you added a lighter-weight canary step for that class of change. That last part, what changed in your process going forward, is what separates this from a story that just admits a mistake and stops there.<\/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 received critical feedback that was hard to hear. How did you respond?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Earn Trust<\/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>Candidates who say &#8220;I always welcome feedback&#8221; without a real example get pushed immediately. Amazon wants a specific story where the feedback stung, where your first instinct was probably defensive, and where you processed it, sought to understand it, and changed your behavior as a result. The behavior change is the key part. Interviewers follow up: &#8220;Did you act on it? What specifically did you change? How do you know it worked?&#8221;<\/p>\n<p>If you can also name what the feedback giver observed (specific behavior, specific code, specific incident) rather than describing vague criticism, the story reads as far more credible. &#8220;My tech lead told me my design docs were not getting enough cross-team buy-in before implementation started&#8221; is better than &#8220;I got feedback that I needed to communicate better.&#8221;<\/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 a significant disagreement with a manager or senior stakeholder. How did you handle it?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Earn Trust \/ Have Backbone, Disagree and Commit<\/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 question probes two LPs at once. Earn Trust asks whether you handled the disagreement in a way that preserved the relationship and used data to support your position. Have Backbone asks whether you actually pushed back or just deferred. The strongest answers show you raised the concern with specific evidence, had a direct conversation, and either convinced the stakeholder with data or genuinely heard their reasoning and updated your position, not just backed down because of seniority.<\/p>\n<p>The outcome should not always go your way. An answer where you pushed back, provided evidence, the decision went against you, and you then committed fully to the decision and made it succeed is a strong Have Backbone story. Amazon interviewers specifically watch for candidates who say &#8220;Disagree and Commit&#8221; and whose story doesn&#8217;t actually include disagreeing, only committing.<\/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 raised the quality bar on your team in a specific, measurable way.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Insist on Highest Standards<\/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>Concrete examples: introduced integration tests for a system that had none, raised code review standards by establishing a review checklist, identified a class of latency regressions by adding P99 alerting that didn&#8217;t previously exist. The key is that the standard was raised in a way that outlasted your individual involvement. If you left the team tomorrow, would the standard persist? If yes, the story is strong. If it only existed because you personally reviewed every PR, it&#8217;s weaker.<\/p>\n<p>At SDE-2, interviewers also want to see that you brought the team along rather than creating friction. A higher standard imposed unilaterally without buy-in creates resentment. The best stories include how you socialized the change, got teammates to agree it was worth the investment, and observed the improvement in outcome metrics.<\/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 proposed a solution with a bigger scope than what your manager or team initially asked for.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Think Big<\/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>Think Big is about not settling for a fix that clears today&#8217;s ticket but creates drag next quarter. A strong answer names the narrow ask, explains what made you widen the scope (a pattern you noticed across multiple tickets, a platform gap you knew others would hit soon), and shows the extra cost of building bigger instead of narrower was a deliberate tradeoff, not just enthusiasm for a more interesting problem.<\/p>\n<p>The failure mode at SDE-2 is a story that reads as scope creep rather than Think Big. Interviewers probe: did your manager push back on the bigger scope, and how did you get buy-in before you built it? Have that negotiation ready, not just the technical 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\">Describe a time you delivered results with fewer resources than the project seemed to call for.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Frugality<\/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>Frugality at Amazon isn&#8217;t about being cheap for its own sake, it&#8217;s resourcefulness under a real constraint. Good answers name the constraint honestly (headcount got cut mid-project, a budget request for a third-party service was rejected, there wasn&#8217;t time to build the &#8220;proper&#8221; version), the tradeoff made instead (reusing an existing internal tool instead of standing up new infrastructure, running a smaller pilot before requesting a bigger allocation), and the result.<\/p>\n<p>Interviewers watch for candidates who confuse Frugality with under-resourcing a project that genuinely needed more. If the constrained approach caused a real quality problem down the line, say so, and explain what you&#8217;d request differently next time. That honesty reads better than a story with no downside at all.<\/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 helped a struggling teammate or mentored a more junior engineer.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Hire and Develop the Best<\/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>Amazon evaluates this LP even for individual contributors, not just people managers, because SDE-2s are expected to raise the level of the people around them. The strongest stories name a specific gap (a junior engineer who kept shipping code with no tests, someone struggling with an unfamiliar part of the codebase), describe what you actually did (pairing sessions, a written onboarding guide, structured code review feedback over several weeks), and end with a measurable change in that person&#8217;s output or confidence.<\/p>\n<p>A story where you quietly did their work for them to hit a deadline is a red flag here, not a positive signal. The interviewer wants evidence that you built the other person&#8217;s capability, not that you rescued a deliverable. Expect a follow-up on what you&#8217;d do differently if a similar situation came up again.<\/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 hit a significant obstacle mid-project and still delivered on schedule.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Deliver Results<\/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 obstacle has to be genuine, not a minor setback. A third-party API going down, a key engineer leaving mid-project, a scope change from senior leadership, a production incident consuming half your team&#8217;s bandwidth for a week. The story should show how you assessed the impact on the project, what you cut or rescheduled, how you communicated the situation to stakeholders, and how you ultimately delivered. &#8220;Delivered on schedule&#8221; can also mean &#8220;renegotiated the schedule with stakeholder agreement based on the new constraint,&#8221; which is actually a mature answer.<\/p>\n<p>The follow-up probes whether the delivery was a net win: &#8220;Did cutting that scope cause any downstream problems?&#8221; Prepare a real answer.<\/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\">4<\/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 containing all characters of a pattern<\/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-pointer sliding window with a character frequency map. Build a need map for pattern characters. Expand the right pointer until all characters are satisfied, then contract the left pointer to minimize the window. Track the minimum window seen so far. Time complexity O(n + m) where n is the string length and m is the pattern length.<\/p>\n<p>Reported in multiple SDE-2 phone screens from 2024 and 2025. The follow-up almost always asks about the case where the pattern has repeated characters, which requires a count-based check (how many of each character are satisfied) rather than a simple set membership check. Candidates who implement the set-based version get caught on this immediately.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">java<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-java\">\n\npublic String minWindow(String s, String t) {\n\n    Map&lt;Character, Integer&gt; need = new HashMap&lt;&gt;();\n\n    for (char c : t.toCharArray()) need.merge(c, 1, Integer::sum);\n    int left = 0, right = 0, formed = 0, required = need.size();\n\n    int[] ans = {-1, 0, 0}; \/\/ length, left, right\n    Map&lt;Character, Integer&gt; window = new HashMap&lt;&gt;();\n    while (right &lt; s.length()) {\n\n        char c = s.charAt(right++);\n\n        window.merge(c, 1, Integer::sum);\n\n        if (need.containsKey(c) &amp;&amp; window.get(c).equals(need.get(c))) formed++;\n        while (left &lt; right &amp;&amp; formed == required) {\n\n            if (ans[0] == -1 || right \u2013 left &lt; ans[0]) {\n\n                ans[0] = right \u2013 left;\n\n                ans[1] = left;\n\n                ans[2] = right;\n\n            }\n\n            char leftChar = s.charAt(left++);\n\n            window.merge(leftChar, -1, Integer::sum);\n\n            if (need.containsKey(leftChar) &amp;&amp; window.get(leftChar) &lt; need.get(leftChar)) formed\u2013;\n\n        }\n\n    }\n\n    return ans[0] == -1 ? \u201c\u201d : s.substring(ans[1], ans[2]);\n\n}\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\">Trapping rain water<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Two Pointers<\/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-pointer approach. Maintain left and right pointers and left_max, right_max variables. At each step, the pointer with the smaller boundary value is the limiting factor. If height[left] is less than height[right], compute trapped water as left_max minus height[left] and advance left. Otherwise process the right side. This runs in O(n) time with O(1) space, versus O(n) space for the prefix\/suffix max array approach.<\/p>\n<p>Reported from a Bar Raiser round in late 2024. The candidate confirmed the Bar Raiser specifically asked for the O(1) space solution after the candidate produced the array-based approach first. At SDE-2 level, being able to optimize from a working O(n) space to O(1) space with a two-pointer approach is the expected progression.<\/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 into a single sorted linked list<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Heap \/ Linked List<\/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 on node value. Repeatedly pop the smallest node, append it to the result, and push that node&#8217;s next pointer back onto the heap if it exists. This runs in O(n log k) time, where n is the total number of nodes across all lists, since every pop and push touches a heap of at most k elements.<\/p>\n<p>Candidate reports from 2024 and 2025 Bar Raiser rounds cite this as an escalation from an earlier, easier merge-two-lists warm-up. The standard follow-up compares the heap approach against pairwise divide-and-conquer merging, which is also O(n log k) but uses O(1) extra space instead of O(k) for the heap, a tradeoff worth naming even if you implement the heap version first.<\/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 Amazon&#039;s shopping cart service that handles millions of concurrent users<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">High-Level 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 requirements: a cart has to survive across devices and sessions, so persist it in a fast key-value store like DynamoDB with the user ID as the partition key, rather than trusting client-side or session-only state. Since reads and writes are both heavy (every product page view can touch the cart to check for existing quantities), a write-through cache such as ElastiCache sits in front of DynamoDB for active sessions. Concurrent updates from multiple tabs or devices need optimistic locking, a version field on the cart record that gets checked and incremented on every write, so a stale write fails instead of silently overwriting a newer one. Checkout snapshots the cart into an immutable order record, keeping the cart itself lightweight and mutable.<\/p>\n<p>Reported from HLD rounds in 2025 loops for retail-org teams. The interviewer follow-up worth preparing: what happens when an item&#8217;s price changes while it&#8217;s already sitting in a customer&#8217;s cart? The correct answer re-validates price against the live catalog service at checkout time rather than trusting whatever price was cached on the cart line item when it was added.<\/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\">10<\/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 thread-safe circular buffer with read and write operations<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Concurrency<\/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>Fixed-size array with read and write index pointers, both modulo the buffer size. A mutex protects both indices and the data array. A condition variable (or semaphore pair) lets the writer block when the buffer is full and the reader block when the buffer is empty. Key edge cases: distinguishing full from empty (when read index equals write index, it&#8217;s ambiguous whether zero or n items are stored), typically resolved with a separate count variable or by leaving one slot unused.<\/p>\n<p>Reported from a 2024 SDE-2 coding round. The follow-up asked about performance under high-contention scenarios and whether there&#8217;s a lock-free implementation. The lock-free version uses atomic compare-and-swap on the index pointers and is significantly more complex to reason about correctly.<\/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 class that returns the kth largest element every time a new number is added to a stream<\/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>Maintain a min-heap capped at size k. Every time a value is added, push it onto the heap; if the heap size exceeds k, pop the smallest element. The root of the heap is always the kth largest value seen so far, because everything smaller than it has already been evicted.<\/p>\n<p>Reported both as a standalone OA problem and as the streaming follow-up to the plain &#8220;kth largest in an array&#8221; LeetCode question during phone screens. Amazon prefers the stateful, streaming version specifically because it tests whether a candidate understands amortized O(log k) insertion, rather than someone who just memorized the static array solution and recomputes from scratch on every call.<\/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\nimport heapq\nclass KthLargest:\n\n    def __init__(self, k, nums):\n\n        self.k = k\n\n        self.heap = nums[:]\n\n        heapq.heapify(self.heap)\n\n        while len(self.heap) &gt; k:\n\n            heapq.heappop(self.heap)\n    def add(self, val):\n\n        heapq.heappush(self.heap, val)\n\n        if len(self.heap) &gt; self.k:\n\n            heapq.heappop(self.heap)\n\n        return self.heap[0]\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\">Low-level design: design a parking lot system tracking vehicles and availability<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Low-Level 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>Core entities: ParkingLot, Level, ParkingSpot (subclasses: CompactSpot, LargeSpot, HandicappedSpot), Vehicle (subclasses: Car, Motorcycle, Truck), Ticket, ParkingRate. The ParkingLot has an availability tracker (array of counts per spot type per level). Assignment uses a greedy nearest-available approach or, for large lots, a priority queue sorted by distance from the entrance. The Ticket records entry time, spot assignment, and vehicle info. Checkout computes the fee from the rate table and releases the spot atomically.<\/p>\n<p>Reported from Round 3 of a 2025 SDE-2 loop, LP focus was Insist on Highest Standards. The interviewer asked about thread safety for the spot assignment operation specifically. Multiple threads assigning the same spot to two vehicles is the concurrency bug. The fix is either a synchronized method on the assignment function or an optimistic lock with a retry loop on a CAS of the spot&#8217;s availability state.<\/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\">Low-level design: design an API rate limiter<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Low-Level 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>Core interfaces: RateLimiter (tryAcquire(clientId) boolean), RateLimitConfig (max requests, window size, algorithm type), RateLimitStore (reads and writes token counts, typically backed by Redis for distributed scenarios). The client identifier can be an API key, IP address, or user ID. For distributed rate limiting where multiple instances share state, the token bucket state must live in Redis with Lua scripts or WATCH\/MULTI\/EXEC transactions to make the check-and-decrement atomic across network calls.<\/p>\n<p>The LLD design question asks for the class hierarchy and interface contracts, not the implementation detail. A clean separation between the algorithm (token bucket, sliding window) and the storage backend is the key design insight interviewers look for at SDE-2 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\">Design a URL shortening service like TinyURL<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">High-Level 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>Base62-encode an auto-incrementing counter to produce short codes, sharding the counter across a range-based ID generator so multiple servers aren&#8217;t fighting over one shared sequence. Store the short-code-to-long-URL mapping in a key-value store like DynamoDB, with the short code as the partition key. Since reads (redirects) vastly outnumber writes (new short links created), a Redis cache in front of the datastore absorbs most of the redirect traffic. The 301-vs-302 redirect choice matters more than it looks: a 302 lets you track every single click server-side, while a 301 gets cached by the browser and skips your server entirely on repeat visits, which is faster but kills your click analytics.<\/p>\n<p>Reported as a warm-up HLD question in multiple 2024 and 2025 SDE-2 loops, often used to check baseline system design fluency before the interviewer escalates to a harder problem. The recurring follow-up: how do you prevent short-code collisions if two service instances are generating IDs at the same time? The answer is a centralized or range-partitioned ID generator, not client-side random generation with a database uniqueness check after the fact.<\/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\">Low-level design: design a vending machine that accepts coins and dispenses items<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Low-Level 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>Model the machine as a state machine with states like Idle, HasMoney, Dispensing, and OutOfStock. Core classes: VendingMachine, Inventory, Coin, Product, and a State interface with one concrete class per state, so insertCoin, selectProduct, dispense, and refund each only implement the transitions that are valid from that particular state. This avoids the common anti-pattern of one giant class with nested if\/else blocks checking &#8220;what state are we in&#8221; before every action.<\/p>\n<p>Reported from Round 2 LLD interviews across multiple 2025 SDE-2 loops, alongside parking lot and elevator system as the three most commonly reported OOP design prompts at Amazon. The follow-up asks how you&#8217;d extend the design to support a card-payment path without touching any of the coin-handling classes, which tests whether your state and payment interfaces are actually decoupled or just look that way on the whiteboard.<\/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 stock-trading application that can handle heavy traffic<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">High-Level 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 by clarifying requirements: order volume per second (say, 100,000 orders\/sec at peak), latency targets (order acknowledgment in under 50ms), consistency guarantees (orders must not be lost, partial fills must be atomic). For the order book, a relational database like Aurora handles ACID transactions for trade matching. A Redis cache holds the current order book state for read-heavy queries (traders polling the book). Incoming orders land on an SQS FIFO queue to preserve order sequence before the matching engine processes them. The matching engine runs as a stateful service, not stateless, because the order book is in-memory for speed.<\/p>\n<p>This exact problem was reported from Round 1 of a 2025 Amazon SDE-2 onsite. The interviewer probed on the matching engine design specifically: what happens when the matching engine crashes? The answer requires a persistent write-ahead log or event sourcing so the engine can replay its state from the SQS queue on restart, rather than losing all in-flight orders.<\/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 an online coding platform similar to LeetCode<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">High-Level 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 system has a few interesting constraints. Code execution is untrusted, so each submission runs in an isolated sandbox (Docker containers with CPU and memory limits, seccomp syscall filtering). Execution is async: the user submits code, receives a job ID, and polls for results (or gets a WebSocket push when the result is ready). Storage: test case inputs and expected outputs go in S3 (large, immutable). Submission code and results go in a relational DB. A job queue (SQS or Kafka) decouples submission ingestion from execution workers. Auto-scaling the execution fleet during contest spikes is the key operational design decision.<\/p>\n<p>Reported from a Hiring Manager round in a 2025 SDE-2 loop. The HM pushed on the security model for code execution and on how you&#8217;d handle a submission that goes into an infinite loop (answer: a timeout watchdog in the container runtime, not relying on the submitted code to self-terminate).<\/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 log aggregation and search system<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">High-Level 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>Producers (application services) emit logs to a Kafka cluster partitioned by service name. Log consumers read from Kafka and write to an Elasticsearch cluster for full-text search. A separate cold-storage writer archives raw logs to S3 Parquet files for cost-effective long-term storage. Search queries hit Elasticsearch for recent logs (last 7 to 30 days) and a Presto or Athena query layer for historical queries against S3. Ingestion rate is the main scale lever: 50GB\/day is manageable with 3 Kafka brokers; 5TB\/day requires partition tuning and potentially a tiered storage strategy within Kafka itself.<\/p>\n<p>This is functionally the &#8220;log aggregator system&#8221; reported from Round 4 of the 2025 SDE-2 loop. The candidate proposed an optimization to the search path; the interviewer challenged it; they negotiated a compromise. Amazon&#8217;s &#8220;Have Backbone, Disagree and Commit&#8221; LP is evaluated here. The interviewer wants to see that you can hold a position with evidence and also hear a counterargument, not just capitulate.<\/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 real-time notification service for 100 million users<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">High-Level 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>Fan-out on write vs. fan-out on read is the core trade-off. For push notifications (mobile), fan-out on write using a message queue and a fleet of push workers per platform (FCM for Android, APNs for iOS) is standard. For in-app notifications, a per-user notification inbox in a NoSQL store (DynamoDB with userId as partition key) scales predictably. Rate limiting per user (no more than N notifications per hour) prevents notification spam and protects the push infrastructure from hot users. Dead-letter queues catch failed deliveries for retry without blocking the main ingestion path.<\/p>\n<p>AWS-idiomatic implementation: API Gateway receives notification triggers, SNS fans out to per-channel SQS queues, Lambda workers process each queue and call FCM\/APNs. At 100 million users with 1% daily active rate, the send volume is manageable; the read latency for loading a user&#8217;s notification inbox is the real design constraint.<\/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 Amazon SDE-2 loops<\/div><div class=\"iq-callout__body\"><\/p>\n<p>Candidates who prepare through LastRoundAI&#8217;s mock interview sessions show a consistent failure mode that doesn&#8217;t appear in most prep guides. The failure isn&#8217;t on LP knowledge. It&#8217;s on STAR story depth under follow-up pressure.<\/p>\n<p>The opening story usually lands fine. Then the interviewer asks: &#8220;What specifically did you do, not your team, you?&#8221; And candidates who prepared the team&#8217;s story rather than their individual contribution start hedging. &#8220;We&#8221; becomes ambiguous and the interviewer notes it. At SDE-2 level, Amazon is evaluating whether you can own a problem at the scope of an L5. Stories where your individual contribution is unclear read as L4 scope.<\/p>\n<p>The second pattern we&#8217;ve seen: candidates who treat the behavioral rounds as a break from the technical rounds get caught by the Bar Raiser. The Bar Raiser may pivot from LP questions to a coding problem or a design question mid-round with no warning. A candidate who mentally &#8220;shut down&#8221; their technical preparation for the behavioral session is suddenly at a disadvantage. Keep both modes active throughout the loop.<\/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 Amazon SDE-2 interview process take from application to offer?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Most candidates report four to eight weeks from application to verbal offer. The OA is typically sent within a week of the recruiter call and given a one-week completion window. Amazon's official guidance is a decision within five business days of the loop; in practice, candidates report one to two weeks.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is a Bar Raiser and what do they actually do in the loop?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The Bar Raiser is a specially trained Amazon interviewer from a different team than the one you're applying to. Their no-hire vote is a veto that cannot be overridden by the hiring manager without VP-level escalation. Their round can look like any other round but with deeper follow-up probing on Leadership Principles and technical decisions.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How many Leadership Principle questions should I expect per round?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Each interviewer is assigned two to three LPs to evaluate in their round. They'll typically ask two behavioral questions per round. Over a five-round loop, you'll face roughly ten to fifteen LP-focused questions in total.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Does Amazon care which programming language I use for the coding rounds?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Amazon accepts most mainstream languages: Java, Python, C++, JavaScript, Go. The OA requires syntactically correct code. Java is the most common candidate choice. Some interviewers may ask you to implement core data structure logic yourself rather than using built-in library functions.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is the SDE-2 level at Amazon, and how does it compare to other companies?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"SDE-2 is Amazon's L5 level. It maps roughly to L4 at Google, E4 at Meta, and SDE-II at Microsoft. Levels.fyi data from 2025 shows median total compensation for Amazon SDE-2 at approximately $274,000 per year. SDE-2 is the most active hiring level at Amazon.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Is system design really required for SDE-2, or is it just for senior roles?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"System design is a standard part of the SDE-2 (L5) loop. Most loops include one low-level design round and one high-level design round. The L4 (SDE-1) loop typically does not include a dedicated HLD round, which is one of the key differentiators between the two levels.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What's the best way to structure a STAR answer for Amazon's Bar Raiser round?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Situation and Task together should take 20-30 seconds. Action is where most of your time goes and needs to be specific to what you personally did, not your team. Result needs a number or concrete outcome. Under Bar Raiser pressure, candidates often over-explain Situation and rush Action, which is the part being scored.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does the Work Style Survey section of the Amazon OA actually ask?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The eight-minute Work Style Survey presents behavioral scenarios and asks you to rank responses from most to least like how you'd act, mapped against the 16 Leadership Principles. There's no single correct answer key; scoring appears to look for consistency across scenarios rather than one ideal response.\"\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\/meta-e5\"><span class=\"iq-rel__t\">Meta E5 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\/microsoft-sde\"><span class=\"iq-rel__t\">Microsoft 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\/nvidia\"><span class=\"iq-rel__t\">Nvidia 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\/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:\/\/amazon.jobs\/content\/en\/how-we-hire\/sde-ii-interview-prep\" target=\"_blank\" rel=\"nofollow noopener\">Amazon SDE-II Interview Prep (Official)<\/a><\/li><li><a href=\"https:\/\/www.glassdoor.com\/Interview\/Amazon-Software-Development-Engineer-II-Interview-Questions-EI_IE6036.0,6_KO7,39.htm\" target=\"_blank\" rel=\"nofollow noopener\">Glassdoor Amazon SDE-2 Reviews<\/a><\/li><li><a href=\"https:\/\/www.levels.fyi\/companies\/amazon\/salaries\/software-engineer\/levels\/sde-ii\" target=\"_blank\" rel=\"nofollow noopener\">Levels.fyi Amazon SDE-II Salary<\/a><\/li><li><a href=\"https:\/\/www.onsites.fyi\/blog\/article\/amazon-sde-ii-software-engineer-interview-questions\" target=\"_blank\" rel=\"nofollow noopener\">Onsites.fyi Amazon SDE-II Questions<\/a><\/li><li><a href=\"https:\/\/medium.com\/@harinera3691\/amazon-sde-ii-interview-experience-2025-usa-8b6d8c8abc14\" target=\"_blank\" rel=\"nofollow noopener\">Medium: Amazon SDE-II Experience 2025 USA<\/a><\/li><li><a href=\"https:\/\/interviewing.io\/guides\/hiring-process\/amazon\" target=\"_blank\" rel=\"nofollow noopener\">interviewing.io Amazon LP rejection rate<\/a><\/li><\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Something about the Amazon SDE-2 loop surprises almost every engineer who goes through it for the first time: the behavioral questions feel like half the interview. They are, by design. Amazon&#8217;s official SDE-II interview prep page says each of your four or five onsite rounds will evaluate Leadership Principles alongside the technical work, and at&#8230;<\/p>\n","protected":false},"author":4,"featured_media":1736,"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-954","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>Amazon SDE-2 Interview Questions (2026) | LastRoundAI<\/title>\n<meta name=\"description\" content=\"Real Amazon SDE-2 interview questions for 2026: coding, system design, and Leadership Principles behavioral rounds. Based on verified 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\/amazon-sde-2\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Amazon SDE-2 Interview Questions (2026) | LastRoundAI\" \/>\n<meta property=\"og:description\" content=\"Real Amazon SDE-2 interview questions for 2026: coding, system design, and Leadership Principles behavioral rounds. Based on verified candidate reports.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2\" \/>\n<meta property=\"og:site_name\" content=\"LastRound AI\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-19T03:53:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-amazon-sde-2-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<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/amazon-sde-2\",\"url\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/amazon-sde-2\",\"name\":\"Amazon SDE-2 Interview Questions (2026) | LastRoundAI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/amazon-sde-2#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/amazon-sde-2#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/iq-amazon-sde-2-og.png\",\"datePublished\":\"2026-06-23T09:13:33+00:00\",\"dateModified\":\"2026-07-19T03:53:30+00:00\",\"description\":\"Real Amazon SDE-2 interview questions for 2026: coding, system design, and Leadership Principles behavioral rounds. Based on verified candidate reports.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/amazon-sde-2#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/amazon-sde-2\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/amazon-sde-2#primaryimage\",\"url\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/iq-amazon-sde-2-og.png\",\"contentUrl\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/iq-amazon-sde-2-og.png\",\"width\":1200,\"height\":630,\"caption\":\"Amazon SDE-2 interview questions \u2014 LastRoundAI\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/amazon-sde-2#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\":\"Amazon SDE-2 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":"Amazon SDE-2 Interview Questions (2026) | LastRoundAI","description":"Real Amazon SDE-2 interview questions for 2026: coding, system design, and Leadership Principles behavioral rounds. Based on verified 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\/amazon-sde-2","og_locale":"en_US","og_type":"article","og_title":"Amazon SDE-2 Interview Questions (2026) | LastRoundAI","og_description":"Real Amazon SDE-2 interview questions for 2026: coding, system design, and Leadership Principles behavioral rounds. Based on verified candidate reports.","og_url":"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2","og_site_name":"LastRound AI","article_modified_time":"2026-07-19T03:53:30+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-amazon-sde-2-og.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2","url":"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2","name":"Amazon SDE-2 Interview Questions (2026) | LastRoundAI","isPartOf":{"@id":"https:\/\/lastroundai.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2#primaryimage"},"image":{"@id":"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2#primaryimage"},"thumbnailUrl":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-amazon-sde-2-og.png","datePublished":"2026-06-23T09:13:33+00:00","dateModified":"2026-07-19T03:53:30+00:00","description":"Real Amazon SDE-2 interview questions for 2026: coding, system design, and Leadership Principles behavioral rounds. Based on verified candidate reports.","breadcrumb":{"@id":"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2#primaryimage","url":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-amazon-sde-2-og.png","contentUrl":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-amazon-sde-2-og.png","width":1200,"height":630,"caption":"Amazon SDE-2 interview questions \u2014 LastRoundAI"},{"@type":"BreadcrumbList","@id":"https:\/\/lastroundai.com\/interview-questions\/amazon-sde-2#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":"Amazon SDE-2 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\/954","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\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/comments?post=954"}],"version-history":[{"count":3,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/iq\/954\/revisions"}],"predecessor-version":[{"id":1586,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/iq\/954\/revisions\/1586"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/media\/1736"}],"wp:attachment":[{"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/media?parent=954"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/tags?post=954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}