In the last couple of months of 2018, I spent most of my days preparing for my Google Internship technical interviews. I ended up getting the job, and had a great experience!
Two months after my internship, I wanted to share the document I used and prepared in the weeks leading up to my interviews. For me, creating this cheat sheet was like creating a cheat sheet before an exam. The process of creating it and checking the steps over and over solidified the steps in my mind.
I believe anyone can pass interviews at the big tech companies, you just have to spend time learning about the interview process and preparing.
This document is high level enough that it should be applicable to any sort of technical interview, whether you are applying to Google, a startup, or your first internship. I hope it can help you feel more comfortable in your preparation and interview process!
An interview practice tool. Take turns interviewing and being interviewed by someone with a shared code editor, and video and voice chat.
The best resource. Interviews may be awkward or difficult at first, but the more you do, the more comfortable you will be, and the better you will do in a real interview.
Good questions from real interviews at Facebook, Google, Microsoft, etc. I recommend codesignal over alternative code practice websites, because most questions include a target space and time complexity.
My favorite parts: Interview Preparation Grid (pg. 32), the whole behavioral questions section, and Interview Questions: Data Structures (pg. 88 - 107). If you haven't encountered space and time complexity before, this book has a good, quick, practical introduction to the concept.
- Consistently communicate, with honesty. (Keep talking while you are thinking, communicate your thought process)
- Chat, joke around, have fun.
- Write down any important information.
- Ask questions, and adapt to what the interviewer gives you.
These are the steps I followed from the start of the technical interview to the end. Don't worry about getting through all of them, just get as far as you can, giving each step as much attention as it needs. (In one of my interviews I only just started on step 9 before I ran out of time). When I got off track I found these steps helped me reorient myself and keep going.
- Read Question
- Clarify understanding of inputs, outputs, and side effects
- Ask questions, and state any reasonable assumptions
- Go through an example to ensure understanding of problem
- Spend as much time as you need just understanding the problem, this is important
- Think of an algorithm to solve the problem
- Try a similar, but less complicated problem.
- Try paying attention to your process in manually working through an example.
- Go through an example or three to make sure the algorithm works
- State any edge cases and address them
- Discuss Time and Space complexity
- If you can think of a better algorithm, and you have time, go to step 4; otherwise ask if this is good, if it isn’t, go to step 4
- Break the problem down into several methods (if it is good to do so)
- Look over code for errors.
- Think of edge cases arising from how your algorithm is implemented.
- Go through an example with the implementation, looking out for errors.
- Once you are sure your code is correct, clean it up.