Lexicon | Java вопросы
13 subscribers
15 photos
14 links
Подготовка к собеседованиям для Java разработчиков.

Публикуем вопросы и разборы задач, которые встречаются на интервью backend разработчиков. Подходит для подготовки к позициям от junior до senior.

Новые вопросы выходят регулярно.
Download Telegram
Lexicon | Java вопросы
🧠 Spring Profiles: активация через application.yml
📘 Разбор опроса

Spring Profiles: активация через application.yml

Вопрос: Какой способ активации профиля в application.yml НЕ сработает при запуске через java -jar?

Правильный ответ: spring.config.activate.on-profile: test в отдельном файле

1) Идея вопроса: Проверить понимание нюансов активации Spring профилей через конфигурационные файлы, особенно в контексте standalone-запуска. 2) Почему правильный вариант верный: Директива spring.profiles.include добавляет дополнительные профили к УЖЕ активному профилю. При запуске через java -jar без предустановленного активного профиля, файл application-prod.yml не будет загружен, поэтому include внутри него не выполнится. Это классическая ошибка порядка загрузки. 3) Почему остальные варианты неверные: Вариант 1 (spring.profiles.active в основном application.yml) - стандартный и рабочий способ. Вариант 3 (spring.config.activate.on-profile) - корректная аннотация для условной загрузки конфигурационных блоков в Spring Boot 2.4+. 4) Где ловушка: Ловушка в предположении, что spring.profiles.include может инициировать активацию профиля с нуля. На самом деле это инструмент для композиции профилей, а не для первичной активации. Особенно критично при деплое jar-файлов, где нет доступа к редактированию файлов после сборки. 5) Практический вывод: Для активации профиля при запуске jar используйте: аргумент командной строки (--spring.profiles.active), переменную окружения SPRING_PROFILES_ACTIVE или предустановленное значение в основном application.yml. Директиву include применяйте только для расширения уже активной конфигурации внутри профиле-специфичных файлов.
Вопрос

Как вы реализуете коллекции с ограничением на типы элементов с помощью дженериков? Покажите пример создания и использования такой коллекции.

Ответ

Объясняется использование параметрических типов (дженериков) для создания коллекций, которые ограничивают типы элементов, обеспечивая безопасность типов на этапе компиляции. Показывается пример объявления коллекции с указанием типа, например, List<String>, и демонстрируется добавление и извлечение элементов без приведения типов. Подчеркивается, что дженерики позволяют избежать ClassCastException и улучшают читаемость кода.

#lexicon #собеседование #java #middle #backend

📚 4000+ вопросов для подготовки к IT-собеседованиям
Вопрос

Как реализовать фильтр в Spring Security для логирования деталей каждого входящего запроса, и где лучше размещать такой фильтр в цепочке? Расскажите на примере.

Ответ

Для логирования деталей каждого входящего запроса в Spring Security создают кастомный фильтр, реализующий интерфейс Filter или расширяющий OncePerRequestFilter. В методе doFilter или doFilterInternal нужно получить информацию из HttpServletRequest, сделать логирование и вызвать цепочку фильтров через filterChain.doFilter. Такой фильтр рекомендуется регистрировать перед стандартным фильтром UsernamePasswordAuthenticationFilter, чтобы логировать запросы до аутентификации.

#lexicon #собеседование #java #middle #backend

📚 4000+ вопросов для подготовки к IT-собеседованиям
Lexicon | Java вопросы
🧠 Логирование в Java: выбор реализации SLF4J
📘 Разбор опроса | Логирование в Java

Вопрос
Какая реализация SLF4J используется по умолчанию в Spring Boot 3.x?

Ответ
Logback

💡 Почему это важно
Spring Boot подключает spring-boot-starter-logging,
который по умолчанию использует Logback как реализацию SLF4J.

⚠️ Ловушка
Не путай:
по умолчанию не используются Log4j2 или java.util.logging (JUL)
их нужно настраивать явно.

🛠 Практика
Настрой уровни логирования через application.properties:

logging.level.root=INFO

📚 Больше 4000 вопросов для подготовки к IT-собеседованиям
🔗 https://platfrom.lexiconium.ru
Вопрос

Какие starter'ы вы используете при создании веб-приложения на Spring Boot? Приведите примеры конкретных зависимостей и их ролей.

Ответ

Для создания веб-приложения на Spring Boot обычно используются стартовые зависимости (starters), которые упрощают конфигурацию проекта. Часто применяются spring-boot-starter-web для создания REST API и работы с веб-компонентами, spring-boot-starter-data-jpa для интеграции с базами данных через JPA, а также spring-boot-starter-security для организации безопасности приложения. Каждая зависимость включает набор настроек и библиотек, необходимых для соответствующей функциональности, что ускоряет разработку и обеспечивает стандартный подход.

