Java библиотека
31.6K subscribers
2.16K photos
63 videos
7 files
1.85K links
Книги, статьи, мемы и многое другое для Java программиста!

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

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

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

Сообщество VK https://vk.com/javatutorial
Download Telegram
🖥 hibernate-orm — популярный фреймворк для Java, который упрощает взаимодействие между объектно-ориентированными приложениями и реляционными базами данных!

🌟 Hibernate реализует спецификацию JPA (Java Persistence API) и предоставляет дополнительные возможности для работы с базами данных, такие как кэширование и трансакции.

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Java Guru 🤓
Что будет результатом компиляции этого кода?
Media is too big
VIEW IN TELEGRAM
7+1 программа для тех, кто изучает Java.

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

🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работает ConcurrentSkipListMap под капотом?

ConcurrentSkipListMap — это потокобезопасная и отсортированная реализация интерфейса NavigableMap, которая работает на основе skip list (списка с пропусками). Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков: нижний уровень содержит все элементы в порядке сортировки, а верхние уровни — лишь часть элементов для ускорения поиска. При добавлении элемента случайно выбирается его "высота" (количество уровней, на которых он присутствует), что позволяет "перепрыгивать" через блоки данных на верхних уровнях и выполнять операции со сложностью O(log n).

Пример структуры:
lvl 3: 1 ------ 8
lvl 2: 1 --- 7 -- 8
lvl 1: 1 - 3 - 7 - 8 - 10


💡 Основные механизмы:

🟡Skip List: Многослойный список с пропусками, где верхние уровни помогают быстро достигать нужного диапазона элементов, снижая количество переходов по связям.
🟡Потокобезопасность обеспечивается за счёт использования CAS (Compare-And-Swap) операций и минимального блокирования. Модификации происходят безопасно без полной блокировки структуры.
🟡Элементы всегда хранятся в отсортированном порядке по их ключам, что позволяет выполнять операции вроде поиска диапазонов или итераций по упорядоченным ключам очень эффективно.
🟡Высокая доступность: чтение не блокируется, даже если выполняются параллельные операции вставки или удаления.

⚠️ Особенности:

🔘Операции чтения (например, get или containsKey) выполняются быстро и без блокировок благодаря структуре skip list.
🔘Операции записи (например, put и remove) синхронизированы, но производительность сохраняется за счёт оптимизации с использованием CAS.
🔘Поддерживает натуральный порядок ключей или порядок, определённый переданным компаратором.
🔘Эффективен для сценариев, где важны отсортированные данные и параллельный доступ, но количество обновлений не слишком велико.

🚀 Когда использовать ConcurrentSkipListMap?

- Если нужен параллельный доступ к отсортированной мапе.
- Для обработки диапазонов данных или частых операций чтения в упорядоченном виде.

🔗 Документация

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Динамический массив

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

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


Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём разница между throw и throws?

- throws: указывается в сигнатуре метода, чтобы сообщить, какие исключения метод может выбросить. Например, если метод может генерировать FileNotFoundException, это указывается так:
public void readFile() throws FileNotFoundException { ... }


Здесь throws не выбрасывает исключение, а только предупреждает, что оно может возникнуть.

- throw: используется непосредственно в теле метода, чтобы выбросить конкретное исключение. Пример:
if (file == null) {
throw new FileNotFoundException("Файл не найден");
}


Здесь throw запускает исключение, когда возникает определённое условие.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Java Guru 🤓
Что будет результатом кода?
Что такое S3 и как его использовать в Java?

Amazon S3 (Simple Storage Service) — это облачное хранилище от AWS, которое позволяет безопасно сохранять и извлекать данные любого объёма и формата. S3 предоставляет масштабируемое решение для хранения файлов, данных резервного копирования, статического контента для веб-приложений и многого другого.

🟡Ключевые особенности S3:

- Данные хранятся в виде объектов (файлов), которые организуются в бакеты.
- S3 легко интегрируется с приложениями благодаря API.
- Поддержка шифрования данных и управление доступом через IAM.
- От небольших проектов до огромных хранилищ данных.
- 99,999999999% (11 девяток!) долговечности данных.

🟡Как начать работу с S3 в Java?

1️⃣Подключите SDK:
Добавьте зависимость в ваш проект.

<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>{actualVersion}</version>
</dependency>


2️⃣Настройте доступ:
Создайте учетные данные AWS (Access Key и Secret Key). Эти ключи позволяют вашему приложению взаимодействовать с S3.

3️⃣Пример загрузки/выгрузки файла в/из S3:

public class S3Example {
public static void main(String[] args) {
S3Client s3 = S3Client.create();

// Загрузка файла в S3
s3.putObject(
PutObjectRequest.builder()
.bucket("my-bucket-name")
.key("example.txt")
.build(),
Paths.get("path/to/local/file.txt")
);
System.out.println("Файл успешно загружен в S3");

// Выгрузка файла из S3
s3.getObject(
GetObjectRequest.builder()
.bucket("my-bucket-name")
.key("example.txt")
.build(),
Paths.get("path/to/downloaded/file.txt")
);
System.out.println("Файл успешно выгружен из S3");
}
}


