What are the key technologies, design patterns, architecture that a mid-level (4-6 years) java developer should know?
When I seem have start having a grasp of the Java landscape, I turn over another stone and it opens up a whole new area that I haven't experienced. I've recently read through "Java Concurrency In Practice" and it's changed my perspective of multi-threaded application (and programming in general)
It is often hard to figure out how you rank compare to your peers and where you should be. What are the skills that developers should have at certain points in their career? What's the best way to keep up with changing technologies? How do you do it?
Books that I've found very useful:
Effective Java by Joshua Bloch
Java Concurrency In Practice
Java(TM) Puzzlers: Traps, Pitfalls, and Corner Cases