├── images └── java-collection-hierarchy.png └── README.md /images/java-collection-hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simantaturja/Learn-Java-Spring/HEAD/images/java-collection-hierarchy.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Java and Spring Learning Materials 2 | 3 | Welcome! This repository is a curated collection of high-quality resources for learning Java and the Spring Framework, from beginner to advanced topics. Whether you're just starting out or looking to deepen your expertise, you'll find helpful links, guides, and tutorials here. 4 | 5 | --- 6 | 7 | ## Table of Contents 8 | 9 | - [Chapter 1: Fundamentals of Java](#chapter-1-fundamentals-of-java) 10 | - [Chapter 2: Intermediate Java](#chapter-2-intermediate-java) 11 | - [Chapter 3: Advanced Java](#chapter-3-advanced-java) 12 | - [Chapter 4: Java Build Tools](#chapter-4-java-build-tools) 13 | - [Chapter 5: Java EE](#chapter-5-java-ee) 14 | - [Chapter 6: Clean Code and Design Patterns](#chapter-6-clean-code-and-design-patterns) 15 | - [Chapter 7: Java Spring Framework and Spring Boot](#chapter-7-java-spring-framework-and-spring-boot) 16 | 17 | --- 18 | 19 | ## Chapter 1: Fundamentals of Java 20 | 21 | ### 1.1 Primitives 22 | 23 | 1.1.1 [https://www.baeldung.com/java-primitives](https://www.baeldung.com/java-primitives) 24 | 25 | 1.1.2 [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) 26 | 27 | ### 1.2 Conditionals 28 | 29 | **1.2.1. Basics** 30 | 31 | [https://www.baeldung.com/java-control-structures](https://www.baeldung.com/java-control-structures) 32 | 33 | **1.2.2 Some conventions to follow** 34 | 35 | [https://www.baeldung.com/java-using-not-in-if-conditions](https://www.baeldung.com/java-using-not-in-if-conditions) 36 | 37 | **1.2.3 Switch Case** 38 | 39 | [https://www.baeldung.com/java-switch](https://www.baeldung.com/java-switch) 40 | 41 | ### 1.3 Loops 42 | 43 | - [https://www.baeldung.com/java-loops](https://www.baeldung.com/java-loops) 44 | 45 | ### 1.4 OOP (Object-Oriented Programming) 46 | 47 | #### 1.4.1 Class, Interfaces, Abstract Class, Access Modifiers 48 | 49 | - [https://www.baeldung.com/java-oop](https://www.baeldung.com/java-oop) 50 | - [https://www.baeldung.com/java-concrete-class](https://www.baeldung.com/java-concrete-class) 51 | - [https://www.codejava.net/java-core/the-java-language/9-rules-about-constructors-in-java](https://www.codejava.net/java-core/the-java-language/9-rules-about-constructors-in-java) 52 | - [https://www.codejava.net/java-core/the-java-language/everything-you-need-to-know-about-interfaces-in-java](https://www.codejava.net/java-core/the-java-language/everything-you-need-to-know-about-interfaces-in-java) 53 | - [https://java2blog.com/difference-between-abstract-class-and-interface-in-java](https://java2blog.com/difference-between-abstract-class-and-interface-in-java) 54 | - [https://www.baeldung.com/java-access-modifiers](https://www.baeldung.com/java-access-modifiers) 55 | - [https://www.codejava.net/java-core/the-java-language/java-access-modifiers-examples-public-protected-private-and-default](https://www.codejava.net/java-core/the-java-language/java-access-modifiers-examples-public-protected-private-and-default) 56 | 57 | #### 1.4.2 Encapsulation 58 | 59 | - [https://www.codejava.net/java-core/the-java-language/what-is-encapsulation-in-java-the-what-why-and-how](https://www.codejava.net/java-core/the-java-language/what-is-encapsulation-in-java-the-what-why-and-how) 60 | 61 | #### 1.4.3 Abstraction 62 | 63 | - [https://www.codejava.net/java-core/the-java-language/what-is-abstraction-in-java-the-why-and-the-truth](https://www.codejava.net/java-core/the-java-language/what-is-abstraction-in-java-the-why-and-the-truth) 64 | 65 | - [https://www.javatpoint.com/abstract-class-in-java#:~:text=in%20Java%20first.-,Abstraction%20in%20Java,text%20and%20send%20the%20message.](https://www.javatpoint.com/abstract-class-in-java#:~:text=in%20Java%20first.-,Abstraction%20in%20Java,text%20and%20send%20the%20message.) 66 | 67 | #### 1.4.4 Inheritance 68 | 69 | - [https://www.codejava.net/java-core/the-java-language/what-is-inheritance-in-java-the-what-why-and-how](https://www.codejava.net/java-core/the-java-language/what-is-inheritance-in-java-the-what-why-and-how) 70 | - [https://www.codejava.net/java-core/the-java-language/12-rules-and-examples-about-inheritance-in-java](https://www.codejava.net/java-core/the-java-language/12-rules-and-examples-about-inheritance-in-java) 71 | - [https://www.baeldung.com/java-inheritance-composition](https://www.baeldung.com/java-inheritance-composition) 72 | 73 | #### 1.4.5 Polymorphism 74 | 75 | - [https://www.codejava.net/java-core/the-java-language/what-is-polymorphism-in-java-the-what-how-and-why](https://www.codejava.net/java-core/the-java-language/what-is-polymorphism-in-java-the-what-how-and-why) 76 | 77 | #### 1.4.6 Overloading & Overriding 78 | 79 | - [https://www.codejava.net/java-core/the-java-language/what-is-overloading-in-java-and-examples](https://www.codejava.net/java-core/the-java-language/what-is-overloading-in-java-and-examples) 80 | - [https://www.codejava.net/java-core/the-java-language/12-rules-of-overriding-in-java-you-should-know](https://www.codejava.net/java-core/the-java-language/12-rules-of-overriding-in-java-you-should-know) 81 | - [https://www.codejava.net/java-core/the-java-language/differences-between-overriding-and-overloading](https://www.codejava.net/java-core/the-java-language/differences-between-overriding-and-overloading) 82 | - [https://www.javatpoint.com/covariant-return-type](https://www.javatpoint.com/covariant-return-type) 83 | - [Hidden Method](https://www.javatpoint.com/method-hiding-in-java#:~:text=What%20is%20method%20hiding%3F&text=Method%20hiding%20can%20be%20defined,is%20known%20as%20method%20hiding.) 84 | 85 | #### 1.4.7 Miscellaneous 86 | 87 | - [https://dzone.com/articles/default-and-private-methods-in-interfaces](https://dzone.com/articles/default-and-private-methods-in-interfaces) 88 | 89 | - [https://www.baeldung.com/java-this](https://www.baeldung.com/java-this) 90 | - [https://www.baeldung.com/java-type-casting](https://www.baeldung.com/java-type-casting) 91 | - [https://www.baeldung.com/java-static](https://www.baeldung.com/java-static) 92 | - [https://java2blog.com/final-keyword-java-example/](https://java2blog.com/final-keyword-java-example/) 93 | - [https://java2blog.com/static-block-java/](https://java2blog.com/static-block-java/) 94 | - [https://java2blog.com/java-static-import-example/](https://java2blog.com/java-static-import-example/) 95 | - [https://www.baeldung.com/java-static-default-methods](https://www.baeldung.com/java-static-default-methods) 96 | - [Java Variables Passing Examples - Pass-by-value or Pass-by-reference?](https://codejava.net/java-core/the-java-language/java-variables-passing-examples-pass-by-value-or-pass-by-reference) 97 | - [https://www.baeldung.com/java-wrapper-classes](https://www.baeldung.com/java-wrapper-classes) 98 | - [https://www.javatpoint.com/java-bean](https://www.javatpoint.com/java-bean) 99 | - [https://stackoverflow.com/a/3295517/10197771](https://stackoverflow.com/a/3295517/10197771) 100 | - [https://www.baeldung.com/java-pojo-class](https://www.baeldung.com/java-pojo-class) 101 | - [https://www.baeldung.com/a-guide-to-java-enums](https://www.baeldung.com/a-guide-to-java-enums) 102 | - [https://www.baeldung.com/java-tostring](https://www.baeldung.com/java-tostring) 103 | - [https://www.baeldung.com/java-equals-hashcode-contracts](https://www.baeldung.com/java-equals-hashcode-contracts) 104 | - [https://www.baeldung.com/java-bigdecimal-biginteger](https://www.baeldung.com/java-bigdecimal-biginteger) 105 | - [https://www.baeldung.com/java-serialization](https://www.baeldung.com/java-serialization) 106 | - [https://dzone.com/articles/what-is-serialization-everything-about-java-serial](https://dzone.com/articles/what-is-serialization-everything-about-java-serial) 107 | - [https://stackoverflow.com/a/37632/10197771](https://stackoverflow.com/a/37632/10197771) 108 | 109 | ### 1.5 String 110 | 111 | - [https://www.techiedelight.com/difference-between-string-stringbuilder-java/#:~:text=A%20String%20is%20immutable%20in,created%20in%20the%20string%20pool](https://www.techiedelight.com/difference-between-string-stringbuilder-java/#:~:text=A%20String%20is%20immutable%20in,created%20in%20the%20string%20pool). 112 | - Check String API Section from here: [https://www.baeldung.com/java-string](https://www.baeldung.com/java-string) 113 | - [https://java2blog.com/core-java-tutorial-for-beginners-experienced/#Chapter_11_String_Handling](https://java2blog.com/core-java-tutorial-for-beginners-experienced/#Chapter_11_String_Handling) 114 | 115 | ### 1.6 Exception Handling 116 | 117 | - [https://www.baeldung.com/java-exceptions](https://www.baeldung.com/java-exceptions) 118 | - [https://www.baeldung.com/java-checked-unchecked-exceptions](https://www.baeldung.com/java-checked-unchecked-exceptions) 119 | - [https://java2blog.com/difference-between-throw-and-throws-in-java/](https://java2blog.com/difference-between-throw-and-throws-in-java/) 120 | - [https://www.baeldung.com/java-new-custom-exception](https://www.baeldung.com/java-new-custom-exception) 121 | 122 | --- 123 | 124 | ## Chapter 2: Intermediate Java 125 | 126 | ### 2.1 Collections 127 | 128 | - What is Collections Framework: [https://www.codejava.net/java-core/collections/what-is-java-collections-framework](https://www.codejava.net/java-core/collections/what-is-java-collections-framework) 129 | 130 | ![alt_text](images/java-collection-hierarchy.png "image_tooltip") 131 | 132 | _Fig: Collections Framework Hierarchy, Source: [https://www.javatpoint.com/collections-in-java](https://www.javatpoint.com/collections-in-java)_ 133 | 134 | - List: 135 | - [https://www.codejava.net/java-core/collections/java-list-collection-tutorial-and-examples](https://www.codejava.net/java-core/collections/java-list-collection-tutorial-and-examples) 136 | - [https://www.codejava.net/java-core/collections/sorting-list-collections-examples](https://www.codejava.net/java-core/collections/sorting-list-collections-examples) 137 | - [https://www.codejava.net/java-core/collections/sorting-a-list-by-multiple-attributes-example](https://www.codejava.net/java-core/collections/sorting-a-list-by-multiple-attributes-example) 138 | - [Converting Iterator to List ](https://www.baeldung.com/java-convert-iterator-to-list) 139 | - [Java – Get Random Item/Element From a List ](https://www.baeldung.com/java-random-list-element) 140 | - [Partition a List in Java ](https://www.baeldung.com/java-list-split) 141 | - [Removing all nulls from a List in Java ](https://www.baeldung.com/java-remove-nulls-from-list) 142 | - [Removing all duplicates from a List in Java ](https://www.baeldung.com/java-remove-duplicates-from-list) 143 | - [Check If Two Lists are Equal in Java ](https://www.baeldung.com/java-test-a-list-for-ordinality-and-equality) 144 | - [How to Find an Element in a List with Java ](https://www.baeldung.com/find-list-element-java)(popular) 145 | - [Java List UnsupportedOperationException ](https://www.baeldung.com/java-list-unsupported-operation-exception) 146 | - [Copy a List to Another List in Java ](https://www.baeldung.com/java-copy-list-to-another) 147 | - [Remove All Occurrences of a Specific Value from a List ](https://www.baeldung.com/java-remove-value-from-list) 148 | - [Add Multiple Items to an Java ArrayList ](https://www.baeldung.com/java-add-items-array-list) 149 | - [Remove the First Element from a List ](https://www.baeldung.com/java-remove-first-element-from-list) 150 | - [Ways to Iterate Over a List in Java ](https://www.baeldung.com/java-iterate-list) 151 | - [Intersection of Two Lists in Java ](https://www.baeldung.com/java-lists-intersection) 152 | - [How to Count Duplicate Elements in Arraylist ](https://www.baeldung.com/java-count-duplicate-elements-arraylist) 153 | - [Finding the Differences Between Two Lists in Java ](https://www.baeldung.com/java-lists-difference) 154 | - [Reversing a Linked List in Java ](https://www.baeldung.com/java-reverse-linked-list) 155 | - [Assert Two Lists for Equality Ignoring Order in Java](https://www.baeldung.com/java-assert-lists-equality-ignore-order%20) 156 | - Set: 157 | - [https://www.codejava.net/java-core/collections/java-set-collection-tutorial-and-examples](https://www.codejava.net/java-core/collections/java-set-collection-tutorial-and-examples) 158 | - [https://www.baeldung.com/java-tree-set](https://www.baeldung.com/java-tree-set) 159 | - [https://www.baeldung.com/java-hashset](https://www.baeldung.com/java-hashset) 160 | - Map: 161 | - [https://www.baeldung.com/java-hashmap](https://www.baeldung.com/java-hashmap) 162 | - [https://www.baeldung.com/java-hashmap-advanced](https://www.baeldung.com/java-hashmap-advanced) 163 | - [https://www.baeldung.com/java-treemap](https://www.baeldung.com/java-treemap) 164 | - [https://www.baeldung.com/java-treemap-vs-hashmap](https://www.baeldung.com/java-treemap-vs-hashmap) 165 | - [How to Store Duplicate Keys in a Map in Java? ](https://www.baeldung.com/java-map-duplicate-keys) 166 | - [Initialize a HashMap in Java ](https://www.baeldung.com/java-initialize-hashmap)\*\* 167 | - [Merging Two Maps with Java 8 ](https://www.baeldung.com/java-merge-maps) 168 | - [Sort a HashMap in Java ](https://www.baeldung.com/java-hashmap-sort) 169 | - [Comparing Two HashMaps in Java ](https://www.baeldung.com/java-compare-hashmaps) 170 | - [Using the Map.Entry Java Class ](https://www.baeldung.com/java-map-entry) 171 | - [Working With Maps Using Streams](https://www.baeldung.com/java-maps-streams) \*\* 172 | - [Using the Map.Entry Java Class](https://www.baeldung.com/java-map-entry) 173 | - [Iterate over a Map in Java](https://www.baeldung.com/java-iterate-map) \*\* 174 | - Miscellaneous: 175 | - [Converting between an Array and a List in Java ](https://www.baeldung.com/convert-array-to-list-and-list-to-array) 176 | - [Converting Between an Array and a Set in Java ](https://www.baeldung.com/convert-array-to-set-and-set-to-array) 177 | - [Converting between a List and a Set in Java ](https://www.baeldung.com/convert-list-to-set-and-set-to-list) 178 | - [Convert a Map to an Array, List or Set in Java ](https://www.baeldung.com/convert-map-values-to-array-list-set) 179 | - [How to Convert List to Map in Java ](https://www.baeldung.com/java-list-to-map)(popular) 180 | - [Map to String Conversion in Java ](https://www.baeldung.com/java-map-to-string-conversion) 181 | - [Arrays.asList vs new ArrayList(Arrays.asList()) ](https://www.baeldung.com/java-arrays-aslist-vs-new-arraylist) 182 | - [Collecting Stream Elements into a List in Java](https://www.baeldung.com/java-stream-to-list-collecting) 183 | - [The Difference Between Collection.stream().forEach() and Collection.forEach()](https://www.baeldung.com/java-collection-stream-foreach) 184 | - [A Guide to Iterator in Java](https://www.baeldung.com/java-iterator) 185 | - [https://www.baeldung.com/java-collections-complexity](https://www.baeldung.com/java-collections-complexity) 186 | 187 | ### 2.2 Generics 188 | 189 | - [https://www.baeldung.com/java-generics](https://www.baeldung.com/java-generics) 190 | - [http://tutorials.jenkov.com/java-generics/wildcards.html](http://tutorials.jenkov.com/java-generics/wildcards.html) (Optional) 191 | - [https://www.baeldung.com/java-generics-type-parameter-vs-wildcard](https://www.baeldung.com/java-generics-type-parameter-vs-wildcard) 192 | 193 | ### 2.3 Streams and Lambdas 194 | 195 | - [https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html](https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html) 196 | - [https://www.jrebel.com/blog/java-streams-in-java-8#:~:text=Java%20streams%20enable%20functional%2Dstyle,where%20you%20can%20store%20elements](https://www.jrebel.com/blog/java-streams-in-java-8#:~:text=Java%20streams%20enable%20functional%2Dstyle,where%20you%20can%20store%20elements). 197 | - [https://reflectoring.io/comprehensive-guide-to-java-streams/](https://reflectoring.io/comprehensive-guide-to-java-streams/) 198 | - [https://www.capitalone.com/tech/software-engineering/java-streams-explained-simple-example/](https://www.capitalone.com/tech/software-engineering/java-streams-explained-simple-example/) 199 | - Video Tutorials from java brains - [https://www.youtube.com/watch?v=gpIUfj3KaOc&list=PLqq-6Pq4lTTa9YGfyhyW2CqdtW9RtY-I3&ab_channel=JavaBrains](https://www.youtube.com/watch?v=gpIUfj3KaOc&list=PLqq-6Pq4lTTa9YGfyhyW2CqdtW9RtY-I3&ab_channel=JavaBrains) 200 | - [https://github.com/winterbe/java8-tutorial](https://github.com/winterbe/java8-tutorial) 201 | 202 | ### 2.4 Optional 203 | 204 | - [https://github.com/winterbe/java8-tutorial#optionals](https://github.com/winterbe/java8-tutorial#optionals) 205 | - [https://www.baeldung.com/java-optional](https://www.baeldung.com/java-optional) 206 | 207 | ### 2.5 Annotations 208 | 209 | - [https://jenkov.com/tutorials/java-reflection/index.html](https://jenkov.com/tutorials/java-reflection/index.html) 210 | - [https://www.baeldung.com/java-reflection](https://www.baeldung.com/java-reflection) 211 | - [https://docs.oracle.com/javase/tutorial/java/annotations/index.html](https://docs.oracle.com/javase/tutorial/java/annotations/index.html) 212 | - [https://www.baeldung.com/java-default-annotations](https://www.baeldung.com/java-default-annotations) 213 | - [Custom Annotation: https://www.youtube.com/watch?v=DkZr7_c9ry8](https://www.youtube.com/watch?v=DkZr7_c9ry8) 214 | - [https://reflectoring.io/java-annotation-processing/](https://reflectoring.io/java-annotation-processing/) 215 | - [https://github.com/winterbe/java8-tutorial#annotations](https://github.com/winterbe/java8-tutorial#annotations) 216 | - [@Deprecated annotation examples](https://codejava.net/java-core/the-java-language/deprecated-annotation-examples) 217 | - [@Override annotation examples](https://codejava.net/java-core/the-java-language/override-annotation-examples) 218 | - [@SuppressWarnings annotation examples](https://codejava.net/java-core/the-java-language/suppresswarnings-annotation-examples) 219 | - [Annotations under the hood](https://hannesdorfmann.com/annotation-processing/annotationprocessing101/) 220 | 221 | ### 2.6 Date API 222 | 223 | - [https://github.com/winterbe/java8-tutorial#date-api](https://github.com/winterbe/java8-tutorial#date-api) 224 | 225 | ### 2.7 Command Line Tools for Java 226 | 227 | - [https://codejava.net/java-core/tools](https://codejava.net/java-core/tools) 228 | 229 | --- 230 | 231 | ## Chapter 3: Advanced Java 232 | 233 | ### 3.1 Concurrency 234 | 235 | - All 14 Parts - [https://foojay.io/today/java-thread-programming-part-1/](https://foojay.io/today/java-thread-programming-part-1/) 236 | - Synchronized - [https://www.baeldung.com/java-synchronized](https://www.baeldung.com/java-synchronized) 237 | - Volatile - [https://jenkov.com/tutorials/java-concurrency/volatile.html](https://jenkov.com/tutorials/java-concurrency/volatile.html) 238 | - Completable Future - [https://www.baeldung.com/java-completablefuture](https://www.baeldung.com/java-completablefuture) 239 | - Oracle Docs - [https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html) 240 | - Synchronization and Locks - [https://web.mit.edu/6.005/www/fa15/classes/23-locks/](https://web.mit.edu/6.005/www/fa15/classes/23-locks/) 241 | - Reentrant Lock - [https://www.geeksforgeeks.org/reentrantreadwritelock-class-in-java/](https://www.geeksforgeeks.org/reentrantreadwritelock-class-in-java/) 242 | - Executor Service - [https://jenkov.com/tutorials/java-util-concurrent/executorservice.html](https://jenkov.com/tutorials/java-util-concurrent/executorservice.html) 243 | - Thread Pool - [https://www.geeksforgeeks.org/thread-pools-java/](https://www.geeksforgeeks.org/thread-pools-java/) 244 | - Thread Pool Executor - [https://www.digitalocean.com/community/tutorials/threadpoolexecutor-java-thread-pool-example-executorservice](https://www.digitalocean.com/community/tutorials/threadpoolexecutor-java-thread-pool-example-executorservice) 245 | - Fork Join Framework - [https://www.educative.io/answers/what-is-the-use-of-fork-join-framework-in-java](https://www.educative.io/answers/what-is-the-use-of-fork-join-framework-in-java) 246 | 247 | ### 3.2 Features of Java 8 and later 248 | 249 | - Java 8 Features: [https://www.javacodegeeks.com/java-8-features-tutorial.html](https://www.javacodegeeks.com/java-8-features-tutorial.html) 250 | - Java 9 Features: [https://www.baeldung.com/new-java-9](https://www.baeldung.com/new-java-9) 251 | - Java 10 Features: [https://www.baeldung.com/java-10-overview](https://www.baeldung.com/java-10-overview) 252 | - Java 11 Features: [https://www.baeldung.com/java-11-new-features](https://www.baeldung.com/java-11-new-features) 253 | - Java 12 Features: [https://www.baeldung.com/java-12-new-features](https://www.baeldung.com/java-12-new-features) 254 | - Java 13 Features: [https://www.baeldung.com/java-13-new-features](https://www.baeldung.com/java-13-new-features) 255 | - Java 14 Features: [https://www.baeldung.com/java-14-new-features](https://www.baeldung.com/java-14-new-features) 256 | - Java 15 Features: [https://www.baeldung.com/java-15-new](https://www.baeldung.com/java-15-new) 257 | - Java 16 Features: [https://blogs.oracle.com/java-platform-group/the-arrival-of-java-16](https://blogs.oracle.com/java-platform-group/the-arrival-of-java-16) 258 | - Java 17 Features: [https://www.techgeeknext.com/java/java17-features](https://www.techgeeknext.com/java/java17-features) 259 | - Java 18 Features: [https://www.happycoders.eu/java/java-18-features/](https://www.happycoders.eu/java/java-18-features/) 260 | 261 | ### 3.3 Miscellaneous 262 | 263 | - [Understanding Object Ordering in Java with Comparable and Comparator](https://codejava.net/java-core/collections/understanding-object-ordering-in-java-with-comparable-and-comparator) 264 | - [Understanding Collections and Thread Safety in Java](https://codejava.net/java-core/collections/understanding-collections-and-thread-safety-in-java) 265 | - [18 Java Collections and Generics Best Practices](https://codejava.net/java-core/collections/18-java-collections-and-generics-best-practices) 266 | - [Generics with extends and super Wildcards and the Get and Put Principle](https://codejava.net/java-core/collections/generics-with-extends-and-super-wildcards-and-the-get-and-put-principle) 267 | - [Generics with Subtyping and the Substitution Principle](https://codejava.net/java-core/collections/generics-with-subtyping-and-the-substitution-principle) 268 | - [Differences between static and non-static stuffs in Java](https://codejava.net/java-core/the-java-language/differences-between-static-and-non-static-stuffs-in-java) 269 | - [What is Upcasting and Downcasting in Java](https://codejava.net/java-core/the-java-language/what-is-upcasting-and-downcasting-in-java) 270 | - [https://jenkov.com/tutorials/java-reflection/index.html](https://jenkov.com/tutorials/java-reflection/index.html) 271 | - [https://www.baeldung.com/java-reflection](https://www.baeldung.com/java-reflection) 272 | 273 | --- 274 | 275 | ## Chapter 4: Java Build Tools 276 | 277 | - Maven - Video Tutorial (Java Brains) : [https://www.youtube.com/watch?v=al7bRZzz4oU&list=PL92E89440B7BFD0F6&index=1&ab_channel=JavaBrainsJavaBrainsVerified](https://www.youtube.com/watch?v=al7bRZzz4oU&list=PL92E89440B7BFD0F6&index=1&ab_channel=JavaBrainsJavaBrainsVerified) 278 | - Gradle - Video Tutorial (Linkedin Learning) : [https://www.linkedin.com/learning/gradle-for-java-developers](https://www.linkedin.com/learning/gradle-for-java-developers) 279 | 280 | --- 281 | 282 | ## Chapter 5: Java EE 283 | 284 | ### 5.1 Servlet 285 | 286 | - What is Apache tomcat? : [https://www.youtube.com/watch?v=kkQOm02kep0&ab_channel=KKJavaTutorialsKKJavaTutorials](https://www.youtube.com/watch?v=kkQOm02kep0&ab_channel=KKJavaTutorialsKKJavaTutorials) 287 | - What is Servlet? : [https://www.javatpoint.com/servlet-tutorial](https://www.javatpoint.com/servlet-tutorial) 288 | - Lifecycle of a Servlet : [https://www.javatpoint.com/life-cycle-of-a-servlet](https://www.javatpoint.com/life-cycle-of-a-servlet) 289 | - How Servlet Works? : [https://www.javatpoint.com/how-servlet-works](https://www.javatpoint.com/how-servlet-works) 290 | - Servlet Context : [https://www.javatpoint.com/servletcontext](https://www.javatpoint.com/servletcontext) 291 | - Servlet Filter : [https://www.javatpoint.com/servlet-filter](https://www.javatpoint.com/servlet-filter) 292 | - What is war file? : [https://www.javatpoint.com/war-file](https://www.javatpoint.com/war-file) 293 | - Introduction to Servlet : Video Tutorial - [https://www.youtube.com/watch?v=7TOmdDJc14s](https://www.youtube.com/watch?v=7TOmdDJc14s) 294 | - Intro to servlets - [https://www.baeldung.com/intro-to-servlets](https://www.baeldung.com/intro-to-servlets) 295 | - Oracle Servlet Documentation : [https://docs.oracle.com/javaee/6/tutorial/doc/bnafd.html](https://docs.oracle.com/javaee/6/tutorial/doc/bnafd.html) 296 | - Servlet MVC : [https://www.baeldung.com/mvc-servlet-jsp](https://www.baeldung.com/mvc-servlet-jsp) 297 | 298 | --- 299 | 300 | ## Chapter 6: Clean Code and Design Patterns 301 | 302 | ### 6.1 SOLID Principles 303 | 304 | - https://medium.com/backticks-tildes/the-s-o-l-i-d-principles-in-pictures-b34ce2f1e898 305 | 306 | --- 307 | 308 | ## Chapter 7: Java Spring Framework and Spring Boot 309 | 310 | ### 7.1 Overview of Spring Framework 311 | 312 | - [https://docs.spring.io/spring-framework/docs/5.0.0.RC2/spring-framework-reference/overview.html#:~:text=The%20Spring%20Framework%20consists%20of,shown%20in%20the%20following%20diagram](https://docs.spring.io/spring-framework/docs/5.0.0.RC2/spring-framework-reference/overview.html#:~:text=The%20Spring%20Framework%20consists%20of,shown%20in%20the%20following%20diagram). 313 | - [https://www.baeldung.com/spring-why-to-choose](https://www.baeldung.com/spring-why-to-choose) 314 | 315 | ### 7.2 Beans, Inversion of Control, Dependency Injection 316 | 317 | - [https://codejava.net/frameworks/spring/understanding-the-core-of-spring-framework](https://codejava.net/frameworks/spring/understanding-the-core-of-spring-framework) 318 | - [https://www.baeldung.com/spring-bean](https://www.baeldung.com/spring-bean) 319 | - [https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring](https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring) 320 | - [https://medium.com/edureka/what-is-dependency-injection-5006b53af782](https://medium.com/edureka/what-is-dependency-injection-5006b53af782) 321 | - [https://www.baeldung.com/spring-autowire](https://www.baeldung.com/spring-autowire) 322 | - [https://www.baeldung.com/spring-bean-annotations](https://www.baeldung.com/spring-bean-annotations) 323 | - [https://stackoverflow.com/a/34174782/10197771](https://stackoverflow.com/a/34174782/10197771) 324 | - [https://www.baeldung.com/spring-annotations-resource-inject-autowire](https://www.baeldung.com/spring-annotations-resource-inject-autowire) 325 | - [https://stackoverflow.com/a/9106576/10197771](https://stackoverflow.com/a/9106576/10197771) 326 | - [https://www.baeldung.com/circular-dependencies-in-spring](https://www.baeldung.com/circular-dependencies-in-spring) 327 | - [https://www.baeldung.com/spring-unsatisfied-dependency](https://www.baeldung.com/spring-unsatisfied-dependency) 328 | - [https://www.baeldung.com/spring-bean-scopes](https://www.baeldung.com/spring-bean-scopes) 329 | 330 | ### 7.3 Spring MVC, Spring Boot 331 | 332 | - Spring MVC : [https://www.baeldung.com/spring-mvc-tutorial](https://www.baeldung.com/spring-mvc-tutorial) 333 | - Dispatcher Servlet : [https://www.baeldung.com/spring-dispatcherservlet](https://www.baeldung.com/spring-dispatcherservlet) 334 | - [https://stackoverflow.com/a/2769523/10197771](https://stackoverflow.com/a/2769523/10197771) 335 | - Spring vs Spring Boot : [https://www.baeldung.com/spring-vs-spring-boot](https://www.baeldung.com/spring-vs-spring-boot) 336 | - Spring Boot : [https://spring.io/guides/gs/spring-boot/](https://spring.io/guides/gs/spring-boot/) 337 | - [https://codejava.net/frameworks/spring-boot/spring-vs-spring-boot](https://codejava.net/frameworks/spring-boot/spring-vs-spring-boot) 338 | - [https://www.baeldung.com/spring-requestmapping](https://www.baeldung.com/spring-requestmapping) 339 | - [https://www.baeldung.com/spring-request-param](https://www.baeldung.com/spring-request-param) 340 | - [https://www.baeldung.com/spring-controller-vs-restcontroller](https://www.baeldung.com/spring-controller-vs-restcontroller) 341 | - [https://www.baeldung.com/spring-mvc-view-resolver-tutorial](https://www.baeldung.com/spring-mvc-view-resolver-tutorial) 342 | - [https://spring.io/guides/gs/serving-web-content/](https://spring.io/guides/gs/serving-web-content/) 343 | - [https://www.baeldung.com/building-a-restful-web-service-with-spring-and-java-based-configuration](https://www.baeldung.com/building-a-restful-web-service-with-spring-and-java-based-configuration) 344 | - Extra - Video Course from Java Brains : [https://www.youtube.com/watch?v=YXlSkWq04jk&list=PLqq-6Pq4lTTbx8p2oCgcAQGQyqN8XeA1x&index=4&ab_channel=JavaBrainsJavaBrainsVerified](https://www.youtube.com/watch?v=YXlSkWq04jk&list=PLqq-6Pq4lTTbx8p2oCgcAQGQyqN8XeA1x&index=4&ab_channel=JavaBrainsJavaBrainsVerified) 345 | 346 | ### 7.4 Properties, Profiles, Value Annotations 347 | 348 | - [https://www.javadevjournal.com/spring/spring-profiles/](https://www.javadevjournal.com/spring/spring-profiles/) 349 | - [https://www.baeldung.com/spring-profiles](https://www.baeldung.com/spring-profiles) 350 | - [https://www.baeldung.com/spring-value-annotation](https://www.baeldung.com/spring-value-annotation) 351 | 352 | ### 7.5 Spring JDBC, Persistence, JPA 353 | 354 | - [https://www.baeldung.com/spring-jdbc-jdbctemplate](https://www.baeldung.com/spring-jdbc-jdbctemplate) 355 | - [https://www.javatpoint.com/jpa-tutorial](https://www.javatpoint.com/jpa-tutorial) 356 | - [https://www.baeldung.com/the-persistence-layer-with-spring-and-jpa](https://www.baeldung.com/the-persistence-layer-with-spring-and-jpa) 357 | - [https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa](https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa) 358 | 359 | ### 7.6 Spring Security 360 | 361 | - [https://www.youtube.com/watch?v=sm-8qfMWEV8&list=PLqq-6Pq4lTTYTEooakHchTGglSvkZAjnE&ab_channel=LinuxTexLinuxTex](https://www.youtube.com/watch?v=sm-8qfMWEV8&list=PLqq-6Pq4lTTYTEooakHchTGglSvkZAjnE&ab_channel=LinuxTexLinuxTex) 362 | 363 | ### 7.7 Miscellaneous 364 | 365 | --- 366 | 367 | ## Contributing 368 | 369 | If you have suggestions for new resources or spot a broken link, feel free to open an issue or submit a pull request! 370 | 371 | --- 372 | 373 | _This list is maintained for educational purposes. Last updated: November 7, 2025._ 374 | 375 | - [https://www.baeldung.com/spring-template-engines](https://www.baeldung.com/spring-template-engines) 376 | - [https://www.baeldung.com/jackson-object-mapper-tutorial](https://www.baeldung.com/jackson-object-mapper-tutorial) 377 | --------------------------------------------------------------------------------