Если вы пишете бэкенд на Java и хотите работать на уровне серьёзных проектов, тестирование в Spring — навык, без которого сейчас никуда.
На открытом уроке «Тестирование Spring-приложений. Интеграционные тесты с контекстом» вы разберётесь, как правильно тестировать репозитории (JDBC и JPA) и сервисы с учётом транзакций. Это ключ к тому, чтобы ваш код был не только рабочим, но и надёжным в реальных продакшн-системах.
Вы получите пошаговый разбор особенностей интеграционного тестирования и научитесь писать простые тесты для репозиториев и сервисов. Эти знания напрямую повысят вашу ценность на рынке как Java-разработчика.
Урок проходит в преддверие старта курса «Разработчик на Spring Framework», все участники получат скидку на обучение: https://vk.cc/cP0uOe
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
На открытом уроке «Тестирование Spring-приложений. Интеграционные тесты с контекстом» вы разберётесь, как правильно тестировать репозитории (JDBC и JPA) и сервисы с учётом транзакций. Это ключ к тому, чтобы ваш код был не только рабочим, но и надёжным в реальных продакшн-системах.
Вы получите пошаговый разбор особенностей интеграционного тестирования и научитесь писать простые тесты для репозиториев и сервисов. Эти знания напрямую повысят вашу ценность на рынке как Java-разработчика.
Урок проходит в преддверие старта курса «Разработчик на Spring Framework», все участники получат скидку на обучение: https://vk.cc/cP0uOe
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Совет по Spring Boot💡
Spring Boot Custom Bean Validations с Jakarta Constraint Validator, группировка ограничений проверки, последовательность групп и i18n
https://gist.github.com/aoudiamoncef/9eeece142d1ef0faa4d06216a41282a2
👉@BookJava
Spring Boot Custom Bean Validations с Jakarta Constraint Validator, группировка ограничений проверки, последовательность групп и i18n
https://gist.github.com/aoudiamoncef/9eeece142d1ef0faa4d06216a41282a2
👉@BookJava
1❤3👍3
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Java
Кеширование данных в Spring Boot
Полезные советы по работе с BigDecimal в Java
Алгоритмы: бинарный поиск на отсортированном массиве (реализация на Java)
Алгоритмы: поиск простых чисел с помощью "решета Эратосфена"
Алгоритмы: проверка слов и предложений на палиндром
Алгоритм определения анаграмм
Алгоритм инвертирования массива на Java
Разбор и вычисление арифметических выражений на Java
источник
👉@BookJava
Кеширование данных в Spring Boot
Полезные советы по работе с BigDecimal в Java
Алгоритмы: бинарный поиск на отсортированном массиве (реализация на Java)
Алгоритмы: поиск простых чисел с помощью "решета Эратосфена"
Алгоритмы: проверка слов и предложений на палиндром
Алгоритм определения анаграмм
Алгоритм инвертирования массива на Java
Разбор и вычисление арифметических выражений на Java
источник
👉@BookJava
👍2
На вебинаре разберем как с помощью Kafka Streams создавать потоковые приложения, что важно для работы с большими данными и потоками в реальном времени.
🗓 10 сентября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional».
🎯 О чём поговорим:
👥 Кому будет интересно:
Этот вебинар будет полезен Java-разработчикам и архитекторам, которые хотят внедрять потоковые вычисления и анализ в свои приложения. Вы получите все необходимые знания, чтобы начать использовать Kafka Streams для создания высокоэффективных потоковых решений.
🔗 Ссылка на регистрацию: https://vk.cc/cPbeDj
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Совет по Java Time
Обратите внимание на equals() и isEqual() в классах работы с датой и временем! ZonedDateTime, OffsetDateTime и OffsetTime ведут себя по-разному:
- equals(): Сравнивает все поля (включая зону/смещение)
- isEqual(): Сравнивает только момент времени (игнорируя зону/смещение)
Один и тот же момент времени может дать разные результаты.
👉@BookJava
Обратите внимание на equals() и isEqual() в классах работы с датой и временем! ZonedDateTime, OffsetDateTime и OffsetTime ведут себя по-разному:
- equals(): Сравнивает все поля (включая зону/смещение)
- isEqual(): Сравнивает только момент времени (игнорируя зону/смещение)
Один и тот же момент времени может дать разные результаты.
👉@BookJava
👍4
Как мы в Java-проекте UDT для PostgreSQL поддерживали
PostgreSQL позволяет создавать хранимые функции и процедуры. И если при их вызове с простыми данными проблем не возникает, то сложные иерархические структуры могут вызвать трудности.
В статье мы разберёмся, как передавать и получать вложенные объекты в процедурах и функциях PostgreSQL с помощью JDBC.
https://habr.com/ru/companies/bercut/articles/940614/
👉@BookJava
PostgreSQL позволяет создавать хранимые функции и процедуры. И если при их вызове с простыми данными проблем не возникает, то сложные иерархические структуры могут вызвать трудности.
В статье мы разберёмся, как передавать и получать вложенные объекты в процедурах и функциях PostgreSQL с помощью JDBC.
https://habr.com/ru/companies/bercut/articles/940614/
👉@BookJava
👍1
⁉️ Что нового в Spark 4.0?
Apache Spark продолжает развиваться и в версии 4.0 готовит для нас несколько важнейших обновлений. Хотите узнать, как эти изменения улучшат обработку данных и повлияют на вашу работу? Присоединяйтесь к открытом вебинару 9 сентября в 20:00!
— Обзор Spark 4.0: главные нововведения и улучшения.
— Производительность и оптимизации: что ускорилось и как этим пользоваться?
— Новые API и функции: возможности для разработчиков и аналитиков.
— Интеграция с Kubernetes, облачными платформами и Data Science инструментами.
— Практические кейсы: как применять нововведения в реальных задачах.
👨💻🛠👨🏻💻 Если вы дата-инженер, аналитик, разработчик или DevOps-специалист, этот вебинар точно для вас.
➡️Присоединяйтесь и получите скидку на курс «Spark Developer»: https://vk.cc/cPiGom
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Apache Spark продолжает развиваться и в версии 4.0 готовит для нас несколько важнейших обновлений. Хотите узнать, как эти изменения улучшат обработку данных и повлияют на вашу работу? Присоединяйтесь к открытом вебинару 9 сентября в 20:00!
— Обзор Spark 4.0: главные нововведения и улучшения.
— Производительность и оптимизации: что ускорилось и как этим пользоваться?
— Новые API и функции: возможности для разработчиков и аналитиков.
— Интеграция с Kubernetes, облачными платформами и Data Science инструментами.
— Практические кейсы: как применять нововведения в реальных задачах.
👨💻🛠👨🏻💻 Если вы дата-инженер, аналитик, разработчик или DevOps-специалист, этот вебинар точно для вас.
➡️Присоединяйтесь и получите скидку на курс «Spark Developer»: https://vk.cc/cPiGom
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍1
ClassLoader Hell в Java: скрытый убийца продакшена
Когда в энтерпрайз-приложении внезапно летят
Откуда берётся
1. Конфликт версий: в classpath оказываются разные версии одной библиотеки (например, log4j 1.x и 2.x). Разные ClassLoader’ы подтягивают разные классы →
2. Утечки ClassLoader’ов: после undeploy web-приложения его ClassLoader не собирается GC (висят ссылки/потоки) → дубли классов, рост памяти,
Симптомы
-
-
- Нестабильный старт сервера, случайные ошибки, постепенный memory bloat
Как выбраться
- Держи зависимости под контролем: Maven/Gradle,
- Понимай иерархию серверных загрузчиков (Tomcat/JBoss/WebLogic): изоляция по веб-приложениям; по умолчанию пакуй либы внутрь WAR/EAR, не клади «общие» JAR’ы в shared/lib без крайней нужды.
- Shading/relocation: Maven Shade Plugin → fat JAR + переименование пакетов конфликтующих зависимостей.
- JPMS (Java 9+): явные
- Диагностика: запускай с
- KISS: меньше зависимостей, регулярные апдейты ключевых библиотек.
Чек-лист на 30 секунд
- Прогоняю дерево зависимостей и фиксирую версии.
- Убираю дубли и «скрытые» транзитивные.
- Проверяю, откуда грузится проблемный класс (трассировка/инструменты).
- Решаю: изоляция на уровне сервера, shading или миграция на JPMS.
Полный разбор с примерами тут
👉@BookJava
Когда в энтерпрайз-приложении внезапно летят
ClassNotFoundException
, NoSuchMethodError
, LinkageError
или растёт Metaspace — почти наверняка это ClassLoader Hell: побочный эффект того, как JVM грузит классы.Откуда берётся
1. Конфликт версий: в classpath оказываются разные версии одной библиотеки (например, log4j 1.x и 2.x). Разные ClassLoader’ы подтягивают разные классы →
IncompatibleClassChangeError
, падения на старте.2. Утечки ClassLoader’ов: после undeploy web-приложения его ClassLoader не собирается GC (висят ссылки/потоки) → дубли классов, рост памяти,
OutOfMemoryError
.Симптомы
-
ClassNotFoundException
/ NoClassDefFoundError
-
LinkageError
-ы (IllegalAccess, IncompatibleClassChange, NoSuchMethod)- Нестабильный старт сервера, случайные ошибки, постепенный memory bloat
Как выбраться
- Держи зависимости под контролем: Maven/Gradle,
mvn dependency:tree
/ gradle dependencies
, исключай конфликтующие транзитивные, добивайся convergence версий.- Понимай иерархию серверных загрузчиков (Tomcat/JBoss/WebLogic): изоляция по веб-приложениям; по умолчанию пакуй либы внутрь WAR/EAR, не клади «общие» JAR’ы в shared/lib без крайней нужды.
- Shading/relocation: Maven Shade Plugin → fat JAR + переименование пакетов конфликтующих зависимостей.
- JPMS (Java 9+): явные
requires
/ exports
, сильная инкапсуляция, надёжная конфигурация на старте.- Диагностика: запускай с
-XX:+TraceClassLoading
, смотри JVisualVM/JConsole на живых ClassLoader’ах и metaspace.- KISS: меньше зависимостей, регулярные апдейты ключевых библиотек.
Чек-лист на 30 секунд
- Прогоняю дерево зависимостей и фиксирую версии.
- Убираю дубли и «скрытые» транзитивные.
- Проверяю, откуда грузится проблемный класс (трассировка/инструменты).
- Решаю: изоляция на уровне сервера, shading или миграция на JPMS.
Полный разбор с примерами тут
👉@BookJava
👍5❤3
Media is too big
VIEW IN TELEGRAM
Java for Small Coding Tasks
Видео про скриптинг на Java. Отличный способ посмотреть на привычный язык под другим углом и увидеть, как рушатся привычные подходы и табу.
Вначале рассказывается, почему для скриптов используется Java, а не Python. Ответ банален: автор хорошо знаком с Java, она ему привычна. Но вот то, как и с помощью чего пишутся скрипты, совсем непривычно.
Например, удобная и знакомая всем Intellij IDEA не очень подойдет, потому что вам вряд ли понадобится серьезная структура пакетов и классов для небольшого скрипта. А один файл часто удобнее открыть в редакторах попроще, например nvim или VS Code.
С инструментами для сборки тоже интересно. Никто не захочет использовать Maven или Gradle, чтобы запустить небольшой однофайловый скрипт. Поэтому можно компилировать и запускать в оперативной памяти. Да, так придется компилировать на каждом запуске, зато не нужно беспокоиться об упаковке в Jar каждый раз, когда поправляешь скрипт.
Одна строка #!/usr/bin/env java --source 25 в начале файла позволит запускать скрипт в среде Linux, просто указав путь к файлу. А если все-таки нужна зависимость, можно использовать jpm, чтобы управлять Maven-зависимостями без больших инструментов для сборки.
источник
👉@BookJava
Видео про скриптинг на Java. Отличный способ посмотреть на привычный язык под другим углом и увидеть, как рушатся привычные подходы и табу.
Вначале рассказывается, почему для скриптов используется Java, а не Python. Ответ банален: автор хорошо знаком с Java, она ему привычна. Но вот то, как и с помощью чего пишутся скрипты, совсем непривычно.
Например, удобная и знакомая всем Intellij IDEA не очень подойдет, потому что вам вряд ли понадобится серьезная структура пакетов и классов для небольшого скрипта. А один файл часто удобнее открыть в редакторах попроще, например nvim или VS Code.
С инструментами для сборки тоже интересно. Никто не захочет использовать Maven или Gradle, чтобы запустить небольшой однофайловый скрипт. Поэтому можно компилировать и запускать в оперативной памяти. Да, так придется компилировать на каждом запуске, зато не нужно беспокоиться об упаковке в Jar каждый раз, когда поправляешь скрипт.
Одна строка #!/usr/bin/env java --source 25 в начале файла позволит запускать скрипт в среде Linux, просто указав путь к файлу. А если все-таки нужна зависимость, можно использовать jpm, чтобы управлять Maven-зависимостями без больших инструментов для сборки.
источник
👉@BookJava
👍2