Специализация
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 в телеграм
Как избежать deadlock при работе с последовательными очередями?
Нельзя вызывать sync на той же последовательной очереди, в которой уже находитесь. Вместо этого следует использовать async или выполнять синхронный вызов на другой очереди, чтобы избежать ситуации, когда очередь ждёт сама себя.
Как избежать deadlock/livelock при работе с блокировками?
Избегайте вложенных блокировок.
Используйте таймауты (например, tryLock(timeout)).
Упорядочивайте блокировки (всегда получайте lockA перед lockB).
Чем Deadlock отличается от Livelock?
Deadlock: Потоки блокируют друг друга навсегда (ожидают ресурсы по кругу).
Livelock: Потоки активно работают, но не прогрессируют (например, из-за "вежливой" логики).
Что такое deadlock в базе данных и как его избежать?
Deadlock возникает, когда две транзакции ждут друг друга из-за блокировок строк или таблиц. Избежать можно упорядочиванием доступа к ресурсам, короткими транзакциями и ретраями.
Что такое взаимоблокировка (deadlock) в базах данных?
Взаимоблокировка (deadlock) возникает, когда две или более транзакции блокируют друг друга, ожидая освобождения ресурсов, занятых другой транзакцией. Например, транзакция A блокирует ресурс X и ждет ресурс Y, а транзакция B блокирует ресурс Y и ждет ресурс X. Ни одна из транзакций не может продолжить выполнение. СУБД автоматически обнаруживает взаимоблокировки и разрешает их, отменяя одну из транзакций (жертву deadlock), позволяя другой завершиться успешно.
Какие причины могут привести к возникновению deadlock при конкурентных запросах к базе данных и как их предотвращать?
Что такое deadlock и как он возникает?
В каких случаях вызов sync приводит к deadlock?
Как можно получить deadlock в serial queue?
Почему deadlock не возникает в concurrent queue?
Рейтинг:
5
Сложность:
7
Deadlock появляется, когда два запроса блокируют ресурсы друг друга в пересекающемся порядке: один заблокировал строку A и ждёт строку B, а другой — наоборот. Причины: несогласованный порядок обновлений, долгие транзакции, отсутствие индексов, смешивание SELECT FOR UPDATE и UPDATE на разных путях. Чтобы избегать deadlock: соблюдать единый порядок обновления сущностей, делать транзакции короткими, использовать правильные индексы, избегать сканирования больших таблиц под блокировками и по возможности минимизировать конкурирующие UPDATE по одним и тем же строкам.
Рейтинг:
5
Сложность:
7
Deadlock — это ситуация, когда потоки навсегда ждут друг друга. Каждый поток удерживает ресурс и ожидает освобождения другого. В результате выполнение останавливается. Deadlock чаще всего возникает из-за неправильной синхронизации. Это одна из самых опасных ошибок многопоточности.
Рейтинг:
5
Сложность:
8
Deadlock возникает, когда поток ждет завершения задачи, которая не может начаться. Чаще всего это происходит при вызове sync на той же очереди, в которой уже выполняется код. Очередь ждет сама себя. В результате выполнение останавливается навсегда. Это одна из самых частых ошибок при работе с GCD.
Рейтинг:
5
Сложность:
7
Deadlock в serial queue возникает, когда очередь ждёт выполнения задачи, которая не может начаться.
Чаще всего это происходит при вызове sync на той же очереди.
Очередь занята текущей задачей и не может выполнить следующую.
В результате приложение зависает.
Рейтинг:
4
Сложность:
6
В concurrent queue может выполняться несколько задач одновременно.
Поэтому очередь не блокируется одной задачей целиком.
Даже если используется sync, другие задачи могут быть выполнены параллельно.
Из-за этого классический deadlock возникает реже.
Рейтинг:
2
Сложность:
5
Рейтинг:
2
Сложность:
5
Рейтинг:
1
Сложность:
6
Рейтинг:
5
Сложность:
5
Рейтинг:
4
Сложность:
7