Knowledge gaps and ideas for Proof of concepts

Table of Contents

Tsoding videos on Youtube

static vs singletons

  1. https://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern
  2. https://stackoverflow.com/questions/3532161/what-is-the-difference-between-a-singleton-pattern-and-a-static-class-in-java
  3. https://softwareengineering.stackexchange.com/questions/437609/how-do-singletons-differ-from-static-variables
  4. https://www.baeldung.com/java-static-class-vs-singleton#bd-singleton-versus-static-utility-classes
  5. https://www.geeksforgeeks.org/java/difference-between-singleton-pattern-and-static-class-in-java/
    1. The table
  6. https://stackoverflow.com/questions/3532161/what-is-the-difference-between-a-singleton-pattern-and-a-static-class-in-java
  7. https://stackoverflow.com/questions/8387989/where-are-static-methods-and-static-variables-stored-in-java
  8. https://softwareengineering.stackexchange.com/questions/235527/when-to-use-a-singleton-and-when-to-use-a-static-class

Classloaders in Java

  1. https://www.baeldung.com/java-classloaders

Go through the reading material from the nodes - Multi threading and Concurrency

Research about Cloud API Developer

  1. Job openings
  2. Salaries
  3. https://www.cloudflare.com/learning/security/api/what-is-a-cloud-api/

Kinesis streams - producing and consuming messages

  1. How to consume messages from a Kinesis stream?
  2. How to produce messages to a Kinesis stream?

Why would teams use Elasticsearch in java applications?

Springboot thymeleaf

Do a POC and common interview questions regarding this topic.

Do a POC for d3.js to implement a force directed graph using some sample data

Spring batch

Spring batch:

  1. https://www.baeldung.com/spring-batch-testing-job
  2. https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/test/context/SpringBatchTest.html

Notes about RBAC and ABAC and practical use cases and scenarios and implementations

Write your implementation for SUDOKU game (do this in multiple languages - java, rust, haskell)

Get a good understanding of the word “idempotent”. In what context is the word used in programming?

GWT

What is it?

Learning about Inversion of control

TODO

https://martinfowler.com/articles/injection.html

  1. Using Service Locator to implement IOC.
  2. How it compares with using Dependency Injection?
  3. Service Locator vs Dependency Injection
  4. Constructor versus Setter Injection

User registration application

Things it will teach:

  1. front end
  2. working with JSON web tokens
  3. handling authentication in the backend
  4. sending password reset emails
    1. How does “verification SMS” work? What concepts are used in implementing it? How is it implemented? Write a small POC for it in java.
  5. I managed to build a user registration application that I was pretty proud of. It had a React front end, an Express/Node.js server back end, a MySQL database, it used Passport.js and JSON Web Tokens to handle authentication, the Sequelize ORM to perform CRUD operations on the database, a password reset feature through Nodemailer, Swagger endpoint testing on the REST endpoints, a docker-compose.yml file to spin up all three pieces of the application simultaneously in a virtualized container environment, etc., etc. Have you had enough technologies thrown at you, yet?

A nice article about what sort of problem a DI Container solves

https://kozmic.net/2012/10/23/ioc-container-solves-a-problem-you-might-not-have-but-its-a-nice-problem-to-have/

When to use a DI Container

https://blog.ploeh.dk/2012/11/06/WhentouseaDIContainer/

Better understanding of Factory patterns family

  1. https://prasadct.medium.com/factory-method-design-patternfactory-method-design-pattern-with-real-world-example-4ee909a24ab6
  2. https://blog.devgenius.io/seven-popular-use-cases-to-apply-factory-pattern-in-your-software-project-6d1d6b57f5a5
  3. https://softwareengineering.stackexchange.com/questions/200647/why-is-the-factory-method-design-pattern-more-useful-than-having-classes-and-cal
  4. https://eluminoustechnologies.com/blog/case-study-factory-design-pattern/

Better understanding of inheritance.

  1. Go through the discussions in this link: https://stackoverflow.com/questions/49002/prefer-composition-over-inheritance and understand the intricate details of inheritance.
  2. This will give us a better understanding of the topic “Composition over Inheritance”.
  3. Implement this in a java application called composition-vs-inheritance: https://www.digitalocean.com/community/tutorials/composition-in-java-example

