Microsoft | L60 | Interview Experience | Bengaluru | Offer | February 2025
Summary
I successfully navigated a multi-round interview process at Microsoft in Bengaluru, which included an online coding assessment, a DSA round, an LLD/HLD round, and a final behavioral/technical round, ultimately resulting in an offer.
Full Experience
Interview Experience
Online Coding Round (110 minutes)
This round consisted of two coding challenges that I had to complete within 110 minutes.
Question 1: Maximum Points Coverage
I was given N points on a plane and an integer perimeter. My task was to choose the lengths of sides of a rectangle to cover the maximum number of points. The rectangle's sides had to be parallel to the coordinate system axes, and the sum of their lengths needed to equal the perimeter. Points on the sides were considered covered.
Question 2: String Reconstruction in Grid
The second question involved reconstructing a string 's' using an NxN grid of characters. The grid contained empty fields (".") or uppercase English letters, with each letter appearing at most twice. I had to start with an empty string, choose any starting field, move to adjacent fields (up, down, left, right), and append visited letters to the reconstructed string. The goal was to find the minimum number of moves needed to reconstruct string 's'. Fields and letters could be revisited.
Interview Rounds
After clearing the online coding round, Round 1 and Round 2 were scheduled on the same day with a 1-hour gap.
Round 1 (1 hour)
The interviewers joined on time. They started by asking me about myself and my work, explained that this would be a DSA round, and then directly jumped onto the problem statement.
The problem given was to rotate a matrix in a clockwise direction. There were two follow-up questions: first, to implement in-place rotation, and second, to extend the solution for MxN matrices.
I coded the O(n^2) in-place solution and tested it on all edge cases. Afterward, I explained my approach for follow-up 2. Due to time restrictions, we concluded the interview. The interviewer was satisfied and wished me luck for the second round.
Round 2 (1 hour)
The interviewer joined late for this round. We spent about 15 minutes discussing the problem and then I spent 30-32 minutes coding and writing test cases. He explicitly told me that I would be judged based on the completion of the solution and writing test cases, and also asked me to follow OOP principles properly.
The problem was to design a 'Recents' folder in Mac. This was essentially an LRU cache problem with slight modifications. The requirements included adhering to OOP concepts (Encapsulation, Abstraction, Inheritance, etc.), implementing the complete code, and writing test cases covering all edge cases.
I successfully implemented the whole solution and also coded a test class where I wrote different unit test cases to validate my solution. The interviewer was satisfied, and we concluded the interview on a good note.
After clearing both rounds, Round 3 was scheduled after a 1-week gap.
Round 3 (1 hour 30 Min)
The interviewer for this round also joined late. She mentioned that this round would primarily focus on behavioral and experience-based questions, followed by a single Data Structures & Algorithms (DSA) question at the end.
We started with introductions, where both of us shared details about our work experience and current roles.
Behavioural Questions:
The interviewer asked a series of questions related to my past projects, problem-solving approach, and handling challenges. Some of the key questions I recall were:
- What do you do in your current role? (I described my current responsibilities, technologies I work with, and the impact of my work.)
- Can you describe a scenario where you built a service? Walk me through the process. (I explained a project I had worked on, covering design, architecture, implementation, and challenges.)
- Have you encountered a critical issue in production or UAT? How did you handle it? (I described a real-world incident, focusing on debugging, mitigation, and learnings.)
- Can you share a scenario where you missed a deadline? How did you handle it? (This assessed my time management, handling setbacks, and communication skills.)
After discussing these behavioral aspects, we moved on to the technical portion, where I was given a DSA problem to solve: the Word Chain Problem.
I answered all behavioral questions properly, following a CARL (Context Action Result Learnings) pattern for each answer. For the technical round, I fully solved the Word Chain problem, implemented a correct solution, and wrote a comprehensive test class to validate edge cases.
Interview Questions (5)
Given N points on a plane and an integer perimeter, choose the lengths of sides of a rectangle to cover the maximum number of points. The rectangle's sides should be parallel to the coordinate system axes, and the sum of their lengths should equal the perimeter. Points on the sides are considered covered. Example: For perimeter = 10, possible rectangle sides are 1x4, 2x3, 3x2, and 4x1. Task: Determine the maximum number of points that can be covered by the rectangle.
Given a string s and an NxN grid of characters, reconstruct s by visiting grid fields. The grid contains empty fields (".") or uppercase English letters, with each letter appearing at most twice. Rules:
- Start with an empty string and choose any starting field.
- Move to adjacent fields (up, down, left, right) in one move.
- Append visited letters to the reconstructed string (not counted as a move).
- Fields and letters can be revisited. Task: Find the minimum number of moves needed to reconstruct string s.
Design Recents folder in Mac Solution: LRU cache problem with slight modification Requirements: Adhere to OOP concepts (Encapsulation, Abstraction, Inheritance, etc.) Implement the complete code, Write test cases covering all edge cases
Given an array of strings, determine if it's possible to form a chain where each word's last three characters match the first three characters of the next word in the chain. The chain should use all words exactly once. If such a chain exists, return the sequence of words forming the chain; otherwise, return an empty array.
Example 1: Input: ["germany", "ginger", "anyfin", "ishita", "finish", "begin"] Output: ["begin", "ginger", "germany", "anyfin", "finish", "ishita"] Explanation: begin -> gin(ger) -> ger(many) -> any(fin) -> fin(ish) -> ish(ita)
Example 2: Input: ["hello", "world", "start", "begin", "final"] Output: [] Explanation: No valid chain possible as no word's first three letters match with any other word's last three letters.
Example 3: Input: ["germany", "ginger", "anyfin", "ishita", "fintsh", "finish", "begin"] Output: [] Explanation: Even though a partial chain is possible: begin -> gin(ger) -> ger(many) -> any(fin) -> fin(ish) -> ish(ita)
The answer should be [] because:
- Word "fintsh" cannot be included in any valid chain
- The problem requires ALL words to be used exactly once
- Since we can't include all words in a single chain, we return an empty array