The Code Interview
An interviewer gives you a problem and a time limit, and watches. You must choose the right data structure, write working code, and justify it in terms of time and memory. Most developers never practiced that out loud.
A field manual for busy Java developers: 48 real interview questions, each solved from brute force to optimal.