Java Learning
18.7K subscribers
1.62K photos
1 video
3 files
998 links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Итератор

Итератор — это объект, который предоставляет доступ к элементам коллекции (например, списку, множеству или массиву) и позволяет последовательно перебирать эти элементы без необходимости знать внутреннюю структуру коллекции. Итераторы используются для упрощения работы с коллекциями и обеспечивают абстракцию доступа к элементам.

#для_начинающих
👍19
Процедурное программирование

Процедурное программирование в Java основывается на использовании процедур (функций) для разделения программы на отдельные блоки кода, которые могут быть вызваны из других частей программы. Процедурное программирование подразумевает последовательное выполнение инструкций в программе, где основными элементами являются процедуры и данные.

В Java процедуры реализуются с помощью методов. Методы в Java объявляются внутри классов и могут выполнять определенные действия или возвращать результаты. Они могут принимать аргументы и иметь локальные переменные.

#для_продвинутых
👍5
Алгоритм Кнута – Морриса – Пратта

Алгоритм КМП осуществляет поиск текста по заданному шаблону. В этом поиске сначала компилируется заданный шаблон. Компилируя шаблон, мы пытаемся найти префикс и суффикс строки шаблона. Это поможет в случае несоответствия – не придётся искать следующее совпадение с начального индекса.

Вместо этого мы пропускаем часть текстовой строки, которую уже сравнили, и начинаем сравнивать следующую. Необходимая часть определяется по префиксу и суффиксу, поэтому известно, какая часть уже прошла проверку и может быть безопасно пропущена.

#для_продвинутых
👍11😱3
Сериализация объектов

Сериализация объектов - это процесс преобразования объекта в поток байтов, который может быть сохранен на диске или передан по сети, а затем восстановлен в исходный объект. Для того, чтобы класс можно было сериализовать, необходимо реализовать интерфейс Serializable.

Как можно видеть из примера, объекты, реализующие интерфейс Serializable, могут быть сериализованы в файл и затем десериализованы обратно в исходный объект.

#для_продвинутых
👍133🔥1
Фильтрация

Фильтрация — это процесс выбора элементов из коллекции, удовлетворяющих определенному критерию. Фильтрация является одной из базовых операций при работе с коллекциями и позволяет легко извлекать нужные элементы.

В Java фильтрация может быть выполнена с использованием метода filter() из класса java.util.stream.Stream. Метод filter() принимает предикат (функцию, которая возвращает true или false в зависимости от того, удовлетворяет ли элемент критерию) и возвращает новый Stream, содержащий только те элементы, которые удовлетворяют критерию.

#для_продвинутых
👍131
Преобразование файла в строку

В нашем первом примере мы используем встроенный пакет файлов Java 1.11+. Этот метод работает с Java 1.11+.

Также рассмотрим еще один вариант преобразования, а именно использование встроенного пакета Streams Java 1.8+.
👍20
Memory Model

Memory Model (модель памяти) в Java определяет взаимодействие потоков с разделяемой памятью. Она гарантирует видимость изменений в памяти и порядок операций.

Java Memory Model (JMM) устанавливает правила для этого взаимодействия. JMM обеспечивает видимость изменений через синхронизацию и волатильные переменные. Она также определяет порядок операций и гарантирует атомарность для некоторых операций.

#для_продвинутых
👍15
Оptimistic locking

optimistic locking — это стратегия контроля параллельного доступа к ресурсам или данным, которая позволяет не блокировать ресурсы в течение длительного времени. Она основывается на предположении, что конфликты при доступе к данным встречаются редко, и поэтому вместо того чтобы заблокировать ресурс целиком на протяжении операции, она позволяет нескольким потокам или процессам работать с данными параллельно.

Если возникает конфликт, то один из потоков получит уведомление об этом и может принять меры для разрешения конфликта.

#для_продвинутых
👍12
Параллельные аккумуляторы

Кроме блокировок, Java Concurrent может предложить еще одну интересную функцию - параллельные аккумуляторы. LongAccumulator обновляет значение, используя предоставленную функцию. Это позволяет нам реализовать алгоритм без блокировок в ряде сценариев. Обычно это предпочтительнее чем AtomicLong, когда несколько потоков обновляют общее значение.

Для того чтобы создать аккумулятор, вам нужно указать в конструкторе два аргумента. Первый из них - это функция, используемая для вычисления результата аккумулятора. Обычно это метод sum. Второй параметр указывает начальное значение нашего аккумулятора.

Теперь давайте создадим LongAccumulator с начальным значением 10000а затем вызовем метод accumulate() из нескольких потоков.

#для_продвинутых
👍81
Каким будет вывод этого кода?
Anonymous Quiz
15%
true true
6%
false false
10%
true false
63%
false true
5%
Узнать ответ
👍18😢2🤔1
Реверс массива

Реверс массива в Java означает изменение порядка элементов массива на противоположный. То есть, элементы, которые изначально были в начале массива, становятся в конце, и наоборот.

Реверс массива может быть полезным во многих ситуациях программирования. Например, это может потребоваться для изменения порядка элементов перед их обработкой или выводом, или для выполнения действий, которые требуют доступа к элементам массива в обратном порядке.

#для_продвинутых
👍12
Сеттеры

В Java сеттеры (setters) являются методами класса, которые используются для установки значений приватных переменных (полей) класса. Они обеспечивают механизм инкапсуляции данных, позволяя контролировать доступ к полям класса и обеспечивать безопасность данных.

#для_начинающих
13👍3😢1
Создание подклассов исключений

Для того чтобы создать класс собственного исключения, достаточно определить его как производный от класса Exception.

В подклассах собственных исключений совсем не обязательно реализовать что-нибудь. В самом классе Exception не определено никаких методов.

Зачастую указывать описание исключения непосредственно при его создании очень удобно, но иногда для этого лучше переопределить метод toString().

#для_продвинутых
6👍3😱3
Параллельная редукция

Параллельная редукция в Java — это процесс сокращения (редукции) коллекции элементов с использованием параллельных вычислений. В Java для этого можно использовать параллельные потоки и функциональные интерфейсы, такие как reduce(), collect() и stream().

Обратите внимание, что использование параллельной редукции имеет смысл только при выполнении тяжелых вычислений или обработки больших коллекций данных. В других случаях, когда нагрузка невелика, последовательная редукция может быть более эффективной.

#для_продвинутых
👍131
Буферизованные потоки

Буферизованные потоки — это классы, которые обеспечивают буферизацию потоковых данных, что может улучшить производительность при чтении и записи больших объемов данных.

Преимущества использования буферизованных потоков включают более эффективную работу с файлами и сетевыми соединениями за счет уменьшения количества операций ввода-вывода. Также буферизация может уменьшить количество запросов к диску или сети, что может улучшить производительность при работе с большими объемами данных.

#для_продвинутых
👍17
StringBuilder

StringBuilder - это класс в Java, который представляет собой изменяемую последовательность символов. В отличие от класса String, объекты StringBuilder можно изменять, добавлять или удалять символы из строки без создания нового объекта.

StringBuilder также обеспечивает потокобезопасность при многопоточном использовании с помощью синхронизации. Если потокобезопасность не требуется, то можно использовать более производительный класс StringBuffer. Он имеет аналогичный интерфейс, но все его методы синхронизированы.

#для_начинающих
👍16🤔3
Условия в блокировках

В Java блокировки могут иметь связанные с ними условия, которые позволяют потокам ожидать определенных условий до получения блокировки или до ее освобождения.

Условия могут использоваться для предотвращения "голодания" некоторых потоков или для более эффективного управления блокировками.

#для_продвинутых
👍71
Взаимная блокировка потоков

Взаимная блокировка потоков — это ситуация, когда два или более потоков блокируются, ожидая друг друга, чтобы освободить общие ресурсы, необходимые им для продолжения работы.

Такая ситуация возникает, когда два или более потоков пытаются получить доступ к общему ресурсу одновременно, что может привести к блокировке их работы. Для избежания этой проблемы можно использовать мониторы и ключевое слово synchronized.

#для_продвинутых
👍14
В Java 21 собираются реализовать сопоставление с образцом – так, глядишь, я снова на этот язык перейду

Выпуск Java 21 состоялся 19 сентября 2023 года. В этой версии поддерживаются паттерны записи в switch-блоках и выражениях. Такой синтаксис выглядит монументально (как минимум, по меркам Java).

Смотреть статью
👍146