Java библиотека
31.6K subscribers
2.33K photos
78 videos
8 files
2.07K links
Книги, статьи, мемы и многое другое для Java программиста!

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

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

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

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

🎯 Курс «Java Developer. Professional» — это структурированное обучение для разработчиков, которые хотят выйти на новый уровень, освоить актуальный стек технологий и уверенно претендовать на позиции уровня Middle+.

Вы получите 96 часов практической работы, на живых вебинарах разберете ключевые аспекты работы JVM, научитесь строить эффективные многопоточные приложения, освоите Spring WebFlux, Kafka, реактивный Postgres и Kubernetes.

📚Программа OTUS постоянно обновляется, соответствуя требованиям рынка, а диплом ценится работодателями.

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

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

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


public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;

System.out.println(a == b); // ?
System.out.println(c == d); // ?
System.out.println(c.equals(d)); // ?
}
}


Что выведет программа?
🧠 Подвох:
Многие ожидают:


true
true
true

Но на самом деле Java напечатает:


true
false
true


🧠 Объяснение:
В Java значения Integer от -128 до 127 кэшируются (Integer Cache). То есть Integer.valueOf(127) возвращает один и тот же объект.

a == b → true потому что 127 в диапазоне кэширования.

c == d → false потому что 128 не кэшируется, создаются разные объекты.

.equals() сравнивает значения, поэтому c.equals(d) → true.

Урок:
Никогда не сравнивай Integer, Long, Boolean и другие объекты-обёртки через ==. Используй .equals().

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍218🔥6
💡Big Data — это не только модный термин, а фундамент современной аналитики и AI. Apache Spark — инструмент, который используют крупнейшие компании по всему миру. Хотите понять, как он работает, и применить его в своей практике?

28 августа в 18:00 мы проведем открытый вебинар «Практическое введение в Apache Spark». За 1,5 часа вы узнаете, зачем нужен Spark, как разворачивать тестовую среду в Docker, работать с DataFrame API и Spark SQL, оптимизировать запросы и избегать типичных ошибок.

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

➡️ Открытый урок проходит в преддверии старта курса «Spark Developer», все участники получат скидку на обучение. Регистрируйтесь прямо сейчас: https://vk.cc/cOYBGx

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
5👍2🔥2
Lombok — спасение от boilerplate или технический долг?

Lombok давно стал популярным решением. Аннотации вроде @Getter, @Builder, @Slf4j избавляют от рутинного кода и ускоряют разработку.

🟢За Lombok
— Устраняет шаблонный код и снижает количество ручных ошибок.
— Удобен при работе с immutable‑объектами и внедрении зависимостей через конструкторы.

🟢Против Lombok
— Зависимость от нестабильных internal‑API.
— Требует обязательной поддержки на всех IDE/CI.
— За «синтаксический сахар» приходится платить техническим долгом.

Подключать Lombok и ускорять разработку ценой стабильности, или отказаться и держать чистоту кода?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥3
Готовы стать успешным CTO и научиться управлять техническими подразделениями?

Курс «CTO / Технический директор»от OTUS — это ваш путь к профессионализму в этой роли. Прокачайте свои управленческие навыки и обеспечьте успешную работу команды. Вы научитесь:

- Разрабатывать и внедрять технологическую стратегию.
- Управлять командами из 100+ человек в техническом подразделении.
- Балансировать между операционными задачами и стратегическим планированием.
- Делегировать обязанности и быть лидером, который понимает все аспекты разработки.

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

🎁 Суммируйте скидку 10% на сайте + 5% промокод CTO_8 и учитесь на курсе «CTO / Технический директор» по летним ценам: https://vk.cc/cOZoHG
Условия действую по 31.08 включительно!

➡️ Пройдите вступительное тестирование прямо сейчас: https://vk.cc/cOZoHG
2👍2🔥2
🔐 pac4j — универсальный фреймворк для аутентификации и авторизации в Java-приложениях. Этот инструмент упрощает интеграцию десятков механизмов проверки подлинности в веб-сервисы и MVC-фреймворки (Spring, Play, Vert.x и другие).

Проект обладает модульностью: можно собрать систему безопасности как конструктор, комбинируя компоненты для работы с ролями, CSRF-защитой или CORS. Поддерживается даже экзотика вроде Kerberos или проверки по IP-адресу. При этом код остаётся читаемым благодаря Lombok в новых версиях.

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥42
Генерация Event-Driven архитектуры на Spring + Kafka

Классический REST не справляется с масштабом и скоростью реакции? Пора перейти к событийной архитектуре: Kafka + Spring Boot. Спросите AI — и получите продуманный шаблон микросервиса с продюсерами, консьюмерами, сериализацией, хэндлингом ошибок и даже dead-letter-топиками.

📝 Промпт:


