Skip to content
ExponaBLOG
Series · Day 100 of 100

Java, Spring Framework & Spring Boot

  1. 01
    Why Java still wins for backend teams: a practical guide
    Java is not legacy. It is a fast, stable runtime with the deepest backend ecosystem around.
  2. 02
    Setting up a modern Java project: lessons from production
    JDK 21, a build tool and sensible defaults — the starting point for every service in this series.
  3. 03
    Java records: data classes without boilerplate explained
    Records replace hundreds of lines of getters, equals and hashCode with one declaration.
  4. 04
    Modern Java syntax you should be using, explained simply
    var, text blocks and switch expressions make everyday Java shorter and clearer.
  5. 05
    Java collections: choosing List, Set and Map in practice
    The right collection makes code faster and intent obvious.
  6. 06
    Java streams examples you will reuse daily: a deep dive
    map, filter and collect — the stream recipes that replace most loops.
  7. 07
    Collectors.groupingBy recipes: best practices explained
    Grouping, counting and summing in one line — the most useful collector.
  8. 08
    Java Optional done right: a hands-on guide for engineers
    Optional is a return type for maybe-missing values, not a replacement for null everywhere.
  9. 09
    Sealed classes and pattern matching in Java & Spring Boot
    Model closed sets of types and let the compiler check you handled every case.
  10. 10
    Checked vs unchecked exceptions in Java, explained simply
    When to force callers to handle errors, and when to let them bubble.
  11. 11
    equals and hashCode: the contract — a step-by-step guide
    Break it and HashMaps silently lose your objects.
  12. 12
    Immutability in Java: a practical Java & Spring Boot guide
    Immutable objects are thread-safe, cache-friendly and easier to reason about.
  13. 13
    Java generics and wildcards: PECS — a step-by-step guide
    Producer extends, consumer super — the rule that makes generic APIs flexible.
  14. 14
    Virtual threads in Java 21: patterns, pitfalls and fixes
    Thread-per-request without the thread cost — blocking code that scales.
  15. 15
    CompletableFuture basics: a hands-on guide for engineers
    Run independent calls in parallel and combine the results.
  16. 16
    JVM memory explained: heap, stack and metaspace explained
    Know where your objects live before you tune anything.
  17. 17
    G1 vs ZGC: choosing a garbage collector, explained simply
    The default is good. Know when to switch.
  18. 18
    Reading a Java thread dump: patterns, pitfalls and fixes
    When a service hangs, a thread dump tells you exactly why.
  19. 19
    Java interview questions: strings and memory in practice
    Classic questions that still show up — with answers that show depth.
  20. 20
    Java features worth learning in 2026: a practical guide
    Skip the trivia. These features change how you write backend code.
  21. 21
    Spring vs Spring Boot: what is the difference explained
    Spring is the framework. Spring Boot is the opinionated way to run it.
  22. 22
    Spring Boot tutorial: your first REST API for production
    A clean CRUD endpoint with the patterns you will use for every feature.
  23. 23
    Structure Spring Boot projects by feature for production
    Package by feature, not by layer, and your codebase stays navigable.
  24. 24
    Dependency injection in Spring Boot in Java & Spring Boot
    Constructor injection, beans and why field injection makes tests painful.
  25. 25
    Spring bean scopes explained: what developers should know
    Singleton is the default — and usually what you want.
  26. 26
    Spring Boot configuration and profiles, explained simply
    application.yml, profiles and environment variables — without secrets in git.
  27. 27
    @ConfigurationProperties for typed config for production
    Stop sprinkling @Value strings across your code.
  28. 28
    Spring Boot validation with Bean Validation: a deep dive
    Reject bad input at the edge with clear error messages.
  29. 29
    Global error handling with @RestControllerAdvice explained
    One consistent error format for every endpoint using ProblemDetail.
  30. 30
    ResponseEntity and HTTP status codes: a practical guide
    Return the status your clients expect.
  31. 31
    DTOs vs JPA entities: a practical Java & Spring Boot guide
    Never return entities from your API.
  32. 32
    Mapping DTOs with MapStruct: what developers should know
    Compile-time mapping that is fast, type-safe and boring in the best way.
  33. 33
    Logging in Spring Boot with SLF4J in Java & Spring Boot
    Good logs answer questions during incidents.
  34. 34
    Spring Boot Actuator: health and metrics for production
    Production readiness in one dependency.
  35. 35
    Faster feedback with Spring Boot DevTools for production
    Restart in a second instead of rebuilding.
  36. 36
    OpenAPI docs with springdoc: what developers should know
    Generate accurate API docs from your code.
  37. 37
    API versioning strategies in Spring Boot for production
    Version only when you must, and pick one strategy.
  38. 38
    Pagination with Spring Data Pageable: a practical guide
    Never return unbounded lists.
  39. 39
    Calling other services: RestClient and WebClient explained
    Typed HTTP clients with timeouts, errors and retries.
  40. 40
    Retries and timeouts with Resilience4j, explained simply
    Remote calls fail. Plan for it.
  41. 41
    Spring Data JPA in five minutes: lessons from production
    Repositories give you CRUD with almost no code.
  42. 42
    JPA entities and relationships: best practices explained
    Map relationships so queries stay predictable.
  43. 43
    Hibernate N+1 query problem: how to fix it — a deep dive
    One query for the list, one per row for its children — the most common JPA performance bug.
  44. 44
    Lazy vs eager fetching in JPA: best practices explained
    Default to lazy. Fetch what each use case needs.
  45. 45
    Spring Data queries: derived, @Query and projections
    Choose the simplest query style that stays readable.
  46. 46
    @Transactional pitfalls in Spring in Java & Spring Boot
    The annotation that looks simple and bites everyone once.
  47. 47
    Optimistic locking with @Version: lessons from production
    Prevent lost updates without database locks.
  48. 48
    Database migrations with Flyway: lessons from production
    Your schema deserves version control.
  49. 49
    Tuning HikariCP connection pools: lessons from production
    Bigger pools are not faster pools.
  50. 50
    Dynamic filters with JPA Specifications, explained simply
    Build search endpoints without string-concatenated queries.