🎯 Курс «Java Developer. Professional» — это структурированное обучение для разработчиков, которые хотят выйти на новый уровень, освоить актуальный стек технологий и уверенно претендовать на позиции уровня Middle+.
Вы получите 96 часов практической работы, на живых вебинарах разберете ключевые аспекты работы JVM, научитесь строить эффективные многопоточные приложения, освоите Spring WebFlux, Kafka, реактивный Postgres и Kubernetes.
📚Программа OTUS постоянно обновляется, соответствуя требованиям рынка, а диплом ценится работодателями.
https://vk.cc/cOYCWu
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥2☃1
Задача:
❓ Что выведет программа?
🧠 Подвох:
Многие ожидают:
Но на самом деле Java напечатает:
🧠 Объяснение:
В 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
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().
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤8🔥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
28 августа в 18:00 мы проведем открытый вебинар «Практическое введение в Apache Spark». За 1,5 часа вы узнаете, зачем нужен Spark, как разворачивать тестовую среду в Docker, работать с DataFrame API и Spark SQL, оптимизировать запросы и избегать типичных ошибок.
Вместе разберем реальный кейс на небольшом датасете и вы увидите, что обработка больших данных может быть быстрой и удобной.
➡️ Открытый урок проходит в преддверии старта курса «Spark Developer», все участники получат скидку на обучение. Регистрируйтесь прямо сейчас: https://vk.cc/cOYBGx
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤5👍2🔥2
Lombok давно стал популярным решением. Аннотации вроде @Getter, @Builder, @Slf4j избавляют от рутинного кода и ускоряют разработку.
— Устраняет шаблонный код и снижает количество ручных ошибок.
— Удобен при работе с immutable‑объектами и внедрении зависимостей через конструкторы.
— Зависимость от нестабильных internal‑API.
— Требует обязательной поддержки на всех IDE/CI.
— За «синтаксический сахар» приходится платить техническим долгом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥3
Готовы стать успешным CTO и научиться управлять техническими подразделениями?
Курс «CTO / Технический директор»от OTUS — это ваш путь к профессионализму в этой роли. Прокачайте свои управленческие навыки и обеспечьте успешную работу команды. Вы научитесь:
- Разрабатывать и внедрять технологическую стратегию.
- Управлять командами из 100+ человек в техническом подразделении.
- Балансировать между операционными задачами и стратегическим планированием.
- Делегировать обязанности и быть лидером, который понимает все аспекты разработки.
Программа курса обновляется с учетом актуальных требований рынка, а диплом OTUS высоко ценится среди крупных компаний.
🎁 Суммируйте скидку 10% на сайте + 5% промокод CTO_8 и учитесь на курсе «CTO / Технический директор» по летним ценам: https://vk.cc/cOZoHG
Условия действую по 31.08 включительно!
➡️ Пройдите вступительное тестирование прямо сейчас: https://vk.cc/cOZoHG
Курс «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
Проект обладает модульностью: можно собрать систему безопасности как конструктор, комбинируя компоненты для работы с ролями, CSRF-защитой или CORS. Поддерживается даже экзотика вроде Kerberos или проверки по IP-адресу. При этом код остаётся читаемым благодаря Lombok в новых версиях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥4❤2
Генерация Event-Driven архитектуры на Spring + Kafka
Классический REST не справляется с масштабом и скоростью реакции? Пора перейти к событийной архитектуре: Kafka + Spring Boot. Спросите AI — и получите продуманный шаблон микросервиса с продюсерами, консьюмерами, сериализацией, хэндлингом ошибок и даже dead-letter-топиками.
📝 Промпт:
💡 Расширения:
— Добавьте
— Добавьте
— Добавьте
— Добавьте
✅ Java библиотека #java
Классический 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
, чтобы масштабировать консьюмеров при увеличении нагрузки.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
На открытом уроке «Тестирование Spring-приложений. Интеграционные тесты с контекстом» вы разберётесь, как правильно тестировать репозитории (JDBC и JPA) и сервисы с учётом транзакций. Это ключ к тому, чтобы ваш код был не только рабочим, но и надёжным в реальных продакшн-системах.
Вы получите пошаговый разбор особенностей интеграционного тестирования и научитесь писать простые тесты для репозиториев и сервисов. Эти знания напрямую повысят вашу ценность на рынке как Java-разработчика.
Урок проходит в преддверие старта курса «Разработчик на Spring Framework», все участники получат скидку на обучение: https://vk.cc/cP0xtH
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤2👍2🔥2
Проект вдохновлён LangChain, но адаптирован под Spring-экосистему: здесь есть автоматическая конфигурация через Spring Boot, поддержка векторных баз данных и инструменты для оценки качества ответов моделей. Разработчики делают акцент на переносимость кода между разными ИИ-сервисами.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥6👍3
Лучший способ вырасти — это персональный план развития от Senior-инженера из БигТеха.
Вот как все работает:
Мы в ШОРТКАТ провели уже почти 1000 таких мок-интервью и получили оценку 4.9/5, поэтому знаем о чем говорим.
Мы хотим, чтобы у каждого была возможность проверить в деле наш сервис, а потом уже доверить нам свое развитие.
Переходи в нашего бота и забирай свой мок за 900 рублей → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥2
Забудьте про System.out.println() в логике — используйте Evaluate Expression прямо во время отладки, чтобы проверить любые значения на лету.
— Позволяет выполнять произвольные выражения прямо во время паузы
— Работает с контекстом текущего стека: переменные, поля, this
— Поддерживает сложные конструкции: myList.stream().filter(...).collect(...)
— Позволяет быстро проверять гипотезы при отладке
— Избавляет от лишних логов или временных переменных
— Помогает исследовать поведение без изменения кода
— Поставьте breakpoint и запустите Debug
— Когда выполнение остановится, нажмите Alt + F8
— Введите выражение и нажмите Evaluate
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
Разработчики уделяют внимание тестированию: в комплекте идут Docker-скрипты для быстрого развертывания 15+ СУБД и гибкая система профилей. Сборка требует JDK 21, но сохраняет совместимость с Java 17.
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
Если хотите проектировать отказоустойчивые и масштабируемые системы — этот курс для вас!
Почему стоит пойти:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
👉 Пройдите вступительное тестирование:
https://vk.cc/cP26rp
❤3👍2🔥2
Нужно отслеживать, кто что сделал в приложении: создал пользователя, обновил заказ или удалил файл? Реализуйте модуль аудита, который не просто логирует в консоль, а сохраняет структурированные события в базу или брокер. 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
, чтобы отслеживать поток аудита между микросервисами на уровне трассировки.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤2👍2
Интегрируется через командную строку или Maven-плагин. Особенно полезен при диагностике проблем в продакшн-средах, где традиционные профайлеры могут быть слишком тяжелыми.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥5❤4
❓Java Guru - вопросы и задачи с собеседований. Канал с помощью которого ты точно получишь оффер!
👩💻 Android Developer - канал для андроид разработчиков! Статьи, вопросы и задачи с собеседований, лайфхаки.
👩💻 Kotlin Developer - самый топовый канал для котлин разработчика!
📕 Книги для Java программиста - канал с книгами по Java. Постоянно выходят новинки как на русском так и на английском языке!
📰 Java News - канал с последними новостями из мира Java!
📕 Книги для 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. Подмена функционала
Проблемы могут возникнуть, если подкласс значительно меняет поведение метода родительского класса. Например, если метод в подклассе требует дополнительных условий или приводит к ошибкам, это нарушает принцип.
❌ Плохо:
Этот пример нарушает LSP, потому что подкласс не может выполнять все действия родителя.
2. Нарушение инвариантов
Если подкласс добавляет новые ограничения или меняет условия, которые предполагались в родительском классе, это может привести к неожиданным результатам. Например, если родительский класс предполагает, что его методы могут работать в определённых диапазонах значений, а в подклассе эти значения не допустимы, это также нарушает принцип.
❌ Плохо:
В этом примере подкласс Square изменяет логику работы с размерами, нарушая ожидаемое поведение родительского класса.
🟢 Что на практике важно понимать о LSP
— Соблюдение контракта родительского класса
Подклассы должны соблюдать контракт родительского класса, а не изменять его. Это означает, что если родительский класс предполагает выполнение определённых операций, подкласс не должен их нарушать.
— Логика не должны быть нарушена, лишь расширена
Подклассы должны только дополнять, а не изменять поведение родительского класса. Это должно обеспечивать предсказуемость программы.
— Наследование — это не просто копирование, а расширение возможностей
Правильное наследование позволяет создавать более специфичные классы без нарушения логики родительского класса.
✅ Java библиотека #java
Принципе подстановки Лискова нередко трактуют слишком формально или упрощенно. Простой ответ: 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 изменяет логику работы с размерами, нарушая ожидаемое поведение родительского класса.
— Соблюдение контракта родительского класса
Подклассы должны соблюдать контракт родительского класса, а не изменять его. Это означает, что если родительский класс предполагает выполнение определённых операций, подкласс не должен их нарушать.
— Логика не должны быть нарушена, лишь расширена
Подклассы должны только дополнять, а не изменять поведение родительского класса. Это должно обеспечивать предсказуемость программы.
— Наследование — это не просто копирование, а расширение возможностей
Правильное наследование позволяет создавать более специфичные классы без нарушения логики родительского класса.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍7🔥5
Инструмент имеет встроенный онлайн-редактор для тестирования правил прямо в браузере. Интегрируется с Spring Boot и работает с разными хранилищами политик, включая базы данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3