ComChien TIL
Java

Java Core

Essential Java programming concepts and fundamentals

Java Core

This section outlines the essential Java Core knowledge required to progress from a Junior to a Senior Java Developer. The skills are categorized into three levels of importance: must-know (fundamental), should-know (intermediate), and nice-to-know (advanced).

Must-Know (Fundamental)

SkillDescriptionSystem Design Application
Object-Oriented ProgrammingMaster class design, inheritance, polymorphism, encapsulation, and abstraction. Understand when to use interfaces vs abstract classes, and how to apply SOLID principles effectively.Forms the foundation for creating maintainable, extensible systems. Proper OOP design leads to systems that can evolve with changing requirements.
Collections FrameworkDeep understanding of List, Set, Map implementations and their performance characteristics. Know when to use ArrayList vs LinkedList, HashMap vs TreeMap, etc. Understand the internal workings of these collections.Critical for data structure selection in performance-sensitive applications. Proper collection choice can significantly impact memory usage and processing speed.
Concurrency & MultithreadingMaster threads, ExecutorService, CompletableFuture, locks, atomic variables, and concurrent collections. Understand thread safety issues, deadlocks, race conditions, and how to avoid them.Essential for high-performance systems that need to handle multiple operations simultaneously. Proper concurrency management prevents data corruption and system instability.
Exception HandlingDevelop sophisticated exception handling strategies. Know the difference between checked and unchecked exceptions, when to use each, and how to create custom exception hierarchies.Robust error handling is crucial for system resilience. Well-designed exception hierarchies make systems more maintainable and debuggable.
Streams & Functional ProgrammingMaster Stream API operations, lambda expressions, method references, and functional interfaces. Understand the benefits of immutability and side-effect-free programming.Enables more concise, readable code for data processing pipelines. Functional approaches simplify parallel processing and improve code maintainability.
GenericsDeep understanding of type parameters, wildcards (? extends T, ? super T), type erasure, and generic methods. Know how to design flexible, type-safe APIs using generics.Creates more reusable and type-safe components. Properly designed generic interfaces reduce code duplication and improve API usability.
I/O & NIOMaster file operations, serialization, and NIO for non-blocking I/O. Understand performance implications of different I/O approaches.Critical for systems that handle large volumes of data or require high throughput. NIO is essential for scalable network applications.
Testing with JUnit & MockitoAdvanced unit testing techniques, test-driven development, mocking, and test coverage analysis. Know how to test complex scenarios and edge cases.Ensures system reliability and facilitates refactoring. Comprehensive test suites are a hallmark of well-designed systems.
Java Memory ModelUnderstand heap vs stack, garbage collection algorithms, memory leaks, and how to profile and optimize memory usage.Essential for designing high-performance, resource-efficient systems. Memory optimization is critical for systems that need to handle large data volumes.

Should-Know (Intermediate)

SkillDescriptionSystem Design Application
JVM Tuning & OptimizationUnderstand JVM architecture, garbage collection algorithms, and performance tuning parameters. Know how to analyze heap dumps and optimize memory usage.Critical for high-load systems. Proper JVM tuning can significantly improve application performance and stability under load.
Reactive ProgrammingMaster reactive streams (Project Reactor, RxJava), understand backpressure, and non-blocking programming models.Enables building highly responsive, resilient systems that can handle concurrent operations efficiently. Essential for microservices architectures.
Java Modules (JPMS)Understand module system introduced in Java 9, how to design modular applications, and resolve module dependencies.Improves application security and maintainability by enforcing explicit dependencies and encapsulation at the module level.
Advanced Concurrency PatternsMaster fork/join framework, phaser, cyclic barrier, and other advanced concurrency utilities. Understand thread pools and their configuration.Essential for complex parallel processing systems. These patterns enable efficient utilization of multi-core processors.
Reflection & AnnotationsDeep understanding of runtime type information, dynamic proxy, custom annotations, and annotation processors.Powers many frameworks like Spring. Understanding these concepts helps in creating flexible, metadata-driven architectures.
Java SecurityMaster security manager, cryptography APIs, secure coding practices, and common vulnerabilities (OWASP).Critical for systems handling sensitive data. Security must be designed into the system from the ground up.
Advanced CollectionsUnderstand concurrent collections, custom collection implementations, and collection performance optimization.Enables building high-performance data processing systems. Custom collections can be tailored to specific access patterns.
Java Native Interface (JNI)Know how to integrate Java with native code (C/C++) when necessary for performance-critical operations.Allows leveraging native libraries for performance-critical components while maintaining the overall system in Java.
Internationalization & LocalizationMaster resource bundles, locale-specific formatting, and character encoding issues.Essential for global applications. Properly designed i18n architecture simplifies adding support for new languages and regions.

