12 KiB
📋 Инструкции для интервьюера
Длительность: 90 минут
Формат: Техническое интервью
Подготовка: IDE/редактор для coding, листок бумаги для диаграмм
🤝 1. Знакомство и мотивация (10 минут)
Открытие собеседования
"Добро пожаловать! Меня зовут Андрей, я руководитель группы разработки. Сегодня мы проведем техническое интервью, которое займет около 90 минут. Расскажите, пожалуйста, немного о себе и своем опыте."
Вопросы для знакомства:
- Расскажите о своем текущем проекте и роли в команде
- Какие технологии изучаете сейчас или планируете изучить?
- Что мотивирует вас в разработке ПО?
- Есть ли вопросы о нашей компании или команде?
Краткий рассказ о компании:
"Мы разрабатываем корпоративные системы с высокой нагрузкой. Работаем с 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), персонализация. Как бы вы подошли к архитектуре?"
Ожидаемое обсуждение:
- Входные данные: REST API, events от других сервисов
- Обработка: Event-driven архитектура, message queues
- Персонализация: правила, пользовательские настройки
- Доставка: адаптеры для разных каналов (push, email, SMS)
- Масштабирование: горизонтальное масштабирование, partitioning
- Надежность: 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
- Интерес к новым технологиям
- Системное мышление