Библиотека собеса по Java | вопросы с собеседований
6.44K subscribers
406 photos
9 videos
548 links
Вопросы с собеседований по Java и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/08c603b6

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Представь ситуацию?

Есть Spring Boot приложение с несколькими @Configuration классами, и в них определены бины с одинаковыми именами. Что произойдет при старте приложения и как разрешить конфликт?

🔹 Ответ:

Spring выбросит BeanDefinitionOverrideException при старте приложения.

Если нужно разрешить конфликт, есть несколько путей:

— Использовать @Primary
— Использовать @Qualifier
— Использовать профили (@Profile)

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71🔥1🤔1
Почему метод с @Transactional, вызванный из другого метода того же класса, не открывает транзакцию?

Spring использует proxy-объекты для обработки @Transactional. Когда вы вызываете метод извне класса, вызов идет через proxy, который оборачивает метод в транзакцию. Но при вызове метода внутри того же класса (this.method()), вы обращаетесь напрямую к реальному объекту, минуя proxy.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1👏1
Что такое Spring Profiles и зачем они нужны?

Spring Profiles — это механизм в Spring, который позволяет разделять конфигурации приложения по окружениям. Например: dev, test, prod.

С их помощью можно активировать нужные бины и настройки в зависимости от среды, не меняя код.
Типичный пример — разные параметры подключения к БД или API-ключи.

Профиль можно указать:

в application.properties (spring.profiles.active=dev);
через аргументы JVM (-Dspring.profiles.active=prod);
или переменные окружения.

Это обеспечивает чистое разделение конфигураций и снижает риск ошибок при деплое.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥2
В чём разница между @Transactional на уровне класса и на уровне метода?

@Transactional на классе задаёт поведение по умолчанию для всех его публичных методов.

Аннотация на методе переопределяет настройки класса и всегда имеет более высокий приоритет.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1
Как и где Spring ищет бины?

Spring ищет бины с помощью сканирования классов в указанных пакетах, используя аннотации (@Component, @Service, @Repository, @Controller и кастомные с @Component внутри).

Сканирование начинается с пакета, переданного в @ComponentScan или (по умолчанию) из того, где находится @SpringBootApplication (которая включает @ComponentScan).

Если бин не помечен аннотацией, его можно зарегистрировать вручную через @Bean в @Configuration-классе, BeanDefinitionRegistry или XML-конфиг.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥4👏1
В чём разница между @Component, @Service и @Repository?

Технически — никакой. Все три создают Spring bean и работают одинаково.

Разница семантическая:
@Componentобщий стереотип для любого компонента.
@Serviceдля бизнес-логики (service layer).
@Repositoryдля работы с данными (DAO layer).

@Repository имеет дополнительную функцию: перехватывает специфичные для persistence исключения и переводит их в DataAccessException.

Использование правильной аннотации улучшает читаемость и показывает роль класса в архитектуре.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥91👏1
Что делает @Conditional в Spring?

@Conditional позволяет регистрировать бин только при выполнении определённого условия.

@Bean
@Conditional(WindowsCondition.class)
public Service windowsService() {
return new WindowsService();
}

class WindowsCondition implements Condition {
public boolean matches(ConditionContext context,
AnnotatedTypeMetadata metadata) {
return System.getProperty("os.name")
.contains("Windows");
}
}


Spring Boot предоставляет готовые: @ConditionalOnProperty, @ConditionalOnClass, @ConditionalOnMissingBean.

Мощный инструмент для гибкой конфигурации под разные окружения.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥31👏1
Что такое @Qualifier и когда его использовать?

@Qualifier используется для разрешения конфликтов при внедрении зависимостей, когда существует несколько бинов одного типа.

Без @Qualifier Spring не знает, какой бин внедрить, и выбросит NoUniqueBeanDefinitionException.

@Bean
@Qualifier("primary")
public DataSource primaryDB() { ... }

@Bean
@Qualifier("secondary")
public DataSource secondaryDB() { ... }

@Autowired
@Qualifier("primary")
private DataSource dataSource;


Альтернатива — использовать @Primary для бина по умолчанию.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4👏2
Что делает параметр readOnly = true у @Transactional?

readOnly = true — это подсказка для оптимизации, а не строгое ограничение.

