Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

+1 183новые вакансии за сутки·93 833вакансии открыты сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 273
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 409 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 230
  • Облачные технологии14 171
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 801
  • Продакт-менеджер1 247

Разработка

  • Android1 858
  • iOS1 698
  • Fullstack вакансии996
  • AI вакансии955
  • Frontend вакансии755
  • Mobile вакансии44

По стеку

  • Go8 752
  • Java6 593
  • Node.js2 036
  • .NET1 739
  • Kotlin1 618
  • Rust1 472
  • C#717
  • PHP690
  • C++579

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

  • Kubernetes7 787
  • DevOps вакансии6 095
  • Linux-инфраструктура5 508
  • Terraform / IaC4 287
  • CI/CD3 272
  • Мониторинг и Observability1 792
  • SRE566
  • Кибербезопасность454

Аналитика и данные

  • Data Scientist1 138
  • Бизнес-аналитик921
  • Аналитик данных858
  • Системный аналитик154

Другие направления

  • Проджект-менеджер624
  • UI/UX дизайн149
  • Ручное тестирование14

По регионам

  • Вакансии в США44 166
  • Вакансии в Европе24 014
  • Вакансии в Канаде4 535
  • Работа в России3 867

По формату

  • Удалённые вакансии75 005
  • Релокация в США44 166
  • Гибридная работа12 485
  • Офисная работа7 090

По уровню

  • Senior вакансии42 643
  • Middle вакансии20 960
  • Junior вакансии6 708

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Spring BootВсе вопросы
Spring BootSeniorОпыт

Какие production-риски есть у Spring Boot: blocking code, connection pooling, config, auth, observability, deploy или graceful shutdown?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Ключевые production-риски: блокирующий I/O в реактивном стеке, исчерпание пула соединений, утечки конфигурации через Actuator, отсутствие graceful shutdown и неполная observability без трейсинга.

1. Blocking code в реактивном стеке

Если вы используете Spring WebFlux (Netty), любой блокирующий вызов в event loop-потоке (JdbcTemplate, синхронный RestTemplate, Thread.sleep) моментально останавливает обработку всех запросов.

// ПЛОХО: блокирующий вызов в реактивной цепочке
@GetMapping("/users/{id}")
public Mono<User> getUser(@PathVariable Long id) {
    // jdbcTemplate.queryForObject — блокирует Netty event loop!
    return Mono.just(jdbcTemplate.queryForObject(
        "SELECT * FROM users WHERE id=?", User.class, id));
}

// ХОРОШО: оборачиваем в boundedElastic-шедулер
@GetMapping("/users/{id}")
public Mono<User> getUser(@PathVariable Long id) {
    return Mono.fromCallable(() ->
        jdbcTemplate.queryForObject("SELECT * FROM users WHERE id=?", User.class, id)
    ).subscribeOn(Schedulers.boundedElastic());
}

В WebFlux используйте R2DBC вместо JDBC, WebClient вместо RestTemplate.

Production-риски Spring Boot: полный разбор

Spring Boot значительно упрощает старт, но в продакшне каждый из его удобных дефолтов может стать источником аварии. Рассмотрим каждую категорию рисков с конкретными примерами и способами их устранения.

2. Connection pooling

Spring Boot по умолчанию использует HikariCP. Типичная проблема — пул слишком мал для нагрузки или слишком велик для базы данных.

spring:
  datasource:
    hikari:
      maximum-pool-size: 20        # НЕ ставьте 200+ — Postgres не выдержит
      minimum-idle: 5
      connection-timeout: 3000     # 3 сек — не ждать вечно
      idle-timeout: 600000
      max-lifetime: 1800000
      leak-detection-threshold: 5000  # логировать утечки соединений

Формула для Postgres: max_connections = (cores * 2) + effective_spindle_count. При нескольких подах суммарный пул не должен превышать max_connections базы.

3. Утечка конфигурации

Actuator по умолчанию (до 2.x) открывал /env, /configprops, /beans без авторизации. Закройте всё лишнее явно:

management:
  endpoints:
    web:
      exposure:
        include: health,info,prometheus
  endpoint:
    env:
      enabled: false
    configprops:
      enabled: false

Никогда не кладите секреты в application.yml в репозитории — используйте Spring Cloud Config, AWS Secrets Manager или Vault.

4. Аутентификация и авторизация

