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

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

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

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

Сообщество VK https://vk.com/javatutorial
Download Telegram
👩‍💻 Хотите выйти за пределы стандартных подходов в Java-разработке? Разобраться в JVM, многопоточности и современных фреймворках?

🔥 Актуальное обучение, курс «Java Developer. Professional» — это 96 часов практики, детальный разбор технологий, код-ревью от опытных экспертов и работа с Spring WebFlux, Kafka, Kubernetes.

После обучения вы сможете разрабатывать сложные Java-приложения уровня Middle+, понимать работу JVM изнутри и писать чистый, оптимизированный код.

🎁 Дарим промокод, который дает скидку на обучение - JAVA_06

➡️ Пройдите вступительное тестирование и получите скидку: https://vk.cc/cMooun

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Spring Scheduler: Управление расписанием задач на Java

Spring Scheduler — это часть Spring Framework, которая позволяет планировать и выполнять задачи в заданное время или по расписанию. Он избавляет от необходимости интеграции сторонних библиотек, предлагая встроенные решения для управления задачами.

Виды задач:

- @Scheduled — аннотация для запуска методов по расписанию.
- TaskScheduler — интерфейс для более гибкого управления задачами.
- Cron-выражения — для сложных расписаний.

✔️ Преимущества:

- Простота использования за счёт минимальной конфигурации.
- Интеграция с другими частями Spring.
- Поддержка CRON-выражений для гибкости.

Недостатки:

- Ограниченная поддержка в распределённых системах.
- Возможные сложности с тестированием задач.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Mill — новый инструмент для сборки проектов на Java/Scala

Mill стремится облегчить процесс сборки, для чего заимствует идеи из таких современных инструментов, как Maven, Gradle, Bazel и SBT.

Mill автоматизирует решение многих общих проблем, связанных с инструментами сборки, таких как кэширование, инкрементные повторные вычисления и параллелизм, что позволяет сосредоточить усилия на бизнес-логике, а Mill позаботится обо всем остальном.

🖥 GitHub
🟡 Доки

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Java — различные форматы конфигурации

🟢 YAML

— Удобочитаемый формат сериализации данных
— Использует отступы для вложенности
— Часто используется для конфигурационных файлов и обмена данными

🟢 JSON

— Лёгкий формат обмена данными с использованием пар "ключ-значение"
— Широко используется в API, конфигурационных файлах и для обмена данными

🟢 XML

— Язык разметки, использующий теги для определения элементов данных и их структуры
— Часто применяется для представления структурированных данных и хранения документов

🟢 Java Properties

— Простой формат конфигурации с парами "ключ-значение"
— Используется в Java-приложениях для хранения настроек и конфигурационных данных

💬 Какой формат вы используете чаще всего?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Собеседование: Архитектура потоковой обработки событий с откатом состояний

🟢Условие задачи:

Вам нужно спроектировать и реализовать на Java следующую систему:

1. Система подключается к непрерывному потоку событий (EventStream).
2. Каждое событие (Event) имеет структуру:


class Event {
String entityId;
Instant timestamp;
String eventType;
Map<String, Object> payload;
}

3. В реальном времени нужно собирать и поддерживать текущее состояние каждой сущности (Entity), применяя полученные события.
4. Система должна поддерживать откат состояния:
- Пользователь может запросить состояние любой сущности на любую произвольную временную точку (Instant timestamp).
- После отката система должна продолжать обрабатывать новые события без остановки и потери данных.

🟢Дополнительные требования:

- Потокобезопасность обработки событий и запросов на откат.
- Высокая производительность: обработка миллионов событий в минуту.
- Быстрый откат состояния (target: < 100 мс).
- Только стандартные библиотеки Java (java.util.concurrent, java.time, коллекции и т.д.).
- Архитектура должна позволять добавлять новые типы событий без модификации существующего кода.

🟢Бонус:

- Реализация механизма снимков (snapshot) состояний для оптимизации откатов.
- Автоматическое создание snapshot'ов каждые N событий для каждой сущности.
- Поддержка нескольких стратегий отката (например, быстрый откат по ближайшему snapshot + события, или чистая перемотка всех событий).

📌 Что оценивается:

Архитектура: Четкая декомпозиция слоёв, масштабируемость и возможность расширения системы без существенных изменений базового кода.

Работа с многопоточностью: Гарантия безопасности доступа к общим структурам данных в условиях параллельной обработки событий.

Производительность: Минимизация блокировок, эффективная работа с большими объёмами данных, оптимизация по времени отклика и использованию ресурсов.

Чистота кода: Понятные и логичные интерфейсы, чистая реализация без "грязных хака", хорошая читаемость и поддерживаемость кода.

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

Стратегии оптимизации: Эффективное использование snapshot'ов состояния, продуманная организация хранения и восстановления событий.

Обработка ошибок и отказоустойчивость: Умение проектировать систему так, чтобы она корректно вела себя при сбоях, сетевых ошибках и высоких нагрузках.

🟡Подводные камни:

