Специализация
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 в телеграм
Что такое mutex, какие они бывают и как их использовать?
Mutex — это механизм синхронизации, который предотвращает одновременный доступ к разделяемым ресурсам несколькими горутинами. В Go есть два типа мьютексов: sync.Mutex (блокирует доступ) и sync.RWMutex (разделяет доступ для чтения и записи). Для работы с мьютексами нужно использовать методы Lock и Unlock.
Какие примитивы синхронизации вы знаете кроме lock (например, ReaderWriterLockSlim, Mutex)?
Основные примитивы:
Monitor (база для lock),
Mutex (межпроцессная блокировка),
Semaphore/SemaphoreSlim (ограничение параллельного доступа),
ReaderWriterLockSlim (оптимизация для частого чтения),
AutoResetEvent/ManualResetEvent (сигнализация между потоками),
Barrier (синхронизация этапов).
Чем Mutex отличается от RWMutex (блокировка записи vs параллельное чтение)?
Mutex блокирует доступ полностью, а RWMutex позволяет множеству горутин читать одновременно, но блокирует при записи. RWMutex эффективнее, когда чтение происходит чаще записи.
Объясни, что такое striped locking и когда он эффективнее обычного mutex.
Striped locking — это подход, когда один общий ресурс разделяется на множество независимых сегментов, каждый со своим mutex. Это снижает блокировки, позволяя параллелить операции.
Чем semaphore отличается от mutex?
Semaphore и mutex решают похожие задачи, но работают по-разному. Mutex предназначен для взаимного исключения и допускает только один поток в критическую секцию. Semaphore может разрешать доступ нескольким потокам одновременно. Mutex обычно привязан к потоку-владельцу, semaphore — нет. Semaphore более гибкий, но и более опасный в неправильном использовании.
Что происходит с goroutine при блокирующих операциях (каналы, mutex, I/O)?
Рейтинг:
5
Сложность:
5
Когда goroutine выполняет блокирующую операцию, она не блокирует поток целиком. Runtime переводит goroutine в состояние ожидания и может запустить другую goroutine на том же потоке. Когда операция завершается, goroutine возвращается в очередь выполнения. Это позволяет эффективно использовать ресурсы.
Рейтинг:
3
Сложность:
8
Рейтинг:
2
Сложность:
5
Рейтинг:
1
Сложность:
7
Рейтинг:
3
Сложность:
9
Рейтинг:
5
Сложность:
7