[MUSIC PLAYING]
SEAN MCGAUGHRAN: Hi.
Welcome to Life at Google's video
about how to prepare for a technical interview.
I'm Sean, technology and engineering recruiter.
ALLYSON PEMBERTON: I'm Allyson.
I'm a software engineer.
JESSICA YOSHIMI: I'm Jess.
I'm also a software engineer.
SEAN MCGAUGHRAN: Although this video
is going to focus on the technical interview,
definitely check out our partner video on
how to prepare for the business interview as well.
It absolutely applies here.
But without further ado, let's get into some tips.
[MUSIC PLAYING]
JESSICA YOSHIMI: First things first,
make sure you're ready to prove what's on your resume.
We're going to want some critical pieces from you,
including the bread and butter of software engineering, data
structures-- well, you could argue with me on that-- data
structures and algorithms.
So we want things like hash tables,
stacks, arrays, as well as algorithms, space
and time complexity.
We also want things like be prepared
to code on a white board.
This is very different from coding on a computer,
so it's highly recommended to go out, find
a white board or a chalkboard, and try coding something up.
It's a little different.
And finally, we want to make sure
that you're brushed up on system design, as well
as object-oriented programming.
ALLYSON PEMBERTON: In general, you
want to show your problem-solving skills
for the question you are asked.
If it's a coding question, providing efficient code
in a short timeframe is key.
If it's a design question, work with your interviewer
to create a high-level system.
And if applicable, delving into deeper issues.
If it's a general analysis question,
show that you understand all aspects of the problem
and, if necessary, offer multiple solutions,
discussing their relative merits.
In the end, the interviewer wants
to know if they'd be comfortable working with you on their team.
[MUSIC PLAYING]
SEAN MCGAUGHRAN: Specifically, you
should focus your preparation on the following areas.
Coding.
So, you're going to spend the majority of your time actually
writing code in the interviews.
We do ask that you are pretty familiar with at least
one coding language.
Typically, we'll interview you in C++ or Java.
You may use Python or C in different projects here.
You will be expected to know APIs, object-oriented design
and programming, how to test your code,
and be able to come up with corner cases and edge
cases for yours and other people's code.
JESSICA YOSHIMI: Another big thing is algorithms.
I mentioned this in the beginning,
and it's coming up again because, surprise, it's
important.
All right.
So, you also want to know how complex your algorithm is--
remember, it's time and space complexity--
as well as how to improve or change it.
If you give me an o of n algorithm
and then you give me an o of n factorial or o of n squared
and you tell me it's better, this
is going to be a little awkward.
So another thing, if you get a chance to study up on other
algorithms, like Dijkstra's or A*, it'll probably help you,
too.
ALLYSON PEMBERTON: Testing is incredibly important.
Candidates with three or more years of industry experience
should have hands-on testing experience.
If you have less than three years within the industry,
we're just going to test you for your testing aptitude.
You can expect questions such as how would you unit
test the code you write?
What interesting inputs or test cases can you think of?
And we may also ask you to design end-to-end integration,
load-in performance, or even security tests for a real world
system such as Gmail, for example.
SEAN MCGAUGHRAN: Data structures.
So, you should study up on as many data structures
and algorithms as humanly possible.
You should know some of the most famous classes
of NP-complete problems, like the traveling salesman
and the knapsack.
You should definitely be able to recognize
some of these very famous questions
when asked in a slightly different way.
Also, try and find out what NP-complete actually
even means.
You should absolutely know trees, some basic tree
construction, traversal and manipulation algorithms,
hash tables, stacks, arrays, link lists, and so on.
JESSICA YOSHIMI: Also, math.
Some of our interviewers will ask basic discrete math
problems.
Don't worry, they will be very relevant.
Counting problems, probability, things
that happen in everyday life.
So before you come in, spend some time
refreshing your memory on these things,
or learning the essentials of probability theory
and combinatorics.
You should be pretty familiar with n
choose k problems and the like.
SEAN MCGAUGHRAN: Recursion.
Many coding problems involve thinking recursively, and maybe
coding a recursive solution.
To prepare for recursion, which can sometimes
be tricky if not approached properly,
practice some problems which can be solved iteratively,
but a more elegant solution is recursion.
JESSICA YOSHIMI: Operating systems.
You should understand processes, threads, as well as
concurrency issues and everything related to that,
such as semaphores, mutexes, locks, things like that.
You should also understand resource allocation, so
what resources a process or thread might need.
Another thing-- context switching.
Just brush up a little bit on that.
Understand that it's initiated in the operating
system and underlying hardware.
And then one last thing-- maybe you
might want to know a little bit about how scheduling works.
ALLYSON PEMBERTON: System design.
Candidates who've been in the industry
for more than five years should have
experience with system design.
These questions are used to see your ability
to combine knowledge, theory, and judgment towards solving
a real world problem.
Sample topics include feature sets, interfaces, class
hierarchies, distributed systems,
and designing a system under certain constraints.
You should also have an understanding
of how the internet actually works,
and be familiar with the various pieces.
Routers, domain name servers, load balancers, and firewalls.
Also, understand the basics of how search works.
[MUSIC PLAYING]
SEAN MCGAUGHRAN: Now that we've talked a little bit about some
of the knowledge areas that we expect you to know,
we want to offer you three final tips to really be
successful in your interviews.
ALLYSON PEMBERTON: First, explain and clarify.
It's extremely important to talk through your thought process
during the interview.
It is much better to say what you're
thinking than to stay silent.
Even if you're discarding ideas along the way,
your interviewer wants to know your thought process,
which ideas you're not going to use,
and which idea you finally settle on.
Clarifying the question is also important.
Most of the questions at Google are intentionally vague,
because the interviewer wants to know what questions you would
ask if you were in a real world solution that
had a vague question.
An example of a question you could ask for clarifying is
are there any time or space complexity requirements?
JESSICA YOSHIMI: Secondly, we want you to keep thinking.
We know this is really strenuous.
Interviewing is really long.
But the first solution that you come up with
might not be the most elegant.
So we encourage you to keep thinking through the problems.
Think about your current solution,
and how you could potentially improve it.
SEAN MCGAUGHRAN: And finally, practice.
Make sure that you practice physically writing your code.
You won't have an editor, no color code
for comments, no autocorrect.
Be sure to test your code.
Be sure that it's easily readable, without bugs.
Find problems, write code, solve them.
There's no better way of practicing
than actually writing out code and algorithms.
And that's it for today.
Thanks so much for joining us.
[MUSIC PLAYING]