Effective Java

Joshua Bloch