Мок-техническое собеседование начинающего Java backend-разработчика без коммерческого опыта. После самопрезентации и обсуждения пет-проектов интервьюер разбирает Java Collections, String и исключения, базы данных и индексы, проводит код-ревью Spring Boot и задачу по системному дизайну сервиса уведомлений. В финале обсуждаются OAuth 2.0, Docker, Git, Future/CompletableFuture и даются рекомендации по подготовке.
Русскоязычная запись независимого мок-интервью с Глебом — первокурсником, изучающим Java и пробовавшим Keycloak, API Gateway и Kafka в пет-проектах. Интервьюер подробно проверяет понимание HashMap, HashSet, String, исключений, денормализации и индексов, затем разбирает код Spring Boot и проектирование сервиса уведомлений с Kafka, transactional outbox, ретраями и статусами доставки. Отдельные блоки посвящены OAuth 2.0 и Keycloak, Docker, внутреннему устройству Git, Future и CompletableFuture. В финале кандидат получает положительную оценку для уровня Intern и рекомендации укрепить фундаментальные знания.
Для ключей HashMap согласованно переопределяйте equals() и hashCode(): разные hashCode всё равно могут попасть в один бакет после вычисления индекса.
Не перехватывайте Throwable без крайней необходимости: Error часто означает состояние, из которого приложение не может безопасно восстановиться; ловите более конкретные исключения.
Индексы БД выбирают по реальным шаблонам фильтрации и порядку колонок, учитывая стоимость их поддержки при записи.
В Spring зависимости удобнее и безопаснее внедрять через конструктор, а входные данные валидировать на границе API.
Пароли следует хранить как адаптивные односторонние хеши, например BCrypt или Argon2, и проверять через PasswordEncoder, а не шифровать обратимым способом.
Для асинхронной отправки уведомлений отделяйте факт принятия запроса от факта доставки и используйте transactional outbox, ретраи и DLQ.
CompletableFuture помогает композиции асинхронных этапов, но вызов get() всё равно может заблокировать поток.