I applied online and Google responded very quickly (within a couple of days, I think). I talked to a recruiter about the application process in a 15-30 minute phone call, and I was really impressed with the recruiter and how knowledgeable and likeable she was.
My first phone interview with an engineer was pretty bad. I could barely understand the accent of the person on the phone, and I didn't have headphones in, just had the phone on speaker, so it was really really hard to first understand what the interviewer was asking. I was asked what a virtual function was, how the java compiler does a virtual function, what projects I had coded in Java (I marked this as my primary language), and then the tough question as follows:
If you have machine A, machine B, and a USB Key, and an arbitrary Binary Tree in machine A, how would you copy it to machine B? (The key is to represent the tree correctly in memory)
I thanked the recruiter while still mentioning that I couldn't hear my interviewer, and they scheduled me for a second phone interview.
My second one went much better. My main question was to take a string, say "Hello World" and a number, for example: 13, and add spaces to the spaces already present in the string until the string becomes the length described by the given number.
So "Hello World" becomes "Hello World" here. The spaces need to be balanced so if the string is for example "a b c" and the number is 7, the output would be "a b c". I was then asked about linked lists and arrays, what they were and to compare them.