Java: тестовое собеседование разработчика
Мок-техническое собеседование начинающего Java backend-разработчика без коммерческого опыта. После самопрезентации и обсуждения пет-проектов интервьюер разбирает Java Collections, String и исключения, базы данных и индексы, проводит код-ревью Spring Boot и задачу по системному дизайну сервиса уведомлений. В финале обсуждаются OAuth 2.0, Docker, Git, Future/CompletableFuture и даются рекомендации по подготовке.
- Опубликовано на YouTube:
- Просмотры на YouTube: 6,3 тыс.
- Лайки на YouTube: 143
Таймлайн
Коротко о видео
Русскоязычная запись независимого мок-интервью с Глебом — первокурсником, изучающим 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() всё равно может заблокировать поток.