Blog about Android
-
В каких случаях View уничтожается, а Fragment живет? Зачем это может быть нужно?
Это происходит, когда: ▶️ Fragment переходит в состояние onDestroyView(), но не в onDestroy() Пример:При навигации внутри ViewPager (до ViewPager2) или при использовании фрагментов с FragmentTransaction().replace() / addToBackStack(), когда пользователь покидает экран, но Fragment остаётся в памяти, потому что: Android освобождает ресурсы UI (View), но сохраняет сам Fragment, чтобы быстрее восстановить UI при возврате назад. Инстанс…
-
Что такое атомарные операции? Какие механизмы их реализации можешь перечислить? Атомарны ли операции присваивания?
Атомарные операции: Атомарные операции — это операции, которые выполняются полностью или не выполняются вовсе, не допуская частичной модификации данных между потоками. Механизмы реализации: Атомарны ли операции присваивания? Операции присваивания примитивов (кроме long и double) атомарны, но не для сложных объектов.
-
Как из HashMap-а сделать потокобезопасный HashMap?
Чтобы сделать потокобезопасный HashMap, можно использовать следующие подходы: ConcurrentHashMap обычно предпочтительнее, так как предоставляет лучшую производительность в многопоточной среде.
-
Что делает synchronized?
synchronized — это ключевое слово в Java, которое используется для управления доступом к критическим секциям кода между несколькими потоками. Когда метод или блок кода помечен как synchronized, только один поток может получить доступ к этому коду в одно и то же время. Основные функции synchronized:
-
Как сделать так, чтобы поток не кэшировал данные? Что делает volatile?
Чтобы поток не кэшировал данные в Java, нужно использовать ключевое слово volatile для переменной. Это гарантирует, что каждый раз при обращении к переменной поток будет читать её актуальное значение из основной памяти, а не из кэша потока. Что делает volatile:
-
Как потоки в себе хранят данные, как к себе обращаются?
Как потоки хранят данные: Как потоки обращаются к данным:
-
Какие знаешь механизмы реализации Concurrency? Semaphore, CountDownLatch — что такое, зачем нужны, какие бывают?
Зачем нужны: Используются для координации потоков и синхронизации их доступа к общим ресурсам. Механизмы реализации Concurrency:
-
Расскажи DeadLock, LiveLock, Starvation, SplitBrain
Основные понятия в многопоточности: Deadlock (Взаимная блокировка): Ситуация, когда два или более потоков ждут друг друга для освобождения ресурсов, что приводит к бесконечному ожиданию. Livelock (Живой блок): Потоки продолжают изменять свое состояние, чтобы избежать deadlock-а, но не могут прогрессировать, так как постоянно «уступают» друг другу ресурсы. Starvation (Голодание): Один поток постоянно отказывается от доступа к…
-
Что такое Race condition?
Race condition — это ситуация в многопоточном программировании, когда результат работы программы зависит от порядка или времени выполнения потоков. Она возникает, когда несколько потоков одновременно пытаются получить доступ и изменить общий ресурс, и, если доступ не синхронизирован, это может привести к некорректным или непредсказуемым результатам. Пример: Если два потока одновременно изменяют одно и то же…
-
Чем отличаются StringBuffer от StringBuilder? Когда использовать StringBuilder?
Различия между StringBuffer и StringBuilder: Когда использовать StringBuilder: Используйте StringBuilder в однопоточных приложениях или если не требуется синхронизация. Он предпочтителен для работы с динамическими строками в случаях, когда нет необходимости в потокобезопасности, поскольку он быстрее.