Java библиотека
31.6K subscribers
2.34K photos
87 videos
9 files
2.15K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Метод dropWhile был введен в интерфейсе Stream в JDK 9. Этот метод позволяет пропускать элементы в начале потока данных, пока они удовлетворяют определенному условию, и возвращает новый поток, начиная с первого элемента, который не соответствует условию.

В примере метод dropWhile используется для пропуска элементов в потоке до тех пор, пока они меньше 0. После первого элемента, не соответствующего условию, оставшиеся элементы добавляются в новый поток.
👍25🔥94
👩‍💻 Открытый урок «Знакомство со Spring Cloud».

Как эффективно использовать самый популярный фреймворк в Java-мире для профессиональной разработки приложений?

📆 Узнайте на открытом вебинаре 10 октября в 20:00 мск.

Где мы разберем:

- что такое Spring Cloud и для чего он нужен;
- из каких основных компонентов состоит Spring Cloud;
- как использовать ключевые функции Spring Cloud для разработки.

Спикер Сергей Петрелевич — опытный Java/Kotlin-разработчик и преподаватель.

Встречаемся в преддверии старта курса «Java Developer. Professional». Все участники вебинара получат специальную цену на обучение!

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cBPMB0

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4🔥3
⌨️ Управление доступом к членам класса

Модификаторы уровня доступа определяют, могут ли другие классы использовать определенное поле или вызывать определенный метод.

Существует 4 уровня доступа:

private
Указывает, что доступ возможен только в его собственном классе.

package-private (нет явного модификатора)
Указывает, что доступ только внутри своего собственного пакета.

protected
Указывает, что доступ возможен только внутри его собственного пакета (как в случае с package-private) и, кроме того, для подкласса его класса в другом пакете.

public
Указывает, что доступ возможен отовсюду.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍176🔥5
Где можно использовать префиксные деревья?
При реализации множеств и ассоциативных массивов.

А где можно посмотреть, как выполняется алгоритм ассоциативного массива на основе префиксного дерева?
На нашем открытом онлайн-уроке!

Мы выполним визуальное тестирование загрузкой 2000 слов в массив англо-русского словаря

Вебинар «Префиксное дерево» проведёт Евгений Волосатов, программист БД с 25-летним опытом

👨‍💻🛠👨🏻‍💻 Будет интересно: junior-разработчикам на любых языках программирования

🗓 7 октября, 20:00 МСК
Бесплатно в рамках старта курса «Алгоритмы и структуры данных»

➡️ Записаться на открытый урок: https://vk.cc/cBQEyx

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
7👍6🔥2
Forwarded from Java Guru 🤓
Что такое абстрактные классы?

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

@javatasks #java
👍1911🔥5
Cartesian product

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

Например, если у нас есть две коллекции: A = {1, 2, 3} и B = {a, b}, то произведение A и B будет выглядеть следующим образом:

{(1, a), (1, b), (2, a), (2, b), (3, a), (3, b)}

Таким образом, мы получаем шесть возможных пар элементов из коллекций A и B.

В этом примере мы создаем две коллекции и используем два вложенных цикла для создания cartesian product. Созданное произведение сохраняется в коллекцию cartesianProduct типа List> и результат выводится на экран.
👍137🔥4🎅1
Priority Queue

PriorityQueue — это коллекция, которая хранит элементы в соответствии с их приоритетом.
Реализует очередь на базе кучи (heap) и используется в ситуациях, когда необходимо обрабатывать или получать элементы в определенном порядке.

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

PriorityQueue не поддерживает изменение приоритета элемента после добавления.
👍148🔥6
🚫 Ключевые проблемы многопоточности

🔵 Состояние гонки (Race Conditions):

Ситуация, когда несколько потоков пытаются одновременно читать и записывать общие данные, что приводит к непредсказуемым результатам.
Пример: Представьте, что два человека пытаются одновременно снять деньги с одного банковского счета. Без должной координации они могут снять больше денег, чем доступно на счете.

🔵 Взаимные блокировки (Deadlocks):

Ситуация, когда два или более потока застревают в ожидании друг друга для освобождения ресурсов, что приводит к тупиковой ситуации.
Пример: Два человека держат предметы, которые нужны друг другу, и оба ждут, пока другой первый отдаст свой предмет.

🔵 Ошибки конкуренции (Concurrency Bugs):

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