#lexicon #собеседование #java #junior #backend

📚 4000+ вопросов для подготовки к IT-собеседованиям
Lexicon | Java вопросы
#quiz #lexicon #собеседование #java #senior #backend
🧠 Spring: prototype в singleton через конструктор
Anonymous Quiz
100%
Использовать @Lazy на поле prototype-бина
0%
Внедрить ObjectFactory или Provider вместо самого бина
0%
Сделать singleton-бин prototype-scoped
Lexicon | Java вопросы
🧠 Spring: prototype в singleton через конструктор
📘 Разбор опроса

🧩 Spring: инъекция prototype в singleton

Вопрос: Как избежать ленивой инициализации prototype-бина в singleton-бине через конструктор?

Правильный ответ: Внедрить ObjectFactory или Provider вместо самого бина

💡 Почему: При конструкторной инъекции prototype-бин создаётся один раз при инициализации singleton-бина. ObjectFactory/Provider позволяет отложить создание до каждого вызова getObject(), обеспечивая новую инстанцию при каждом обра...

⚠️ Где ошибаются: Использовать @Lazy на поле — это работает для field/setter инъекции, но не для конструкторной.

🛠 На практике: @Bean public ObjectFactory<PrototypeBean> prototypeFactory() { return () -> new PrototypeBean(); }

📚 4000+ вопросов для подготовки к IT-собеседованиям
Lexicon | Java вопросы
🧠 Обработка исключений в CompletableFuture
📘 Разбор опроса

🧩 Обработка исключений в CompletableFuture

Вопрос: Какой метод возвращает новый CompletableFuture при исключении?

Правильный ответ: exceptionally()

💡 Почему: exceptionally() создаёт новый CompletableFuture, применяя функцию к исключению и возвращая её результат. handle() и whenComplete() не создают новый CompletableFuture с изменённым результатом.

⚠️ Где ошибаются: Спутать handle() и exceptionally(): handle() обрабатывает и успех, и ошибку, но не гарантирует новый CompletableFuture с результатом только от исключения.

🛠 На практике: CompletableFuture.supplyAsync(() -> throw new RuntimeException()).exceptionally(ex -> "fallback")

📚 4000+ вопросов для подготовки к IT-собеседованиям
Вопрос

Как вы находите и устраняете утечки памяти, которые могут приводить к увеличению пауз GC в продакшн-среде? Расскажите о вашем процессе и инструментах.

Ответ

Для выявления утечек памяти применяется профилирование heap с помощью инструментов, таких как VisualVM, JProfiler или Java Flight Recorder, чтобы определить объекты, которые долго живут и не освобождаются. Анализируются дампы памяти и GC-логи для выявления увеличения памяти и пауз. После обнаружения подозрительных областей выполняется код-ревью и оптимизация цикла жизни объектов, например, устранение статических ссылок или кешей без ограничений. Важной частью процесса является тестирование изменений на нагрузочной среде с повторным профилированием для подтверждения решения проблемы.

#lexicon #собеседование #java #senior #backend

📚 4000+ вопросов для подготовки к IT-собеседованиям
Lexicon | Java вопросы
🧠 Документирование REST API: ключевой элемент контракта
📘 Разбор опроса

🧩 Стандарт документирования REST API

Вопрос: Какой стандарт формализует описание REST API для фронтенда?

Правильный ответ: OpenAPI (Swagger)

💡 Почему: OpenAPI — это спецификация для описания REST API, которая определяет структуру эндпоинтов, методов, параметров и ответов в формате YAML или JSON. Она обеспечивает однозначное понимание контракта между бэкендом и фронтенд...

⚠️ Где ошибаются: Путать OpenAPI с GraphQL Schema, который используется для GraphQL API, а не для REST.

🛠 На практике: Используйте OpenAPI для генерации документации и клиентских SDK.

📚 4000+ вопросов для подготовки к IT-собеседованиям
Вопрос

В каких случаях стоит использовать eager загрузку, а когда lazy? Приведите примеры из реальных приложений, где каждый подход оправдан.

Ответ

Eager загрузка используется, когда связанные данные необходимы немедленно и их объем небольшой, что снижает количество запросов к базе и повышает производительность. Lazy загрузка применяется, если связанные объекты используются не всегда или редко, позволяя экономить ресурсы за счет отложенного извлечения данных. В реальных приложениях eager загрузка оправдана, например, при загрузке профиля пользователя с базовой информацией, а lazy — при получении подробных данных о заказах, которые не всегда требуются.

#lexicon #собеседование #java #middle #backend

📚 4000+ вопросов для подготовки к IT-собеседованиям