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

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

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

Какие сложности могут возникнуть при сохранении иммутабельности при сериализации объектов в Java? Как обеспечить, чтобы сериализованный объект оставался неизменным при десериализации?

Ответ

При сериализации неизменяемых объектов важно сохранить их иммутабельность, что может быть нарушено, если десериализация создает изменяемые поля или открывает доступ к приватным данным. Для обеспечения неизменности следует объявлять поля final и использовать конструкторы для инициализации, а также реализовать методы readObject и readResolve, чтобы гарантировать создание корректного неизменяемого объекта после десериализации. Кроме того, рекомендуется избегать предоставления сеттеров и возвращать копии изменяемых объектов во избежание изменений состояния.

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

При проектировании API с использованием checked исключений, какие конкретные шаги и соглашения ты применяешь для стандартизации обработки ошибок клиентом?

Ответ

При проектировании API с checked исключениями важно определить и задокументировать конкретные типы исключений, которые могут быть выброшены каждым методом, обеспечивая ясность для клиента. Следует использовать семантически значимые иерархии исключений, чтобы клиент мог обработать их группами или по отдельности. Рекомендуется придерживаться стандартных соглашений, например, использования checked исключений для предсказуемых ошибок и предоставления механизмов для централизованной обработки ошибок на стороне клиента.

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

Расскажите, как работает ReentrantLock и приведите пример, когда повторное захватывание блокировки может быть полезным в вашем коде.

Ответ

ReentrantLock — это реализация интерфейса Lock, позволяющая одному потоку повторно входить в уже захваченную им же блокировку без блокировки самого себя. Это обеспечивает гибкость в управлении синхронизацией, например, при вызове вложенных методов, которые требуют одной и той же блокировки. Повторное захватывание полезно, когда внутри критической секции вызываются другие методы, также защищённые той же блокировкой, что предотвращает взаимную блокировку и упрощает структуру кода. Для корректного использования необходимо явно вызывать lock() и unlock(), обеспечивая освобождение блокировки в блоке finally.

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

Какие файлы конфигураций и структуры каталогов вы используете для разделения настроек разных окружений? Как предлагаете управлять секретами и чувствительными данными в таких файлах?

Ответ

Разделение настроек разных окружений осуществляется с помощью отдельных конфигурационных файлов или профилей (например, application-dev.yml, application-prod.yml), которые содержат параметры, специфичные для каждого окружения. Структура каталогов обычно отражает логическое разделение, где базовые настройки лежат в общем файле, а окруженческие расширяются и переопределяются в специализированных файлах. Для управления секретами и чувствительными данными применяются защищённые хранилища, такие как Vault или KMS, либо переменные окружения, чтобы не хранить их напрямую в конфигурационных файлах и избежать утечек.

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