EPI in a nutshell
EPI includes over 300 solved problems
representative of those asked at leading software companies.
With the exception of approximately 20 design problems, the
problems are designed to be codable in a 60 minute interview.
For many problems, at the end of its solution,
we describe a large number of variants.
We include a hints section, which consists of 1-2 sentence
suggestions, similar to what your interviewer will give you when you are stuck.
The inside story
All three of us successfully made it through the Google interview process, and went on to
work at Google, where, among other things, we interviewed candidates for our teams.
We have complementary backgrounds (large company, startup, academia)
and have held multiple roles (individual contributor, tech lead, CTO, consultant, professor),
that gives us unparalleled insight into the job market.
In addition to Google, some of the other places we have worked at include
Facebook, Microsoft, IBM, Qualcomm, and Synopsys, as well as a number of start-ups.
We have studied and taught at leading universities in the US (Berkeley, Texas) and
internationally (IIT Kanpur, National Tsing Hua University).
We specify subsets of problems to solve and to review on based on the amount of time you
can commit, ranging from a weekend hackathon (intense!), to an hour a day for a semester.
Commitment to excellence
We have used best-in-class practices in the development of EPI: LaTeX for document
preparation, GitHub for revision control, agile development, continuous integration, unit testing.
As a concrete example, we have close to 200 figures in our book. These
were prepared using the TikZ extensions to LaTeX, which allow us to programmatically
specify figures, leading to much clearer illustrations.
EPI solutions are mostly written in C++. (The programs illustrating concurrency
are in Java.)
We have developed Java equivalents to the C++ programs. Both
C++ and Java versions for all problems, including test cases,
available from Google Code and GitHub. See code link in the sidebar for details.
Nontechnical aspects of interviewing
In a seperate chapter, we present a set of 14 data structure, algorithm, and design patterns -
useful general problem solving techniques that you can apply when you are stumped. We
have suggestions on when and where to apply them, as well as examples illustrating their use.
We describe how to prepare for an interview, how to conduct yourself
during the interview, and what to do afterwards. This review covers the
technical (selecting variable names, memory management)
as well as nontechnical (what to wear, what not to say).
We present insights into
the different company cultures, and how it impacts how you need to present yourself.
We give a brief account of interviewing from the interviewer’s perspective.
In addition to being useful to anyone interviewing, this is useful for any
engineer conducting an interview.