First I just wanted to say 'thanks!' to all the rad things people said in the commments of the previous post. You guys are cool. How amazing is it that I got notes from all over the globe? I love working in this business.
Anyway, this post is going to be a long one because it's about my Microsoft interview. That is actually an important distinction, because from what I have read online (there is *lots* of information online about interviewing there), I feel like my experience was somewhat unique.
The whole thing reminded a lot of a mideivel courtship.
Step 1: A love letter.
Somewhere around September of last year, I submitted my resume to the careers dropbox on www.microsoft.com. Didn't really think it would come to anything, I was just bored. As it turns out, they really do read those things.
Step 2: She notices me.
Then, on March 24th of this year, the strangest thing happened. I got an email about my microsoft.com profile. A recruiter sent it to me asking if I was interested in applying for a job in Redmond working on MSN. Was I? Hell, yeah I was.
I didn't actually meet every single requirement listed on the e-mail (7 years experience, BS in comp sci, etc), but I figured I might as well give it a try.
Step 3: Caste compatibility (the email questionaire).
About a week later, I received another form letter from the recruiter which contained many questions I was meant to answer and send back. The questions were designed to weed out the complete idiots from not-so-moronic. For example:
- How have you improved your programming skills in the past year?
- How do you learn about new technology and stay up-to-date? Most interesting new technology?
- What is your greatest technical weakness or an area you've been working to improve?
If you can't answer softball questions like these in a reasonable way via email, you really have no business applying for any job as a programmer.
A few days later, I heard back from the recruiter and apparently I answered well enough on the cheeseball questions so she set up a phone screen.
Step 4: Political/Religious Compatibility (the HR phone screen).
The phone screen consist of a lot of psuedo-technical questions. By which, I mean somewhat technical questions that are simple enough that an answer can be provided beforehand to an interviewer who doesn't actually understand the question. For instance:
- How long would it take you to write the code to reverse a link list?
- How would you declare a pointer to char in C?
- What's the difference between clustered and non-clustered indexes in SQL Server?
I waited about a week to hear back from the recruiter, but she never called. I started to get impatient. I thought I had done pretty well, but I started to second-guess myself.
I finally broke down and called her. She said that she although I did OK, she thought I hadn't done well enough on the C/C++ portion to justify sending me on to the technical screen. I am not in fact very good at C or C++. But I had gotten every C/C++ question right except for one, so I challenged her on that point.
After looking over her notes for a second, she comes back on the line and embarassed, tells me she had gotten me confused with another candidate! She scheduled a technical phone screen for one week later.
Step 5: Formal Introduction (the technical phone screen).
The phone screen turned out to be a really fun experience. The guy I was speaking with introduced himself as a long-time Microsoft programmer. When telling him about a recent project I enjoyed, he said, in his words, "I want to feel the bits between my toes." Talk about nerdy :).
He asked some design and implementation quesitons about a recent project and then we jumped into the coding.
The format is that you write the code on your computer and email it to the interviewer. They give you about 3 minutes. My question was:
Find the intersection of two rectangles.
After that we did some testing questions and that was it. A couple days later my HR contact called back to tell me, improbably, that I had passed the phone screen and would be going to Seattle for an in-person interview!
Step 6: Invited Home for Dinner (The in-person interview)
Going to Microsoft for an in-person interview is an amazing experience. In contrast to interviewing at other companies, where you feel like an intruder and unwelcome, Microsoft really makes you feel like they want you to succeed.
All expenses are taken care of: plane tickets, lodging, food, snacks, the works. It's not lavish, but it's very comfortable. A world of difference from what most companies do for their recruits.
I was housed in an average-but-comfortable Courtyard Marriott 1 block from campus where a bunch of other candidates and Microsoft wooers were staying.
My interviews took place over two full days, about 7 hours each. I had four interviews the first day and 6 the second, plus "lunch interviews" which are more casual.
The technical questions I was asked fell into roughly into three categories.
- Compare and contrast SQL Server with MySQL.
- Compare and contrast stored procedures and dynamic SQL.
- Describe a standard 3-tier architecture and the interfaces between each tier.
- Compare and contrast a rich client and browser-based web application .
- Compare and contrast WS and remoting protocols.
- Design the data structures for the game battleship.
- Consider the Dead Sea Scrolls. Imagine that you have these torn up old shreds of paper with ancient words on them. You want to develop an application that will display one sheet at a time on the screen.
When the user left-clicks a word, the page containing the previous occurence of that word is displayed and the word is highlighted. When the user right-clicks a word, the page containing the next occurence is displayed and the word is highlighted. When the user double-clicks a word, the definition is displayed.
How would you design the application?
- Given an array of the counties in NY represented as arrays of line segments, find the collection of line segments which represent the outline of the state.
- Consider an SOA rich-client application used by several international vendors, where one vendor sees bandwidth usage far exceeding what would be expected based on their usage. What steps would you follow to debug the problem?
- Imagine a trainyard. The purpose of a trainyard is to reorder trains so that they are most efficiently grouped for outbound travel. The basic unit of a trainyard is a piece of track which looks like the figure below.
The train operator can perform three operations: move a car from the source to the spur, from the source to the destination, or from the spur to the destination. So, for example, he could reverse a train by moving each car onto the spur and then moving each car onto the destination.
Write a function which, given an array of integers representing the order of cars on the source, and another representing the order of cars desired on the destination, prints instructions telling the trainyard operator which operations to perform to reorder the train correctly.
1 2 3 4 5 6 7 8 9 10
Trainyard Track: ---------------------------------------------- Source Destination ------------ -------------------------- +--+ +-- +--+ +--+ +--+ +--+ Spur +--+ +--+ +--+
- Implement a function which, given the integer value of the hours and minutes hands of a clock, returns the measure of the degrees between them.
- Find the lowest valued node in a Binary Search Tree (BST) greater than or equal to a a certain value.
- Verify that a given BST is valid.
- Given the following database table, which represents the history of user account statuses, give the query that returns the users which had a certain status on a certain day.
1 2 3 4 5 6 7 8
STATUS_HISTORY ---------------------------------- User StartDate Status ---------------------------------- Bob June 5 Paid Jane June 12 Paid Max July 1 Overdue Bob July 1 Overdue
So say, for example, you wanted to find all users who were overdue on July 5th.
- Implement the datastructures for a Trie and a function to populate it based off a page of text
General Advice for the Hopeful
My overall impression was that the people who do interviewing at Microsoft are really cool and laid back. Nobody gave me a hard time about my education, nobody insisted that I have 6 years hardcore experience in XYZ vertical. They really are just concerned with how well you have the potential to do.
With that said, if you really do want to work at a company like this, all you have to do is go in there and show them that side of you. It's a surprisingly honest process.
Another thing I think it was important was to remember who my audience was at each stage.
In the beginning, when you submit your profile, your audience is a machine and a quick human filter. You need to be keyword-heavy, professional, and show some enthusiasm to appeal to the human filter. But mainly you're just trying to get a call. You want to seem right for many different types of positions.
Later on, your audience is an HR representative. He or she is not a programmer, so again, you're just trying to avoid elimination. Don't say "no" to anything. Chances are good that you at least know something about what he or she is asking.
As the process goes on, you talk to a real programmer during the phone screen and then a lot of real programmers when you go to the campus. At this stage, you can be a lot more personable. You have gotten past the weed-out stage, and now you want to gamble a little bit on leaving a lasting positive impression.
Also remember that from the tech screen on, everyone you talk to probably has more experience then you. As my friend Chris says, "Just assume everyone you talk to is smarter than you." Resist the temptation to exagerate, because they will probably be able to catch you, and that will definately get you eliminated.
From what my recruiter says, they hire about 1 for every 4-10 people who go to Redmond, so if you get that far your odds are pretty good. Just be nerdy, likeable, and excited. I think that is what they want to see most.