Wednesday, January 19, 2011

A02: Technical Blog - My Microsoft Interview Experience

This past Tuesday (Jan 18) I interviewed with Microsoft in Redmond, which is very close to Seattle. I interviewed for a Software Developer Engineer in Test (SDET) Summer Internship. It was, to say the least, a very humbling experience. The interviews were tough but I did learn a lot. Here's a rundown of my day:

9:00am - Arrive at Microsoft building 111. This is the interviewee lobby and there's all sorts of cool stuff in here, from an Xbox 360 complete with Rockband drum set, to a Microsoft Surface touch-table, which is basically a large horizontal touchscreen that allows you to play games and pull up information using natural gestures.

9:15am - Meet with recruiter. Very friendly lady who gave me a rundown on what my day would be like: 2 interviews, lunch, followed by more interviews - ranging anywhere from 3-5 interviews total. She also explained to me about the Microsoft shuttle service. The Microsoft Campus is enormous, and Microsoft has an entire fleet of Priuses and vans that shuttle people (especially interviewees) from building to building. See, the interviewers don't come to you. You actually go to their offices. The recruiter also gave me a few tips: 1 - talk through your code so the interviewers can see your thought process. 2 - ask clarifying questions to make sure you understand what the interviewer is asking of you.

10:00am - Interview 1: Microsoft Office (Ahmad). While chatting, he asked me what my favorite/least favorite software program was. I answered Adobe Photoshop. I listed a few things I liked/disliked. I also made sure to mention a program from the MS Office suite as well (I really like the Office suite). I also commented that I wished that MS would setup something like Google Docs, a free, online cloud application to allow users to edit Office Documents real-time simultaneously. Mistake. MS already has this feature. Lesson: Make sure you do your research if you are going to talk about a particular product.

We chatted more, and then he asked me to code on his whiteboard. Problem: write the code to remove a node from a linked list. Method Signature: remove (int position). I was, to say the least, very nervous at this point. This was definitely a problem I was familiar with, but It took me a little while to get though the jitters and settle down, but as I was thinking through the process, I made sure to keep talking about the steps I was taking to generate my code. I also made sure to ask a lot of questions about the type of input and output to make sure I understood the problem.

I was able to complete the coding problem, and as we went through my solution, which I decided to code in Java (they leave the language up to you), it appeared that I had covered all the cases, with the exception of one or two, which I can't recall at the moment. He did offer me the suggestion that I could've inserted a while loop to test for a position index that was too large (I tested for this inside of one of my for loops, which wasn't as efficient).

Then we got to the testing portion of the interview. Since I was applying for a position as a Software Tester, he asked me to test the sorting function in MS Excel. I started by saying I'd test integers and decimal numbers (positive and negative), and strings, and a combination of numbers and strings. He asked me how I would test performance and security. I had to clarify a bit on the security question. He elaborated that I needed to think of cases where user input or action might make the system crash (e.g., inputting too long of a string to sort, too much data, etc).

He also brought up that I needed to consider accessibility concerns as well. So a few things that I didn't test for that I should've: security, performance, and accessibility. All of the interviewers talk to each other over the course of the day, so they want to see if you've been able to apply the things that they've suggested to you.

11:00am - Interview 2: Microsoft Office (Ziesha)
From there I was greeted by the next interviewer, a young programmer with a Ph.D. in security protocol, who had been there for three years with Microsoft.

He first asked me how I would test the MS Office ribbon (the set of tabs at the top of every office application containing functions specific to the application). I gave a few test scenarios, like opening up a few instances of the application to ensure that each ribbon acts independently, and some accessibility tests for the blind and so forth.

He then asked me to design an ATM machine with a few new features. The most innovative idea, which I don't even think was that novel, was to attach some sort of entertainment (e.g., scrolling marquee or TV screen) to the machine to allow people waiting to occupy their time/attention with. We then went over how I would test a normal ATM machine (hardware and software).

By this time, I was itching to start coding. I'm not the best person when it comes to coding while someone is watching over your shoulder, so I wanted to have enough time for me to think things through. The problem, however, wasn't that bad: Code how you would find whether a linked list is cyclic or not. I was able to do this without too much trouble. He then asked me if this would work for a doubly linked list as well. I went into some detail as to how I would modify my code, and then later found out that it would've worked without modification (my idea of a doubly linked list was a little off).

12:00pm - At this point, it was time for lunch. Ziesha
- how to improve
- healthy food in cafeteria
- nice talk; enjoyable

1:00pm - Interview 3: Microsoft Exchange (Ravi)
- given an input:
- output word1,word2
- should've asked for unicode/ASCII; I assumed ASCII right off the bat
- asked more questions
-

2:00pm - Meet with recruiter
- asked for details on interviews
- talked about MS perception and how things are changing

Lessons Learned:
  • Learn C# - A lot of Microsoft's products are written using C#. They expect you to learn the language before coming to their offices if you are offered an internship or job.
  • Practice coding simple structures and concepts - getting comfortable with coding even the simplest of structures, such as linked lists and string manipulation; libraries may provide this functionality, but the coding habits and skills you develop while doing these exercises is very important.
  • Practice coding on a whiteboard.
  • Try to think of all possible exceptions
Final Thoughts:
  • Microsoft employees are very loyal to the company
  • These guys are really really smart
  • This was my first technical interview, and it was a very good learning experience for me.




No comments:

Post a Comment