Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥8❤5
Selector
Класс Selector используется для организации многоканального неблокирующего ввода-вывода.
Основная идея в том, что Selector позволяет одному потоку следить за состоянием множества каналов (сокетов, файловых каналов) и обрабатывать их события (готовность к чтению/записи).
Возможности Selector:
— Регистрация множества каналов в Selector для мониторинга.
— Проверка готовности зарегистрированных каналов к операциям чтения, записи.
— Извлечение готовых каналов и выполнение операций с ними.
— Отмена регистрации каналов в Selector.
Использование Selector позволяет избежать блокировки на операциях чтения/записи по каналам и эффективно масштабировать приложение для одновременной работы с большим количеством соединений.
Класс часто применяется в сетевых серверах для неблокирующей обработки большого числа клиентских соединений в одном потоке.
✅ Java библиотека #java
Класс Selector используется для организации многоканального неблокирующего ввода-вывода.
Основная идея в том, что Selector позволяет одному потоку следить за состоянием множества каналов (сокетов, файловых каналов) и обрабатывать их события (готовность к чтению/записи).
Возможности Selector:
— Регистрация множества каналов в Selector для мониторинга.
— Проверка готовности зарегистрированных каналов к операциям чтения, записи.
— Извлечение готовых каналов и выполнение операций с ними.
— Отмена регистрации каналов в Selector.
Использование Selector позволяет избежать блокировки на операциях чтения/записи по каналам и эффективно масштабировать приложение для одновременной работы с большим количеством соединений.
Класс часто применяется в сетевых серверах для неблокирующей обработки большого числа клиентских соединений в одном потоке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥3
🏆 Пройди тест из 10 вопросов, проверь свой уровень знаний и получи скидку на онлайн-курс «Kotlin Backend Developer. Professional» от OTUS!
Если успешно пройдешь тест, сможешь забронировать место в группе по выгодной цене! И еще дарим промокод
🎫 Курс можно приобрести в рассрочку
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥2😁2
Media is too big
VIEW IN TELEGRAM
Java и gRPC: быстрый старт со Spring Boot | Преимущества, Настройка и Использование
Сегодня у нас QuickStart и обзор ныне очень популярной технологии - gRPC, оставляйте свое мнение в комментариях и читайте описание, приятного! :)
📺 🗣 СМОТРЕТЬ RUTUBE
🌐 🗣 СМОТРЕТЬ VKVIDEO
@javalib #java
Сегодня у нас QuickStart и обзор ныне очень популярной технологии - gRPC, оставляйте свое мнение в комментариях и читайте описание, приятного! :)
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤3🔥2
Как отслеживать изменения в файловой системе в реальном времени
Если вам нужно отслеживать изменения в файловой системе, такие как добавление, удаление или модификация файлов, Java предоставляет удобный инструмент — интерфейс WatchService. Это идеальное решение для мониторинга директорий без необходимости вручную проверять состояние файлов каждый раз.
🟢 Возможные сценарии использования:
- Отслеживание действий пользователя.
- Мониторинг изменений в конфигурационных файлах для их динамической перезагрузки.
- Автоматическая обработка данных, как только они поступают в систему (например, новые изображения или документы).
- Логирование и анализ активности в системных директориях.
WatchService — это механизм мониторинга событий файловой системы. Для его работы регистрируем путь для отслеживания событий с помощью path.register() и указываем тип событий: создание, удаление или модификация.
В бесконечном цикле программа ожидает события с помощью watchService.take(), после чего события обрабатываются через лямбду.
Метод reset() проверяет, можно ли продолжить отслеживание, если нет — цикл завершится.
🟢 Преимущества использования:
- Моментальное реагирование на изменения файлов, что упрощает автоматизацию.
- Легкая настройка — всего несколько строк кода для полного мониторинга директории.
- Минимальные ресурсы — WatchService не требует постоянного опроса файловой системы.
✅ Java библиотека #java
Если вам нужно отслеживать изменения в файловой системе, такие как добавление, удаление или модификация файлов, Java предоставляет удобный инструмент — интерфейс WatchService. Это идеальное решение для мониторинга директорий без необходимости вручную проверять состояние файлов каждый раз.
- Отслеживание действий пользователя.
- Мониторинг изменений в конфигурационных файлах для их динамической перезагрузки.
- Автоматическая обработка данных, как только они поступают в систему (например, новые изображения или документы).
- Логирование и анализ активности в системных директориях.
import java.nio.file.*;
import java.io.IOException;
public class DirectoryWatcher {
public static void main(String[] args) throws IOException, InterruptedException {
WatchService watchService = FileSystems.getDefault().newWatchService();
Path path = Paths.get("/path/to/watch");
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY);
System.out.println("Monitoring directory: " + path);
while (true) {
WatchKey key = watchService.take();
key.pollEvents().forEach(event -> {
WatchEvent.Kind<?> kind = event.kind();
System.out.println(kind.name() + ": " + event.context());
});
if (!key.reset()) break;
}
}
}
WatchService — это механизм мониторинга событий файловой системы. Для его работы регистрируем путь для отслеживания событий с помощью path.register() и указываем тип событий: создание, удаление или модификация.
В бесконечном цикле программа ожидает события с помощью watchService.take(), после чего события обрабатываются через лямбду.
Метод reset() проверяет, можно ли продолжить отслеживание, если нет — цикл завершится.
- Моментальное реагирование на изменения файлов, что упрощает автоматизацию.
- Легкая настройка — всего несколько строк кода для полного мониторинга директории.
- Минимальные ресурсы — WatchService не требует постоянного опроса файловой системы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤5🔥4
StringBuilder
StringBuilder — это класс для работы с изменяемыми строками, аналогичный StringBuffer. API класса StringBuilder такой же, как у StringBuffer, он также хранит строку в виде модифицируемого массива символов.
Но, в отличие от StringBuffer, StringBuilder не является потокобезопасным. Он работает быстрее за счет отсутствия синхронизации.
Поэтому его рекомендуется использовать в однопоточных приложениях для работы со строками, когда нет необходимости в синхронизации.
При создании можно задать начальную емкость buffer'а в виде размера массива символов.
Если строка превышает текущую емкость, она автоматически расширяется с сохранением содержимого.
✅ Java библиотека #java
StringBuilder — это класс для работы с изменяемыми строками, аналогичный StringBuffer. API класса StringBuilder такой же, как у StringBuffer, он также хранит строку в виде модифицируемого массива символов.
Но, в отличие от StringBuffer, StringBuilder не является потокобезопасным. Он работает быстрее за счет отсутствия синхронизации.
Поэтому его рекомендуется использовать в однопоточных приложениях для работы со строками, когда нет необходимости в синхронизации.
При создании можно задать начальную емкость buffer'а в виде размера массива символов.
Если строка превышает текущую емкость, она автоматически расширяется с сохранением содержимого.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥2
Столкнулись с падением производительности базы данных?
Не делайте резких движений: вы можете ухудшить ситуацию.
Сначала нужно верно диагностировать причину проблемы.
Возможно вы неправильно выбрали индексы, а быть может дело вообще в самой архитектуре БД – вариантов масса!
На открытом вебинаре «Как ускорить работу и повысить надёжность PostgreSQL»
вы узнаете:
🎯как обеспечить высокую производительность и отказоустойчивость базы данных
🎯как вовремя выявить деградацию производительности с помощью диагностики
Вебинар проведёт Дмитрий Золотов, Kotlin-разработчик в «Яндексе».
Приглашаем технических руководителей, админов БД, девопсов и разработчиков.
Все участники получат в подарок видеоурок «Безопасность в PostgreSQL: защита данных, управление доступом и аудит» и скидку 7% на любой курс OTUS.
6 мая, 19:00 МСК
Бесплатно
Записаться - https://otus.pw/oNnE/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFJZo9vG
Не делайте резких движений: вы можете ухудшить ситуацию.
Сначала нужно верно диагностировать причину проблемы.
Возможно вы неправильно выбрали индексы, а быть может дело вообще в самой архитектуре БД – вариантов масса!
На открытом вебинаре «Как ускорить работу и повысить надёжность PostgreSQL»
вы узнаете:
🎯как обеспечить высокую производительность и отказоустойчивость базы данных
🎯как вовремя выявить деградацию производительности с помощью диагностики
Вебинар проведёт Дмитрий Золотов, Kotlin-разработчик в «Яндексе».
Приглашаем технических руководителей, админов БД, девопсов и разработчиков.
Все участники получат в подарок видеоурок «Безопасность в PostgreSQL: защита данных, управление доступом и аудит» и скидку 7% на любой курс OTUS.
6 мая, 19:00 МСК
Бесплатно
Записаться - https://otus.pw/oNnE/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFJZo9vG
❤3👍2🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🔥2
Что такое авторизация и аутентификация?
🟢 Аутентификация — процесс проверки подлинности субъекта (пользователя или системы) на основе предоставленных им учетных данных (например, пары логин/пароль, сертификата или токена). Она подтверждает, что субъект является тем, за кого себя выдаёт.
🟢 Авторизация — процесс определения прав и привилегий аутентифицированного субъекта в рамках определённой системы или ресурса. Она определяет, какие действия или ресурсы доступны субъекту после успешной аутентификации.
Аутентификация устанавливаетличность субъекта , а авторизация — его полномочия в системе .
✅ Java библиотека #java
Аутентификация устанавливает
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤4🔥4
Совет 💡
Обычно при сортировке в Spring Data мы указываем свойство, по которому хотим отсортировать, как строку. Однако существует класс
✅ Java библиотека #java
Обычно при сортировке в Spring Data мы указываем свойство, по которому хотим отсортировать, как строку. Однако существует класс
TypedSort
, который дает нам возможность передавать функцию в качестве параметра для сортировки. Это повышает безопасность типов в нашем коде.Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥5❤4
— Полный контроль за счёт написания SQL-запросов.
— Без лишней магии запросы выполняются быстро.
— Работает с любой реляционной БД без привязки к ORM.
— Нужно самому писать маппинг объектов, обрабатывать исключения и управлять соединениями.
— Нет встроенного кэширования, ленивой загрузки и работы с графами объектов.
— Нужно следить за autocommit и rollback.
— Работа с БД ведётся через Entity, а SQL-запросы формируются автоматически.
— Поддержка связей (@OneToMany и т. д.), ленивой загрузки и кэширования.
— Поддержка автоматического управления транзакциями через EntityManager.
— Много аннотаций, конфигураций и магии.
— Автоматическая генерация запросов не всегда эффективна.
— Нужно разбираться, какой SQL-запрос Hibernate сгенерировал и почему.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤6🔥3
Пройти тестирование — сложно! А ты справишься?
21 вопрос, 30 минут
Проверь себя - пройди квиз и оцени свой уровень навыков, а также свою готовность к обучению на курсе — «Разработчик на Spring Framework» от OTUS.
💻 За 5 месяцев обучения ты освоишь современные возможности Spring, научишься быстро проходить путь от идеи до production-grade, создавать Web-приложения на микросервисной архитектуре и решать высокоуровневые задачи по разработке.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cLsyXV
Если успешно пройдешь тест, сможешь забронировать место в группе по выгодной цене! И еще дарим промокод
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥2
Media is too big
VIEW IN TELEGRAM
Изучаешь Java - создай проект. Перезагрузка.
Выпуск 2. Описание процесса и систем.
В этом выпуске мы в общих словах вспомним, для чего мы делаем систему и как она работает.
🌐 🗣 СМОТРЕТЬ VKVIDEO
✅ Java библиотека #java
Выпуск 2. Описание процесса и систем.
В этом выпуске мы в общих словах вспомним, для чего мы делаем систему и как она работает.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3❤2
TeleStore — платформа для разработчиков, где выплаты происходят быстро, а подключение не требует юрлица.
Мы создали альтернативу App Store и Google Play: маркетплейс с полноценной платёжной системой, низкими комиссиями (от 7,5%) и международной инфраструктурой.
Принимайте платежи картами (включая МИР) и получайте выплаты в USDT — моментально, на любой криптокошелёк. Интеграция занимает всего день: у нас есть SDK и техподдержка на каждом этапе.
Для первых 30 партнёров — бонус от $500 на продвижение, креативы и трафик от нашей маркетинг-команды. Мы не просто размещаем — мы помогаем зарабатывать.
Если вы создаёте браузерные игры или Telegram Mini Apps — подключайтесь:📍 Заявка: https://tglink.io/f4f28a2a1004?erid=2W5zFJj9cet
📍 О платформе: https://tglink.io/938b6afd3e8a
Реклама. Иванов А.О. ИНН 451200841661.
Мы создали альтернативу App Store и Google Play: маркетплейс с полноценной платёжной системой, низкими комиссиями (от 7,5%) и международной инфраструктурой.
Принимайте платежи картами (включая МИР) и получайте выплаты в USDT — моментально, на любой криптокошелёк. Интеграция занимает всего день: у нас есть SDK и техподдержка на каждом этапе.
Для первых 30 партнёров — бонус от $500 на продвижение, креативы и трафик от нашей маркетинг-команды. Мы не просто размещаем — мы помогаем зарабатывать.
Если вы создаёте браузерные игры или Telegram Mini Apps — подключайтесь:📍 Заявка: https://tglink.io/f4f28a2a1004?erid=2W5zFJj9cet
📍 О платформе: https://tglink.io/938b6afd3e8a
Реклама. Иванов А.О. ИНН 451200841661.
👍3🔥3❤2
Совет 💡
Добавьте в JDBC URL свойство
✅ Java библиотека #java
Добавьте в JDBC URL свойство
ApplicationName
(зависит от БД, не в каждой БД оно есть!). Таким образом, в списке сессий вместо имени JDBC-драйвера будет отображаться имя набора. Это поможет при поиске неисправностей, когда несколько приложений подключаются к одной и той же БД.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍3❤2
Spring управляет созданием бинов через Dependency Injection (DI), но при большом количестве компонентов это замедляет запуск приложения и расходует память.
Используйте @Lazy, чтобы откладывать создание бина до первого вызова:
@Component
public class Component {
@Lazy
@Autowired
private Service service;
}
— Редко используемые сервисы (например, отчёты, аналитика).
— В крупных приложениях с тысячами зависимостей.
— В микросервисах для уменьшения потребления ресурсов.
— При загрузке тяжёлых конфигураций.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥5❤3
🧑💻 PoCo — генератор классов-сборщиков для сложных объектов. Вместо ручного долгого парсинга POJO, библиотека автоматически генерирует оптимизированные классы-сборщики на этапе компиляции.
📥 Библиотека интегрируется через Gradle-плагин и не требует runtime-зависимостей. В планах разработки — расширение поддержки кастомных контейнеров и интерфейсов, что сделает решение ещё более гибким.
📝 PoCo стоит рассмотреть тем, кто работает с комплексными доменными моделями и устал от длительного ручного парсинга данных.
🖥 Github
✅ Java библиотека #java
📥 Библиотека интегрируется через Gradle-плагин и не требует runtime-зависимостей. В планах разработки — расширение поддержки кастомных контейнеров и интерфейсов, что сделает решение ещё более гибким.
📝 PoCo стоит рассмотреть тем, кто работает с комплексными доменными моделями и устал от длительного ручного парсинга данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥3☃1
Бесплатный вебинар от Слёрма «Траблшутинг K8s: инструменты и лайфхаки для разработчиков».
На вебинаре:
- начнём с kubectl,
- посмотрим сайдкар контейнеры и узнаем, зачем их использовать,
- разберемся с сетевыми проблемами,
- научимся использовать strace для сложных случаев
Спикер: Виталий Лихачев, SRE в крупном нидерландском тревелтехе.
Дата: 14 мая 19:00
👉 Занять место — через бота.
В конце вебинара — подарок 🎁
Вебинар проходит в рамках курса «Kubernetes для разработчиков»
#реклама
О рекламодателе
erid: 2W5zFHBxFX6
На вебинаре:
- начнём с kubectl,
- посмотрим сайдкар контейнеры и узнаем, зачем их использовать,
- разберемся с сетевыми проблемами,
- научимся использовать strace для сложных случаев
Спикер: Виталий Лихачев, SRE в крупном нидерландском тревелтехе.
Дата: 14 мая 19:00
👉 Занять место — через бота.
В конце вебинара — подарок 🎁
Вебинар проходит в рамках курса «Kubernetes для разработчиков»
#реклама
О рекламодателе
erid: 2W5zFHBxFX6
❤2👍2🔥2
Живая телеметрия без overhead
Если вам нужно анализировать производительность приложения в реальном времени, но профилировщики вроде VisualVM или async-profiler слишком тяжелые, то Java Flight Recorder (JFR) Event Streaming — ваш новый лучший друг.
JFR давно встроен в JVM и собирает метрики без ощутимого влияния на производительность (накладные расходы <1%). Раньше, чтобы получить данные, нужно было снимать дамп и разбирать его постфактум. Начиная с Java 14 пакет jdk.jfr.consumer предоставляет API, благодаря которому можно стримить события в реальном времени прямо в приложение.
🟢 Пример использования
Допустим, вы хотите следить за количеством вызовов System.gc() (или любыми другими JVM-событиями):
🟢 Что происходит
🔘 EventStream.openRepository() — подключается к JFR и слушает события онлайн
🔘 onEvent("jdk.GarbageCollection", callback) — подписывается на сборку мусора
🔘 stream.start(); — запускает стриминг
🟢 Где полезно
1️⃣ Мониторинг продакшена — следите за GC, JIT-компиляцией, блокировками потоков без перезапуска JVM.
2️⃣ Анализ нагрузки — получайте данные о CPU, аллокациях памяти, I/O в реальном времени.
3️⃣ Трассировка медленных запросов — находите узкие места без включения дорогих профилировщиков.
🟢 Что нужно знать
🔘 Работает без agent'ов и почти без overhead.
🔘 Доступно из коробки в OpenJDK 14+.
🔘 Встроенные события JVM уже можно стримить, но для своих нужно создать Custom JFR Events.
❓ Вы уже пробовали JFR Event Streaming?
✅ Java библиотека #java
Если вам нужно анализировать производительность приложения в реальном времени, но профилировщики вроде VisualVM или async-profiler слишком тяжелые, то Java Flight Recorder (JFR) Event Streaming — ваш новый лучший друг.
JFR давно встроен в JVM и собирает метрики без ощутимого влияния на производительность (накладные расходы <1%). Раньше, чтобы получить данные, нужно было снимать дамп и разбирать его постфактум. Начиная с Java 14 пакет jdk.jfr.consumer предоставляет API, благодаря которому можно стримить события в реальном времени прямо в приложение.
Допустим, вы хотите следить за количеством вызовов System.gc() (или любыми другими JVM-событиями):
import jdk.jfr.consumer.*;
public class JfrStreamingExample {
public static void main(String[] args) {
try (var stream = EventStream.openRepository()) {
stream.onEvent("jdk.GarbageCollection", event ->
System.out.println("GC event: " + event.getLong("gcId"))
);
stream.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤6🔥3
📚 Awesome JavaFX — это тщательно подобранная коллекция ресурсов, включающая фреймворки, библиотеки, руководства и примеры кода, которые помогут ускорить написание кода.
Здесь собраны множество полезных инструментов для разработчиков всех уровней - от учебных материалов для новичков до продвинутых решений вроде TornadoFX.
Пользуйтесь ☕️
🖥 GitHub
✅ Java библиотека #java
Здесь собраны множество полезных инструментов для разработчиков всех уровней - от учебных материалов для новичков до продвинутых решений вроде TornadoFX.
Пользуйтесь ☕️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4❤3
— Чёткая структура проекта и стандартизация.
— Огромное количество доступных плагинов.
— Репозитории (Maven Central) делают управление зависимостями удобным.
— XML-файлы могут раздуваться и становиться громоздкими.
— Скорость сборки ниже по сравнению с Gradle.
— Сложнее писать кастомные задачи (Goals).
— Поддерживает Groovy и Kotlin DSL.
— Более быстрая сборка благодаря инкрементальному билду и кэшированию.
— Меньше кода в конфигурации по сравнению с Maven.
— Меньше стандартов, возможна путаница с конфигурацией.
— Выше порог вхождения, особенно если переходите с Maven.
— Может быть сложнее отлаживать проблемы со сборкой.
👍🏼 — Maven, 🔥 — Gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍110🔥58❤1