{"id":90980,"date":"2019-04-29T10:00:14","date_gmt":"2019-04-29T07:00:14","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=90980"},"modified":"2022-11-21T15:33:58","modified_gmt":"2022-11-21T13:33:58","slug":"best-way-to-learn-java-programming-online","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html","title":{"rendered":"Best Way to Learn Java Programming Online"},"content":{"rendered":"<h2 class=\"wp-block-heading\"><a name=\"introduction\"><\/a>1. Introduction<\/h2>\n<p><strong>Java<\/strong> is one of the most widely used programming languages. According to a recent <a aria-label=\"report (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/www.businessinsider.com\/the-10-most-popular-programming-languages-according-to-github-2018-10\" target=\"_blank\">report<\/a> by Github,  Java was ranked as the 2<sup>nd<\/sup> most used programming language after JavaScript.  There is a very big list of topics that someone has to learn to master Java. The good thing is that you can find lots of content online.  In this post, we will categorize all those topics and provide references to articles and code examples that will guide you through the process of learning Java.<\/p>\n<p>Before we start, take a look on <a href=\"https:\/\/examples.javacodegeeks.com\/what-is-java-used-for\/\">What is Java used for<\/a>. <\/p>\n<div class=\"toc\">\n<h3>Table Of Contents<\/h3>\n<dl>\n<dt><a href=\"#introduction\">1. Introduction<\/a><\/dt>\n<dt><a href=\"#prerequisites\">2. Prerequisites<\/a><\/dt>\n<dt><a href=\"#core_java\">3. Basics \u2013 Core Java<\/a><\/dt>\n<dt><a href=\"#data_types\">4. Data Types<\/a><\/dt>\n<dt><a href=\"#collections\">5. Collections<\/a><\/dt>\n<dt><a href=\"#algorithms\">6. Algorithms<\/a><\/dt>\n<dt><a href=\"#concurrency\">7. Concurrency<\/a><\/dt>\n<dt><a href=\"#design_patterns\">8. Design Patterns<\/a><\/dt>\n<dt><a href=\"#spring_framework\">9. Spring Framework<br \/>\n<\/a><\/dt>\n<dt><a href=\"#jdbc_jpa_hibernate\">10. JDBC \u2013 JPA \u2013 Hibernate<\/a><\/dt>\n<dt><a href=\"#architecture\">11. Architecture<\/a><\/dt>\n<dt><a href=\"#java_8\">12. Java 8+<\/a><\/dt>\n<dt><a href=\"#desktop_java\">13. Desktop Java<\/a><\/dt>\n<dt><a href=\"#testing\">14. Testing<\/a><\/dt>\n<dt><a href=\"#testing\">15. Logging<\/a><\/dt>\n<dt><a href=\"#interview_questions\">16. Interview Questions<\/a><\/dt>\n<dt><a href=\"#conclusion\">17. Summary<\/a><\/dt>\n<dt><a href=\"#more_tutorials\">18. More Tutorials<\/a><\/dt>\n<\/dl>\n<\/div>\n<h2 class=\"wp-block-heading\"><a name=\"prerequisites\"><\/a>2. Prerequisites<\/h2>\n<h3 class=\"wp-block-heading\">2.1 Installing Java<\/h3>\n<p>The first step before starting writing your first programs is to install Java and especially the <strong>JDK<\/strong> (Java Development Kit) which consists of the libraries needed to write programs and the Java compiler, known as <strong>JRE<\/strong>. A step-by-step guide of how to install Java and run your first program via the JDK commands can be found:<\/p>\n<ul class=\"wp-block-list\">\n<li><a aria-label=\"How to Create and Run Your First Java Program (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/how-to-create-and-run-your-first-java-program\/\" target=\"_blank\" rel=\"noreferrer noopener\">How to Create and Run Your First Java Program<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/how-to-download-java-14-for-windows-10\/\">How to download Java 14 for Windows 10<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/download-and-install-java-development-kit-jdk-13\/\">Download and Install Java Development Kit (JDK) 13<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/download-and-install-java-development-kit-jdk-11\/\">Download and Install Java Development Kit (JDK) 11<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/download-and-install-java-development-kit-jdk-8\/\">Download and Install Java Development Kit (JDK) 8<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/how-to-update-java-for-windows-10-macos-and-android\/\">How to update Java for Windows 10, macOS, and Android<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">2.2 Installing an IDE<\/h3>\n<p>An IDE is an essential tool as it helps you with the development and compilation of Java programs. The IDEs are bundled with a set of plugins that can make your life easier. The most widely used IDEs are:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Eclipse (opens in a new tab)\" href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\">Eclipse<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"IntelliJ (opens in a new tab)\" href=\"https:\/\/www.jetbrains.com\/idea\/\" target=\"_blank\">IntelliJ<\/a><\/li>\n<li><a href=\"https:\/\/netbeans.org\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"NetBeans (opens in a new tab)\">NetBeans<\/a><\/li>\n<\/ul>\n<p>If you want to learn more about how to download, install and use those IDEs then read the following tutorials:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Eclipse Tutorial for Beginners (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/desktop-java\/ide\/eclipse\/eclipse-tutorial-beginners\/\" target=\"_blank\">Eclipse Tutorial for Beginners<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"IntelliJ IDEA Tutorial for Beginners (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/desktop-java\/ide\/intellij-idea-tutorial-beginners\/\" target=\"_blank\">IntelliJ IDEA Tutorial for Beginners<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2018\/04\/netbeans-ide-tutorial.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"NetBeans IDE Tutorial (opens in a new tab)\">NetBeans IDE Tutorial<\/a><\/li>\n<\/ul>\n<p>In the following section we move on to the Java basics.<\/p>\n<h2 class=\"wp-block-heading\"><a name=\"core_java\"><\/a>3. Basics \u2013 Core Java<\/h2>\n<p>After installing Java and your favorite IDE, you are ready to learn about the basics of Java also known as <strong><a href=\"https:\/\/www.javacodegeeks.com\/core-java-tutorials\">Core Java<\/a><\/strong>. Before that, you should first understand how a program starts through the <strong>main<\/strong> method:<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-public-static-void-mainstring-args-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Java public static void main(String[] args) Example (opens in a new tab)\">Java public static void main(String[] args) Example<\/a><\/li>\n<\/ul>\n<p>Then, you can create your first program:<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-tutorial-for-beginners\/\">Java Tutorial for Beginners<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">3.1 Java Packages<\/h3>\n<p>A Java project consists of Classes that are grouped within <strong>packages.<\/strong> It is similar to the concept of folders (packages) and files (classes). A nicely organised project will help developers maintain, understand and read code easily.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Project Package Organization (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2017\/07\/project-package-organization.html\" target=\"_blank\">Project Package Organization<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2012\/05\/about-java-packages.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"About Java Packages (opens in a new tab)\">About Java Packages<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">3.2 Java Variables<\/h3>\n<p>Let&#8217;s see now what variables are supported by Java are how to declare them. The <strong>variable<\/strong> is the basic unit of storage in a Java program. A variable is defined by the combination of an identifier, a type, and an optional initializer. In addition, all variables have a scope, which defines their visibility, and a lifetime.<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2017\/10\/java-variables.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Java Variables (opens in a new tab)\">Java Variables<\/a><\/li>\n<\/ul>\n<p>See below an example of declaring and initialising Java variables:<\/p>\n<pre class=\"brush:java\">int a, b, c; \/\/ declares three ints, a, b, and c.\n\nint d = 3, e, f = 5; \/\/ declares three more ints, initializing \/\/ d and f.\n\nbyte z = 22; \/\/ initializes z.\n\ndouble pi = 3.14159; \/\/ declares an approximation of pi.\n\nchar x = \u2018x\u2019; \/\/ the variable x has the value \u2018x\u2019.\n\nboolean d = false;   \/\/ boolean value initialized with value false;\n<\/pre>\n<h3 class=\"wp-block-heading\">3.4 Java Primitive Data Types<\/h3>\n<p><strong>Primitive data types<\/strong> are the most basic data types. Java defines eight primitive types of data: byte, short, int, long, char, float, double, and boolean. In the previous example, we saw how to declare them and initialize them. Let&#8217;s see in more details those:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java Data type and Identifier (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2017\/10\/java-data-type-identifier.html\" target=\"_blank\">Java Data type and Identifier<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">3.5 Java Operators<\/h3>\n<p><strong>Operators<\/strong> are used to perform operations on variables and values. In short, the most basic operators and their usage in Java are:<\/p>\n<ul class=\"wp-block-list\">\n<li>Use the&nbsp;<code>Additive<\/code>&nbsp;operator to add variables.<\/li>\n<li>Use the&nbsp;<code>Subtraction<\/code>&nbsp;operator to subtract variables.<\/li>\n<li>Use the&nbsp;<code>Multiplication<\/code>&nbsp;operator to multiply variables.<\/li>\n<li>Use the&nbsp;<code>Division<\/code>&nbsp;operator to divide variables.<\/li>\n<li>Use the <code>Modulo<\/code> operator to get the remainder of the division of  variables.<\/li>\n<\/ul>\n<p>To learn more about those operators see the following articles:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Arithmetic Operators (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/java-basics\/operators\/arithmetic-operators\/\" target=\"_blank\">Arithmetic Operators<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-basics\/operators\/modulo-operator\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Modulo Operator (opens in a new tab)\">Modulo Operator<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">3.6 Java if-else<\/h3>\n<p>The <strong>if-else<\/strong> statement is the most basic of all the control flow statements. It tells your program to execute a certain section of code only if a particular test evaluates to true. It has a very simple syntax and more info can be found:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Simple if\/else statement (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/java-basics\/if-else-statement\/simple-if-else-statement\/\" target=\"_blank\">Simple if\/else statement<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"if \u2013 else coding style best practices (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2012\/01\/if-else-coding-style-best-practices.html\" target=\"_blank\">if \u2013 else coding style best practices<\/a><\/li>\n<\/ul>\n<p>See below a very basic example of the if-else statement:<\/p>\n<pre class=\"brush:java\">boolean b = false;\n \nif (b) {\n    System.out.println(\"Variable value is true\");\n}\nelse {\n    System.out.println(\"Variable value is NOT true\");\n}\n<\/pre>\n<h3 class=\"wp-block-heading\">3.7 Java Loops<\/h3>\n<p>If you need to execute a block of code many times, then you will definitely have to use a mechanism named as loop. Java provides three looping mechanisms, which are the <strong>for<\/strong>, <strong>while<\/strong> loops and <strong>switch<\/strong> statements.<\/p>\n<ul class=\"wp-block-list\">\n<li><a aria-label=\"Java for loop Example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/java-basics\/for-loop\/java-for-loop-example\/\" target=\"_blank\">Java for loop Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/for-each-loop-java-8-example\/\">For Each Loop Java 8 Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/simple-while-loop-java-example\/\">Simple while loop Java Example<\/a><\/li>\n<li><a aria-label=\"Java Switch-Case Example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/java-basics\/switch-statement\/java-switch-case-example\/\" target=\"_blank\">Java Switch-Case Example<\/a><\/li>\n<\/ul>\n<p>Let&#8217;s see below an example of a <strong>for<\/strong> loop which is the most widely used:<\/p>\n<pre class=\"brush:java\">public static void main(String args[]) {\n    String[] cities = { \"Athens\", \"Thessaloniki\", \"Chania\", \"Patra\", \"Larissa\" };\n \n    for (String cityname : cities) {\n        System.out.println(cityname);\n    }\n \n}\n<\/pre>\n<h3 class=\"wp-block-heading\">3.8 Java Arrays<\/h3>\n<p><strong>Arrays<\/strong> are used in the majority of Java programs. You need to understand how to initialise and iterate arrays without accessing the array for an index that is out of the array bounds.<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-array-example\/\">Java Array \u2013 java.util.Arrays Example<\/a><\/li>\n<li><a aria-label=\"Java String Array Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/java-basics\/arrays-java-basics\/java-string-array-example\/\" target=\"_blank\" rel=\"noreferrer noopener\">Java String Array Example<\/a><\/li>\n<\/ul>\n<p>Find below an example of the initialisation and iteration of an array:<\/p>\n<pre class=\"brush:java\">public static void main(String args[]) {\n \n    \/\/ declare a string array with initial size\n    String[] schoolbag = new String[4];\n \n    \/\/ add elements to the array    \n    schoolbag[0] = \"Books\";\n    schoolbag[1] = \"Pens\";\n    schoolbag[2] = \"Pencils\";\n    schoolbag[3] = \"Notebooks\";\n       \n    \/\/ this will cause ArrayIndexOutOfBoundsException\n    \/\/ schoolbag[4] = \"Notebooks\";\n}\n<\/pre>\n<h3 class=\"wp-block-heading\">3.9 Java Exceptions<\/h3>\n<p>No program has been written that it is flawless. For that Java supports the handling of errors through <strong><a href=\"https:\/\/www.javacodegeeks.com\/java-exception-handling-tutorials\">exceptions<\/a><\/strong>. Exceptions are thrown either by the developers or by Java itself.<\/p>\n<ul class=\"wp-block-list\">\n<li><a aria-label=\"Handling Exceptions In Java (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/www.javacodegeeks.com\/2017\/12\/handling-exceptions-java.html\" target=\"_blank\">Handling Exceptions In Java<\/a><\/li>\n<li><a aria-label=\"Java Exception Handling Tutorial with Examples and Best Practices (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2013\/07\/java-exception-handling-tutorial-with-examples-and-best-practices.html\" target=\"_blank\" rel=\"noreferrer noopener\">Java Exception Handling Tutorial with Examples and Best Practices<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/try-catch-java-example\/\">Try Catch Java Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-lang-nullpointerexception-example\/\">java.lang.NullPointerException Example \u2013 How to handle Java Null Pointer Exception<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"data_types\"><\/a>4. Data Types<\/h2>\n<p>The Java <strong>data types<\/strong> are implementations of very important data structures in programming. Below we list the most important ones and examples of their methods.<\/p>\n<h3 class=\"wp-block-heading\" id=\"mce_83\">4.1 String<\/h3>\n<p>The <strong>String<\/strong> class is probably one of the most used types in Java programs. A String is actually a sequence of characters. As a matter of fact, a String Object is backed by a <strong>char<\/strong> array. A String and can be initialized in two ways:<\/p>\n<pre class=\"brush:java\">String str= \"Hello World\";\nString str = new String(\"Hello World\");\n<\/pre>\n<p>For more info about the String class see:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java String Class Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/lang\/string\/java-string-class-example\/\" target=\"_blank\">Java String Class Example<\/a><\/li>\n<\/ul>\n<p>Java provides a number of methods that make the String manipulation easy and efficient, straight out of the box. The most important ones are:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/lang\/string\/java-string-format-example\/\" target=\"_blank\">Java String format Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/lang\/string\/java-string-compare-example\/\" target=\"_blank\">Java String Compare Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/lang\/string\/java-string-split-example\/\" target=\"_blank\">Java String split Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/lang\/string\/java-string-replace-example\/\" target=\"_blank\">Java String Replace Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/lang\/string\/java-string-replaceall-example\/\" target=\"_blank\">Java String replaceAll example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java String length Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/lang\/string\/java-string-length-example\/\" target=\"_blank\">Java String length Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java String Contains Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/lang\/string\/java-string-contains-example\/\" target=\"_blank\">Java String Contains Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java String matches Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/lang\/string\/java-string-matches-example\/\" target=\"_blank\">Java String matches Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/java-basics\/arrays-java-basics\/java-string-array-example\/\" target=\"_blank\">Java String Array Example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">4.2 Set<\/h3>\n<p>A <strong>set<\/strong> is a data structure which holds unique values. In Java, the <strong>Set<\/strong> interface has multiple implementations which are widely used in programs as they offer quick lookups. The most widely used implementation of the Set interface is the HashSet class. <\/p>\n<ul class=\"wp-block-list\">\n<li><a aria-label=\"Java Set Example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/set\/java-set-example\/\" target=\"_blank\">Java Set Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/hashset-java-example\/\">Hashset Java Example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">4.3 Map<\/h3>\n<p>A <strong>map<\/strong> is a data structure which holds key-value pairs. Similar to the Set, the <strong>Map<\/strong> interface also has multiple implementations and they offer quick lookups. The most widely used implementation of the Map interface is the HashMap class.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java Map Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/java-basics\/java-map-example\/\" target=\"_blank\">Java Map Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/hashmap\/java-hashmap-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Java Hashmap Example (opens in a new tab)\">Java Hashmap Example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">4.4 Queue<\/h3>\n<p>A <strong>queue<\/strong> is a data structure in which the elements are kept in order. The <strong>Queue<\/strong> interface has multiple implementations and the <strong>LinkedList<\/strong> class is the most used one.<\/p>\n<ul class=\"wp-block-list\">\n<li><a aria-label=\"Java Queue Example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/queue\/java-queue-example\/\" target=\"_blank\">Java Queue Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/linkedlist-java-example\/\">LinkedList Java Example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\" id=\"mce_113\">4.5 Tree<\/h3>\n<p>A <strong>tree<\/strong> is a data structure which holds a collection of elements starting from the root, in which each element holds a value and a reference to the children elements. The tree implementations provided by Java are the <strong>TreeMap<\/strong> and <strong>TreeSet<\/strong> classes.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java.util.TreeMap Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/treemap\/java-util-treemap-example\/\" target=\"_blank\">Java.util.TreeMap Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/treeset\/java-util-treeset-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Java.util.TreeSet Example (opens in a new tab)\">Java.util.TreeSet Example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">4.6 Enum<\/h3>\n<p>An <strong>Enum<\/strong> is a special data type that enables for a variable to belong to a set of predefined constants. The values defined inside an enum are constants and shall be typed in uppercase letters.<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-basics\/java-enumeration-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Java Enumeration Example (opens in a new tab)\">Java Enumeration Example<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"collections\"><\/a>5. Collections<\/h2>\n<p>The&nbsp;<strong>Java Collections framework<\/strong> is a set of classes and interfaces that implement some of the most commonly used <strong>collection<\/strong> data structures that we saw in the previous section e.g. Set, Map, Queue, Tree. The <strong>java.util.Collections<\/strong> class has some very important methods:<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-collections-tutorial\/\">Java Collections Tutorial<\/a><\/li>\n<li><a aria-label=\"java.util.Collections Example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/collections\/java-util-collections-example\/\" target=\"_blank\">java.util.Collections Example<\/a><\/li>\n<li><a aria-label=\"Java Collections Sort Example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/collections\/java-collections-sort-example\/\" target=\"_blank\">Java Collections Sort Example<\/a><\/li>\n<li><a aria-label=\"Shuffle List elements example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/collections\/shuffle-list-elements-example\/\" target=\"_blank\">Shuffle List elements example<\/a><\/li>\n<li><a aria-label=\"Reverse order of List example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/collections\/reverse-order-of-list-example\/\" target=\"_blank\">Reverse order of List example<\/a><\/li>\n<li><a aria-label=\"Replace all elements of List example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/collections\/replace-all-elements-of-list-example\/\" target=\"_blank\">Replace all elements of List example<\/a><\/li>\n<li><a aria-label=\"Copy Collection to another Collection example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/collections\/copy-collection-to-another-collection-example\/\" target=\"_blank\" rel=\"noreferrer noopener\">Copy Collection to another Collection example<\/a><\/li>\n<\/ul>\n<p>The following comparisons will help you decide on the best data structure depending on the use case.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java HashMap vs TreeMap Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-hashmap-vs-treemap-example\/\" target=\"_blank\">Java HashMap vs TreeMap Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-arraylist-vs-linkedlist-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Java ArrayList vs LinkedList Example (opens in a new tab)\">Java ArrayList vs LinkedList Example<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"algorithms\"><\/a>6. Algorithms<\/h2>\n<p>It&#8217;s very important to learn how common <strong>algorithms<\/strong> like sorting, recursion etc are implemented in Java. Understanding and learning algorithms will make you a better developer regardless of the programming language you are using. Below we provide some of the most common algorithms:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Quicksort algorithm in Java (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/quicksort-algorithm-in-java-code-example\/\" target=\"_blank\">Quicksort algorithm in Java<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Mergesort algorithm in Java (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/mergesort-algorithm-in-java-code-example\/\" target=\"_blank\">Mergesort algorithm in Java<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java Recursion Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-recursion-example\/\" target=\"_blank\">Java Recursion Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Factorial Program in Java (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/factorial-program-in-java\/\" target=\"_blank\">Factorial Program in Java<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Palindrome Program in Java (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/palindrome-program-in-java\/\" target=\"_blank\">Palindrome Program in Java<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java Prime Numbers Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-prime-numbers-example\/\" target=\"_blank\">Java Prime Numbers Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/arrays\/binary-search-java-array-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Binary search Java array example (opens in a new tab)\">Binary search Java array example<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"concurrency\"><\/a>7. Concurrency<\/h2>\n<p>Java has excellent support for <strong>multithreading<\/strong> programs in which multiple threads are executed simultaneously. <strong><a href=\"https:\/\/www.javacodegeeks.com\/java-concurrency-tutorials\">Concurrency<\/a><\/strong> is one of the most difficult topic to understand and master in Java, so it requires a lot of reading and practice. To get started with concurrency read:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Introduction to Threads and Concurrency (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/introduction-to-threads-and-concurrency.html\" target=\"_blank\">Introduction to Threads and Concurrency<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/java-concurrency-essentials.html\" target=\"_blank\">Java Concurrency Essentials Tutorial<\/a><\/li>\n<li>You can download <a href=\"https:\/\/www.javacodegeeks.com\/minibook\/java-concurrency-essentials\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Java Concurrency Essentials (opens in a new tab)\">Java Concurrency Essentials<\/a><\/li>\n<\/ul>\n<p>Then you should learn the fundamentals of concurrency such as deadlocks, monitors, the synchronized and volatile keywords:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Concurrency Fundamentals: Deadlocks and Object Monitors (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/concurrency-fundamentals-deadlocks-and-object-monitors.html\" target=\"_blank\">Concurrency Fundamentals: Deadlocks and Object Monitors<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java Synchronized keyword Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-synchronized-keyword-example\/\" target=\"_blank\">Java Synchronized keyword Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"How Volatile in Java works? (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/03\/volatile-java-works-example-volatile-keyword-java.html\" target=\"_blank\">How Volatile in Java works?<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/java-concurrency-essentials.html\" target=\"_blank\">Java Concurrency Essentials Tutorial<\/a><\/li>\n<\/ul>\n<p>Java provides concurrent classes which will help you with the development of multithreading programs:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java AtomicInteger Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/concurrent\/atomic\/atomicinteger\/java-atomicinteger-example\/\" target=\"_blank\">Java AtomicInteger Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"The java.util.concurrent Package (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/the-java-util-concurrent-package.html\" target=\"_blank\">The java.util.concurrent Package<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"CountDownLatch example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/util\/concurrent\/countdownlatch-example-of-a-more-general-wait-notify-mechanism\/\" target=\"_blank\">CountDownLatch example<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/forkjoin-framework.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Fork\/Join Framework (opens in a new tab)\">Fork\/Join Framework<\/a><\/li>\n<\/ul>\n<p>Finally performance and testing should be taken into consideration for concurrent applications:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Performance, Scalability and Liveness (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/performance-scalability-and-liveness.html\" target=\"_blank\">Performance, Scalability and Liveness<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/testing-concurrent-applications.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Testing Concurrent Applications (opens in a new tab)\">Testing Concurrent Applications<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"design_patterns\"><\/a>8. Design Patterns<\/h2>\n<p>Another very important topic to learn as a Java developer is <strong><a href=\"https:\/\/www.javacodegeeks.com\/java-design-patterns-tutorials\">design patterns<\/a><\/strong>. In programming, a design pattern offers a solution to common problems in software design. There is a very big list of design patterns that can be transformed into code. Some of the most commonly used ones are:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-singleton-design-pattern-tutorial\/\" target=\"_blank\">Singleton<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-singleton-design-pattern-tutorial\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-abstract-factory-design-pattern-example\/\" target=\"_blank\">Abstract Factory<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-abstract-factory-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-factory-method-design-pattern-example\/\" target=\"_blank\">Factory<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-factory-method-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-builder-design-pattern-example\/\" target=\"_blank\">Builder<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-builder-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-observer-design-pattern-example\/\" target=\"_blank\">Observer<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-observer-design-pattern-example\/\"><\/a><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-facade-design-pattern-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">Facade<\/a><\/li>\n<\/ul>\n<p>Apart from the above, there are also other design patterns that you would want to learn if you want to become a master in design and architecture of Java program. These are the following:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-visitor-design-pattern-example\/\" target=\"_blank\">Visitor<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-visitor-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-iterator-design-pattern-example\/\" target=\"_blank\">Iterator<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-iterator-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-decorator-design-pattern-example\/\" target=\"_blank\">Decorator<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-decorator-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-interpreter-design-pattern-example\/\" target=\"_blank\">Interpreter<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-interpreter-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-command-design-pattern-example\/\" target=\"_blank\">Command<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-command-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-strategy-design-pattern-example\/\" target=\"_blank\">Strategy<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-strategy-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-state-design-pattern-example\/\" target=\"_blank\">State<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-state-design-pattern-example\/\"><\/a><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-template-design-pattern-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">Template<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-template-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-memento-design-pattern-example\/\" target=\"_blank\">Memento<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-memento-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-prototype-design-pattern-example\/\" target=\"_blank\">Prototype<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-prototype-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-flyweight-design-pattern-example\/\" target=\"_blank\">Flyweight<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-flyweight-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-chain-of-responsibility-design-pattern-example\/\" target=\"_blank\">Chain of Responsibility<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-chain-of-responsibility-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-proxy-design-pattern-example\/\" target=\"_blank\">Proxy<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-proxy-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-mediator-design-pattern-example\/\" target=\"_blank\">Mediator<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-mediator-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-bridge-design-pattern-example\/\" target=\"_blank\">Bridge<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-bridge-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-composite-design-pattern-example\/\" target=\"_blank\">Composite<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-composite-design-pattern-example\/\"><\/a><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-adapter-design-pattern-example\/\" target=\"_blank\">Adapter<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"spring_framework\"><\/a>9. Spring Framework<\/h2>\n<p>Java has a big open source community which has built many frameworks that ease the development of Java applications. The most famous one is the <a rel=\"noreferrer noopener\" aria-label=\"Spring (opens in a new tab)\" href=\"https:\/\/spring.io\/\" target=\"_blank\">Spring<\/a> framework. Spring is an open-source framework which consists of several modules created to address the complexity of an enterprise application development. To get started with Spring:<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/spring-framework-example\/\">Spring Framework Example<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/java-spring-tutorial\">Java Spring Tutorial<\/a><\/li>\n<li><a aria-label=\"Spring Framework Tutorial for Beginners with Examples (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/spring-framework-tutorial-beginners-examples\/\" target=\"_blank\">Spring Framework Tutorial for Beginners with Examples<\/a><\/li>\n<li>You can download <a aria-label=\"Spring Framework Cookbook (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/minibook\/spring-framework-cookbook\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Framework Cookbook<\/a><\/li>\n<\/ul>\n<p>Below we take a look at the most important modules provided by <a href=\"https:\/\/www.javacodegeeks.com\/spring-tutorials\">Spring<\/a>.<\/p>\n<h3 class=\"wp-block-heading\">9.1 Spring AOP<\/h3>\n<p>Spring AOP is used to provide declarative enterprise services, especially as a replacement for EJB declarative services. It is also used to allow users to implement custom aspects, complementing their use of OOP with AOP.<\/p>\n<ul class=\"wp-block-list\">\n<li> <a rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/aop\/spring-aop-example\/\" target=\"_blank\">Spring AOP Example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">9.2 Spring Security<\/h3>\n<p><a href=\"https:\/\/www.javacodegeeks.com\/spring-security-tutorials\">Spring Security<\/a> enables the developers to integrate security features easily and in a managed way. It is also integrated with the latest OAuth2 authorization framework which enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring Security 4 Tutorial (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/spring-security-4-tutorial\/\" target=\"_blank\">Spring Security 4 Tutorial<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring Security OAuth2 Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/spring-security-oauth2-example\/\" target=\"_blank\">Spring Security OAuth2 Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/security-spring\/spring-security-via-database-authentication-tutorial\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Spring Security via Database Authentication Tutorial (opens in a new tab)\">Spring Security via Database Authentication Tutorial<\/a><a rel=\"noreferrer noopener\" aria-label=\"Spring data tutorial for beginners (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/spring-data-tutorial-beginners\/\" target=\"_blank\"><\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">9.3 Spring Transaction<\/h3>\n<p>Spring facilitates transaction management using annotations. IT provides an abstract layer on top of different transaction management APIs and it helps us to focus on the business problem, without having to know much about the underlying transaction management APIs.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring Transaction Management Example with JDBC Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/jdbc\/spring-transaction-management-example-with-jdbc-example\/\" target=\"_blank\">Spring Transaction Management Example with JDBC Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Understanding Transactional annotation in Spring (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2016\/05\/understanding-transactional-annotation-spring.html\" target=\"_blank\">Understanding Transactional annotation in Spring<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2014\/06\/how-does-spring-transactional-really-work.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"How does Spring @Transactional Really Work? (opens in a new tab)\">How does Spring @Transactional Really Work?<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">9.4 Spring Data<\/h3>\n<p><a href=\"https:\/\/www.javacodegeeks.com\/spring-data-tutorials\">Spring Data<\/a> makes it easy to use data access technologies, relational and non-relational databases, map-reduce frameworks, and cloud-based data services. The benefits of using Spring Data is that it removes a lot of boiler-plate code and provides a cleaner and more readable implementation of DAO layer. Also, it helps make the code loosely coupled and as such switching between different JPA vendors is a matter of configuration.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring data tutorial for beginner (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/spring-data-tutorial-beginners\/\" target=\"_blank\">Spring data tutorial for beginners<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring Data JPA Tutorial (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/05\/spring-data-jpa-tutorial.html\" target=\"_blank\">Spring Data JPA Tutorial<\/a><\/li>\n<li>You can download <a href=\"https:\/\/www.javacodegeeks.com\/minibook\/spring-data-programming-cookbook\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Spring Data Programming Cookbook (opens in a new tab)\">Spring Data Programming Cookbook<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">9.5 Spring MVC<\/h3>\n<p><a href=\"https:\/\/www.javacodegeeks.com\/spring-mvc-tutorials\">Spring MVC<\/a> provides Model-View-Controller architecture that eases the development of loosely coupled web applications. With a web application, many challenges also come into the picture as consequences. To be specific, some of these are state management, workflow and validations. The HTTP protocol\u2019s stateless nature only make things more complex. The Spring web framework is designed to help us in these challenges.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring MVC Tutorial (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/04\/spring-mvc-tutorial-2.html\" target=\"_blank\">Spring MVC Tutorial<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring MVC Hello World Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/mvc\/spring-mvc-hello-world-example\/\" target=\"_blank\">Spring MVC Hello World Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/mvc\/spring-mvc-architecture-overview-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Spring MVC Architecture Overview Example (opens in a new tab)\">Spring MVC Architecture Overview Example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">9.6 Spring Integration<\/h3>\n<p><a href=\"https:\/\/www.javacodegeeks.com\/spring-integration-tutorials\">Spring Integration<\/a> is a lightweight messaging solution that will add integration capabilities to your application. It is a lightweight messaging solution that will add integration capabilities to your Spring application. As a messaging strategy, it provides a way of sharing information quickly and with a high level of decoupling between involved components or applications.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring Integration Fundamentals (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/spring-integration-fundamentals.html\" target=\"_blank\">Spring Integration Fundamentals<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2015\/09\/spring-integration-full-example.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Spring Integration Full Example (opens in a new tab)\">Spring Integration Full Example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">9.7 Spring Boot<\/h3>\n<p><a href=\"https:\/\/www.javacodegeeks.com\/spring-boot-tutorials\">Spring Boot<\/a> makes it easy to create stand-alone, production-grade Spring based Applications without the need of too much configuration. Spring Boot takes care of application infrastructure while you can focus on coding the actual business flesh. It makes reasonable assumptions of the dependencies and adds them accordingly. It also lets you customize the dependencies according to your requirement. Spring Boot has become very popular and it is used in many applications.<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/what-is-spring-boot\/\">What is Spring Boot<\/a><\/li>\n<li><a aria-label=\"Spring Boot Tutorial for beginners (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/boot\/spring-boot-tutorial-beginners\/\" target=\"_blank\">Spring Boot Tutorial for beginners<\/a><\/li>\n<li><a aria-label=\"Spring Boot and JPA Example (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/boot\/spring-boot-jpa-example\/\" target=\"_blank\">Spring Boot and JPA Example<\/a><\/li>\n<li><a aria-label=\"Spring Boot Configuration Tutorial (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/boot\/spring-boot-configuration-tutorial\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Boot Configuration Tutorial<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"jdbc_jpa_hibernate\"><\/a>10. JDBC \u2013 JPA \u2013 Hibernate<\/h2>\n<p>Below is a list of libraries for interacting with Relational databases e.g. MySQL, Oracle etc.<\/p>\n<h3 class=\"wp-block-heading\">10.1 JDBC<\/h3>\n<p>The purpose of <strong>JDBC<\/strong> is to make possible interaction with any database i.e. MySQL, Oracle etc in a generic way. This is to hide such details which are specific to the database vendor and expose a generic interface for client applications. As we saw in the previous section the Spring Framework also has support for JDBC.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\" Jdbc Example For Beginners (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/jdbc\/jdbc-example-beginners\/\" target=\"_blank\">Jdbc Example For Beginners<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring JdbcTemplate Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/jdbc\/spring-jdbctemplate-example\/\" target=\"_blank\">Spring JdbcTemplate Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Spring Transaction Management Example with JDBC Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/jdbc\/spring-transaction-management-example-with-jdbc-example\/\" target=\"_blank\">Spring Transaction Management Example with JDBC Example<\/a><\/li>\n<li>You can download <a href=\"https:\/\/www.javacodegeeks.com\/minibook\/jdbc-tutorial\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"JDBC Tutorial (opens in a new tab)\">JDBC Tutorial<\/a><a href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/spring\/jdbc\/jdbc-example-beginners\/\"><\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">10.2 JPA<\/h3>\n<p>The <strong>Java Persistence API<\/strong> (JPA) is a vendor-independent specification for mapping Java objects to the tables of relational databases. Implementations of this specification allow application developers to abstract from the specific database product they are working with and allow them to implement CRUD (create, read, update and delete) operations such that the same code works on different database products. JPA has become the de-facto standard to write application code that interacts with databases.<\/p>\n<ul class=\"wp-block-list\">\n<li>You can download <a href=\"https:\/\/www.javacodegeeks.com\/minibook\/jpa-minibook\">JPA Minibook<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"JPA Tutorial \u2013 The ULTIMATE Guide (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2015\/02\/jpa-tutorial.html\" target=\"_blank\">JPA Tutorial \u2013 The ULTIMATE Guide<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">10.3 Hibernate<\/h3>\n<p><strong><a href=\"https:\/\/www.javacodegeeks.com\/hibernate-tutorials\">Hibernate<\/a><\/strong><a href=\"https:\/\/www.javacodegeeks.com\/hibernate-tutorials\"> <\/a>is a high-performance Object Relational Mapping (ORM) framework completely used in Java. Hibernate also provides query service along with persistence. This gives developers a way to map the object structures in Java classes to relational database tables. ORM framework eases to store the data from object instances into persistence data store and load that data back into the same object structure. ORM is actually a programming technique for converting data between relational databases and object oriented programming languages.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Hibernate Tutorial For Beginners with Examples (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/hibernate\/hibernate-tutorial-beginners-examples\/\" target=\"_blank\">Hibernate Tutorial For Beginners with Examples<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Hibernate Best Practices Tutorial (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/hibernate\/hibernate-best-practices-tutorial\/\" target=\"_blank\">Hibernate Best Practices Tutorial<\/a><\/li>\n<li>You can download <a href=\"https:\/\/www.javacodegeeks.com\/minibook\/hibernate-tutorial\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Hibernate Tutorial (opens in a new tab)\">Hibernate Tutorial<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"architecture\"><\/a>11. Architecture<\/h2>\n<p>Choosing the best architecture in Software is essential. Sometimes multiple architectures and patterns can be combined in a single system, and fitting the perfect design into your solution can often feel like an art. The most common architectures are <strong>Monolith Multi Layered<\/strong>, <strong>SOA<\/strong> and <strong>Microservices<\/strong>.<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2019\/01\/selecting-software-architecture.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Selecting a Software Architecture (opens in a new tab)\">Selecting a Software Architecture<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">11.1 Monolith Multi Layered<\/h3>\n<p><strong>Multi Layered Architecture<\/strong> is an architectural model that propose the organization of the software components into different layers. Each of those layers is implemented as a physically separated container of software components.<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2013\/05\/multilayered-architecture-1-introduction.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Multilayered architecture (opens in a new tab)\">Multilayered architecture<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">11.2 SOA<\/h3>\n<p><strong>SOA<\/strong> describes a set of patterns for creating loosely coupled, standards-based business-aligned services that, because of the separation of concerns between description, implementation, and binding, provide a new level of flexibility<em>.<\/em><\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2012\/04\/soa-example-application.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"SOA example application (opens in a new tab)\">SOA example application<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">11.3 Microservices<\/h3>\n<p><strong>Microservices<\/strong> allows you to take large application and decompose or break into easily manageable small components with narrowly defined responsibilities. The key point to embrace here is decomposing and unbundling the functionality.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservice Architecture \u2013 A Quick Guide (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2014\/06\/microservice-architecture-a-quick-guide.html\" target=\"_blank\">Microservice Architecture \u2013 A Quick Guide<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservices for Java Developers: Introduction (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/07\/microservices-for-java-developers-introduction.html\" target=\"_blank\">Microservices for Java Developers: Introduction<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2018\/08\/microservices-java-developers-microservices-communication.html\">Microservices for Java Developers: Microservices Communication<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservices for Java Developers: The Java \/ JVM Landscape (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/09\/microservices-java-developers-java-jvm-landscape.html\" target=\"_blank\">Microservices for Java Developers: The Java \/ JVM Landscape<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservices for Java Developers: Monoglot or Polyglot? (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/10\/microservices-java-developers-monoglot-polyglot.html\" target=\"_blank\">Microservices for Java Developers: Monoglot or Polyglot?<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservices for Java Developers: Implementing microservices (synchronous, asynchronous, reactive, non-blocking) (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/10\/microservices-java-developers-implementing-microservices-synchronous-asynchronous-reactive-non-blocking.html\" target=\"_blank\">Microservices for Java Developers: Implementing microservices (synchronous, asynchronous, reactive, non-blocking)<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservices for Java Developers: Microservices and fallacies of the distributed computing (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/11\/microservices-for-java-developers-microservices-fallacies-distributed-computing.html\" target=\"_blank\">Microservices for Java Developers: Microservices and fallacies of the distributed computing<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservices for Java Developers: Managing Security and Secrets (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2019\/01\/microservices-for-java-developers-managing-security-and-secrets.html\" target=\"_blank\">Microservices for Java Developers: Managing Security and Secrets<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservices for Java Developers: Testing (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2019\/01\/microservices-for-java-developers-testing.html\" target=\"_blank\">Microservices for Java Developers: Testing<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservices for Java Developers: Performance and Load Testing (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2019\/02\/microservices-for-java-developers-performance-and-load-testing.html\" target=\"_blank\">Microservices for Java Developers: Performance and Load Testing<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Microservices for Java Developers: Security Testing and Scanning (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2019\/04\/microservices-for-java-developers-security-testing-scanning.html\" target=\"_blank\">Microservices for Java Developers: Security Testing and Scanning<\/a><\/li>\n<li> <a rel=\"noreferrer noopener\" href=\"https:\/\/www.javacodegeeks.com\/2019\/04\/microservices-interview-questions-and-answers.html\" target=\"_blank\">Microservices Interview Questions and Answers<\/a> <\/li>\n<\/ul>\n<p>To select the best architecture check out the following comparisons:<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2016\/11\/microservices-vs-soa.html\">Microservices vs. SOA<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"java_8\"><\/a>12. Java 8+<\/h2>\n<p>The newest Java versions starting from Java 8 have new important features that Java developers should be aware of. Still the most used versions are Java 6-8.<\/p>\n<h3 class=\"wp-block-heading\">12.1 Java 8<\/h3>\n<p>Java 8 is a revolutionary release as it includes a huge upgrade to the Java programming model and a coordinated evolution of the JVM. Java 8 supports functional programming via the lambda expression and Stream API and many other features.<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.javacodegeeks.com\/java-8-features-tutorial.html\">Java 8 Features Tutorial \u2013 The ULTIMATE Guide<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-8-functional-programming-tutorial\/\">Java 8 Functional Programming Tutorial<\/a><\/li>\n<li><a aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" href=\"https:\/\/www.javacodegeeks.com\/java-8-tutorials\" target=\"_blank\">Java 8 Tutorials<\/a><\/li>\n<li>You can download <a aria-label=\"Java 8 Features (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/minibook\/java-8-features\" target=\"_blank\" rel=\"noreferrer noopener\">Java 8 Features<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">12.2 Java 9<\/h3>\n<p>Java 9 was not as popular as Java 8, however, it has some new exciting features such as the Modules and the Java Shell tool (JShell) which is an interactive tool for learning the Java programming language and prototyping Java code. <\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-9-jshell-tutorial\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Java 9 Jshell Tutorial (opens in a new tab)\">Java 9 Jshell Tutorial<\/a><\/li>\n<li><a href=\"https:\/\/www.javacodegeeks.com\/java-9-tutorials\">Java 9 Tutorials<\/a><br \/><a href=\"https:\/\/www.javacodegeeks.com\/java-9-tutorials\"><\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">12.3 Java 10-11<\/h3>\n<p>Java 10 and 11 are still not very popular has but they offer new features that will change the way we code and modularize our programs.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Java 10 will CHANGE the Way You Code (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/03\/java-10-will-change-way-code.html\" target=\"_blank\">Java 10 will CHANGE the Way You Code<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-11-new-features-tutorial\/\" target=\"_blank\">Java 11 New Features Tutorial\ufeff<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">12.4 Latest versions of Java<\/h3>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/java-11-new-features-tutorial\/\">Java 11 New Features Tutorial<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/how-to-download-java-12-for-windows\/\">How to download Java 12 for Windows<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/the-new-features-in-java-13\/\">The New Features in Java 13<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/what-is-new-in-java-14\/\">What is new in Java 14<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-15-new-features-tutorial\/\">Java 15 New Features Tutorial<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/guide-to-features-changes-from-java-8-to-java-15\/\">Guide to Features Changes from Java 8 to Java 15<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"desktop_java\"><\/a>13. Desktop Java<\/h2>\n<p>Although Java is not very famous for developing desktop applications, it has a lot of technologies that can be used to create rich client applications and applets that are fast, secure, and portable. The best technologies are Swing, AWT and JavaFX.<\/p>\n<h3 class=\"wp-block-heading\">13.1 Swing<\/h3>\n<p>The <strong>Swing API<\/strong> provides a comprehensive set of GUI components and services which enables the development of commercial-quality desktop and Internet\/Intranet applications.<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/desktop-java\/swing\/java-swing-tutorial-beginners\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">Java Swing Tutorial for Beginner<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/desktop-java\/swing\/java-swing-application-example\/\">JAVA Swing Application Example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/desktop-java\/swing\/create-gui-java-swing\/\" target=\"_blank\">How to Create a Gui in Java With Swing<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">13.2 AWT<\/h3>\n<p>The <strong>AWT (<\/strong>Abstract Window Toolkit) features the core foundation of the Java SE desktop libraries. It includes a robust event-handling model; graphics and imaging tools including shape, color, and font classes; layout managers for flexible window layouts; data transfer classes (including drag and drop) that allow cut and paste through the native platform clipboard.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/desktop-java\/awt\/create-a-frame-example\/\" target=\"_blank\">Create a Frame example<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/desktop-java\/awt\/geom\/creating-basic-shapes-example\/\" target=\"_blank\">Creating basic shapes example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/desktop-java\/awt\/create-a-container-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">Create a Container example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">13.4 JavaFX<\/h3>\n<p>JavaFX is a software platform for creating and delivering desktop applications, as well as rich Internet applications that can run across a wide variety of devices. JavaFX is intended to replace Swing as the standard GUI library for Java SE, but both will be included for the foreseeable future. JavaFX has support for desktop computers and web browsers on Microsoft Windows, Linux, and macOS.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/desktop-java\/javafx\/javafx-tutorial-beginners\/\" target=\"_blank\">JavaFX Tutorial for Beginners<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/javafx-effects-example\/\" target=\"_blank\">JavaFX Effects Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/core-java\/javafx-layout-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">JavaFX Layout Example<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"testing\"><\/a>14. Testing<\/h2>\n<p>Software testing has become more and more popular due to the increased size of the codebase of programs. It is of vital importance to write as many tests as possible and cover all the functionalities of your program. Testing can be divided into two main categories: unit testing and automation testing.<\/p>\n<h3 class=\"wp-block-heading\">14.1 JUnit<\/h3>\n<p>Java has its own library for unit testing, the <strong>JUnit<\/strong> library. A unit can be a function, a class, a package, or a subsystem. So, the term unit testing refers to the practice of testing such small units of your code, so as to ensure that they work as expected. For more info about JUnit read the following:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"JUnit Tutorial for Unit Testing \u2013 The ULTIMATE Guide (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2014\/11\/junit-tutorial-unit-testing.html\" target=\"_blank\">JUnit Tutorial for Unit Testing \u2013 The ULTIMATE Guide<\/a><\/li>\n<li>You can download <a href=\"https:\/\/www.javacodegeeks.com\/minibook\/junit-tutorial\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"JUnit Tutorial (opens in a new tab)\">JUnit Tutorial<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">14.2 Automation<\/h3>\n<p>With automation testing, the developer (or tester) write scripts which are used to automate the testing of the software end to end. <strong>Selenium<\/strong> and <strong>Cucumber<\/strong> are the most famous automation testing frameworks for Java. Check them out:<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Selenium Automation Testing Tutorial (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/selenium\/selenium-automation-testing-tutorial\/\" target=\"_blank\">Selenium Automation Testing Tutorial<\/a><\/li>\n<li>You can download <a href=\"https:\/\/www.javacodegeeks.com\/minibook\/selenium-programming-cookbook\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Selenium Programming Cookbook (opens in a new tab)\">Selenium Programming Cookbook<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"JUnit Cucumber Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/core-java\/junit\/junit-cucumber-example\/\" target=\"_blank\">JUnit Cucumber Example<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"logging\" class=\"mce-item-anchor\"><\/a>15. Logging<\/h2>\n<p><a href=\"https:\/\/www.javacodegeeks.com\/java-logging-tutorials\">Logging<\/a> refers to the recording of activity. Logging is a common issue for development teams. Several frameworks ease and standardize the process of logging for the Java platform. The most commonly used logging frameworks for Java are <strong>Log4j<\/strong> and <strong>Logback<\/strong>. Logback is intended as a successor to the Log4j project due to the end of the support of the Log4j project. Apache Log4j2 is an upgrade to Log4j that provides significant improvements over Log4j and provides many of the improvements available in Logback while fixing some inherent problems in Logback\u2019s architecture.<\/p>\n<h3 class=\"wp-block-heading\">15.1 Logback<\/h3>\n<p>Logback&nbsp;is one of the most widely used logging frameworks in the Java community.&nbsp;It offers a faster implementation than&nbsp;Log4j, provides more options for configuration, and more flexibility in archiving old log files. <\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Logback Tutorial for Beginners (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/logback\/logback-tutorial-beginners\/\" target=\"_blank\">Logback Tutorial for Beginners<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Logback RollingFileAppender Example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/logback\/logback-rollingfileappender-example\/\" target=\"_blank\">Logback RollingFileAppender Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/logback\/logback-configuration-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Logback Configuration Example (opens in a new tab)\">Logback Configuration Example<\/a><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">15.2 Log4j<\/h3>\n<p>Log4j2 is the updated version of the popular and influential Log4j library, which is a simple, flexible, and fast Java-based logging framework. It is thread-safe and supports internationalization.<\/p>\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" aria-label=\"Log4j 2 Getting Started (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/log4j\/log4j-2-getting-started-example\/\" target=\"_blank\">Log4j 2 Getting Started<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"Log4j 2 RollingFileAppender example (opens in a new tab)\" href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/log4j\/log4j-2-rollingfileappender-example\/\" target=\"_blank\">Log4j 2 RollingFileAppender example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/enterprise-java\/log4j\/log4j-2-best-practices-example\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Log4j 2 Best Practices Example (opens in a new tab)\">Log4j 2 Best Practices Example<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"interview_questions\" class=\"mce-item-anchor\"><\/a>16. Interview Questions<\/h2>\n<p>To prove your skills as a Java Developer in an interview you will be asked many questions that are related to Core Java, Multithreading, OOPs, Collections, Spring Framework, SQL. A summary of the most important questions that are asked in interviews: <\/p>\n<ul class=\"wp-block-list\">\n<li>You can download <a href=\"https:\/\/www.javacodegeeks.com\/minibook\/java-interview-questions\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Java Interview Questions (opens in a new tab)\">Java Interview Questions<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"150 Java Interview Questions and Answers \u2013 The ULTIMATE List (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2014\/04\/java-interview-questions-and-answers.html\" target=\"_blank\">150 Java Interview Questions and Answers \u2013 The ULTIMATE List<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"100 Multithreading and Concurrency Interview Questions and Answers \u2013 The ULTIMATE List (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2014\/11\/multithreading-concurrency-interview-questions-answers.html\" target=\"_blank\">100 Multithreading and Concurrency Interview Questions and Answers \u2013 The ULTIMATE List<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"40 Java Collections Interview Questions and Answers (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2013\/02\/40-java-collections-interview-questions-and-answers.html\" target=\"_blank\">40 Java Collections Interview Questions and Answers<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"100 Spring Interview Questions and Answers \u2013 The ULTIMATE List (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2014\/05\/spring-interview-questions-and-answers.html\" target=\"_blank\">100 Spring Interview Questions and Answers \u2013 The ULTIMATE List<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" aria-label=\"SQL Interview Questions and Answers \u2013 The ULTIMATE List (opens in a new tab)\" href=\"https:\/\/www.javacodegeeks.com\/2018\/08\/sql-interview-questions-and-answers-the-ultimate-list.html\" target=\"_blank\">SQL Interview Questions and Answers \u2013 The ULTIMATE List<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><a name=\"conclusion\" <=\"\" a=\"\">17. Summary<\/a><\/h2>\n<p>In this post, we took a look at the online resources to learn Java. We started with the installation of Java and an IDE and then we moved on to Core Java, Data Types and Java Collections. We saw the importance of learning algorithms, concurrency and design patterns. Then we covered the Spring Framework, JDBC, JPA and Hibernate. We took a look at architectural patterns, the newest Java versions, desktop Java, testing, logging and finally some very important Java Interview Questions.<\/p>\n<h2 class=\"wp-block-heading\"><a name=\"more_tutorials\" <=\"\" a=\"\">18. More Tutorials to Learn Java Online<\/a><\/h2>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-constructor-example\/\">Java Constructor Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-list-example\/\">Java List Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-stack-example\/\">Java Stack Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/printf-java-example\/\">Printf Java Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/string-compareto-java-example\/\">String CompareTo Java Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-random-number-generator-example\/\">Java random number generator Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/convert-int-to-string-java-example\/\">Convert int to string Java Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/string-to-int-java-example\/\">String to Int Java Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/polymorphism-java-example\/\">Polymorphism Java Example<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/java-api-tutorial\/\">Java API Tutorial<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/online-java-compiler-what-options-are-there\/\">Online Java Compiler \u2013 What options are there<\/a><\/li>\n<li><a href=\"https:\/\/examples.javacodegeeks.com\/check-java-version-in-windows-linux-macos\/\">How to Check Java version in Windows, Linux, MacOS<\/a><\/li>\n<\/ul>\n<p><strong>Last updated on Apr. 16th, 2021<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction Java is one of the most widely used programming languages. According to a recent report by Github, Java was ranked as the 2nd most used programming language after JavaScript. There is a very big list of topics that someone has to learn to master Java. The good thing is that you can find &hellip;<\/p>\n","protected":false},"author":77839,"featured_media":148,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-90980","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Best Way to Learn Java Programming Online - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn more? Then check out our article on the Best Way to Learn Java Programming Online, one of the most widely used programming languages\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Best Way to Learn Java Programming Online - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn more? Then check out our article on the Best Way to Learn Java Programming Online, one of the most widely used programming languages\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-29T07:00:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-21T13:33:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Lefteris Karageorgiou\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lefteris Karageorgiou\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html\"},\"author\":{\"name\":\"Lefteris Karageorgiou\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/e02bc5a7c43094d66065904931456b36\"},\"headline\":\"Best Way to Learn Java Programming Online\",\"datePublished\":\"2019-04-29T07:00:14+00:00\",\"dateModified\":\"2022-11-21T13:33:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html\"},\"wordCount\":3690,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"articleSection\":[\"Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html\",\"name\":\"Best Way to Learn Java Programming Online - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"datePublished\":\"2019-04-29T07:00:14+00:00\",\"dateModified\":\"2022-11-21T13:33:58+00:00\",\"description\":\"Interested to learn more? Then check out our article on the Best Way to Learn Java Programming Online, one of the most widely used programming languages\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/learn-java-programming-online.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Best Way to Learn Java Programming Online\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/e02bc5a7c43094d66065904931456b36\",\"name\":\"Lefteris Karageorgiou\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7c6f5f16615b972cea90bb51c2a673d4bfd52036ade7ca8936069dd8fd1a46ad?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7c6f5f16615b972cea90bb51c2a673d4bfd52036ade7ca8936069dd8fd1a46ad?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7c6f5f16615b972cea90bb51c2a673d4bfd52036ade7ca8936069dd8fd1a46ad?s=96&d=mm&r=g\",\"caption\":\"Lefteris Karageorgiou\"},\"description\":\"Lefteris is a Lead Software Engineer at ZuluTrade and has been responsible for re-architecting the backend of the main website from a monolith to event-driven microservices using Java, Spring Boot\\\/Cloud, RabbitMQ, Redis. He has extensive work experience for over 10 years in Software Development, working mainly in the FinTech and Sports Betting industries. Prior to joining ZuluTrade, Lefteris worked as a Senior Java Developer at Inspired Gaming Group in London, building enterprise sports betting applications for William Hills and Paddy Power. He enjoys working with large-scalable, real-time and high-volume systems deployed into AWS and wants to combine his passion for technology and traveling by attending software conferences all over the world.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/lefkarag\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Best Way to Learn Java Programming Online - Java Code Geeks","description":"Interested to learn more? Then check out our article on the Best Way to Learn Java Programming Online, one of the most widely used programming languages","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html","og_locale":"en_US","og_type":"article","og_title":"Best Way to Learn Java Programming Online - Java Code Geeks","og_description":"Interested to learn more? Then check out our article on the Best Way to Learn Java Programming Online, one of the most widely used programming languages","og_url":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2019-04-29T07:00:14+00:00","article_modified_time":"2022-11-21T13:33:58+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","type":"image\/jpeg"}],"author":"Lefteris Karageorgiou","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Lefteris Karageorgiou","Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html"},"author":{"name":"Lefteris Karageorgiou","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/e02bc5a7c43094d66065904931456b36"},"headline":"Best Way to Learn Java Programming Online","datePublished":"2019-04-29T07:00:14+00:00","dateModified":"2022-11-21T13:33:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html"},"wordCount":3690,"commentCount":2,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","articleSection":["Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html","url":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html","name":"Best Way to Learn Java Programming Online - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","datePublished":"2019-04-29T07:00:14+00:00","dateModified":"2022-11-21T13:33:58+00:00","description":"Interested to learn more? Then check out our article on the Best Way to Learn Java Programming Online, one of the most widely used programming languages","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/learn-java-programming-online.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Best Way to Learn Java Programming Online"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/e02bc5a7c43094d66065904931456b36","name":"Lefteris Karageorgiou","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7c6f5f16615b972cea90bb51c2a673d4bfd52036ade7ca8936069dd8fd1a46ad?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7c6f5f16615b972cea90bb51c2a673d4bfd52036ade7ca8936069dd8fd1a46ad?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7c6f5f16615b972cea90bb51c2a673d4bfd52036ade7ca8936069dd8fd1a46ad?s=96&d=mm&r=g","caption":"Lefteris Karageorgiou"},"description":"Lefteris is a Lead Software Engineer at ZuluTrade and has been responsible for re-architecting the backend of the main website from a monolith to event-driven microservices using Java, Spring Boot\/Cloud, RabbitMQ, Redis. He has extensive work experience for over 10 years in Software Development, working mainly in the FinTech and Sports Betting industries. Prior to joining ZuluTrade, Lefteris worked as a Senior Java Developer at Inspired Gaming Group in London, building enterprise sports betting applications for William Hills and Paddy Power. He enjoys working with large-scalable, real-time and high-volume systems deployed into AWS and wants to combine his passion for technology and traveling by attending software conferences all over the world.","url":"https:\/\/www.javacodegeeks.com\/author\/lefkarag"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/90980","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/77839"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=90980"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/90980\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=90980"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=90980"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=90980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}