Industry Ready Java Spring Boot, React & Gen AI — Live Course
Java

Getting Started

This course is designed to take a learner from absolute beginner to advanced Java developer. You will start by understanding how Java works internally, then gradually move toward object-oriented programming, advanced language features, multithreading and memory management.

Each module builds on the previous one, ensuring a smooth learning curve. By the end of these modules, you will be able to:

  • Understand how Java programs run inside the JVM
  • Write clean, efficient Java code following industry standards
  • Fully grasp OOP concepts and apply them in real projects
  • Use advanced Java features like Streams, Lambdas, NIO, Optional, Records, and Virtual Threads
  • Work confidently with data structures, algorithms, collections, and multithreading
  • Understand JVM memory, class loading, and garbage collection
  • Apply design patterns used in enterprise-level systems
  • Become job-ready as an advanced Java developer

01 — Java Basics

Introduction to Java, how it works, essential concepts like variables, data types, input handling, and basic program structure.

java basic

02 — Operators

Understanding how Java performs calculations, comparisons, logical decisions, and evaluation order using different types of operators.

operators

03 — Control Flow

Mastering decision-making tools like if-else, switch statements, loops, and flow-control techniques for building logical programs.

control-flow

04 — Arrays

How to store multiple values, work with single and multidimensional arrays, iterate using loops, and use array utility methods.

arrays

05 — Methods and Constructors

Understanding reusable code blocks, method overloading, constructors, object initialization, and important keywords like this and super.

Methods and Constructors

06 — Classes and Objects

Deep dive into OOP fundamentals, memory model (stack and heap), static members, object lifecycle, garbage collection, and Object class methods. class and object

07 — Encapsulation

How to hide data using private fields, provide controlled access via getters/setters, use access modifiers, and build secure class structures. encapsulation

08 — Inheritance

Building new classes from existing ones, understanding types of inheritance, method overriding, and runtime behavior through polymorphism. inheritance

09 — Polymorphism

Mastering compile-time and runtime polymorphism, method binding, and achieving dynamic behavior in Java programs. polymorhphism

10 — Abstraction and Interfaces

Understanding abstract classes, interfaces, multiple-type inheritance, functional interfaces, lambdas, and interface enhancements in modern Java. abstraction-Interface

11 — Inner Classes

Working with nested classes, method-local, static nested, and anonymous classes for event handling and structural organization. inner class

12 — Enum and Annotation

Learning enumerations for fixed values and annotations for metadata, including built-in and custom annotation creation. enum - annotation

13 — Strings

Understanding string immutability, memory storage (pool), common methods, and mutable alternatives like StringBuilder and StringBuffer. string

14 — Java Lang and Util APIs

Mastering important standard classes like Wrapper types, Math, System, Objects, Arrays, Collections, Date/Calendar, Random, UUID, and the Java Time API.

java util

15 — Exception Handling

Learning error handling techniques, try-catch, multiple catches, finally, throw/throws, custom exceptions, and Java exception hierarchy. exception

16 — Collections Framework

Understanding List, Set, Map, Queue, and their implementations (ArrayList, HashSet, HashMap, TreeMap, PriorityQueue, etc.). colletion

17 — Stream API

Using streams for functional programming, filtering, mapping, reducing, sorting, and working with parallel execution. stream api

18 — Collection Internals

Deep dive into how collections work internally, including HashMap, ConcurrentHashMap, CopyOnWriteArrayList, fail-fast vs fail-safe, and LinkedHashMap. collection-internal

19 — Concurrency Advanced

Mastering Executors, thread pools, Future, Callable, locks, semaphores, latches, barriers, atomics, and high-level concurrency utilities. Concurrency Advanced

20 — JVM Internals

Understanding JVM architecture, class loading, JIT compilation, garbage collectors, memory leaks, and performance tuning. JVM Internals

21 — NIO

Learning buffers, channels, selectors, asynchronous IO, and high-performance file handling used in scalable systems. NIO

22 — Modern Java Features

Features from Java 8 to Java 21 including Optional, Records, Sealed Classes, Enhanced Switch, Text Blocks, Pattern Matching, and Virtual Threads. Modern Java

