На собеседовании Java-разработчика редко хватает определения «что такое ООП». Интервьюер смотрит, свяжете ли equals с HashMap, объясните ли гонку без лозунга про synchronized и доведёте ли ответ до поведения в проде.
Ниже вопросы на собеседовании Java с разбором ответов. Разберём Core, коллекции, concurrency, JVM, Spring и JPA, затем опыт, кейсы и лайвкод. Формулировки в компаниях разные. Важно уметь уточнить нагрузку и контракт, а не перечислить аннотации.
Грейд меняет глубину. Junior закрывает контракты языка и простые коллекции. Middle держит потоки, Spring и транзакции. Senior связывает компромисс, откат и сопровождение сервиса.
Коротко:
- Скрининг рекрутера 15–30 минут: стек, грейд, формат, готовность к лайвкоду.
- Технический скрин 30–45 минут: ООП, equals/hashCode, коллекции без паники на уточнениях.
- Основное интервью 45–90 минут: concurrency, JVM, Spring/JPA, разбор сервиса из резюме.
- Ждите банк тем: Core, Collections, multithreading, GC, Spring Boot, Hibernate.
- Лайвкод проверяет ход мысли и краевые случаи, а не идеальный синтаксис с первой попытки.
- Подготовьте две истории: ускорение или стабилизация сервиса и инцидент с понятным откатом.
- Проговорите ответы вслух в mock interview и вернитесь к темам, которые поплыли.
Как проходит собеседование Java-разработчика
Как проходит собеседование Java-разработчика, зависит от компании, но почти всегда это несколько встреч. Рекрутер сверяет стек и ожидания. Дальше отдельно смотрят язык, код и умение объяснить решение из опыта.
Типичная ловушка процесса: сильный рассказ про Spring Boot при дыре в equals/hashCode. На основном круге Spring спрашивают часто, но без Core вас снимают раньше. Готовьте цепочку: контракт объекта → коллекция → поток → контейнер бинов.
Грейд меняет набор сессий. Junior чаще проходит скрин и одну техническую встречу. Middle чаще получает разбор транзакций и многопоточности. Senior глубже уходит в компромиссы масштаба, деградацию и сопровождение.
Ниже ориентир этапов. Продуктовый бэкенд дольше сидит в Spring и БД. Команда ближе к платформе уйдёт в JVM-флаги и GC, хотя ядро языка всё равно спросят.
| Этап | Длительность | Что обычно проверяют |
|---|---|---|
| Скрининг рекрутера | 15–30 мин | Стек, грейд, мотивация, формат, готовность к тестовому |
| Технический скрин | 30–45 мин | ООП, String, коллекции, простой алгоритм, уточнения |
| Основное техническое | 45–90 мин | Concurrency, JVM, Spring/JPA, проекты, читаемый код |
| Лайвкод или домашка | 30–120 мин | Решение вслух, краевые случаи, тесты, структура |
| Финал | 30–60 мин | Команда, ожидания от роли, поведение в неопределённости |
Когда ответы на язык и Spring уже складываются, полезно сверить стек с живыми вакансиями. В подборке разработки на HireHi видно, какие команды ждут Spring Boot, Kafka и Postgres.
Какие вопросы задают на собеседовании Java-разработчика
Какие вопросы задают на собеседовании Java-разработчика, обычно режут на несколько типов. Не пытайтесь учить всё подряд. Соберите примеры под каждый тип и потренируйте короткий ответ.
- Профессиональные: Core, коллекции, concurrency, JVM, Spring, JPA.
- Про опыт: сервис из резюме, инцидент, спорное техническое решение.
- Ситуационные: гонка в проде, утечка метаспейса, опасная миграция схемы.
- Практические: лайвкод, потокобезопасный счётчик, разбор N+1.
- Поведенческие: как спорите в ревью, как признаёте пробел, как просите хелп.
Ниже сначала банк по темам, затем опыт, кейсы и задания. Внутри тем отметим, где глубина прыгает от junior к senior.
Профессиональные вопросы и ответы на собеседовании Java-разработчика
Профессиональные вопросы на собеседовании Java-разработчика проверяют не словарный запас, а выбор инструмента под задачу. Ниже темы, которые стабильно встречаются в топе подготовки.
Java Core и ООП
Чем перегрузка отличается от переопределения?
Что проверяют. Не путаете ли compile-time выбор метода с runtime-полиморфизмом.
Как отвечать. Перегрузка (overload) это несколько методов с одним именем и разными сигнатурами в одном классе: выбор на этапе компиляции. Переопределение (override) меняет реализацию метода родителя в наследнике: выбор по фактическому типу объекта в runtime, если метод не static/private/final.
Демонстрационный ход. «Сначала назову правила сигнатуры для override, потом пример с List и ArrayList, где вызывается реализация потомка.»
Зачем контракт equals и hashCode и что будет, если нарушить его?
Что проверяют. Связь с HashMap/HashSet, а не дежурная фраза «надо переопределять вместе».
Как отвечать. Если equals говорит, что объекты равны, hashCode обязан совпасть. Иначе объект «теряется» в HashMap: кладёте в одну корзину по одному хешу, ищете по другому. equals должен быть рефлексивным, симметричным, транзитивным и согласованным. Для сущностей с бизнес-ключом не мешайте в equals мутабельные поля, которые меняются после вставки в set.
Демонстрационный ход. «Покажу пару с одинаковым id и разным hashCode и объясню, почему contains вернёт false.»
Что такое String pool и чем StringBuilder отличается от StringBuffer?
Что проверяют. Понимание неизменяемости и цены конкатенации.
Как отвечать. Строковые литералы могут интернироваться в пул, поэтому == иногда совпадает для литералов, но в логике сравнивайте через equals. String неизменяем: каждая «дописка» создаёт новый объект. StringBuilder изменяемый и не синхронизирован. StringBuffer синхронизирован и почти не нужен в новом коде: для одного потока берите StringBuilder, для явной синхронизации другие средства.
Чем checked-исключение отличается от unchecked?
Что проверяют. Не зубрите таблицу, а объясняете, когда заставлять вызывающего обработать ошибку.
Как отвечать. Checked (наследники Exception кроме RuntimeException) компилятор требует объявить или поймать. Unchecked (RuntimeException и Error) можно не декларировать. На практике API часто уходит в unchecked, чтобы не протекали throws через слои. Свои доменные ошибки делайте осмысленными типами, не глотайте Exception молча.
Что дают generics и что такое type erasure?
Что проверяют. Не путаете ли проверку типов на компиляции с runtime.
Как отвечать. Generics дают безопасность типов на этапе компиляции и убирают касты. В runtime информация о параметре типа стирается: List<String> и List<Integer> на уровне bytecode похожи на сырой List. Поэтому нельзя сделать new T() или проверить instanceof List<String>. Wildcards (? extends / ? super) нужны для гибкости API читателя и писателя.
Демонстрационный ход. «Если спросят про PECS, скажу коротко: extends для чтения, super для записи, без лекции на десять минут.»
Когда интерфейс, а когда абстрактный класс?
Что проверяют. Не рисуете ли глубокую иерархию «потому что ООП».
Как отвечать. Интерфейс описывает способность и допускает множественную реализацию. Абстрактный класс уместен, когда есть общее состояние и частичная реализация для семейства. С Java 8 у интерфейсов есть default-методы, но состояние по-прежнему удобнее держать в классе. В дизайне сервиса чаще композиция и явные зависимости, чем дерево из пяти уровней.
Коллекции
Чем ArrayList отличается от LinkedList на практике?
Что проверяют. Выбор структуры под доступ, а не заученный «LinkedList быстрее в середине».
Как отвечать. ArrayList опирается на массив: быстрый доступ по индексу, амортизированно быстрый add в конец, дорогие вставки в середину из‑за сдвига. LinkedList это двусвязный список: доступы по индексу линейные, вставки по уже найденному узлу дешёвые, но на практике кэш-промахи часто делают его медленнее ArrayList даже на вставках. Для большинства задач берите ArrayList, пока профиль не показал иное.
Как устроен HashMap и что менялось после Java 8?
Что проверяют. Внутренности, а не только «ключ-значение».
Как отвечать. Хеш ключа выбирает корзину. При коллизиях раньше была цепочка, с Java 8 длинные цепочки могут превращаться в красно-чёрное дерево. Важны equals/hashCode ключа, load factor и capacity. null-ключ допускается в одной корзине. Средний доступ O(1), в худшем при плохом хеше деградирует.
Демонстрационный ход. «Свяжу с предыдущим вопросом про equals: положили объект, изменили поле из hashCode, и get не находит.»
Чем HashMap отличается от ConcurrentHashMap?
Что проверяют. Понимание потокобезопасности без «просто обернём synchronizedMap».
Как отвечать. Обычный HashMap не для конкурентной записи: возможны гонки и бесконечные циклы на старых версиях при ресайзе. ConcurrentHashMap допускает конкурентные чтения и обновления без блокировки всей таблицы целиком. Итераторы weakly consistent, не fail-fast как у ArrayList. Collections.synchronizedMap блокирует всю карту на каждую операцию и хуже масштабируется.
Что такое fail-fast итератор и когда ждать ConcurrentModificationException?
Что проверяют. Отличаете ли структурную модификацию от безопасного удаления через iterator.remove.
Как отвечать. Fail-fast итераторы ArrayList/HashMap ловят структурные изменения коллекции во время обхода (не через сам итератор) и бросают ConcurrentModificationException. Это защита от скрытых багов в одном потоке, а не гарантия в многопоточности. Для конкурентного обхода нужны concurrent-коллекции или явная синхронизация.
Когда TreeMap, а когда LinkedHashMap?
Что проверяют. Знаете ли порядок и стоимость.
Как отвечать. TreeMap хранит ключи в отсортированном порядке (Comparable/Comparator), операции обычно O(log n). LinkedHashMap сохраняет порядок вставки (или доступа при accessOrder). Если нужен LRU-кэш на Map, смотрят в сторону LinkedHashMap с removeEldestEntry. Не берите TreeMap «для красоты», если сортировка не нужна.
Многопоточность и concurrency
Чем volatile отличается от synchronized?
Что проверяют. Видимость против атомарности составных действий.
Как отвечать. volatile гарантирует видимость записи между потоками и запрещает некоторые переупорядочивания, но не делает i++ атомарным. synchronized даёт взаимное исключение и happens-before на вход/выход монитора. Для счётчика чаще AtomicInteger или лок. Не заменяйте все локи volatile «потому что быстрее».
Что такое happens-before простыми словами?
Что проверяют. Модель памяти без чтения JLS вслух.
Как отвечать. Happens-before это договор: если действие A happens-before B, то результат A виден B. Его дают unlock→lock того же монитора, запись volatile→чтение того же volatile, старт потока, join и инструменты java.util.concurrent. Без этих связей компилятор и CPU могут переупорядочить операции так, что второй поток увидит «частично записанное» состояние.
Демонстрационный ход. «Объясню на примере публикации объекта без синхронизации: поля могут остаться default.»
Как устроены ExecutorService и зачем пул потоков?
Что проверяют. Не создаёте ли new Thread на каждый запрос.
Как отвечать. Пул переиспользует потоки, ограничивает параллелизм и даёт очередь задач. fixed pool держит N потоков, cached растёт под нагрузкой и опасен без границ, single удобен для последовательности. Важны rejection policy, размер очереди и graceful shutdown. В веб-приложении отдельный пул для блокирующего I/O не должен бездумно совпадать с числом CPU.
Чем CountDownLatch отличается от CyclicBarrier и Semaphore?
Что проверяют. Выбор примитива под сценарий.
Как отвечать. CountDownLatch один раз ждёт, пока счётчик дойдёт до нуля. CyclicBarrier многоразовый: стороны ждут друг друга на барьере. Semaphore ограничивает число разрешений (например, доступ к ресурсу). На интервью сначала назовите задачу, потом примитив, а не список классов из пакета.
Что такое deadlock и как его ловить?
Что проверяют. Диагностика, а не определение из учебника.
Как отвечать. Deadlock: два и более потока держат локи и ждут друг друга по кругу. Профилактика: единый порядок захвата, таймауты tryLock, меньше вложенных мониторов. Диагностика: jstack / thread dump, поиск BLOCKED и цепочки блокировок. В коде приложений чаще ищут долгие локи и синхронизацию на публичных объектах.
JVM, память и GC
Чем JDK отличается от JRE и JVM?
Что проверяют. Роли слоёв без путаницы терминов.
Как отвечать. JVM исполняет байткод, управляет памятью и потоками. JRE это среда запуска: JVM плюс стандартные библиотеки. JDK добавляет компилятор и инструменты разработки (javac, jlink и др.). В контейнерах сейчас чаще говорят про runtime-образ на базе JDK/JRE-дистрибутива вендора.
Что лежит в heap, stack и Metaspace?
Что проверяют. Базовая карта памяти.
Как отвечать. Stack потока хранит фреймы методов: локальные переменные и ссылки. Объекты живут в heap. Metaspace держит метаданные классов (после Java 8 вместо PermGen). Утечка classloader'ов раздувает Metaspace. OutOfMemoryError читайте по зоне: heap, metaspace, native.
Как коротко объяснить молодое и старое поколение и GC?
Что проверяют. Идея поколений, не дамп всех алгоритмов.
Как отвечать. Большинство объектов умирают молодыми: minor GC чистит young generation часто и дёшево. Выжившие переходят в old generation, где major/full циклы дороже. На собеседовании junior хватит этой модели. Middle назовёт, чем смотрел паузы (GC-логи, метрики). Senior свяжет размер кучи, паузы и SLA, не включая «лучший GC» без профиля.
Что такое JIT и зачем иногда видят «прогрев» сервиса?
Что проверяют. Связь интерпретации и компиляции горячих методов.
Как отвечать. Сначала байткод часто интерпретируется, горячие методы JIT компилирует в машинный код и может оптимизировать. Поэтому короткий бенчмарк без прогрева врёт. На старте пода latency выше: классы грузятся, JIT ещё не разогрелся. Для честного замера используют JMH или долгий прогрев под нагрузкой.
Spring и Spring Boot
Что такое DI и IoC в Spring?
Что проверяют. Смысл контейнера, а не расшифровка аббревиатур.
Как отвечать. IoC значит, что создание и связывание зависимостей берёт на себя контейнер, а не сам класс через new. DI это способ внедрить зависимости: конструктор, сеттер, поле. Предпочитайте constructor injection: проще тестировать и видно обязательные зависимости. Компоненты становятся бинами через аннотации или конфигурацию.
Чем @Component отличается от @Service и @Repository?
Что проверяют. Стереотипы и исключения persistence.
Как отвечать. Все три делают класс кандидатом в компоненты. @Service семантически помечает бизнес-слой. @Repository дополнительно помогает транслировать исключения доступа к данным. На интервью честно скажите, что для сканирования часто достаточно стереотипа, а разница важна для читаемости и AOP/исключений.
Как работает @Transactional и какие типичные ловушки?
Что проверяют. Прокси и границы транзакции, не лозунг «повесим на класс».
Как отвечать. Spring обычно вешает транзакцию через прокси: self-invocation внутри класса не открывает новую транзакцию. checked-исключения по умолчанию не откатывают, rollbackFor нужно настраивать. Читайте propagation и где проходит граница сервиса. Долгие транзакции с внешним HTTP внутри держат соединение БД и ломают пул.
Демонстрационный ход. «Приведу кейс: метод this.doWork() внутри @Transactional-сервиса не проходит через прокси.»
Что такое Spring Boot auto-configuration?
Что проверяют. Понимание starters, а не магия «просто работает».
Как отвечать. Boot по classpath и условиям (@ConditionalOn*) подключает автоконфигурации. Starter тянет набор зависимостей. Это ускоряет старт, но на собеседовании важно уметь найти, какая автоконфигурация включилась, и отключить лишнее. Не путайте «Boot» с «Spring без XML»: это про скорость сборки рабочего приложения.
Как объясните scopes singleton и prototype?
Что проверяют. Жизненный цикл бина в веб-приложении.
Как отвечать. Singleton по умолчанию: один экземпляр на контейнер. Prototype создаёт новый экземпляр на каждое получение из контекста. В веб-слое отдельно помнят request/session scopes. Осторожно внедряйте prototype в singleton: без Provider/ObjectFactory получите один экземпляр навсегда.
JPA и Hibernate
Чем EntityManager отличается от сессии Hibernate и что такое persistence context?
Что проверяют. Кэш первого уровня и жизненный цикл сущности.
Как отвечать. Persistence context помнит сущности, которые вы загрузили или сохранили в рамках unit of work. EntityManager это API JPA. Session Hibernate это провайдерский аналог с расширениями. Важно: изменения сущности в контексте могут уйти в БД на flush без явного save. Понимание managed/detached/removed спасает от «тихих» UPDATE.
Как найти и починить N+1?
Что проверяют. Диагностика запросов, а не «ORM плохой».
Как отвечать. Симптом: один запрос списка плюс запрос на каждую связь. Смотрите SQL-лог, статистику Session, trace. Лечат fetch join, @EntityGraph, batch size, иногда переписыванием запроса. Lazy по умолчанию не зло: зло это доступ к lazy вне транзакции или в цикле без плана загрузки.
Что такое dirty checking и когда звать save?
Что проверяют. Не механический save на каждую сущность.
Как отвечать. Для managed-сущности Hibernate сам замечает изменения полей и включает их в flush. Явный persist/merge нужен при создании и работе с detached. На интервью покажите, что не вызываете save «на всякий случай» в каждом сеттере и понимаете границу транзакции сервиса.
Как выбирать уровень изоляции и борьбу с lost update?
Что проверяют. Практика, а не плакат ACID.
Как отвечать. Частый дефолт read committed допускает non-repeatable read. Для гонок на остатках используют optimistic locking (@Version) или SELECT FOR UPDATE. Serializable дороже. Назовите кейс из опыта или учебный: два потока списывают остаток, как поймаете конфликт версии.
Проговорите Core и Spring вслух
Тренажёр спросит про equals, HashMap и @Transactional так, как это делает техлид Java, а не как тест из учебника. После разговора будет разбор: где есть контракт, а где только названия аннотаций.
Какие вопросы задают об опыте работы Java-разработчика
Какие вопросы задают об опыте на собеседовании Java-разработчика, почти всегда крутятся вокруг одного сервиса из резюме. Готовьте цифры и ограничения, не список фреймворков.
Расскажите о сервисе, где снижали ошибки или latency
Что проверяют. Умение связать действие с эффектом.
Как отвечать. Контекст → узкое место → что сделали → как измерили. Без выдуманных процентов. Если цифр нет, опишите наблюдаемый симптом и критерий «стало лучше».
Инцидент в проде: что сломалось и как откатили
Что проверяют. Спокойствие и процедуру, а не героизм.
Как отвечать. Симптом, гипотеза, откат или feature flag, постмортем без поиска виноватых. Упомяните, что изменили в мониторинге или тестах после.
Спор JPA vs jdbcTemplate/jOOQ: как решали
Что проверяют. Прагматизм в команде.
Как отвечать. JPA удобен для типового домена и unit of work. Явный SQL там, где план критичен. Решение фиксировали критерием: читаемость, EXPLAIN, кто будет сопровождать.
Код-ревью, где поймали гонку или утечку соединения
Что проверяют. Внимание к деталям Java.
Как отвечать. Коротко опишите баг: shared mutable state, забытый close, self-invocation @Transactional. Что предложили взамен и какой тест закрыл дыру.
Какие ситуационные вопросы могут задать Java-разработчику
Ситуационные вопросы на собеседовании Java-разработчика проверяют порядок действий. Начинайте с уточнений и гипотез, не с переписывания стека.
Ручка тормозит под нагрузкой: с чего начнёте?
Что проверяют. Диагностический скелет.
Как отвечать. Уточню SLA, RPS, p50/p99, зависимость от БД и внешних API. Сниму профиль и SQL-лог. Отделю CPU от I/O и локов. Только потом кэш, индекс, пул или вынос в очередь.
В логах ConcurrentModificationException на ArrayList
Что проверяют. Понимание fail-fast и гонок.
Как отвечать. Спрошу, один поток или несколько. В одном потоке ищут модификацию коллекции во время for-each. В нескольких смотрят публикацию списка без синхронизации и замену на concurrent-структуру или локальную копию.
После выкладки вырос Metaspace
Что проверяют. Classloader-утечки и перезагрузки.
Как отвечать. Проверю, не копятся ли классы при redeploy, динамической генерации, утечке classloader в кэшах. Сниму histogram/metaspace metrics. Не увеличу лимит вслепую без причины.
Ночная миграция схемы сломала прод
Что проверяют. Миграции без даунтайма.
Как отвечать. Откат кода и миграции по заранее продуманному плану. Expand/contract: сначала совместимая схема, потом код, потом удаление старого. Блокирующие ALTER на большой таблице не катим без окна.
Соберите кейс до живого интервью
Проговорите голосом гонку, Metaspace и откат миграции. Так видно, где вы прыгаете к «перезапустим под», не спросив SQL-лог, и где транзакция держит соединение слишком долго.
Какие практические задания дают на собеседовании Java-разработчика
Какие практические задания дают на собеседовании Java-разработчика, зависит от грейда. Junior чаще пишет чистую функцию. Middle собирает маленький модуль с тестами. Senior объясняет интерфейс и отказные сценарии.
Напишите потокобезопасный счётчик
Что проверяют. Выбор AtomicInteger vs synchronized vs LongAdder.
Как отвечать. Для простого счётчика хватит AtomicInteger.incrementAndGet. Объясните, почему i++ с volatile недостаточен. Для высокой конкуренции на запись упомяните LongAdder. Не начинайте с ручного wait/notify без нужды.
Сгруппируйте список сущностей через Stream API
Что проверяют. Collectors.groupingBy и читаемость.
Как отвечать. Покажите groupingBy, downstream collector, аккуратные имена. Проговорите null-ключи и пустой список. Не складывайте всю бизнес-логику в один гигантский pipeline, если так хуже читать.
Найдите N+1 в куске сервиса с JPA
Что проверяют. Умение читать SQL и предложить fetch-стратегию.
Как отвечать. Включите показ SQL, воспроизведите цикл по ассоциации, предложите join fetch или entity graph. Оговорите риск декартового произведения на коллекции и когда лучше batch.
Как подготовиться к собеседованию Java-разработчика
Как подготовиться к собеседованию Java-разработчика, лучше строить вокруг своего стека из вакансии. Закройте контракты Core, затем коллекции и один способ concurrency, которым реально пользовались. Потом Spring/JPA, если это бэкенд-роль.
- Повторите ООП, equals/hashCode, String, generics, исключения.
- Разберите ArrayList и HashMap на уровне устройства, не как названия интерфейсов.
- Проговорите volatile, synchronized, happens-before и один пул потоков.
- Поднимите один сервис из резюме: схема, узкое место, тест, мониторинг.
- Решите 20–40 задач на строки, хеши, два указателя, простые структуры.
- Проговорите ответы голосом, иначе на лайвкоде язык застынет.
Шаг 1. Выберите специальность, грейд и формат
В форме укажите разработку, Java, свой грейд и тип встречи. Для секции про Core, коллекции и Spring берите технический формат: так вопросы ближе к коду и компромиссам, а не к общему рассказу о себе.


