The initial phone interview was conducted by someone from HR, covered school/project experience, a basic CS question (difference between C and Java), language skills and standard personal questions (what I do outside of school, why I chose CS). I received an email about a week later, informing me I was selected for the in-person second round interview in NYC.
When asked, I stated that my preference was to fly out the day before my interview, then fly home the the next night, after my interview was complete. However, when I got my itinerary, I was booked to fly out at 5am, the day of my interview, which put my arrival about an hour before it was to start. This seemed to be the experience of all of the other interviewees, so I would expect this is standard practice.
I made it just in time, and was given a tour of their gorgeous office building, told of all the perks employees enjoy, the usual deal. When I got to the interview itself, there were two engineers who asked me in more detail about my coding experience, favorite projects and the like. When I stated my lack of experience with C (something I had made clear in my first interview), they seemed surprised I had made it to the second round, because nearly their entire code base is in C.
They moved on to the coding question: How can you efficiently detect whether two singly-linked lists converge, and if they do, how do you identify at which node? They were okay with using pseudocode syntax, but they wanted a great deal of explanation of my thought process along the way.
My biggest mistake was just not practicing coding in front of someone to practice beforehand - I was nervous, made a few mistakes, and missed the obvious efficient solution until they gave me a big hint.