23 — File Handling

Reading and writing files, buffered streams, serialization, deserialization, and handling external data effectively. File Handling

24 — Design Patterns

Understanding essential object-oriented design patterns including Singleton, Factory, Builder, Prototype, Adapter, Observer, Strategy, and Decorator. Design Patterns

25 — Testing

Unit testing with JUnit, mocking with Mockito, and understanding the fundamentals of test-driven development. Testing

26 — Build Tools

Learning project automation and dependency management using Maven and Gradle. Build tools

java/
├── 01-basics/
│   ├── 01-how-java-works.mdx
│   ├── 02-jdk-setup.mdx
│   ├── 03-jdk-jre-jvm.mdx
│   ├── 04-first-code.mdx
│   ├── 05-naming-convention.mdx
│   ├── 06-variables.mdx
│   ├── 07-data-types.mdx
│   ├── 08-literals.mdx
│   ├── 09-type-conversion.mdx
│   ├── 10-comments.mdx
│   ├── 11-keyboard-input-scanner.mdx
│   ├── 12-keyboard-input-bufferedreader.mdx
│   ├── 13-command-line-arguments.mdx
│   └── meta.json

├── 02-operators/
│   ├── 01-arithmetic-operators.mdx
│   ├── 02-relational-operators.mdx
│   ├── 03-logical-bitwise-operators.mdx
│   ├── 04-unary-operators.mdx
│   ├── 05-assignment-operators.mdx
│   ├── 06-ternary-operator.mdx
│   ├── 07-operator-precedence.mdx
│   └── meta.json

├── 03-control-flow/
│   ├── 01-if-else.mdx
│   ├── 02-nested-if.mdx
│   ├── 03-switch-statements.mdx
│   ├── 04-newer-switch.mdx
│   ├── 05-while-loop.mdx
│   ├── 06-do-while-loop.mdx
│   ├── 07-for-loop.mdx
│   ├── 08-enhanced-for-loop.mdx
│   ├── 09-break-and-continue.mdx
│   ├── 10-labels-in-java.mdx
│   ├── 11-which-loop-to-use.mdx
│   └── meta.json

├── 04-arrays/
│   ├── 01-need-of-array.mdx
│   ├── 02-array-basics.mdx
│   ├── 03-creation-of-array.mdx
│   ├── 04-array-iteration-techniques.mdx
│   ├── 05-drawbacks-of-array.mdx
│   ├── 06-array-of-objects.mdx
│   ├── 07-multi-dimensional-array.mdx
│   ├── 08-jagged-and-3d-array.mdx
│   ├── 09-arrays-class-methods.mdx
│   └── meta.json

├── 05-methods-and-constructors/
│   ├── 01-methods-in-java.mdx
│   ├── 02-method-overloading.mdx
│   ├── 03-varargs-in-java.mdx
│   ├── 04-static-method.mdx
│   ├── 05-this-keyword.mdx
│   ├── 06-super-keyword.mdx
│   ├── 07-constructors.mdx
│   ├── 08-default-vs-parameterized-constructor.mdx
│   ├── 09-constructor-chaining.mdx
│   ├── 10-copy-constructor.mdx
│   ├── 11-anonymous-object.mdx
│   └── meta.json

├── 06-classes-and-objects/
│   ├── 01-introduction.mdx
│   ├── 02-class-and-object-theory.mdx
│   ├── 03-class-and-object-practical.mdx
│   ├── 04-stack-and-heap.mdx
│   ├── 05-garbage-collection-and-finalize.mdx
│   ├── 06-static-variable.mdx
│   ├── 07-static-block.mdx
│   ├── 08-object-class-methods.mdx
│   ├── 09-cloneable-interface.mdx
│   ├── 10-packages-in-java.mdx
│   └── meta.json

├── 07-encapsulation/
│   ├── 01-encapsulation-concept.mdx
│   ├── 02-getters-and-setters.mdx
│   ├── 03-access-modifiers.mdx
│   ├── 04-data-hiding-vs-encapsulation.mdx
│   ├── 05-immutable-class.mdx
│   └── meta.json

