Initial Call:
I was referred to a (techincal) manager internally who contacted me directly. After a a casual chat he sussed out that I would need to brush up on data structure / algorithms and would call me back in 2 weeks. I picked up my algo/datastructures textbook and read through it and worked through writing simple algorithms on paper during my commute.
Official Screener:
During my official technical screening (figuring out whether they'll fly you out to redmond or not) they asked me the standard linked list question - detect if there's a loop, etc. and then asked me to create a system to organize a bunch of objects with different classifications. I ended up coming up with a dewey decimal system. I was also asked finding the common ancestor in a binary trees.
On Campus:
I got setup with somebody from HR as my first interview. I was told I could ask her anything to help me through my interview process. I asked her some random questions like " should i not mention that my last project was using google apis". To which she replied that Microsoft respects any good technology so just because they're competing, don't be afraid to talk about it.
Tech Interviews:
1. Write a function to list all prime numbers up to a maximum. Finished it in 15 minutes and then was asked to write test cases for it. I filled up one whiteboard.
2. Non-coding - was asked to test a webpage with a single inputbox and a button.
3. Remove a character from a string. Test it.
4. Walk a binary tree, breadth first. Test it. (I ran out of time with this one)
5. My as-appropriate asked me a technical question because i didn't do so well on my last question. He asked to merge two link lists. I answered it with no troubles.
My As-appropriate walked me out and waited for a shuttle with me while telling me all the seattle spots to hit up.
HR got back to me a few days later, gave me an offer and laid out the benefits of the job.
Advice:
The interviewers are interested in solving the problem, but they're very interested in "how" you solve the problem. Talk out loud. Make sure you understand the question. Walk through an example first. Write out psuedo code, then code it for real. Organize your test cases in categories.