🔵 Прерывание потока (Thread Interruption):

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

🔵 Ошибки согласованности памяти (Memory Consistency Errors):

Ситуация, когда разные потоки имеют устаревшее или несогласованное представление о разделяемой памяти.
Пример: Если один человек обновляет общий документ, а другие видят старую версию, они могут работать с неверной информацией.

🔵 Соперничество за ресурсы (Resource Contention):

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

🔵 Голодание (Starvation):

Ситуация, когда потоку постоянно отказывают в доступе к ресурсам из-за приоритета других потоков.
Пример: Если одного работника постоянно обходят вниманием в пользу других, он никогда не сможет выполнить свою работу.

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍235🔥3
Механизм try-with-resources

Механизм try-with-resources — это способ автоматического закрытия ресурсов после их использования. Появился этот механизм в Java 7.
Он работает для классов, реализующих интерфейс AutoCloseable (например, потоки), уменьшает количество кода и упрощает обработку исключений.

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

По сравнению с блоком try-catch-finally этот механизм позволяет лаконичнее писать код с автозакрытием ресурсов.

В этом примере в блоке try создаются объекты FileReader и BufferedReader для чтения данных из файла.
После завершения блока try оба ресурса будут автоматически закрыты, даже если произойдет исключение.
219👍8🔥3
👩‍💻 «Знакомство со Spring Cloud».

Приглашаем на открытый урок, где мы разберем:

✔️ что такое Spring Cloud и для чего он нужен;
✔️ из каких основных компонентов состоит Spring Cloud;
✔️ как использовать ключевые функции Spring Cloud для разработки.

🗓 10 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional»

🔗 Ссылка на регистрацию : https://vk.cc/cCcwaC

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥2
Сравнение через equals() и ==

▪️ "==" используется для сравнения примитивных типов данных (например, int, char, boolean), проверяя, равны ли их значения. Однако, когда речь идет об объектах, "==" сравнивает их ссылки, то есть проверяет, указывают ли обе переменные на один и тот же объект в памяти.

▪️ Метод equals(), в свою очередь, предназначен для сравнения содержимого объектов. Это значит, что equals() проверяет, эквивалентны ли сами данные, хранящиеся в двух объектах, а не то, ссылаются ли они на одно и то же место в памяти.

Используйте == для сравнения примитивов и ссылок на объекты, когда вам важно знать, являются ли они одной и той же сущностью. Для сравнения содержимого объектов всегда применяйте equals().

@javalib #java
👍225🔥2
🔼 Топ-5 способов улучшить производительность API:

1️⃣ Пагинация результатов:
Этот метод используется для оптимизации больших наборов данных путем их постраничной передачи клиенту, что повышает отзывчивость сервиса и улучшает пользовательский опыт.

2️⃣ Асинхронное логирование:
Этот подход предполагает отправку логов в буфер без блокировки и немедленное возвращение управления, вместо того чтобы записывать данные на диск при каждом вызове. Логи периодически сбрасываются на диск, что значительно снижает нагрузку на систему ввода-вывода.

3️⃣ Кэширование данных:
Часто запрашиваемые данные могут храниться в кэше для ускорения их извлечения. Клиенты сначала проверяют кэш перед обращением к базе данных, а такие решения для хранения данных, как Redis, обеспечивают более быстрый доступ благодаря хранению в оперативной памяти.

4️⃣ Сжатие payload:
Чтобы сократить время передачи данных, запросы и ответы можно сжимать, что ускоряет процессы загрузки и выгрузки.

5️⃣ Пул соединений:
Эта техника включает использование пула открытых соединений для управления взаимодействием с базой данных, что снижает накладные расходы, связанные с открытием и закрытием соединений каждый раз, когда требуется загрузить данные. Пул управляет жизненным циклом соединений для эффективного использования ресурсов.

💬 А как вы улучшаете перфоманс API?

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍4🔥4
Всем, кто связан с разработкой, архитектурой или управлением IT-проектами!
Хотите создавать решения, которые выдерживают сотни тысяч RPS?


14 октября специалист по высоконагруженным сервисам в крупном банке расскажет про обучение на онлайн-курсе «Архитектор высоких нагрузок» в OTUS.

Вы узнаете:
- о программе обучения на курсе «Архитектор высоких нагрузок»
- о том, какой уровень знаний необходим для поступления на курс
- о перспективах самой профессии
- о ваших перспективах в качестве архитектора высоких нагрузок

