{"id":960,"date":"2026-06-25T14:43:20","date_gmt":"2026-06-25T14:43:20","guid":{"rendered":"https:\/\/lastroundai.com\/blog\/?post_type=iq&#038;p=960"},"modified":"2026-07-19T10:54:09","modified_gmt":"2026-07-19T05:24:09","slug":"microsoft-sde","status":"publish","type":"iq","link":"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde","title":{"rendered":"Microsoft SDE-2 Interview Questions (2026): What They Actually Ask"},"content":{"rendered":"<p>The Microsoft SDE-2 loop has a reputation for being approachable, and in some ways it is: the coding difficulty sits mostly at LeetCode Medium, the behavioral questions are predictable if you know what Microsoft actually cares about, and the process runs on a well-worn track. What candidates underestimate is how tightly behavioral signal is woven into every single round. You won&#8217;t get a standalone &#8220;tell me about yourself&#8221; session and then a coding round where nobody checks your interpersonal instincts. At Microsoft, the two happen in the same room, in the same hour.<\/p>\n<p>This page covers the SDE-2 interview process as it runs in 2026, targeting Level 61 and Level 62 positions. The questions below are drawn from verified candidate write-ups posted on Glassdoor, LeetCode Discuss, Blind, and firsthand accounts published in 2023 through 2025. I&#8217;ve noted where something is level-specific or team-dependent. Microsoft&#8217;s org is large enough that the exact mix of rounds shifts by team, but the core structure is consistent.<\/p>\n<div class=\"iq-stats not-prose\"><div class=\"iq-stat\"><span class=\"iq-stat__value\">6-10 weeks<\/span><span class=\"iq-stat__label\">Process<\/span><\/div><div class=\"iq-stat\"><span class=\"iq-stat__value\">4-6<\/span><span class=\"iq-stat__label\">Rounds<\/span><\/div><div class=\"iq-stat\"><span class=\"iq-stat__value\">LC Medium<\/span><span class=\"iq-stat__label\">Coding<\/span><\/div><div class=\"iq-stat\"><span class=\"iq-stat__value\">Virtual onsite<\/span><span class=\"iq-stat__label\">Format<\/span><\/div><\/div>\n<div class=\"iq-dsec iq-dsec--easy\"><div class=\"iq-dsec__row\"><h2 class=\"iq-dsec__h\" id=\"easy\"><span class=\"iq-dsec__dot\" aria-hidden=\"true\"><\/span>Easy questions<\/h2><span class=\"iq-dsec__n\">14<\/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\">Reverse a singly linked list<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Linked Lists<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Iterative: keep three pointers, prev, curr, and next. At each step, save curr.next, point curr.next back at prev, then advance prev and curr by one. Recursive: reverse the rest of the list first, then fix the two-node link at the tail of the recursion. Both run O(n) time; the iterative version uses O(1) space, the recursive version uses O(n) call-stack space.<\/p>\n<p>This is a warm-up in Microsoft phone screens more than onsite rounds, and interviewers move fast if you nail it in under two minutes. The real signal comes from the follow-up: reverse only a sub-range of the list, or reverse it in groups of k. Candidates who extend the same pointer-juggling logic to the harder variant without re-deriving it from scratch score noticeably better than those who treat each variant as a brand new problem.<\/p>\n<p><div class=\"iq-code not-prose\"><div class=\"iq-code__bar\"><span class=\"iq-code__lang\">python<\/span><button class=\"iq-code__copy\" type=\"button\">Copy<\/button><\/div><pre><code class=\"language-python\">\n\ndef reverse_list(head):\n\n    prev = None\n\n    curr = head\n\n    while curr:\n\n        nxt = curr.next\n\n        curr.next = prev\n\n        prev = curr\n\n        curr = nxt\n\n    return prev\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\">Detect and find the start of a cycle in a linked list<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Linked Lists<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Floyd&#8217;s cycle detection, the &#8220;tortoise and hare.&#8221; Move a slow pointer one step and a fast pointer two steps at a time. If they meet, a cycle exists. To find where the cycle begins, reset one pointer to the head and advance both pointers one step at a time; they meet exactly at the cycle&#8217;s start node.<\/p>\n<p>LeetCode #141 (detect) and #142 (find the start) both sit in the Microsoft-tagged set, and 2024 Blind write-ups mention this as a common opener before a harder tree or graph problem in the same round. Interviewers sometimes skip straight to &#8220;how would you do this with O(1) extra space,&#8221; which rules out the hash-set approach and forces Floyd&#8217;s method.<\/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 has_cycle(head):\n\n    slow = fast = head\n\n    while fast and fast.next:\n\n        slow = slow.next\n\n        fast = fast.next.next\n\n        if slow == fast:\n\n            return True\n\n    return False\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\">Why Microsoft? What specifically about the team or product interests you?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Every company asks some version of this. Microsoft&#8217;s version carries more weight than most because the interviewers can usually tell within one sentence whether you&#8217;ve researched the team&#8217;s actual work. &#8220;I want to work on Azure&#8221; is not an answer. &#8220;I want to work on the Azure Service Bus reliability team because I read the 2024 engineering post about their exactly-once delivery work and I&#8217;ve been solving a similar problem at my current company&#8221; is an answer.<\/p>\n<p>If you don&#8217;t know which team you&#8217;re interviewing with, ask your recruiter before the loop. It&#8217;s a completely reasonable question and the recruiter will tell you. Then read the team&#8217;s public blog posts, GitHub repos, or recent conference talks. Microsoft&#8217;s engineering teams publish more publicly than most people realize.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a time you had to deliver under a tight deadline. What trade-offs did you make?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Be specific about what you cut, what you deferred, and what the cost of those cuts turned out to be in retrospect. The best answers include an honest assessment of whether the trade-off was the right call: &#8220;We deferred the error handling to hit the deadline. It turned out that was fine for the initial release but we paid for it three months later when a new edge case hit production. If I were doing it again, I&#8217;d have pushed for one more week to add the error handling.&#8221;<\/p>\n<p>Microsoft interviewers don&#8217;t expect you to have made perfect calls. They expect you to have reflected on your calls and learned from them. An answer where every trade-off worked out exactly as planned is less credible than one where something went wrong and you can say precisely what you&#8217;d do differently.<\/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 level is SDE-2 at Microsoft?<\/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 at Microsoft spans two internal levels: Level 61 and Level 62. Level 61 is the entry point for SDE-2 and typically requires 2 to 5 years of industry experience. Level 62 is the senior end of SDE-2, typically 4 to 6 years of experience, and carries higher compensation and a slightly harder interview bar, especially for system design. Some candidates apply for one level and get offered the other based on how the loop goes. Total compensation at L61 averages around $197K; at L62, around $207K, both lower than equivalent levels at Google or Meta.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">How long does the Microsoft SDE-2 interview process take?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">FAQ<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Most candidates report 6 to 10 weeks from application to verbal offer. Internal referrals can compress the timeline to 4 to 5 weeks. The online assessment or phone screen usually happens within 2 weeks of application. The virtual onsite loop is typically 2 to 4 weeks after that. After the loop, debrief and offer turnaround take 1 to 2 weeks, though it can stretch to 3 to 4 weeks if an AA round needs to be scheduled separately.<\/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 AA round at Microsoft and should I be nervous about it?<\/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 AA round (As Appropriate) is an additional interview conducted by a senior engineer or principal within the same org. Getting an AA invite is generally a positive signal, it typically means your loop performance was strong enough to warrant a closer look at senior level. The content varies by interviewer: some conduct a coding question plus behavioral, others focus entirely on a systems discussion or on &#8220;selling Microsoft&#8221; to a candidate they want to hire. A short AA round with a very senior interviewer is not a bad sign. Treat it like another loop round and prepare accordingly.<\/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 Microsoft ask system design questions at SDE-2 level?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">FAQ<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Yes, for Level 61 and Level 62 positions. System design is not standard at Level 59 or 60 (new grad SDE and early SDE-1). At SDE-2, expect one dedicated design round of 45 to 60 minutes covering high-level distributed system design. Some loops also include a low-level design (LLD) round focused on object-oriented design and class hierarchy, particularly for roles on platform or API teams. Ask your recruiter before the loop whether both HLD and LLD rounds are included.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">How important is behavioral preparation for a Microsoft SDE-2 interview?<\/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>More important than most candidates expect. Microsoft evaluates behavioral signals in every round, not just a standalone behavioral interview. The &#8220;growth mindset&#8221; framework, a company-wide cultural initiative that has been active since 2014 under Satya Nadella, is explicitly used in interview debriefs. Candidates who perform well technically but signal &#8220;know-it-all&#8221; behavior in their stories, specifically by describing conflicts where they were fully right and others were wrong, have failed loops despite strong coding performance. Have 4 to 5 STAR stories ready with genuine failure examples and genuine learning outcomes.<\/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 programming languages does Microsoft accept for coding interviews?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">FAQ<\/span><span class=\"iq-badge iq-badge--easy\">Easy<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Microsoft accepts any major language for coding rounds. Python, Java, C#, C++, and JavaScript are all reported from recent loops. C# gets a mild reception given Microsoft&#8217;s product ecosystem, but it&#8217;s not required and offers no scoring advantage. The collaborative code editor in Teams supports all major languages. If your strongest language is Python, use Python. Interviewers at Microsoft are looking at your problem-solving approach, not your language loyalty. The one exception: if you&#8217;re interviewing for a role explicitly in the .NET or C# ecosystem, knowing the language idioms will matter for the coding quality discussion.<\/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 coding rounds are in the Microsoft SDE-2 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>Typically 2 to 3 dedicated coding rounds inside the virtual onsite loop, plus whatever coding already happened during the OA or phone screen stage. A hiring-manager round often folds in one more coding question alongside behavioral topics, which some candidates count separately and some don&#8217;t, which is why the &#8220;4 to 6 rounds total&#8221; figure shows up in several write-ups. The exact split depends on whether a dedicated system design round is scheduled (L61 and above) and whether an AA round gets added.<\/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 LeetCode practice alone enough to prepare for Microsoft&#039;s 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>No, not on its own. The algorithmic difficulty at Microsoft SDE-2 sits at LeetCode Medium, which most candidates who&#8217;ve done 150 to 200 problems can handle technically. What LeetCode practice alone doesn&#8217;t build is the habit of narrating your reasoning out loud before writing code, which Microsoft interviewers weight heavily and note negatively when it&#8217;s missing. Practicing the same problems while explaining your approach to another person, or recording yourself, closes that gap faster than doing more problems in silence.<\/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\">If I don&#039;t get invited to an AA round, does that mean I failed 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>Not necessarily. Some teams and some levels skip the AA round entirely as a matter of process, independent of how the loop went. It&#8217;s more accurate to say that getting an AA invite is a positive signal, your performance was strong enough that someone wanted a closer look at senior-level judgment, than that skipping it is a negative one. If you&#8217;re unsure, it&#8217;s reasonable to ask your recruiter directly whether an AA round is part of your specific loop before assuming its absence means anything.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">What is the difference between a process and a thread?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">OS Fundamentals<\/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>A process is an independent unit of execution with its own memory space, its own set of file handles, and its own address range. The operating system isolates one process from another, so if one process crashes it doesn&#8217;t take down another one. Starting a process is relatively expensive because the OS has to allocate a new address space and set up page tables from scratch.<\/p>\n<p>A thread is a unit of execution that lives inside a process and shares that process&#8217;s memory, open file descriptors, and heap with every other thread in the same process. Threads within a process can read and write the same variables directly, which makes communication fast but also introduces race conditions if you&#8217;re not careful with locks or other synchronization. Creating a thread is much cheaper than creating a process because the OS only needs to set up a new stack and register set, not a whole new address space.<\/p>\n<p>The practical tradeoff comes up constantly in system design and in day to day engineering. If you want strong isolation, say running untrusted plugin code or separate services, you reach for processes even though context switching between them costs more. If you need many workers cooperating on the same in-memory data structure, like a thread pool processing requests against a shared cache, threads are the right tool, but you own the responsibility of protecting shared state with mutexes, atomics, or higher level constructs.<\/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\">24<\/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\">Implement an LRU cache<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Data Structures<\/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>Use a hash map for O(1) key lookups combined with a doubly linked list to track access order. The most recently used entry sits at the list head; the least recently used sits at the tail. On a get, move the node to the head. On a put that exceeds capacity, evict the tail node and remove its key from the map.<\/p>\n<p>This specific problem shows up in multiple independent Microsoft SDE-2 reports from 2024, including at least one account where Round 2 was described as &#8220;implement LRU cache, then extend it to support multiple eviction policies.&#8221; The eviction policy extension is a natural follow-up: how would you swap LRU for LFU or FIFO without rewriting the entire cache? The answer uses a strategy pattern with an abstracted eviction interface.<\/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 OrderedDict\nclass LRUCache:\n\n    def __init__(self, capacity: int):\n\n        self.cap = capacity\n\n        self.cache = OrderedDict()\n    def get(self, key: int) -&gt; int:\n\n        if key not in self.cache:\n\n            return -1\n\n        self.cache.move_to_end(key)\n\n        return self.cache[key]\n    def put(self, key: int, value: int) -&gt; None:\n\n        if key in self.cache:\n\n            self.cache.move_to_end(key)\n\n        self.cache[key] = value\n\n        if len(self.cache) &gt; self.cap:\n\n            self.cache.popitem(last=False)\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Find the k-th largest element in an unsorted array<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Heap<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Two approaches: sort and index (O(n log n), trivial to implement), or a min-heap of size k (O(n log k), better for large n with small k). For the heap approach, iterate through the array, push each element, and pop when the heap exceeds size k. At the end, the heap&#8217;s minimum is the k-th largest.<\/p>\n<p>Reported as a phone screen question. Follow-ups probe the space complexity trade-off and whether you&#8217;ve heard of Quickselect (O(n) average, O(n^2) worst). Microsoft interviewers don&#8217;t always require Quickselect, but knowing it and explaining when you&#8217;d choose it over the heap approach demonstrates the kind of reasoning they want to see.<\/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 find_kth_largest(nums, k):\n\n    # min-heap of size k\n\n    heap = []\n\n    for n in nums:\n\n        heapq.heappush(heap, n)\n\n        if len(heap) &gt; k:\n\n            heapq.heappop(heap)\n\n    return 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\">Merge k sorted linked lists<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Linked Lists \/ 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>Use a min-heap seeded with the head node from each list. At each step, pop the minimum node, append it to the result list, and push that node&#8217;s next pointer into the heap (if non-null). Total time complexity O(N log k) where N is the total number of nodes and k is the number of lists.<\/p>\n<p>Reported from a 2024 onsite. The key correctness trap is what you push into the heap: you need to push the node itself (or a tuple of (value, node) with a tiebreaker) rather than just the value, because you need the pointer to the next node in that list. Python&#8217;s heapq doesn&#8217;t handle ties on non-comparable objects without an explicit comparator or index tiebreaker.<\/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\n\nfrom typing import Optional\nclass ListNode:\n\n    def __init__(self, val=0, next=None):\n\n        self.val = val\n\n        self.next = next\ndef merge_k_lists(lists):\n\n    heap = []\n\n    for i, node in enumerate(lists):\n\n        if node:\n\n            heapq.heappush(heap, (node.val, i, node))\n    dummy = ListNode(0)\n\n    curr = dummy\n\n    while heap:\n\n        val, i, node = heapq.heappop(heap)\n\n        curr.next = node\n\n        curr = curr.next\n\n        if node.next:\n\n            heapq.heappush(heap, (node.next.val, i, node.next))\n\n    return dummy.next\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 longest substring without repeating characters<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Sliding Window<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Sliding window with a set or hash map tracking the current window&#8217;s characters. Expand the right pointer on each step. When a duplicate character enters the window, advance the left pointer until the duplicate is removed. Track the maximum window length throughout.<\/p>\n<p>Reported from a 2022 technical round at Microsoft (India), and appears repeatedly in Microsoft-tagged LeetCode problems. It&#8217;s a warm-up question in some loops and the main question in others. The follow-up often asks you to return the actual substring rather than just the length, and then asks how you&#8217;d handle Unicode multi-byte characters.<\/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\">Group anagrams<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Strings \/ Hashing<\/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>For each word, compute a canonical key (sorted characters, or a 26-length character count tuple) and use it to bucket words into a hash map. Sorting each word costs O(k log k) for a word of length k; the count-tuple approach is O(k) per word and faster for longer strings. Return the map&#8217;s values as the grouped lists.<\/p>\n<p>LeetCode #49, Microsoft-tagged, reported repeatedly as a phone-screen question in 2024 and 2025 GeeksforGeeks candidate write-ups. The follow-up worth preparing for: what if the input has hundreds of millions of words and doesn&#8217;t fit on one machine? That turns a 10-minute coding question into a short distributed-systems tangent (shard by hash of the key, reduce locally, merge), and interviewers tend to like watching candidates make that jump unprompted.<\/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\">Search in a rotated sorted array<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Binary Search<\/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>Modified binary search. At each step, at least one half of the array (left of mid or right of mid) is guaranteed to be properly sorted. Check which half is sorted, then check whether the target falls inside that half&#8217;s range. If it does, search there; if not, search the other half. This keeps the O(log n) guarantee without ever fully sorting the rotated array.<\/p>\n<p>LeetCode #33, one of the most frequently cited Microsoft-tagged problems across Glassdoor and LeetCode Discuss write-ups from 2023 through 2025. The follow-up almost always adds duplicates to the array, which breaks the &#8220;at least one half is sorted&#8221; invariant; the fix is a linear-time fallback when nums[left] equals nums[mid] equals nums[right].<\/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 search(nums, target):\n\n    lo, hi = 0, len(nums) \u2013 1\n\n    while lo &lt;= hi:\n\n        mid = (lo + hi) \/\/ 2\n\n        if nums[mid] == target:\n\n            return mid\n\n        if nums[lo] &lt;= nums[mid]:\n\n            if nums[lo] &lt;= target &lt; nums[mid]:\n\n                hi = mid \u2013 1\n\n            else:\n\n                lo = mid + 1\n\n        else:\n\n            if nums[mid] &lt; target &lt;= nums[hi]:\n\n                lo = mid + 1\n\n            else:\n\n                hi = mid \u2013 1\n\n    return -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\">Rotate an N x N matrix 90 degrees in place<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Arrays \/ Matrix<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Two passes, no extra matrix. First, transpose the matrix (swap element [i][j] with [j][i] across the diagonal). Second, reverse each row. The combination produces a clockwise 90-degree rotation using O(1) extra space. Doing it in a single pass with four-way cell swapping, layer by layer, is the harder but more elegant version some interviewers ask for as a follow-up.<\/p>\n<p>LeetCode #48, reported in Microsoft phone screens and in at least one 2025 onsite account on GeeksforGeeks. The trap most candidates fall into: reversing columns instead of rows, or transposing after reversing instead of before, which rotates the matrix the wrong direction. Walking through a 3&#215;3 example on paper before touching the keyboard catches this early.<\/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\">Zigzag level order traversal of a binary tree<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Trees<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>BFS with a direction flag that alternates each level. Use a deque to collect node values for the current level. On even levels, append left to right. On odd levels, append right to left (or collect left-to-right and reverse before adding to the result). Either approach works; the deque-based approach without an explicit reverse is slightly more efficient.<\/p>\n<p>Reported in a 2024 Microsoft SDE-2 hiring manager round alongside a multithreading question. Binary tree BFS variants appear in Microsoft loops at a very high frequency across all levels. If you&#8217;ve been through a Microsoft loop and didn&#8217;t get at least one tree question, you&#8217;re in the minority.<\/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\n\nfrom typing import List, Optional\ndef zigzag_level_order(root) -&gt; List[List[int]]:\n\n    if not root:\n\n        return []\n\n    result = []\n\n    queue = deque([root])\n\n    left_to_right = True\n    while queue:\n\n        level_size = len(queue)\n\n        level = deque()\n\n        for _ in range(level_size):\n\n            node = queue.popleft()\n\n            if left_to_right:\n\n                level.append(node.val)\n\n            else:\n\n                level.appendleft(node.val)\n\n            if node.left:\n\n                queue.append(node.left)\n\n            if node.right:\n\n                queue.append(node.right)\n\n        result.append(list(level))\n\n        left_to_right = not left_to_right\n\n    return result\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Course schedule II (topological sort)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Graphs<\/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 and an in-degree array. Push all nodes with in-degree 0 into a queue. Process each node, decrement the in-degree of its neighbors, and push any neighbor whose in-degree reaches zero. If the result list has length equal to the number of courses, return it. Otherwise a cycle exists and completion is impossible.<\/p>\n<p>LeetCode #210. Shows up in the Microsoft-tagged problem set and reported from multiple SDE-2 onsite rounds. The follow-up is almost always: &#8220;How does the answer change if you need to detect which specific courses form the cycle?&#8221; The answer: run a DFS with a coloring scheme (white\/gray\/black) and record the back edge that closes the cycle.<\/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\">Friend pairing problem<\/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>Count the number of ways n friends can either stay single or pair up with exactly one other friend. If the n-th person stays single: ways(n-1). If the n-th person pairs with someone: (n-1) choices for the partner, then ways(n-2) arrangements for the rest. Recurrence: dp[n] = dp[n-1] + (n-1) * dp[n-2], with base cases dp[1] = 1 and dp[2] = 2.<\/p>\n<p>Reported directly from a 2024 Microsoft SDE-2 OA (GeeksforGeeks candidate writeup for L62). It presents as a combinatorics problem but the recurrence structure is classic DP. Candidates who try to build it bottom-up from scratch in-interview often find it faster to first write the recursive version and then memoize, then optimize to the iterative form if time allows.<\/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\">Minimum meeting rooms required<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Greedy \/ 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>Sort meetings by start time. Use a min-heap tracking the end times of currently active meetings. For each meeting, if its start time is greater than or equal to the heap&#8217;s minimum (the earliest-ending active meeting), pop that meeting (it&#8217;s done) before pushing the new end time. The heap&#8217;s maximum size over all iterations is the answer.<\/p>\n<p>A variation of this was reported in a 2025 Microsoft SDE-2 DSA round (&#8220;single DSA question with a followup,&#8221; per a LeetCode Discuss post from that period). The follow-up usually asks you to return not just the count of rooms but also the actual assignment of meetings to rooms, which requires tracking which room each meeting is assigned to alongside the end times.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Find the lowest common ancestor of two nodes in a binary tree<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Trees<\/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 post-order approach. At each node, recurse into the left and right subtrees looking for the two target nodes. If both subtrees return a non-null result, the current node is the LCA. If only one side returns non-null, propagate that result upward. The base case: if the current node matches either target, return it immediately.<\/p>\n<p>LeetCode #236, Microsoft-tagged, and one of the most frequently reported tree questions across 2024-2025 Glassdoor write-ups, often paired with a request to also handle the case where one or both nodes don&#8217;t exist in the tree at all. That variant needs a small change: track whether each target was actually found during the traversal, and only trust the LCA result if both were.<\/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 lowest_common_ancestor(root, p, q):\n\n    if not root or root == p or root == q:\n\n        return root\n\n    left = lowest_common_ancestor(root.left, p, q)\n\n    right = lowest_common_ancestor(root.right, p, q)\n\n    if left and right:\n\n        return root\n\n    return left or right\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<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Graphs<\/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>Treat the grid as an implicit graph where each land cell connects to its up, down, left, and right neighbors. Scan every cell; whenever you hit an unvisited land cell, run a BFS or DFS to mark every connected land cell as visited, and increment the island count once per call. Time complexity is O(rows x cols), since every cell is visited at most twice: once in the scan, once in a flood fill.<\/p>\n<p>LeetCode #200, reported from Microsoft SDE-2 phone screens more often than onsite rounds, according to multiple 2024 GeeksforGeeks and LeetCode Discuss accounts. The standard follow-up asks for the number of distinct island shapes rather than just the count, which requires normalizing each island&#8217;s coordinates relative to its top-left cell before comparing shapes with a set.<\/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 = set()\n    def bfs(r, c):\n\n        stack = [(r, c)]\n\n        visited.add((r, c))\n\n        while stack:\n\n            cr, cc = stack.pop()\n\n            for dr, dc in ((1, 0), (-1, 0), (0, 1), (0, -1)):\n\n                nr, nc = cr + dr, cc + dc\n\n                if (0 &lt;= nr &lt; rows and 0 &lt;= nc &lt; cols\n\n                        and grid[nr][nc] == \u201c1\u201d and (nr, nc) not in visited):\n\n                    visited.add((nr, nc))\n\n                    stack.append((nr, nc))\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 (r, c) not in visited:\n\n                bfs(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\">Find the length of the longest increasing subsequence<\/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 is the one most candidates reach first: dp[i] holds the length of the longest increasing subsequence ending at index i, and dp[i] equals the max of dp[j] + 1 for every j less than i where nums[j] is less than nums[i]. The O(n log n) version replaces the DP array with a &#8220;tails&#8221; array tracking the smallest tail value for an increasing subsequence of each length, using binary search to find where each new element belongs.<\/p>\n<p>Reported in Microsoft SDE-2 rounds as both a standalone question and a warm-up before a harder DP problem in the same session, per multiple 2024 and 2025 candidate accounts. Microsoft interviewers generally accept the O(n^2) solution as a complete pass if you can explain it cleanly, but naming the O(n log n) improvement, and roughly how patience sorting works, is what gets noted as exceeding expectations in the 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\">Print numbers 1 to 100 using three threads in order<\/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>Three threads, each responsible for one modulo class (n%3 == 0, n%3 == 1, n%3 == 2). Use three semaphores initialized to 1, 0, and 0 respectively. Each thread: wait on its semaphore, print its number, signal the next thread&#8217;s semaphore. Cycle the signaling so thread 0 signals thread 1, thread 1 signals thread 2, thread 2 signals thread 0.<\/p>\n<p>Reported verbatim from a 2024 Microsoft SDE-2 hiring manager round alongside the zigzag tree traversal. Microsoft&#8217;s hiring manager rounds are the most likely to include a concurrency or multithreading question, more so than the peer engineering rounds. If you&#8217;re not comfortable with semaphore semantics, the mutex-plus-condition-variable alternative is also acceptable and sometimes easier to reason about under pressure.<\/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.Semaphore;\npublic class ThreeThreadsPrint {\n\n    static Semaphore[] sems = {\n\n        new Semaphore(1),\n\n        new Semaphore(0),\n\n        new Semaphore(0)\n\n    };\n    public static void main(String[] args) throws InterruptedException {\n\n        for (int id = 0; id &lt; 3; id++) {\n\n            final int threadId = id;\n\n            new Thread(() -&gt; {\n\n                try {\n\n                    for (int n = threadId + 1; n &lt;= 100; n += 3) {\n\n                        sems[threadId].acquire();\n\n                        System.out.println(n);\n\n                        sems[(threadId + 1) % 3].release();\n\n                    }\n\n                } catch (InterruptedException e) {\n\n                    Thread.currentThread().interrupt();\n\n                }\n\n            }).start();\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\">Implement a bounded blocking queue for a producer-consumer setup<\/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>Two counting semaphores (or condition variables) track the queue&#8217;s empty and full slots, plus a mutex protecting the underlying buffer. A producer waits on the &#8220;empty slots&#8221; semaphore before inserting, then signals the &#8220;full slots&#8221; semaphore. A consumer does the reverse. The mutex ensures only one thread touches the buffer&#8217;s head and tail pointers at a time, regardless of how many producer or consumer threads are running.<\/p>\n<p>This maps to LeetCode 1188 (Design Bounded Blocking Queue, a premium concurrency problem) and is reported as a Microsoft hiring-manager or AA-round question when the team works on infrastructure or messaging systems. The follow-up worth rehearsing: what changes with multiple producers and multiple consumers instead of one of each? The semaphore-plus-mutex structure doesn&#8217;t change, but naming the risk of thread starvation under unfair scheduling is the detail that separates a good answer from a great one.<\/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.LinkedList;\n\nimport java.util.Queue;\n\nimport java.util.concurrent.Semaphore;\npublic class BoundedBlockingQueue {\n\n    private final Queue&lt;Integer&gt; queue = new LinkedList&lt;&gt;();\n\n    private final Semaphore emptySlots;\n\n    private final Semaphore fullSlots = new Semaphore(0);\n\n    private final Object mutex = new Object();\n    public BoundedBlockingQueue(int capacity) {\n\n        emptySlots = new Semaphore(capacity);\n\n    }\n    public void enqueue(int element) throws InterruptedException {\n\n        emptySlots.acquire();\n\n        synchronized (mutex) {\n\n            queue.offer(element);\n\n        }\n\n        fullSlots.release();\n\n    }\n    public int dequeue() throws InterruptedException {\n\n        fullSlots.acquire();\n\n        int value;\n\n        synchronized (mutex) {\n\n            value = queue.poll();\n\n        }\n\n        emptySlots.release();\n\n        return value;\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\">Tell me about a time you failed at something significant. What did you learn?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>The growth mindset question in its purest form. The failure needs to be real and specific: a project that shipped broken, an architectural decision that had to be reversed, a performance gap your manager called out. Generic failures (&#8220;I sometimes work too hard&#8221;) fail immediately.<\/p>\n<p>What separates strong from weak answers is what comes after the failure. Microsoft interviewers want to hear a specific behavior change, not a general lesson. &#8220;I learned to communicate more&#8221; is weak. &#8220;I started sending a weekly written update to stakeholders after the incident, and here&#8217;s what that actually changed&#8221; is the level of specificity that lands.<\/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 situation where you had to learn a new technology quickly. How did you approach it?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Name the technology and the timeline. Describe how you ramped: documentation, internal colleagues, experiments, reading source code. Name what you got wrong first. The structure should show a systematic approach to unfamiliar territory, not &#8220;I Googled it and figured it out.&#8221;<\/p>\n<p>This question is particularly common in rounds where the team uses a tech stack that differs from your background. Microsoft interviewers will sometimes use your answer to probe whether you&#8217;d ramp well on Azure services if you come from an AWS background, or on C# if your experience is primarily in Python or Java. Have an example ready that shows you&#8217;ve done exactly this kind of cross-technology ramp before.<\/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 me an example of when you changed your mind based on new information or feedback.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>The learn-it-all test in disguise. Pick a situation where you had a conviction, received contradicting evidence, and updated. Situations where you initially resisted the feedback before updating are better stories than ones where you immediately agreed, because they show you can hold a position while also being genuinely open.<\/p>\n<p>The follow-up is almost always: &#8220;How do you distinguish between good reasons to change your mind versus social pressure?&#8221; The expected answer involves naming the type of evidence that moved you (data, a user complaint, a code review showing a bug in your reasoning) versus the type that wouldn&#8217;t (someone senior just saying you&#8217;re wrong without substantiation).<\/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 conflict with a teammate or peer. How did you resolve it?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Microsoft interviewers listen for two things: whether you took partial ownership of the conflict (even if the other person was mostly wrong), and whether the resolution involved structural change or just one conversation. &#8220;We talked it out and it was fine&#8221; is the minimum passing bar. &#8220;We talked it out, identified the underlying ambiguity in our team&#8217;s ownership model, and proposed a change to how we document that&#8221; is the level that stands out.<\/p>\n<p>Avoid stories where you were fully right and the other person was fully wrong. That outcome may have been true, but telling it that way reads as a lack of self-awareness to a Microsoft interviewer, specifically to one who&#8217;s been trained to look for growth mindset signals.<\/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 where you had to influence people who didn&#039;t report to you.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Microsoft is large. Cross-team influence without direct authority is a constant in SDE-2 daily work. Interviewers want to see that you can align stakeholders through shared goals and data rather than escalation. Strong answers describe the actual mechanism: a shared doc that framed the problem from the partner team&#8217;s perspective, a proof-of-concept that de-risked the proposal, a metric that made the case numerically.<\/p>\n<p>The failure mode here is answers that lean heavily on &#8220;I escalated to my manager.&#8221; That&#8217;s sometimes necessary, but if it&#8217;s your primary tool for influence, it signals that you haven&#8217;t yet built the interpersonal effectiveness Microsoft expects at SDE-2.<\/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 disagreed with your manager&#039;s decision. What did you do?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Microsoft interviewers are checking whether you can push back on a decision without either caving immediately or digging in past the point of usefulness. Name the actual disagreement, the case you made, and how it resolved, including if it resolved with your manager&#8217;s original call standing. A story where you were overruled and then executed the decision well anyway is often a stronger signal than one where you got your way, since it shows you can disagree and still commit.<\/p>\n<p>The weak version of this answer avoids naming a real disagreement (&#8220;I always try to see both sides&#8221;) or ends with you going around your manager to their boss. Both read poorly. The strong version names the specific point of contention, quotes roughly what was said, and is honest about whether, in hindsight, your original position was actually right.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Describe a time you had to make a decision without complete information.<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Name the decision, the information you were missing, and the deadline pressure that forced you to act anyway. Microsoft interviewers want to hear your actual reasoning process for filling the gap: did you make a reversible bet and set a checkpoint to revisit it, did you consult someone with more context, did you ship the smallest version that let you gather real data quickly? Any of these is a reasonable answer; &#8220;I went with my gut&#8221; is not.<\/p>\n<p>This question shows up often in AA rounds specifically, more so than in the standard hiring-manager slot, per multiple candidate accounts describing their AA interviewer as a senior engineer probing for judgment under ambiguity rather than running a coding-heavy conversation. The follow-up is almost always &#8220;what would you have done differently with more time,&#8221; and a credible answer here matters more than the original decision having been right.<\/p>\n<p><\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Tell me about a time you received critical feedback that was hard to hear. How did you respond?<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Behavioral<\/span><span class=\"iq-badge iq-badge--medium\">Medium<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Name the actual feedback, word for word if you can remember it, and your honest first reaction, defensiveness included. Then describe the specific thing you changed afterward, not a general resolution to &#8220;be better.&#8221; Microsoft&#8217;s growth mindset framework treats this question as one of the clearest behavioral signals in the whole loop, since it directly tests the learn-it-all versus know-it-all distinction from Nadella&#8217;s framing.<\/p>\n<p>Candidates who claim they&#8217;ve never been surprised by feedback, or who reframe every piece of critical feedback as something they&#8217;d already privately decided to fix, tend to read as coached rather than candid. An answer with a beat of genuine discomfort before the resolution is the one interviewers remember afterward, and it&#8217;s reported often enough as an AA-round staple that it&#8217;s worth having two separate stories ready rather than one.<\/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\">5<\/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\">Integer to English words<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Strings<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Recursively handle groups of three digits. For each group, handle hundreds, tens, and ones separately. Maintain a list of thousands-group labels (&#8220;&#8221;, &#8220;Thousand&#8221;, &#8220;Million&#8221;, &#8220;Billion&#8221;). The edge cases are where candidates slip: zero, numbers exactly at group boundaries (1000, 1000000), negative numbers if the problem includes them.<\/p>\n<p>Reported from a December 2024 Microsoft onsite as a hard-difficulty coding question. Interviewers who give this problem are testing whether you can decompose a parsing problem systematically under time pressure, not whether you&#8217;ve memorized the solution. Writing the recursive structure on a whiteboard before coding is the right opening move.<\/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\">Trapping rain water<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Arrays \/ 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>For each bar, the water it holds equals the minimum of the tallest bar to its left and the tallest bar to its right, minus its own height. A brute-force solution recomputes both maxes for every index (O(n^2)). The two-pointer solution tracks a running left-max and right-max and moves whichever pointer sits behind the smaller of the two, reaching O(n) time and O(1) space without precomputing arrays.<\/p>\n<p>LeetCode #42, one of the harder problems in the Microsoft-tagged set and reported from at least one Level 62 onsite loop. Candidates who only know the O(n) space version (precomputed left-max and right-max arrays) usually pass, but interviewers will ask if you can do it without the extra arrays, and reaching the two-pointer insight live, rather than from memory, is what separates a strong pass from a borderline 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\">Find the median from a data stream<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Heap \/ Data Structures<\/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 heaps: a max-heap holding the lower half of values, a min-heap holding the upper half. On each insertion, determine which heap to add to (based on current median), then rebalance if the size difference exceeds one. The median is either the top of the larger heap or the average of both tops if they&#8217;re equal size.<\/p>\n<p>LeetCode #295. Reported in verified Microsoft interviews. The question tests whether you can design a data structure for an online problem (streaming input, query at any point) rather than a batch problem. The interviewer&#8217;s first follow-up is usually: &#8220;What if we only need an approximate median and our input is bounded in range?&#8221; Answer: a bucket array over the value range works and is O(1) per operation.<\/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\">Solve the dining philosophers problem without deadlock<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Concurrency<\/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>Five philosophers sit around a table with five forks, one between each pair, and each needs both adjacent forks to eat. The naive solution, where every philosopher picks up their left fork and then their right, deadlocks the moment all five grab their left fork at once and wait forever for the right. The standard fix: break the symmetry. Have one philosopher (or every even-numbered one) pick up the right fork first instead of the left, or add a waiter or semaphore that only allows four philosophers to attempt eating at a time.<\/p>\n<p>LeetCode #1226, a premium concurrency problem, reported as a Microsoft AA-round question specifically for candidates on teams that touch OS-level or driver code. Interviewers care less about which fix you name and more about whether you can articulate why the naive version deadlocks, a circular wait on a shared resource, before jumping to a solution. That diagnostic step is where weaker candidates lose points even when they know the fix by memory.<\/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 OneDrive file sync across devices<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Core components: metadata service (tracks file versions, sync state per device), blob storage for file chunks (block-level deduplication to avoid resending unchanged chunks), conflict detection and resolution (last-write-wins vs. branch-and-merge, OneDrive uses last-write-wins for most file types). Delta sync: client sends a hash of its current version; server compares and returns only changed blocks. Websocket or long-poll channel for real-time change notifications from the server to clients.<\/p>\n<p>Reported as a real Microsoft system design question category (confirmed by multiple prep guides and a 2024 candidate post on EngineeringBolt). The interviewer&#8217;s depth probes tend to focus on conflict resolution (&#8220;what happens when two devices edit the same file offline?&#8221;) and on how you&#8217;d handle very large files without loading them entirely into memory on upload. Chunked multipart upload with pre-signed Azure Blob Storage URLs is the standard answer.<\/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\">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\">Design a thread-safe Singleton class<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">Concurrency \/ OOP<\/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>Double-checked locking with a volatile instance variable. The outer null check avoids synchronization on every call after the instance is created. The inner null check inside the synchronized block prevents a race condition where two threads both pass the outer check and then queue up for the lock. The volatile keyword prevents CPU instruction reordering from exposing a partially constructed object.<\/p>\n<p>Reported alongside the three-threads question in the same hiring manager round. A cleaner Java alternative is the initialization-on-demand holder idiom (a private static inner class holding the instance), which relies on class-loading guarantees and doesn&#8217;t require explicit synchronization or volatile. Either is acceptable; knowing both and being able to explain the trade-off is what distinguishes a strong answer.<\/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 class Singleton {\n\n    private static volatile Singleton instance;\n    private Singleton() {}\n    public static Singleton getInstance() {\n\n        if (instance == null) {\n\n            synchronized (Singleton.class) {\n\n                if (instance == null) {\n\n                    instance = new Singleton();\n\n                }\n\n            }\n\n        }\n\n        return instance;\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\">Design a simplified Linux file system<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design \/ 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 directory tree as a recursive data structure. Each node is either a file (contains content, has a parent) or a directory (contains a map from name to child node). Core operations: create file or directory (traverse path, insert node at target), read file (traverse to node, return content), list directory (return keys of the directory&#8217;s children map), rename (detach node from current parent, reattach under new name), search (BFS or DFS from a given path, match by name or content).<\/p>\n<p>Reported from a 2024 Microsoft SDE-2 onsite Round 2 (DEV Community writeup from candidate &#8220;Alex R&#8221;). The multi-level hashmap implementation was described as the candidate&#8217;s approach. The &#8220;distributed environment&#8221; follow-up asks how you&#8217;d extend this to a distributed file system: the answer involves separating metadata (namespace) from data (chunks) into separate services, which is how HDFS and GFS are structured.<\/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 FileSystem:\n\n    def __init__(self):\n\n        self.root = {\u201c__type\u201d: \u201cdir\u201d, \u201c__children\u201d: {}}\n    def _traverse(self, path):\n\n        parts = [p for p in path.split(\u201c\/\u201d) if p]\n\n        node = self.root\n\n        for part in parts:\n\n            node = node[\u201d__children\u201d][part]\n\n        return node\n    def mkdir(self, path):\n\n        parts = [p for p in path.split(\u201c\/\u201d) if p]\n\n        node = self.root\n\n        for part in parts:\n\n            if part not in node[\u201d__children\u201d]:\n\n                node[\u201d__children\u201d][part] = {\u201c__type\u201d: \u201cdir\u201d, \u201c__children\u201d: {}}\n\n            node = node[\u201d__children\u201d][part]\n    def create_file(self, path, content=\u201d\u201d):\n\n        parts = [p for p in path.split(\u201c\/\u201d) if p]\n\n        dir_node = self._traverse(\u201c\/\u201d + \u201c\/\u201d.join(parts[:-1])) if len(parts) &gt; 1 else self.root\n\n        dir_node[\u201d__children\u201d][parts[-1]] = {\u201c__type\u201d: \u201cfile\u201d, \u201c__content\u201d: content}\n    def read_file(self, path):\n\n        node = self._traverse(path)\n\n        return node[\u201d__content\u201d]\n    def ls(self, path):\n\n        node = self._traverse(path) if path != \u201c\/\u201d else self.root\n\n        return list(node[\u201d__children\u201d].keys())\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design an OTP (one-time password) service<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System 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>Generation: create a cryptographically random 6-digit code, store it in a fast key-value store (Redis with a TTL of 5 to 10 minutes) keyed by the user identifier. On verification, look up the key, compare the submitted code, then immediately delete the key to prevent reuse (delete-on-read is critical). Uniqueness across concurrent generation requests: the write is a Redis SET with NX (only write if key doesn&#8217;t exist), or accept overwrite and update the TTL.<\/p>\n<p>Rate limiting is the most important follow-up: without it, an attacker can enumerate the 6-digit space (1M combinations) faster than the TTL expires. Standard mitigations: limit to 3 to 5 attempts per user per TTL window, add exponential backoff on failure, and consider a 30-second reuse window before allowing re-generation. Reported from a 2024 Microsoft SDE-2 hiring manager round (GeeksforGeeks candidate account).<\/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 music streaming service (low-level design, Spotify-like)<\/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: Song, Album, Artist, Playlist, User. Song has audio data (stored as blob URL, not in the DB), metadata (title, duration, artist ID, album ID). Playlist is a many-to-many join between User and Song with an ordering field. Playback state: current song, position in seconds, shuffle seed, repeat mode. Key design patterns: Factory for creating different player states, Strategy for shuffle algorithms, Observer for updating recently-played and recommendation signals when a song completes.<\/p>\n<p>Reported as a low-level design round question at Microsoft SDE-2 (L61, Hyderabad, 2025). The factory design pattern, immutability, and abstraction were specifically noted as the focus. Microsoft&#8217;s LLD rounds care about clean OOP design and whether your class hierarchy makes future extension cheap, not about producing a perfect schema on the first pass.<\/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 parking lot system (object-oriented design)<\/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 core entities as classes: ParkingLot (holds a collection of Levels), Level (holds Spots of different sizes), Spot (has a type such as compact, large, or handicapped, and a status of free or occupied), and Vehicle (has a size that must match a compatible spot type). A ParkingSpotAssigner interface lets you swap assignment strategies, nearest-available versus load-balanced across levels, without touching the rest of the class hierarchy, the same Strategy pattern that shows up in the music-streaming LLD question above.<\/p>\n<p>This is one of the most frequently reported low-level design questions across Microsoft&#8217;s platform and Windows-adjacent teams, cited in multiple 2024-2025 candidate write-ups as a 45-minute LLD round on its own rather than a warm-up. The usual follow-up: add hourly-rate billing with different rates per vehicle type, then add a reservation system that holds a spot before the vehicle arrives. Both extensions should slot into the existing class design without forcing a rewrite of ParkingLot or 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 an elevator system for a multi-story building (object-oriented design)<\/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 classes: Elevator (current floor, direction, a queue of requested floors), ElevatorController (owns multiple Elevator instances, decides which elevator answers each new request), and Request (source floor, destination floor, direction). The interesting design decision sits inside the controller&#8217;s dispatch algorithm: the simplest version assigns the nearest idle elevator; a more realistic version scores every elevator by direction match and distance and picks the lowest-cost one, closer to how SCAN and LOOK disk-scheduling algorithms work.<\/p>\n<p>Reported as a Microsoft low-level design round question, usually for candidates on teams closer to Windows, devices, or Surface hardware integration. Interviewers push on the same two follow-ups almost every time: what happens when two elevators tie for a request (tie-break deterministically, don&#8217;t just pick the first one found), and how do you avoid starving requests at the extreme top or bottom floor when the building gets busy in the middle.<\/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 rate limiter for a public API<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System 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>Token bucket is the default answer: each client gets a bucket that refills at a fixed rate up to a max capacity, and each request consumes one token; if the bucket is empty, the request gets rejected or queued. Sliding-window log and sliding-window counter are the two alternatives worth naming, with sliding-window counter as the practical middle ground between token bucket&#8217;s burstiness and a full log&#8217;s memory cost. At Microsoft&#8217;s Azure-flavored scale, the bucket state usually lives in a fast distributed store like Redis, with a Lua script or transaction ensuring the check-and-decrement happens atomically across concurrent requests.<\/p>\n<p>Rate limiting comes up both as a standalone design question and as a follow-up tacked onto the OTP-service question earlier on this page, which is itself about preventing brute-force enumeration. Multiple 2024-2025 Microsoft SDE-2 accounts describe it as a design-round topic when the interviewer works on an API gateway or developer-platform team. The sharpest follow-up: how do you rate-limit fairly across a fleet of gateway instances without a single global counter becoming the bottleneck? The answer involves either a centralized counter with a short TTL or approximate counting with periodic reconciliation.<\/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 time\nclass TokenBucket:\n\n    def __init__(self, capacity, refill_rate):\n\n        self.capacity = capacity\n\n        self.tokens = capacity\n\n        self.refill_rate = refill_rate  # tokens per second\n\n        self.last_refill = time.time()\n    def allow_request(self):\n\n        now = time.time()\n\n        elapsed = now \u2013 self.last_refill\n\n        self.tokens = min(self.capacity, self.tokens + elapsed * self.refill_rate)\n\n        self.last_refill = now\n\n        if self.tokens &gt;= 1:\n\n            self.tokens -= 1\n\n            return True\n\n        return False\n<\/code><\/pre><\/div><br \/>\n<\/div><\/div><\/div>\n<div class=\"iq-qa\"><button class=\"iq-qa__q\" type=\"button\" aria-expanded=\"false\"><span class=\"iq-qa__qtext\">Design a distributed cache (Redis-like system)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Start with the interface: read\/write with TTL support, eviction policy (LRU default, configurable), and consistency requirements. Partition the key space using consistent hashing so nodes can be added or removed without a full rehash. Replication: each partition has a primary and N replicas; writes go to the primary and are asynchronously replicated, which means stale reads are possible. Discuss the CAP trade-off explicitly: Redis prioritizes availability over strong consistency (AP), which is the right call for a cache that&#8217;s not the system of record.<\/p>\n<p>This exact scenario (implement LRU cache, extend for distribution) was reported in a 2024 Microsoft SDE-2 Round 3 coding and design round. The interviewer asked candidates to address concurrent updates, the CAP theorem, and data consistency. At the SDE-2 level, the expected design doesn&#8217;t need to be a complete production spec, but you should be able to reason through: what happens when a node goes down? What happens when you add a node mid-traffic?<\/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 Microsoft Teams chat (real-time messaging)<\/span><span class=\"iq-qa__meta\"><span class=\"iq-qa__tag\">System Design<\/span><span class=\"iq-badge iq-badge--hard\">Hard<\/span><span class=\"iq-qa__chev\" aria-hidden=\"true\"><\/span><\/span><\/button><div class=\"iq-qa__a\"><div class=\"iq-qa__a-inner\"><\/p>\n<p>Message ingestion: HTTP write to a message service, which writes to a durable message queue (Azure Service Bus or equivalent). Delivery to recipients: WebSocket connections from clients to a connection gateway; gateway subscribes to the user&#8217;s message channel and pushes on receipt. Message ordering: assign monotonic sequence numbers at write time per channel. Presence (online\/away\/offline): heartbeat from client every 30 seconds, TTL-expiring record in a fast store (Redis), read on channel open.<\/p>\n<p>Read receipts and typing indicators are common follow-up design elements. Read receipts require a per-user per-message state record, which at Teams scale (hundreds of millions of users, billions of messages) means you need a schema that doesn&#8217;t fan out to all senders on every read. The pattern: batch read receipts and flush asynchronously every 5 to 10 seconds rather than acknowledging immediately on every message open.<\/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 Microsoft loops<\/div><div class=\"iq-callout__body\"><\/p>\n<p>Candidates who run Microsoft SDE-2 practice sessions through LastRoundAI show a consistent failure pattern that doesn&#8217;t show up in prep guides. The failure isn&#8217;t usually on the hard LeetCode question or the system design diagram. It shows up in the behavioral layer that&#8217;s embedded in every technical round.<\/p>\n<p>Microsoft interviewers ask &#8220;Why did you make that choice?&#8221; not to confirm your architecture is correct but to test whether you can describe a trade-off without sounding defensive. Candidates who treat every design question as having one right answer, and who argue for their first approach rather than exploring alternatives out loud, score poorly on the behavioral dimensions even when their technical answer is solid.<\/p>\n<p>The second pattern we see: candidates who prepare for behavioral questions in isolation from technical preparation. Microsoft&#8217;s &#8220;tell me about a time you failed&#8221; questions frequently end with &#8220;and what would you do differently?&#8221; and the strongest answers reference a technical approach the candidate would change. Behavioral and technical preparation at Microsoft are not separate workstreams. They should be the same workstream.<\/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\": \"What level is SDE-2 at Microsoft?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"SDE-2 at Microsoft spans Level 61 and Level 62 internally. Level 61 typically requires 2 to 5 years of experience; Level 62 requires 4 to 6 years. Total compensation averages around $197K at L61 and $207K at L62. Level adjudication is sometimes decided post-loop based on how senior your answers read during the interview.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How long does the Microsoft SDE-2 interview process take?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Most candidates report 6 to 10 weeks from application to verbal offer. Internal referrals can compress this to 4 to 5 weeks. The online assessment or phone screen happens within 2 weeks of applying, the virtual onsite loop 2 to 4 weeks after that, and offer turnaround 1 to 2 weeks post-debrief.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is the AA round at Microsoft and should I be nervous about it?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The AA (As Appropriate) round is an additional interview conducted by a senior engineer or principal within the same org. Getting invited is generally a positive signal. Content varies: some AA interviewers give a coding question plus behavioral, others focus on systems discussion or on selling Microsoft to a candidate they want to hire. Treat it like any other loop round.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Does Microsoft ask system design questions at SDE-2 level?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes, for Level 61 and Level 62 positions. Expect one dedicated design round of 45 to 60 minutes. Some loops also include a low-level design (LLD) round focused on object-oriented class design, particularly for platform or API teams. Ask your recruiter before the loop whether HLD and LLD rounds are both included.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How important is behavioral preparation for a Microsoft SDE-2 interview?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Very important. Microsoft evaluates behavioral signals in every round using the growth mindset framework active company-wide since 2014. Candidates who perform well technically but signal know-it-all behavior in their stories have failed loops despite strong coding scores. Have 4 to 5 STAR stories ready with genuine failure examples and genuine learning outcomes.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What programming languages does Microsoft accept for coding interviews?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Microsoft accepts any major language: Python, Java, C#, C++, and JavaScript are all reported from recent loops. There is no scoring advantage for using C# unless the role is explicitly .NET-focused. Use whichever language you're strongest in.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How many coding rounds are in the Microsoft SDE-2 loop?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Typically 2 to 3 dedicated coding rounds in the virtual onsite loop, plus earlier coding in the OA or phone screen. A hiring-manager round often adds one more coding question alongside behavioral topics. The exact count depends on whether a dedicated system design round and an AA round are part of the specific loop.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Is LeetCode practice alone enough to prepare for Microsoft's coding rounds?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"No. The algorithmic difficulty sits at LeetCode Medium, which most candidates with 150 to 200 problems of practice can handle. What LeetCode alone doesn't build is narrating your reasoning out loud while coding, which Microsoft interviewers weight heavily. Practicing problems while explaining the approach to another person closes that gap.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"If I don't get invited to an AA round, does that mean I failed the loop?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Not necessarily. Some teams and levels skip the AA round as a matter of process regardless of loop performance. Getting an AA invite is a positive signal rather than skipping it being a negative one. Ask your recruiter directly whether an AA round is part of your specific loop rather than assuming.\"\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\/amazon-sde-2\"><span class=\"iq-rel__t\">Amazon SDE-2 Interview Questions (2026): What They Actually Ask<\/span><span class=\"iq-rel__arrow\" aria-hidden=\"true\">&rarr;<\/span><\/a><a class=\"iq-rel__card\" href=\"https:\/\/lastroundai.com\/interview-questions\/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\/apple\"><span class=\"iq-rel__t\">Apple Software Engineer Interview Questions (2026): What They Actually Ask<\/span><span class=\"iq-rel__arrow\" aria-hidden=\"true\">&rarr;<\/span><\/a><a class=\"iq-rel__card\" href=\"https:\/\/lastroundai.com\/interview-questions\/azure\"><span class=\"iq-rel__t\">Azure Interview Questions (2026): 30 Most Asked, With Answers<\/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:\/\/dev.to\/alexr\/microsoft-interview-tips-and-insights-from-successful-sde-2-application-offer-2024-232f\" target=\"_blank\" rel=\"nofollow noopener\">DEV Community (Alex R, 2024 SDE-2 offer writeup)<\/a><\/li><li><a href=\"https:\/\/www.glassdoor.com\/Interview\/Microsoft-Software-Development-Engineer-II-Interview-Questions-EI_IE1651.0,9_KO10,42.htm\" target=\"_blank\" rel=\"nofollow noopener\">Glassdoor Microsoft SDE-2 Interview Questions<\/a><\/li><li><a href=\"https:\/\/www.geeksforgeeks.org\/microsoft-interview-experience-for-sde-2-5\/\" target=\"_blank\" rel=\"nofollow noopener\">GeeksforGeeks Microsoft SDE-2 Experience (L62, 2024)<\/a><\/li><li><a href=\"https:\/\/prepfully.com\/interview-guides\/microsoft-software-engineer-interview-guide\" target=\"_blank\" rel=\"nofollow noopener\">Prepfully Microsoft SDE Interview Guide<\/a><\/li><li><a href=\"https:\/\/leetcode.com\/discuss\/post\/7541629\/interview-experience-microsoft-sde-2l61-qvanx\/\" target=\"_blank\" rel=\"nofollow noopener\">LeetCode Discuss Microsoft SDE-2 (L61 Hyderabad, 2025)<\/a><\/li><li><a href=\"https:\/\/www.interviewquery.com\/interview-guides\/microsoft-software-engineer\" target=\"_blank\" rel=\"nofollow noopener\">InterviewQuery Microsoft SDE Guide<\/a><\/li><\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Microsoft SDE-2 loop has a reputation for being approachable, and in some ways it is: the coding difficulty sits mostly at LeetCode Medium, the behavioral questions are predictable if you know what Microsoft actually cares about, and the process runs on a well-worn track. What candidates underestimate is how tightly behavioral signal is woven&#8230;<\/p>\n","protected":false},"author":6,"featured_media":1732,"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-960","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>Microsoft SDE-2 Interview Questions (2026) | LastRoundAI<\/title>\n<meta name=\"description\" content=\"Real Microsoft SDE-2 interview questions for 2026: coding, system design, behavioral, and the AA round. Based on verified candidate reports from 2024-2025.\" \/>\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\/microsoft-sde\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microsoft SDE-2 Interview Questions (2026) | LastRoundAI\" \/>\n<meta property=\"og:description\" content=\"Real Microsoft SDE-2 interview questions for 2026: coding, system design, behavioral, and the AA round. Based on verified candidate reports from 2024-2025.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde\" \/>\n<meta property=\"og:site_name\" content=\"LastRound AI\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-19T05:24:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-microsoft-sde-og.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"25 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/microsoft-sde\",\"url\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/microsoft-sde\",\"name\":\"Microsoft SDE-2 Interview Questions (2026) | LastRoundAI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/microsoft-sde#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/microsoft-sde#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/iq-microsoft-sde-og.png\",\"datePublished\":\"2026-06-25T14:43:20+00:00\",\"dateModified\":\"2026-07-19T05:24:09+00:00\",\"description\":\"Real Microsoft SDE-2 interview questions for 2026: coding, system design, behavioral, and the AA round. Based on verified candidate reports from 2024-2025.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/microsoft-sde#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/microsoft-sde\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/microsoft-sde#primaryimage\",\"url\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/iq-microsoft-sde-og.png\",\"contentUrl\":\"https:\\\/\\\/lastroundai.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/iq-microsoft-sde-og.png\",\"width\":1200,\"height\":630,\"caption\":\"Microsoft SDE-2 interview questions \u2014 LastRoundAI\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/lastroundai.com\\\/interview-questions\\\/microsoft-sde#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\":\"Microsoft 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":"Microsoft SDE-2 Interview Questions (2026) | LastRoundAI","description":"Real Microsoft SDE-2 interview questions for 2026: coding, system design, behavioral, and the AA round. Based on verified candidate reports from 2024-2025.","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\/microsoft-sde","og_locale":"en_US","og_type":"article","og_title":"Microsoft SDE-2 Interview Questions (2026) | LastRoundAI","og_description":"Real Microsoft SDE-2 interview questions for 2026: coding, system design, behavioral, and the AA round. Based on verified candidate reports from 2024-2025.","og_url":"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde","og_site_name":"LastRound AI","article_modified_time":"2026-07-19T05:24:09+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-microsoft-sde-og.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"25 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde","url":"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde","name":"Microsoft SDE-2 Interview Questions (2026) | LastRoundAI","isPartOf":{"@id":"https:\/\/lastroundai.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde#primaryimage"},"image":{"@id":"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde#primaryimage"},"thumbnailUrl":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-microsoft-sde-og.png","datePublished":"2026-06-25T14:43:20+00:00","dateModified":"2026-07-19T05:24:09+00:00","description":"Real Microsoft SDE-2 interview questions for 2026: coding, system design, behavioral, and the AA round. Based on verified candidate reports from 2024-2025.","breadcrumb":{"@id":"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/lastroundai.com\/interview-questions\/microsoft-sde"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde#primaryimage","url":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-microsoft-sde-og.png","contentUrl":"https:\/\/lastroundai.com\/blog\/wp-content\/uploads\/2026\/07\/iq-microsoft-sde-og.png","width":1200,"height":630,"caption":"Microsoft SDE-2 interview questions \u2014 LastRoundAI"},{"@type":"BreadcrumbList","@id":"https:\/\/lastroundai.com\/interview-questions\/microsoft-sde#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":"Microsoft 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\/960","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/comments?post=960"}],"version-history":[{"count":4,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/iq\/960\/revisions"}],"predecessor-version":[{"id":1837,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/iq\/960\/revisions\/1837"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/media\/1732"}],"wp:attachment":[{"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/media?parent=960"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lastroundai.com\/blog\/wp-json\/wp\/v2\/tags?post=960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}