25 многопоточных вопросов для интервью (с примерами ответов)

2 апреля 2021 г.

Многопоточность — важная концепция в программировании, особенно для Java-разработчиков. Если вы будете проходить собеседование на должность разработчика Java, вам, скорее всего, будут задавать вопросы о многопоточности. Как часть вашего подготовка к интервью, вам следует уделить время рассмотрению распространенных вопросов, связанных с многопоточностью. В этой статье мы рассмотрим некоторые часто задаваемые вопросы о многопоточном интервью и предоставим вам примеры ответов.

Связанный: Образцы резюме Java-разработчика

Многопоточные вопросы для интервью с примерами ответов

Вот 25 примеров вопросов и ответов, связанных с многопоточностью, которые помогут вам подготовиться к следующему собеседованию:

  1. Что такое нить?

  2. Что такое многопоточность?

  3. В чем разница между потоком и процессом?

  4. Зачем использовать многопоточность в ваших приложениях?

  5. Что такое пул потоков?

  6. В течение жизни потока, какие состояния он может иметь?

  7. Что такое состояние гонки?

  8. Что такое синхронизация?

  9. Почему вы можете использовать синхронизированный блок?

  10. Что такое переключение контекста?

  11. Можете ли вы объяснить, что такое планировщик потоков и его отношение к приоритету потоков?

  12. Что такое разделение времени?

  13. Почему вы можете описать поведение потока как непредсказуемое?

  14. Объясните технику занятого вращения и почему вы можете ее использовать.

  15. Что такое голодание потоков?

  16. Можно ли начать тему дважды?

  17. Можете ли вы описать тупиковую ситуацию?

  18. Что происходит, когда происходит livelock?

  19. В чем разница между методами wait() и sleep() в Java?

  20. Что такое поток демона?

  21. Почему вы должны переопределить метод run() в своем классе потока?

  22. Как можно добиться безопасности потоков?

  23. В чем разница между синхронным и асинхронным программированием?

  24. Как создать поток в Java?

  25. Как остановить поток в Java?

1. Что такое нить?

Интервьюер может спросить об этом, чтобы определить ваш программирование уровне и насколько вы знакомы с многопоточностью.

Пример: «Поток — это отдельный путь выполнения или подпроцесс. Внутри процесса вы можете иметь либо один поток, либо несколько потоков, совместно использующих одни и те же ресурсы процесса».

2. Что такое многопоточность?

Многопоточность — важная концепция программирования. Ваша способность объяснить многопоточность в нескольких предложениях может показать интервьюеру, насколько хорошо вы понимаете тему.

Пример: «Многопоточность — это возможность одновременного выполнения нескольких потоков. Хотя каждый поток использует одни и те же ресурсы процесса, они работают независимо друг от друга».

3. В чем разница между потоком и процессом?

Спрашивая об этом, интервьюер хочет убедиться, что вы понимаете основные концепции многопоточности.

Пример: «Процесс — это отдельное приложение или программа, тогда как поток — это подпроцесс внутри этого приложения или программы. Каждый процесс имеет свое собственное адресное пространство в памяти; потоки совместно используют свое адресное пространство».

4. Зачем использовать многопоточность в ваших приложениях?

Этот вопрос позволяет вам продемонстрировать интервьюеру, насколько хорошо вы оцениваете преимущества многопоточности.

Пример: «Поскольку каждый поток выполняется одновременно, многопоточность позволяет эффективно использовать ЦП. Вы можете запускать фоновые процессы, пока приложение получает вводимые пользователем данные. Кроме того, задачи могут выполняться быстрее, поскольку каждый поток выполняется независимо».

5. Что такое пул потоков?

Вопрос о пулах потоков может быть одним из способов, которым интервьюер определяет, знаете ли вы, как писать эффективный код.

Пример: «Пул потоков — это набор рабочих потоков, созданных при запуске, которым можно назначать задачи по мере необходимости, а затем возвращать их в пул после завершения. Основное преимущество использования пула потоков — наличие запаса уже созданных потоки, когда они вам нужны, что повышает производительность приложения».

6. Какие состояния потока могут быть в течение его жизни?

Знание различных состояний потока может показать, что вы знаете, как работают потоки, и что вы можете отлаживать нефункционирующий поток.

Пример: «У потока может быть пять состояний: новый, готовый к работе, работающий, ожидающий/заблокированный и мертвый/прекращенный».

7. Что такое состояние гонки?

Этот вопрос затрагивает одну из опасностей многопоточности, поэтому вы захотите продемонстрировать осведомленность об этой проблеме.

Пример: «Состояние гонки возникает, когда несколько параллельных потоков соревнуются за то, чтобы быть первым запущенным. Если поток, выигравший гонку, не был тем, который должен был запуститься первым, код может демонстрировать неожиданное поведение. Проблема может быть решена с помощью синхронизация».

8. Что такое синхронизация?

Понимание синхронизации показывает, что вы знаете, как уменьшить некоторые опасности многопоточности.

Пример: «Синхронизация заставляет потоки запускаться по одному, чтобы предотвратить состояние гонки или несколько потоков, пытающихся выполнить одну и ту же задачу».

9. Почему вы можете использовать синхронизированный блок?

Этот вопрос показывает, что вы понимаете другие способы использования синхронизации для управления несколькими потоками.

Пример: «Синхронизированный блок позволяет вам обозначить определенную часть метода как синхронизированную. То есть только одному потоку будет разрешено работать до его завершения, отдавая приоритет этому потоку над другими».

10. Что такое переключение контекста?

Интервьюер может спросить вас о переключении контекста, чтобы узнать, понимаете ли вы, как многопоточность работает на уровне ЦП.

