I’ve had the opportunity to be on interview loops for the last six months or so at Microsoft. I had previously done interviews as part of my job at Terralever as well, and at least for the technical part of the job, it hasn’t really changed. This post isn’t really about interviewing specifically at Microsoft. I’m a Program Manager, but on a programming language team, which means that my job is much more technical than most PM jobs on, for example, Office products. My expectations as a technical interviewer for PM are probably more in line with a developer’s job in other parts of the company. As such, I’d also expect that they’re in line for other development jobs throughout the industry.
I’d expect the specific problems are going to vary based on the team or the job you’re interviewing for, but some problems are good universal fits. In general, I try to ask questions which will fit within the following buckets:
- Basic problem-solving skills. If I give you a simple problem statement, can you talk through how you would solve the problem and then turn it into code? Can you do it on a whiteboard without a code editor? What level of detail do I need to provide? What levels of detail are you going to ask me for?
- Performance analysis and trade-offs. While approaching your basic problems, almost always, the problems have multiple possible solutions. I hope you’re identifying the alternatives as we go, but if you don’t, can you discuss them when I ask you about them?
- Data structures and algorithms. Do you understand LIFO/FIFO, linked lists vs. arrays, hash tables, etc.? If you’re a junior candidate and are unfamiliar altogether with the data structures, do you understand what I’m talking about if I explain them to you?
- Debugging. What are the tools you could use to debug a problem that might crop up? Do you know the sequence of steps to diagnose a bug that I might have introduced, or that you introduced?
- Testing. Do you know how to test and validate your code? What are the ranges of inputs you might want to test?
Over the next few posts, I’m going to talk through some common interview problems, what a candidate’s answers might be, and then what the interviewer might try to discuss about the answers and questions. This isn’t a comprehensive guide, and you shouldn’t expect to get these questions if you actually interview with me. The purpose is really to give you the mindset for an interview. What will make you successful? What do you need to know? How can you build up your skills to be ready?
Up next: testing for a palindrome. (Yes, it’s super-common).