- Проблема гонки состояний: если одновременно приходит событие и запрашивается откат — что происходит?
- Рост памяти: если хранить все события, как не "убить" память?
- Перепутанные таймстемпы: что делать, если события приходят с задержкой или не по порядку?
- Обновление типов событий: как легко добавить новый eventType без переписывания всей логики?
- Производительность при откате: как не делать полный перебор событий за годы работы?

🟢Рекомендация к решению:

- Используйте copy-on-write подход для состояний сущностей.
- Используйте параллельные структуры данных (ConcurrentHashMap, ConcurrentSkipListMap и т.д.).
- Реализуйте инкапсуляцию логики обработки событий через паттерн "Event Handler" или "Command Handler".
- Внедрите отдельный менеджер snapshot'ов и менеджер событий.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🦉 Apache ZooKeeper координация распределенных систем без лишней сложности

В эпоху Kubernetes и сервис-мешей скромный ZooKeeper продолжает оставаться фундаментальным инструментом для управления конфигурацией и синхронизации распределенных систем. Последние версии проекта (3.5.5+) сохраняют минималистичный подход — чистые Java-бинарники, документация в Markdown и прозрачный процесс сборки через Maven.

Несмотря на появление альтернатив вроде etcd, ZooKeeper по-прежнему широко используется в Hadoop-экосистеме и как бэкенд для Apache Kafka.

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 XPipe — вся ваша серверная инфраструктура под рукой