├── 08-inheritance/
│   ├── 01-need-of-inheritance.mdx
│   ├── 02-what-is-inheritance.mdx
│   ├── 03-types-of-inheritance.mdx
│   ├── 04-multiple-inheritance.mdx
│   ├── 05-super-keyword-in-inheritance.mdx
│   ├── 06-upcasting-and-downcasting.mdx
│   ├── 07-dynamic-method-dispatch.mdx
│   ├── 08-has-a-vs-is-a-relationship.mdx
│   └── meta.json

├── 09-polymorphism/
│   ├── 01-polymorphism-overview.mdx
│   ├── 02-compile-time-polymorphism.mdx
│   ├── 03-run-time-polymorphism.mdx
│   ├── 04-binding-static-vs-dynamic.mdx
│   └── meta.json

├── 10-abstraction-and-interfaces/
│   ├── 01-abstract-class.mdx
│   ├── 02-abstract-method.mdx
│   ├── 03-interface-basics.mdx
│   ├── 04-need-of-interface.mdx
│   ├── 05-more-on-interfaces.mdx
│   ├── 06-types-of-interface.mdx
│   ├── 07-default-method-in-interface.mdx
│   ├── 08-static-method-in-interface.mdx
│   ├── 09-functional-interface.mdx
│   ├── 10-lambda-expression-basics.mdx
│   ├── 11-lambda-with-return.mdx
│   ├── 12-marker-interface.mdx
│   └── meta.json

├── 11-inner-classes/
│   ├── 01-inner-class.mdx
│   ├── 02-method-local-inner-class.mdx
│   ├── 03-static-inner-class.mdx
│   ├── 04-anonymous-inner-class.mdx
│   ├── 05-abstract-anonymous-inner-class.mdx
│   └── meta.json

├── 12-enum-and-annotation/
│   ├── 01-what-is-enum.mdx
│   ├── 02-enum-if-and-switch.mdx
│   ├── 03-enum-class.mdx
│   ├── 04-annotation-basics.mdx
│   ├── 05-built-in-annotations.mdx
│   ├── 06-custom-annotation.mdx
│   └── meta.json

├── 13-strings/
│   ├── 01-what-is-string.mdx
│   ├── 02-mutable-vs-immutable.mdx
│   ├── 03-stringbuffer-stringbuilder.mdx
│   ├── 04-string-methods.mdx
│   ├── 05-string-pool.mdx
│   ├── 06-string-performance.mdx
│   └── meta.json

├── 14-lang-and-util-apis/
│   ├── 01-overview-java-lang-and-java-util.mdx
│   ├── 02-wrapper-classes.mdx
│   ├── 03-math-class.mdx
│   ├── 04-system-and-runtime.mdx
│   ├── 05-objects-class.mdx
│   ├── 06-random-class.mdx
│   ├── 07-scanner-class.mdx
│   ├── 08-arrays-utility-class.mdx
│   ├── 09-collections-utility-class.mdx
│   ├── 10-date-and-calendar.mdx
│   ├── 11-java-time-api.mdx
│   ├── 12-optional-class.mdx
│   ├── 13-uuid-class.mdx
│   └── meta.json

├── 15-exception-handling/
│   ├── 01-what-is-exception.mdx
│   ├── 02-try-catch.mdx
│   ├── 03-multiple-catch.mdx
│   ├── 04-finally-block.mdx
│   ├── 05-try-with-resources.mdx
│   ├── 06-throw-vs-throws.mdx
│   ├── 07-custom-exception.mdx
│   ├── 08-exception-hierarchy.mdx
│   ├── 09-checked-vs-unchecked-exception.mdx
│   └── meta.json

├── 16-collections/
│   ├── 01-collection-framework-overview.mdx
│   ├── 02-list-interface.mdx
│   ├── 03-arraylist.mdx
│   ├── 04-linkedlist.mdx
│   ├── 05-set-interface.mdx
│   ├── 06-hashset.mdx
│   ├── 07-treeset.mdx
│   ├── 08-map-interface.mdx
│   ├── 09-hashmap.mdx
│   ├── 10-treemap.mdx
│   ├── 11-comparator-vs-comparable.mdx
│   ├── 12-queue-and-deque.mdx
│   ├── 13-priorityqueue.mdx
│   └── meta.json

