Какой технологический стек вы применяли в последних проектах?

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

Ответ

Стек варьировался в зависимости от проекта, но типичный набор для backend-микросервисов включал:

Backend (Java-экосистема):

  • Язык и JVM: Java 17/21 (LTS версии), преимущественно для стабильности и новых возможностей (Records, Pattern Matching).
  • Фреймворк: Spring Boot 3.x (Web, Data JPA, Security, Cloud).
  • Базы данных: PostgreSQL для ACID-транзакций, Redis для кеширования и сессий.
  • Асинхронная коммуникация: Apache Kafka для стриминга событий и интеграции сервисов.
  • Resilience: Resilience4j для реализации шаблонов устойчивости (Circuit Breaker, Retry, Rate Limiter).

Frontend & BFF (Backend For Frontend):

  • Для некоторых микросервисов, выступающих в роли BFF, использовался TypeScript с Node.js (NestJS) или React для админ-панелей.

Инфраструктура и DevOps:

  • Контейнеризация и оркестрация: Docker, Kubernetes (K8s) для деплоя и масштабирования.
  • Облако: AWS (EC2, EKS, RDS, S3, SQS).
  • CI/CD: GitLab CI/CD или GitHub Actions для автоматизации сборки, тестирования и деплоя.
  • Мониторинг: Prometheus для сбора метрик, Grafana для дашбордов, ELK-стек для логов.

Пример конфигурации Spring Boot приложения:

@SpringBootApplication
@EnableCaching // Для кеширования через Redis
@EnableKafka  // Для обработки Kafka-сообщений
public class OrderServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        // Конфигурация Redis Cache
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(10));
        return RedisCacheManager.builder(factory).cacheDefaults(config).build();
    }
}