One of my friends was contacted by a Google recruiter. He was not interested in interviewing at the time, but gave my name to the recruiter, who emailed me and requested my resume. After receiving my resume, the recruiter arranged a 45min technical phone interview, which consisted of one "soft" question (e.g. describe a current project and its challenges), one algorithm question, one Java question, and one design question involving concurrency. The recruiter had previously mentioned there might be a second phone interview, but I did well enough in the first phone interview that my candidacy was forwarded to the on-site interviews.
I had five on-site interviews, all of which focused on technical knowledge and problem solving skills. My lunch conversation was truly a conversation and not an interview - I was the one asking all the questions! :)
Although I enjoyed the interviews themselves, lunch was a wonderful experience. It was great to see all the engineers sitting together talking and interacting. There was an incredible sense of community, friendship, and potential. (that sounds pretty weird, but it's really what it felt like)
I was asked only two soft questions the entire day and was not asked any brainteaser or logic puzzle questions. There was more emphasis on Java knowledge than I expected. Even though I was not asked any brainteaser or logic puzzle questions, I feel like studying them helped me improve my technique in approaching a new problem.