Files
second-mind-aep/💼 Работа/Собеседования/Лето 2025/🎯 Скрипт собеседования Java-разработчика.md
2025-08-13 14:45:11 +04:00

12 KiB
Raw Blame History

📋 Инструкции для интервьюера

Длительность: 90 минут
Формат: Техническое интервью
Подготовка: IDE/редактор для coding, листок бумаги для диаграмм


🤝 1. Знакомство и мотивация (10 минут)

Открытие собеседования

"Добро пожаловать! Меня зовут Андрей, я руководитель группы разработки. Сегодня мы проведем техническое интервью, которое займет около 90 минут. Расскажите, пожалуйста, немного о себе и своем опыте."

Вопросы для знакомства:

  1. Расскажите о своем текущем проекте и роли в команде
  2. Какие технологии изучаете сейчас или планируете изучить?
  3. Что мотивирует вас в разработке ПО?
  4. Есть ли вопросы о нашей компании или команде?

Краткий рассказ о компании:

"Мы разрабатываем корпоративные системы с высокой нагрузкой. Работаем с Java, Spring Boot, Kafka, микросервисами. Команда из [X] разработчиков, Agile процессы, современный стек технологий."


💻 2. Техническое интервью - Теория (30 минут)

Java Core (5-7 минут)

Вопрос 1: "Объясните разницу между equals() и hashCode(). Почему важно переопределять их вместе?"

Ожидаемый ответ:

  • equals() проверяет логическое равенство объектов
  • hashCode() возвращает числовое представление для хеш-таблиц
  • Контракт: если a.equals(b) == true, то a.hashCode() == b.hashCode()
  • Нарушение контракта ломает работу HashMap, HashSet
  • Пример с переопределением в User или Product классах

Вопрос 2: "Расскажите о Stream API. Приведите пример обработки списка пользователей."

Ожидаемый ответ:

  • Функциональное программирование в Java 8+
  • Операции: filter, map, reduce, collect
  • Пример: фильтрация активных пользователей, группировка по ролям
  • Ленивые вычисления, parallel streams

Углубляющий вопрос: "Какие есть алгоритмы Garbage Collection? Когда использовать G1GC?"


Spring Framework (8-10 минут)

Вопрос 3: "Что такое Dependency Injection? Какие способы DI поддерживает Spring?"

Ожидаемый ответ:

  • Инверсия управления, внедрение зависимостей
  • Constructor injection (предпочтительный)
  • Setter injection, Field injection
  • @Autowired, @Qualifier, @Primary
  • Преимущества: тестируемость, слабая связанность

Вопрос 4: "Объясните жизненный цикл Spring Bean. Какие есть scopes?"

Ожидаемый ответ:

  • Создание, инициализация, использование, уничтожение
  • @PostConstruct, @PreDestroy
  • Scopes: singleton, prototype, request, session
  • BeanPostProcessor для кастомной логики

Вопрос 5: "Как работает Spring Boot Auto-configuration?"

Ожидаемый ответ:

  • @EnableAutoConfiguration, @SpringBootApplication
  • Условная конфигурация: @ConditionalOnClass, @ConditionalOnProperty
  • spring.factories, автоконфигурация стартеров
  • Возможность переопределения через @Configuration

Углубляющий вопрос: "Как настроить JWT аутентификацию в Spring Security для REST API?"


Базы данных (5-7 минут)

Вопрос 6: "Объясните ACID свойства транзакций на примере банковского перевода."

Ожидаемый ответ:

  • Atomicity: перевод денег - или обе операции (списание/зачисление), или никакие
  • Consistency: балансы всегда корректные, бизнес-правила соблюдены
  • Isolation: параллельные транзакции не мешают друг другу
  • Durability: подтвержденные операции сохраняются навсегда

Вопрос 7: "Что такое N+1 проблема в ORM? Как решить для списка постов с комментариями?"

Ожидаемый ответ:

  • 1 запрос для постов + N запросов для комментариев каждого поста
  • Решения: @EntityGraph, join fetch, batch loading
  • Lazy vs Eager loading стратегии
  • Projection для оптимизации

Углубляющий вопрос: "Какие индексы создать для таблицы пользователей с частыми поисками по email и имени?"


