Over the past few years I’ve interviewed at a variety of different tech companies including Google, Microsoft, Facebook, Dolby, Atlassian, numerous startups, and of course, where I currently work, Canva. I’d like to share a few things I’ve learnt along the way.
Ask your recruiter what to expect
Will you be writing code, or will it just be verbal technical questions? Will the format be on a whiteboard or laptop? How long will you have for the interview? Can you code on your own laptop? How many questions will there be? Mental preparation is key, and asking your recruiter questions first can help you prepare for the right things.
In the days and weeks leading up to the interview, try to prepare with as many practice questions as you can. From my experience, coding with real practice questions is a much better way of preparing than simply reading textbooks. A good way to do this is to pair up with some friends and conduct mock interviews with each other.
Here are some of my favourite resources for finding and practicing interview questions:
- LeetCode and HackerRank are two great platforms which give you hands on practice for programming interviews
- Cracking the Coding Interview by Gayle Laakmann McDowell is a book which has 189 programming questions and will teach you everything need to know about algorithms
During the interview
Clarify the question
When you get the question, before you start to code it’s important to clarify your understanding. Ask about expected performance complexity, memory efficiency and the expected behaviour in edge cases. It can be helpful to draw diagrams, and expected input/output cases.
Once you’ve clarified your understanding, discuss some potential solutions to the problem and explain the pros and cons of each. Remember, your interviewer is interested in seeing how you think, not how quickly you can solve the problem.
Don’t pretend you know everything
Nobody likes a know-it-all. If you don’t know why your code doesn’t work, be honest and say so. Don’t be afraid to ask questions — they’re a great way of showing that you’re eager to learn.
If you’re silent, it can be hard for the interviewer to know what you’re thinking. Think aloud, say what you’re thinking while you’re coding.
Revise your solution
When you’ve got something working, don’t stop there — make sure to test your solution with a few edge cases, and start discussing how you can improve the style or efficiency of your code.
What will they ask me to do?
Every interview is different, however 9 times out of 10 I’ve found at least one of these topics come up:
- Algorithms and Data Structures — you can be asked to code up any data structures and algorithms such as sorting, graph searching algorithms, dynamic programming problems, trees, and hash tables. In these interviews you will often be asked about the Big O complexity of your solution, and you will be expected to improve it incrementally. Note: you will rarely be explicitly asked to write a specific algorithm e.g. “Write a depth first search”. You are more likely to be asked a problem where you need to decide which algorithm which is the most suitable.
- System design — questions won’t always be coding, instead you may be asked about how you would design a complex service or system. Here’s a great list of system design questions.
- Explain a technical project — you may have to explain a past technical project you have worked on, so it’s great to come prepared with a project you are proud of that you can talk about.
After the interview
Before you leave, ask how long it might take for them to make a decision. If they’re taking longer than they said, don’t stress, and don’t be afraid to email your recruiter asking for an update.
Hope this helped!