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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

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

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

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

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

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

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

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

Что такое Spring AOP (Aspect-Oriented Programming)? Какую проблему он решает?

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

Spring AOP позволяет выносить сквозную логику (логирование, транзакции, безопасность) в отдельные аспекты вместо её дублирования в каждом методе. Работает через прокси-объекты на основе JDK Dynamic Proxy или CGLIB.

Пример: аспект для логирования времени выполнения

@Aspect
@Component
public class ExecutionTimeAspect {

    private static final Logger log = LoggerFactory.getLogger(ExecutionTimeAspect.class);

    // Все public-методы в пакете com.example.service
    @Pointcut("execution(public * com.example.service..*(..))")  
    public void serviceMethods() {}

    @Around("serviceMethods()")
    public Object measureTime(ProceedingJoinPoint pjp) throws Throwable {
        long start = System.currentTimeMillis();
        try {
            return pjp.proceed(); // вызов реального метода
        } finally {
            long elapsed = System.currentTimeMillis() - start;
            log.info("{} executed in {} ms",
                pjp.getSignature().toShortString(), elapsed);
        }
    }
}

Spring AOP: назначение и концепция

AOP (Aspect-Oriented Programming) — парадигма, дополняющая ООП для решения задач сквозной функциональности (cross-cutting concerns): логирования, аудита, транзакционности, кэширования, проверки прав доступа. Без AOP такая логика дублируется во множестве методов, нарушая принцип единственной ответственности.

Spring AOP реализует подмножество полноценного AspectJ через прокси: при запросе бина из контекста возвращается прокси-объект, перехватывающий вызовы методов.

Ключевые термины

  • Aspect — модуль, инкапсулирующий сквозную логику (@Aspect)
  • Advice — конкретный код, выполняемый в точке соединения: @Before, @After, @AfterReturning, @AfterThrowing, @Around
  • Pointcut — выражение, определяющее, к каким методам применяется advice
  • Join Point — конкретное место выполнения (в Spring AOP — всегда вызов метода)
  • Weaving — процесс применения аспектов к целевому объекту (в Spring — во время создания прокси)

Пример: аспект аудита через аннотацию

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Audited {
    String action();
}

@Aspect
@Component
public class AuditAspect {

    @AfterReturning("@annotation(audited)")
    public void audit(JoinPoint jp, Audited audited) {
        System.out.printf("Action '%s' called on %s%n",
            audited.action(), jp.getTarget().getClass().getSimpleName());
    }
}

// Использование:
@Audited(action = "DELETE_USER")
public void deleteUser(Long id) { /* ... */ }

Включение AOP

@Configuration
@EnableAspectJAutoProxy  // создаёт прокси для @Aspect-бинов
public class AopConfig {}

В Spring Boot достаточно зависимости spring-boot-starter-aop — @EnableAspectJAutoProxy подключается автоматически.

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

  • Прокси-ограничение: вызов метода внутри того же бина (self-invocation) не проходит через прокси и аспект не применяется. Обходное решение — инжектировать сам бин через контекст или использовать AspectJ weaving.
  • Spring AOP работает только с Spring-бинами — аспекты не применяются к объектам, созданным через new.
  • @Around advice обязан вызвать pjp.proceed(), иначе реальный метод никогда не выполнится.
  • JDK Dynamic Proxy применяется только к интерфейсам; для классов без интерфейса Spring переключается на CGLIB (который требует ненулевого конструктора).
  • Порядок применения нескольких аспектов к одному методу не детерминирован без явного указания @Order.
  • Pointcut-выражения компилируются при старте контекста — синтаксическая ошибка в выражении вызывает IllegalArgumentException.
  • AspectJ-аннотации доступны через зависимость aspectjweaver, но полноценный compile-time/load-time weaving AspectJ требует отдельной конфигурации Maven/Gradle плагина.

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

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

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

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

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

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

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

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

Источники

  • https://docs.spring.io/spring-framework/reference/core/aop.html
←Предыдущий вопросКакие поведения propagation транзакций существуют в Spring?Следующий вопрос→Что такое `@Qualifier` и когда его использовать?

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

Spring Frameworkbackend-designtechnical-communication