Nice-to-Know (Advanced)

SkillDescriptionSystem Design Application
GraalVM & Native ImageUnderstand ahead-of-time compilation, native image generation, and polyglot programming capabilities of GraalVM.Enables creating applications with faster startup and lower memory footprint, critical for serverless and containerized deployments.
Java 21 Virtual ThreadsMaster Project Loom's virtual threads for high-throughput concurrent applications without the overhead of OS threads.Revolutionary for high-concurrency systems. Virtual threads enable writing simple blocking code that scales to millions of concurrent operations.
Bytecode Analysis & ManipulationUnderstand JVM bytecode, and libraries like ASM or ByteBuddy for runtime code generation and transformation.Powers advanced frameworks and performance tools. Understanding bytecode enables creating sophisticated runtime optimizations.
Advanced Garbage CollectionDeep knowledge of Z Garbage Collector (ZGC), Shenandoah, and G1 collector tuning for large heaps with low pause times.Critical for latency-sensitive applications. Advanced GC tuning minimizes application pauses and improves overall responsiveness.
Java Flight Recorder & Mission ControlProfiling and monitoring JVM applications in production with minimal overhead.Enables performance analysis of production systems. JFR provides insights into runtime behavior without significant performance impact.
Java 21+ FeaturesStay current with pattern matching, sealed classes, records, and other cutting-edge Java features.Modern Java features often simplify common programming patterns, leading to more maintainable and less error-prone code.
CompletableFuture Advanced PatternsMaster complex asynchronous workflows, error handling, and composition of asynchronous operations.Essential for building responsive, non-blocking systems that can handle complex processing workflows efficiently.
Custom ClassLoadersUnderstand the classloading mechanism and how to implement custom classloaders for specialized use cases.Enables advanced plugin systems and dynamic code loading scenarios. Custom classloaders are the foundation of many modular architectures.
Java Agent & InstrumentationKnow how to use Java agents for bytecode instrumentation and application monitoring.Powers APM tools and advanced debugging solutions. Understanding instrumentation enables creating sophisticated monitoring systems.

Learning Resources

Books

  • Effective Java (3rd Edition) by Joshua Bloch - Essential patterns and best practices
  • Java Concurrency in Practice by Brian Goetz - Definitive guide to Java concurrency
  • Modern Java in Action by Raoul-Gabriel Urma - Covers functional programming and modern Java features
  • Optimizing Java by Benjamin Evans - Deep dive into JVM performance tuning
  • Java Performance: The Definitive Guide by Scott Oaks - Comprehensive guide to performance optimization

Online Courses

  • Java Multithreading, Concurrency & Performance Optimization (Udemy)
  • Advanced Java Programming (Pluralsight)
  • Reactive Programming with Java and Spring WebFlux (Udemy)
  • Java Memory Management (Udemy)
  • Java Performance Tuning (Oracle University)

Free Resources

System Design Applications

Java Core skills directly impact system design in numerous ways:

  1. Performance-Critical Systems: Advanced knowledge of Java concurrency, memory management, and JVM tuning enables building systems that can handle high loads with minimal resource usage.

  2. Scalable Architectures: Understanding CompletableFuture, virtual threads, and reactive programming allows designing systems that scale horizontally with increasing load.

  3. Resilient Systems: Proper exception handling, defensive programming, and thread safety knowledge leads to systems that can recover from failures gracefully.

  4. Maintainable Codebases: Applying SOLID principles, effective use of generics, and functional programming patterns results in systems that are easier to maintain and extend over time.

  5. Resource-Efficient Applications: Knowledge of memory management, garbage collection, and efficient data structures enables creating applications that make optimal use of available resources.

A Senior Java Developer must be able to connect these core language features to broader system design decisions, understanding how low-level implementation choices impact high-level architecture goals.