Thread - in-depth understanding

Inter-thread synchronization

  1. wait()
  2. notify()
  3. join()

https://www.baeldung.com/java-thread-join https://www.baeldung.com/java-wait-notify https://www.java2novice.com/java_thread_examples/thread_join/ https://www.java2novice.com/java_thread_examples/thread_sleep/ https://www.java2novice.com/java_thread_examples/thread_yield/

Understanding Composition Root

  1. https://freecontent.manning.com/dependency-injection-in-net-2nd-edition-understanding-the-composition-root/?utm_source=freecontentcenter&utm_medium=website&utm_campaign=book_dependencyinjection_ppp&utm_content=article_07
  2. https://blog.ploeh.dk/2011/07/28/CompositionRoot/

API Keys vs OAuth

Add the points to “Security” node in programming mindmap.

  1. https://www.google.com/search?q=api+keys+vs+oauth&oq=api+keys+vs+oauth&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQLhhA0gEINDMxOWowajGoAgCwAgA&sourceid=chrome&ie=UTF-8
  2. https://stackoverflow.com/questions/38047736/oauth-access-token-vs-api-key
  3. https://cloud.google.com/endpoints/docs/openapi/when-why-api-key

Locks

  1. https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html
  2. https://www.geeksforgeeks.org/reentrantreadwritelock-class-in-java/
  3. https://www.geeksforgeeks.org/difference-between-readwritelock-interface-and-reentrantreadwritelock-class-in-java/

Apache Zookeeper

Write your own explanations for searching and sorting in your own words in the programming website

Projects that I want to implement in the short term

  1. https://highscalability.com/zookeeper-a-reliable-scalable-distributed-coordination-syste/
  2. Database transaction isolation levels: https://www.geeksforgeeks.org/transaction-isolation-levels-dbms/
  3. How to test gRPC services from terminal?
  4. https://jenkov.com/tutorials/java-concurrency/index.html
  5. https://jenkov.com/tutorials/java-functional-programming/functional-composition.html
  6. Write REST clients in spring applications
    1. retry mechanisms
    2. testing
    3. integration testing
  7. Event driven architecture
  8. Spring cloud config server POC
  9. Service registry and discovery with Eureka
  10. Testing in-depth
  11. API Gateway with spring - POC
  12. Distributed logging and tracing - with spring applications
  13. Why would teams use Elasticsearch in java applications?
  14. Mockito vs Powermock
  15. Using wiremock for integration testing in spring
    1. https://medium.com/@bubu.tripathy/integration-testing-using-wiremock-afc93f18bb62
    2. https://medium.com/@bubu.tripathy/simulate-slow-responses-in-a-spring-boot-application-bf7ce14d3aa4
    3. https://medium.com/@bubu.tripathy/simulate-network-failures-in-a-spring-boot-application-60e2ecb7daab
    4. https://www.baeldung.com/integration-testing-in-spring
  16. https://www.e4developer.com/2019/03/26/java-9-to-12-all-the-language-modifications/
  17. A project to show how to handle various kinds of errors
  18. What is the point of delegate pattern?
  19. https://www.e4developer.com/
  20. Multithreaded Programming Guide: https://docs.oracle.com/cd/E19455-01/806-5257/index.html

Understand CDI

Converting from using Singletons to using Dependency Injection

https://softwareengineering.stackexchange.com/questions/415950/migrating-legacy-code-with-singletons-to-dependency-injection

