Boot Camp for developers interested to learn Java.
- Java
- 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)
- Extend your application capabilities (using third-party libraries)
- Making Applications Portable (Containerisation using Docker)
- JShell
- Java single file execution
- Introduction to classes and methods
- Using existing functionality
- Introduction to variables and types
- Introduction to collections
- Introduction to control-flow
- Annotations
- 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
- Text blocks and 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
- Miscellaneous
- Anatomy of a Java class
- Classes, methods and properties (static no OOP)
- How can we test functionality that makes use of
static
methods? - Access control
- Simple objects
- What does
this
means? - Constructors
- Mutable and immutable
- Inheritance
- Extending the
Box
functionality (creating and evolving theLightBox
class step by step) - Can we add items to a box if the box is not open?
- 🤔 Can we design our classes to automatically prevents the object from going into invalid state (finite state machine)?
- Create the
HeavyBox
(complete example) - How can a subclass invoke a method in the parent class (the
super
keyword)? - Can we prevent a class from being extended (the
final
keyword)? - Are constructors inherited?
- How do
private
constructor effect inheritance? - Can a subclass invoke the constructor of a superclass (the
super()
)? - Can a constructor in a parent class call a method in a subclass?
- What happens when not all 'children' are 'parents'?
- Is inheritance evil and should be considered as an anti-pattern?
- Extending the
- Abstraction
- The
Object
class
- Interfaces
- What is an interface?
- How is an interface different from a class?
- How can we use interfaces?
- Can we create an instance of an interface?
- Functional interface and lambda functions
- Can an interface extend another class or another interface?
- How many interfaces can a class implement?
- What happens if a class implements two interfaces that have the same abstract method?
- What's the purpose of an interface that has no abstract methods (marker interface)?
- What are
default
andstatic
methods? - What happens if a class implements two interfaces that have the same
default
methods? - Can we use an interface just to define constants?
- Sorting (the
Comparable
andComparator
interfaces)- How can we apply natural ordering to a custom class (the
Comparable
interface)? - How does the
compareTo()
method works? - What will happen if one of the properties used is
null
? - Can we use multiple properties to determine natural ordering?
- How can we sort the
Point
or any other custom class (theComparator
interface)? - Can we compare two integers by subtracting one from the other?
- How can we apply natural ordering to a custom class (the
- The
instanceof
and type cast operators- Is there a better approach than relying on
instanceof
and type cast operators (polymorphism)? - Are there good examples of the
instanceof
and type cast operators? - What is type upcasting and how is it different from type casting or type downcasting?
- Can we type cast
null
? - Can we type cast primitive types?
- Is there a better approach than relying on
- Inheritance and composition
- Overloading, overriding, and hiding
- Overriding
- Do we need to use the
@Override
annotation? - Can we use the
@Override
annotation when overriding methods defined by an interface? - Can we override a private method?
- Can we change the visibility of an overridden method?
- Can a parent class prevent a method from being overridden?
- Can we return something different when overriding methods?
- Can we override static methods?
- Do we need to use the
- Overloading
- Hiding
- Overriding
- Initialisation blocks, outer, inner and anonymous classes
- Annotations
- Generics
- Miscellaneous
- Definition
- Arrays
- Lists (Vector, ArrayList and LinkedList)
- Set (HashSet, LinkedHashSet and TreeSet)
- Map (Hashtable, HashMap, LinkedHashMap and TreeMap)
- Covariance and invariance
- Relation between Collections the Objects they contain
- Queue and Stack
- Java Collections Framework
- Google Guava (Collections)
- Miscellaneous
- Control Flow and Loops
- Exceptions
- Testing with JUnit 5 (Hamcrest and AssertJ)
- Mocking (Mockito and EasyMock)
- Mutation Testing (PIT)
- Google Guava (Preconditions)
- Miscellaneous
- Single-responsibility Principle
- Open–closed principle
- Liskov substitution principle
- Interface segregation principle
- Dependency inversion principle
- Miscellaneous
- Lambda Expressions
- Multiple Parameters
- Dealing with Exceptions
- Foreach Loops
- Streams (Lambda)
- Collectors
- Common Uses
- Miscellaneous
- 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