Generate a production-grade Java Spring Boot microservice using Apache Kafka for event-driven architecture.
— Use Spring Boot 3 and Spring Kafka.
— Implement Kafka producers and consumers for a user.created event.
— Use Avro schema for message serialization and Schema Registry for compatibility.
— Include retry logic and Dead Letter Topic (DLT) support for failed messages.
— Handle message headers and custom error handling.
— Add integration tests using Embedded Kafka and Testcontainers.


💡 Расширения:

— Добавьте Implement the outbox pattern using a transactional Kafka producer and Debezium CDC, чтобы гарантировать доставку событий и избежать дублирования при сбоях в БД.
— Добавьте Integrate observability using Micrometer for Prometheus and OpenTelemetry for distributed tracing, чтобы отслеживать метрики и трассировать поток сообщений сквозь микросервисы.
— Добавьте Generate Kafka topic and consumer group configuration using Terraform, чтобы автоматизировать инфраструктуру и обеспечить консистентную настройку топиков в Dev/Stage/Prod.
— Добавьте Support dynamic partitioning and load balancing among consumers, чтобы масштабировать консьюмеров при увеличении нагрузки.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5🔥5
Если вы пишете бэкенд на Java и хотите работать на уровне серьёзных проектов, тестирование в Spring — навык, без которого сейчас никуда.

На открытом уроке «Тестирование Spring-приложений. Интеграционные тесты с контекстом» вы разберётесь, как правильно тестировать репозитории (JDBC и JPA) и сервисы с учётом транзакций. Это ключ к тому, чтобы ваш код был не только рабочим, но и надёжным в реальных продакшн-системах.

Вы получите пошаговый разбор особенностей интеграционного тестирования и научитесь писать простые тесты для репозиториев и сервисов. Эти знания напрямую повысят вашу ценность на рынке как Java-разработчика.

Урок проходит в преддверие старта курса «Разработчик на Spring Framework», все участники получат скидку на обучение: https://vk.cc/cP0xtH

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
2👍2🔥2
👩‍💻 Spring AI — новый проект от Spring, упрощающий интеграцию ИИ-моделей в Java-приложения. Он предлагает унифицированный API для работы с разными провайдерами, поддерживая чат-ботов, генерацию изображений и текста, а также векторизацию данных.

Проект вдохновлён LangChain, но адаптирован под Spring-экосистему: здесь есть автоматическая конфигурация через Spring Boot, поддержка векторных баз данных и инструменты для оценки качества ответов моделей. Разработчики делают акцент на переносимость кода между разными ИИ-сервисами.

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥6👍3
⌨️ Как вырасти до Мидла или Синьора в два раза быстрее?

👨‍💻Просто хорошо работать работу не достаточно. Ты делаешь то, что нужно компании, а не то, что повысит твой грейд

Лучший способ вырасти — это персональный план развития от Senior-инженера из БигТеха.

Вот как все работает:
1️⃣ Мок-интервью 1-на-1: Час реалистичного собеса с Senior-инженером из Иннотеха, Сбера или другого бигтеха
2️⃣ Честный фидбек: созвонимся и расскажем твои точки роста, оценим грейд и потенциальный уровень зарплаты
3️⃣Персональный план развития: не просто «учите алгосы», а роадмап с конкретными темами, который приведет тебя к желаемому грейду или офферу

Мы в ШОРТКАТ провели уже почти 1000 таких мок-интервью и получили оценку 4.9/5, поэтому знаем о чем говорим.

📈 Да, и все это за 900 рублей. Почему так дешево?
Мы хотим, чтобы у каждого была возможность проверить в деле наш сервис, а потом уже доверить нам свое развитие.

Переходи в нашего бота и забирай свой мок за 900 рублей →
@shortcut_sh_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥2
👩‍💻 Магия IntelliJ IDEA

Забудьте про System.out.println() в логике — используйте Evaluate Expression прямо во время отладки, чтобы проверить любые значения на лету.

🟢Что делает

— Позволяет выполнять произвольные выражения прямо во время паузы
— Работает с контекстом текущего стека: переменные, поля, this
— Поддерживает сложные конструкции: myList.stream().filter(...).collect(...)

🟢Зачем это нужно

— Позволяет быстро проверять гипотезы при отладке
— Избавляет от лишних логов или временных переменных
— Помогает исследовать поведение без изменения кода

🟢Как использовать

— Поставьте breakpoint и запустите Debug
— Когда выполнение остановится, нажмите Alt + F8
— Введите выражение и нажмите Evaluate

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍12🔥5
🐘 Hibernate ORM — зрелый ORM-фреймворк для Java, который остается стандартом де-факто для работы с реляционными БД. Хотя проект реализует JPA-спецификацию, он предлагает гораздо больше возможностей — от расширенного кэширования до поддержки экзотических СУБД вроде SAP HANA.