Также вы увидите проектные работы выпускников курса.

🗓 14 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Highload Architect»

🔴 Записаться на открытый урок: https://vk.cc/cCdk0N

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍43🔥2
shutdown hook

Shutdown hook позволяет приложению выполнить некоторый код перед завершением приложения.

Для создания hook нужно создать объект класса Thread и передать его в метод addShutdownHook() класса Runtime.
Когда приложение завершается, все заданные hook выполнятся последовательно.

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


@javalib #java
👍16🔥74
🤫 Секреты эффективной работы с ArrayList

ArrayList — это один из самых популярных классов для работы с динамическими массивами в Java. Но чтобы использовать его по максимуму, стоит учесть несколько важных моментов:

1️⃣ Уменьшайте количество расширений: Каждый раз, когда ArrayList превышает свою текущую емкость, он создает новый массив большего размера. Это может замедлить работу, особенно при больших объемах данных. Чтобы избежать этого, инициализируйте ArrayList с заранее рассчитанной емкостью, если примерно знаете объем данных.

2️⃣ Избегайте частых вставок и удалений в середине списка: Операции вставки и удаления элементов в середине ArrayList требуют сдвига всех последующих элементов. Если такие операции критичны, рассмотрите использование LinkedList.

3️⃣ Используйте метод trimToSize(): Если ваш ArrayList больше не будет изменяться, вызов метода trimToSize() освободит неиспользуемую память, оптимизируя использование ресурсов.

4️⃣ Итерации важны: Используйте цикл for-each или метод forEach() для итерации по ArrayList. Они обеспечивают более читаемый и безопасный код. Но если нужен доступ по индексу, стандартный цикл for — ваш выбор.

5️⃣ Будьте осторожны с автобоксингом: При работе с примитивными типами, такими как int, ArrayList автоматически упаковывает их в Integer. Это может привести к лишним затратам памяти. Если производительность критична, используйте специализированные классы, такие как IntArrayList из библиотеки fastutil.

@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍276🔥6
Forwarded from Java Guru 🤓
Какой будет результат?
🔥114👍4
unmodifiableMap

UnmodifiableMap используется для создания неизменяемого представления отображения, это позволяет предоставить доступ к отображению, не давая возможности изменить его.

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


@javalib #java
👍146🔥3
Forwarded from Axiom JDK
​​Сенсация для разработчиков! Axiom JDK теперь доступен для свободной загрузки 🎉

Мы услышали вас и сделали это реальностью. Теперь каждый Java-разработчик в России может легко загрузить Axiom JDK, чтобы создавать свои проекты и домашние разработки, тестировать идеи и проводить эксперименты на отечественном инструменте мирового уровня.

Для разработки и демо доступны все LTS-версии Java (8, 11, 17, 21) и актуальная JDK 23, поддерживаются Windows, macOS и Linux. С регулярными обновлениями и полной документацией.
Загружайте прямо сейчас в личном кабинете разработчика:

lk.axiomjdk.ru

#Обновление_AxiomJDK
👍235🔥4
charBuffer

Метод charBuffer() используется для получения буфера символов из строки. Он принадлежит классу String.

Этот метод возвращает объект CharBuffer, который представляет последовательность символов строки.
CharBuffer позволяет эффективно читать и манипулировать символами строки без создания копий.

В этом примере создается строка «Hello». Затем из этой строки получаем буфер символов методом charBuffer().
В цикле посимвольно читаем из буфера символы и выводим их на экран.


@javalib #java
👍155🔥4
Хотите узнать, как превратить массив в пирамиду и ускорить сортировку данных?

Ждем вас на бесплатном вебинаре 14 октября в 20:00 мск, где мы разберем:

- как реализовать алгоритм сортировки выбором с линейной сложностью;
- как превратить массив в пирамиду (кучу) для быстрого доступа к максимальному элементу;
- как создать алгоритм пирамидальной сортировки с квазилинейной сложностью — О(N log N);
- визуальные примеры работы алгоритма на конкретных числах.

🚀 Спикер Евгений Волосатов — программист баз данных и преподаватель с огромным и разнообразным опытом, автор статей и учебных программ по C#, Java, PHP.

Встречаемся в преддверии старта курса «Алгоритмы и структуры данных». Все участники вебинара получат специальную цену на обучение!

Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cCxj28

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍53🔥2