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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

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

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

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

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

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

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

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

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

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Чем Bean scopes отличаются в web-приложениях и какие риски у request/session scope?

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

Web-приложения добавляют к singleton/prototype три scope: request (новый на каждый HTTP-запрос), session (один на сессию) и application (один на ServletContext). При внедрении в singleton требуется scoped proxy; session-бины должны быть Serializable, иначе возможны утечки памяти и ошибки сериализации.

Web-специфичные scopes

// request scope — новый экземпляр на каждый HTTP-запрос
@Component
@RequestScope // == @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestContext {
    private String traceId = UUID.randomUUID().toString();
    private String userId;
    // Живёт ровно один HTTP-запрос
}

// session scope — один экземпляр на HTTP-сессию
@Component
@SessionScope
public class ShoppingCart {
    private List<CartItem> items = new ArrayList<>();

    public void addItem(CartItem item) {
        items.add(item);
    }
}

// application scope — один экземпляр на ServletContext (аналог singleton, но на уровне сервлет-контейнера)
@Component
@ApplicationScope
public class GlobalSettings {
    private Map<String, String> settings = new ConcurrentHashMap<>();
}

Bean scopes в Spring и их особенности в web-приложениях

Spring поддерживает несколько областей видимости бинов. В стандартных приложениях доступны singleton и prototype. В web-приложениях добавляются request, session, application и websocket.

Стандартные scopes

  • singleton (по умолчанию): один экземпляр бина на весь ApplicationContext. Создаётся при старте, живёт до остановки приложения. Потокобезопасность — ответственность разработчика.
  • prototype: новый экземпляр при каждом запросе к контейнеру (getBean или внедрение). Spring не управляет уничтожением prototype-бина — @PreDestroy не вызывается.

Как scoped-бины внедряются в singleton

Если singleton-бин напрямую внедряет request-scope бин, Spring создаст его один раз при старте — и в каждом запросе будет один и тот же экземпляр. Это неправильно. Решение — scoped proxy: контейнер внедряет прокси, который при каждом обращении делегирует к актуальному экземпляру из нужного scope.

@Service
public class OrderService {
    // Внедряем прокси, а не реальный request-бин
    private final RequestContext requestContext; // Это прокси-объект

    public OrderService(RequestContext requestContext) {
        this.requestContext = requestContext;
    }

    public void createOrder(OrderDto dto) {
        // При каждом вызове прокси достаёт актуальный RequestContext текущего запроса
        String traceId = requestContext.getTraceId();
        log.info("[{}] Creating order", traceId);
    }
}

Scoped proxy включается через proxyMode = ScopedProxyMode.TARGET_CLASS (для классов) или ScopedProxyMode.INTERFACES (для интерфейсов). Аннотации @RequestScope, @SessionScope, @ApplicationScope включают его автоматически.

Пример конфигурации request-scope бина вручную

@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST,
       proxyMode = ScopedProxyMode.TARGET_CLASS)
public AuditContext auditContext(HttpServletRequest request) {
    AuditContext ctx = new AuditContext();
    ctx.setIp(request.getRemoteAddr());
    ctx.setUserAgent(request.getHeader("User-Agent"));
    return ctx;
}

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

  • singleton: один на контекст, thread-safety нужна явно, живёт всё время работы приложения.
  • prototype: новый при каждом внедрении, @PreDestroy не вызывается, Spring не отслеживает жизненный цикл.
  • request: новый на каждый HTTP-запрос, уничтожается после завершения запроса, нужен scoped proxy в singleton.
  • session: один на HTTP-сессию, хранится в HttpSession, уничтожается при инвалидации сессии.
  • application: один на ServletContext, ближе к singleton, но привязан к web-контейнеру.

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

  • Session scope и сериализация: session-бины сохраняются в HttpSession, которая может сериализоваться (при sticky sessions, failover). Все поля должны быть Serializable, иначе возможна NotSerializableException.
  • Memory leak в session scope: если session-бин держит тяжёлые объекты (коллекции, кэши), это увеличивает память пропорционально числу активных сессий. Сессии по умолчанию живут 30 минут.
  • Thread safety в request scope: один HTTP-запрос обрабатывается одним потоком, поэтому request-бины потокобезопасны «из коробки». Но при использовании @Async или CompletableFuture метод выполняется в другом потоке и RequestAttributes могут быть недоступны.
  • Отсутствие scoped proxy: если не добавить proxyMode, внедрение request-бина в singleton вызовет BeanCreationException — «Scope 'request' is not active for the current thread».
  • Prototype в singleton без прокси: singleton, внедривший prototype-бин напрямую, получит один и тот же экземпляр prototype навсегда. Для обхода — ObjectProvider<MyPrototype> или метод с @Lookup.
  • @PreDestroy у prototype: Spring создаёт prototype, но не отслеживает его — @PreDestroy никогда не будет вызван. Нужно управлять ресурсами вручную.
  • application scope vs singleton: @ApplicationScope привязан к ServletContext и существует отдельно от Spring ApplicationContext. При перезагрузке веб-приложения без перезапуска JVM singleton-бины пересоздаются, а application-бин может сохраниться.

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

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

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

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

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

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

Источники

  • https://docs.spring.io/spring-framework/reference/data-access/jdbc/core.html
  • https://docs.spring.io/spring-data/jpa/reference/repositories/core-concepts.html

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

Spring Frameworkrisk-analysisspring-framework-productiontechnical-depth

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

  • Что такое Spring Framework и какие проблемы он решает?
  • Что такое Spring Bean? Как IoC-контейнер Spring управляет бинами?
  • Что такое Spring MVC? Объясните жизненный цикл запроса в DispatcherServlet.
  • Что такое Inversion of Control (IoC) и как Spring его реализует?