Когда synchronized недостаточно для предотвращения гонки потоков? синхронизация выполняется с помощью мониторного замка механизм действует на уровне одного объекта (монитора) недостаточен при зависимостях между…
В каких случаях следует использовать Hash-индексы? Предназначены для индексации при точном поиске ключей Дают доступ за константное время O(1) Не подходят для диапазонных запросов и сортировки Наиболее эффективны при…
В каких случаях следует использовать корутины? организация лёгкой конкуренции выполнение асинхронных операций без блокировки запуск параллельных задач с меньшими издержками, чем у потоков удобная работа в реактивном…
контекст: Android, компоненты приложения По умолчанию Service выполняется в главном (UI) потоке приложения Отдельный поток автоматически не создаётся Тяжёлые операции могут заблокировать UI Для фоновых задач применяют…
Ключевое отличие Atomic-классов от synchronized Atomic-классы выполняют операции без блокировок В основе их работы лежит CAS (Compare-And-Swap) Они обеспечивают атомарность отдельных операций synchronized использует…
Mutex и RWMutex: эксклюзивная запись и параллельное чтение синхронизация потоков в многопоточных приложениях Mutex: монопольный доступ и блокировка всех операций RWMutex: отдельные режимы блокировки для чтения и…
механизм надежной установки соединения в TCP три шага: SYN → SYN-ACK → ACK SYN: клиент начинает процедуру соединения SYN-ACK: сервер подтверждает запрос клиента и выделяет необходимые ресурсы ACK: клиент подтверждает,…
Dispatchers.IO и Dispatchers.Default: отличия и сценарии использования Назначение: Dispatchers.IO применяется для блокирующего ввода-вывода, а Dispatchers.Default — для задач с высокой нагрузкой на CPU Пул потоков: IO…
Ключевые различия async/await и GCD async/await — языковая конструкция и синтаксический сахар для асинхронного программирования позволяет писать и читать асинхронные функции почти так же, как последовательный код GCD…
Чем отличаются буферизированный и небуферизированный каналы и какой из них быстрее передаёт данные? Каналы Go — средство синхронизации и обмена данными между goroutine Небуферизированный канал не хранит элементы:…
память и синхронизация/Java concurrency volatile делает изменения видимыми для других потоков, однако не гарантирует атомарность операций Atomic-переменные выполняют атомарные операции — чтение, запись и инкремент —…