Параллельные аккумуляторы
Кроме блокировок, Java Concurrent может предложить еще одну интересную функцию - параллельные аккумуляторы.
Для того чтобы создать аккумулятор, вам нужно указать в конструкторе два аргумента. Первый из них - это функция, используемая для вычисления результата аккумулятора. Обычно это метод
Теперь давайте создадим
#для_продвинутых
Кроме блокировок, Java Concurrent может предложить еще одну интересную функцию - параллельные аккумуляторы.
LongAccumulator обновляет значение, используя предоставленную функцию. Это позволяет нам реализовать алгоритм без блокировок в ряде сценариев. Обычно это предпочтительнее чем AtomicLong, когда несколько потоков обновляют общее значение.Для того чтобы создать аккумулятор, вам нужно указать в конструкторе два аргумента. Первый из них - это функция, используемая для вычисления результата аккумулятора. Обычно это метод
sum. Второй параметр указывает начальное значение нашего аккумулятора.Теперь давайте создадим
LongAccumulator с начальным значением 10000а затем вызовем метод accumulate() из нескольких потоков.#для_продвинутых
👍8❤1
Каким будет вывод этого кода?
Anonymous Quiz
15%
true true
6%
false false
10%
true false
63%
false true
5%
Узнать ответ
👍18😢2🤔1
Реверс массива
Реверс массива в Java означает изменение порядка элементов массива на противоположный. То есть, элементы, которые изначально были в начале массива, становятся в конце, и наоборот.
Реверс массива может быть полезным во многих ситуациях программирования. Например, это может потребоваться для изменения порядка элементов перед их обработкой или выводом, или для выполнения действий, которые требуют доступа к элементам массива в обратном порядке.
#для_продвинутых
Реверс массива в Java означает изменение порядка элементов массива на противоположный. То есть, элементы, которые изначально были в начале массива, становятся в конце, и наоборот.
Реверс массива может быть полезным во многих ситуациях программирования. Например, это может потребоваться для изменения порядка элементов перед их обработкой или выводом, или для выполнения действий, которые требуют доступа к элементам массива в обратном порядке.
#для_продвинутых
👍12
Сеттеры
В Java сеттеры (setters) являются методами класса, которые используются для установки значений приватных переменных (полей) класса. Они обеспечивают механизм инкапсуляции данных, позволяя контролировать доступ к полям класса и обеспечивать безопасность данных.
#для_начинающих
В Java сеттеры (setters) являются методами класса, которые используются для установки значений приватных переменных (полей) класса. Они обеспечивают механизм инкапсуляции данных, позволяя контролировать доступ к полям класса и обеспечивать безопасность данных.
#для_начинающих
❤13👍3😢1
Создание подклассов исключений
Для того чтобы создать класс собственного исключения, достаточно определить его как производный от класса
В подклассах собственных исключений совсем не обязательно реализовать что-нибудь. В самом классе
Зачастую указывать описание исключения непосредственно при его создании очень удобно, но иногда для этого лучше переопределить метод
#для_продвинутых
Для того чтобы создать класс собственного исключения, достаточно определить его как производный от класса
Exception.В подклассах собственных исключений совсем не обязательно реализовать что-нибудь. В самом классе
Exception не определено никаких методов.Зачастую указывать описание исключения непосредственно при его создании очень удобно, но иногда для этого лучше переопределить метод
toString().#для_продвинутых
❤6👍3😱3
Параллельная редукция
Параллельная редукция в Java — это процесс сокращения (редукции) коллекции элементов с использованием параллельных вычислений. В Java для этого можно использовать параллельные потоки и функциональные интерфейсы, такие как
Обратите внимание, что использование параллельной редукции имеет смысл только при выполнении тяжелых вычислений или обработки больших коллекций данных. В других случаях, когда нагрузка невелика, последовательная редукция может быть более эффективной.
#для_продвинутых
Параллельная редукция в Java — это процесс сокращения (редукции) коллекции элементов с использованием параллельных вычислений. В Java для этого можно использовать параллельные потоки и функциональные интерфейсы, такие как
reduce(), collect() и stream().Обратите внимание, что использование параллельной редукции имеет смысл только при выполнении тяжелых вычислений или обработки больших коллекций данных. В других случаях, когда нагрузка невелика, последовательная редукция может быть более эффективной.
#для_продвинутых
👍13❤1
Буферизованные потоки
Буферизованные потоки — это классы, которые обеспечивают буферизацию потоковых данных, что может улучшить производительность при чтении и записи больших объемов данных.
Преимущества использования буферизованных потоков включают более эффективную работу с файлами и сетевыми соединениями за счет уменьшения количества операций ввода-вывода. Также буферизация может уменьшить количество запросов к диску или сети, что может улучшить производительность при работе с большими объемами данных.
#для_продвинутых
Буферизованные потоки — это классы, которые обеспечивают буферизацию потоковых данных, что может улучшить производительность при чтении и записи больших объемов данных.
Преимущества использования буферизованных потоков включают более эффективную работу с файлами и сетевыми соединениями за счет уменьшения количества операций ввода-вывода. Также буферизация может уменьшить количество запросов к диску или сети, что может улучшить производительность при работе с большими объемами данных.
#для_продвинутых
👍17
StringBuilder
#для_начинающих
StringBuilder - это класс в Java, который представляет собой изменяемую последовательность символов. В отличие от класса String, объекты StringBuilder можно изменять, добавлять или удалять символы из строки без создания нового объекта.StringBuilder также обеспечивает потокобезопасность при многопоточном использовании с помощью синхронизации. Если потокобезопасность не требуется, то можно использовать более производительный класс StringBuffer. Он имеет аналогичный интерфейс, но все его методы синхронизированы.#для_начинающих
👍16🤔3
Условия в блокировках
В Java блокировки могут иметь связанные с ними условия, которые позволяют потокам ожидать определенных условий до получения блокировки или до ее освобождения.
Условия могут использоваться для предотвращения "голодания" некоторых потоков или для более эффективного управления блокировками.
#для_продвинутых
В Java блокировки могут иметь связанные с ними условия, которые позволяют потокам ожидать определенных условий до получения блокировки или до ее освобождения.
Условия могут использоваться для предотвращения "голодания" некоторых потоков или для более эффективного управления блокировками.
#для_продвинутых
👍7❤1
Взаимная блокировка потоков
Взаимная блокировка потоков — это ситуация, когда два или более потоков блокируются, ожидая друг друга, чтобы освободить общие ресурсы, необходимые им для продолжения работы.
Такая ситуация возникает, когда два или более потоков пытаются получить доступ к общему ресурсу одновременно, что может привести к блокировке их работы. Для избежания этой проблемы можно использовать мониторы и ключевое слово
#для_продвинутых
Взаимная блокировка потоков — это ситуация, когда два или более потоков блокируются, ожидая друг друга, чтобы освободить общие ресурсы, необходимые им для продолжения работы.
Такая ситуация возникает, когда два или более потоков пытаются получить доступ к общему ресурсу одновременно, что может привести к блокировке их работы. Для избежания этой проблемы можно использовать мониторы и ключевое слово
synchronized.#для_продвинутых
👍14
В Java 21 собираются реализовать сопоставление с образцом – так, глядишь, я снова на этот язык перейду
Выпуск Java 21 состоялся 19 сентября 2023 года. В этой версии поддерживаются паттерны записи в switch-блоках и выражениях. Такой синтаксис выглядит монументально (как минимум, по меркам Java).
Смотреть статью
Выпуск Java 21 состоялся 19 сентября 2023 года. В этой версии поддерживаются паттерны записи в switch-блоках и выражениях. Такой синтаксис выглядит монументально (как минимум, по меркам Java).
Смотреть статью
👍14❤6
Ссылочные типы
В Java все типы данных делятся на две категории: примитивные типы и ссылочные типы. Ссылочные типы данных представляют собой объекты, которые содержат данные и методы для работы с ними. В отличие от примитивных типов, переменные ссылочных типов хранят ссылку на объект, а не его значение.
#для_начинающих
В Java все типы данных делятся на две категории: примитивные типы и ссылочные типы. Ссылочные типы данных представляют собой объекты, которые содержат данные и методы для работы с ними. В отличие от примитивных типов, переменные ссылочных типов хранят ссылку на объект, а не его значение.
#для_начинающих
👍24
Сортировка Шелла
Если простыми словами, то сортировка Шелла это алгоритм сортировки массива, который улучшает производительность сортировки вставками.
Он основан на сравнении элементов, находящихся не только рядом, но и на определенном расстоянии друг от друга.
Суть алгоритма заключается в том, что на каждом шаге расстояние между элементами уменьшается вдвое, что позволяет ускорить сортировку.
#для_продвинутых
Если простыми словами, то сортировка Шелла это алгоритм сортировки массива, который улучшает производительность сортировки вставками.
Он основан на сравнении элементов, находящихся не только рядом, но и на определенном расстоянии друг от друга.
Суть алгоритма заключается в том, что на каждом шаге расстояние между элементами уменьшается вдвое, что позволяет ускорить сортировку.
#для_продвинутых
👍13
Переопределение методов в классах наследниках
В Java можно переопределить методы в классах-наследниках с помощью ключевого слова
Обратите внимание на использование аннотации
#для_продвинутых
В Java можно переопределить методы в классах-наследниках с помощью ключевого слова
@Override. Переопределение метода позволяет изменить его реализацию в подклассе, сохраняя при этом сигнатуру (имя, типы параметров и возвращаемое значение) метода из суперкласса.Обратите внимание на использование аннотации
@Override перед переопределенным методом в классе Subclass. Это помогает компилятору обнаружить ошибки, если вы случайно ошиблись в сигнатуре метода или не переопределили метод правильно.#для_продвинутых
👍17
Что выведет следующий код?
Anonymous Quiz
22%
000111222
5%
010120212
59%
Все варианты правильные
14%
012012012
👍21
NavigableSet
#для_продвинутых
NavigableSet — это расширенный интерфейс Set, который позволяет работать с элементами множества в отсортированном порядке и выполнять различные операции поиска и навигации. NavigableSet в Java предоставляет ряд методов для работы с элементами в порядке возрастания или убывания.#для_продвинутых
👍10
Records
#для_продвинутых
Records — это новый тип данных, добавленный в Java 14, который позволяет определить класс с набором свойств, аналогичных полям класса, но неизменяемых и доступных только для чтения. Они предоставляют удобный способ объявления простых неизменяемых объектов с сокращенным синтаксисом.#для_продвинутых
👍21❤1
Друзья, мы планируем в историях публиковать разбор задачек с собеседований с подробными пояснениями от Senior Java разработчика из Яндекса.
Если у вас есть Premium и вам интересен данный формат, то прошу проголосовать по ссылке ниже.
➡️ https://t.iss.one/Java_per_month?boost
Если у вас есть Premium и вам интересен данный формат, то прошу проголосовать по ссылке ниже.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥2❤1