I interviewed for a system software position. That means writing software for their datacenter/server infrastructure. Mostly low-level OS type stuff. I first was contacted by a company HR/Recruiting person. This person was very nice and helpful. They scheduled the interviews and stayed in touch with me on the results of each. The first phone interview was with an engineer on the team. It lasted about an hour. He first asked some basic concept questions about threads vs. processes, virtual memory, interprocess communication and synchronization and so forth. Then he had me get on my computer and log into Google Documents. There he pasted in some code that had gibberish variable and function names and asked me to figure out what it did and fix any bugs that were in it.
After that they set up a second phone interview. Apparently they would normally bring someone on site after doing well on the phone interview, but since I wasn't local they called me a second time. I spoke with another engineer on the team. He chatted with me about my current work and he probed in on the technical and team aspects. Then he had me write an algorithm (list searching and sorting problem) over the phone. He had me revise my solution a number of times to make it faster, asking about Big O runtime and memory usage at each stage. I was nervous during this part and froze up a bit and ended up not being invited for further interviews. The recruiter contacted me about this promptly so I wasn't left hanging and overall I thought it was a good interview process.