I cannot share my actual interview questions due to an NDA, which I take seriously. However, you can find plenty of similar questions on this site and others. If you can successfully solve a good percentage of these, you should submit your resume.
The recruiting process is quite slow and involves several stages.
First, a recruiter contacted me, and we spoke for about 15 minutes to establish a profile of my skillset. This involved questions like, "How would you rate yourself at such-and-such tasks?" The recruiter was very pleasant and genuinely seemed to understand my background and what I could offer the company.
Two weeks later, I had a 45-minute phone interview with a software engineer who asked actual coding questions. This was conducted using a Google Notebook document, allowing him to see my typing in real-time. I found these questions to be easier than anticipated. We had an extra 15 minutes at the end, which we used for informal chat about working at Google.
Several weeks after this, I was invited to an on-site interview at Mountain View. This was the most grueling stage, consisting of five back-to-back 45-minute one-on-one interviews. These were filled with coding problems of varied difficulty, with a lunch break at one of the company's restaurants (where the food is free). They will often try to find someone with interests similar to yours to accompany you.
Some questions were not very difficult and primarily checked my existing knowledge. Others were quite challenging, requiring me to pause, think, explain my thought processes, attack the problem, and then try to find better solutions. When I got stuck, some interviewers offered pointed questions (which should be taken as hints), while others let me work through it independently.
Each interview typically included one to three questions or problems. Some were incrementally more complex, building on previous ones, while others were completely unrelated.
This was very stressful for me, likely more so than it needed to be. If you can maintain a cool head and a smile, you're halfway there; the other half is providing good solutions.
The difficult questions are not exceptionally hard, but challenging enough to require effort. If you are a proficient programmer, understand CS basics (especially complexity analysis), and can write code on a whiteboard without difficulty, there's no reason you shouldn't succeed.
The programming language you choose doesn't seem to matter. However, if you opt for C++, be sure to know the STL well. If you choose JavaScript, thoroughly understand your string and array classes, and so on.
Be aware that there are many stages of review after you finish interviewing, and Google has an incredibly high rate of false negatives. You might perform well in an area for which you're not being considered, or you might be categorized inaccurately. Therefore, don't jump to conclusions, even if you feel you did very well.
Some friends of mine, whom I would definitely consider better programmers than myself, have failed for no apparent reason, even after receiving positive feedback from their recruiter. So, be mindful of this.
One piece of advice: do not embellish your resume. Don't claim expertise unless you possess it, as you will be probed. If they are interested in you, your references, degrees, and professional experience will be thoroughly checked.
Conversely, don't be too modest. I know of someone who didn't pass the initial non-technical interview because they rated themselves too low on certain skills. Be honest. If you honestly wouldn't rate yourself higher than a 6 or 7 out of 10 at something, don't apply for a position that heavily relies on it.
Another piece of advice: brush up! Revisit your CS basics and practice a good number of problems similar to those you'll find here. A month of training focused on algorithms could certainly make the difference between success and failure.
I waited over a month for an actual answer. The recruiter wasn't always keeping me informed about the process, but to be fair, there's only so many times one can apologize for the delay. Additionally, the way potential hires are assigned to teams is a bit peculiar. Once they decide they want you, they still need to find a team that likes your profile, so you might not know which team you'll join until later in the process. On the other hand, this gives the recruiter a chance to actively seek a good fit for you.
Total time between initial contact and receiving an offer: approximately 3 months. Your mileage may vary.
In retrospect, I had a pretty good experience overall. Despite some frustrating moments, I felt the recruiter was genuinely working towards my hiring.
Algorithms, complexity analysis, CS basics, thinking on your feet, whiteboard coding.
Know your stuff.
The following metrics were computed from 748 interview experiences for the Google Software Engineer role in Mountain View, California.
Google's interview process for their Software Engineer roles in Mountain View, California is very selective, failing most engineers who go through it.
Candidates reported having very good feelings for Google's Software Engineer interview process in Mountain View, California.