Last week (10/19/07) I ended up going on an interview with Microsoft to try and obtain a position as a Software Development Engineer. Microsoft ended up flying me out and putting me into a hotel for the night (and I stayed an extra night to sight see). During my interview, I was going to be talking with the Internet Explorer and Windows Live Experience teams.
First Interview
My first interview was with a dev lead for Internet Explorer. From him, I got two technical questions.
- Implement strcmp()
- Given a function plot(int x,int y), implement drawCircle(int radius)
The first one I got fairly quickly, but it was the second one that gave me some of the biggest trouble. I’ll leave it as an activity to the reader to find out the soulutions.
Second Interview
My second interview was with another development manager. During this interview I mainly touched upon one subject, that being binary tree’s. There were several things that were asked which include:
- Implement a function that traverses a binary tree
- If someone tells you to do it in constant time, how would you?
- Do it non-recursively
The non-recursively is what made me think the hardest, and which made me have to add more properties to the structure that I already made.
Third Interview
My third interview was when I finally switched over to interviewing with the Windows Live Experience group. My questions mostly consisted mostly of HR type of questions such as:
- Have you ever worked in a team based project?
- What kinds of complications did you have?
- Did you ever have trouble with a teammate?
- What did you do to try and resolve the issue?
- Have you ever disagreed with a professor?
- How have you convinced someone to agree with you?
I’m never exactly sure what to say, but the classic book How to Win Friends and Infulence People I bet helped me out in these area’s.
Fourth Interview
My fourth interview was what I thought was my best, but also most nerve wrecking of them all. I first stared out by outlining my MyEPICS projects that I have been working out and the different types of challenges that I encountered. Then I was asked to implement a queue using a stack. What I ended up coming up with was a solution that was O(1) for sequential push/pop’s, but O(n) for all other push/pop’s. At the end of the interview, I was made aware that there is a solution which is mostly O(1) for push/pops, not for just sequential ones. After finding the answer, I realized that I was actually quite close to the solution, only a minor detail off. At the end of the interview, one of the questions I asked was what he thought of how well I did. When he replied, it was quite awakening! He noticed quite a few errors (albeit small errors, but errors none the less), which abruptly I thought there was NO WAY I was going to get an offer. After all, Microsoft only hires the best and the brightest, right?
Final Interview
So at around 4:15pm I finally headed to my last interview. It was with a VP of the Windows Live Experience group. At the beginning of the interview, I was asked to tell him about one of my school projects. I decided to talk about my Rubix Cube Project. After talking to him about it for about 10 minutes, he finally decided to inform me that I was going to be given an offer within his group!
After hearing this, I was extremely excited and overwhelmed. After I thought I was for sure not going to be given a position, they finally ended up offering me one, and on the same day of my interview! After he gave me the offer, we talked about a bunch of the things that the Windows Live Experience team is doing, and some of the things that I would be able to contribute to.
My Recommendations
So the things that you should be familiar with are the following:
- Linked Lists (Single, Double, Circular, all of them)
- Hash Tables
- Tree’s
- Implementing every str* function in the C library
- Implementing itoa and atoi
For the data structures, you should know how to insert, delete, and search for each given one, and you should know the order of complexity for each one.
Even if you don’t normally eat breakfast (like myself), you will be glad that you did, but you probably won’t have a lot of time at lunch to scarf down a 4 course meal (although their cafeteria rocks).
Related to an earlier post I believe one of the things that made me stand out was about how excited I am about technology and all of the different ways that I can help change the world. If you aren’t passionate about something you are doing, then why are you in the field? If you do have something that you are passionate about, find a way to talk about it in your interview. Every time someone asks you “so, tell me a little about yourself”, find a way to put it into that conversation.
- Be Relaxed, dress comfortably
I know that this is easier to say than to do, but really, don’t dress up if you don’t like to. Dress how you want to (within reason i.e. don’t wear a see through shirt). I felt that I was really relaxed this time compared to last time I interviewed with Microsoft because I knew that if things didn’t go through, I had another company that had a great offer.
Go look at reverse interviewing and ask them some questions. This will definitely help out! If you get stuck in a technical problem, ask a question, they will most likely be able to help you out!