How to prepare for a java interview

I just wrapped up another tour of the interview circuit. Not exactly how I would prefer to spend several weeks of my time, but alas it comes with the territory. I noticed a few things during this period.
The first point that I would like to make is that as a potential interviewee, you need to start preparing for the next job WAY before you’re really ready to start looking. Get your resume prepared and take a look at what it’s got on it. Are there areas where you’re weak that you could add some experience while you’re still at your current job? You need to take on successful projects and show motivation, but all of this needs to happen now and not later. The best way to get a great new job is to show that you’re already a great employee.
Secondly, it’s always better to get a job through a personal reference. It might actually be worth holding off looking until someone can introduce you to an opportunity. Some companies won’t even consider an applicant unless there’s a reference before hand, it’s just too risky for them. So, make sure you have good relations set up before hand with your coworkers and know where they’re going if they leave.
I’ve found that interviewing is the worst way to get to know a candidate except of course for all of the other ways. There is a big spread out there between good interviewers and poor interviewers. Sometimes after a questionable interview, I’ve gone back over the questions asked and tried to determine what the interviewer is selecting for with each question. Each question should tell you something about the interviewee no matter how they answer. As an interviewer, you want to make sure you’re selecting for traits that you would desire in an employee. If you ask a question that involves some minutiae of a technical spec and the interviewee doesn’t know the answer, what have you learned? Would you refuse to hire someone because they didn’t know a detail that could be looked up on Google in 10secs?
To be prepared for the bulk of questions that will be asked in a Java Software Engineer interview you need to study up on two books before you start, Concurrent Programming in Java(TM): Design Principles and Pattern and Sun Certified Programmer & Developer for Java 2 Study Guide. With these two books you can handle 75% of the questions that interviewers often ask, if you want to get that level up around 90% look up the Singleton design pattern in the GOF book.
I’m often left wondering after interviews why so much importance is put on these types of questions while other aspects of the potential employee are completely ignored. There’s a whole lot more to being a great employee than just having encyclopedic knowledge of software specs. Creativity, flexibility, social interactions, business and product understanding. All of these are ignored completely in most software interviews. Maybe it’s just because they’re harder subjects to nail down?
One interesting trend that I’ve noticed is the increase in tests and homework assignments for the interviewee that are performed offline. This allows the interviewer to get a slightly better feel for how the candidate will perform. I personally feel this is a positive trend.