If you are interested in working at MS then here are some good MS related interview sites:
- Microsoft Interview Questions
- Interview Questions - Microsoft, etc.
- Microsoft Interview Questions & Answers
- My Interview Experience at Microsoft
I have to editorialize here and say I completely disagree with Microsoft's approach to interviewing. As I understand it their goal is to never hire the wrong person at the cost of overlooking good people. One of their strategies is these silly puzzle tests. I admit that the people who don't like these tests are mainly people like me who suck at them, but there are other reasons as well.
Does a person know how to develop software? That's not a puzzle question. You should be able to have a conversation with someone and they should be able to impress on you their ability to develop software. As part of the conversation writing some code will come up if you direct the conversation properly. They should be able to talk to you about various methodologies, scheduling, handling bugs, build systems, designing code, writing code, dealing with customers, architect networks, deal with threads, handle messaging, dealing with managers, what to do if there's a problem, unit testing, system testing, deployment issues, and million other things that actually relate to software development.
As a contractor I was interviewed a lot. Very few people ever talked to me about how I develop software or how I think a team should develop software or how a company should develop software. It's shocking to me. Really. I am usually asked questions about trees or graphs and I can never remember that stuff. I am asked some obscure C++ question. Depending on the question I may or may not get it despite using C++ for years and years. Same with Perl. And most of the rest of the questions are usually of the same superficial nature.
Personally I think people ask these kind of questions because they themselves can't ask deeper questions. It's easier to ask a silly standard puzzle question because that doesn't take a deep knowledge of software. Any smart person can do it. But smart != good developer. It takes more than that or otherwise I wouldn't have a job!
Is hiring the wrong person for a few months the worst outcome? You can always fire someone after a probationary period. Is it better to hire someone who has no feel for software development, yet knows how to move mount Fuji?