Decagon Java Curriculum
Decagon Java Curriculum
TABLE OF CONTENT
1
WEEK 1
INTRO TO OOP
TOPICS / MODULES
1. Introduction to OOP
2. Pillars of OOP
3. SOLID
4. Access Modifiers
5. this and super keyword
6. final and static
7. Interface and Abstract Classes
8. String Class
9. Unit Testing
10. Intro to Exception handling
OUTCOMES
1. Understand Basic OOP concepts
2. Differentiate use cases for Interfaces and Abstract Classes
3. Understand how to create classes, interfaces, abstract classes where they are to be used respectively
4. Using how String, String Buffer and String Builder classes work and their differences.
LEARNING MATERIALS
https://www.udemy.com/course/java-the-complete-java-developer-course/
https://www.guru99.com/interface-vs-abstract-class-java.html
https://www.baeldung.com/java-method-overload-override
https://javapapers.com/core-java/abstract-and-interface-core-java-2/difference-between-a-java-interface
-and-a-java-abstract-class/
https://www.baeldung.com/java-method-overload-override
https://www.javatpoint.com/access-modifiers
https://medium.com/heuristics/interface-vs-abstract-class-vs-concrete-class-196f20c3af9a
https://www.javatpoint.com/this-keyword
https://www.javatpoint.com/final-keyword
https://www.javatpoint.com/java-inner-class
https://www.baeldung.com/java-oop
https://www.javatpoint.com/super-keyword
https://www.javatpoint.com/static-keyword-in-java
https://junit.org/junit5/docs/current/user-guide/
TASK
SCHOOL MODEL
Problem Description
2
You are to model a school using an object-oriented programming (OOP) paradigm. A basic school is
made up of the following.
· Principal
· Teachers
· Staff
· Non-Academic Staff
· Students
· Courses
· Classes
· Applicants
Each of these players have various functions/actions which they can perform
1. Organise the folders for your module (application), to house both your code base and the tests.
2. Write tests to cover all the methods to be written, before development begins (TDD).
4. Code
a. At Minimum
· Encapsulation
· Inheritance
· Polymorphism
· Interfaces/Abstract classes
· Single Responsibility for classes.
· Abstraction
· Aggregation
· Composition
5. Test Coverage
b. At Minimum
iii.The tests should cover the methods as well as the conditions/procedures that the methods employed.
3
WEEK 2
FILE I/O
TOPICS / MODULES
OUTCOMES
1. Read from a file.
2. Write to a file.
3. Manipulate text while reading a file
LEARNING MATERIALS
http://tutorials.jenkov.com/java-io/index.html
https://zetcode.com/java/readtext/
Microsoft Stream
TASK
READING FROM FILES
This project would primarily test your knowledge of file handling, string manipulation and basic
programming construct in Java.
You are to create a Java application that would parse and read values from
config files. The data in configuration file should be accessed with the
following syntax.
ConfigParser config = new ConfigParser(“name_of_file”);
4
Once your applications start, the config file(s) should be read and values
based on the environment (production, development, staging) should be
stored in a Map.
Command Line arguments should be used to specify the environment in
which the code would be executed in. Below is an illustration
Production java Main.java
Staging java Main.java staging
Development java Main.java development
The environment should specify the file to read from.
For example, if the environment passed to it is “production” the file to read
would be filename + environment;
There should be a default name if a name of the file is not passed to the
constructor.
Here is a format of an example config file:
dbname=sq04_db
host=127.0.0.1
port=8080
[application]
name=fintek
port=8081
context-url=/api/v1
mode=dev
theme=yellow
pipeline=fast
[application]
name=fintrack
For each of these values it should be able to use the values by calling the
get methods and passing the keys e.g
String dbName = config.get(‘dbname’);
String stagingDbname = config.get(‘application.name’);
Where there are multiple values for a key, the first one that appears in the
config file should be used. For example
• If the get method for the key ‘application.name’ is called, based on the
example file provided above, it should return the value fintek.
• If the get method for the key ‘dbname’ is called, it should return
‘sq04_db’.
All values should be returned as a string.
Use this boilerplate for the task
https://github.com/decadevs/Task-Two.git
5
WEEK3
COLLECTIONS
1. Collections
2 Sorting Algorithms
3. Searching Algorithms
OUTCOMES
1. Understand various types of collections.
2. Understand when to use the various collections
3. Understand the importance of Generics
4. Learn how to sort and search through various collections
LEARNING MATERIALS
1. https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html
2. https://howtodoinjava.com/java-collections/
3. https://howtodoinjava.com/java-collections/
4. https://www.javatpoint.com/generics-in-java
5. https://howtodoinjava.com/sort
6. https://howtodoinjava.com/java-algorithms-implementations/
7.https://www.codejava.net/java-core/collections/java-collections-utility-examples-for-searching-in-a-c
ollection
8. https://www.javatpoint.com/java-collections-binarysearch-method
9. https://www.baeldung.com/java-generics
Design Pattern
https://refactoring.guru/design-patterns/iterator/java/example
ALGORITHM VIDEO
Microsoft Stream
TASK
BOOK LIBRARY
Problem Description
A book library where a student or teacher borrows books. When the copy of the book is no longer in
the library. The library should return ‘book taken’. They can be multiple copies of the same book in the
library.
Implementation 1:
The books are given by the Librarian on a first come first serve basis, however, when a teacher is
requesting for the same book a student is asking for, the teacher comes first, When a junior student is
asking for the same book a senior student is asking for, the senior student comes first.
6
Implementation 2:
The books are given by the Librarian on a first come first serve basis, whether you are a teacher, a
junior or a senior student.
2. Organise the folders for your module (application), to house both your code base and the tests.
3. Write tests to cover all the methods to be written, before development begins (TDD).
Steps to evaluate.
5. Classes
a. At Minimum
· Encapsulation
· Inheritance
· Polymorphism
· Interfaces/Abstract classes
· Abstraction
· Aggregation
· Composition
· Generics
· Collections
· Exception Handling
6. Test Coverage
b. At Minimum
v. The tests should cover the methods as well as the conditions/procedures that the methods employed.
7
WEEK 4
LAMBDA/FUNCTIONAL INTERFACES
TOPICS / MODULES
1. Lambda/Functional Interfaces
2. What is Streams API?
OUTCOMES
LEARNING MATERIALS
1. Java Functional Programming | Full Course
2. https://howtodoinjava.com/java-8-tutorial/
3. https://www.educative.io/courses/java-8-lambdas-stream-api-beyond
4. https://www.javatpoint.com/exception-handling-in-java
DESIGN PATTERN:
Mediator
TASK
OPTIMIZATION AND CODE CLEANUP
In the previous project, exceptions were not handled and an imperative style of programming was used.
You are to use declarative programming as much as possible and handle exceptions effectively.
Tips:
8
WEEK 5
THREADS AND CONCURRENCY
TOPICS / MODULES
OUTCOMES
1. Understand what a thread and process is.
2. Understand how to spin up a thread
3. Understand when you should use multithreading
4. Know how to schedule tasks.
LEARNING MATERIALS
1. https://www.javatpoint.com/multithreading-in-java
2. http://tutorials.jenkov.com/java-concurrency/index.html
3. https://blog.knoldus.com/future-vs-completablefuture-1/
4. Head-First-Java(Chapter 15 - Networking and Threads)
5. https://www.baeldung.com/java-thread-safety
6.
https://www.topcoder.com/thrive/articles/Concurrency%20Patterns%20-%20Active%20Object%20and
%20Monitor%20Object
7. Udemy Course: Java Multithreading-Concurrency
8. https://www.vogella.com/tutorials/JavaConcurrency/article.html
9. https://howtodoinjava.com/java-concurrency-tutorial/
10. https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
11. https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html
12. Java Socket
● https://refactoring.guru/design-patterns/command/java/example
● https://javarevisited.blogspot.com/2016/05/command-design-pattern-in-java-example-code.html
ALGORITHM VIDEO
TASK
WEBSERVER
9
Create an http server using raw java socket. The http server would have 2 two or more endpoints which
are,
1. '/' path: This endpoint should handle GET requests. Requests to this path should return a HTML
content parsable by the browser
2. '/json' path: This endpoint should handle GET requests to the '/json' path and should return a JSON
object recognized by the browser as a JSON object.
The html page and json object returned should be read from the file system.
3. Organise the folders for your module (application), to house both your code base and the tests.
4. Write tests to cover all the methods to be written, before development begins (TDD).
Steps to evaluate.
6. Code
a. At Minimum
· Clean code
· Content-type
7. Test Coverage
b. At Minimum
iii. The tests should cover the methods as well as the conditions/procedures that the methods employed
10
WEEK 6
SQL, JDBC, SERVLETS
TOPICS / MODULES
1. SQL
2. JDBC
3. Servlets (Introduction)
OUTCOMES
1. Understand how various parts of SQL(DDL, DCL, DML, TCL, DQL)
2. Understand how to write SQL scripts
3. Knowledge of how to model data
3. Understand SQL joins, views and triggers
4. Understand how to execute SQL scripts in MYSQL Database
5. Understand how to connect to a database using JDBC
6. Understand transaction management and session using JDBC.
7. Know how to handle SQL injection.
8. Know to how to perform CRUD operations using servlet
LEARNING MATERIALS
1. https://www.mysqltutorial.org/basic-mysql-tutorial.aspx
2. SQL Tutorial - Full Database Course for Beginners
3. Java Basics - Introduction to JDBC
4. https://www.baeldung.com/intro-to-servlets
5. https://www.tutorialspoint.com/servlets/index.htm
6. https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServlet.html
7. https://docs.oracle.com/javaee/7/api/javax/servlet/Servlet.html
8. https://howtodoinjava.com/servlets/complete-java-servlets-tutorial/
9.
https://www.thymeleaf.org/documentation.htmlhttps://www.youtube.com/watchv=E8lZD3O2a68
10. https://www.udemy.com/course/full-stack-java-developer-java/
11. https://blog.zestmoney.in/handling-concurrent-updates-with-optimistic-and-pessimistic-locking-
in-jpa-c26d0b6855e7
12. https://www.baeldung.com/jpa-optimistic-locking
13. https://www.baeldung.com/jpa-pessimistic-locking
ALGORITHM: Stacks and Queues
Microsoft Stream
TASK
11
Create a clone of Facebook that would mimic the its basic features such as
· User signup
· CRUD on post
· CRUD on comment
· Like/Unlike a post/comment
Tools
· Java Servlet
· Thyme leaf/JSP
· Git
· JUnit/Mockito
· SQL
· JDBC
User Stories
· signup
· Edit a post/comment.
· Delete a post/comment
Expectations
12
o Joins
o Views
· Exception Handling
· Database design should be normalized and entities should have the necessary relationship mapping
Assessment Criteria
13
WEEK 7
INTRO TO SPRING
TOPICS / MODULES
1. Introduction to Spring Framework
2. Why Spring, Spring MVC and Spring Boot
3. Auto Configuration/ Overriding Auto-Configuration
1. Hibernate
2. SOLID
3. Web Services
OUTCOMES
1. Understand the roles of Spring, Spring boot and Spring MVC
2. Understand various Spring annotations.
3. Understands Dependency Injection and Spring IOC container
LEARNING MATERIALS
1. https://www.udemy.com/course/spring-data-jpa-using-hibernate/
https://www.udemy.com/course/hibernate-from-scratch/
2. https://www.tutorialspoint.com/jpa/jpa_advanced_mappings.htm
3. https://www.tutorialspoint.com/jpa/jpa_entity_relationships.htm
4. https://www.baeldung.com/spring-data-jpa-query
5. Udemy: Spring Framework Master Class – Beginner to Expert
6. https://www.cleo.com/blog/knowledge-base-web-services
7. https://howtodoinjava.com/best-practices/5-class-design-principles-solid-in-java/
8. https://www.baeldung.com/solid-principles
9. https://www.callicoder.com/hibernate-spring-boot-jpa-many-to-many-mapping-example/
10. https://www.callicoder.com/hibernate-spring-boot-jpa-one-to-many-mapping-example/
11. https://www.callicoder.com/hibernate-spring-boot-jpa-one-to-one-mapping-example/
ALGORITHM:
Strings
TASK
Refactor the project on week 6 to use hibernate ORM. Refactor the codebase to follow SOLID
principles where necessary.
14
WEEK 8
SPRING BOOT, H2 DATABASE, LOGGING
TOPICS / MODULES
1. Dependency Injection/IoC
2. Annotations
3. Spring boot properties
4. H2 database
5. Thymeleaf
6. Exception Handling 2
7. Logging
OUTCOMES
1. Understand how to configure a spring project
2. Understand how to use H2 in memory database
3. Know how to use Thymeleaf as a template engineer
4. Understand how to handle exceptions in spring boot
5. Understand logging using Log4
LEARNING MATERIALS
1. https://amigoscode.teachable.com/courses/267273/lectures/4499745
2. https://howtodoinjava.com/spring-boot-tutorials/
3. Spring Bean Lifecycle - Creation
4. https://www.toptal.com/java/spring-boot-rest-api-error-handling
5. https://mkyong.com/spring-boot/spring-rest-error-handling-example/ 7
6. https://www.baeldung.com/spring-boot-h2-database
7. https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
8. https://www.marcobehler.com/guides/java-logging
WEEKLY ALGORITHM
Graphs
15
WEEK 9
JDBC TEMPLATE, RESTTEMPLATE/WEBCLIENT
TOPICS / MODULES
1. JDBCTemplate
2. RestTemplate/Web Client
3. Packaging(WAR/JAR)
4. Application Server
5. Mockito/JUnit
6. Integration Testing
7. Scheduling Task in Spring
DECADEVS MUST-KNOW;
Resources
https://www.javainuse.com/spring/bootjdbc
https://spring.io/guides/gs/accessing-data-jpa/
https://zetcode.com/db/jdbctemplate/
https://www.vogella.com/tutorials/SpringJDBC/article.html
2. How to implement both RestTemplate and WebClient and understand the difference
a. Create beans for RestTemplate and WebClient
b. Create models that match the ones they intend to consume
c. Consume an application using both RestTemplate and WebClient
Resources
https://ordina-jworks.github.io/rest/2020/10/12/RestTemplate-vs-WebClient.html
https://www.baeldung.com/rest-template
https://www.baeldung.com/spring-webclient-resttemplate
https://rapidapi.com/blog/how-to-use-an-api-with-spring-resttemplate/
https://howtodoinjava.com/spring-boot2/resttemplate/spring-restful-client-resttemplate-example/
3. How to package a Spring boot application as a JAR or WAR file using maven and pom.xml file.
16
Resources
https://howtodoinjava.com/spring-boot2/war-packaging-example/
https://www.baeldung.com/java-jar-war-packaging
https://www.javatpoint.com/spring-boot-packaging
How to create Deployable WAR and JAR file by Spring Boot | Convert JAR to WAR and WAR to JAR
Resources
https://www.callicoder.com/spring-boot-task-scheduling-with-scheduled-annotation/
5. Mockito/JUnit
a. How to Identify and use the right dependencies for unit and integration testing
b. How to test a module/component of an application
c. How to use Test Runners e.g @RunWith(SpringRunner.class),
@RunWith(MockitoJUnitRunner.class), @ExtendWith(SpringExtension.class),
@ExtendWith(MockitoExtension.class)
d. Identifying various Classes and Methods
e. Mocking with @Mock and @MockBean annotations
Resources
https://junit.org/junit5/docs/current/user-guide/
https://rieckpil.de/guide-to-testing-with-spring-boot-starter-test/?utm_source=RIECKPIL+Newsletter&
utm_campaign=cdec4317fe-RIECKPIL_Newsletter_Automation_18&utm_medium=email&utm_term
=0_d60be7e492-cdec4317fe-446164890&mc_cid=cdec4317fe&mc_eid=0406540e8d
https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html
https://www.baeldung.com/mockito-series
https:/ /howtodoinjava.com/spring-boot2/testing/testing-support
ALGORITHM: Trees
17
WEEK 10
SPRING SECURITY
TOPICS / MODULES
1. Hashing/Hashing Functions
2. Salting
3. Authentication and Authorization
4. JWT
5. Spring Security
6. OAuth
7.
LEARNING OBJECTIVES (MUST-KNOW)
DECADEVS MUST-KNOW;
2. Salting
Resources
https://www.thesslstore.com/blog/difference-encryption-hashing-salting/
Resources
18
https://www.netjstech.com/2021/02/spring-boot-spring-security-jwt-authentication.html (Spring
Security with JWT Role-based)
Spring Security | FULL COURSE
Spring Security Basics
https://www.javainuse.com/spring/boot-jwt
https://www.marcobehler.com/guides/spring-security
https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol
https://www.geeksforgeeks.org/lightweight-directory-access-protocol-ldap/
https://howtodoinjava.com/spring5/webmvc/spring-mvc-cors-configuration/
https://howtodoinjava.com/servlets/java-cors-filter-example/
ALGORITHM: Trees
TASK
Blog(REST API)
Create a blog platform where users can register, login and can post their thoughts and comments. Users
can also like and dislike posts and comments. Users should be able to add posts to favorites and create a
connection with other users. As a user, I should be able to view the posts of everyone on the platform
and also view the posts of all my connections only.
Users should also be able to deactivate/delete their accounts, the deactivation should not happen
immediately but should be scheduled to run a certain time after the user deactivates. This allows the
user to cancel the deactivation before its due date.
Tools
· Spring Boot
· PostgreSQL
· Git
· JDBC Template
· JUnit/Mockito
Expectations
· Exception Handling
· Database design should be normalised and entities should have necessary relationship mapping
Assessment Criteria
20
WEEK 11
DOCKER, CI/CD
1. Docker
2. CI/CD
LEARNING OBJECTIVES (MUST-KNOW)
DECADEVS MUST-KNOW;
Resources
https://docs.docker.com/get-started/
https://www.javatpoint.com/docker-tutorial
https://docker-curriculum.com/
https://hackernoon.com/practical-introduction-to-docker-compose-d34e79c4c2b6
https://gabrieltanner.org/blog/docker-compose
https://www.udemy.com/course/docker-course-with-java-and-spring-boot-for-beginners/learn/lecture/1
6381836?start=0#overview
2. Understand the reasons behind CI/CD and How to implement Circle CI/Github Action
Resources
https://www.redhat.com/en/topics/devops/what-is-ci-cd
https://circleci.com/docs/2.0/getting-started/
https://github.blog/2022-02-02-build-ci-cd-pipeline-github-actions-four-steps/
3. https://www.redhat.com/en/topics/api/what-is-a-rest-api
4. https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
5. https://www.nginx.com/blog/introduction-to-microservices/
21
WEEK 12
INTRO TO REACT
WEEK13
ROUTING IN REACT. CONSUMING APIS. TESTING
Resources
https://codewithmosh.com/p/mastering-react
https://www.javatpoint.com/reactjs-tutorial
https://epicreact.dev/
22