A curated, opinionated path from zero to production-grade Java and Spring Boot β refreshed for Java 25 (LTS) and Spring Boot 4 / Spring Framework 7.
Whether you're writing your first main method or hardening a microservice for production, this repo maps what to learn, in what order, with the best free resource for each step. Every link is hand-picked; the roadmap is kept current with the modern Java platform (records, sealed types, pattern matching, virtual threads) and the Spring Boot 3/4 generation.
flowchart TD
A["1 Β· Java Fundamentals"] --> B["2 Β· Object-Oriented Programming"]
B --> C["3 Β· Core APIs & Intermediate Java"]
C --> D["4 Β· Modern Java (14 β 25)"]
D --> E["5 Β· Advanced Java & the JVM"]
C --> F["6 Β· Testing"]
E --> G["7 Β· Clean Code, SOLID & Design Patterns"]
F --> G
C --> H["8 Β· Build Tools"]
G --> I["9 Β· Databases & Persistence"]
I --> J["10 Β· Jakarta EE & Servlets"]
J --> K["11 Β· Spring Framework & Spring Boot"]
H --> K
K --> L["12 Β· Cloud-Native, Microservices & Spring AI"]
L --> M["13 Β· Practice, Projects & Roadmaps"]
- Follow the chapters in order if you're new β each builds on the last.
- Jump to a chapter if you're filling gaps (the roadmap above shows dependencies).
- Look for these markers on individual resources:
- π₯ video Β· π deep-read / official docs Β· β‘ quick reference Β· π§ͺ hands-on Β· β start here Β· π modern (Java 17+ / Spring Boot 3+)
- LTS-first mindset: target Java 21 or Java 25 and Spring Boot 4.x for anything new. Older material is still valuable for concepts β just prefer modern syntax when you code.
- Fundamentals of Java
- Object-Oriented Programming
- Core APIs & Intermediate Java
- Modern Java (14 β 25)
- Advanced Java & the JVM
- Testing
- Clean Code, SOLID & Design Patterns
- Build Tools
- Databases & Persistence
- Jakarta EE & Servlets
- Spring Framework & Spring Boot
- Cloud-Native, Microservices & Spring AI
- Practice, Projects & Roadmaps
Goal: read, write, and run simple Java programs. Understand types, control flow, and errors.
β Start here: dev.java β the official learning portal from Oracle Β· The Java Tutorials (Oracle)
- Primitive Data Types in Java
- π Primitive Data Types (Oracle Tutorial)
- π
varβ Local Variable Type Inference (Java 10+)
- Java Control Structures
- Convention: avoid
!inifconditions - The
switchStatement - π Switch Expressions (Java 14+) Β· see also Chapter 4
- String vs. StringBuilder vs. StringBuffer
- Guide to the Java String API
- π Text Blocks β multi-line strings (Java 15+)
- Exception Handling in Java
- Checked vs. Unchecked Exceptions
throwvs.throws- Creating a Custom Exception
Goal: model problems with classes and objects; master the four pillars.
- Object-Oriented Programming in Java
- Concrete Classes
- 9 Rules About Constructors in Java
- Everything You Need to Know About Interfaces
- Abstract Class vs. Interface
- Access Modifiers Explained
- Access Modifiers with Examples
- What Is Inheritance
- 12 Rules & Examples About Inheritance
- Inheritance vs. Composition (prefer composition!)
- What Is Overloading
- 12 Rules of Overriding
- Overriding vs. Overloading
- Covariant Return Types
- Method Hiding
- Default & Private Methods in Interfaces
- Static & Default Methods in Interfaces
- The
thisKeyword - Type Casting
- The
staticKeyword - The
finalKeyword - Static Blocks
- Static Imports
- Pass-by-Value vs. Pass-by-Reference in Java
- Wrapper Classes & Autoboxing
- JavaBeans
- What Is a JavaBean, exactly? (StackOverflow)
- POJO Classes
- A Guide to Java Enums
- Overriding
toString() - The
equals()andhashCode()Contracts BigDecimalandBigInteger- Java Serialization
- Everything About Java Serialization
- Why implement
Serializable? (StackOverflow) - π Records β concise immutable data carriers (Java 14+)
Goal: fluently use the standard library β collections, generics, streams, and functional Java.
Fig: Collections Framework hierarchy. Source: javatpoint
List
- List Tutorial & Examples
- Sorting Lists
- Sorting a List by Multiple Attributes
- Convert an Iterator to a List
- Get a Random Element from a List
- Partition a List
- Remove All Nulls from a List
- Remove Duplicates from a List
- Check If Two Lists Are Equal
- Find an Element in a List
UnsupportedOperationExceptionon Lists- Copy a List to Another List
- Remove All Occurrences of a Value
- Add Multiple Items to an ArrayList
- Remove the First Element
- Ways to Iterate Over a List
- Intersection of Two Lists
- Count Duplicate Elements in an ArrayList
- Differences Between Two Lists
- Reversing a Linked List
- Assert Two Lists Equal Ignoring Order
Set
Map
- Guide to HashMap
- HashMap Under the Hood
- Guide to TreeMap
- TreeMap vs. HashMap
- Store Duplicate Keys in a Map
- Initialize a HashMap
- Merge Two Maps (Java 8)
- Sort a HashMap
- Compare Two HashMaps
- Using
Map.Entry - Working with Maps Using Streams
- Iterate Over a Map
Conversions & utilities
- Convert Between an Array and a List
- Convert Between an Array and a Set
- Convert Between a List and a Set
- Convert a Map to an Array, List or Set
- Convert a List to a Map
- Map to String Conversion
Arrays.asListvs.new ArrayList(Arrays.asList())- Collect Stream Elements into a List
stream().forEach()vs.forEach()- A Guide to the Java Iterator
- Time Complexity of Java Collections
- π Sequenced Collections (Java 21+)
- β Lambda Expressions Quick Start (Oracle)
- Functional Interfaces in Java
- Java Streams Explained (JRebel)
- A Comprehensive Guide to Java Streams
- Java Streams by Example (Capital One)
- A Guide to Java Collectors
- π₯ Streams β video series (Java Brains)
- π§ͺ Modern Java by Example (winterbe/java8-tutorial)
- π Stream Gatherers β custom intermediate ops (Java 24+)
- Java Reflection Tutorial (Jenkov)
- A Guide to Java Reflection
- π Annotations (Oracle Tutorial)
- Common Java Annotations
- π₯ Creating a Custom Annotation (video)
- Java Annotation Processing
- Annotations (winterbe)
@DeprecatedExamples@OverrideExamples@SuppressWarningsExamples- Annotation Processing Under the Hood
Goal: write idiomatic modern Java. These features define how professional code looks today β favour them over legacy patterns.
- π Records β immutable data classes
- π Sealed Classes & Interfaces β controlled hierarchies
- π Pattern Matching for
instanceof - π Pattern Matching for
switch - π Record Patterns β destructuring
- π Text Blocks β multi-line string literals
- π Switch Expressions
- π
varβ Local Variable Type Inference - π Sequenced Collections
LTS releases (bold) are what you should target for production: Java 8, 11, 17, 21, 25.
- Java 8 β lambdas, streams,
Optional, new Date/Time - Java 9 β modules (JPMS),
varin the REPL, collection factory methods - Java 10 β
varlocal type inference - Java 11 β HTTP Client,
Stringmethods, run single-file source - Java 12 Β· Java 13 Β· Java 14 β switch expressions, records (preview), text blocks (preview)
- Java 15 β text blocks, sealed classes (preview)
- Java 16 β records & pattern matching for
instanceoffinalized - Java 17 β sealed classes finalized; migration guide 8 β 17
- Java 18 β UTF-8 by default, simple web server
- Java 21 β virtual threads, pattern matching for
switch, record patterns, sequenced collections - Java 22 β stream gatherers (preview), unnamed variables
- Java 25 β π latest LTS: scoped values, compact source files & instance
main, structured concurrency - π Full JDK release/JEP index (OpenJDK)
Goal: reason about concurrency and understand what happens beneath your code.
- Java Thread Programming β all 14 parts (foojay)
- The
synchronizedKeyword - The
volatileKeyword (Jenkov) CompletableFuture- π Concurrency (Oracle Tutorial)
- Synchronization & Locks (MIT 6.005)
- ReentrantReadWriteLock
- ExecutorService (Jenkov)
- Thread Pools
- ThreadPoolExecutor Example
- Fork/Join Framework
- β Difference Between Thread and Virtual Thread
- OpenJDK Project Loom
- Structured Concurrency
- Scoped Values (a modern alternative to
ThreadLocal) - Working with Virtual Threads in Spring
- JVM Garbage Collectors
- Experimental Garbage Collectors (ZGC, Shenandoah)
- Java Memory Management (interview-grade deep dive)
- Object Ordering:
Comparable&Comparator - Collections & Thread Safety
- 18 Collections & Generics Best Practices
extends/superWildcards & the Get-Put Principle- Generics, Subtyping & the Substitution Principle
- Static vs. Non-Static
- Upcasting & Downcasting
Goal: a habit, not a chore. Modern Java hiring assumes you can write clean, fast, isolated tests.
- β A Guide to JUnit 5
- Assertions in JUnit 4 and JUnit 5
- Assert an Exception Is Thrown
- Introduction to AssertJ β fluent assertions
- Mockito Series β basics to advanced
- Mockito with JUnit 5 (
@ExtendWith) - JUnit vs. Mockito β what each is for
- Docker Test Containers in Java Tests
- DB Integration Tests with Spring Boot & Testcontainers
- Built-in Testcontainers Support in Spring Boot (3.1+)
- π Testcontainers β official site
- Testing in Spring Boot (see also Chapter 11.10)
Goal: write code other humans (and future-you) can change safely.
- β Refactoring Guru β Design Patterns (illustrated)
- Design Patterns Series (Baeldung)
- Design Principles & Patterns for Highly Concurrent Applications
- π Refactoring Guru β Refactoring Catalog
Goal: build, test, and package projects reproducibly. Learn one deeply, know the other.
- π₯ Gradle for Java Developers (LinkedIn Learning)
- π Getting Started with Gradle (official docs)
- Use the Maven/Gradle Wrapper β always commit
mvnw/gradlewso builds are reproducible.
Goal: move data in and out of a relational database, the Java way.
- Introduction to JDBC
- JPA Tutorial
- Learn JPA & Hibernate Series
- The DAO Pattern in Java
- Connection Pooling with HikariCP
- Database Migrations with Flyway
Spring's persistence layer (Spring Data JPA,
JdbcTemplate) is covered in Chapter 11.9.
Goal: understand the web foundation Spring MVC is built on. Note: the
javax.*namespace is nowjakarta.*(Jakarta EE 9+).
- π₯ What Is Apache Tomcat?
- What Is a Servlet?
- Lifecycle of a Servlet
- How a Servlet Works
- ServletContext
- Servlet Filters
- What Is a WAR File?
- π₯ Introduction to Servlets (video)
- Intro to Servlets (Baeldung)
- MVC with Servlets & JSP
Goal: build production REST services with Spring Boot 4 / Spring Framework 7. Target Boot 4.x for new work (Boot 3.5 reached end of open-source support on 30 June 2026).
β Start here: Learn Spring Boot Series (Baeldung) Β· π Spring Boot Reference Docs Β· π§ͺ start.spring.io β bootstrap a project
- π Spring Framework Overview (current reference)
- Why Choose Spring?
- π Spring Boot 3 & Spring Framework 6.0 β What's New
- π Spring Boot 4 & Spring Framework 7 β What's New
- β Understanding the Core of the Spring Framework
- Spring Bean
- Inversion of Control & Dependency Injection
- What Is Dependency Injection?
@Autowiredβ Autowiring- Spring Bean Annotations
- Field vs. Constructor vs. Setter Injection (StackOverflow)
@Resource,@Inject&@Autowired@Componentvs.@Bean(StackOverflow)- Circular Dependencies in Spring
UnsatisfiedDependencyException- Bean Scopes
- β Spring MVC Tutorial
- The DispatcherServlet
- How
@RequestMappingWorks (StackOverflow) - Spring vs. Spring Boot
- π§ͺ Building an Application with Spring Boot (official guide)
@RequestMapping@RequestParam@Controllervs.@RestController- View Resolvers
- π§ͺ Serving Web Content (official guide)
- π₯ Spring Framework β video course (Java Brains)
- β REST with Spring Series
- Building a RESTful Web Service (Java config)
- π§ͺ Building a RESTful Web Service (official guide)
- Spring Profiles (JavaDevJournal)
- Spring Profiles (Baeldung)
- The
@ValueAnnotation - Type-safe
@ConfigurationProperties
- β Testing in Spring Boot
- See also the general Testing chapter (JUnit 5, Mockito, Testcontainers).
Spring Security 6 uses the lambda DSL and requires the
jakarta.*namespace β many older tutorials are out of date, so prefer the resources below.
- β Security with Spring Series
- Spring Boot Security Auto-Configuration
- π Spring Security Reference Docs
- π₯ Spring Security β video series (LinuxTex)
- Guide to Spring WebFlux
- Handling Errors in Spring WebFlux
- Reactor WebFlux vs. Virtual Threads β which to choose
Goal: take a service beyond
localhostβ package it, distribute it, observe it, and add AI.
- β Spring AI β project home
- π Spring AI Reference β Getting Started
- Getting Started with Model Context Protocol (MCP)
Goal: knowledge only sticks when you build. Pick a track and ship something.
- πΊοΈ roadmap.sh β Java
- πΊοΈ roadmap.sh β Spring Boot
- π§ͺ Exercism β Java Track (mentored, free)
- π§ͺ HackerRank β Java
- π§ͺ LeetCode β practice DSA in Java
- β‘ dev.java β official Java resources & guides
- β‘ Baeldung β full Java & Spring catalogue
- π Official Java SE API Docs
- π Spring Guides β task-focused tutorials
Progress from small to production-shaped:
- CLI to-do app β collections, file I/O, exception handling.
- REST API for a bookstore β Spring Boot, Spring Data JPA, validation, exception handling, tests.
- Secured multi-user API β add Spring Security (JWT), profiles, and Testcontainers integration tests.
- Dockerized microservice β containerize it, add Actuator health checks and observability.
- AI-assisted feature β add a Spring AI chat/summarize endpoint backed by a model.
Spotted a dead link, an out-of-date resource, or a missing modern topic? Contributions are very welcome:
- Open an issue describing the fix or the resource you'd add (with a short note on why it's good).
- Or submit a pull request β keep link descriptions concise, prefer up-to-date sources, and place the link in the right chapter.
Great additions: modern-Java resources, hands-on tutorials, and anything that replaces an outdated link with a current one.
Maintained for educational purposes. Curated for Java 25 (LTS) and Spring Boot 4 / Spring Framework 7. Last updated: July 18, 2026.