💡 Где это пригодится?

- Хранение статического контента для веб-приложений.
- Бэкапы данных и журналов.
- Интеграция с микросервисами для обмена файлами.
- Хранение обучающих наборов данных для ML.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Лучшие практики по работе с DTO в IntelliJ IDEA | Amplicode

🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN
Please open Telegram to view this post
VIEW IN TELEGRAM
Trie

Trie (дерево префиксов) — это структура данных в виде дерева, используемая для хранения ассоциативных данных, например словарей.
Она позволяет эффективно хранить и находить слова по их префиксам.

Trie состоит из узлов, каждый из которых может ссылаться на несколько дочерних узлов. Каждая ветвь от корня до листа представляет одно слово, а символы слова образуют путь от корня до узла-листа.
Узлы, которые являются концом слова, помечаются специальным флагом.

Поиск слова заключается в прохождении от корня по ветвям символов этого слова. Добавление нового слова — добавление отсутствующих узлов для его символов.

Trie оптимальна для хранения словарей и поиска по префиксам благодаря эффективности этих операций.
В Java для реализации Trie удобно использовать HashMap в узлах для связей с дочерними узлами.


Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Где вы чаще всего пишете код?

❤️ IntelliJ IDEA
🔥 Vim/Emacs
👍🏼 Eclipse
⚡️ VS Code
😁 Notepad++

Пишите в комментарии интересные/полезные фичи вашего инструмента
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Java Guru 🤓
Что будет результатом кода?
👩‍💻 Spring Security 6.4: RestClient Support for OAuth2

🔒 Learn OAuth2 authentication in Spring Boot with the new Rest Client support in Spring Security 6.4! This tutorial walks you through building a secure multi-module application from scratch, complete with authorization server, resource server, and client applications.

In this step-by-step guide, we'll build a OAuth2 implementation using Spring Boot 3.4's latest features. Perfect for developers looking to implement secure authentication in their Spring applications!

What You'll Learn:
• Setting up a multi-module Maven project in Spring Boot
• Implementing an OAuth2 authorization server
• Creating a secure resource server with protected endpoints
• Building client applications with Rest Client OAuth2 support
• Understanding OAuth2 flow and architecture
• Best practices for Spring Security configuration
• Handling unauthorized access and security exceptions


🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотите прокачать скиллы в автоматизации тестирования на Java?

Ждем вас на бесплатном практическом уроке от OTUS — «gitlab-ci и написание пайплайнов для сборки»

Практика: gitlab-ci и методики написания пайплайнов для сборки докер образа с тестами и его публикации в реджестри

👉 Регистрация и подробности:
https://otus.pw/32R8/?erid=2W5zFJ7Aifz

#реклама
О рекламодателе
Какие типы ссылок существуют?

Существует 4 типа ссылок, которые определяют, как объект будет обрабатываться сборщиком мусора (Garbage Collector).

1️⃣ Strong Reference

Это ссылки, которые используются по умолчанию.
String strongRef = new String("Strong Reference");


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

2️⃣ Soft Reference

Создаются с помощью класса SoftReference. Soft ссылка удерживает объект в памяти, пока в JVM достаточно свободной памяти. Если памяти не хватает, объект будет удален.
SoftReference<String> softRef = new SoftReference<>(new String("Soft Reference"));
String softObj = softRef.get();


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

3️⃣ Weak Reference

Создаются с помощью класса WeakReference. Объект, на который ссылается слабая ссылка, удаляется сборщиком мусора, как только на него больше нет сильных или мягких ссылок.
WeakReference<String> weakRef = new WeakReference<>(new String("Weak Reference"));
String weakObj = weakRef.get();


Часто используются в структурах данных, таких как WeakHashMap, для предотвращения удержания ненужных объектов.
Удобны для создания ссылок на временные объекты.

4️⃣ Phantom Reference

Создаются с помощью класса PhantomReference. Эти ссылки используются исключительно для отслеживания, когда объект будет удален сборщиком мусора.
PhantomReference<String> phantomRef = new PhantomReference<>(new String("Phantom Reference"), new ReferenceQueue<>());


Метод get() у фантомной ссылки всегда возвращает null.
Объекты, на которые ссылаются фантомные ссылки, добавляются в ReferenceQueue, когда сборщик мусора их удаляет.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Создание приложения Блокнот на Java 👩‍💻

🗓 24 марта в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java-разработчик».

На вебинаре мы разработаем полноценное приложение «Блокнот» с графическим пользовательским интерфейсом, демонстрирующее базовые принципы создания текстового редактора на Java.

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

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

Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук.

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM