Object-oriented language principles. Design Patterns. Multithreaded programming principles. Language implementation and optimization (dynamic dispatch optimizations, object layout). Garbage collection. Type systems. Parametric polymorphism: generics, templates.