├── 17-stream-api/
│   ├── 01-need-of-stream-api.mdx
│   ├── 02-for-each-method.mdx
│   ├── 03-stream-basics.mdx
│   ├── 04-stream-intermediate-operations.mdx
│   ├── 05-stream-terminal-operations.mdx
│   ├── 06-stream-parallelism.mdx
│   └── meta.json

├── 18-collection-internals/
│   ├── 01-hashmap-internals.mdx
│   ├── 02-concurrenthashmap.mdx
│   ├── 03-copyonwritearraylist.mdx
│   ├── 04-linkedhashmap.mdx
│   ├── 05-failfast-vs-failsafe.mdx
│   └── meta.json

├── 19-concurrency-advanced/
│   ├── 01-threadpool-executor.mdx
│   ├── 02-callable-and-future.mdx
│   ├── 03-scheduledexecutorservice.mdx
│   ├── 04-lock-framework.mdx
│   ├── 05-readwritelock.mdx
│   ├── 06-semaphores.mdx
│   ├── 07-countdownlatch.mdx
│   ├── 08-cyclicbarrier.mdx
│   ├── 09-phaser.mdx
│   ├── 10-atomic-variables.mdx
│   └── meta.json

├── 20-jvm-internals/
│   ├── 01-jvm-architecture.mdx
│   ├── 02-classloader.mdx
│   ├── 03-jit-compiler.mdx
│   ├── 04-garbage-collector-types.mdx
│   ├── 05-memory-leaks.mdx
│   ├── 06-jvm-performance-tuning.mdx
│   └── meta.json

├── 21-nio/
│   ├── 01-path-and-files.mdx
│   ├── 02-buffers-and-channels.mdx
│   ├── 03-selectors.mdx
│   ├── 04-asynchronous-io.mdx
│   └── meta.json

├── 22-modern-java/
│   ├── 01-optional-class.mdx
│   ├── 02-records.mdx
│   ├── 03-sealed-classes.mdx
│   ├── 04-switch-expressions.mdx
│   ├── 05-text-blocks.mdx
│   ├── 06-pattern-matching-instanceof.mdx
│   ├── 07-virtual-threads.mdx
│   └── meta.json

├── 23-file-handling/
│   ├── 01-file-reading-writing.mdx
│   ├── 02-buffered-io.mdx
│   ├── 03-serialization.mdx
│   ├── 04-deserialization.mdx
│   └── meta.json

├── 24-design-patterns/
│   ├── 01-singleton.mdx
│   ├── 02-factory.mdx
│   ├── 03-abstract-factory.mdx
│   ├── 04-builder.mdx
│   ├── 05-prototype.mdx
│   ├── 06-adapter.mdx
│   ├── 07-observer.mdx
│   ├── 08-strategy.mdx
│   ├── 09-decorator.mdx
│   └── meta.json

├── 25-testing/
│   ├── 01-junit-basics.mdx
│   ├── 02-mockito.mdx
│   ├── 03-test-driven-development.mdx
│   └── meta.json

├── 26-build-tools/
│   ├── 01-maven.mdx
│   ├── 02-gradle.mdx
│   └── meta.json

├── 27-spring-core/
│   ├── 01-ioc-container.mdx
│   ├── 02-beans.mdx
│   ├── 03-dependency-injection.mdx
│   ├── 04-spring-configurations.mdx
│   └── meta.json

├── 28-spring-boot/
│   ├── 01-spring-boot-intro.mdx
│   ├── 02-auto-configuration.mdx
│   ├── 03-rest-controller.mdx
│   ├── 04-crud-api.mdx
│   ├── 05-jpa-and-hibernate.mdx
│   └── meta.json

└── 29-rest-api/
    ├── 01-what-is-rest.mdx
    ├── 02-http-methods.mdx
    ├── 03-request-response.mdx
    ├── 04-status-codes.mdx
    ├── 05-rest-best-practices.mdx
    └── meta.json

Written By: Shiva Srivastava

How is this guide?

Last updated on