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

+1 512новых вакансий за сутки·54 396вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 752
  • Облачные технологии6 631
  • QA вакансии2 183
  • Android1 322
  • Инженер данных860
  • Продакт-менеджер316

Разработка

  • iOS1 238
  • Backend вакансии1 196
  • AI вакансии549
  • Fullstack вакансии500
  • Frontend вакансии426
  • Mobile вакансии28

По стеку

  • Go5 209
  • Java3 131
  • Kotlin1 113
  • Node.js1 008
  • Rust833
  • .NET656
  • PHP322
  • C++270
  • C#207

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

  • Kubernetes3 882
  • Linux-инфраструктура2 817
  • DevOps вакансии2 655
  • Terraform / IaC2 191
  • Мониторинг и Observability1 071
  • CI/CD919
  • SRE308
  • Кибербезопасность38

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

  • Аналитик данных522
  • Data Scientist435
  • Бизнес-аналитик397
  • Системный аналитик67

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

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

По регионам

  • Вакансии в США22 951
  • Вакансии в Европе10 259
  • Работа в России2 963
  • Вакансии в Канаде2 034

По формату

  • Удалённые вакансии39 691
  • Релокация в США22 951
  • Гибридная работа3 633
  • Офисная работа2 761

По уровню

  • Senior вакансии19 599
  • Middle вакансии11 130
  • Junior вакансии3 562

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

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis42 вакансии
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Что такое build-time augmentation и как оно связано с быстрым startup?

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

Build-time augmentation — этап сборки Quarkus, когда расширения анализируют аннотации, генерируют байткод и выполняют конфигурацию заранее. В результате при старте приложения JVM не сканирует classpath и не строит DI-контейнер — отсюда быстрый запуск.

Build-time Augmentation: механизм

Quarkus-расширение состоит из двух частей:

  • Build-time processor — запускается при mvn package, анализирует аннотации, генерирует байткод
  • Runtime recorder — сгенерированный код, который выполняется при старте
// Пример build-time processor из расширения Quarkus
// (упрощённо — так работают внутренние механизмы)
@BuildStep
public BeanDefiningAnnotationBuildItem registerCdiAnnotations() {
    // Сообщает CDI-контейнеру о кастомной аннотации на этапе сборки
    return new BeanDefiningAnnotationBuildItem(
        DotName.createSimple("com.example.MyComponent"),
        BuiltinScope.APPLICATION_SCOPED.getInfo()
    );
}

@BuildStep
@Record(RUNTIME_INIT)
public void configureDataSource(
        DataSourceBuildItem dataSource,
        DataSourceRecorder recorder) {
    // recorder.createPool() — это шаблон, который будет
    // выполнен при старте, но уже с предвычисленными параметрами
    recorder.createPool(dataSource.getName(), dataSource.getConfig());
}

Build-time Augmentation в Quarkus

Build-time augmentation — центральная архитектурная идея Quarkus. Вместо того чтобы выполнять инициализацию фреймворка во время запуска приложения (как это делает Spring Boot), Quarkus делает максимум работы на этапе сборки Maven/Gradle.

Что происходит при обычном фреймворке (Spring Boot)

  1. JVM загружает все классы из classpath (~5000+)
  2. Spring сканирует аннотации (@Component, @Autowired)
  3. Строит BeanFactory, создаёт ApplicationContext
  4. Разрешает зависимости, создаёт прокси через CGLIB
  5. Инициализирует DataSource, Kafka consumers и т.д.

Всё это происходит при каждом запуске → 2–5 секунд старта.

Что делается на build-time

  • CDI DI-граф полностью строится и верифицируется
  • Hibernate ORM маппинги анализируются, SQL генерируется заранее
  • JAX-RS роуты компилируются в оптимальный dispatch-код
  • Аннотации Fault Tolerance, Health, Metrics регистрируются
  • Reflection-конфиги для GraalVM генерируются автоматически

Визуализация: что происходит при запуске

./mvnw package  # Build-time augmentation: 15-30 сек
                # Результат: target/quarkus-app/ с предгенерированным кодом

java -jar target/quarkus-app/quarkus-run.jar
# Quarkus стартует только runtime-часть: ~100-800 мс
# Никакого classpath-сканирования, никакого рефлексивного DI

Как это связано с Native

# При native-сборке augmentation + GraalVM native-image:
./mvnw package -Pnative
# 1. Build-time augmentation (30 сек)
# 2. GraalVM static analysis + compilation (5-10 мин)
# Результат: бинарник, стартующий за 15 мс

./target/app-runner
# 2026-01-15 10:00:00 INFO  [io.quarkus] app started in 0.015s

Ограничения build-time подхода

// НЕЛЬЗЯ на build-time: читать env vars или внешние конфиги
@BuildStep
public void badStep() {
    String env = System.getenv("MY_VAR"); // ошибка!
    // env не существует во время сборки
}

// ПРАВИЛЬНО: читать конфиг через ConfigProperty в runtime recorder
@Record(RUNTIME_INIT)
public void goodStep(MyConfig config, MyRecorder recorder) {
    recorder.initialize(config); // config читается при старте
}

Dev-режим и augmentation

В quarkus:dev augmentation выполняется инкрементально при каждом изменении файла — отсюда live coding без полного перезапуска.

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

  • @ConfigProperty с defaultValue в native — значение встраивается в бинарник на build-time; изменить без пересборки невозможно. Для runtime-конфигурации используйте env vars.
  • Сторонние библиотеки без Quarkus-расширения — их инициализация остаётся в runtime; они не получают build-time оптимизаций.
  • Сложность написания расширений — BuildStep API нетривиален; стандартные расширения покрывают 95% случаев, но кастомное расширение требует глубокого понимания API.
  • Ошибки DI видны только при сборке — это хорошо, но к этому нужно привыкнуть; в Spring ошибки DI иногда обнаруживаются только в runtime через lazy init.
  • Live reload не всегда срабатывает — изменения в build-step коде расширения требуют полного перезапуска dev-режима.
  • Условные бины через @IfBuildProfile — условие проверяется на build-time; нельзя переключать профиль в runtime без пересборки.

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

  • Как Quarkus достигает быстрого времени запуска и низкого потребления памяти?
  • Что такое Quarkus и какие проблемы он решает по сравнению с традиционными Java-фреймворками?
  • Как Quarkus поддерживает разработку RESTful API с помощью RESTEasy Reactive?
  • В чём разница между JVM-режимом и native-режимом Quarkus?

Типичные ошибки

  • Отвечать определением без production-сценария.
  • Не называть runtime boundary, security boundary или failure mode.
  • Игнорировать версию API, observability и тестовую проверку.

Что проверяет интервьюер

  • Объясняет механизм своими словами и без выдуманных API.
  • Называет реальные риски, диагностику и критерий корректности.
  • Связывает ответ с текущей документацией и миграционными ограничениями.

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

Проверить себя по теме Quarkus →

Источники

  • https://quarkus.io/guides/building-native-image

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

Quarkusquarkus-productionrisk-analysistechnical-depth