Blog about Android
-
Какие знаешь механизмы реализации 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 (например, из…
-
Как GC понимает, что надо переместить объект из Eden в Old?
GC в Java использует механизм возрастных порогов для перемещения объектов из Eden в Old Generation. Когда объект создается, он размещается в области Eden. Если объект переживает несколько сборок мусора (Minor GC), он перемещается в одну из областей Survivor (S0 или S1). Каждый раз, когда объект переживает сборку мусора в Survivor, его возраст увеличивается. Когда объект…
-
Расскажи про поколения памяти при сборке мусора
В Java модель памяти для сборки мусора делится на несколько поколений:
-
Что такое монитор в Java, как их можно реализовать? Как он реализован по умолчанию?
Монитор — это механизм синхронизации, который используется для управления доступом к общим ресурсам между потоками. Каждый объект в Java имеет связанный с ним монитор, который позволяет управлять многопоточностью. Как работает монитор: Реализация: По умолчанию монитор реализован в JVM, и при вызове синхронизированных методов или блоков объект блокируется, пока поток не завершит выполнение кода.