I applied to a lot of roles on the Microsoft Career Site. Out of the blue, I got an email, followed by a coordinated call from a Microsoft recruiter, for a role I hadn't applied to. He explained the role as best he could, asked me a few simple data structure-related questions, and once I passed, scheduled a phone screen with someone from the team.
The phone screen was probably the hardest interview of them all. The coding question was simple; however, I came up with a non-optimal solution. I was able to rework the whole solution to an optimal one in the end. Next, he asked me some OS concepts that were pretty generic and you should know from any undergrad OS course you should have taken. Since I'd used Java as my coding language, he was wary of my abilities to handle pointers. He asked me about it, and I told him that it'd been a while since I'd used them; however, I was willing to answer any questions he had to test my knowledge on it. He asked me a data structure manipulation question (it shows up on many interview reviews posted here) using pointers. I had 5 minutes remaining on the call, so I did the best I could. He seemed satisfied with the solution and passed me.
The on-site interviews:
I drove to the office with the rental car they provided me and waited in the lobby for the recruiter. He spoke to me about what the day would look like and what I should expect. He explained that there were 4 tech interviews scheduled and, if those went well, there would be a fifth one with a high-level manager.
The first interview was easy; nothing much to report. Next was a lunch interview. I ended up answering all his questions and only then ate so as to not get distracted. It was decent pizza from the cafeteria too. :)
The third interview was a simple data structure manipulation question. No way that any decent CS major could screw this up. After the coding, he asked me a LOT of OS-related questions. The fourth interview (and what I feared would be my last one) was the best one of the lot. The guy was pretty high up in the team and had so much energy. He started off by explaining his background and what the team does in great detail. He also asked me about my last three rounds and what I thought went well or what I could have done better. His coding question was fairly easy, and I took my time and asked clarifying questions to make sure I knew exactly what he wanted. The last thing I wanted to do was screw up an easy question with a senior team member.
I did end up getting to the fifth round. This was the most relaxed of the lot, and the manager spoke a lot about the culture in the company and answered a lot of my questions about the role and the team. Just remember that if you can't think of asking any questions, explain that you've already asked question X or Y and this is your understanding. Sitting there with a blank expression just makes the interviewer think that you're not really interested in the role, since he doesn't know what you've asked the other interviewers.
After the last interview, he escorted me out of the building while we made small talk. He said that the recruiter would get back to me by possibly tomorrow. At this point, I guessed that their hiring decision was made and it was up to the recruiter to get back to me in his own time. As I sat in my car in the parking lot, I sent the recruiter an email thanking him for being very helpful and responsive through the process and that it was a pleasure working with him.
A few notes:
In case you didn't know, the company laid off a huge number of testers last year in their org restructuring. Therefore, all devs should take on the responsibility of testing their own code thoroughly. I had this at the back of my mind and made sure that every line of code was tested, as well as every corner case was at least discussed, if not taken care of (sometimes you can't write all the error-checking conditions in a short span of time). So, while it may seem that the questions were easy, without clarifying questions and high-coverage test cases, you will not get an offer.
One last thing is to have a lot of questions prepared: what exactly are the role's duties, what is the org structure, what is the deployment cycle and workflow. Even questions like what was their worst deployment and what happened shows an interest in how the team operates (not all questions have to be interviewer-pleasing!). Above all, treat the interview like a conversation between new acquaintances/friends. They want to gauge if they want to sit in an office/cubicle across from you every day, so that interest and camaraderie is important to them as much as it is to you. This will also relax you and improve your thought process, since you'll respond to any hints they may give you in case you get stuck. Finally, have fun.
Since I signed an NDA, I will not really post any questions.
But I can tell you that you need your data structures down pat (not red-black trees or anything that complex).
While you can memorize all the questions and algorithms out there, understanding the high-level aspects of them (backtracking, dynamic programming, simple string manipulation, etc.) pays off when you encounter a question you've never seen before.
Third, you need to know what your team does to know what they can ask. If it's a system development role, you need to brush up on your OS fundamentals, networking, etc.
Finally, prepare for any behavioral questions you could be asked. There are a ton out there online, and they pretty much cover all the ground. Linking these answers to specific projects on your resume is a certain bonus.
The following metrics were computed from 26 interview experiences for the Microsoft Software Engineer II role in Redmond, Washington.
Microsoft's interview process for their Software Engineer II 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 Engineer II interview process in Redmond, Washington.