backpressure in reactive programming

  1. Chapter in Vinoth Udemy course
  2. https://www.baeldung.com/spring-webflux-backpressure
  3. https://www.google.com/search?q=backpressure+in+reactive+programming&client=firefox-b-1-d&sca_esv=be16b17cae58a747&sca_upv=1&ei=znKlZu6LC66giLMPw7Pl8Q8&oq=backpressure+in+&gs_lp=Egxnd3Mtd2l6LXNlcnAiEGJhY2twcmVzc3VyZSBpbiAqAggAMgUQABiABDIFEAAYgAQyBRAAGIAEMgUQABiABDIFEAAYgAQyBRAAGIAEMgUQABiABDIFEAAYgAQyBRAAGIAEMgUQABiABEioR1DYDFjvN3ABeAGQAQCYAXOgAcMIqgEEMTEuMrgBA8gBAPgBAZgCDqAC5QnCAgoQABiwAxjWBBhHwgILEAAYgAQYkQIYigXCAgoQABiABBhDGIoFwgIREC4YgAQYsQMY0QMYgwEYxwHCAgsQLhiABBjRAxjHAcICCxAAGIAEGLEDGIMBwgIOEC4YgAQYsQMYgwEYigXCAgsQLhiABBixAxiDAcICCBAAGIAEGLEDwgIOEC4YgAQY0QMY1AIYxwHCAg4QLhiABBjHARiOBRivAcICEBAAGIAEGLEDGEMYgwEYigXCAg4QABiABBixAxiDARjJA8ICBhAAGBYYHsICCBAAGBYYChgewgILEAAYgAQYhgMYigXCAggQABiABBiiBMICBxAAGIAEGAqYAwCIBgGQBgiSBwM4LjagB-ti&sclient=gws-wiz-serp

The Complete Guide to the ELK Stack

https://logz.io/learn/complete-guide-elk-stack/

Functor, applicative, monad, map, flatmap and other Haskell concepts

  1. https://medium.com/beingprofessional/understanding-functor-and-monad-with-a-bag-of-peanuts-8fa702b3f69e
  2. https://www.adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
  3. https://www.adit.io/index.html
  4. https://www.adit.io/posts/2013-05-15-Locks,-Actors,-And-STM-In-Pictures.html
  5. https://www.adit.io/posts/2013-05-11-The-Dining-Philosophers-Problem-With-Ron-Swanson.html
  6. https://www.adit.io/posts/2013-04-15-making-a-website-with-haskell.html
  7. https://www.adit.io/posts/2012-03-10-building_a_concurrent_web_scraper_with_haskell.html

http-client

https://www.baeldung.com/httpclient-guide

Factory pattern in springboot

https://kh-yiu.blogspot.com/2013/04/spring-implementing-factory-pattern.html https://stackoverflow.com/questions/6390810/implement-a-simple-factory-pattern-with-spring-3-annotations

Fight ambiguity and improve your code with Java 17’s sealed classes

https://blogs.oracle.com/javamagazine/post/java-sealed-classes-fight-ambiguity

Multipart upload

https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html What is the difference between this and single uploads?

Optimistic locking

  1. https://stackoverflow.com/questions/2572566/java-jpa-version-annotation
  2. https://stackoverflow.com/questions/27961402/how-to-resolve-optimisticlockingfailureexception
  3. https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/dao/OptimisticLockingFailureException.html
  4. https://github.com/spring-projects/spring-data-relational/issues/1337
  5. There is an example for this in

/home/explorer436/Downloads/GitRepositories/programming-playground/java-playground/spring-cloud-examples/spring-cloud-stream/saga-choreography/order-service/src/main/resources/data.sql /home/explorer436/Downloads/GitRepositories/programming-playground/java-playground/spring-cloud-examples/spring-cloud-stream/saga-choreography/order-service/src/main/java/com/my/company/order/application/entity/PurchaseOrder.java

Spring security

  1. https://www.milanwittpohl.com/projects/tutorials/full-stack-web-app/the-backend-with-java-and-spring
  2. https://www.baeldung.com/rest-api-spring-oauth2-angular
  3. Go through the reading material from the nodes - Spring security
  4. sync -> programming and other tips -> Spring Security -> move the content from this into the mindmap

Why do POCs at all?

Helps with confidence. When someone asks you if you know something, the confidence with which you will answer the question when you really worked on it in the past really shows in the answer. If you really did not work on it, and if you try to lie to the person that is asking the question, they will be able to tell that something is wrong.

Another advantage is increased knowledge. You will be able to connect the dots easily when you have firsthand knowledge about a topic.

What is the end goal?

The endgoal is to get to a point where I can think of a problem in my mind and be able to easily translate it into a solution on paper and implement it using a language. And then expand upon the problems. Plus, it is fun to solve puzzles.

