The final stage of our software engineering hiring process is the on-site interview. It can be challenging, especially for less experienced candidates who have not seen similar interviews before. We highly recommend that you prepare well for this final hurdle and you will find some tips below.
START TO FINISH INTERVIEW PROCESS
- Non-technical phone screen. This is designed to get an idea of how well you fit into the role and culture
- HackerRank test. This is used to get an initial feel for your algorithm skills before you meet our software engineers
- Skype interview. An engineer will join a call with you. They’ll ask you about past experience, work through 1–2 algorithm questions on a shared coding pad, and will also be looking to see evidence of knowledge in SQL or Linux
- On-site. This is the final stage, where you’ll have a short introduction followed by two whiteboard interviews, and a final third interview
Before the day
*Algorithm preparation
- To prepare for your algorithm interviews, you should ensure you are familiar with some fundamental data structures: arrays, stacks, queues, linked lists, binary trees, graphs, tries, and hash tables. You can find a quick rundown of these here, and start learning about them in more detail with practice problems here. It is also useful to be aware of Big O notation, in order to reason about the efficiency of your algorithms.
- We also recommend this video series by Gayle Laakmann McDowell, which will walk you through some example problems and data structures, and give you general advice on how to approach whiteboard interviews.
- Once you feel confident with the basics, we recommend trying out practice problems on sites like LeetCode or HackerRank. We expect candidates to be able to solve a broad range of problems, and challenging yourself before the interviews should make it easier for you to identify common patterns and hone your problem-solving skills. Practice solving some of these on paper and timing yourself; writing code down on paper or a whiteboard is a very different experience to writing code in an IDE, though we won’t expect perfect syntax.
*System design preparation
- Depending on your experience and your interviewers, you may be asked to describe how you would design something, a news feed for example. On the surface this could be quite daunting, and it is intentionally ambiguous. It’s important to remember that the interviewer wants to see how you approach the problem, rather than expecting to see a perfect plan
- As with algorithm interviews, there are many resources available for preparing online. We’d recommend this video series, which explores a wide range of system design questions, as well as this video from a former Facebook software engineer. You can also find some helpful tips from a Twitter software engineer here.
*Skill-specific preparation
- You should expect to be asked questions about the skills listed on your CV. These could be general questions about your experience, or more practical ones, such as asking how you would implement a component of the C++ standard library. How you revise for questions like this will depend on the skill, and the main thing to remember is to be honest about how much you know, and to revise any skills you have listed that you may be rusty in
On the day
For most candidates, the on-site will feature a short introduction (~30 minutes), followed by up to three, one-hour whiteboard interview slots. Generally, each interview slot will primarily target algorithms, system design, or a specific skill. The majority of interviewers focus on algorithms, however this will vary depending on your background.
Here are some key points to keep in mind for your whiteboard interviews:
- Explain what you’re thinking.
You can stay silent while you consider the problem, but try to keep the interviewer in the loop so they can help you. Whiteboard interviews are a collaborative process, and we’ll want to be able to see how you think - Listen out for hints.
The interviewer will want to help guide you in the right direction. If they give you a hint make sure you take notice - Look out for extra information.
The question ‘find X in a list’ is not the same as ‘find X in a sorted list’. It is possible to solve the former in O(N) time, but the latter can be solved in O(log(N)) time - Clarify the question.
For the ‘find X in a list’ example, which index do you return if there are duplicates? This is not only important to you getting the right answer, but for us to evaluate whether you can gather requirements
Remember the company wants you to succeed! They wouldn’t have brought you this far in the process if they didnt!
If you have tips for people preparing for their on-sites – share with us in the comment below!!