Like other postings on this site have indicated, the standard hiring process with engineering seems to be one technical phone screen and a day of fun and games on site (provided that the phone screen went well). This was my second interview with Microsoft. Back in 2008, I interviewed for an SDET position for which I received an offer and graciously accepted. I voluntarily left the company 2 years later because I did not enjoy my work as an SDET. Contrary to what the recruiter will tell you, it's quite difficult to move around within the company once you're there. I've found that it's actually much easier to just leave the company and come back on your own terms -- which is pretty much how I did it. Although one piece of advice there: make sure you have a rock star record before leaving because they save that stuff and will review it if you return. This was a bridge that I made absolutely sure *not* to burn on my way out.
I was contacted by an MSFT recruiter about an SDE position. I did an initial phone interview with someone. He was quite personable and asked me a lot of questions about things on my resume. There was one particular personal side-project that he thought was interesting and we discussed it at great depth for maybe 45 minutes. The questions didn't feel quizzical, but rather like he was actually interested and engaged in what I had done.
Then he asked some basic work related questions around how the file system at my current company works. Next, we did some coding in a shared document. This part wasn't bad. He asked me to insert a node in to a binary search tree (BST) and then balance it. All in all, I wrote the code to insert a node, get current balance of the tree, determine the current height of any node, and the rotate_left and rotate_right functions in the case where a rotation is needed to restore the balance. It was around 120 lines of code give or take. All done in the C programming language. Not bad. The bottom line in any interview is that if it's on your resume, it's fair game.
Then they brought me on campus for a full round of interviews. They scheduled me to talk to 4 different folks which were on an itinerary that they gave to me in the lobby when I walked in. What they don't tell you though is that each interviewer is a gate-keeper to the next, so if at any point in time you don't do well, then it's "game over". If, however, you do well, you'll end up finishing the entire schedule, plus doing at 2-3 additional bonus interviews. I went in around 9:30 and left some time after 5. Keep in mind that this doesn't mean that you'll receive an offer, but if you're shown the door before you finish (minimally) what's on your schedule, that's probably a bad sign.
I went in there with my coding weapons off safety -- but I didn't feel like I was grilled as thoroughly (technically) as I should have been. I was asked a lot of design questions mostly around locking, thread synchronization, and scheduling, data compression and snapshot operations on file systems. All in all, I didn't have any trouble with anything and the interviews felt more like a conversation about the things that I am passionate about. I expected to write more code than they asked me to -- and certainly I was prepared. Each interviewer will make a recommendation to the next on where to focus their attention in an attempt to find a weakness -- similarly, they'll also recommend areas to skip if your skill level in that particular area is already of known (good) quantity. They're constantly probing in different places throughout the day, scanning for a weakness, and if you're strong in something, my observation has been that they will adjust their approach (as opposed to continuing to set'em up and allowing you to knockin'em down). I demolished the first couple of coding problems early on and I think that's why they changed vantage points to a most holistic approach -- they wanted to know if I could see the "big picture". At one point in the day, I even asked for another coding problem at which point, I was politely declined. So then I offered to give them one instead. Again, denied, lol.
My day ended sometime between 5pm and 6pm. I can't exactly remember what time it was (perhaps 5:30), but it was dark out (and cold!). Having done it twice now, the one best piece of advice I'd give to anyone is to get a lot of sleep the night before, rather than study. Studying the night before won't save you. :) Regardless of the technical level of difficulty, this process can be quite nerve-racking. Emotionally, it takes its toll and by the end, I was exhausted.
They called me three days later and said that they wanted to move forward with an offer.