Разработчики уделяют внимание тестированию: в комплекте идут Docker-скрипты для быстрого развертывания 15+ СУБД и гибкая система профилей. Сборка требует JDK 21, но сохраняет совместимость с Java 17.

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥2
🏗 Курс “Software Architect” от OTUS — старт набора в группу обучения

Если хотите проектировать отказоустойчивые и масштабируемые системы — этот курс для вас!


Почему стоит пойти:

• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.

💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам

После курса вы сможете:

• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем

👉 Пройдите вступительное тестирование:

https://vk.cc/cP26rp
3👍2🔥2
👩‍💻 Генерация аудита пользовательских действий в Spring Boot

Нужно отслеживать, кто что сделал в приложении: создал пользователя, обновил заказ или удалил файл? Реализуйте модуль аудита, который не просто логирует в консоль, а сохраняет структурированные события в базу или брокер. AI поможет с шаблоном, который можно встроить в любой микросервис.

📝 Промпт:


Generate a reusable audit logging module for a Spring Boot 3 application.

— Use Spring AOP to intercept service-layer methods annotated with @Auditable.
— Capture method name, parameters, execution time, and authenticated user details.
— Log audit events asynchronously to Kafka with a custom AuditEvent structure.
— Use JSON for message serialization and include correlation IDs in headers.
— Include fallback to local file logging in case of Kafka failure.
— Add integration with Spring Security to extract user identity from the context.
— Write unit and integration tests using JUnit 5 and Testcontainers.


💡 Расширения:

— Добавьте Implement audit event persistence to PostgreSQL using Spring Data JPA, чтобы хранить критические события даже при сбоях брокера.
— Добавьте Include context metadata (request IP, user-agent) using ServletRequest attributes, чтобы повысить трассируемость действий пользователя.
— Добавьте Add audit dashboard using Spring Boot Admin and Grafana, чтобы визуализировать действия и аномалии в реальном времени.
— Добавьте Integrate OpenTelemetry spans around auditing logic, чтобы отслеживать поток аудита между микросервисами на уровне трассировки.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
👩‍💻 BTrace — динамический инструмент для трассировки Java-приложений. Проект позволяет безопасно отслеживать работу Java-программ в реальном времени без перезапуска. Встраивает байткод для мониторинга производительности, логирования вызовов методов или анализа проблем прямо в работающее приложение.

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

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥54
Java Guru - вопросы и задачи с собеседований. Канал с помощью которого ты точно получишь оффер!

👩‍💻 Android Developer - канал для андроид разработчиков! Статьи, вопросы и задачи с собеседований, лайфхаки.

👩‍💻 Kotlin Developer - самый топовый канал для котлин разработчика!

📕 Книги для Java программиста - канал с книгами по Java. Постоянно выходят новинки как на русском так и на английском языке!

📰 Java News - канал с последними новостями из мира Java!
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1🔥1
Правильное понимание Liskov Substitution Principle (LSP)

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

Однако, давайте разберем это более подробно.

🟢Что на самом деле означает LSP?

В классическом виде (по Барбаре Лисков):
Объекты программы должны быть заменяемы экземплярами их подтипов без изменения правильности работы программы.


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

🟢Часто встречаемые ошибки трактования LSP

1. Подмена функционала


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

Плохо:
class Bird {
void fly() { ... }
}

class Chicken extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Chicken can't fly");
}
}


Этот пример нарушает LSP, потому что подкласс не может выполнять все действия родителя.

2. Нарушение инвариантов

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

Плохо:
class Rectangle {
int width, height;

void setWidth(int width) { this.width = width; }
void setHeight(int height) { this.height = height; }
}

class Square extends Rectangle {
@Override
void setWidth(int width) {
this.width = this.height = width;
}

@Override
void setHeight(int height) {
this.height = this.width = height;
}
}


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

🟢Что на практике важно понимать о LSP

— Соблюдение контракта родительского класса

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

— Логика не должны быть нарушена, лишь расширена


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

— Наследование — это не просто копирование, а расширение возможностей

Правильное наследование позволяет создавать более специфичные классы без нарушения логики родительского класса.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍7🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
👩‍💻 jCasbin — библиотека контроля доступа для Java-приложений. Проект предлагает гибкую систему авторизации с поддержкой популярных моделей: ACL, RBAC, ABAC и других. Конфигурация правил доступа описывается в простых CONF-файлах, что позволяет легко адаптировать систему под разные сценарии — от RESTful API до сложных многоуровневых политик.

Инструмент имеет встроенный онлайн-редактор для тестирования правил прямо в браузере. Интегрируется с Spring Boot и работает с разными хранилищами политик, включая базы данных.

🖥 GitHub

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