Для чего использовали многопоточность в проектах
Что проверяют
Был ли у вас реальный опыт с конкурентностью или только знание теории. Интервьюер слушает, какую задачу вы решали, какими средствами и какие проблемы встретили. Следом почти всегда идёт «как вы защищали общее состояние» или «как это тестировали».
Как отвечать
Возьмите одну-две истории и расскажите по схеме: задача, почему последовательно не подходило, чем распараллелили, что сломалось, какой результат. Цифры должны быть ваши и с базой: время обработки было и стало, задержка p95, пропускная способность. Сценарии, на которые можно опереться:
- параллельные вызовы сервисов: собрать ответ из трёх API через
CompletableFuture.supplyAsyncсо своим пулом иallOf, с таймаутом черезorTimeout; - пакетная обработка: разбор файлов, миграции, пересчёт отчётов через
ExecutorServiceс ограниченной очередью, чтобы не съесть память; - фоновые задачи:
@Asyncи@Scheduledв Spring, рассылки, прогрев кэша; - потребители очередей: несколько консьюмеров Kafka, где параллелизм упирается в число партиций и
concurrencyлистенера; - виртуальные потоки: если переводили на них I/O-нагруженный сервис на Java 21+, расскажите, что изменилось.
Назовите, чем обеспечивали корректность: ConcurrentHashMap, атомики, неизменяемые объекты, ReentrantLock, идемпотентная обработка. И чем диагностировали: thread dump через jstack или jcmd, JFR, метрики пулов.
Если писать многопоточный код на работе не приходилось, так и скажите. Покажите, где он был неявно (пул потоков Tomcat, @Async), и расскажите про учебный проект, где вы осознанно разбирались с гонками и дедлоками.
Где спотыкаются
Называют результат вроде «производительность выросла на 40%» без базовой метрики и способа замера. Первое же уточнение, что именно мерили, разваливает ответ.
Отправляют блокирующие вызовы в supplyAsync без своего пула. Тогда задачи уходят в ForkJoinPool.commonPool() и отнимают потоки у параллельных стримов всего приложения.
Говорят только об ускорении и молчат о проблемах. Опытный кандидат сам рассказывает про гонку, дедлок или утечку потоков, которые встретил, и как их нашёл.