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

244 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 📋 Инструкции для интервьюера
**Длительность:** 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
- Интерес к новым технологиям
- Системное мышление