When looking at new problems online, resist the urge to solve them right away. Instead, focus more on where the question is coming from. What is the pattern? Are there more questions there? Do you have an in-depth understanding of the topic? If not, spend time on it.

After getting a deeper understanding of the concept, see step below.

Whenever you read about an algorithm or computer science concept, implementing a solution for it in Java or any of your favorite languages will help remember it in the future.

Note: Solving problems using pen and paper seems way more easier than tring to write code for it first. The free flow of thoughts is very helpful.

Resources to POC applications

  1. https://fullstackdeveloper.guru/spring-boot/
  2. https://howtodoinjava.com/series/spring-boot-tutorial/
  3. https://www.baeldung.com/full_archive
  4. TODO Some very good examples: https://www.javaguides.net/p/spring-boot-tutorial.html
  5. TODO Do a POC on this topic: https://www.baeldung.com/spring-boot-feignclient-vs-webclient

java 8 spliterator

api versioning

create an api with an initial version and change the contract. See how versioning comes into play for the implementation.

spring security

https://medium.com/@akmuthumala/developing-a-json-web-token-jwt-authentication-using-spring-security-8042cafc0066

javax mail

https://medium.com/@sushant7/how-to-monitor-incoming-emails-in-a-spring-boot-application-indefinitely-7dabbdb74b2d

Springboot

  1. Springboot DynamoDB
    1. https://github.com/derjust/spring-data-dynamodb-examples
    2. https://javatodev.com/spring-boot-dynamo-db-crud-tutorial/
    3. https://www.baeldung.com/spring-data-dynamodb
  2. https://spring.io/guides/gs/spring-boot-docker/
  3. Topical guide on Docker: https://spring.io/guides/topicals/spring-boot-docker
  4. https://spring.io/reactive
  5. https://spring.io/guides
  6. https://spring.io/guides*topical-guides
  7. https://spring.io/guides/gs/accessing-data-mongodb/
  8. https://spring.io/guides/gs/spring-cloud-stream/
  9. https://spring.io/guides/gs/gateway/
  10. https://spring.io/guides/gs/routing-and-filtering/
  11. https://spring.io/guides/gs/service-registration-and-discovery/
  12. https://spring.io/guides/gs/authenticating-ldap/
  13. Springboot graphql POC - producer and client
  14. Spring Cloud Contract Tests - what value do they provide to the producer application? Write a small POC for this.
  15. sending email from a springboot application https://medium.com/@ankithahjpgowda/send-mails-from-springboot-application-a5a83132c92b
  16. spring-data-redis
  17. spring-session
  18. Spring Expression Language
  19. Spring with Akka - actor and service models
  20. Eureka - service registration and discovery
  21. asciidoctor
  22. spring-restdocs
  23. spring-restdocs-asciidoctor
  24. spring-auto-restdocs-json-doclet
  25. gradle jsonDoclet task
  26. org.json:json
  27. org.webjars:json-stringify
  28. groovy springboot integration
  29. dealing with JSON inside a springboot application (you can use gson library for this)
  30. https://stackoverflow.com/questions/31288810/spring-scheduled-task-running-in-clustered-environment How to deal with batch jobs or scheduled jobs in a cluster or multi-instance setup?
  31. Is there a way to do hot-reloading for changes when we are working on a spring-boot application in local computer? So that the developers don’t have to stop and start the servers when they make changes. The answer is YES. Look at springboot dev tools. https://docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/html/using-boot-devtools.html#:~:text=The%20spring%2Dboot%2Ddevtools%20module%20includes%20an%20embedded%20LiveReload%20server,and%20Safari%20from%20livereload.com.

Spring and Kubernetes:

  1. https://web.archive.org/web/20210414191759/https://spring.io/guides/gs/spring-boot-kubernetes/
  2. https://spring.io/guides/gs/spring-boot-kubernetes/

