Вернуться в видеотекуПубличное собеседование по многопоточности в Android / Сергей Боиштян (Авито)
Запись публичного собеседования по многопоточности в Android и Java. Включает задачи на видимость данных, обсуждение пулов, синхронизации и ответы на вопросы аудитории.
- Направление
- Mobile
- Формат
- Видео
- Компания
Авито- Длительность
- 1 ч 25 мин
Коротко о видео
Публичное учебное собеседование по многопоточности для Android-разработчика: кандидат отвечает на вопросы, а интервьюер уточняет и развивает рассуждения. Обсуждаются Java Memory Model, видимость данных между потоками, volatile, пулы потоков, переключение контекста, wait/notify, блокирующие и неблокирующие примитивы. В финале участники разбирают подходы к подготовке, книги и практическую ценность глубокого понимания конкурентности.
Затронутые темы
Что взять на заметку
- На собеседовании важно не только назвать synchronized, volatile или Semaphore, но и последовательно объяснить, какие гарантии видимости и порядка нужны в конкретной ситуации.
- Для CPU-bound задач размер пула обычно стоит ограничивать числом ядер, а для I/O-bound задач допустима более высокая параллельность, поскольку потоки часто ждут сеть или диск.
- Нельзя выводить порядок наблюдаемых значений общих переменных только из порядка строк в исходном коде: без синхронизации существенны видимость, кеши и переупорядочивание.
- Активный polling расходует процессорное время; для ожидания события обычно подходят wait/notify, Condition, семафоры или очереди, а spin-wait оправдан лишь при очень коротком ожидаемом ожидании.
- При высокой конкуренции нужно сокращать критическую секцию и, если операция допускает сериализацию, рассматривать очередь с одним обработчиком вместо множества ожидающих или крутящихся потоков.
- Для подготовки полезно разбирать маленькие задачи на варианты межпоточных событий: они быстрее выявляют понимание Java Memory Model, чем заучивание перечня API.
- По мнению интервьюера, глубина вопросов должна соответствовать уровню: для начинающего важнее базовые примитивы, а для опытного разработчика — рассуждение о железе, кешах и проектных компромиссах.