Step 1: Phone interview: 1 hour, 30 minutes technical/30 minutes behavioral. Technical question was: Given a list of words, find the 5 most frequently occurring words. Write pseudocode. The interviewer gave me the question, then hung up and called me back 10 minutes later to discuss my solution. We discussed the runtime complexity, data structures used and their effect on performance, what would happen if solution was modified in such -and-such way, etc.
Behavioral: Basically just asked a bunch of questions. What was your biggest project, what role did you play in this project, what are some difficulties you encountered and how did you solve them, did you ever have problems with team members, etc. Basic behavioral questions. Then was allowed to ask questions. Was told that they would get back to me in a week. I heard back from them to schedule an on-site in Evanston.
On-site: Arrived a bit early, was given a folder with info on the company, benefits, brochures, and other miscellaneous things.
When the time to start the interview arrived, I was escorted downstairs for a demo with one of the software development team members. They went over the various technologies they use and what products they are making. This lasted around 20-30 minutes. At the end there was some time to ask questions.
Then I was taken to a conference room and given a packet with 3 software engineering problems and told to do two of them. I was given 45 minutes alone to work on them. The first problem was: Create classes to implement windows and visible regions of overlapping windows. The second problem was algorithmic: Given a grid of black and white cells, find the biggest connected black square. The third was related to database models; I believe it was to create an E-R diagram for some business. I decided to do the first two; however, the first question was actually a bit vague, and the instructions I was given were confusing, even when I asked questions. It turned out to be more of an algorithmic question of finding out if some region is visible, instead of just creating class structures. Because of this I did poorly on the first problem. The second, I was able to develop a pretty good algorithm for. After the 45 minutes is up, a manager comes in to discuss your solutions with you, and you have a chance to ask questions.
I then met with the department manager for a behavioral round. This guy seemed like he wasn't enjoying the interview at all, like it was a huge chore for him. However, I answered the questions as best I could. At the end there was a chance to ask questions.
After this, I went out to lunch with another member of the software team. We had a nice conversation while eating sushi. After lunch, we headed back to the office for wrap up where I was told I would hear back in a week if they were interested. Didn't hear back though.