Spring Security по умолчанию генерирует случайный пароль при старте — это нормально для разработки, но не для продакшна. Убедитесь что:

  • Статeless JWT-фильтры не хранят состояние в памяти пода (иначе горизонтальное масштабирование сломает сессии).
  • CSRF защита включена для браузерных клиентов, отключена для API-only эндпоинтов.
  • Методы @PreAuthorize активированы через @EnableMethodSecurity — без этой аннотации они молча игнорируются.
@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true)
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        return http
            .csrf(AbstractHttpConfigurer::disable)   // REST API
            .sessionManagement(sm -> sm.sessionCreationPolicy(STATELESS))
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/actuator/health", "/actuator/info").permitAll()
                .anyRequest().authenticated())
            .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
            .build();
    }
}

5. Observability

Spring Boot 3.x поставляется с Micrometer Tracing (OpenTelemetry / Brave). Без трейсинга отладка медленных запросов в распределённой системе невозможна:

management:
  tracing:
    sampling:
      probability: 0.1    # 10% в продакшне
  metrics:
    export:
      prometheus:
        enabled: true

6. Graceful Shutdown

По умолчанию Spring Boot немедленно убивает контекст при SIGTERM. Включите graceful shutdown и задайте таймаут:

server:
  shutdown: graceful
spring:
  lifecycle:
    timeout-per-shutdown-phase: 30s

Kubernetes должен отправлять SIGTERM и выждать terminationGracePeriodSeconds (ставьте не меньше 35 секунд) перед SIGKILL. Без этого in-flight транзакции обрываются.

7. Deploy-риски

Fat JAR запускается медленно — типичный старт 8–15 секунд. При rolling update Kubernetes может направить трафик на под, который ещё не готов. Настройте readinessProbe:

readinessProbe:
  httpGet:
    path: /actuator/health/readiness
    port: 8080
  initialDelaySeconds: 20
  periodSeconds: 5
  failureThreshold: 6

Подводные камни

  • spring.jpa.open-in-view=true по умолчанию — держит транзакцию открытой на всё время HTTP-запроса, включая сериализацию JSON. Ведёт к утечкам соединений при медленных клиентах. Отключите явно.
  • Actuator /heapdump и /threaddump открыты — позволяют выгрузить всю память процесса. Никогда не открывайте их в публичную сеть.
  • @Async без настройки ThreadPoolTaskExecutor — по умолчанию Spring создаёт неограниченный пул, который при нагрузке создаёт тысячи потоков и убивает JVM.
  • Circular bean dependencies — Spring Boot 2.6+ запрещает их по умолчанию. Если ваш старый код это обходит через spring.main.allow-circular-references=true, это тикающая бомба при рефакторинге.
  • DevTools в продакшне — spring-boot-devtools в classpath меняет поведение кэширования и перезапускает контекст. Убедитесь, что scope runtime не попадает в fat JAR.
  • JVM heap не ограничен в контейнере — без -XX:MaxRAMPercentage=75.0 JVM видит память хоста и выделяет heap больше лимита контейнера, что приводит к OOMKill.
  • Flyway/Liquibase миграции при rolling update — если две версии приложения работают одновременно и миграция несовместима с предыдущей схемой, старые поды упадут с ошибкой SQL.

Частые вопросы на собеседовании

  • Как реализовать health checks в Spring Boot Actuator?
  • Что делает аннотация @SpringBootApplication?
  • Что такое Spring Boot и чем он отличается от Spring Framework?
  • В каких backend-проектах Spring Boot является сильным выбором, а где лучше выбрать более простой или другой стек?

Что портит ответ

  • Говорить только о запуске Spring Boot, но не об эксплуатации
  • Не упоминать observability, обновления, безопасность и rollback
  • Описывать риски абстрактно, без способов их снижать

Что слушает интервьюер

  • Видит production-риски Spring Boot
  • Говорит про monitoring, rollout, rollback и безопасность
  • Умеет ранжировать риски по вероятности и влиянию

Как вы знаете этот вопрос?

Проверить себя по теме Spring Boot →
←Предыдущий вопросКак реализовать JWT-аутентификацию в Spring Boot?Следующий вопрос→Как реализовать кэширование в Spring Boot с помощью `@Cacheable`, `@CacheEvict` и `@CachePut`?

Связанные темы

Spring Bootproduction-readinesstechnical-communicationtechnology-selectiontrade-off-analysis

Вакансии с этим навыком

  • Fullstack Developer (Java Core & React)
  • Senior Java Engineer (Azure, PostgreSQL)
  • Senior Java Developer
  • Fullstack Software Engineer (with Java)
  • Senior Java Developer