(Google Interview Prep Guide) SWE
(Google Interview Prep Guide) SWE
(Google Interview Prep Guide) SWE
Software Engineer
careers.google.com
General Interview Tips
Explain - We want to understand how you think, so explain your thought process and decision
making throughout the interview. Remember we’re not only evaluating your technical ability,
but also how you solve problems. Explicitly state and check assumptions with your interviewer
to ensure they are reasonable.
Clarify - Many questions will be deliberately open-ended to provide insight into what
categories and information you value within the technological puzzle. We’re looking to see
how you engage with the problem and your primary method for solving it. Be sure to talk
through your thought process and feel free to ask specific questions if you need clarification.
Improve - Think about ways to improve the solution you present. It’s worthwhile to think out
loud about your initial thoughts to a question. In many cases, your first answer may need some
refining and further explanation. If necessary, start with the brute force solution and improve
on it — just let the interviewer know that's what you're doing and why.
Practice - You won’t have access to an IDE or compiler during the interview so practice
writing code on paper or a whiteboard. Be sure to test your code and ensure it’s easily
readable without bugs. Don’t stress about small syntactical errors like which substring to use
for a given method (e.g. start, end or start, length) — just pick one and let your interviewer
know.
careers.google.com
is limited. Write what comes but then refine it later. Also make sure you consider
corner cases and edge cases, production ready.
4. Optimize the code, follow it with test cases and find any bugs.
careers.google.com
The Large Scale Design Interview
System Design - Questions are used to assess a candidate's ability to combine knowledge,
theory, experience and judgement toward solving a real-world engineering problem. In other
words, can a candidate "design policies, processes, procedures, methods, tests, and/or
components from ground up.
Sample topics include: features sets, interfaces, class hierarchies, distributed systems,
designing a system under certain constraints, simplicity, limitations, robustness and tradeoffs.
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, firewalls, etc.). Other topics
include: traverse a graphs, run-time complexity of graphs, distributed hash table system,
resource estimation with real systems, big product design picture, translation of an abstract
problem to a system, API discussions, binary trees, cache, mapreduce, for loop problems,
index, reverse link-list, compilers, memory cache, networks and also common topics.
Operating Systems - You should understand processes, threads, concurrency issues, locks,
mutexes, semaphores, monitors and how they all work. Understand deadlock, livelock and
how to avoid them. Know what resources a process needs and a thread needs. Understand
how context switching works, how it's initiated by the operating system and underlying
hardware. Know a little about scheduling. We are rapidly moving towards multi-core, so know
the fundamentals of "modern" concurrency constructs.
careers.google.com
Resources
careers.google.com