choco install xpipe
или
bash <(curl -sL https://github.com/xpipe-io/xpipe/raw/master/get-xpipe.sh)

XPipe — open-source инструмент на Java, который позволяет получить доступ ко всей инфраструктуре сервера с локальной машины.

Он работает поверх установленных программ командной строки и не требует настройки на удаленных системах. Так что если вы используете такие инструменты, как ssh, docker, kubectl и т.д. для подключения к серверам, вы можете просто использовать XPipe поверх них.

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

🖥 GitHub

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

Хотите научиться подбирать правильные протоколы для вашей системы?

Откройте для себя все особенности работы с сетевыми протоколами на открытом уроке курса «System Design».

Мы подробно рассмотрим HTTP/2, HTTP/3, gRPC и WebSocket, а также научим выбирать оптимальные технологии для вашего проекта.

🚀 Знание сетевых протоколов — ключ к построению стабильных, быстрых и масштабируемых веб-приложений.
Пройдите урок и получите навыки, которые улучшат архитектуру ваших решений.

Встречаемся 10 июня в 20:00 МСК

➡️ Регистрация уже открыта: https://vk.cc/cMuKWs

Урок проходит в преддверие старта курса «System Design».

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
ℹ️ Паттерны для тех, кто уже покорил Singleton

— Порождающие паттерны:

🟢Abstract Factory: Family Creator — Создает группы взаимосвязанных объектов.
🟢Builder: Lego Master — Пошагово создает объекты.
🟢Prototype: Clone Maker — Создает копии полностью подготовленных объектов.
🟢Singleton: One and Only — Создаёт объект, который существует в единственном экземпляре.

— Структурные паттерны:

🟢Adapter: Universal Plug — Соединяет объекты с разными интерфейсами.
🟢Bridge: Function Connector — Связывает то, как объект работает, с тем, что он делает.
🟢Composite: Tree Builder — Формирует древовидные структуры из простых и сложных частей.
🟢Decorator: Customizer — Добавляет новые возможности объектам, не изменяя их основную структуру.
🟢Facade: One-Stop-Shop — Представляет всю систему через один упрощенный интерфейс.
🟢Flyweight: Space Saver — Эффективно использует небольшие, многократно используемые объекты.
🟢Proxy: Stand-In Actor — Представляет другой объект, управляя доступом или действиями.

— Поведенческие паттерны:

🟢Chain of Responsibility: Request Relay — Передает запросы через цепочку объектов до тех пор, пока он не будет обработан.
🟢Command: Task Wrapper — Превращает запрос в объект, готовый к выполнению.
🟢Iterator: Collection Explorer — Доступ к элементам коллекции по одному.
🟢Mediator: Communication Hub — Упрощает взаимодействие между различными классами.
🟢Memento: Time Capsule — Сохраняет и восстанавливает состояние объекта.
🟢Observer: News Broadcaster — Уведомляет классы о изменениях в других объектах.
🟢Visitor: Skillful Guest — Добавляет новые операции в класс, не изменяя его.

💬 Какие паттерны вы использовали в реальных кейсах?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Agrona — библиотека Java, позволяющая писать более лаконичный и производительный код

Agrona предоставляет набор структур данных и вспомогательных методов, которые часто требуются при создании высокопроизводительных приложений на Java.
Многие из этих компонентов используются, к примеру, в Aeron для эффективной и надежной передачи IPC-сообщений по протоколу UDP и обеспечивают высокопроизводительную реализацию буферов для поддержки кодека сообщений Simple Binary Encoding.

Например, с помощью Agrona можно переписать код:
List<Integer> numbers = new ArrayList<>();
// fill numbers somehow
Map<Integer, Integer> counters = new HashMap<>();
for (Integer x : numbers) {
counters.compute(x, (k, v) -> v == null ? 1 : v + 1);
}

вот так:
IntArrayList numbers = new IntArrayList();
// fill numbers somehow
Int2IntCounterMap counters = new Int2IntCounterMap(0);
for (int i = 0; i < numbers.size(); i++) {
counters.incrementAndGet(numbers.getInt(i));
}


🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
1691972027119 (1).gif
7.7 MB
ℹ️ 8 архитектурных подходов

🔵 REST: Каждый ресурс системы представлен уникальным URL и взаимодействие с ними осуществляется через стандартные HTTP-методы.
🔵 SOAP: Обмен сообщениями между сервисами происходит через строго структурированные XML-запросы и ответы.
🔵 GraphQL: Позволяет клиентам формировать запросы к API, точно определяя необходимые данные, минимизируя избыточность.
🔵 gRPC: Использует протоколы буферов и HTTP/2 для создания высокопроизводительных и масштабируемых сервисов с двусторонней связью.
🔵 WebSockets: Создаёт постоянное соединение между клиентом и сервером, и обеспечивает двусторонний обмен данными в реальном времени.
🔵 Webhooks: Асинхронное взаимодействие, где сервер уведомляет клиента о событиях через HTTP-запросы, инициированные самим сервером.
🔵 MQTT: Оптимизирован для IoT-устройств, поддерживает легковесный обмен сообщениями с низким потреблением ресурсов.
🔵 AMQP: Для высоконадёжных систем, ориентирован на очереди сообщений и гарантированную доставку данных между сервисами.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Как масштабировать машинные модели и работать с огромными объемами данных? Откройте для себя возможности Spark ML на открытом уроке от OTUS!

Spark ML — это мощный инструмент для масштабируемого машинного обучения, который позволяет обучать модели на больших данных, не переходя на специализированные ML-системы. Мы покажем, как интеграция с Spark SQL и DataFrame API упрощает ETL-подготовку данных и фичуризацию для реальных проектов.

🚀 Убедитесь, как Spark ML решает задачи отказоустойчивости и распределённых вычислений, позволяя вам легко строить промышленные ML-пайплайны.

➡️ Посетите открытый урок 11 июня в 20:00 МСК в преддверие старта курса «Spark Developer» и получите скидку на обучение: https://vk.cc/cMv7fh

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🖥 RoaringBitmap — битовые карты для сжатия чисел в Java

RoaringBitmap — это одна из лучших битовых карт;
используется в Apache Spark, Netflix Atlas, Apache Pinot, Tablesaw и во многих других компаниях.

RoaringBitmap превосходят обычные сжатые битовые карты, такие как WAH, EWAH или Concise. Изображения, сжатые с помощью RoaringBitmap могут быть до сотни раз легче обычных изображений

🖥 GitHub
🟡 Доки

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Релиз через два дня. Код готов. Почти...
Остались тесты. Ну, точнее — покрытие. Потому что QA уже дышит в затылок, а ты сидишь и выбираешь: спать или корпеть до утра.
Explyt Test умеет создавать тесты под твой код — сам. Быстро. В IDE. Без плясок.
Хочешь, чтобы релиз прошёл, а не пролетел? Попробуй бесплатно! 👉 explyt.ai
⚙️ 7 эффективных стратегий для масштабирования базы данных

🟢Индексация: Анализируйте запросы вашего приложения и создавайте подходящие индексы для ускорения работы.
🟢Материализованные представления: Предварительно вычисляйте результаты сложных запросов и сохраняйте их для быстрого доступа.
🟢Денормализация: Упрощайте сложные соединения для повышения скорости выполнения запросов.
🟢Вертикальное масштабирование: Увеличивайте ресурсы сервера (процессоры, оперативную память, хранилище) для улучшения производительности.
🟢Кэширование: Храните часто запрашиваемые данные в быстром хранилище, чтобы снизить нагрузку на базу данных.
🟢Репликация: Создавайте копии основной базы данных на разных серверах для увеличения объема операций чтения.
🟢Шардинг: Разделяйте таблицы на более мелкие части и распределяйте их по серверам для улучшения работы с записью и чтением.

💬 Какие еще методы масштабирования используете вы?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔍Тестовое собеседование с Java-разработчиком из Т1 Иннотех уже завтра

4 июня(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
📂 Илья Аров, старший разработчик в Т1, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Илья будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Илье

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot

Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2Vtzqxc3AHB
🖥 Piranha — инструмент Java для автоматического рефакторинга кода

Piranha — это инструмент для автоматического рефакторинга кода, связанного с устаревшими флагами.

Входными данными для Piranha являются имя флага и ожидаемое поведение;
также необходимо указать список API, связанных с флагами, в файле свойств.
Piranha будет использовать эти данные для автоматического рефакторинга кода в соответствии с ожидаемым поведением.

🖥 GitHub
🟡 Примеры рефакторинга с Piranha

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM