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
Строковый пул

Строковый пул (String Pool) в Java представляет собой механизм оптимизации, который используется для сокращения дублирования строковых объектов в памяти. Он работает на основе концепции интернирования строк.

Когда вы создаете строковый литерал в Java, например, с помощью двойных кавычек, JVM проверяет, есть ли уже такая строка в пуле. Если строка уже существует, то ссылка на нее возвращается, вместо создания нового объекта. Это позволяет сократить использование памяти и улучшить производительность.

#для_начинающих
👍164🔥1
Каскадность

Каскадность позволяет последовательно вызывать несколько методов на одном объекте без явного повторного указания имени объекта.

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

#для_продвинутых
👍9🤔6
Classpath

Classpath — это путь к директориям и JAR-файлам, которые используются приложением Java для поиска и загрузки классов и ресурсов во время выполнения. Классы Java, используемые в вашем приложении, должны быть доступны на этом пути, чтобы их можно было успешно загрузить и выполнить.

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

#для_начинающих
👍8
Можно ли наследоваться от строкового типа?

В Java нельзя наследоваться от строкового типа (String). Строковый тип — это класс String, который является финальным (final) классом, что означает, что его нельзя расширить другим классом. Финальный класс не может иметь подклассов.

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

#для_начинающих
👍14
Метод Arrays.asList(T... a)

Метод Arrays.asList(T... a) используется для создания списка (List) на основе массива (array) или набора элементов переменной длины типа T. Этот метод принимает набор элементов типа T в качестве аргументов переменной длины (varargs) и возвращает список, который оборачивает переданные элементы массивом.

Обратите внимание, что список, созданный с помощью Arrays.asList, имеет фиксированный размер, и вы не можете добавлять или удалять элементы из него. Попытки изменить размер списка вызовут исключение UnsupportedOperationException.

#для_продвинутых
👍14
Кэширование

Кэширование (caching) — это механизм хранения временных данных в оперативной памяти или на диске, чтобы улучшить производительность приложения. Кэширование позволяет избежать повторного вычисления или запроса данных, которые уже были получены или рассчитаны ранее.

#для_продвинутых
👍14
Как используется класс Future?

Класс Future является частью пакета java.util.concurrent, и он используется для представления результата асинхронной операции или задачи, которая выполняется в фоновом потоке. Future позволяет вам управлять и получать результаты выполнения задачи в будущем, даже если она еще не завершилась.

#для_начинающих
👍9😢6
Java varargs

Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.

Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.

#для_продвинутых
👍171🔥1
Отложенная инициализация

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

В Java есть несколько способов реализации отложенной инициализации. Два наиболее распространенных подхода — это использование двойной проверки и использование внутреннего класса. На картинке мы рассмотрели использование двойной проверки (Double-Checked Locking).

#для_продвинутых
👍15
Блочная область видимости

Блочная область видимости (block scope) в Java - это область видимости, определенная фигурными скобками внутри метода, конструктора или другого блока кода, такого как условный оператор, цикл или блок try-catch.

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

#для_начинающих
👍71🔥1
События и слушатели

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

Слушатели (Listeners) в Java - это интерфейсы, которые позволяют регистрировать обработчики событий. Когда происходит событие, соответствующий слушатель вызывает метод обработки события, который реализуется классом, который зарегистрировал слушатель.
👍8
Итератор

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

#для_начинающих
👍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