The day started off at the Microsoft recruiting building. They actually have an entire building devoted to recruiting. The Microsoft campus is very nice and a lot bigger than I expected it to be. I heard anecdotally that there are perhaps 20 to 30 thousand people at MS. According to a census in 2000, the entire population of Redmond is only 45 thousand! It does actually look a bit like a university campus. At the recruiting building, I met with a recruiter who told me that I would be interviewing for the Visual Studio for Devices team and the C# team and then we chatted for a bit. I talked to 5 other people that day. What I was really looking forward to was hearing the Microsoft interview questions. You see, the Microsoft interview is kind of legendary and I was very curious to see what it would be like first-hand. A lot of people have been asking me about which questions were asked. I got the following questions:
- Reverse a linked list
- Convert an unsigned long to a string
- Describe how you would design an online multi-player version of Monopoly
- Reverse the letters of a word (i.e. "Jason" --> "nosaJ"), then reverse the words of a sentence (i.e. "All your base are belong to us" --> "us to belong are base your All")
- You have a group of items, each of which can be used as a parameter to the function better (item1, item2), which will tell you which of the two items is "better" or that none of them are clearly "better". Find the best item in the group if possible given that the better function is non-transitive (i.e. if item1 is "better" than "item2" and "item2" is better than "item3", it does not imply that "item1" is better than "item3")
I am not posting any answers to these questions. You have to solve them yourself if you're interested. :) I was a bit surprised that I didn't get any brain-teaser logic questions. I thought the questions were pretty good. They weren't so complicated that they required hours to answer, yet they were sufficient to show the interview some of your problem solving and analysis techniques. However, in my opinion, the last question was the most involved and also the most interesting. I did quite a bit of prep for this interview by reviewing data structures and algorithms material that was largely unnecessary (although I did get a chance to talk about Lamport clocks in question 3 and I used a little XOR number swapping algorithm in question 4 that was pretty neat). In retrospect, I think this was a very good thing. It doesn't seem very representative to turn down a candidate because they don't know how to implement merge sort on the spot. I knew that it probably wouldn't be necessary, but you never know right? The other thing that I liked is that virtually everyone I talked to seemed very intelligent and very interested in their work. From what I've seen, I think I would enjoy working at Microsoft. I'll find out the results of my interviews in about a week.