Пример: «Переключение контекста — это место, где текущее состояние потока или процесса сохраняется, чтобы выполнение этого потока можно было возобновить позднее. Это позволяет одному процессору управлять несколькими потоками или процессами».

11. Можете ли вы объяснить, что такое планировщик потоков и его связь с приоритетом потоков?

Это еще один вопрос, касающийся того, как многопоточность работает на уровне ЦП.

Пример: «Планировщик потоков — это то, что выделяет процессорное время потокам и определяет порядок их выполнения».

12. Что такое разделение времени?

Ваш ответ на этот вопрос может показать интервьюеру, что вы понимаете, как работает планировщик потоков.

Пример: «Разделение времени — это процесс, используемый планировщиком потоков для разделения процессорного времени между доступными активными потоками».

13. Почему вы можете охарактеризовать поведение потока как непредсказуемое?

Интервьюеры могут задать этот вопрос, чтобы узнать, понимаете ли вы неотъемлемые риски, связанные с разными ЦП, определяющими расписание потоков.

Пример: «Поскольку планирование потоков определяется ЦП, разные ЦП могут отдавать приоритет разным потокам. Это означает, что существует вероятность того, что два ЦП не будут запускать ваши потоки в одном и том же порядке, создавая непредсказуемость при выполнении вашего кода».

14. Объясните технику занятого вращения и почему вы можете ее использовать.

Этот вопрос показывает понимание популярных методов работы с потоками.

Пример: «Занятое вращение — это когда вы приостанавливаете поток, заставляя его запускать пустой цикл в течение определенного периода времени. В отличие от других методов, таких как wait() или sleep(), занятое вращение не отказывается от управления ЦП и, следовательно, сохраняет кеш ЦП. .”

15. Что такое голодание потоков?

Ваша осведомленность о голодании потоков может быть полезна для отладки кода.

Пример: «Голодание потока — это когда недостаточно ресурсов ЦП для выполнения потока. Это может произойти с потоками с низким приоритетом или потоками, которые понижены в должности в пользу других потоков».

16. Можно ли запустить тему дважды?

Этот вопрос показывает, что вы понимаете состояние потока и жизненный цикл потока.

Пример: «После выполнения потока он считается мертвым. Вы не можете перезапустить мертвый поток».

17. Можете ли вы описать тупиковую ситуацию?

Взаимная блокировка — это проблема, которая может привести к зависанию кода. Ваша способность объяснить проблему указывает на то, что вы также можете знать, как ее решить.

Пример: «Взаимоблокировка — это ситуация, когда несколько потоков ждут друг друга, чтобы освободить ресурсы ЦП, чтобы они могли работать. Это может произойти, когда, например, один поток имеет исключительный приоритет, но ему нужны ресурсы из ожидающего потока или всех потоков. зависят друг от друга, чтобы высвободить необходимые ресурсы».

18. Что происходит, когда происходит лайвлок?

Этот вопрос является продолжением предыдущего и призван показать ваше понимание этой потенциальной проблемы с многопоточностью.

Пример: «Живая блокировка аналогична ситуации взаимоблокировки, за исключением того, что при динамической блокировке состояние потоков изменяется без какого-либо прогресса. Например, если все потоки застревают в бесконечных циклах».

19. В чем разница между методами wait() и sleep() в Java?

Эти два распространенных метода Java делают одно и то же, поэтому важно различать их функции.

Пример: «Метод wait() приостанавливает поток и ждет, пока не перестанут вызываться методы notify() или notifyAll() из других потоков. возобновляет исполнение».

20. Что такое поток демона?

Демон — это полезный тип потока, который работает иначе, чем обычные потоки, поэтому вас могут спросить об этом.

Пример: «Поток демона — это поток с низким приоритетом. Он может предоставлять фоновые услуги или поддержку другим потокам. Когда эти потоки умирают, поток демона автоматически завершается».

21. Почему вы должны переопределить метод run() в вашем классе потока?

Ваш ответ на этот вопрос покажет интервьюеру, что вы понимаете основные концепции программирования на Java и то, как работает выполнение потоков.

Пример: «Когда вы вызываете метод start() потока, он автоматически вызывает метод run(), связанный с этим новым потоком. Если вы не переопределили метод run(), поток ничего не сделает».

22. Как можно добиться безопасности потоков?

Безопасность потоков — важная концепция, поскольку она предотвращает зависание или сбой кода. Вы должны быть готовы ответить на вопросы об этом.

Пример: «Вы можете добиться безопасности потоков с помощью нескольких методов, включая синхронизацию, использование ключевого слова Volatile или использование атомарных классов-оболочек».

23. В чем разница между синхронным и асинхронным программированием?

Вы можете столкнуться с этим вопросом о методах программирования, потому что они могут повлиять на производительность вашего кода.

Пример: «Синхронное программирование — это когда одному потоку назначается одна задача. Асинхронное программирование — это когда одна задача распределяется между несколькими потоками».

24. Как создать поток в Java?

Этот вопрос демонстрирует ваше знание Java.

Пример: «Вы можете создать поток в Java либо путем реализации интерфейса Runnable в классе и создания объекта потока, либо вы можете создать класс, который расширяет класс потока».

25. Как остановить поток в Java?

Это можно считать вопросом с подвохом, поэтому ваш ответ покажет, что вы понимаете, как работать с потоками в Java.

Пример: «В Java нет прямого способа остановить поток. Часто вам приходится полагаться на тот факт, что поток умрет, когда завершит выполнение, чтобы остановить его. Если вам нужно вручную убить поток, вы можете использовать Изменчивая логическая переменная в потоке, которая вызовет исключение при запуске из другого потока».

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *