Какие основные технические сложности возникли в Java-экосистеме за последние годы?

«Какие основные технические сложности возникли в Java-экосистеме за последние годы?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Ключевые технические вызовы:

  1. Модульная система Java (JPMS) в Java 9+:

    • Потребовала рефакторинга legacy-кода и явного объявления зависимостей между модулями.
    • Создала сложности с библиотеками, не готовыми к модульности.
      // module-info.java
      module com.myapp {
      requires java.sql;
      requires spring.context;
      exports com.myapp.api;
      }
  2. Переход на реактивное программирование:

    • Освоение парадигмы неблокирующего ввода-вывода с использованием Project Reactor или RxJava.
    • Сложность отладки и построения mental-модели асинхронных потоков данных.
  3. Миграция с Java 8 на новые LTS-версии (11, 17, 21):

    • Устранение deprecated API (например, удаление javax.* пакетов в пользу jakarta.*).
    • Адаптация под новый шестимесячный цикл релизов.
  4. Нативная компиляция с GraalVM:

    • Ограничения Reflection и динамического создания классов.
    • Необходимость конфигурации файлов native-image.properties или reflect-config.json.
  5. Распространение микросервисной архитектуры:

    • Усложнение мониторинга, трассировки запросов и обеспечения консистентности данных (Saga, паттерны CQRS).