Visited a friend at their Mountain View campus for free lunch, and got contacted soon by a recruiter after passing along my resume. The recruiter sent links in an e-mail to resources that help you prepare for CS fundamentals, including the 'How to hack a Google interview' pamphlets. Quickly scheduled and went through just one technical phone screen, where I had to write code using CollabEdit and talked on Skype.
There were 2 questions: interviewer pasted a function signature for 'double pow(double a, int b)' and I had to write the body. That was pretty easy, but you do have to know the fast exp algorithm. The other question was implementing 'double rpn(List<String> ops)' to compute some result using RPN. This was also very easy (using a stack), but do watch out for edge conditions and handle exceptions.
Got confirmation for onsite interview after 2 days, and gave myself a week preparation time before meeting for 1:1 interviews (actually, there's a main interviewer who does 90% of the talking, but is often accompanied by a trainee) by 6 pairs, covering the areas: technical presentation, 3 algorithmic programming problems, 1 system design problem.
The first interviewer walked me to lunch and chatted about my work history--nothing technical. Just make sure you have rehearsed lines about your accomplishments, and be enthusiastic. The following 3 interviews (in 3 hours) were all on programming. The first one is fairly short: implement 'int[] intersect(int[] x, int[] y)' given 2 sorted int arrays, and provide the big-O for your best solution. The key here is to think through the problem (but talk so they don't think you're stuck and idling), then write on the write board.
The interview room was only around 8'x6', with a small round table and 3 stools, and a full wall of whiteboard. The hardest part, unless you're already familiar with the drill common to top Silicon Valley companies, is writing code on the whiteboard where it's difficult to add and delete lines, such as when you need to declare a new variable half-way down the board. There were 3 panes, and for some questions I had to switch back and forth, which likely confused me when I was wiping lines with my hand and adding ugly arrows to insert lines (instead of erasing already crafted lines), and messing up indentation. You get the idea. I understand that good whiteboard presentation with clearly legible writing is important, but I wished that wasn't tackled on as you're trying to solve a tough coding problem. One of the interviewers pulled out his phone and took a photo of the whiteboard of one of my least proudest work (I'm usually known as an anally clean coder).
The system design question seemed hardest as I got stuck on trying to use more complex structures than was probably necessary, like load-balanced message queues, distributed hashmaps of sorted structs containing 5 URLs and their timestamps, and using LRU methods to GC the old data. I had to ask for a hint, but that likely sealed my fate. The better, but certainly not the only, solution would be to use buckets of a fixed time interval. Seems easy, but often times the bad ideas just won't go away when under pressure.
In the final session, the interviewer asked me to pick my favorite project and describe the design in detail. Actually, the paraphrased question was 'you just hired a new developer on this project, how would you get him/her up to speed on developing this new feature'. I described a bit about project and release management logistics, but they were more interested in hearing about and seeing class diagrams, module, component, and network topologies. Finally, the question that threw me off a bit was (since the project I described happened 10 years ago): how would you modernize the project for 2012? What different components or approaches would use and why?
One thing that I reacted negatively to was all the interviewers were scheduled to arrive at the room on their assigned hour, and since the first one was late by over 10 minutes, most of the sessions ran past their hour slot with next interviewers opening the door and interrupting my thought process, only to be told 'can we have 5 more minutes?' and having the interviewers standing up and nodding nodding, basically saying 'alright, just wrap it up'.
I waited 2 full days before being e-mailed about the rejection--no personal call unless you've made it past the gate, I suppose.