Skip to content

kasitmp/java-boot-camp

Repository files navigation

Java Boot Camp

Boot Camp for developers interested to learn Java.

Plan

  1. Java
    1. What is Java?
    2. How do we develop Java Applications?
  2. Java Language Specification
  3. Setup Environment (SDKMAN)
  4. Gradle and Maven
    1. Advantages of Gradle over Maven
    2. Install Gradle
  5. IDE (IntelliJ IDEA and VS Code)
  6. Create a project using Gradle
    1. Create Project
    2. Explore Project
  7. Hello World Application (from source to executable application)
    1. Gradle Task Dependency Tree
    2. Project Dependencies
    3. Package Project
    4. Make use of third-party libraries
      1. The Classpath
    5. Make a fat JAR
  8. Docker
    1. What is Docker?
    2. How does this work?
    3. More than just Containers
    4. Setup Docker
    5. Working with Docker
    6. Dockerize the Application
    7. Multi-Stage Docker Build
  9. Managing Docker Containers
  1. JShell
  2. Numbers and Strings (Variables and Scope)
    1. Puzzle (Time for a change)
    2. Puzzle (Long Division)
    3. Puzzle (It's Elementary)
    4. Puzzle (The Joy of Hex)
    5. Puzzle (Hello Whirled)
    6. Puzzle (Line Printer)
    7. Puzzle (huh?)
    8. Puzzle (String Cheese)
    9. Puzzle (Classy Fire)
    10. Puzzle (What's my class?)
    11. Puzzle (What's my class, Take 2)
    12. Mutable Strings
      1. Puzzle (No Pain, No Gain)
    13. Multiline Strings
    14. Primitive Types
    15. Signed and Unsigned Integrals
    16. Reference Types (the rest)
    17. Variables and their Values
  3. Stack and Heap
    1. OS Process Memory
    2. What goes in the Java Stack?
    3. What goes in the Java Heap?
    4. Variables without a value
    5. Can we have a reference variable without the equivalent object in the Java heap (null)?
      1. What happens if we try to call a method on a null object?
      2. What is NullPointerException?
    6. The new operator and the Java Heap
    7. Garbage Collection
    8. String or new String?
    9. What happens to a variable when it goes out of scope?
  4. Operators
    1. Puzzle (Tweedledum)
    2. Puzzle (Tweedledee)
    3. Puzzle (The Last Laugh)
    4. Puzzle (Oddity)
    5. Puzzle (Swap Meat)
    6. Puzzle (Escape Rout)
    7. Puzzle (A Big Delight in Every Byte)
    8. Puzzle (Inclement Increment)
  5. Mutable and Immutable
    1. The final keyword
  6. Casting
    1. Puzzle (Multicast)
  7. Autoboxing
    1. Autoboxing is an easy target for NullPointerException
  8. Enumerations
    1. Can we create an instance of an enum?
    2. Enums in Java can have methods
    3. Even enums have names too
    4. Enum's Ordinal
      1. Can we retrieve the enum through the ordinal?
    5. Enums in Java can have state
    6. Considerations before Persisting Enums
      1. Using the Enum's Ordinal as the unit of Persistence
      2. Using the Enum's Name as the unit of Persistence
      3. Using a specific property as the unit of Persistence
    7. Enums can extend functionality
  9. Packages, Imports and Static Imports
    1. Packages
      1. Organise Packages by Technology
      2. Organise Packages by Feature
      3. Organise Packages by Feature and Technology (Hybrid)
    2. Imports
      1. Same class name in different packages
    3. Static Imports
  10. Date Time API
  11. Internationalization
  1. Anatomy of a Java Class
    1. Terms
  2. Classes and methods (static no OOP)
    1. Is void a type?
  3. Properties (static no OOP)
  4. How can we test functionality that makes use of static methods?
    1. What does static mean?
    2. static Fields
  5. Access Control
    1. Classes Access Modifiers Table
    2. Class Members Access Modifiers Table
  6. Simple Objects
    1. Basic Object
    2. Add State
    3. How do instance methods access the object's state?
    4. Multiple Instances
    5. Constructors
      1. How many constructors can a class have?
      2. What are static factory methods?
    6. More State
    7. Mutable and Immutable
      1. How can we create immutable objects?
  7. Inheritance
    1. Light Box Example
    2. Heavy Box Example
    3. The super keyword
    4. The final keyword
    5. Private Constructor
  8. Abstraction
    1. When a class must be abstract?
    2. Can final classes be abstract?
    3. Can abstract classes have private constructors?
  9. The Object Class
    1. The toString() method
    2. The equals() and hashCode() methods
    3. Puzzle (Animal Farm)
  10. Interfaces
    1. Default methods
  11. instanceof and cast operators
  12. Inheritance and Composition
  13. Overloading and Overriding
    1. Overloading
    2. Overriding
  14. Initialisation Blocks, Outer, Inner and Anonymous Classes
    1. Initialisation Block
    2. Static Initialisation Block
    3. Outer Class
    4. Inner Instance Class
    5. Inner Static Class
    6. Inner Anonymous Class
  15. Annotations
    1. Project Lombok
  16. Generics
  17. Miscellaneous
  1. Arrays
    1. Create Arrays
      1. Puzzle (ABC)
    2. Working with Arrays
    3. Read past the array's length
    4. Multidimensional Arrays
      1. Two dimensional array
      2. Irregular Arrays
    5. Arrays are always Mutable
    6. Defensive Copying
    7. Arrays of Objects
    8. Sorting and Searching
    9. An Array of Characters Is Not a String
  2. Lists (Vector, ArrayList and LinkedList)
    1. Create Lists
    2. Types of Lists
      1. Vector
      2. ArrayList
      3. LinkedList
      4. Which List to Use?
    3. Double Brace Initialization
    4. Mutable and Immutable Lists
  3. Set (HashSet, LinkedHashSet and TreeSet)
    1. Create Sets
    2. Set values MUST BE Immutable
    3. Types of Sets
      1. HashSet
      2. LinkedHashSet
      3. TreeSet
      4. Which Set to Use?
    4. Mutable and Immutable Sets
  4. Map (Hashtable, HashMap, LinkedHashMap and TreeMap)
    1. Create Maps
    2. Map Keys MUST BE Immutable
    3. Types of Maps
      1. Hashtable
      2. HashMap
      3. LinkedHashMap
      4. TreeMap
      5. Which Map to Use?
    4. Relation between Collections the Objects they contain
      1. List and the equals() method
      2. Hash based Collections and the equals() and hashCode() methods
  5. Queue and Stack
    1. Queues
    2. Stacks
  6. Java Collections Framework
  7. Google Guava (Collections)
  1. Control Flow and Loops
    1. If (if/else) Control Flow Statement
      1. If Example
      2. If/else Example
      3. If/else-if/else Example
      4. Java Ternary Operator
    2. Switch Control Flow Statement
      1. Switch Example
      2. Switch Fallthrough Example
      3. Switch Default Example
      4. Switch Expressions
    3. For Loop
      1. Puzzles (In the Loop)
    4. While Loop
      1. Puzzle (Shifty i's)
      2. Puzzles (Looper)
      3. Puzzle (Bride of Looper)
      4. Puzzle (Son of Looper)
      5. Puzzle (Ghost of Looper)
    5. Do/While Loop
    6. Foreach Loop
    7. Nested Loops
    8. Break, Continue, Labels and Return
      1. Break
      2. Label
        1. Puzzle (Dupe of URL)
      3. Continue
      4. Return
    9. Loop and Control Flow Examples
      1. How many rolls it takes to roll a 6?
      2. A simple game with dice and random numbers
  2. Exceptions
    1. Alternative Approach
  3. Java Single File Execution
  1. Testing with JUnit 5 (Hamcrest and AssertJ)
    1. Add JUnit 5
    2. Parameterized Test
    3. Custom Converters
    4. Tests Tagging
    5. Nested Tests
    6. Hamcrest
    7. AssertJ
    8. JUnit 5, Hamcrest and AssertJ
    9. Test Lifecycle
  2. Mocking (Mockito and EasyMock)
    1. What is Mocking (Test Doubles) and Why do we need it?
    2. Test Doubles
    3. Mockito
    4. EasyMock
    5. Which Mocking Framework
  3. Mutation Testing (PIT)
  4. Google Guava (Preconditions)
  1. Single-responsibility Principle
  2. Open–closed principle
  3. Liskov substitution principle
  4. Interface segregation principle
  5. Dependency inversion principle
  1. Lambda Expressions
    1. Function as Parameters
    2. Constructor as Parameters
  2. Multiple Parameters
  3. Dealing with Exceptions
  4. Foreach Loops
  5. Streams (Lambda)
    1. Filter
    2. ForEach
    3. Map
    4. FlatMap
    5. Mapping and Filtering
  6. Collectors
  7. Common Uses
    1. Sum numbers in List
    2. Sum content in List based on property
    3. Create Map from List
  1. Try with Resources
  2. Java Streams
    1. Buffered Streams
  3. Java Readers
    1. Consuming an InputStream
    2. Writing to an OutputStream
  4. Java Non-Blocking IO
  5. HTTP Client (Java)
  1. H2, MySQL and PostgreSQL
  2. Data Sources (Hikari Connection Pool)
  3. Flyway (Database Migration)
  4. Statements, Prepared Statements, Result Sets
  5. Transactions
  6. JOOQ
  7. Query DSL
  8. JPA and Hibernate
  1. Java Memory Model
  2. Threads
    1. Daemons
    2. Waiting for a thread to finish (Join)
    3. ThreadLocal
    4. Stale Caches
    5. Race Conditions
    6. Methods that should never be used.
  3. Concurrent Data Classes
    1. Primitive Wrappers
    2. List
    3. Set
    4. Map
    5. Queue
    6. Exchanger
  4. Classic Concurrency Control
    1. Volatile
    2. Synchronized
    3. Deadlocks
  5. New Approach to Concurrency
    1. Executors and Schedulers
    2. Lock and ReentrantLock
    3. Latch
    4. CyclicBarrier
    5. Fork Join Framework
  6. Cost of Concurrency
  7. Miscellaneous
  1. Creational Design Pattern
    1. Factory Pattern
    2. Abstract Factory Pattern
    3. Singleton Pattern
    4. Prototype Pattern
    5. Builder Pattern.
  2. Structural Design Pattern
    1. Adapter Pattern
    2. Bridge Pattern
    3. Composite Pattern
    4. Decorator Pattern
    5. Facade Pattern
    6. Flyweight Pattern
    7. Proxy Pattern
  3. Behavioral Design Pattern
    1. Chain Of Responsibility Pattern
    2. Command Pattern
    3. Interpreter Pattern
    4. Iterator Pattern
    5. Mediator Pattern
    6. Memento Pattern
    7. Observer Pattern
    8. State Pattern
    9. Strategy Pattern
    10. Template Pattern
    11. Visitor Pattern
  1. Java
  2. Gradle
  3. Docker
  4. Kubernetes
  5. JUnit
  6. Mockito
  7. Miscellaneous

About

Java Boot Camp

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • SCSS 62.7%
  • HTML 17.1%
  • JavaScript 16.3%
  • Ruby 3.7%
  • Shell 0.2%