Software Engineer Interviews
Software Engineer Interviews
Nobody has time to grind hundreds of LeetCode questions, and the good
news is that you don't need to do that many to actually get the job at FAANG!
This guide will provide a quick overview of the top tips on how to prepare
for a software engineer interview - both technical and non-technical
interview rounds. Where relevant, you can delve into greater detail by
accessing links in this overview article, or through the website's left sidebar.
Your resume is the single most important entry point to getting shortlisted in
major tech companies like FAANG / MANGA. After getting shortlisted, your
past achievements become markedly less important as compared to your
coding interview skills - which as we know, can be methodically learnt. Being
able to frame your past achievements well enough to get through the
screening stage is hence very important.
If you want to learn how to write a good software engineer resume, I've
written a step-by-step guide here on software engineering resume
preparation for companies like Google, Facebook, Amazon, Netflix, Apple, with
examples for your reference as well.
1. Quiz
Frequency: Occasional
Quizzes are meant to be a first-pass filter as a quick and dirty way of weeding
out extremely weak (or even non-technical) candidates. They are structured
questions and have clear-cut answers which makes them possible to be
administered by recruiters/non-technical folks or automated graders. They are
typically done early in the process.
Examples:
Frequency: Occasional
Like quizzes, online coding assessments are usually given early in the process.
An algorithm problem is given with well-formed input and output and
candidates are expected to write code in an online coding interface to solve
the problem. HackerRank is a very common platform for conducting online
coding assessments. LeetCode would be a good way to practice for the
problem solving aspects of online coding assessments. However, in
HackerRank you are typically expected to write code to read from stdin and
also print to stdout, which can trip candidates up if they aren't familiar with
the APIs.
Frequency: Rare
However, this interview format takes up more time from both the candidates
and the company and hence it is not as commonly seen in large companies
where they have a high volume of candidates. This format is more common
among startups and small companies. Examples
Frequency: Common
Phone interviews are the most common format and every candidate will face
this at least once while interviewing. You will be asked to speak with an
interviewer either over a phone call or VoIP (BlueJeans/Skype/Google
Hangout). A question will be given to you and you will work on that question
using an online collaborative editor (CoderPad/CodePen/Google Docs).
You are usually not allowed to execute the code even if the editor supports
execution. So don't rely on that for verifying the correctness of your solution.
Formats would differ slightly depending on the roles you are applying to.
Many companies like to use CoderPad for collaborative code editing.
CoderPad supports running of the program, so it is possible that you will be
asked to fix your code such that it can be run. For front end interviews, many
companies like to use CodePen, and it will be worth your time to familiarize
yourself with the user interfaces of such web-based coding environments.
Check out coding interview best practices as well for do's and don'ts before
your phone screen interviews.
5. Onsite
If you have made it to this stage, congratulations! This is usually the final stage
before an offer decision. Candidates who made it to the onsite stage will be
required to have an in-person interview at the office. If you are an overseas
candidate, companies might even fly you in and pay for your
accommodations!
The onsite stage usually consists of multiple rounds (coding, system design,
behavioral) and is expected to last for a few hours. Since you are onsite, it is
possible that you will be asked to do a whiteboard exercise with an
interviewer, usually either solving an algorithm question or a system design
question. It is also possible that you have to bring your own laptop and work
on a project/solve a coding problem on the spot.
For onsite interviews at smaller (non-public) companies, most will allow (and
prefer) that you use your own laptop. Hence it is important that you prepare
your development environment in advance.
If the company provides lunch, you might also have a lunch session with an
employee where you can find out more about the company culture.
Most of the time, you'd already have one in mind - pick the one you use the
most and you're the most comfortable with. The most common programming
languages used for coding interviews are Python, Java, C++, and JavaScript. I
wouldn't recommend learning an entirely new language just for coding
interviews as it takes a while (few weeks at least on average) to become
proficient enough in a language to wield it comfortably in an interview setting,
which is already stressful enough on its own. My personal programming
language of choice is Python because of how terse it is and the functions/data
structures the standard library provides.
Read more on programming languages for coding interviews: Picking a
programming language
There are many platforms that can be used for this - such as LeetCode,
HackerRank and CodeForces. From my personal experience, LeetCode
questions are most suitable for interview preparation whereas HackerRank and
CodeForces are more for competitive programming.
The recommended time period to set aside for coding interview preparation is
3 months (11 hours a week i.e. 2-3 hours a day) for a more holistic
preparation. I shared my 3 month study plan here, which provides a list of
coding interview topics with resources and practice questions that you should
work through in order of priority every week. I will also be adding content on
recommended 1 month and 1 week study plans soon.
If you have less than 3 months to prepare, you can generate your own study
plans using the Grind 75 tool (built by me) which generates recommended
study plans for coding interviews based on the time you have left. The
algorithm behind it includes a ranking of questions by priority and also a
balance between breadth and depth of topics covered.
AlgoMonster
Apart from helping you master important coding interview data structures and
algorithm questions through practice and easy to understand guides,
AlgoMonster has the added perk of synthesizing common interview question
patterns that you could apply to solve any other questions you have never
encountered before. Made by Google engineers, this is definitely a quality
platform to use as compared to the unstructured nature of LeetCode grinding.
Data structures and algorithms questions are covered in all the common
languages - Python, Java, C#, JavaScript, C++, Golang, and more. Join today
for a 70% discount →
I'm not sure if these would qualify as an in-depth guide - they are more like 1-
page "study cheatsheets" of the best resources to study, best LeetCode
questions to practice and the things to remember. However, they ensure
you cover all the most important grounds, especially when you have no time.
Because these are also the notes that helped me clinch top tech offers - they
definitely work.
Try out mock coding interviews (with Google and Facebook engineers)
Coding right in front of your interviewer can be a nerve-wracking experience
especially if you have never done it before - which is why getting hands-on
experience is so important.
Moreover, if you were to do well on your mock interviews, you will be able to
unlock the "jobs page" which allows you to book interviews directly with top
companies like Uber, Lyft, Quora, Asana and more. I've
used interviewing.io both as an interviewer and an interviewee and found the
experience to be excellent.
Check out other Systems Design preparation guides and resources here.
The STAR format helps you to organize your answers to behavioral questions.
This is most applicable to questions that require you to recount past
experiences or behavior.
Situation: Share details about the situation that gave rise to the task
Task: Explain what you needed to achieve or the problems you had to
solve; focus on the
o Scope
o Severity
o Specific benchmarks/outcomes required
Action: Explain what you did to meet your objectives, describing
options you had and how you made decisions
Results: Describe the outcome of your actions and what you learnt
Refer to the top 30 most common behavioral questions for Software Engineers