I was first sent an e-mail about my candidacy for an intern position over the summer, and scheduled a quick phone interview to learn more about the internship program, talk about which roles would interest me, if I would be willing to work in Seattle, etc.
About a week later, I had a 45-minute coding interview over the phone, which was somewhat algorithmically interesting yet fairly straightforward. The problem was to write a function to remove the elements in an array that appear more than once. Later that day, I got an e-mail telling me that the feedback was positive and that they would a final round interview consisting of two 45-minute coding interviews and a short conversation with a hiring manager. I decided to do the interview onsite, as this was an option.
The onsite interview was a bit disorganized because the company had just moved into a new space.
The first 45-minute interview involved tackling the problem of finding the top 1000 most frequent words in a file, better than O(nlogn) complexity. I gave various solutions that were of O(nlogn) complexity, then tried using min/max heaps and was also asked to explain Quicksort, Mergesort and analyze their complexities (explain why they are nlogn, not just from rote memory).
The second 45-minute interview involved developing and coding an efficient algorithm to find the "just less than" number in an unbalanced binary tree -- i.e. the largest number in the tree that was less than some target number. This was fairly straightforward.
Both interviewers were very nice. Then, I spoke to the hiring manager who answered some of my questions. I got an e-mail the next day saying they were moving on with stronger candidates.