> For the complete documentation index, see [llms.txt](https://interlink.gitbook.io/process/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://interlink.gitbook.io/process/dev/development/technologies/programming-languages/java.md).

# Java

**Темы для изучения по Java**

* Что такое Java, в чем отличие от других языков, роль JVM\
  Keywords языка и области их применения
* История версий и ключевые изменения (annotations, modules, lambda, etc)
* Java 9 Modularity, система модулей (подводные камни)
* Best practices по структуризации кода (директории, namespaces/packages, файлы)
* Best practices по работе или избеганию Null (Null Pointer Exception). Ссылки на дизайн подходы, Uncle Bob, Optional, etc.
* Enums
* Reflection/RTTI
* RPC, Marshaling, Unmarshaling
* Многопоточность, Mutability, Семафоры, Мьютексы, etc
* Aspect Oriented Programming (Aspects, Proxies as an architecture pattern)
* Управление памятью, custom memory allocators, освобождение
* Советы по выбору основополагающих архитектурных подходов, e.g. contracts между модулями через интерфейсы и т.п.
* Эффективное использование языка, Books: Effective Java, etc.
* Генераторы кода (Lombok, Cofoja, etc), стоит ли их использовать, нюансы использования и миграции
* Юнит тестирование (JUnit, TestNG, мок фреймворки). Best practices по организации и написанию тестов.
* Матчеры под юнит тестирование. Что и как, примеры. Hamcrest, etc.
* ORM (Hibernate, etc), какие есть, стоит ли использовать и в каких ситуациях лучше избегать.
* Логирование (log4j, slf4j, etc), что сейчас “на коне”, best practices использования в мире микро сервисов и контейнеризации.
* Модульная архитектура проекта, parent-child pom.xml, зачем и когда такое может пригодится.
* Dependency Injection (Inversion of Control). Что, зачем и почему. Что можно сегодня использовать (Spring, Guice, etc). Best practices, примеры.
* Сторонние полезные библиотеки велосипедов (Apache Commons, Google Guava, Reflections, etc). Примеры, что свежо и “модно” сегодня, а что уже лучше не использовать как устаревшее и т.п.
* Периодические и background процессы (Quartz)
* Messaging (JMX, RabbitMQ, PubSub)
* Работа с XLS(x), Apache Poi, etc. Примеры, что сегодня лучше всего использовать, etc.
* Работа с датами, временем, тайм зонами. Раньше использовали внешние библиотеки а-ля joda-time, сейчас в новой Java есть свой Data Time api. Примеры, best practices.
* Работа с JSON. Jackson, Alibaba Fastjson, etc. Примеры, best practices, possible issues, etc.
* Non-blocking I/O в Java. Основы event loop, Netty, etc. Фреймворки поверх Netty: новый Spring, Vertx.io, Ratpack, etc.
* Microservice Architecture&#x20;
* Functional Reactive Programming в Java. Основы Reactive Extensions, RxJava, примеры, best practices, etc.
* Контейнеризация. Примеры упаковки Java приложения в Docker, подводные камни, known issues of java in docker, best practices.
* Как создать HTTP приложение на Java, т.е. реализовать HTTP endpoints, REST(ful), etc. Какие фреймворки, примеры. (тот же spring, vertx, ratpack, etc)
* Spring Stack
  * Spring 4 (Core, Data Access, ORM, Web, AOP, Testing, Annotations, JMS)
  * Spring Security
  * [Spring Data](https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#get-started:first-steps:spring)
  * Spring MVC
  * REST
  * Spring Boot
* JSF
* Java EE (теперь уже Jakarta EE), чем отличается от того же Spring и других фундаментальных подходов. MicroProfile под микро сервисы.
* Java Performance.
* Graal (GraalVM) Java Compiller
* Garbage Collection <https://blog.plan99.net/modern-garbage-collection-part-2-1c88847abcfd>
* Ajax long polling, Comet
* JNI - интеграция с низкоуровневыми библиотеками (eg. C, C++, Asm)
* Jasper reports
* Cucumber
* [OSGi](https://en.wikipedia.org/wiki/OSGi)
* Netty (современный Tomcat)

**Системы сборки проекта**

Build инструменты, что лучше использовать в различных ситуациях

* Ant - устарел, практически не используется. Или используется для сложных сборок в связке с Maven
* Maven - сборка на основе предопределенной структуры проекта. Использует внешний репозиторий зависимостей
* Gradle - современный фреймворк (написан на Grails) Часто используется для сборки новых проектов
* [Bazel](https://bazel.build/) - Фреймворк от Google. Используется для сборки проектов с множественными нативными зависимостями и подзависимостями под различные платформы. Хорошо подходит для моно репозиториев.
* [SBT](https://www.scala-sbt.org/) - используется для Scala

**Тематики для обучающих видео курсов**

* Spring Boot - Взаимосвязь внутри Spring Environment, рассматривается простое приложение REST, UI, DB
* Reactive Java - Область использования, базовые функции
* Swagger - Взаимодействие удаленных Front/Back команд.
* ProtoBuff/Apache Thrift - Multi-cleint data streaming
* Lambda, Cloud Functions - Базовые понятия, пример и deploy

**Дополнительная информация**

* Базовый синтаксис: Thinking in Java by Bruce Eckel
* Видео курсы по Java[ https://www.youtube.com/user/KharkovITCourses/videos](https://www.youtube.com/user/KharkovITCourses/videos)
