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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python16 036
  • Облачные технологии12 746
  • QA вакансии3 431
  • Backend вакансии1 983
  • Инженер данных1 590
  • Продакт-менеджер1 097

Разработка

  • Android1 792
  • iOS1 660
  • AI вакансии924
  • Fullstack вакансии835
  • Frontend вакансии702
  • Mobile вакансии36

По стеку

  • Go8 538
  • Java5 808
  • Node.js1 826
  • Kotlin1 514
  • .NET1 433
  • Rust1 416
  • PHP591
  • C#500
  • C++449

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

  • Kubernetes7 088
  • DevOps вакансии5 341
  • Linux-инфраструктура5 148
  • Terraform / IaC3 908
  • CI/CD2 192
  • Мониторинг и Observability1 724
  • SRE539
  • Кибербезопасность367

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

  • Data Scientist977
  • Бизнес-аналитик828
  • Аналитик данных809
  • Системный аналитик111

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

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

По регионам

  • Вакансии в США44 024
  • Вакансии в Европе19 966
  • Вакансии в Канаде4 349
  • Работа в России3 875

По формату

  • Удалённые вакансии72 075
  • Релокация в США44 024
  • Гибридная работа10 789
  • Офисная работа6 889

По уровню

  • Senior вакансии39 966
  • Middle вакансии19 556
  • Junior вакансии6 496

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

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

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

В чём разница между @ApplicationScoped, @RequestScoped и @Singleton в Quarkus?

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

@ApplicationScoped создаёт один прокси-объект на всё приложение, @RequestScoped — новый экземпляр на каждый HTTP-запрос, @Singleton — один объект без прокси (быстрее, но без перехватчиков и CDI-событий).

Пример кода

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Singleton;
import jakarta.inject.Inject;
import jakarta.interceptor.Interceptors;

// ApplicationScoped: кешируем данные, используем @Transactional
@ApplicationScoped
public class UserCacheService {
    private final java.util.Map<Long, String> cache = new java.util.concurrent.ConcurrentHashMap<>();

    public String get(Long id) { return cache.get(id); }
    public void put(Long id, String name) { cache.put(id, name); }
}

// RequestScoped: держим данные текущего запроса
@RequestScoped
public class RequestContext {
    private String currentUserId;
    private long startTime = System.currentTimeMillis();

    public String getCurrentUserId() { return currentUserId; }
    public void setCurrentUserId(String id) { this.currentUserId = id; }
    public long getElapsed() { return System.currentTimeMillis() - startTime; }
}

// Singleton: простая утилита без перехватчиков
@Singleton
public class MathUtils {
    public double calculateDiscount(double price, int percent) {
        return price * (1 - percent / 100.0);
    }
}

// Использование всех трёх в ресурсе
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;

@Path("/orders")
@ApplicationScoped
public class OrderResource {

    @Inject UserCacheService cache;      // один на всё приложение
    @Inject RequestContext reqCtx;        // один на этот запрос
    @Inject MathUtils math;              // один, без прокси

    @GET
    @Path("/price")
    @Produces(MediaType.APPLICATION_JSON)
    public double getPrice() {
        reqCtx.setCurrentUserId("user-42");
        return math.calculateDiscount(100.0, 15);
    }
}

Скоупы CDI в Quarkus: @ApplicationScoped, @RequestScoped, @Singleton

@ApplicationScoped

Создаёт один экземпляр бина на всё время жизни приложения, обёрнутый в прокси-объект. Прокси позволяет:

  • Использовать перехватчики (@Transactional, @Logged)
  • Ленивую инициализацию — экземпляр создаётся при первом обращении
  • CDI-события (@Observes)

Требует конструктор без аргументов или конструктор с @Inject для CDI-управляемых зависимостей.

@RequestScoped

Создаёт новый экземпляр для каждого HTTP-запроса (или другого активного контекста запроса — Kafka-сообщения, gRPC-вызова). После завершения запроса экземпляр уничтожается и вызывается метод @PreDestroy. Тоже прокси-объект.

@Singleton

Создаёт один экземпляр без прокси. Преимущества: чуть быстрее (нет накладных расходов прокси), проще в дебаге. Ограничения: перехватчики не работают, ленивая инициализация недоступна (создаётся при старте приложения).

Сравнительная таблица

  • @ApplicationScoped: 1 экземпляр / прокси / поддерживает interceptors / ленивый
  • @Singleton: 1 экземпляр / без прокси / не поддерживает interceptors / eager
  • @RequestScoped: 1 на запрос / прокси / поддерживает interceptors / ленивый
  • @Dependent: 1 на инъекцию / без прокси / не поддерживает interceptors / ленивый

Когда что выбирать

  • @ApplicationScoped — большинство сервисов: репозитории, сервисы с транзакциями, кеши.
  • @RequestScoped — данные, специфичные для запроса: текущий пользователь, трассировка, контекст безопасности.
  • @Singleton — утилиты без состояния и без нужды в перехватчиках; конфигурационные объекты.

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

  • @Singleton не создаёт прокси — если вы добавите @Transactional на метод @Singleton-бина, транзакция НЕ будет применена; Quarkus выдаст предупреждение при сборке.
  • Инъекция @RequestScoped-бина в @ApplicationScoped-бин через поле работает корректно только через прокси — не через конструктор без аргументов; в противном случае вы получите экземпляр вне контекста запроса и ContextNotActiveException.
  • @ApplicationScoped ленивый — первый запрос чуть медленнее. Для принудительной eager-инициализации добавьте @Startup (Quarkus 3.x).
  • @Singleton создаётся при старте приложения — тяжёлая инициализация (соединение с БД, загрузка файлов) в конструкторе замедлит старт.
  • В native-режиме прокси-классы генерируются ArC на этапе сборки — динамическое создание скоупных бинов в рантайме невозможно.
  • Отсутствие конструктора без аргументов у прокси-бина (@ApplicationScoped, @RequestScoped) — ошибка при деплое; добавьте защищённый no-arg конструктор если используете конструкторную инъекцию.
  • @RequestScoped работает только в рамках активного CDI-контекста — в фоновых задачах (@Scheduled) контекст запроса не активен, бин не доступен без явной активации контекста.

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

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

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

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

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

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

Источники

  • https://quarkus.io/guides/cdi-reference
←Предыдущий вопросКак реализовать безопасность в Quarkus с помощью `@RolesAllowed` и JWT?Следующий вопрос→В чём разница между `Uni` и `Multi` в Quarkus Mutiny?

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

Quarkusbackend-designtechnical-communication

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

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