Вернуться в каталог собеседований

Лайвкодинг на собеседовании Middle Java-разработчика

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

Павел Сорокин
  • Опубликовано на YouTube:
  • Просмотры на YouTube: 3,5 тыс.
  • Лайки на YouTube: 79
Открыть на YouTube

Таймлайн

Коротко о видео

Запись посвящена live coding-секции мок-собеседования для Middle Java-разработчика. Кандидат получает класс с тремя методами и должен обеспечить вывод First, Second и Third в строгом порядке, хотя методы вызываются разными потоками. Сначала интервьюер предлагает проговорить возможные подходы, затем кандидат рассуждает о синхронизации, ожидании в цикле и состоянии, которое разрешает перейти к следующему методу. По ходу решения обсуждаются проблемы гонки данных, видимость изменений между потоками и различие между volatile и атомарными операциями. В финале кандидат объясняет, почему в конкретной последовательности инкрементов достаточно volatile: потоки изменяют переменную в разные моменты согласно установленному порядку.

Затронутые темы

Что взять на заметку

  • Перед написанием кода стоит сформулировать инвариант порядка выполнения потоков.
  • Ожидание состояния реализуют так, чтобы следующий поток не продолжил работу раньше нужного сигнала.
  • volatile обеспечивает видимость изменений между потоками, но не делает инкремент атомарным.
  • Отсутствие гонки зависит от порядка и взаимного исключения конкретных операций.

Рекомендуем посмотреть