ВОПРОС → ПЕРЕВОД → ОТВЕТ → РАЗБОР
Вопросы на собеседовании Java-разработчика на английском
Банк из двадцати вопросов для Java-собеседования на английском: модификаторы и инициализация, контракт equals и hashCode, устройство HashMap, volatile и виртуальные потоки, сборка мусора и исключения. Примеры ответов опираются на Java 21 и показывают, как коротко дать определение и сразу перейти к практическому выводу.
20 примеров · Чтение без регистрации
Разберите вопрос. Ответьте своими словами.
Раскройте ответ, сравните ход мысли и проговорите свою версию вслух.
Технические вопросы
01How do the JDK, the JRE and the JVM relate?Как связаны JDK, JRE и JVM?
Пример ответа · EN
The JVM executes bytecode and manages memory. The JRE is the runtime environment: the JVM plus the standard class libraries. The JDK adds development tools such as the javac compiler and the debugger. Since Java 11, Oracle no longer ships a separate JRE, so in practice teams install a JDK or build a custom runtime with jlink.Как построить ответ
Объясните вложенность: JVM внутри JRE, JRE внутри JDK. Уточнение про Java 11 и jlink показывает знание современной практики. Не называйте JVM компилятором — компилирует javac.
02What does final mean for a field, a method and a class?Что означает final для поля, метода и класса?
Пример ответа · EN
A final field can be assigned only once, a final method cannot be overridden, and a final class cannot be extended. For a reference field, final fixes the reference, not the object it points to, so a final list can still be modified. Final fields also get special visibility guarantees after construction. I use final fields to build immutable classes.Как построить ответ
Разберите три случая по фразе на каждый, затем важное уточнение про ссылку. Упоминание гарантий видимости — плюс, если вы готовы его пояснить. Связка can be assigned only once удобна для таких определений.
03When would you choose an abstract class over an interface?Когда вы выберете абстрактный класс вместо интерфейса?
Пример ответа · EN
An interface describes a capability that unrelated classes can share, and a class can implement many interfaces. An abstract class suits a family of closely related types that share state or constructor logic, but a class can extend only one. Since Java 8, interfaces can have default methods, so shared behaviour alone is no longer a reason. I start with an interface and add an abstract base class only when it removes real duplication.Как построить ответ
Сравнивайте по состоянию, множественности и современным возможностям интерфейсов. Упоминание default-методов показывает актуальные знания. Заканчивайте практическим правилом выбора.
04In what order are constructors and initializers run?В каком порядке выполняются конструкторы и блоки инициализации?
Пример ответа · EN
Static initializers run once, when the class is initialized, and the parent class goes first. When an object is created, the constructor first calls the superclass constructor. Then the instance field initializers and instance initializer blocks of the class run in source order, and finally the rest of the constructor body. Calling an overridable method from a constructor is risky, because subclass fields are not initialized yet.Как построить ответ
Разделите статическую и экземплярную инициализацию и идите сверху вниз по иерархии. Последнее предложение — практический вывод, который ценят интервьюеры. Слова first, then, finally держат порядок.
05How does overloading differ from overriding?Чем перегрузка отличается от переопределения?
Пример ответа · EN
Overloading means several methods with the same name but different parameter lists; the compiler picks one at compile time. Overriding means a subclass provides its own implementation of an inherited instance method with the same signature; the JVM chooses it at runtime by the object's actual type. I add @Override so that the compiler catches a signature mismatch. Static methods are hidden, not overridden.Как построить ответ
Ключ — когда выбирается метод: при компиляции или во время выполнения. Аннотация @Override — практическая деталь, которая показывает опыт. Уточнение о статических методах часто проверяют отдельным вопросом.
06Why must equals and hashCode be overridden together?Почему equals и hashCode нужно переопределять вместе?
Пример ответа · EN
The contract says that equal objects must have equal hash codes. Hash-based collections such as HashMap and HashSet use the hash code to find a bucket and then call equals. If I override only equals, two equal objects can land in different buckets, so lookups fail. I base both methods on the same fields, or use a record, which generates them.Как построить ответ
Сначала контракт, затем механизм коллекций, затем последствия нарушения. Упоминание record показывает знание современного Java. Не говорите, что одинаковый hashCode означает равенство: обратное не требуется.
07How does a HashMap find a value by key?Как HashMap находит значение по ключу?
Пример ответа · EN
It calculates the key's hash code, mixes its bits and uses the result to choose a bucket in an internal array. Inside the bucket, it compares keys with equals. Since Java 8, a bucket with many collisions can turn into a balanced tree, which keeps lookups fast. When the map grows past its load factor, it resizes and redistributes the entries.Как построить ответ
Пройдите путь поиска шаг за шагом: hash → бакет → equals. Детали о деревьях и load factor добавляют глубины, но держите их короткими. Не обещайте O(1) без оговорки: это среднее время, а не гарантия.
08When would you use ArrayList instead of LinkedList?Когда вы выберете ArrayList вместо LinkedList?
Пример ответа · EN
ArrayList stores elements in an array, so access by index is fast and iteration is cache-friendly. LinkedList makes insertion cheap only when you already hold a position, and each node costs extra memory. In practice, I use ArrayList almost everywhere and ArrayDeque for queues. I would choose LinkedList only after measuring a real benefit.Как построить ответ
Сравните структуру хранения и следствия для доступа и памяти. Практический вывод — ArrayList по умолчанию, ArrayDeque для очередей. Не повторяйте миф «вставка в LinkedList всегда быстрее»: поиск позиции занимает линейное время.
09What happens if you remove items from a list while iterating over it?Что произойдёт, если удалять элементы списка во время обхода?
Пример ответа · EN
With a for-each loop over an ArrayList, removing an element changes the list's modification count, and the iterator throws ConcurrentModificationException on the next step. The check is fail-fast on a best-effort basis, so it detects bugs but is not a safety mechanism. I use Iterator.remove() or removeIf instead. For lists shared between threads, I choose a concurrent collection.Как построить ответ
Назовите исключение, объясните механизм и дайте правильный способ. Оговорка best-effort показывает внимательное чтение документации. Совет про потоки — естественный переход к следующей теме.
10Why is String immutable, and when do you use StringBuilder?Почему String неизменяем и когда нужен StringBuilder?
Пример ответа · EN
Immutability makes strings safe to share between threads, to keep in the string pool and to use as map keys. Every change creates a new String object. When I build a string in a loop, I use StringBuilder to avoid creating many temporary objects. For a simple concatenation in one expression, the compiler already optimises it, so plain + is fine.Как построить ответ
Ответ из двух частей — зачем неизменяемость и когда она мешает. Последняя фраза предупреждает преждевременную оптимизацию. Связка to avoid … помогает объяснять причину выбора.
11What does the volatile keyword guarantee?Что гарантирует ключевое слово volatile?
Пример ответа · EN
A write to a volatile field becomes visible to other threads that read it later, and it also orders the actions around it through a happens-before relationship. It does not make compound actions atomic, so count++ on a volatile field can still lose updates. I use volatile for simple flags such as a stop signal. For counters, I use AtomicInteger or a lock.Как построить ответ
Чётко разделите видимость и атомарность — это суть вопроса. Пример с count++ — классическая проверка. Термин happens-before уместен, если вы можете пояснить его своими словами.
12How does synchronized prevent a race condition?Как synchronized предотвращает состояние гонки?
Пример ответа · EN
A synchronized block takes the monitor of an object, so only one thread at a time can run code guarded by that monitor. Releasing the monitor also makes the changes visible to the next thread that takes it. I keep the critical section small and lock on a private object. Taking several locks in different orders can cause a deadlock.Как построить ответ
Объясните две гарантии: взаимное исключение и видимость. Практика — маленькая критическая секция и приватный объект блокировки. Упоминание взаимной блокировки показывает понимание рисков.
13Why use an ExecutorService instead of creating threads directly?Зачем ExecutorService, если можно создавать потоки напрямую?
Пример ответа · EN
An ExecutorService separates the tasks from the way they run. It reuses threads from a pool, limits how many run at once and returns a Future for results and errors. It also lets me shut work down in a controlled way. Creating a thread per task is harder to manage and can exhaust memory under load.Как построить ответ
Перечислите выгоды через задачи разработчика: переиспользование, лимит, результат, остановка. Сравните с наивным вариантом в одном предложении. Если работали с конкретным пулом, назовите его и причину выбора.
14What problem do virtual threads solve?Какую задачу решают виртуальные потоки?
Пример ответа · EN
Virtual threads, final since Java 21, are lightweight threads managed by the JVM rather than the operating system. When one blocks on I/O, the JVM unmounts it from its carrier thread, so the carrier can run other work. That lets the simple thread-per-request style scale to many concurrent requests. They do not speed up CPU-heavy code, and there is no point in pooling them.Как построить ответ
Начните с задачи — масштабирование блокирующего кода — и объясните механизм. Ограничения так же важны, как преимущества. Указание версии Java показывает, что вы следите за развитием платформы.
15How does the garbage collector decide what to free?Как сборщик мусора решает, что освободить?
Пример ответа · EN
The collector starts from GC roots, such as local variables on thread stacks and static fields, and finds every object reachable from them. Unreachable objects can be reclaimed. Many HotSpot collectors are generational, because most objects die young. In practice, I watch for leaks caused by references that stay reachable, such as an ever-growing static cache.Как построить ответ
Объясните достижимость от корней — это основа. Поколения упомяните коротко. Пример утечки через статический кэш показывает, что сборщик не спасает от логических ошибок.
16How do checked and unchecked exceptions differ?Чем отличаются проверяемые и непроверяемые исключения?
Пример ответа · EN
Checked exceptions must be declared or handled, and the compiler enforces it. Unchecked exceptions extend RuntimeException or Error and do not need that. I use checked exceptions for expected situations that a caller can recover from, and unchecked ones for programming errors such as invalid arguments. I never catch an exception just to ignore it.Как построить ответ
Дайте техническое различие, затем правило выбора. Последняя фраза отвечает на частый дополнительный вопрос о «проглатывании» исключений. Можно добавить, что Error без особой причины не ловят.
17How does try-with-resources close resources?Как try-with-resources закрывает ресурсы?
Пример ответа · EN
Any object that implements AutoCloseable can be declared in the try header. When the block ends, normally or with an exception, the resources are closed in reverse order of declaration. If closing also throws, that exception is added as suppressed to the main one, so no error is lost. It replaces long finally blocks.Как построить ответ
Назовите условие (AutoCloseable), порядок закрытия и поведение исключений. Деталь про suppressed-исключения отличает подготовленного кандидата. Сравнение с finally даёт контекст.
HR-вопросы
18Tell me about a performance problem you solved in a Java service.Расскажите о проблеме производительности, которую вы решили в Java-сервисе.
Пример ответа · EN
Our order service slowed down every afternoon. I compared heap dumps and profiles and found that a cache had no size limit, so garbage collection pauses kept growing. I replaced it with a bounded cache and added a metric for its size. The pauses dropped, and the metric helped us spot similar issues later.Как построить ответ
STAR: ситуация, действия с инструментами, результат и вывод. Назовите инструменты, которыми действительно пользовались. Пример условный — замените его своей историей и цифрами.
19How do you decide when to upgrade the Java version?Как вы решаете, когда обновлять версию Java?
Пример ответа · EN
I prefer to move between long-term support releases, such as from 17 to 21. First I check that our frameworks and libraries support the new version, then I run the full test suite and a load test on staging. I upgrade one service first and watch its metrics before rolling out to the rest.Как построить ответ
Интервьюер смотрит на взвешенность: поддержка библиотек, тесты, поэтапный выкат. Упоминание LTS показывает знание релизного цикла. Если решение принимала команда, говорите we и опишите свою роль.
20Describe a concurrency bug you had to track down.Опишите ошибку многопоточности, которую вам пришлось искать.
Пример ответа · EN
A report sometimes showed totals that were slightly too low. I suspected a race, reproduced it with a stress test and found a shared HashMap updated from several threads. I replaced it with ConcurrentHashMap and its merge method. I also added the stress test to CI, so the bug cannot quietly return.Как построить ответ
Покажите путь: симптом → гипотеза → воспроизведение → исправление → защита от повтора. Последний шаг особенно ценят. Пример условный — используйте свой случай.
Теперь — под вашу вакансию
Банк помогает повторить основы. Для конкретной позиции начните подготовку по требованиям вакансии.
Подготовиться под свою вакансиюРегистрация нужна для работы со своей вакансией. Вопросы банка не копируются автоматически.
Перед подготовкой
На какую версию Java рассчитаны ответы?
На Java 21 — текущую LTS-версию на момент подготовки. Где поведение менялось между версиями (default-методы, отдельный JRE, виртуальные потоки), это сказано прямо в ответе.
Здесь есть вопросы по Spring?
Нет. Подборка покрывает язык и платформу, которые спрашивают в любой Java-команде. Вопросы по Spring, Hibernate и другим фреймворкам лучше готовить под стек конкретной вакансии.
Как говорить о многопоточности, если опыта мало?
Опишите гарантии своими словами — видимость, атомарность, порядок — и честно скажите, где применяли это сами. Интервьюер чаще проверяет понимание рисков, чем знание всех классов java.util.concurrent.
Почему в HR-вопросах условные примеры?
Это образец структуры: ситуация, действия, результат, вывод. Ваш ответ должен строиться на собственном проекте, иначе уточняющие вопросы быстро покажут расхождение.
Как подготовиться под конкретную вакансию?
Нажмите «Подготовиться под свою вакансию»: после регистрации добавьте описание, и подготовка подберёт вопросы под требования вакансии.
← Все ролиОбщий гайд подготовкиТренажёр слов
Проверено: Владелец BroLango ·
