❓ Вопрос
Как используя volatile или Atomic-переменные, можно снизить вероятность race conditions? Расскажите с примерами.
✅ Ответ
Использование volatile гарантирует видимость изменений переменной между потоками, предотвращая кэширование значений в рабочих потоках, но не обеспечивает атомарность операций. Atomic-переменные, такие как AtomicInteger, предоставляют атомарные методы для изменения данных без явной синхронизации, что снижает вероятность race conditions при обновлении счётчиков или флагов. Например, метод incrementAndGet() атомарно увеличивает значение, исключая состояния гонки. Такой подход упрощает многопоточное программирование, уменьшая необходимость использования synchronized блоков.
#lexicon #собеседование #java #junior #java_concurrency #backend
Как используя volatile или Atomic-переменные, можно снизить вероятность race conditions? Расскажите с примерами.
✅ Ответ
#lexicon #собеседование #java #junior #java_concurrency #backend
❓ Вопрос
Расскажите, как добиться неизменяемости коллекции на практике. Какие конкретные классы и методы Java для этого используете? Приведите пример кода на уровне описания.
✅ Ответ
Добиться неизменяемости коллекции в Java можно с помощью стандартных методов из класса Collections, таких как Collections.unmodifiableList(), unmodifiableSet() и других. Эти методы создают обертку над исходной коллекцией, предотвращая изменения через полученный объект, однако сама исходная коллекция может изменяться, если есть прямой доступ. Для полной неизменяемости можно использовать небходимые классы из пакета java .util.Immutable*, либо коллекции из Java 9 и выше, создаваемые методами List.of(), Set.of(), которые возвращают действительно неизменяемые объекты. Важно понимать, что неизменяемость зависит от типа коллекции и используемых методов, а также от того, не хранятся ли во вложенных объектах изменяемые данные.
#lexicon #собеседование #java #junior #java_fundamentals #backend
Расскажите, как добиться неизменяемости коллекции на практике. Какие конкретные классы и методы Java для этого используете? Приведите пример кода на уровне описания.
✅ Ответ
#lexicon #собеседование #java #junior #java_fundamentals #backend
❓ Вопрос
Как реализовать паттерн хранения данных 'шардинг' в NoSQL базе? Какие шаги нужно предпринять и какие подводные камни учитывать?
✅ Ответ
Шардинг в NoSQL реализуется путем распределения данных по разным сегментам (шардам) на основе выбранного ключа шардирования, обеспечивая масштабируемость и снижая нагрузку на отдельные узлы. Основные шаги включают выбор подходящего шард-ключа с равномерным распределением данных, настройку механизма маршрутизации запросов к нужному шард-у и обеспечение репликации для отказоустойчивости. Следует учитывать риски связанные с несбалансированным распределением данных (горячие шард-ы), сложностью миграции данных при изменении шард-ключа и особенностями консистентности в распределенной системе.
#lexicon #собеседование #java #senior #backend_storage #backend #core
Как реализовать паттерн хранения данных 'шардинг' в NoSQL базе? Какие шаги нужно предпринять и какие подводные камни учитывать?
✅ Ответ
#lexicon #собеседование #java #senior #backend_storage #backend #core
❓ Вопрос
Какие методы аутентификации и авторизации вы применяете для защиты REST API? Приведите пример реализации токен-бейзед аутентификации.
✅ Ответ
Для защиты REST API применяются методы аутентификации, такие как Basic Auth, OAuth 2.0, API ключи, и JWT (JSON Web Token) для токен-бейзед аутентификации. Токены позволяют серверу не хранить состояние сессии, передавая зашифрованные данные о пользователе в каждом запросе. В примере JWT создается сервером при логине, подписывается секретным ключом и возвращается клиенту, который добавляет токен в заголовок Authorization для последующих запросов. Сервер валидирует токен, проверяет подпись и разрешает доступ к ресурсам.
#lexicon #собеседование #java #middle #backend_http #backend #core
Какие методы аутентификации и авторизации вы применяете для защиты REST API? Приведите пример реализации токен-бейзед аутентификации.
✅ Ответ
#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
Опишите, какие конкретные методы и метрики вы анализируете в VisualVM или YourKit, чтобы определить узкие места в работе сборщика мусора и как на основе этого меняете настройки JVM.
✅ Ответ
#lexicon #собеседование #java #senior #backend
❓ Вопрос
Как вы реализуете коллекции с ограничением на типы элементов с помощью дженериков? Покажите пример создания и использования такой коллекции.
✅ Ответ
Объясняется использование параметрических типов (дженериков) для создания коллекций, которые ограничивают типы элементов, обеспечивая безопасность типов на этапе компиляции. Показывается пример объявления коллекции с указанием типа, например, List<String>, и демонстрируется добавление и извлечение элементов без приведения типов. Подчеркивается, что дженерики позволяют избежать ClassCastException и улучшают читаемость кода.
#lexicon #собеседование #java #middle #backend
📚 4000+ вопросов для подготовки к IT-собеседованиям
Как вы реализуете коллекции с ограничением на типы элементов с помощью дженериков? Покажите пример создания и использования такой коллекции.
✅ Ответ
#lexicon #собеседование #java #middle #backend
📚 4000+ вопросов для подготовки к IT-собеседованиям
❓ Вопрос
Как реализовать фильтр в Spring Security для логирования деталей каждого входящего запроса, и где лучше размещать такой фильтр в цепочке? Расскажите на примере.
✅ Ответ
Для логирования деталей каждого входящего запроса в Spring Security создают кастомный фильтр, реализующий интерфейс Filter или расширяющий OncePerRequestFilter. В методе doFilter или doFilterInternal нужно получить информацию из HttpServletRequest, сделать логирование и вызвать цепочку фильтров через filterChain.doFilter. Такой фильтр рекомендуется регистрировать перед стандартным фильтром UsernamePasswordAuthenticationFilter, чтобы логировать запросы до аутентификации.
#lexicon #собеседование #java #middle #backend
📚 4000+ вопросов для подготовки к IT-собеседованиям
Как реализовать фильтр в Spring Security для логирования деталей каждого входящего запроса, и где лучше размещать такой фильтр в цепочке? Расскажите на примере.
✅ Ответ
#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-собеседованиям
Какие starter'ы вы используете при создании веб-приложения на Spring Boot? Приведите примеры конкретных зависимостей и их ролей.
✅ Ответ
#lexicon #собеседование #java #junior #backend
📚 4000+ вопросов для подготовки к IT-собеседованиям
❓ Вопрос
Как вы находите и устраняете утечки памяти, которые могут приводить к увеличению пауз GC в продакшн-среде? Расскажите о вашем процессе и инструментах.
✅ Ответ
Для выявления утечек памяти применяется профилирование heap с помощью инструментов, таких как VisualVM, JProfiler или Java Flight Recorder, чтобы определить объекты, которые долго живут и не освобождаются. Анализируются дампы памяти и GC-логи для выявления увеличения памяти и пауз. После обнаружения подозрительных областей выполняется код-ревью и оптимизация цикла жизни объектов, например, устранение статических ссылок или кешей без ограничений. Важной частью процесса является тестирование изменений на нагрузочной среде с повторным профилированием для подтверждения решения проблемы.
#lexicon #собеседование #java #senior #backend
📚 4000+ вопросов для подготовки к IT-собеседованиям
Как вы находите и устраняете утечки памяти, которые могут приводить к увеличению пауз GC в продакшн-среде? Расскажите о вашем процессе и инструментах.
✅ Ответ
#lexicon #собеседование #java #senior #backend
📚 4000+ вопросов для подготовки к IT-собеседованиям
❓ Вопрос
В каких случаях стоит использовать eager загрузку, а когда lazy? Приведите примеры из реальных приложений, где каждый подход оправдан.
✅ Ответ
Eager загрузка используется, когда связанные данные необходимы немедленно и их объем небольшой, что снижает количество запросов к базе и повышает производительность. Lazy загрузка применяется, если связанные объекты используются не всегда или редко, позволяя экономить ресурсы за счет отложенного извлечения данных. В реальных приложениях eager загрузка оправдана, например, при загрузке профиля пользователя с базовой информацией, а lazy — при получении подробных данных о заказах, которые не всегда требуются.
#lexicon #собеседование #java #middle #backend
📚 4000+ вопросов для подготовки к IT-собеседованиям
В каких случаях стоит использовать eager загрузку, а когда lazy? Приведите примеры из реальных приложений, где каждый подход оправдан.
✅ Ответ
#lexicon #собеседование #java #middle #backend
📚 4000+ вопросов для подготовки к IT-собеседованиям