Advanced Java Backend
JVM, concurrency, JPA/SQL and testing depth for running real services on your own.
This program is planned and not scheduled yet. No date, price or cohort has been announced. If you register interest, we contact you when it is scheduled or to discuss an individual format.
Objective
This program supports the step from junior developer to someone who can own a real service independently. It concentrates on how the JVM and memory behave, on getting concurrency and database work right, and on diagnosing problems in production-like conditions. Code review is practised from both sides, as author and as reviewer.
Who it's for
- Junior developers with at least 1 year of Java who have written CRUD services in Spring Boot
- Engineers who want to understand why code behaves as it does (memory, threads, query plans)
- People who want to own a task end to end and defend their decisions in review
- Engineers closing gaps on the way to the middle level in a systematic way
Who it's not for
- Complete beginners in Java: start with the Java Backend Career Track instead
- Anyone who only wants framework configuration recipes: this program works on the underlying depth
- Anyone looking for Kubernetes and infrastructure automation: that is not its subject
Prerequisites
- Comfortable with Java 17+ syntax, collections, exceptions and generics
- Hands-on experience with a simple REST service in Spring Boot and basic CRUD with JPA
- SQL fundamentals: JOIN, GROUP BY and the idea of an index
- Familiarity with Git and the Pull Request workflow
What you will be able to do
What you will be able to do
- Explain heap, stack, GC and class loading with a simple diagram and draw first conclusions from a heap dump
- Choose between executors, CompletableFuture and virtual threads for a given problem and justify the choice
- Reproduce a race condition or deadlock with a test and a thread dump, then fix it
- Find N+1, lazy loading and transaction-boundary problems and resolve them at the JPA/SQL level
- Read an EXPLAIN plan and justify an index or query change with measurements
- Build a sensible test strategy made of unit, slice and integration tests
- Diagnose a production-like performance problem with logs, metrics and a profiler
- Present a Pull Request and review someone else's constructively
No education program can guarantee employment or a promotion.
Curriculum
Curriculum
- 01
The JVM and memory
How the JVM manages code and memory, and how to investigate memory problems with measurements.
- Heap, stack, metaspace and object lifetime
- Garbage collectors (G1, ZGC) and the notion of pauses
- Class loading and JIT compilation
- Reading heap dumps and GC logs
- Typical leak sources (caches, listeners, ThreadLocal)
Hands-on lab: Analyse a service with a deliberate memory leak using a heap dump, locate the source and fix it.
- 02
Concurrency and virtual threads
From the Java Memory Model to virtual threads: writing parallel code that is correct and safe.
- Java Memory Model, happens-before and visibility
- synchronized, Lock, atomics and concurrent collections
- ExecutorService, CompletableFuture and structured concurrency
- Virtual threads: when they help, and the pinning problem
- Diagnosing deadlock, livelock and starvation
- Reading thread dumps
Hands-on lab: Create a race condition in code that updates a shared balance, reproduce it with a test, then fix it in two different ways and compare.
- 03
JPA and Hibernate in depth
Safe work with JPA requires knowing how the persistence context, flush and lazy loading actually behave.
- Persistence context, dirty checking and flush modes
- Lazy versus eager loading and the N+1 problem
- Fetch joins, entity graphs and projections
- Batch insert/update and optimistic locking
- Transaction boundaries and the causes of LazyInitializationException
Hands-on lab: Measure an endpoint with an N+1 problem through SQL logs, fix it in three different ways and compare query counts.
- 04
SQL and query performance
Finding out why a query is slow from its plan and choosing the right index.
- Reading EXPLAIN / EXPLAIN ANALYZE
- B-tree indexes, composite indexes and column order
- Covering indexes and selectivity
- Pagination: offset versus keyset
- Isolation levels and locking behaviour
Hands-on lab: Analyse a slow query on a large table with its plan, add an index, and present before/after measurements in a written note.
- 05
Testing strategy
Deciding what to test at which level so that tests stay cheap and trustworthy.
- The test pyramid and its limits
- JUnit 5, Mockito and the over-use of mocks
- Integration tests against a real database with Testcontainers
- Slice tests (@DataJpaTest, @WebMvcTest)
- Causes of flaky tests and how to remove them
Hands-on lab: Write a test strategy document for an existing service and add a Testcontainers integration test for its critical flow.
- 06
Clean code in a growing codebase
Managing structure, naming and dependencies as a codebase grows.
- Package structure and dependency rules between layers
- Separating the domain model from service code
- Refactoring techniques and test-protected change
- Designing exceptions and an error model
- Making technical debt visible
Hands-on lab: Split a complex service class into small parts with clear responsibilities while keeping the tests green.
- 07
Diagnosing production-like problems
A systematic approach to slowness, memory growth and quiet failures.
- Structured logging and correlation IDs
- Micrometer metrics and the key signals
- Reading profilers and flame graphs
- Connection pool exhaustion and thread pool saturation
- A hypothesis-driven diagnosis method
Hands-on lab: Diagnose a deliberately broken service (pool exhaustion, slow query) using only logs, metrics and a profiler, and write up a postmortem.
- 08
Code review practice
Review is both a skill and a team habit; we practise it from both sides.
- Preparing small, well-explained Pull Requests
- A review checklist: correctness, readability, tests, risk
- Writing constructive feedback and responding to it
- Security and performance signals in review
Hands-on lab: Review a given Pull Request in writing, then answer the comments on your own Pull Request with reasoned replies.
Practice assignments
- Heap dump analysis with a written conclusion
- A test that reproduces and then guards a concurrency bug
- Measuring and reducing JPA query counts
- Justifying an index decision with EXPLAIN
- Reviewing two Pull Requests
Portfolio deliverables
- A load-tested service with a short capacity note
- A test strategy document and Testcontainers tests
- A written postmortem of a performance diagnosis
- A portfolio sample of written code reviews
How learning is assessed
- Mentor code review of your Pull Requests
- Defense of the diagnosis postmortem
- A practical check on concurrency and JPA
- A short technical discussion in which you explain your own code
Tools and technologies
- Java 21
- Spring Boot
- PostgreSQL
- JUnit 5 and Mockito
- Testcontainers
- VisualVM and JDK Flight Recorder
- Eclipse MAT
- Micrometer
- Git
Level progression
- Before
- Before: the Java Backend Career Track, or at least 1 year of practical junior-level experience.
- After
- After: Enterprise Spring Boot, then Microservices and Distributed Systems.
- Length and format
- Length and format are not set yet; the program is planned and not scheduled.
Frequently asked questions
Frequently asked questions
Is this program available now?
No. It is planned and not scheduled yet. No dates or prices have been announced. You can register interest or request a consultation.
I have not taken the Java Backend Career Track. Can I join?
Possibly, if you have at least 1 year of real work with Java and Spring Boot. If your fundamentals are weak, the Career Track is the better route. A consultation can help assess your level together.
Do I need Java 21 for virtual threads?
Yes, the program is built on Java 21. Earlier versions have no virtual threads, although the other topics (JVM, JPA, SQL, testing) apply to earlier versions too.
Will the program give a certificate?
No certificate is promised. Evaluation takes the form of mentor feedback, reviews and defenses, and is a recommendation only.
Articles related to this program
- Java CoreChoosing the right Java collection
- Advanced JavaJava concurrency basics
- Java CoreThe equals and hashCode contract in Java
- Java CoreDesigning exceptions in Java services
- Advanced JavaJava memory and garbage collection for service developers
- Java CoreJava streams: readable pipelines and common pitfalls