Software engineers at Google work across products such as Search, Photos, Translate, Android and Chrome. The work needs strong algorithms, careful handling of people's private data, and code that many other engineers will read and rely on. Prepare to solve problems aloud, to talk about testing on many kinds of devices, and to tell stories about unclear problems you made clear. What to show here: careful problem solving and respect for users' data. Each question below has what the interviewer is checking, an answer frame and a sample spoken answer to adapt.
How Google hires, in its own words, and its questions for every job →
“An ordinary hash changes completely if one pixel differs, so it only finds exact copies. For near copies I would compute a perceptual hash: shrink the photo, reduce it to light and dark patterns, and store the pattern as a short bit string. Similar photos get bit strings that differ in only a few places. Comparing every pair is too slow for a large library, so I would place photos in buckets by parts of the hash and compare only within a bucket. Near copies are usually taken seconds apart, so the time taken is a cheap first filter. I would let the user confirm before anything is removed.”
Weak answers compare every photo with every other, or use an exact hash that misses photos differing slightly.
“A phone cannot hold the full models used on servers, so I would offer a smaller model for each language pair that the traveller downloads ahead of the trip, ideally on wireless internet. The app should suggest this when it sees a trip or a new language. When online, the app uses the server for better quality. When offline, it uses the local model and tells the user quality may be lower. The models must fit in limited memory and not drain the battery, so I would test on modest phones. Updates arrive as small differences, not full downloads. Text typed offline stays on the device.”
Weak answers assume a connection is always there, or put a server-sized model onto the phone.
“I cannot test every device, so I would choose a set from usage data: the most common models, plus the extremes, such as the smallest screen, the least memory and the oldest supported system version. Unit and interface tests run automatically on emulators for every change, and a smaller set runs on real devices, since emulators miss maker-specific behaviour. Then I release in stages, starting with a small share of users, and watch crash and freeze reports grouped by device model and system version. If one model stands out, I pause the release, get that device or a close one, and reproduce the problem.”
Weak answers test on their own phone and one emulator, or release to everyone at once.
“I would first find every caller and run their tests against my change to see who depends on the old behaviour, including by accident. Instead of changing the function in place, I would add the new behaviour next to it, as a new function or an option, and mark the old one as deprecated with a note on how to move. Then I would move callers in small batches, preferably with an automated tool, and send each owning team a change to review. The old function is removed only when nothing uses it. Throughout, I would keep a short document explaining why the change is needed.”
Weak answers change the function directly and leave other teams to discover the breakage.
“My manager once asked me to make search better in your project. That could mean anything. I asked what had prompted it and learned that support had complaints about people not finding documents they knew existed. I read a sample of failed searches and found most were spelling variants and partial names. I wrote a one-page proposal with a narrow goal: a known document should be found when the title is typed with small errors. I listed what was out of scope. After agreement, I built that alone. It led to your result, and the complaints gave us the next goal.”
Weak answers start coding on a guess, or wait for someone else to define the problem fully.
“For your project, I built a feature that suggested places based on where a user had been. The easy design stored each user's full location history on our server. I was uncomfortable holding that. I proposed storing only a coarse area and a short recent window, and doing the detailed matching on the device. It made the feature harder to build and to debug, because I could not look at the raw data when something went wrong. My lead supported it after I explained the risk of a leak. The suggestions were slightly less precise, and your result. I would make the same choice again.”
Weak answers collect everything in case it is useful later, or treat privacy as a legal matter for someone else.
“I would check the field data to confirm the drain started with my release, and whether it affects all phones or certain models. While investigating, I would pause the staged release or switch the feature off remotely, so more users are not affected. Then I would try to reproduce on an affected model with battery profiling tools, looking at what keeps the phone awake: a timer firing too often, a location request never released, or a network retry loop. After fixing it, I would add a test that measures wake-ups for that scenario, and release again in small stages while watching the same data.”
Weak answers say it cannot be their change because it worked on their own phone.
“I would choose language, such as translation or voice input. I grew up using two languages and I notice how often software handles one of them poorly. In your project I worked on text processing and saw how rules that are simple in English break elsewhere. The hard part is that quality must hold for languages with little written data, on phones that may be offline. That mix of algorithms and care for real users is what I enjoy. I want to grow by working with people who know this field deeply, and by writing code that many other engineers depend on.”
Weak answers name no area, or choose one without any idea of what makes it difficult.
No figures on this page: pay depends on the level, the city and the offer in front of you. When the offer comes, the free salary negotiation script helps with that part.
ClapAssist is an AI interview assistant for Mac and Windows. It listens to the interview on your computer and shows you what to say, in short lines you can read while you talk. Your live interview audio and screen are never stored. Your resume and notes are saved to your account so the app fills them in on any computer. It is hidden from screen share on every plan, including Free; only you can see it.