My first interview was over the phone. It was a general inquiry into what I was interested in so they could see where I may fit in the company. It lasted no longer than 30 minutes. I was told at the end that they were going to give me a small assignment to test my programming skills, which I was e-mailed shortly thereafter and told I had two days to implement two C functions. The "homework" was not difficult but also not trivial.
I had a second phone interview with an employee local to the area in which I was applying. We spoke for perhaps 45 minutes, again addressing where my talents and interests would best fit with the company's needs. There may have been a few short technical questions such as "What is polymorphism?" just to establish that I really knew my stuff. The interviewer told me he'd get me an in person interview with a team in the particular development area in which I had the most interest.
I reviewed the (somewhat esoteric) material that I had studied in graduate school in preparation for this unique in-person interview. When I arrived, I soon discovered that I was not interviewing with the group I was told I would be, and instead was partnered with a device driver developer. He proceeded to ask me many technical questions focusing mostly in low level C programming and some questions on programming theory, which I was completely unprepared for. The questions were pretty standard interview questions and were not that difficult. The interviewer was somewhat rude and impatient when I started struggling with one of the programming questions. This miscommunication somewhat soured the otherwise positive interviewing experience for me. All other interviewers and HR persons were very amicable and enjoyable to speak with.