This repository contains executable code samples and demonstrations for key Java concepts covered in the workshop.
Located in samples/ directory:
-
01-memory-layout - List Memory Layout
- ArrayList vs LinkedList internal structure
- Memory overhead and cache locality
- Performance comparison
- Run:
java samples/01-memory-layout/ListMemoryDemo.java
-
02-equals-hashcode - Equals and HashCode Contract
- Proper implementation patterns
- Contract violations and consequences
- HashMap behavior demonstration
- Run:
java samples/02-equals-hashcode/EqualsHashCodeDemo.java
-
03-streams - Stream Pipelines
- Declarative vs imperative programming
- Lazy evaluation
- Powerful collectors
- Run:
java samples/03-streams/StreamPipelineDemo.java
-
04-optional - Optional Container
- Anti-patterns to avoid
- Best practices
- Functional style operations
- Run:
java samples/04-optional/OptionalDemo.java
Located in demos/ directory:
- 05-springboot-architecture - Spring Boot Architecture
- Dependency Injection pattern
- Layered architecture (Controller → Service → Repository)
- Loose coupling benefits
- Run:
java demos/05-springboot-architecture/SpringBootArchitectureDemo.java
# From the project root directory
./run-all-demos.sh# Memory Layout
java samples/01-memory-layout/ListMemoryDemo.java
# Equals and HashCode
java samples/02-equals-hashcode/EqualsHashCodeDemo.java
# Streams
java samples/03-streams/StreamPipelineDemo.java
# Optional
java samples/04-optional/OptionalDemo.java
# Spring Boot Architecture
java demos/05-springboot-architecture/SpringBootArchitectureDemo.javaBased on overview.md:
- ✅ Moving beyond Java syntax to deep internals and modern patterns
- ✅ Abstraction and design for loose coupling → Better testability and maintainability
- ✅ Memory layout of lists → ArrayList vs LinkedList internals
- ✅ Proper contract for equals and hashCode → HashMap behavior
- ✅ Declarative Stream Pipelines → Functional programming in Java
- ✅ Optional container → Null-safe programming
- ✅ Production-grade Spring Boot architecture → Dependency injection best practices
- Memory Matters: Understand how data structures are laid out in memory for performance
- Contracts Are Critical: equals/hashCode contract must be maintained for collections
- Think Declaratively: Streams make code more readable and maintainable
- Embrace Optional: Avoid NullPointerException with functional style
- Design for Change: Loose coupling through DI enables testability and flexibility
Recommended order for beginners:
- Start with Memory Layout to understand fundamentals
- Learn Equals/HashCode for collection usage
- Master Streams for modern Java programming
- Adopt Optional for null-safe code
- Apply Spring Boot patterns for production applications
- Java 11 or higher (for modern features like
var, enhanced Optional methods) - No external dependencies required for basic samples
- Spring Boot samples use conceptual patterns (no actual Spring dependencies)
- Each demo is self-contained and can run independently
- Read the code comments for detailed explanations
- Experiment by modifying the examples
- Use these as templates for your own projects
Happy Learning! 🚀