Spring Cloud Sleuth and Spring Cloud Zipkin

  1. https://spring.io/blog/2016/02/15/distributed-tracing-with-spring-cloud-sleuth-and-spring-cloud-zipkin
  2. https://www.baeldung.com/tracing-services-with-zipkin
  3. https://www.baeldung.com/spring-cloud-sleuth-single-application
  4. https://howtodoinjava.com/spring-cloud/spring-cloud-zipkin-sleuth-tutorial/
  5. https://dzone.com/articles/spring-cloud-amp-spring-bootimplementing-zipkin-se

Elastic stack

JSON parsing

Tsoding JSON parser

(Add this to the list of things to remember when learning a new programming language) Whenever I set out to learn a new language, the first small program I try to write is a JSON parser, which converts a data format commonly used for web applications into a structure that can be manipulated by the computer.

Event based architecture

Read about these two. See if you can do POCs on them.

Concept of Sharding in databases

AWS ALB vs ELB

Need further explanation on durable queue notes from Spring cloud stream

Concurrency and parallelism

What are the differences? Need to do more research about this.

  1. Scheduling

  2. Deadlock

  3. Starvation

  4. Concurrent or parallel programming

    Concurrency vs Parallelism vs Multi-threading

Reading list

Uber engineering blog: https://eng.uber.com/

https://en.wikipedia.org/wiki/HATEOAS

https://stateless.group/hal_specification.html - this is related to HATEOAS

Spring Data REST takes the features of Spring HATEOAS and Spring Data MongoDB and automatically combines them together. Look at the POC `spring-data-mongodb-rest/`

Spring Data REST also supports Spring Data JPA, Spring Data Gemfire, and Spring Data Neo4j as backend data stores.

https://walkercoderanger.com/blog/2014/02/javascript-minefield/

  1. The OWASP Top 10 is a standard awareness document for developers and web application security. It represents a broad consensus about the most critical security risks to web applications.

    https://owasp.org/www-project-top-ten/

  2. What tech stacks are used in other companies? https://stackshare.io/stacks

Need architecture research

https://dotnet.github.io/orleans/

https://www.microsoft.com/en-us/research/project/orleans-virtual-actors/

https://quarkus.io/

https://micronaut.io/

https://engineering.opsgenie.com/run-native-java-using-graalvm-in-aws-lambda-with-golang-ba86e27930bf

https://www.baeldung.com/spring-security-kerberos

https://camel.apache.org/

gRPC and AppMesh vs RESTful calls

OpenTelemetry

How is this done in a springboot application?

aws to do list

localstack

  1. https://localstack.cloud/
    1. See how you can use it in your POCs.
    2. See if you can do AWS POCs without having to create as AWS account.
  2. S3 presigned urls
    1. How to create a S3 pre-signed URL?
    2. How to upload files using S3 pre-signed URLs?
    3. This is done in Prudential projects. Refer to it if necessary.
  3. Reading and writing from DynamoDB tables.
    1. This is done in Prudential projects. Refer to it if necessary.
  4. Reading and writing from SQS queues.
    1. This is done in Prudential projects. Refer to it if necessary.
  5. Sending emails using SCS or the AWS service that lets you send emails
  6. How to scale a docker service in AWS ECS? Using auto scaling. This can be set in the console. How to do it using CloudFormation template?
  7. Integration with Alexa API - Can we do a small POC for this?

POC idea

  1. AWS Lambda - Employee database - DynamoDB in local docker or in localstack
  2. Employee lambda integration with MongoDB or a NoSQL database. Don’t care too much about the language in which it is implemented - although it would be nice to do it using java.

Find solutions for these use-cases

Handling slow responses from backend services

How can we do this?

  1. You triggered a call to a backend service from your application.
  2. You waited 90 seconds but did not get a response from the backend service yet.
  3. You want to stop waiting and give a 201 ACCEPTED message to the application that is waiting for your response.
  4. But still keep waiting fro the response from the backend service.
  5. After receiving response from the backend service, do the house-keeping tasks (like inserting or updating rows in database, writing logs, etc.)

priority based processing of requests

  1. priority based processing of requests when we have asynchronous processing implemented
  2. e.g. If we have SQS or a streaming solution in place, but we want to assign priority to the requests that need to be processed based on certain criteria like the client application or the type of the message. How to implement this?

Links to this note