First round was a online interview with some technical questions, logical questions and behaviour questions.
After first round, I got a on-site interview opportunity, but they paused the process since all positions were filled. Few months later, they asked me if I would like to continue to do on-site interview and I went to Seattle for a one-day interview.
On-site interview will have 2-3 people in a team to solve a "real" problem. There were about 8 teams in one big open room. The problem broke down in 3 parts, each member was assigned one part to solve it. Team members can help each others (discussion), but they must code by themselves. Unlike some other companies, you don't need to code in a whiteboard. Each candidate is assigned a laptop to code in actual environment (e.g. Eclipse). Also the Internet is open so you can Google:).
Candidates have about 5 hours (I can't remember exact number) to solve that one sub-problem. While coding, there are two one-on-one interview with interviewers. One is about 30 minutes and the other one is about 15 minutes. During 1:1 interview, interviewer will ask about your solutions, thoughts and even more open-ended questions. Also they will look at your code to give you some help (like directions), but they don't assess your code at that time (code assessment will happen after submit the code).
Some advices, some questions may easier than others. I think my part is the hardest one (the last part), and I didn't finish the complete solution, but only had a very basic version. So don't think 5 hours for one question is enough. Interviewer always said go with a simple solution first and optimize it, which is true. If you don't have time to finish all your code, write skeleton methods with comments, so interviewer can understand you are on the right track.