网络资源的拷贝粘贴 备份参考之用


21 January 2008

Interview 【转载】

The Microsoft Interview Process

[by Dave Saunders
on 3/25/2007]

I recently interviewed at Microsoft for a software development position. Before being interviewed I read all the books and looked up other people's interview experiences on the web, but in the end it was a lot different than I expected. The following is a general guide to interviewing at Microsoft and indeed will generally apply to interviewing at just about any major technical coroporation.

Beginning

So first things first, submitting your resume. Here it is generally a good idea to try and find someone who either works at Microsoft or knows someone who does. This will probably help get your resume looked at more closely, as Microsoft gives bonuses to current employees who end up recommending people who eventually get hired. So if you know someone who works there and they like you or like your resume, they are likely to " champion" your cause a bit, maybe because they like you, but also because of the bonus they get if you are hired. (somewhere to the tune of around $2500)

So now you have your resume looked at and you've been contacted for a phone interview. What I've read in books is that you should study puzzles and these sorts of things, but that appears to be outdated (at least for the software development positions). More likely is that you will be asked to develop algorithms (more on that later). You will also be asked standard questions, depending on your interviewer, such as

"Why do you like computer science?

Why Microsoft?

What are your passions?

If you had a choice between a software project that is guaranteed to make a lot of money but is not very interesting to you, or one that is extremely interesting to you, but may not ever see the light of day, which would you choose?

What kind of projects have you worked on in the past?

Was there ever a situation in one of these projects where someone disagreed with what you were doing, but you failed or were successful in arguing your case?

What is the biggest challenge you've ever faced in a project?

Is there ever a time in a project you've worked on where you were doing something one way and ended up deciding to do the project completely differently after you'd already gotten well into the project ?

What do you typically do to test code that you develop?

What kind of projects interest you?"

etc.

Basically you should expect to be an expert on your resume and expect them to ask you every possible question about projects you've worked on and past experiences.


Also before your phone interview you should really brush up on your basic computing algorithms like linked lists, hash tables, trees, etc. These are common data structures and so are "fair game" for an interview. You should also make yourself aware or brush up on "big O" notation and that sort of thing. It' s likely if you are applying for a software development position that you are already well versed in this, but just in case you are not, look it up. You will be asked to evaluate the efficiency of your algorithms asymptotically.

Finally before the phone interview make sure you have a list of questions to ask your interviewer at the end. These should be questions that you are genuinely interested to hear the answer to. For instance you could ask things like

"What do you like best about working at Microsoft?

