Параллельная редукция
Параллельная редукция в 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
CyclicBarrier
#для_продвинутых
CyclicBarrier (циклический барьер) — это один из механизмов синхронизации в языке программирования Java, предоставляемый пакетом java.util.concurrent. Он позволяет группе потоков синхронизироваться на определенной точке выполнения, после чего они могут продолжить выполнение параллельно.CyclicBarrier представляет собой барьер, который блокирует выполнение всех потоков до тех пор, пока все потоки не достигнут этой точки. Как только все потоки достигли барьера, он разблокируется, и все потоки выполняют свою работу.#для_продвинутых
👍13❤2
Восходящее и нисходящее преобразование
Восходящее преобразование (upcasting) происходит, когда объект или значение преобразуется в тип, который находится выше в иерархии наследования.
Нисходящее преобразование (downcasting) происходит, когда объект или значение преобразуется в тип, который находится ниже в иерархии наследования. Для выполнения нисходящего преобразования необходимо явно привести типы.
#для_начинающих
Восходящее преобразование (upcasting) происходит, когда объект или значение преобразуется в тип, который находится выше в иерархии наследования.
Нисходящее преобразование (downcasting) происходит, когда объект или значение преобразуется в тип, который находится ниже в иерархии наследования. Для выполнения нисходящего преобразования необходимо явно привести типы.
#для_начинающих
👍15
Группировка
Группировка (grouping) — это процесс объединения данных в группы или категории в соответствии с определенным критерием или условием. Группировка является важной операцией при обработке больших объемов данных, поскольку она позволяет легко анализировать и обрабатывать данные, разбивая их на более мелкие подгруппы.
В Java группировка может быть выполнена с использованием метода
#для_продвинутых
Группировка (grouping) — это процесс объединения данных в группы или категории в соответствии с определенным критерием или условием. Группировка является важной операцией при обработке больших объемов данных, поскольку она позволяет легко анализировать и обрабатывать данные, разбивая их на более мелкие подгруппы.
В Java группировка может быть выполнена с использованием метода
groupingBy() из класса java.util.stream.Collectors. Метод groupingBy() принимает функцию, которая определяет критерии группировки, и возвращает Map с ключами, соответствующими группам, и значениями, представляющими элементы группы.#для_продвинутых
👍19
ZipOutputStream
#для_продвинутых
ZipOutputStream — это класс в Java, который позволяет создавать архив Zip, добавлять в него файлы и директории, и сохранять его в файловой системе. Он наследует класс DeflaterOutputStream и реализует интерфейс Closeable.ZipOutputStream (OutputStream out) — создает объект ZipOutputStream, который будет записывать данные в указанный выходной поток.#для_продвинутых
👍10
Исключение в static блоке кода
Если в статическом блоке инициализации возникнет исключение, то это приведет к ошибке при инициализации класса.
Решить эту проблему можно двумя способами:
1. Перехватить исключение с помощью try-catch в этом же статическом блоке.
2. Перехватить исключение в последующем методе, куда оно будет выброшено, если не обрабатывать исключение в статическом блоке.
Как видно из примера, исключение из статического блока перехватывается в нем же блоком try-catch.
После этого класс инициализируется успешно, и его статический метод можно вызвать.
Если не обрабатывать исключение в статическом блоке, то оно будет выброшено дальше и его можно будет поймать в методе main, как показано в примере.
Если в статическом блоке инициализации возникнет исключение, то это приведет к ошибке при инициализации класса.
Решить эту проблему можно двумя способами:
1. Перехватить исключение с помощью try-catch в этом же статическом блоке.
2. Перехватить исключение в последующем методе, куда оно будет выброшено, если не обрабатывать исключение в статическом блоке.
Как видно из примера, исключение из статического блока перехватывается в нем же блоком try-catch.
После этого класс инициализируется успешно, и его статический метод можно вызвать.
Если не обрабатывать исключение в статическом блоке, то оно будет выброшено дальше и его можно будет поймать в методе main, как показано в примере.
👍13🔥1
Что такое Shutdown hook?
Вы можете зарегистрировать
#для_продвинутых
Shutdown hook — это механизм, который позволяет выполнить код при завершении работы JVM. Например, можно закрыть все открытые ресурсы и завершить потоки перед тем, как программа будет полностью остановлена.Вы можете зарегистрировать
Shutdown hook с помощью метода Runtime.addShutdownHook(). Этот метод принимает объект класса Thread, который представляет код, который вы хотите выполнить при завершении JVM.Shutdown hook будет выполнен при завершении JVM, независимо от того, был ли завершен процесс JVM нормально (например, с помощью System.exit()) или из-за необработанного исключения.#для_продвинутых
👍20
Принцип FIFO
Принцип FIFO (First-In-First-Out) относится к упорядочиванию и обработке элементов в порядке их поступления. В Java вы можете реализовать FIFO с использованием структуры данных, такой как очередь (Queue). В стандартной библиотеке Java есть несколько классов и интерфейсов, которые поддерживают FIFO:
— Queue интерфейс: Queue является интерфейсом, который предоставляет основные методы для работы с очередью. Вы можете использовать реализации этого интерфейса, такие как LinkedList или PriorityQueue, чтобы создать FIFO очередь.
— ArrayDeque: ArrayDeque также может быть использован для реализации FIFO очереди. Вы можете добавлять элементы в начало или конец очереди и извлекать их из начала очереди.
#для_продвинутых
Принцип FIFO (First-In-First-Out) относится к упорядочиванию и обработке элементов в порядке их поступления. В Java вы можете реализовать FIFO с использованием структуры данных, такой как очередь (Queue). В стандартной библиотеке Java есть несколько классов и интерфейсов, которые поддерживают FIFO:
— Queue интерфейс: Queue является интерфейсом, который предоставляет основные методы для работы с очередью. Вы можете использовать реализации этого интерфейса, такие как LinkedList или PriorityQueue, чтобы создать FIFO очередь.
— ArrayDeque: ArrayDeque также может быть использован для реализации FIFO очереди. Вы можете добавлять элементы в начало или конец очереди и извлекать их из начала очереди.
#для_продвинутых
👍12