Микросервисы (8-10 минут)

Вопрос 8: "Какие преимущества и недостатки микросервисной архитектуры?"

Ожидаемый ответ:

  • Плюсы: независимое развертывание, масштабирование, технологическое разнообразие
  • Минусы: сложность взаимодействия, распределенные транзакции, мониторинг
  • Bounded Context, DDD подходы
  • Подходит для больших команд и сложных доменов

Вопрос 9: "Как обеспечить консистентность данных между сервисами пользователей и платежей?"

Ожидаемый ответ:

  • Saga pattern (orchestration/choreography)
  • Event sourcing, CQRS
  • Eventual consistency
  • Compensation actions при ошибках
  • Distributed transactions (2PC) - почему избегать

Вопрос 10: "Что такое Circuit Breaker? Когда применять?"

Ожидаемый ответ:

  • Паттерн для предотвращения каскадных сбоев
  • Состояния: Closed, Open, Half-Open
  • Hystrix, Resilience4j библиотеки
  • Применение при вызовах внешних API, медленных сервисов

Углубляющий вопрос: "Как организовать Service Discovery в Kubernetes?"


Message Brokers (2-3 минуты)

Вопрос 11: "В чем разница между Kafka и RabbitMQ?"

Ожидаемый ответ:

  • Kafka: высокая пропускная способность, хранение логов, streaming
  • RabbitMQ: AMQP протокол, точка-точка сообщения, более простая настройка
  • Kafka: append-only log, горизонтальное масштабирование
  • RabbitMQ: routing, exchange types, dead letter queues

🏗️ 3. Архитектурное мышление (10 минут)

Проектирование системы

"Представьте, что нужно спроектировать систему уведомлений для социальной сети. Миллионы пользователей, разные типы уведомлений (push, email, SMS), персонализация. Как бы вы подошли к архитектуре?"

Ожидаемое обсуждение:

  1. Входные данные: REST API, events от других сервисов
  2. Обработка: Event-driven архитектура, message queues
  3. Персонализация: правила, пользовательские настройки
  4. Доставка: адаптеры для разных каналов (push, email, SMS)
  5. Масштабирование: горизонтальное масштабирование, partitioning
  6. Надежность: retry механизмы, dead letter queues

Дополнительные вопросы:

  • "Как обеспечить exactly-once delivery уведомлений?"
  • "Что делать с пользователями, которые временно оффлайн?"
  • "Как организовать A/B тестирование разных типов уведомлений?"

4. Подведение итогов (5 минут)

Вопросы кандидата

"Какие у вас есть вопросы о проекте, команде или технологиях?"

Следующие шаги

"Спасибо за интервью! У нас есть еще [X] кандидатов для интервью. Обратную связь дадим в течение [Y] дней. Если у вас появятся дополнительные вопросы, всегда можете написать."


📊 Система оценки

Для каждого блока (1-10 баллов):

Java Core:

  • 9-10: Глубокое понимание, может объяснить внутренние механизмы
  • 7-8: Знает основы, может применять на практике
  • 5-6: Базовые знания с пробелами
  • <5: Серьезные пробелы в базовых концепциях

Spring Framework:

  • 9-10: Эксперт, знает продвинутые фичи и best practices
  • 7-8: Уверенно работает с основными компонентами
  • 5-6: Знает основы, но не все нюансы
  • <5: Путается в базовых концепциях

Архитектурное мышление:

  • 9-10: Продумывает все аспекты, предлагает несколько вариантов
  • 7-8: Логичный подход, учитывает основные требования
  • 5-6: Базовое понимание, нужно направление
  • <5: Не может структурированно подойти к проблеме

🎯 Заметки для интервьюера

Что отмечать:

  • Четкость объяснений
  • Практический опыт vs теоретические знания
  • Способность к дискуссии и аргументации
  • Готовность признать незнание
  • Интерес к обучению новому

Red flags:

  • Неуверенность в базовых концепциях
  • Неспособность объяснить решения
  • Отсутствие вопросов о проекте
  • Негативные отзывы о предыдущих местах работы

Green flags:

  • Конкретные примеры из опыта
  • Вопросы о best practices
  • Интерес к новым технологиям
  • Системное мышление