Есть фича. Есть дедлайн. Есть понимание, что тесты надо писать… но они отъедают время, которого итак впритык.
Один наш знакомый девелопер сказал: «С тех пор как поставил Explyt Test — начал писать меньше тестов… но покрытие стало лучше. Как это вообще возможно?!»
Попробуйте сами. Плагин сам предлагает тесты для вашего кода — прямо в IDE.
👉 explyt.ai — сэкономь себе пару часов уже сегодня.
Один наш знакомый девелопер сказал: «С тех пор как поставил Explyt Test — начал писать меньше тестов… но покрытие стало лучше. Как это вообще возможно?!»
Попробуйте сами. Плагин сам предлагает тесты для вашего кода — прямо в IDE.
👉 explyt.ai — сэкономь себе пару часов уже сегодня.
👍6🔥4❤2
Композиция: что это и когда использовать?
Композиция — это тип отношения, когда один класс жёстко связан с другим, и объекты не могут существовать независимо. Если контейнерный объект уничтожается, то и все объекты, которые он содержит, также будут уничтожены.
Пример:
🔹 В этом примере класс Human композирует объект Heart, и сердце не может существовать вне человека.
Композицию стоит использовать, когда объекты должны быть тесно связаны и уничтожаться вместе. Например, птица и её крылья — без птицы существование крыльев не имеет смысла.
✅ Java библиотека #java
Композиция — это тип отношения, когда один класс жёстко связан с другим, и объекты не могут существовать независимо. Если контейнерный объект уничтожается, то и все объекты, которые он содержит, также будут уничтожены.
Пример:
class Heart {
void beat() {
System.out.println("Сердце бьется");
}
}
class Human {
private final Heart heart;
Human() {
this.heart = new Heart(); // Сердце создаётся вместе с человеком
}
void live() {
heart.beat();
System.out.println("Человек живёт");
}
}
public class Main {
public static void main(String[] args) {
Human human = new Human();
human.live();
}
}
🔹 В этом примере класс Human композирует объект Heart, и сердце не может существовать вне человека.
Композицию стоит использовать, когда объекты должны быть тесно связаны и уничтожаться вместе. Например, птица и её крылья — без птицы существование крыльев не имеет смысла.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤6🔥3
Хотите прокачать карьеру в разработке на Java, но не знаете, с чего начать?
Курс «Scala-разработчик» — это идеальный вариант для тех, кто хочет работать с современными технологиями. Мы обучаем не только функциональному программированию, но и созданию масштабируемых приложений, которые применяются в таких областях как машинное обучение, бизнес-аналитика и социальные сети.
На курсе вы:
- Научитесь разрабатывать приложения на Scala.
- Освоите популярные библиотеки и подходы функционального программирования.
- Погрузитесь в микросервисы, Akka, CQRS и другие технологии.
Пройдите короткое тестирование и получите скидку на обучение:
→ https://vk.cc/cLed5V
Курс «Scala-разработчик» — это идеальный вариант для тех, кто хочет работать с современными технологиями. Мы обучаем не только функциональному программированию, но и созданию масштабируемых приложений, которые применяются в таких областях как машинное обучение, бизнес-аналитика и социальные сети.
На курсе вы:
- Научитесь разрабатывать приложения на Scala.
- Освоите популярные библиотеки и подходы функционального программирования.
- Погрузитесь в микросервисы, Akka, CQRS и другие технологии.
Пройдите короткое тестирование и получите скидку на обучение:
→ https://vk.cc/cLed5V
👍4🔥3❤2😁1
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