uz
Feedback
Библиотека Java разработчика

Библиотека Java разработчика

Kanalga Telegram’da o‘tish

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Ko'proq ko'rsatish

📈 Telegram kanali Библиотека Java разработчика analitikasi

Библиотека Java разработчика (@bookjava) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 10 249 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 11 972-o'rinni va Rossiya mintaqasida 63 657-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 10 249 obunachiga ega bo‘ldi.

23 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 1 ga, so‘nggi 24 soatda esa 0 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 8.63% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.10% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 885 marta ko‘riladi; birinchi sutkada odatda 420 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 5 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent string, интерфейс, строка, boot, api kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Yuqori yangilanish chastotasi (oxirgi ma’lumot 24 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

10 249
Obunachilar
Ma'lumot yo'q24 soatlar
-117 kunlar
+130 kunlar
Postlar arxiv
Понимание разницы между Error и Exception в Java ✅ Что такое Error в Java? - Error (ошибка) в Java представляет собой серьёзн
Понимание разницы между Error и Exception в Java ✅ Что такое Error в Java? - Error (ошибка) в Java представляет собой серьёзные проблемы, которые программа не должна пытаться обрабатывать. Такие ошибки, как правило, генерируются виртуальной машиной Java (JVM) и указывают на сбои, не зависящие от кода программы — например, утечки памяти или переполнение стека. Что такое Exception в Java? - Exception (исключение) — это ситуации, которые программа может предсказать и обработать. Это ошибки, от которых можно восстановиться во время выполнения с помощью механизмов обработки исключений, таких как конструкции try-catch. 📲 Мы в MAX 👉@BookJava

🔥24 июня в 20.00 мск. приглашаем на открытый урок: "Отказоустойчивый и высоко-доступный кластер RabbitMQ" На вебинаре разбер
🔥24 июня в 20.00 мск. приглашаем на открытый урок: "Отказоустойчивый и высоко-доступный кластер RabbitMQ" На вебинаре разберём практические подходы к созданию отказоустойчивой и высоко-доступной очереди сообщений для высоконагруженных систем. 📌 Что будет: — Запуск и настройка кластера: Quorum Queues и Mirrored Queues (синхронная репликация) — Синхронизация очередей и обеспечение согласованности — Dead Letter Queue + правильные настройки durability — Гарантии доставки для Producer: баланс между надёжностью и производительностью — Asynchronous cluster-to-cluster message routing: Exchange Federation и Shovels 🎯 После вебинара вы сможете: — Самостоятельно развернуть отказоустойчивый кластер RabbitMQ — Настраивать Quorum Queues и Mirrored Queues под разные сценарии — Правильно работать с Dead Letter Queues и гарантиями доставки — Организовывать межкластерное взаимодействие сообщений — Проектировать надёжные асинхронные коммуникации в микросервисной архитектуре 👉 Регистрация открыта: https://vk.cc/cYZuQo Вебинар приурочен к старту курса «Высоконагруженные системы: архитектура и масштабирование». 🎁При покупке курса вы получите в подарок мини-курс по Kafka, который поможет подготовиться к собеседованию в бигтех Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🧩 Nullable поля в Entity: угроза вашему приложению Привет, друзья! Сегодня хочу поделиться одной ошибкой, которую часто встречаю в проектах — использование nullable = true в JPA-сущностях по умолчанию, без осознанного выбора. Когда мы пишем:

@Column(name = "middle_name")
private String middleName;
JPA считает, что поле nullable, даже если по бизнес-логике оно быть пустым не должно. А вот что будет, если вы забыли это уточнить: 1. На уровне БД поле будет NULLABLE. 2. Hibernate не подскажет, что вы забыли заполнить поле. 3. В будущем это приведёт к NPE, особенно при маппинге DTO → Entity. 4. При миграциях Flyway/ Liquibase — возможно несоответствие схемы и модели. 🔍 Что делать? 1. Явно указывать nullable = false, если поле обязано быть заполнено:

@Column(name = "email", nullable = false)
private String email;
2. Использовать Bean Validation (@NotNull) — и не забывать включить её в контроллерах, сервисах, Hibernate. 3. Проверяйте соответствие схемы и сущностей. Можно использовать плагин Hibernate5DDL или включать валидацию схемы при старте. 📌 Простой совет: по умолчанию всё @Column(nullable = false), пока не докажете обратное. Берегите свои сущности 😉 📲 Мы в MAX 👉@BookJava

🧹 Как не захламлять логи в Java Сегодня покажу вам простой, но важный приём: логируйте по уровню, а не по привычке. Многие делают так:

log.info("User found: " + user);
Кажется безобидным? А теперь представьте, что в user лежит целый граф сущностей с ленивыми загрузками, или список из тысячи записей. Вы просто убьёте читаемость логов и производительность. Вот что делать вместо:

if (log.isDebugEnabled()) {
    log.debug("User found: {}", user);
}
А ещё лучше — логируйте только то, что действительно нужно:

log.debug("User found: id={}, email={}", user.getId(), user.getEmail());
Так вы: - Уменьшите размер логов - Сохраните ценную информацию - Упростите разбор инцидентов в проде 📌 Советы: - INFO — для бизнес-событий (например, “заказ оформлен”) - DEBUG — для отладки - WARN и ERROR — для проблем, которые требуют внимания А ты проверял свои логи в проде? Не пора ли провести ревизию? 📲 Мы в MAX 👉@BookJava

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП

🧪 Зачем Java-разработчику тестировать логику в SQL? Сегодня покажу вам полезный трюк для тех, кто пишет сложные запросы в PostgreSQL (или любом другом SQL-движке) и хочет их тестировать ещё до интеграции в Java-приложение. Если у тебя в проекте сложная логика в JOIN, CASE, оконных функциях или CTE — протестируй это на стороне базы, как обычную функцию. 🔹 Создаём функцию в PostgreSQL:

CREATE OR REPLACE FUNCTION test_discount(user_id INT)
RETURNS NUMERIC AS $$
BEGIN
  RETURN (
    SELECT 
      CASE 
        WHEN u.vip = true THEN 0.2
        ELSE 0.05
      END
    FROM users u WHERE u.id = user_id
  );
END;
$$ LANGUAGE plpgsql;
🔹 Проверяем прямо в базе:

SELECT test_discount(101); -- вернёт 0.2 или 0.05
✅ Это удобно, когда: - Ты хочешь протестировать ветки логики без запуска всего приложения; - У тебя CI/CD запускает SQL-тесты отдельно (через pgTAP, например); - Ты хочешь быстро показать запрос аналитику или тимлиду без Java-контекста. 💡 Лайфхак: если ты используешь Liquibase/Flyway — можно держать такие функции прямо в changelog'ах как test-only objects, не влияя на runtime-приложение. Попробуй — экономит массу времени на ревью и отладке запросов! 📲 Мы в MAX 👉@BookJava

🔐 Bouncy Castle: Легендарная криптография для Java Если вы разрабатываете на Java и вам нужно работать с шифрованием на серь
🔐 Bouncy Castle: Легендарная криптография для Java Если вы разрабатываете на Java и вам нужно работать с шифрованием на серьезном уровне, этот репозиторий - абсолютный мастхэв. Официальный репозиторий проекта Bouncy Castle (bc-java) - это настоящий швейцарский нож для любых криптографических задач. Стандартной реализации JCA/JCE (Java Cryptography Architecture / Extension) часто не хватает для сложных или специфических сценариев. Bouncy Castle блестяще решает эту проблему, предлагая как низкоуровневый (lightweight) криптографический API, так и полнофункциональный провайдер для JCE. 🛠 Главные возможности библиотеки:Огромный выбор алгоритмов: От классических RSA, AES и ECC до различных национальных стандартов (включая ГОСТы) и экзотических шифров. • Постквантовая криптография (PQC): Библиотека идет в ногу со временем и активно внедряет постквантовые алгоритмы, устойчивые к будущим атакам с использованием квантовых компьютеров. • Инфраструктура открытых ключей (PKI): Мощнейшие и очень удобные API для генерации и обработки X.509 сертификатов, CRL, а также работа со стандартами CMS, S/MIME, OpenPGP, TSP, CMP, CRMF и OCSP. • Поддержка TLS/DTLS: Собственный независимый API для работы с защищенными сетевыми протоколами (вплоть до TLS 1.3). • Независимость от версии Java: Bouncy Castle поддерживает широкий спектр версий JVM, начиная с весьма старых (J2SE 1.5+) и заканчивая самыми современными. 💡 Когда это нужно? Bouncy Castle выручает там, где пасуют стандартные средства JDK. Нужно сгенерировать сложный сертификат «на лету», распарсить зашифрованное PGP-сообщение, использовать нестандартную эллиптическую кривую или реализовать защищенный протокол без привязки к конкретной ОС? Для всего этого используется Bouncy Castle. https://github.com/bcgit/bc-java 📲 Мы в MAX 👉@BookJava

🔥 Приглашаем на бесплатный открытый вебинар курса «Высоконагруженные системы: архитектура и масштабирование»: «Асинхронная о
🔥 Приглашаем на бесплатный открытый вебинар курса «Высоконагруженные системы: архитектура и масштабирование»: «Асинхронная обработка данных в высоконагруженных системах» 🗓 Когда: 16 июня, 20:00 (мск) На вебинаре разберём, как грамотно внедрять асинхронность и строить по-настоящему производительные системы. Что будет на вебинаре: — Зачем и когда переходить на асинхронную обработку данных в высоконагруженных проектах — Очереди сообщений, веб-сокеты и другие инструменты асинхронного взаимодействия — Реальный архитектурный кейс: от веб-сервера до брокера сообщений и базы данных — Типичные узкие места асинхронных систем и проверенные способы их устранения 👉 Зарегистрироваться: https://vk.cc/cYLGN5 Бесплатное занятие приурочено к курсу «Высоконагруженные системы: архитектура и масштабирование», где вы научитесь проектировать высоконагруженные системы, способные выдерживать экстремальные нагрузки и работать стабильно в любых условиях. 🎁При покупке курса вы получите в подарок мини-курс по Kafka, который поможет подготовиться к собеседованию в бигтех Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Сегодня я покажу вам простой, но мощный приём, который помогает упростить работу с коллекциями в Java — Collectors.collectingAndThen. Если вы когда-нибудь писали что-то вроде:

List<String> list = someStream
    .collect(Collectors.toList());
return Collections.unmodifiableList(list);
то collectingAndThen сделает это в одну строку:

List<String> list = someStream.collect(
    Collectors.collectingAndThen(
        Collectors.toList(),
        Collections::unmodifiableList
    )
);
Где это может пригодиться? – Возвращаете коллекцию из метода и не хотите, чтобы кто-то её изменял – Хотите обернуть результат в Optional, Set, Map, EnumMap и т.д. – Нужно после сбора в Stream ещё что-то сделать над результатом (например, отсортировать, фильтровать, обернуть) Ещё пример:

Optional<String> maxName = people.stream()
    .map(Person::getName)
    .collect(Collectors.collectingAndThen(
        Collectors.maxBy(Comparator.naturalOrder()),
        Optional::ofNullable
    ));
Этот метод часто остаётся в тени, но он может существенно упростить код и сделать его чище. Попробуйте использовать его в своём проекте 😉 📲 Мы в MAX 👉@BookJava

💡Совет: @TransactionalEventListener — это специализированная версия @EventListener, которая прослушивает событие и ждёт заве
💡Совет: @TransactionalEventListener — это специализированная версия @EventListener, которая прослушивает событие и ждёт завершения текущей транзакции, прежде чем сработать. Ожидание согласованного состояния базы данных позволяет безопаснее реагировать на изменения, внесённые в БД ✨ 📲 Мы в MAX 👉@BookJava

💡 Collection vs List в Java: в чём разница и когда что использовать Сегодня разберёмся с одним из самых популярных вопросов у джавистов: чем отличается Collection от List и когда что применять. 🔹 Collection — это базовый интерфейс всех коллекций в Java. Он описывает общие операции: add(), remove(), size(), contains() и т.д. 🔹 List — это подинтерфейс Collection, предназначенный для работы с упорядоченными списками. Дополнительно даёт методы: get(index), set(index, value), indexOf(), add(index, value). 🔧 Пример с Collection:

Collection<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");

for (String name : names) {
    System.out.println(name);
}
Здесь важно только наличие элементов — порядок и индексы не важны. 🔧 Пример с List:

List<String> cities = new ArrayList<>();
cities.add("Moscow");
cities.add("Berlin");
cities.add(1, "Paris");

System.out.println(cities.get(1)); // Paris
В этом случае нужен порядок и доступ по индексу — значит, выбираем List. 📌 Когда использовать что: - Используй Collection, если хочешь абстрагироваться от конкретной структуры и не используешь индексы. - Используй List, если: - важен порядок добавления, - нужен доступ по индексу, - требуется вставка в определённое место. 🧠 Совет: При проектировании методов или API лучше принимать Collection — так ты не ограничиваешь пользователя в реализации. А если внутри метода тебе нужны индексы — переходи на List. 📲 Мы в MAX 👉@BookJava

👩‍💻 Контейнеризация Java-приложений с Docker Приглашаем на открытый урок. 🗓 22 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамка
👩‍💻 Контейнеризация Java-приложений с Docker Приглашаем на открытый урок. 🗓 22 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Java разработчик. Экспертный уровень».
В современной промышленной разработке бизнес-приложения всё чаще запускаются в облачных средах, и умение работать с Docker-контейнерами становится неотъемлемой частью работы Java-разработчика.
На занятии мы разберем: ✔️ Что такое Docker-контейнер и зачем он нужен разработчику? ✔️ Как развернуть и запустить Java-приложение в Docker-контейнере? ✔️ Основы профилирования и отладки приложений внутри Docker-контейнера. Урок будет полезен тем, кто хочет: - Освоить навыки работы с Docker-контейнерами. - Узнать, как контейнеризация помогает в разработке и развертывании приложений. - Получить практические знания по запуску, тестированию и профилированию Java-приложений в Docker. 🔗 Ссылка на регистрацию: https://vk.cc/cYD933 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🧵 Как правильно логировать ошибки в Java-приложении Привет, друзья! Сегодня я расскажу о простой, но критически важной теме — логирование ошибок. Часто вижу, как разработчики либо совсем не логируют исключения, либо делают это неправильно. В итоге: баг есть, а откуда он взялся — непонятно. Вот пара реальных примеров: ❌ Плохо:

try {
    doSomething();
} catch (Exception e) {
    System.out.println("Error happened");
}
Хорошо:

private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

try {
    doSomething();
} catch (Exception e) {
    logger.error("Failed to do something", e);
}
💡 Почему это важно: - logger.error позволяет видеть стек исключения, а это ключ к диагностике. - Можно использовать logger.warn или logger.info в зависимости от уровня важности. - Хороший лог помогает быстро локализовать проблему на проде без дебага. 🎯 Совет: Используйте Slf4j в связке с Logback или Log4j2. И обязательно следите за форматом логов — например, логируйте traceId, userId, requestId и другие полезные метаданные. А вы как логируете ошибки у себя в проекте? Делаете свою обёртку? Используете AOP? 📲 Мы в MAX 👉@BookJava

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП

🔧 Как ускорить сборку Maven проекта в 3 раза Сегодня покажу пару приёмов, которые помогут тебе значительно ускорить сборку Maven проекта. Особенно полезно, если ты работаешь с большими монолитами или частыми CI/CD прогонками. 🚀 1. Включи параллельную сборку Добавь флаг -T (thread count), чтобы Maven собирал модули параллельно:

mvn clean install -T 1C
1C — это количество потоков = количеству ядер CPU. Можешь указать, например, -T 4 для 4 потоков. Эффект — сборка может стать в 2–4 раза быстрее. 🧹 2. Пропускай тесты, если они не нужны Когда работаешь над UI, версткой или конфигурацией:

mvn clean install -DskipTests
⚠️ -DskipTests — пропускает *и* компиляцию тестов, и сами тесты. Если хочешь только не запускать тесты, используй:

mvn clean install -Dmaven.test.skip=false -DskipTests=true
📦 3. Используй mvn dependency:go-offline Это скачает все зависимости, плагины и сделает тебя независимым от интернета:

mvn dependency:go-offline
Полезно для CI и работы в поезде ✈️ 📲 Мы в MAX 👉@BookJava

👩‍💻 Java в Kubernetes за 40 минут: как задеплоить приложение в Minikube Приглашаем на открытый урок. 🗓 08 июня в 20:00 МСК
👩‍💻 Java в Kubernetes за 40 минут: как задеплоить приложение в Minikube Приглашаем на открытый урок. 🗓 08 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Java разработчик. Экспертный уровень». Minikube — личный Kubernetes для тестов. Научитесь деплоить Java-приложения — база для DevOps, CI/CD и продакшна. О чем поговорим: ✔️ Подготовка Java-приложения к деплою (JAR → Docker image). ✔️ Установка Minikube и настройка локального кластера. ✔️ Написание манифестов: Deployment, Service, ConfigMap. ✔️ Запуск приложения и проверка работоспособности. Вебинар будет полезен: Java-разработчикам, начинающим осваивать Kubernetes и DevOps-подходы, а также инженерам, выстраивающим локальные CI/CD практики. В результате вебинара: Сможете самостоятельно задеплоить Java-приложение в Minikube, написать манифесты и лучше понять, как работает Kubernetes «под капотом». 🔗 Ссылка на регистрацию: https://vk.cc/cYtfHW Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Совет Spring Framework💡 Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в java.util.Optiona
Совет Spring Framework💡 Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в java.util.Optional. Таким образом вы сообщаете, что этот бин является необязательным, избегаете исключения, если он не существует, и можете аккуратно обработать его отсутствие с помощью Optional API. 📲 Мы в MAX 👉@BookJava

🛠️ SOLID: Почему важно соблюдать принципы? Сегодня поговорим о SOLID – пяти принципах, которые делают код понятным, гибким и легким для поддержки. Если ты хочешь писать код, который не треснет по швам через пару месяцев, эти принципы — твои лучшие друзья. 1. Single Responsibility Principle (SRP) Одна ответственность – один класс. Если у класса больше одной причины измениться, значит, он нарушает SRP. Такой код сложно поддерживать, потому что при изменении одной логики мы можем случайно сломать другую. ✅ Правильно:

class ReportGenerator {
    void generateReport() { /* Логика генерации отчета */ }
}

class ReportSaver {
    void saveReport() { /* Логика сохранения отчета */ }
}
Неправильно (всё в одном месте):

class ReportService {
    void generateAndSaveReport() { /* Генерация + сохранение отчета */ }
}
2. Open/Closed Principle (OCP) Код открыт для расширения, но закрыт для модификации. Когда нам нужно добавить новую функциональность, мы должны расширять существующий код, а не менять его. ✅ Пример с интерфейсом:

interface Payment {
    void process();
}

class CreditCardPayment implements Payment {
    public void process() { /* Логика оплаты картой */ }
}

class PayPalPayment implements Payment {
    public void process() { /* Логика оплаты PayPal */ }
}
Теперь мы можем добавить новый способ оплаты, просто создав новый класс. 3. Liskov Substitution Principle (LSP) Дочерние классы должны полностью заменять родительские. Если где-то используется родительский класс, мы должны без проблем подставить его потомка. ❌ Нарушение LSP:

class Bird {
    void fly() { /* Летает */ }
}

class Penguin extends Bird {
    void fly() { throw new UnsupportedOperationException("Пингвины не летают!"); }
}
Проблема в том, что Penguin нарушает контракт родителя. ✅ Используем интерфейсы:

interface Bird { }
interface FlyingBird extends Bird { void fly(); }

class Sparrow implements FlyingBird {
    public void fly() { /* Летает */ }
}

class Penguin implements Bird {
    // Пингвин вообще не имеет метода fly()
}
4. Interface Segregation Principle (ISP) Лучше несколько маленьких интерфейсов, чем один большой.Плохой пример:

interface Worker {
    void work();
    void eat();
}

class Robot implements Worker {
    public void work() { /* Работает */ }
    public void eat() { throw new UnsupportedOperationException("Роботы не едят!"); }
}
Разделяем интерфейсы:

interface Workable {
    void work();
}

interface Eatable {
    void eat();
}

class Robot implements Workable {
    public void work() { /* Работает */ }
}
5. Dependency Inversion Principle (DIP) Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций. ❌ Жёсткая зависимость:

class Lamp {
    void turnOn() { /* Включить */ }
}

class Switch {
    private Lamp lamp;

    Switch(Lamp lamp) {
        this.lamp = lamp;
    }

    void press() { lamp.turnOn(); }
}
Используем абстракции:

interface Switchable {
    void turnOn();
}

class Lamp implements Switchable {
    public void turnOn() { /* Включить */ }
}

class Switch {
    private Switchable device;

    Switch(Switchable device) {
        this.device = device;
    }

    void press() { device.turnOn(); }
}
📌 Итог Принципы SOLID помогают писать гибкий, поддерживаемый и расширяемый код. Если следовать этим принципам, код будет легче читать и рефакторить. Используешь ли ты SOLID в своих проектах? Напиши в комментариях, какой принцип для тебя самый сложный! 📲 Мы в MAX 👉@BookJava

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП

Java springboot Совет: Нужно быстро собрать разрозненные данные в POST-запросе? Просто создайте встроенную record в вашем @Re
Java springboot Совет: Нужно быстро собрать разрозненные данные в POST-запросе? Просто создайте встроенную record в вашем @RestController и используйте её как @RequestBody. Не нужно определять DTO в отдельном классе – record будет видна только внутри этого контроллера. 🚀 📲 Мы в MAX 👉@BookJava