AnnotatedElement
#для_продвинутых
AnnotatedElement — это интерфейс в Java, который представляет собой элемент программы, снабженный аннотациями. Он позволяет рефлексивно считывать аннотации.#для_продвинутых
👍9🔥1
FairSemaphore
В примере на картинке два потока будут пытаться получить доступ к ресурсу, который защищен с помощью
#для_продвинутых
FairSemaphore — это класс, реализующий семафор, который обеспечивает справедливое распределение разрешений между потоками. Это означает, что потоки, ожидающие разрешения, будут получать его в порядке очереди, а не в случайном порядке.В примере на картинке два потока будут пытаться получить доступ к ресурсу, который защищен с помощью
FairSemaphore. Потоки будут получать доступ к ресурсу по очереди, а не в случайном порядке.#для_продвинутых
👍9
BrokenBarrierException
Как исправить:
— Обработайте исключение
— Убедитесь, что все потоки, которые будут ждать на барьере, завершатся до того, как вы его сломаете.
— Используйте
#для_продвинутых
BrokenBarrierException — это исключение, которое возникает в Java, когда поток пытается ждать на барьере, который находится в сломанном состоянии или когда пытается войти в барьер, который переходит в сломанное состояние во время ожидания.Как исправить:
— Обработайте исключение
BrokenBarrierException в коде.— Убедитесь, что все потоки, которые будут ждать на барьере, завершатся до того, как вы его сломаете.
— Используйте
CyclicBarrier вместо Barrier, если вам нужно сбросить барьер и запустить его снова.#для_продвинутых
👍10
newCachedThreadPool
— Создание новых потоков по мере необходимости: пул создает новые потоки для выполнения задач, когда они поступают.
— Повторное использование существующих потоков: если в пуле есть неактивные потоки, они будут повторно использованы для выполнения новых задач.
— Бесконечное количество потоков: пул не имеет ограничений на количество потоков, которые он может создать.
— Удаление неактивных потоков: пул автоматически удаляет неактивные потоки через 60 секунд.
#для_начинающих
newCachedThreadPool — это метод класса Executors, который создает пул потоков, обладающий следующими характеристиками:— Создание новых потоков по мере необходимости: пул создает новые потоки для выполнения задач, когда они поступают.
— Повторное использование существующих потоков: если в пуле есть неактивные потоки, они будут повторно использованы для выполнения новых задач.
— Бесконечное количество потоков: пул не имеет ограничений на количество потоков, которые он может создать.
— Удаление неактивных потоков: пул автоматически удаляет неактивные потоки через 60 секунд.
#для_начинающих
👍9
Разбираемся с MavenGate, новой атакой на цепочку поставок для Java и Android-приложений
Смотреть статью
Смотреть статью
Хабр
Разбираемся с MavenGate, новой атакой на цепочку поставок для Java и Android-приложений
Всем привет! Сегодня с вами Юрий Шабалин, генеральный директор «Стингрей Технолоджиз», и я хотел бы разобрать в этой статье новый тип атаки на цепочку поставок под названием «MavenGate». А что в ней,...
👍2
Каким будет вывод этого кода?
Anonymous Quiz
7%
true true
34%
false false
49%
true false
3%
false true
6%
Посмотреть ответ
👍28
#Вопросы_с_собеседования
Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
- Метод должен удовлетворять условиям транзитивности, рефлексивности и симметричности.
- Метод должен быть согласованным - многократные вызовы с неизменными объектами должны возвращать один и тот же результат.
- Если x.equals(y) вернёт true, то x.hashCode() должен быть равен y.hashCode().
- Метод не должен выбрасывать исключения при сравнении допустимых значений.
Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
- Метод должен быть согласованным - многократные вызовы с неизменными объектами должны возвращать один и тот же результат.
- Если x.equals(y) вернёт true, то x.hashCode() должен быть равен y.hashCode().
- Метод не должен выбрасывать исключения при сравнении допустимых значений.
👍27
PreferencesFactory
Интерфейс
Он предоставляет два метода:
Поставщики новых реализаций
#для_продвинутых
Интерфейс
PreferencesFactory используется для создания объектов Preferences. Он предоставляет два метода:
systemRoot(): Возвращает корневой узел предпочтений системы.userRoot(): Возвращает корневой узел предпочтений пользователя, вызвавшего метод.Поставщики новых реализаций
Preferences должны предоставлять соответствующие реализации PreferencesFactory, чтобы их можно было установить вместо реализации по умолчанию, зависящей от платформы.#для_продвинутых
👍9
AtomicStampedReference
Что такое атомарный доступ?
Атомарный доступ означает, что операции чтения и записи выполняются целиком, без промежуточных состояний. Это гарантирует, что другие потоки не смогут увидеть частично обновленное значение.
#для_продвинутых
AtomicStampedReference — это класс в Java, который используется для обеспечения атомарного доступа к ссылке на объект и целочисленному «штампу».Что такое атомарный доступ?
Атомарный доступ означает, что операции чтения и записи выполняются целиком, без промежуточных состояний. Это гарантирует, что другие потоки не смогут увидеть частично обновленное значение.
#для_продвинутых
👍12
therapi-runtime-javadoc - небольшая библиотека, позволяющая читать Javadoc из Java-кода во время выполнения.
https://github.com/dnault/therapi-runtime-javadoc
https://github.com/dnault/therapi-runtime-javadoc
👍10
😱6👍4😢3
unmodifiableMap
UnmodifiableMap используется для создания неизменяемого представления отображения, это позволяет предоставить доступ к отображению, не давая возможности изменить его.
Как видно из примера, при попытке изменить неизменяемое отображение
UnmodifiableMap используется для создания неизменяемого представления отображения, это позволяет предоставить доступ к отображению, не давая возможности изменить его.
Как видно из примера, при попытке изменить неизменяемое отображение
unmodifiableMap выбрасывается исключение UnsupportedOperationException. Это гарантирует, что исходное отображение не будет случайно изменено.👍11
charBuffer
Метод charBuffer() используется для получения буфера символов из строки. Он принадлежит классу
Этот метод возвращает объект
В этом примере создается строка "Hello". Затем из этой строки получаем буфер символов методом
В цикле посимвольно читаем из буфера символы и выводим их на экран.
Метод charBuffer() используется для получения буфера символов из строки. Он принадлежит классу
String.Этот метод возвращает объект
CharBuffer, который представляет последовательность символов строки.CharBuffer позволяет эффективно читать и манипулировать символами строки без создания копий.В этом примере создается строка "Hello". Затем из этой строки получаем буфер символов методом
charBuffer().В цикле посимвольно читаем из буфера символы и выводим их на экран.
👍14❤3
Зачем нужны и какие бывают блоки инициализации?
Блоки инициализации представляют собой код, заключенный в фигурные скобки и размещаемый внутри класса вне объявления методов или конструкторов.
• Существуют статические и нестатические блоки инициализации.
• Блок инициализации выполняется перед инициализацией класса загрузчиком классов или созданием объекта класса с помощью конструктора.
• Несколько блоков инициализации выполняются в порядке следования в коде класса.
• Блок инициализации способен генерировать исключения, если их объявления перечислены в
• Блок инициализации возможно создать и в анонимном классе.
Блоки инициализации представляют собой код, заключенный в фигурные скобки и размещаемый внутри класса вне объявления методов или конструкторов.
• Существуют статические и нестатические блоки инициализации.
• Блок инициализации выполняется перед инициализацией класса загрузчиком классов или созданием объекта класса с помощью конструктора.
• Несколько блоков инициализации выполняются в порядке следования в коде класса.
• Блок инициализации способен генерировать исключения, если их объявления перечислены в
throws всех конструкторов класса.• Блок инициализации возможно создать и в анонимном классе.
👍19