Шаг 2. Запустите тренировку и отвечайте
Отвечайте голосом, как на встрече. Уточняйте входные данные и ограничения. Если не знаете точный API, скажите идею и краевые случаи. Молчаливый идеальный код ценится ниже живого рассуждения.
Шаг 3. Посмотрите результат
В разборе смотрите сильные стороны и зоны роста по темам: Core, коллекции, concurrency, Spring, JPA. Зафиксируйте 2–3 пункта, которые реально успеете закрыть до интервью.
Шаг 4. Повторите слабые темы
Второй прогон делайте узко: только equals/hashCode, только @Transactional или только GC. Так подготовка к собеседованию Java-разработчика остаётся управляемой, а не бесконечным чтением гигантских банков.
Свяжите теорию и лайвкод в один прогон
Короткое голосовое интервью помогает удержать HashMap, гонку и вопрос про транзакцию в одном разговоре, а не в трёх шпаргалках.
Как вести себя на собеседовании Java-разработчика
Как вести себя на собеседовании Java-разработчика, важнее заученных определений. Интервьюер покупает ход мысли.
- Уточните входы, ограничения по времени и памяти, что считать ошибкой.
- Начните с простого рабочего решения, затем улучшайте.
- Проговаривайте выбор коллекции и оценку сложности.
- Честно маркируйте пробел: «не тюнил GC в проде, смотрел логи пауз и метрики кучи».
- Для Spring и JPA называйте границу транзакции и профиль нагрузки, а не модный стартер.
- В конце оставьте время на вопросы про релиз, тесты и on-call.
Неудачный ход: молча писать 10 минут или блефовать про happens-before. Удачный ход: «Сначала сделаю корректно и потокобезопасно за O(n), потом обсудим память и пул.»
Какие вопросы задать работодателю на собеседовании Java-разработчика
Какие вопросы задать работодателю на собеседовании Java-разработчика, лучше привязать к стеку и сопровождению. Универсальный список «какой у вас тимбилдинг» здесь слабо работает.
- Какой основной стек сейчас: Spring Boot-версия, доступ к БД, очереди, и что нельзя трогать полгода?
- Как устроены релизы и откаты? Есть ли feature flags?
- Как тестируете: JUnit, Testcontainers, контрактные тесты, доля покрытия на критичном контуре?
- Где крутятся фоновые задачи и кто дежурит по инцидентам?
- Как смотрите p99 и ошибки: метрики, трейсы, алерты?
- Что ожидают от грейда в первые 90 дней: фичи, стабилизация, платформа?
- Как проходит ревью и кто принимает архитектурные решения?
Закрепите слабые темы Java-разработчика
Если на прогоне поплыли HashMap или @Transactional, выпишите эти два блока и пройдите короткий сценарий ещё раз. Так спокойнее идти на встречу, где спросят и Core, и Spring.