Blog about Android
-
Что делает 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 в однопоточных приложениях или если не требуется синхронизация. Он предпочтителен для работы с динамическими строками в случаях, когда нет необходимости в потокобезопасности, поскольку он быстрее.
-
Что такое StringPool? Почему предпочтительнее пароли передавать в CharSequence вместо String?
String Pool — это специальная область памяти в Java, где хранятся строковые литералы. Когда создается строка, JVM проверяет пул на наличие той же строки. Если она уже есть, то возвращает существующую ссылку, а не создает новый объект. Это помогает уменьшить потребление памяти и ускорить работу с часто используемыми строками. Почему пароли предпочтительнее передавать в CharSequence:
-
Как передаются объекты в методы? Что случится с объектом, который мы передали в метод и занулили параметр?
В Java объекты передаются в методы по ссылке (точнее, передается копия ссылки на объект). Это означает, что внутри метода можно изменять состояние объекта, и эти изменения будут видны снаружи метода. Однако если внутри метода параметр будет занулен, только локальная копия ссылки станет null, но сам объект в куче останется неизменным, если на него есть другие…
-
Расскажи про типы ссылок в Java
В Java существует четыре основных типа ссылок: Эти типы ссылок помогают управлять памятью и предотвращать утечки.
-
Что такое jni-reference?
JNI Reference (Java Native Interface Reference) — это ссылка, используемая для взаимодействия между Java кодом и нативным кодом, написанным на C или C++. В JNI используются различные типы ссылок для управления объектами: JNI-ссылки позволяют Java-коду вызывать нативные методы и работать с памятью.
-
Заколлектятся ли две стронг ссылки друг на друга? В каком случае не заколлектятся?
Нет, объекты, которые ссылаются друг на друга через strong-ссылки, не будут автоматически собраны сборщиком мусора (GC), если на них есть живые ссылки от других объектов (например, из стека или кучи). Это создаст циклическую ссылку, но она не станет проблемой для GC, пока хотя бы один объект в цикле имеет ссылку из GC Root (например, из…