Author: Noel Markham
Audience: Intermediate Java Programmers
Reviewer: Alex Armstrong
A book to prepare you for the torture of a job interview seems like a good idea. But is it possible?
We have all heard stories of impossible, or at least fiendishly tricky, interview questions. Perhaps the best known is Google's "why are manhole covers round?"
Usually in programming job interviews questions are targeted at finding out what you know about what you claim to know. This particular book is specifically about Java and as such to even want to read it you have to be fairly proficient in the language. In short, this book doesn't make sense for a beginner to read - after all you are going for an interview for a Java programming job.
The first chapter is a general discussion of what sorts of interviews you can expect to encounter - from phone screening to the face-to-face. Chapter 2 is about writing a resume and cover letter. You could argue that both of these chapters are a bit off topic in a Java book, but if you are after a job they are spot on target. Chapter 3 deals with interview basics - written tests and face-to-face interviews. This is more a case of finding out what it likely to happen to you .
Chapter 4 is where the book moves on to what you need to know. It mostly presents interview questions that you might get and provides answers for you. This sounds like a really good idea, but there is a problem. Each chapter tends to become a summary of everything you need to know about x. Chapter 4, for example, is about core algorithms and covers big O notation, sorting and searching. This reads like a condensed version of Computer Science 101. If you already know the material then it will be a useful reminder, but if you don't you are probably going to need something more. This said, the summaries and short overview are quite good and if you read through and understand them at least you will be reassured that you know something.
Chapter 5 is a crash course on data structures - lists, trees, maps and sets. Chapter 6 explains design patterns and gives examples of each of the standards. The explanations in this chapter are a bit thin and you have to read the code to get the idea of what is going on.
Chapter 7 deviates from the crash course in CS slightly in that it goes over the sort of exercise questions you get in an interview. It covers the familiar FizzBuzz problem, working out the Fibonacci sequence and Java generics.
Part II of the book focuses more on features of Java. If Part I was mostly a crash CS 101 course then this is a crash Java programming course.
Chapter 8 takes you through the basic ideas of Java programming - primitive types, objects, arrays, generics, strings, boxing, annotations, naming conventions, exceptions the standard library and whats in Java 8.Chapter 9 does the same for JUnit and testing in general. Chapter 10 tackles the JVM and issues like garbage collection and tuning. Chapter 11 is a crash course in concurrency covering threads and actors.
Part III widens the subject matter to Java Frameworks. I'm not sure that you can consider SQL to be a Java Framework, but it needs to be included and this is what Chapter 12 deals with. Chapter 13 is about general web apps - Tomcat, Jetty and Play. Chapter 14 is about serialization - XML and JSON. Chapters 16 and 17 are on Spring and Hibernate respectively. Chapter 18 mops up the smaller topics - Apache commons, Guava and Joda Time. Chapter 19 leaves the topic of frameworks and deals with build tools - Maven and Ant.
The final chapter is a bit strange as it is on Android, which is really a universe all of its own and probably needs a book of its own. However, if you are a Java programmer looking for your first job with Android you might well find that this provides you with some clue as to what it might all be about.
At the end of the day, while the information that this book provides is relevant, if you simply used it to learn what you need to know your knowledge would be very shallow and any interviewer could easily ask you a question that was off the list of topics covered here. In fact there might well be an unintended audience for this book in the form of interviewers wanting to avoid obvious interview questions. Crossing the ones in this book off your list makes good sense.
In other words, this is not a foolproof way to ace an interview. What it might do, however, is provide you with some confidence that you could succeed. The ideal reader of this book probably doesn't really need to read it as its main role should be just to convince you that you understand enough to apply for the job. Otherwise it might be handy to fill in any missing gaps in your knowledge.