I had previously interviewed with Google during my final year as a Computer Science Engineering undergraduate student. I didn't get an offer, but the recruiter said that it was a close call and that she would follow up with me after two years once I had more experience. I joined Microsoft right out of college instead.
Exactly two years later (literally same day/month), a new recruiter followed up and I began the interview process again. A week later, I had a phone screen. After 4 days, the recruiter informed me that I passed and could move on to the on-campus interviews. I was assigned a new recruiter. Two weeks later, I flew out and had a total of 5 interviews at Google's headquarters in Mountain View, CA. Two weeks later, the recruiter informed me that I passed the hiring committee. One week after that, the recruiter informed me that I had passed the final executive review and I was provided offer details. In general, the recruiter was polite and knowledgeable, though late to call me on a few occasions when we had chats scheduled. Also, the recruiter began discussing relocation and job perks, as if I had the job, before an offer had been extended (after approval by the hiring committee, but before executive review). It sounds as though a fair number of candidates are rejected at this stage, and as such I feel this was somewhat inappropriate.
I found the on-campus interviews to be very academic-slanted. Though I had only been working in industry for one year, I expected more focus on what I had learned and accomplished there, rather than my knowledge of algorithms and data structures (most of which I hadn't touched since graduating from college). I don't know whether I will use these algorithms much in my day-to-day work, but I feel as though I am qualified for the job because of how I approach real-world software engineering problems, not my knowledge of algorithms and data structures.
My first on-campus interviewer was about 15 minutes late, but he had a sufficiently geeky excuse and I wasn't annoyed. Although some may find this lack of "professionalism" frustrating, I didn't mind, and he turned out to be my favorite interviewer.
A couple of the interviewers asked me to implement (in full or in part) algorithms to solve board games/strategy games. Think of the category of games that use a board with a grid of values, where solving the game consists of putting the right values onto the grid, or extracting knowledge from the existing grid arrangement -- this is what I'm talking about. Per my NDA I won't get into specifics. These questions were very in-depth and it took the majority of the time for me to come up with solution (or a sufficiently-developed line of thinking that would lead to a solution). In each case, my solution was incomplete or had minor errors/inefficiencies that the interviewers called me out for. I then used the interviewers' hints to refine the solution.
Another interviewer proposed a hypothetical product (a web application, with some sort of user interface, some amount of business logic, and a database backend, with a set of interesting scalability features) and asked me to talk through the process of testing it. This was an open-ended question which I enjoyed very much -- I felt like I was able to demonstrate my breadth of testing knowledge by touching on a number of potential test angles, and I went into detail on the ones that the interviewer found interesting.
Another interviewer asked me to design and implement a data structure that had constant-time performance for two specific operations. The constraints weren't satisfiable by any single simple data structure -- the solution involved a hybrid of two different ones. I believe this type of question is common at Google -- I had a very similar question (though with different data structures) two years earlier. I talked through the problem with the interviewer and, with a few hints, arrived at the correct solution and implemented it.
I didn't deliver perfect answers to any of the problems. I think I received an offer because I was able to talk through what I was thinking and doing as I was doing it. This allowed the interviewers to follow along, ask clarifying questions, and get me back on the right track when I made a mistake. I was able to demonstrate that I'm a competent programmer and pleasant to work with, even though I'm not an algorithm or data structure rockstar. I believe that better programmers than me get rejected because the interviewers are only able to evaluate their raw technical competency, rather than their people skills or problem solving process. If you are able to converse freely with them, as if you were tackling the problem with coworkers, they will feel much more comfortable overlooking minor technical flaws in your answer.
Best of luck, and hopefully I'll see you inside! :)