I have been trying to put together a list of basic skills a Java developer should have to move on to being an advanced Core Java programmer.
- can write code on paper which has a good chance of compiling.
- can use a debugger to debug programs and profile an application.
- are familiar all the primitives types and operators in Java.
- understands the class loading process and how class loaders work
- can use multiple threads both correctly and can prove this improve performance or behaviour. e.g. wait/notify/notifyAll, SwingUtils.invokeLater, the concurrency library
- can use checked exceptions, generics and enums
- can time a small benchmark and get reproducible results
- can write a very simple client server TCP service
- have an understanding of garbage collection, when is it triggered, what can you do to minimise it
- understand when to use design patterns such as Singleton, Factory, Fly-weight, Builder, Object Pool, Iterator, Strategy, Visitor, Composite
Suggestions on how to get these skills
- read Java Concurrency in Practice (http://jcip.net/)
- write a simple client server TCP service such as chat
- read up on Design Patterns and try to use them. http://www.oodesign.com/ so you can learn when they help and don't help