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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python11 001
  • Облачные технологии7 882
  • QA вакансии2 530
  • Android1 457
  • Инженер данных929
  • Продакт-менеджер312

Разработка

  • iOS1 361
  • Backend вакансии1 335
  • AI вакансии645
  • Fullstack вакансии521
  • Frontend вакансии460
  • Mobile вакансии28

По стеку

  • Go6 500
  • Java3 643
  • Node.js1 203
  • Kotlin1 161
  • Rust1 155
  • .NET787
  • PHP334
  • C++285
  • C#211

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

  • Kubernetes4 701
  • Linux-инфраструктура3 588
  • DevOps вакансии3 059
  • Terraform / IaC2 617
  • Мониторинг и Observability1 284
  • CI/CD929
  • SRE345
  • Кибербезопасность28

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

  • Аналитик данных556
  • Data Scientist443
  • Бизнес-аналитик412
  • Системный аналитик71

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

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

По регионам

  • Вакансии в США28 307
  • Вакансии в Европе10 602
  • Работа в России3 671
  • Вакансии в Канаде2 400

По формату

  • Удалённые вакансии44 927
  • Релокация в США28 307
  • Гибридная работа6 438
  • Офисная работа5 670

По уровню

  • Senior вакансии25 431
  • Middle вакансии11 844
  • Junior вакансии4 210

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

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

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

Как Quarkus реализует CDI (Jakarta Contexts and Dependency Injection)?

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

Quarkus реализует CDI через ArC — облегчённый контейнер, который обрабатывает аннотации во время сборки (build-time), генерирует байткод и не использует рефлексию в рантайме.

Пример: инъекция зависимостей и продюсер

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;

// Кастомный квалификатор
@jakarta.inject.Qualifier
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD,
    java.lang.annotation.ElementType.METHOD,
    java.lang.annotation.ElementType.PARAMETER})
public @interface Premium {}

// Интерфейс сервиса
public interface GreetingService {
    String greet(String name);
}

// Обычная реализация
@ApplicationScoped
public class SimpleGreetingService implements GreetingService {
    @Override
    public String greet(String name) {
        return "Hello, " + name;
    }
}

// Премиум реализация
@ApplicationScoped
@Premium
public class PremiumGreetingService implements GreetingService {
    @Override
    public String greet(String name) {
        return "Welcome, VIP " + name + "!";
    }
}

// Ресурс, использующий инъекцию
@jakarta.ws.rs.Path("/greet")
@ApplicationScoped
public class GreetingResource {

    @Inject
    GreetingService defaultService;  // инжектируется SimpleGreetingService

    @Inject
    @Premium
    GreetingService premiumService;  // инжектируется PremiumGreetingService

    @jakarta.ws.rs.GET
    @jakarta.ws.rs.Path("/{name}")
    public String greet(@jakarta.ws.rs.PathParam("name") String name) {
        return defaultService.greet(name);
    }
}

CDI в Quarkus: ArC и build-time обработка

Quarkus не использует полноценный CDI-контейнер (Weld или OpenWebBeans) в рантайме. Вместо этого применяется ArC — собственная реализация CDI, которая обрабатывает все аннотации во время сборки (build time), генерирует Java-классы-прокси и инжекторы, и стартует с почти нулевыми накладными расходами.

Ключевые аннотации CDI в Quarkus

  • @ApplicationScoped — один экземпляр на всё время жизни приложения (прокси-объект)
  • @RequestScoped — новый экземпляр на каждый HTTP-запрос (или другой контекст запроса)
  • @Singleton — один экземпляр без прокси (быстрее, но нет перехвата методов)
  • @Dependent — новый экземпляр при каждой инъекции (скоуп по умолчанию)
  • @Inject — точка инъекции зависимости
  • @Produces — фабричный метод, возвращающий бин
  • @Qualifier — кастомный квалификатор для разрешения неоднозначности

Продюсеры и альтернативы

@Singleton
public class ConfigProducer {

    @org.eclipse.microprofile.config.inject.ConfigProperty(name = "app.api.key")
    String apiKey;

    @Produces
    @ApplicationScoped
    public ApiClient produceApiClient() {
        return new ApiClient(apiKey);
    }
}

Перехватчики (Interceptors)

import jakarta.interceptor.AroundInvoke;
import jakarta.interceptor.Interceptor;
import jakarta.interceptor.InvocationContext;
import jakarta.interceptor.InterceptorBinding;

@InterceptorBinding
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE,
    java.lang.annotation.ElementType.METHOD})
public @interface Logged {}

@Logged
@Interceptor
public class LoggingInterceptor {

    @AroundInvoke
    public Object logMethod(InvocationContext ctx) throws Exception {
        System.out.println("Calling: " + ctx.getMethod().getName());
        Object result = ctx.proceed();
        System.out.println("Done: " + ctx.getMethod().getName());
        return result;
    }
}

@ApplicationScoped
@Logged
public class OrderService {
    public void processOrder(Long id) { /* ... */ }
}

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

  • ArC поддерживает не весь CDI 4.0 — ряд динамических возможностей (например, BeanManager.createInstance() с рантайм-добавлением контекстов) недоступен.
  • @Singleton не создаёт прокси, поэтому перехватчики и события CDI не работают с ним — используйте @ApplicationScoped, если нужны interceptors.
  • Бины, не используемые напрямую, могут быть удалены ArC при сборке (dead bean elimination) — добавьте @Unremovable или зарегистрируйте через application.properties: quarkus.arc.remove-unused-beans=false.
  • Конструктор без аргументов обязателен для proxy-бинов (@ApplicationScoped, @RequestScoped); без него — jakarta.enterprise.inject.CreationException при старте.
  • Циклические зависимости через поля решаются прокси, но циклические зависимости через конструкторы — нет; Quarkus бросит ошибку на этапе сборки.
  • Обнаружение бинов работает только в архивах с beans.xml или помеченных аннотацией @RegisterForReflection при native build.
  • Транзакции через @Transactional работают только на прокси-бинах — прямые вызовы методов внутри одного класса не перехватываются.
  • В native-сборке ArC не включает рефлексивный доступ автоматически — классы, создаваемые через рефлексию, нужно явно регистрировать.

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

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

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

  • Путать термин «quarkus cdi» с соседним механизмом Quarkus.
  • Не называть границу lifecycle, transaction, thread или request для «quarkus cdi».
  • Игнорировать production-эффекты «quarkus cdi»: latency, SQL shape, memory, security или observability.

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

  • Попросить объяснить механизм «quarkus cdi» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «quarkus cdi».
  • Уточнить, какие настройки или API меняют «quarkus cdi» в реальном сервисе.

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

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

Источники

  • https://quarkus.io/guides/cdi-reference
←Предыдущий вопросВ чём разница между RESTEasy Classic и RESTEasy Reactive в Quarkus?

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

Quarkusbackend-designtechnical-communication