Гайд для подготовки к отбору на стажировку Java в IT-компании ASTON: базовый Java Core, Spring, SQL, Git и поведенческие вопросы без углубления в system design.
Фишка: Стажировка ASTON — это учебная «лаборатория» с наставником: учебные проекты имитируют реальную разработку, ~75% стажёров получают оффер после программы; есть альтернативный вход через бесплатное обучение с пометкой «Обучение» в отклике.
| Этап | Длительность | Что проверяют |
|---|---|---|
| Скрининг HR / рекрутер | 20–30 мин | Мотивация, образование, готовность к стажировке 3–4 месяца полный день, локация (офис/удалённо), уровень английского, базовое знакомство с Java и Git |
| Техническое интервью | 45–60 мин | Java Core, ООП, коллекции, основы Spring/Hibernate, SQL-запросы, Git, иногда простая задача на код или разбор учебного проекта |
| Финальный этап (опционально) | 20–30 мин | Уточнение условий стажировки, самопрезентация, вопросы кандидата; у части направлений — психологический тест или логико-математический скрининг |
Обязательный минимум
Плюсом будет
Что такое наследование?
Механизм повторного использования кода: подкласс наследует поля и методы суперкласса. В Java — single inheritance. Связано с полиморфизмом и иерархией типов.
Что такое Immutable объекты?
Объект, состояние которого нельзя изменить после создания (String, Integer). Плюсы: потокобезопасность, надёжность как ключ в Map. Создание: final поля, без сеттеров, защитные копии.
Что такое лямбда-выражения?
Краткая запись анонимной функции для функциональных интерфейсов (один абстрактный метод). Используются в Stream API, колбэках. Синтаксис: (params) -> expression.
Что такое функциональный интерфейс?
Интерфейс с одним абстрактным методом (@FunctionalInterface). Примеры: Runnable, Comparator, Predicate. Основа для лямбд и method reference.
Какие знаешь методы класса Object?
equals, hashCode, toString, getClass, clone, finalize, wait/notify. equals+hashCode обязаны быть согласованы при переопределении.
Какие знаешь правила переопределения hashCode и equals?
Если equals — true, hashCode одинаковый. Рефлексивность, симметричность, транзитивность. Используйте все значимые поля; для неизменяемых объектов — кэшируйте hashCode.
Фишка: На стажировку не ждут глубокого знания JVM, но базовое ООП и понимание разницы abstract class vs interface спрашивают часто.
Ловушка: Не путайте == (ссылки) и equals (логическое равенство). Для строк всегда equals.
В чём разница между ArrayList и LinkedList?
ArrayList — массив, O(1) доступ по индексу, дорогая вставка в середину. LinkedList — узлы, O(n) доступ, быстрая вставка при известном итераторе.
Что такое хэш-таблица и какие проблемы возникают при коллизиях?
Массив + хэш-функция. Коллизии решают chaining (списки) или open addressing. При плохом hashCode деградация до O(n).
В чём разница между промежуточными и терминальными операциями в Stream?
Промежуточные (filter, map) — ленивые, возвращают Stream. Терминальные (collect, forEach, reduce) — запускают pipeline и дают результат.
Какая сложность основных операций в ArrayList?
get/set по индексу — O(1). Добавление в конец — амортизированно O(1). Вставка/удаление в середине — O(n) из-за сдвига.
Совет: На техсобесе могут дать простую задачу: развернуть строку, найти дубликат, посчитать частоту символов — проговорите сложность вслух.
Ловушка: При работе с HashMap как ключ используйте immutable объекты или корректно переопределите equals/hashCode.
Что такое бины в Spring и как их создавать?
Объекты, управляемые IoC-контейнером. Создание: @Component/@Service/@Repository/@Configuration + @Bean. Контейнер управляет жизненным циклом и DI.
Для чего нужен Spring?
IoC/DI, упрощение enterprise-разработки: транзакции, MVC, Security, Data. Spring Boot — автоконфигурация и быстрый старт.
В чём разница между Spring Boot и Spring Framework?
Spring Framework — ядро (IoC, AOP, MVC). Spring Boot — надстройка: автоконфигурация, embedded server, starter-зависимости, минимум XML.
Что такое циклическая зависимость в Spring?
Bean A зависит от B, B от A. Spring может решить через setter/конструктор с @Lazy или рефакторинг. Лучше избегать на этапе проектирования.
Что такое аннотация @SpringBootTest?
Интеграционный тест с поднятием полного Spring-контекста. Позволяет тестировать слои вместе, с @Autowired зависимостями.
401 vs 403 — в чём разница?
401 Unauthorized — не аутентифицирован (нет/неверные credentials). 403 Forbidden — аутентифицирован, но нет прав на ресурс.
Фишка: Программа стажировки ASTON включает Spring Core, Data, MVC, Boot, Security — на собесе достаточно объяснить DI и роль основных аннотаций.
Совет: Упомяните опыт (или учебный проект) с REST-контроллером, сервисом и репозиторием — это хорошо ложится на их стек.
Что такое проблема N+1 и как с ней работать?
1 запрос за родителями + N за дочерними связями. Решения: JOIN FETCH, @EntityGraph, batch fetching, DTO-проекции.
Когда возникает LazyInitializationException?
Доступ к lazy-полю/коллекции вне открытой Hibernate Session (часто после закрытия транзакции). Решения: fetch join, @Transactional на сервисе, DTO.
Как работает кэширование в Hibernate?
1-й уровень (Session, автоматически), 2-й уровень (общий для SessionFactory, настраивается), query cache. Важно понимать инвалидацию и consistency.
Entity как ключ HashMap — что может пойти не так?
Если изменить поля, участвующие в hashCode, после вставки в Map — объект «потеряется». Entity должны быть immutable как ключ или не использоваться так.
Ловушка: Не путайте persist/merge и не передавайте Entity напрямую в REST без DTO — частый вопрос на junior-собесах.
Что такое транзакция в базах данных?
Атомарная единица работы. Свойства ACID: Atomicity, Consistency, Isolation, Durability. COMMIT/ROLLBACK.
Что нужно знать про ACID?
Atomicity — всё или ничего. Consistency — валидное состояние до/после. Isolation — параллельные транзакции не мешают. Durability — данные сохранены после commit.
В чём разница между кластеризованными и некластеризованными индексами?
Кластерный — данные физически упорядочены по ключу (обычно PK, один на таблицу). Некластерный — отдельная структура с указателями на строки.
В чём разница между EXPLAIN и EXPLAIN ANALYZE?
EXPLAIN — план без выполнения. EXPLAIN ANALYZE — выполняет запрос и показывает реальное время, строки, узкие места.
Что такое блокировки в БД и как они влияют на параллельную работу?
Shared/exclusive locks, row/table level. Риски: deadlock, снижение throughput. Уровни изоляции определяют видимость изменений.
Совет: Будьте готовы написать SELECT с JOIN и GROUP BY, объяснить зачем индекс на WHERE/JOIN-полях.
В чём разница между git rebase и git merge?
Merge — merge commit, сохраняет историю ветвления. Rebase — переписывает коммиты поверх другой ветки, линейная история. Не rebase публичные ветки.
Для чего нужны Docker volumes?
Персистентное хранение данных контейнера вне lifecycle контейнера. Отделяют данные от образа, удобны для БД и конфигов.
Фишка: Git — обязательное требование вакансии; покажите, что умеете клонировать, коммитить, создавать ветки и делать merge/rebase осознанно.
Сколько консьюмеров одновременно могут читать топик в Kafka?
В одной consumer group — не больше числа партиций топика. Каждая партиция читается одним консьюмером в группе.
At-least-once vs at-most-once vs exactly-once?
At-most-once — возможна потеря. At-least-once — возможны дубликаты. Exactly-once — семантика без потерь и дублей (сложнее, idempotency).
Что такое паттерн саги для распределённых транзакций?
Цепочка локальных транзакций с компенсирующими действиями при сбое. Choreography (события) vs Orchestration (координатор).
Совет: Для стажёра достаточно концептуального понимания; глубокий Kafka спрашивают реже, чем SQL и Spring.
Найти первый неповторяющийся символ
Дана строка s. Верните индекс первого символа, который встречается ровно один раз, или -1 если такого нет. Пример: "leetcode" → 0 (символ 'l').
Map<Character, Integer> freq = new HashMap<>();
for (char c : s.toCharArray()) freq.merge(c, 1, Integer::sum);
for (int i = 0; i < s.length(); i++) {
if (freq.get(s.charAt(i)) == 1) return i;
}
return -1;Сложность: O(n) по времени, O(k) по памяти (k — число уникальных символов)
Проверка валидности скобок
Дана строка из символов '(', ')', '{', '}', '[', ']'. Определите, правильно ли расставлены скобки.
Deque<Character> stack = new ArrayDeque<>();
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '[') stack.push(c);
else {
if (stack.isEmpty()) return false;
char open = stack.pop();
if ((c == ')' && open != '(') || (c == ']' && open != '[') || (c == '}' && open != '{')) return false;
}
}
return stack.isEmpty();Сложность: O(n) время, O(n) память
SQL: сотрудники с зарплатой выше средней
Таблица employees(id, name, department_id, salary). Напишите запрос: имена сотрудников, чья зарплата выше средней по их отделу.
SELECT e.name FROM employees e JOIN ( SELECT department_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id ) d ON e.department_id = d.department_id WHERE e.salary > d.avg_sal;
Сложность: Зависит от индексов на department_id и salary; GROUP BY + JOIN
3 дня
7 дней
14 дней
| Блок | Готов, если... |
|---|---|
| Java Core | можешь объяснить наследование, immutable, equals/hashCode и ответить на вопрос про коллекции |
| Spring | можешь описать бины, DI, разницу Spring Boot vs Framework и назначение @SpringBootTest |
| Hibernate/SQL | можешь объяснить N+1, LazyInitializationException, написать JOIN-запрос и расшифровать ACID |
| Git | можешь объяснить merge vs rebase и описать типичный workflow в команде |
| Алгоритмы | решаешь за 15–20 мин простые задачи на строки, хэш-таблицу или стек с оценкой сложности |
| Поведенческие | есть готовая самопрезентация и 2–3 истории по STAR про учёбу или пет-проекты |
В день собеседования