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

  • 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 MVC

    • REST

    • Spring Boot

  • JSF

  • Java EE (теперь уже Jakarta EE), чем отличается от того же Spring и других фундаментальных подходов. MicroProfile под микро сервисы.

  • Java Performance.

  • Graal (GraalVM) Java Compiller

  • Ajax long polling, Comet

  • JNI - интеграция с низкоуровневыми библиотеками (eg. C, C++, Asm)

  • Jasper reports

  • Cucumber

  • Netty (современный Tomcat)

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

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

  • Ant - устарел, практически не используется. Или используется для сложных сборок в связке с Maven

  • Maven - сборка на основе предопределенной структуры проекта. Использует внешний репозиторий зависимостей

  • Gradle - современный фреймворк (написан на Grails) Часто используется для сборки новых проектов

  • Bazel - Фреймворк от Google. Используется для сборки проектов с множественными нативными зависимостями и подзависимостями под различные платформы. Хорошо подходит для моно репозиториев.

  • SBT - используется для Scala

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

  • Spring Boot - Взаимосвязь внутри Spring Environment, рассматривается простое приложение REST, UI, DB

  • Reactive Java - Область использования, базовые функции

  • Swagger - Взаимодействие удаленных Front/Back команд.

  • ProtoBuff/Apache Thrift - Multi-cleint data streaming

  • Lambda, Cloud Functions - Базовые понятия, пример и deploy

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

Last updated