I first got a phone interview through a connection at the company. I spoke with a senior developer. They asked me to send a "short sample of code" which is always scary. I chose one that I did for a class assignment as it was pretty short and it showed a few good design decisions. A word of warning, the phone interview was extremely technical. I think we spoke nearly double the 30 minute estimate and it was pretty much 90% technical. We started by going over my code, talking about decisions I made in designing it and how I could change some things in order to make it more versatile. After a long discussion, he asked the typical data structures/complexity of operations questions. Pretty standard stuff you should be ready for for any interview. He had some other questions, like how to find if a linked list has cycles, and a real-world problem of keeping track of the highest 1000 quotes as prices come in constantly. Finally we briefly discussed my previous internship and what I did, followed by him asking what I really want to do. He gave me some more information and then I got an offer to interview on-site within an hour.
The on-site interview started in the morning with a demo of the software. This was mostly just for my benefit and not really "part of" the interview (although you always have to assume people you talk to can have an influence on the people making the decision).
My first technical interview was to write out a poker function to calculate which 5 card hand wins. I had to describe basic data structures I would use for shuffling the deck and dealing cards, but the function was the main focus. I spent a good amount of time working out some issues, and made some changes as I went. I almost ran out of time and just had to explain some of the end of the code. Overall, it went well, but I only had a short time to ask questions.
The second technical interview was the "code review" interview. I was given a print out of a class. I was asked to find errors and then afterward, give it a "grade". I was also asked about some improvements I could see beyond the errors.
The final technical interview started with a short program where I was asked to write the output. It was a simple class with a derived class and it illustrated pointers/desctructors/virtual functions and determining which gets called and in what order. Pretty simple, just make sure you know things like virtual methods in C++. I was also asked to design a game like The Sims, basically just define some classes and public interfaces. We really just talked through some issues and features and how I would implement them.
Before I finished the day, I was taken out to lunch by two developers.
I finally had an interview with a director. He asked more of the basic, tell me about yourself, and how did you get interested in software development, type questions. This part was pretty relaxed and I was almost done.
I ended the day with the hiring manager, who gave me some feedback (he was pretty positive and seemed to imply that I had an offer)