I applied online and after about a month, I heard back and was invited to attend back-to-back interviews on campus: one with a recruiter and one with an engineer.
Both were really pleasant. The engineering interview involved a simple programming task done on a laptop: write a function that, given a string, returns whether it contains correctly matched open and closed parentheses. This was later expanded to include other types of brackets and check if all were correctly matched.
I heard back very quickly, informing me I had made it through to the final round: an on-site assessment day. I couldn't make the first couple of interview dates offered, so I was eventually invited to travel to Redmond for an interview day at the main offices. Organizing travel was very easy, and everyone involved was incredibly helpful.
On the day, I arrived at Building 111 mid-morning. I was guided around campus and taken to the commons for a free lunch. We visited the visitors' center and the company store, and were invited to buy up to $120 of discounted merchandise.
We then returned to Building 111 for the interviews. We were each allocated a division we'd be interviewing for (this was not shared before the first interview). We were each interviewed by four interviewers who asked a variety of questions covering computer science fundamentals and some advanced material. We had a ten-minute gap between each interview, during which the examiners compared notes before we were launched into the next one.
I was asked technical questions on a number of topics, including: sorting algorithms and their time and space complexities, binary trees and binary search trees, low-level computer scheduling and atomicity of operations, and an abstract data type question. I've provided examples of a small number of questions below.
These were mixed in among other behavioral questions covering attitudes, what I do for fun, what's important when implementing software, how to interact with team members, etc.
It was generally very broad with lots of interesting questions. I wouldn't say it was especially hard, but that's all relative. If you know the field and are well-prepared, you shouldn't find anything too tough.
Don't worry about making mistakes; I know I sure made a couple. The key is to check back over your solutions as you go, work with test cases, and when you identify a shortcoming, figure out how you can fix it. TALK OUT LOUD! They don't care if you get stuck in a circle as long as they can see your thought process and why it's happening. If you've overlooked something, they will happily drop a hint and see if you can rectify it.
My biggest tip would be to be friendly and relaxed, making it more of a conversation than a rigid interview. I almost got the feeling they were more interested in my personality than what I wrote on the board, so make it easy for them to like you. At the end of the day, the big question they're asking themselves is, 'Would I like to work alongside this person?', not just 'Can he do the work?'
Overall, my interview was incredibly positive. Everyone was super friendly and did their best to make me feel comfortable and relaxed. The company was very generous with arranging travel, accommodation, etc., and first and foremost, Microsoft seemed an incredible place to work. Go for it, give it your best shot, what is there to lose?
Given a binary tree, write a function that checks if it's a binary search tree.
Given a node of a binary search tree, return the node immediately bigger than it. Convert this from a recursive to an iterative approach. What is the difference between the two?
You are working for a new Ancestry.com-style website. What data structure would you use to hold the relationships? Why? Are there any alternatives?
What programming language would you use? Why? Would the scale of the website and development time impact your choices?
The following metrics were computed from 214 interview experiences for the Microsoft Software Development Engineer role in Redmond, Washington.
Microsoft's interview process for their Software Development Engineer roles in Redmond, Washington is fairly selective, failing a large portion of engineers who go through it.
Candidates reported having very good feelings for Microsoft's Software Development Engineer interview process in Redmond, Washington.