Topics: Behavioral Questions, System Design, Algorithms, String Manipulation, Data Structures, Queues, Load Balancing, Hashing, State Machines
Location: San Francisco Bay Area
Interview date: 2026-01-19
Got offer: False
Summary
Interview Rounds Overview
Round 1: Coding
Round 2: System Design + Coding
Round 3: Behavioral + Coding
Round 4: Behavioral + Coding
Details
I interviewed at Microsoft for a Software Engineer position. I felt underprepared, and I think I failed due to my coding performance, as the questions were not commonly asked interview questions.
Round 1:
Behavioral: I was asked about my current team size and how work is divided.
Coding: I was asked LeetCode 43, Multiply Strings. I needed to handle carry, align digits, use a result array of size m+n, and address edge cases like "0" and leading zeros. The interviewer also asked about the complexity (O(mn)).
Round 2:
System Design: I was asked to design a URL Shortener with features for creating short URLs, redirects, optional expiry, optional analytics, and a management backend.
Scale: 1M create/day + 1B redirect/day
Follow-up 1: How to achieve low latency in a multi-region setup (geo routing/LB).
Follow-up 2: How to handle write spikes, assuming create writes spike from 300-500 QPS to 1000 QPS, and guarantee each create is processed without loss.
The interviewer wanted to hear about Queue + Worker (and failure retry/DLQ) for surge protection.
Coding: Parse Email Addresses from Log String
Problem: Given a huge string where records are separated by semicolons. Each record represents an email, but display name/comment are optional, and the comment can be anywhere in the record. Parse all emails and return a de-duplicated list.
I used a state machine/character-by-character scan, tracking whether I was in parenthesis/quotes. A semicolon is a record separator only when not inside parenthesis/quotes. I determined the email token near the @ symbol and used a set to remove duplicates before returning.
Round 3:
Behavioral: I was asked to describe a situation where I completed a task with little information/guidance, how I progressed, what challenges I faced, and how I solved them. Follow-up questions were around how I chose priorities, whether there was a code freeze, how to maintain parity, and AB experiment rollout.
Coding: I was asked LeetCode 939, Maximum Area Rectangle. I first described the brute force n^4 solution, then was asked how to reduce it to n^3 / n^2 by reducing one loop and using a hash set to find the fourth point.
Round 4:
Behavioral: I gave a self-introduction, followed by deep-dive questions related to my introduction.
Behavioral: I was asked about a time I had a disagreement with someone during technical design/implementation, how I handled it, and how I pushed it to completion.