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

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

Новые вопросы выходят регулярно.
Download Telegram
Вопрос

Какие методы аутентификации и авторизации вы применяете для защиты REST API? Приведите пример реализации токен-бейзед аутентификации.

Ответ

Для защиты REST API применяются методы аутентификации, такие как Basic Auth, OAuth 2.0, API ключи, и JWT (JSON Web Token) для токен-бейзед аутентификации. Токены позволяют серверу не хранить состояние сессии, передавая зашифрованные данные о пользователе в каждом запросе. В примере JWT создается сервером при логине, подписывается секретным ключом и возвращается клиенту, который добавляет токен в заголовок Authorization для последующих запросов. Сервер валидирует токен, проверяет подпись и разрешает доступ к ресурсам.

#lexicon #собеседование #java #middle #backend_http #backend #core
Вопрос

Опишите, какие конкретные методы и метрики вы анализируете в VisualVM или YourKit, чтобы определить узкие места в работе сборщика мусора и как на основе этого меняете настройки JVM.

Ответ

Для анализа сборщика мусора в VisualVM или YourKit используются метрики пауз GC (Pause Time), частота срабатываний, объём освобождаемой памяти и распределение поколений (Young/Old). Анализируются детали таких пауз, чтобы выявить долгие или частые сборки, вызывающие задержки. На основе этих данных корректируются параметры JVM, например, размеры heap, настройки GC алгоритма (G1, CMS и т.д.) или увеличение параллелизма, чтобы уменьшить задержки и повысить общую производительность приложения.

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

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

Ответ

Объясняется использование параметрических типов (дженериков) для создания коллекций, которые ограничивают типы элементов, обеспечивая безопасность типов на этапе компиляции. Показывается пример объявления коллекции с указанием типа, например, 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-собеседованиям
Вопрос

Какие 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-собеседованиям
Вопрос

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

Ответ

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

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

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

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

Ответ

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

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

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