Boot Camp for developers interested to learn Java.
- Java
- Java Language Specification
- Setup Environment (SDKMAN)
- Gradle and Maven
- IDE (IntelliJ IDEA and VS Code)
- Create a project using Gradle
- Hello World Application (from source to executable application)
- Docker
- Managing Docker Containers
- JShell
- Numbers and Strings (Variables and Scope)
- Puzzle (Time for a change)
- Puzzle (Long Division)
- Puzzle (It's Elementary)
- Puzzle (The Joy of Hex)
- Puzzle (Hello Whirled)
- Puzzle (Line Printer)
- Puzzle (huh?)
- Puzzle (String Cheese)
- Puzzle (Classy Fire)
- Puzzle (What's my class?)
- Puzzle (What's my class, Take 2)
- Mutable Strings
- Multiline Strings
- Primitive Types
- Signed and Unsigned Integrals
- Reference Types (the rest)
- Variables and their Values
- Stack and Heap
- OS Process Memory
- What goes in the Java Stack?
- What goes in the Java Heap?
- Variables without a value
- Can we have a reference variable without the equivalent object in the Java heap (null)?
- The new operator and the Java Heap
- Garbage Collection
- String or new String?
- What happens to a variable when it goes out of scope?
- Operators
- Mutable and Immutable
- Casting
- Autoboxing
- Enumerations
- Packages, Imports and Static Imports
- Date Time API
- Internationalization
- Anatomy of a Java Class
- Classes and methods (static no OOP)
- Properties (static no OOP)
- How can we test functionality that makes use of static methods?
- Access Control
- Simple Objects
- Inheritance
- Abstraction
- The Object Class
- Interfaces
- instanceof and cast operators
- Inheritance and Composition
- Overloading and Overriding
- Initialisation Blocks, Outer, Inner and Anonymous Classes
- Annotations
- Generics
- Miscellaneous
- Arrays
- Lists (Vector, ArrayList and LinkedList)
- Set (HashSet, LinkedHashSet and TreeSet)
- Map (Hashtable, HashMap, LinkedHashMap and TreeMap)
- Queue and Stack
- Java Collections Framework
- Google Guava (Collections)
- Control Flow and Loops
- Exceptions
- Java Single File Execution
- Testing with JUnit 5 (Hamcrest and AssertJ)
- Mocking (Mockito and EasyMock)
- Mutation Testing (PIT)
- Google Guava (Preconditions)
- Single-responsibility Principle
- Open–closed principle
- Liskov substitution principle
- Interface segregation principle
- Dependency inversion principle
- Lambda Expressions
- Multiple Parameters
- Dealing with Exceptions
- Foreach Loops
- Streams (Lambda)
- Collectors
- Common Uses
- H2, MySQL and PostgreSQL
- Data Sources (Hikari Connection Pool)
- Flyway (Database Migration)
- Statements, Prepared Statements, Result Sets
- Transactions
- JOOQ
- Query DSL
- JPA and Hibernate
- Java Memory Model
- Threads
- Concurrent Data Classes
- Classic Concurrency Control
- New Approach to Concurrency
- Cost of Concurrency
- Miscellaneous