Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Для чего нужны Async/await?
async/await — это синтаксис, который упрощает работу с промисами, делая асинхронный код более похожим на синхронный. Функция с ключевым словом async всегда возвращает промис, а await приостанавливает выполнение функции до получения результата промиса. Это делает код более читаемым и упрощает обработку ошибок.
Как работает асинхронная итерация в ES6+ с использованием for-await-of?
Асинхронная итерация с использованием for-await-of позволяет работать с асинхронными итераторами, такими как асинхронные генераторы или промисы, которые возвращают данные постепенно. Оператор for-await-of ждет разрешения каждого промиса перед переходом к следующей итерации. Это удобно для обработки потоков данных или последовательных асинхронных операций.
Что такое WaitGroup?
WaitGroup в Go — это структура из пакета sync, позволяющая организовать ожидание завершения набора горутин. Она предоставляет методы для увеличения счетчика активных горутин, их завершения и блокировки выполнения до их завершения.
В чём разница между многопоточностью (CPU-bound) и асинхронностью (IO-bound) в .NET и как работают async/await?
CPU-bound задачи используют потоки и Parallel/Tasks для распределения вычислений между ядрами и могут потребовать lock/SemaphoreSlim. IO-bound операции (await httpClient.GetAsync) не блокируют поток — метод возвращает Task, освобождая поток для других задач, а по завершении I/O продолжает выполнение в пуле. async/await трансформирует метод в state machine, которая при встрече await регистрирует продолжение и возвращает Task без блокировки текущего потока.
В чём разница между async/await и GCD?
GCD (Grand Central Dispatch) предоставляет низкоуровневые очереди и синхронизированные вызовы sync/async, требуя явного управления задачами и колбэками. async/await — новый синтаксис на основе Swift Concurrency с Task и Actor, упрощает чтение асинхронного кода, позволяет писать его как последовательный, автоматически управляет жизненным циклом задач.
Может ли метод с async выполняться синхронно? Что происходит с потоком при await?
Почему запрещено использовать await внутри lock? Как lock реализован под капотом?
Как поток возвращается в пул потоков при выполнении await?
Как работают wait() и notify()? Где их можно вызывать?
Как работает связка wait(), notify(), notifyAll()?
Рейтинг:
2
Сложность:
6
Да, метод с async может выполняться синхронно, если результат уже доступен. При await поток освобождается, пока задача не завершится. Это позволяет использовать его для других операций, а не блокировать. После завершения задачи выполнение продолжается (возможно, в другом потоке).
Рейтинг:
2
Сложность:
4
await внутри lock может вызвать взаимоблокировку или нарушить поток выполнения. После await поток меняется, и блокировка не освобождается автоматически. lock компилируется в Monitor.Enter/Exit с try/finally, чтобы гарантировать освобождение блокировки даже при исключениях.
Рейтинг:
2
Сложность:
4
При await на незавершённой задаче:
Текущий поток возвращается в пул потоков.
Когда задача завершается, продолжение (continuation) ставится в очередь.
Пул потоков назначает любой свободный поток для выполнения продолжения.
Рейтинг:
1
Сложность:
6
wait() и notify() используются для координации потоков:
wait() освобождает монитор и переводит поток в ожидание
notify() пробуждает один случайный ожидающий поток
Вызывать можно только в synchronized блоках, иначе IllegalMonitorStateException
Рейтинг:
2
Сложность:
7
wait() — освобождает монитор объекта и переводит поток в режим ожидания.
notify() — пробуждает один случайный поток, ожидающий на этом мониторе.
notifyAll() — пробуждает все потоки, ожидающие на мониторе.
Рейтинг:
4
Сложность:
4
Рейтинг:
1
Сложность:
8
Рейтинг:
3
Сложность:
8
Рейтинг:
2
Сложность:
5
Рейтинг:
2
Сложность:
6