If they have worked other places how would they compare working at Microsoft to working at those places? (this is a good question to get them to reveal the things they don't like about working at Microsoft, without having to explicitly ask. This way you can make a better decision about whether you want to work there)

What kind of projects have you worked on at Microsoft?

What is the work environment like at Microsoft?

What are the hours like at Microsoft?"

etc.

With these questions it' s probably not a good idea to ask things that are "abrasive", such as "What do you like least about working at Microsoft?", but again you should ask questions that genuinely give them the impression that you are very interested in Microsoft. In particular asking them questions about themselves and their personal experiences is a great idea. This shifts the focus off you and in general people like talking about themselves, so if you let them talk about themselves, it' s human nature for them to think highly of you. Just make sure to listen to their answers so, if appropriate, you can comment on them. Plus, if you can get the questions in before they are "done with you", you might be able to kill some of the time they were supposed to be interviewing you, and thus be able to avoid more hard algorithmic questions (though if you did badly up to that point, you may want to get more hard questions to show that you can actually do some :-).


So now you are through your phone interview and are going for the full day rounds. The first thing you can expect here is for Microsoft to "wine and dine" you. At this point they are very interested in you and think you have the "right stuff". They will pay for your flight if needed, food, hotel , some entertainment, transportation, etc.

I personally only live twenty miles from Microsoft's main campus, but they were still more than happy to put me up in a nice hotel for a couple nights and give my $75 a day for food as well as some other freebies.

It's a good idea before your interview to make a trek to Microsoft's campus. It is BIG and you might have trouble finding your starting building. However, after the starting point, they will shuttle you around in cars for the rest of the process.

Once the big day has arrived you go to your starting building (probably building 19) and they will greet you at the door with some extremely friendly greeters. These will instruct you on what you are to do next and generally try to make you feel relaxed. You will then go talk to a receptionist who will walk you through in more detail what you are to be doing that day.

Then you wait for your recruiter. They have snacks and things here if you like while you wait. Your recruiter will then come pick you up and do a non-technical interview, just kind of the standard interview questions that you'd get at any job. They will also go through again in great detail what you will be doing that day. It' s nice to start out with this "easy" interview. It helps make you feel relaxed.

Next they will take you to one of their shuttle cars and tell the driver where to take you. Depending on if you are interviewing with more than one department, you may get shuttled around a lot, but these are very comfy cars and the drivers are friendly.

So then you will be bounced around from office to office being interviewed by different people, who are also the actual people you will be working with if you get hired. So this is a chance for them to get to know you, as well as you to get to know them.

They will likely be passing notes about how you are doing as you progress up to "the boss". Expect these interviews to get progressively harder, in terms of algorithmic questions you will get. This is a good sign; it means you are doing well and previous interviewers have passed on that you solved their questions well and you needed more of a challenge.

Depending on how you are doing you are likely to experience two different processes. If you are doing poorly and they no longer think you are a good candidate for a position, about the third interview they may say something like this "well we had you scheduled for another interview with my boss, but it turns out ( s)he couldn't come in today, so we had to cancel… bla bla bla". This means you didn't get the position, though they won't tell you that then. Out of a courtesy to you for probably coming a long way, they tend to always give you at least three interviews though.

On the other hand, if you are doing well you will eventually get to "the boss". "The Boss" won't waste his/her time on you if you aren't doing well so this is a great sign. This doesn't mean you got the job, but it means that you are still a strong candidate. The boss is likely not to ask you technical questions. That is what their "underlings" are for. Here you are likely to get more questions from them that are trying to discern your personality, work ethic, etc. They want to see if you will be a good fit with their team and what they are currently working on. Make sure to have good questions for the boss, as they want to see that you have an interest in what they are working on.

You can completely blow it at this point if you don't answer/ask the way the boss wants you to, or thinks you should to be a good fit for their team. Keep this in mind if you really need/want the job. However also keep in mind that maybe honesty is the best policy here. If you are honest and they don't think you are a good fit, maybe you wouldn't have been and thus probably wouldn't have liked working there. But as I say, if you really really want/need the job, maybe mixing your "real" answer with what you think/know they want you to say is best (my personal opinion is to be 90% completely honest and 10% factoring in what you know they want you to say, but that's just my opinion).

One more note on this, if they happen to do part of your interview over lunch (which is likely), DO NOT let your guard down. They do this on purpose (particularly, "the boss"). They want to take you into this "comfortable" social situation of eating lunch or dinner, so that you WILL let your guard down and just be yourself. This way they can really see how you are. Don't forget you are still in an interview here, and be sure and act like it. (ie no alcohol, chew with your mouth closed, don't act like you are having lunch with your best buddy. You are being interviewed, act like it).

So now you're done. If you need a cab or whatever back to your hotel, they are more than happy to pay for it and will provide you with a little entertainment packet if you are new to the area and want to go see the sites and sounds of Seattle, again they pay for a lot of it, so why not take advantage?



Technical Questions

For the most part I don't necessarily think it does any good to study the specific technical questions they ask. It would be like studying for Jeopardy or the SAT's, in the end studying the strategy is much more important. As I said before in general, just know your common data structures and always pick the language you are most comfortable programming in for answering the question. They likely won't care what language you choose, but just in case they do pick for you, it would probably be some flavor of C, such as C, C++, C#, Java, etc. that they will ask, though it will depend on your resume and what position you are applying for.

First off when they ask you a technical question the biggest mistake you can make is to get up and go right to the board and start coding. You should first ask as many questions as possible to make sure you have gotten every possible detail about the problem before you attempt it. They may be intentionally vague, just to see if you do this.

Next, once the problem is clarified, don't start coding right away. First write out what you are going to be doing in English and the whole time you are doing this keep talking about what you are thinking. They are much more interested in how you think through a problem than in the final solution.

Once you have pretty well solved it in your mind and in English on the board, then you can start writing out your algorithm / supporting data structures. Again they are not too interested in this stage of the process, though don't let your guard down, they will be looking at your coding style, so be sure and try to write efficient, clean code. Having your problem written out in English before hand, helps you focus on writing this clean, efficient code at this stage, because you don't have to think about solving the problem at the same time. You've already got it solved, you just need to translate it into code.

Again while you are writing your code, keep talking. They still want to know exactly what you are thinking. This will also help them understand why you make certain choices in your code, in the cases where maybe there are a couple different ways you could do something and none of the ways are particularly appealing. Or in such cases where a choice could be made based on what system the algorithm would be running on (ie whether you make choices to favor memory efficiency over processor efficiency and those sorts of things)

When you are all done make sure to look through your code and think through it. You should also give yourself an example (if you are not given one) to step through your algorithm. This shows you are thorough and allows you to see if it actually works. If it ends up not working, don't worry, they will be happy that you are able to discover errors in your coding. Everyone makes errors, not everyone is good at spotting them.

At the end of each technical question they will ask you (if you haven't already mentioned it), the asymptotic complexity of your algorithm (it' s a good idea to talk about this before they ask, this shows you actively think about efficiency when coding). Also, if your code could be improved they might say something like "there are two improvements that could be made". Here they are not talking about coding style, they are genuinely talking about improvements (ie efficiency improvements). Don't panic. Look through your code carefully, look for things like storing variables like array lengths instead of computing the array length by some "array.length" every time you need it. Are there any data structures you could use to make your code more efficient? (ie, hash table, tree, linked list, etc).


Overall impression

When I was reading up on the Microsoft interview process, I was decidedly un-impressed. I thought the word puzzles/riddles would be a waste of time and not actually tell them anything about me and there were other pieces I thought were ridiculous. In the end though, now that I've gone through it, they didn't do a single one of those ridiculous things. I suspect those "ridiculous" things were just isolated instances (ie of the thousands of interviews they do every year, you are bound to get some funny stories that aren't typical). And as far as the famous Microsoft puzzles/ brain teasers, I'm told they are fazing those out as it is now not viewed as something that really tells them anything about their candidates, although for a lot of other major technical companies these are still thriving parts of the interview process (the NSA for instance releases a list of their top brain teaser questions of the year, every year).

So overall I liked the way they go about their hiring. It was extremely challenging. My "full day" round lasted 6 hours. At the end of it my brain was absolutely pulsing and dead. It took me a few hours of just staring at the ceiling in my hotel to calm it :-). It is grueling. It is hard. They want to see how you hold up in this type of situation. Just keep your cool and take the whole thing as a challenge and you will likely do fine. And overall just stick to the advice of the age old Hitchhikers' Guide to the Galaxy and "Don't Panic".


Link to this:

2 comments:

Anonymous said...

They've stopped doing those sorts of questions, although they were quite popular there several years ago.

I didn't get any either when I interviewed there last year.

Tintin said...

They still do some of those from time to time. Some of my classmates encountered such questions in this year's recruiting.

Google