Что происходит:

Hibernate может пропустить flush (не синхронизировать изменения с БД)
БД может оптимизировать запрос, не создавая блокировки
некоторые драйверы могут использовать read-only соединения

Важно: это не запрещает изменения программно. Можно вызвать save(), но изменения не гарантированно применятся. Это именно hint для оптимизации.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥21👏1
Что такое пропагация в транзакции?

Propagation определяет, как транзакция ведёт себя при вызове из другой транзакции.

Основные типы

— REQUIRED (default): использует текущую или создаёт новую
— REQUIRES_NEW: всегда создаёт новую, приостанавливая текущую
— MANDATORY: требует существующую, иначе исключение
— NEVER: требует отсутствие транзакции
— SUPPORTS: использует если есть, иначе работает без транзакции

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1👏1
Зачем нужна аннотация @RestController?

@RestController — это специализированная версия @Controller для RESTful сервисов. Объединяет @Controller и @ResponseBody.

Без @RestController пришлось бы добавлять @ResponseBody к каждому методу. Результат методов автоматически конвертируется в JSON/XML через HttpMessageConverter.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1👏1
Опишите поведение аннотации @Autowired

@Autowired — это аннотация Spring Framework для автоматического внедрения зависимостей. Она может применяться к конструкторам, сеттерам, полям и методам.

Spring ищет подходящий бин в контексте по типу. Если находит один бин нужного типа — внедряет его. Если бинов несколько — выбрасывает исключение, если не указан квалификатор через @Qualifier. Если бин не найден — тоже выбрасывает исключение, если только не установлен параметр required = false.

Начиная с Spring 4.3, если у класса один конструктор, @Autowired можно опуститьSpring автоматически использует его для внедрения. Это считается хорошей практикой, так как делает код менее зависимым от фреймворка.

Порядок разрешения зависимостей: сначала по типу, потом по имени бина, если имя поля совпадает с именем бина. Для явного указания используют @Qualifier.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1👏1
Для чего аннотация @Cacheable в Spring?

@Cacheable кеширует результат метода. При повторном вызове с теми же параметрами метод не выполняется, возвращается закешированное значение.

Требует @EnableCaching. По умолчанию использует ConcurrentHashMap, но можно подключить Redis, Ehcache, Caffeine.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2👏1
Что такое Spring Boot Actuator?

Actuator предоставляет production-ready функции для мониторинга и управления приложением.

Эндпоинты:

/actuator/health — статус приложения
/actuator/metrics — метрики (память, потоки, HTTP запросы)
/actuator/env — переменные окружения
/actuator/loggers — управление уровнями логирования

Можно создавать кастомные эндпоинты. Важно: закрывайте чувствительные эндпоинты в production через Spring Security.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👏21🔥1
Что такое Spring Data JPA?

Spring Data JPA — это абстракция над JPA, упрощающая работу с базами данных.

Вместо написания DAO вручную, создаёте интерфейс, и Spring генерирует реализацию.

Поддерживает:

автогенерацию методов по naming convention
@Query для кастомных запросов
Paging и Sorting из коробки
Specification для динамических запросов

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👏2❤‍🔥11🔥1
Чем @Bean отличается от @Component в Spring?

▪️ @Component вешается над классомSpring сам создаёт его экземпляр через сканирование пакетов (@ComponentScan).

▪️ @Bean ставится над методом в @Configurationвы сами создаёте объект внутри метода и возвращаете его.

@Bean полезен, когда:

класс не ваш (нет доступа, чтобы добавить аннотацию)
нужен кастомный способ создания бина (например, с параметрами конструктора или фабричным методом)

Оба способа регистрируют бин в ApplicationContext, разница только в том, кто и как создаёт объект.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1👏1
Что такое Spring Bean Scope?

Spring Bean Scope определяет жизненный цикл и видимость бина в контейнере.

Основные виды:

▪️ singleton (по умолчанию) — один экземпляр на весь контейнер.
▪️ prototype — новый экземпляр при каждом запросе.
▪️ request — бин живёт в рамках HTTP-запроса.
▪️ session — бин живёт в рамках HTTP-сессии.
▪️ application — бин живёт в рамках веб-приложения.
▪️ websocket — бин на время WebSocket-сессии.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111🔥1