Interviewing with Big Tech Companies
During the past semester, I interviewed for software engineering internships at companies such as Microsoft, Google, Facebook, and Amazon. I learned an immense amount speaking with engineers at these companies and have a lot to say about the process and what the best way is to prepare. The bottom line is, getting a computer science job is tough, because the skills necessary are tough. Factor in the prestige of these companies, and the difficulty of the interview only rises. So, I'm going to describe what each interview process was like (to the extent that I can), and at the end, some thoughts on what I'd do better next time.
I had the most interviews with Microsoft. I talked to a lady at the career fair and she reviewed my resume and asked me some questions about my previous experience. Then, the next day, Microsoft had a booth in the computer science building and I talked to another person there. A couple of weeks later, I got an email that they wanted to do an on-campus interview. I ended up talking with an engineering manager for 45 minutes in a tiny room in the career center. He asked me a couple behavioral questions, although he didn't seem very interested in my replies. Then, we went through one technical problem, which I wrote a solution for on a whiteboard. The question was rather simple, and I was a little taken aback by this - I expected something a little more difficult. It was a twist on the classic palindrome problem. After the problem, I asked him a couple questions and that was it.
About a week later, I was informed through email that I'd made it to the final rounds! I was flown out to Seattle the following month. Microsoft paid for everything which was really nice - I got to check out downtown Seattle and stay in a high end hotel. On my interview day, all the candidates on-site were taken to lunch, and then separated by groups to go do interviews. I had four interviews back to back - three of them completely technical, and the fourth with a hiring manager , which was mostly Q&A. The first interview was the only one where we had time to get through more than one technical problem. The problems I was asked during this final-round were noticeably harder than any other questions I'd been asked the whole semester. They weren't impossible but their solutions were far more involved than usual. For example, one question involved sorting n sorted linked lists efficiently. Another was a shortest-path in a matrix problem. I wrapped up my interviews around 5pm after a 1pm start and flew back home the next day.
I had one phone interview with Facebook. The engineer I spoke with, similar to my initial interview with Microsoft, didn't seem interested in the behavioral questions he asked me, and we very quickly moved on to a technical problem. This one was harder than Microsoft's initial interview - a question involving returning permutations of anagrams. I struggled the most on this question out of all of these interviews - I managed to eventually start going down the path of a potential solution, but I couldn't get more than halfway through it before I ran out of time. This interview didn't go as well as I'd hoped. Further, the engineer wasn't as friendly as ones from other companies and seemed less willing to help me along the way.
Finally, the big one - Google. My process with Google started with an online coding assessment. It was straightforward and I blew through the two problems. Then, a survey that didn't involve anything challenging. A week or so later I got news that I had moved on to the next phase. This involved two back to back technical interviews. If I passed them, I'd move on to the host matching phase and a short interview with a team away from the internship. So, this was more or less the biggest hurdle to clear to get the internship. Even though I didn't get an offer, this experience was the most enjoyable one. Both engineers I spoke with were kind, willing to help, and informative. The first one involved a string of questions related to binary search trees, starting out extremely simple and getting progressively more difficult. I made a handful of tiny slip-ups that I think ended up costing me, but overall I thought it went well. He answered my questions about Google candidly and gave me a great outlook on the culture. The next interviewer began by asking me some simple facts about low level programming and computer architecture - my least favorite part of computer science. I struggled through those, and then we got to the problem. This interview involved a fairly difficult question - writing a system to allow the user to convert between any two currencies in the world. This took a long time and I did not end up finishing the solution, but the interviewer was understanding. There was no time for questions at the end.
To summarize, each company had its own flavor of interviewer, interview questions, and fluff around the technical assessments. I had the biggest sample size with Microsoft, but Google stood out to me. Their questions were tough but fair, their engineers caring, receptive, and helpful, and they got back to me promptly every step of the way. Now, as far as takeaways on how to better prepare and improve my performance...
- Practice questions without a compiler/computer at all. Usually in the interviews, you're either going to be typing in a blank text editor or writing on a whiteboard. I underestimated how much of a change this is from what you're used to as a programmer.
- Practice questions with someone else. Find a computer science buddy to be your interviewer. They'll (hopefully) be able to emulate the actual interview environment right down to the engineer helping the interviewee. The best part of this is you can switch roles and help each other out! It's beneficial to feel how it is from the interviewer's perspective. I didn't do this as much as I should have. In other activities and sports, the best way to prepare is to do what you're going to do in the big game/performance/etc. Why not use that strategy here?
- Think out loud - most of the time. You don't have to say everything, because there's going to be some thoughts that aren't exactly constructive, but for the most part, they want to see how you work through a problem. This is your chance to make up for an inability to find the best solution - if your process is impressive, they might not care as much that you never got to a solution.
- Ask lots of clarifying questions. The worst thing you can do is make assumptions. Clarify everything you're unsure of.
I know that a lot of these may seem like common sense but in reality, in the moment, it's difficult to remember to do these things. That's why it's really important to practice as much as possible. The more questions you do, the more comfortable you'll be. It may seem intimidating - there's no limit to the number of questions that could be asked - but the more questions you get through, the more patterns and solution strategies you'll become aware of. You'll find that a lot of these patterns and solutions reoccur often. Think of it as populating your toolbox!
I had fun interviewing with these tech giants. I learned a lot about myself as an engineer, and I can't wait to see what the future holds.
Comments
Post a Comment