Совет💡
Если вам не нравится, что стандартный метод подстроки Java выбрасывает исключение, если строка короче, чем ожидалось, вы можете использовать
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substring-java.lang.String-int-int-
👉
Если вам не нравится, что стандартный метод подстроки Java выбрасывает исключение, если строка короче, чем ожидалось, вы можете использовать
Apache Commons StringUtils
, который не выбрасывает исключение в этом случае и с радостью возвращает все, что может.https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substring-java.lang.String-int-int-
👉
Какая разница между @ElementCollection, @OneToMany и @ManyToMany?
Все эти аннотации – часть Java Persistence API. С их использованием мы регулярно сталкиваемся в реализациях JPA, таких как Hibernate.
Когда в базу данных сохраняется сущность, в которой есть поле-коллекция, это поле обязано быть помеченным одной из аннотаций.
На уровне хранения в реляционной базе, для будет также создана отдельная таблица. Технически она будет находиться в отношении one-to-many.
Но из Java кода коллекция будет выглядеть встроенной: её элементом не нужно иметь собственные id, ими нельзя манипулировать отдельно от основной сущности. Единственное, чем такая коллекция отличается от встроенного поля-примитива – её можно загружать лениво (включено по умолчанию).
👉
Все эти аннотации – часть Java Persistence API. С их использованием мы регулярно сталкиваемся в реализациях JPA, таких как Hibernate.
Когда в базу данных сохраняется сущность, в которой есть поле-коллекция, это поле обязано быть помеченным одной из аннотаций.
@OneToMany
и @ManyToMany
хранят вложенные объекты как отдельные полноценные сущности – для них действуют всё те же требования, которые JPA выдвигает для всех
классов. Каждая из аннотаций отвечает за свое отношение.@ElementCollection
создает коллекцию встраиваемых классов. Применять её можно только на коллекции, тип элементов которых помечен , или входит в список стандартных встраиваемых классов (обертки примитивов, строки, даты, и т.д.).На уровне хранения в реляционной базе, для будет также создана отдельная таблица. Технически она будет находиться в отношении one-to-many.
Но из Java кода коллекция будет выглядеть встроенной: её элементом не нужно иметь собственные id, ими нельзя манипулировать отдельно от основной сущности. Единственное, чем такая коллекция отличается от встроенного поля-примитива – её можно загружать лениво (включено по умолчанию).
👉
Как углубить свои знания об архитектуре ПО всего за пару часов?
Прийти на бесплатный практический урок «Тактики работы с обнаруживаемостью в архитектуре программного обеспечения» от OTUS. На вебинаре разберём:
- что такое observability и почему это важно для бизнеса;
- как использовать инструменты мониторинга и алертинга для повышения обнаруживаемости;
- принципы и практические примеры использования USE и RED;
- четыре золотых сигнала, которые помогут оптимизировать работу с обнаруживаемостью.
Встречаемся 6 марта в 20:00 мск в рамках курса «Software Architect». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://vk.cc/cuOaDC
Прийти на бесплатный практический урок «Тактики работы с обнаруживаемостью в архитектуре программного обеспечения» от OTUS. На вебинаре разберём:
- что такое observability и почему это важно для бизнеса;
- как использовать инструменты мониторинга и алертинга для повышения обнаруживаемости;
- принципы и практические примеры использования USE и RED;
- четыре золотых сигнала, которые помогут оптимизировать работу с обнаруживаемостью.
Встречаемся 6 марта в 20:00 мск в рамках курса «Software Architect». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://vk.cc/cuOaDC
Микросервисы на Java, Spring Boot и Cloud
В этом руководстве показано, как построить архитектуру микросервисов с помощью Spring Boot и Spring Cloud.
Внедрение архитектуры микросервисов предоставляет уникальные возможности для обеспечения отказоустойчивости и отказоустойчивости систем, чтобы ваши компоненты могли мягко справляться со скачками нагрузки и ошибками. Кроме того, микросервисы делают изменения менее затратными. Они также могут быть хорошей идеей, когда над одним продуктом работает большая команда. Вы можете разбить свой проект на компоненты, которые могут функционировать независимо друг от друга. Если компоненты могут функционировать независимо друг от друга, их можно отдельно строить, тестировать и развертывать. Это дает организации и ее командам возможность быстро разрабатывать и внедрять продукты.
https://auth0.com/blog/java-spring-boot-microservices/
👉
В этом руководстве показано, как построить архитектуру микросервисов с помощью Spring Boot и Spring Cloud.
Внедрение архитектуры микросервисов предоставляет уникальные возможности для обеспечения отказоустойчивости и отказоустойчивости систем, чтобы ваши компоненты могли мягко справляться со скачками нагрузки и ошибками. Кроме того, микросервисы делают изменения менее затратными. Они также могут быть хорошей идеей, когда над одним продуктом работает большая команда. Вы можете разбить свой проект на компоненты, которые могут функционировать независимо друг от друга. Если компоненты могут функционировать независимо друг от друга, их можно отдельно строить, тестировать и развертывать. Это дает организации и ее командам возможность быстро разрабатывать и внедрять продукты.
https://auth0.com/blog/java-spring-boot-microservices/
👉
Совет по Spring Boot💡
Spring Boot Custom Bean Validations с Jakarta Constraint Validator, группировка ограничений проверки, последовательность групп и i18n
https://gist.github.com/aoudiamoncef/9eeece142d1ef0faa4d06216a41282a2
👉
Spring Boot Custom Bean Validations с Jakarta Constraint Validator, группировка ограничений проверки, последовательность групп и i18n
https://gist.github.com/aoudiamoncef/9eeece142d1ef0faa4d06216a41282a2
👉
⁉️ Как стать разработчиком на Spring в 2024?
Узнайте на бесплатном практическом уроке от OTUS, где опытный эксперт приоткроет закулисье нашего курса и расскажет:
✔️ как грамотно выбрать итоговый проект, чтобы использовать его для портфолио и получить максимум практических навыков;
✔️ какие требования мы предъявляем к проектам студентов;
✔️ как проходит реализация проектов.
📢📢 Занятие пройдёт 28 февраля в 20:00 мск и будет приурочено к старту курса «Разработчик на Spring Framework».
Доступна рассрочка на обучение!
➡️ Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://vk.cc/cuQHmW
Узнайте на бесплатном практическом уроке от OTUS, где опытный эксперт приоткроет закулисье нашего курса и расскажет:
✔️ как грамотно выбрать итоговый проект, чтобы использовать его для портфолио и получить максимум практических навыков;
✔️ какие требования мы предъявляем к проектам студентов;
✔️ как проходит реализация проектов.
📢📢 Занятие пройдёт 28 февраля в 20:00 мск и будет приурочено к старту курса «Разработчик на Spring Framework».
Доступна рассрочка на обучение!
➡️ Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://vk.cc/cuQHmW
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Чем отличается CountDownLatch от CyclicBarrier?
CountDownLatch, дословно «Запор с обратным отсчетом», – примитив синхронизации из стандартной библиотеки Java. Он останавливает пришедшие потоки, пока внутренний счетчик не достигнет нуля. Чтобы поставить поток на ожидание, нужно вызвать из него метод
Начальное значение счетчика задается параметром конструктора, затем уменьшается на 1 методом
CyclicBarrier – барьер для потоков, который ломается при достижении критической массы ожидающих. Это тоже класс из Java Concurrency Framework. Поток также встает на ожидание методом
Технически, parties барьера и count латча – одно и то же, await барьера – это await+countDown латча. В барьере тоже доступна информация о текущем состоянии барьера (методы
Помимо этого, CyclicBarrier дает две дополнительных возможности. Во-первых, в конструктор кроме parties можно передать коллбэк с действием, которое выполнится в момент прорыва барьера. Во-вторых, этот примитив переиспользуется: метод
Оба этих примитива помогают решить задачу о гарантированных дедлоках. Противоположность латча и барьера – семафор. В нём потоки блокируются при достижении счетчиком нуля.
👉
CountDownLatch, дословно «Запор с обратным отсчетом», – примитив синхронизации из стандартной библиотеки Java. Он останавливает пришедшие потоки, пока внутренний счетчик не достигнет нуля. Чтобы поставить поток на ожидание, нужно вызвать из него метод
await()
.Начальное значение счетчика задается параметром конструктора, затем уменьшается на 1 методом
countDown()
. Узнать текущее значение можно с помощью getCount()
. Изменение значения счетчика никак не связано с потоками, его можно вызывать откуда и когда угодно.CyclicBarrier – барьер для потоков, который ломается при достижении критической массы ожидающих. Это тоже класс из Java Concurrency Framework. Поток также встает на ожидание методом
await()
. Ожидающие потоки называются parties, их лимит также устанавливается в конструкторе.Технически, parties барьера и count латча – одно и то же, await барьера – это await+countDown латча. В барьере тоже доступна информация о текущем состоянии барьера (методы
isBroken
, getParties
и getNumberWaiting
).Помимо этого, CyclicBarrier дает две дополнительных возможности. Во-первых, в конструктор кроме parties можно передать коллбэк с действием, которое выполнится в момент прорыва барьера. Во-вторых, этот примитив переиспользуется: метод
reset()
насильно прорывает текущий барьер и устанавливает новый.Оба этих примитива помогают решить задачу о гарантированных дедлоках. Противоположность латча и барьера – семафор. В нём потоки блокируются при достижении счетчиком нуля.
👉
Разница между Component, Service, Controller и Repository в Spring Framework
Сегодня я расскажу об одном из самых популярных и фундаментальных - разнице между аннотациями , ,
https://levelup.gitconnected.com/difference-between-component-service-controller-and-repository-in-spring-framework-b2ce8e5128ca
👉
Сегодня я расскажу об одном из самых популярных и фундаментальных - разнице между аннотациями , ,
и .https://levelup.gitconnected.com/difference-between-component-service-controller-and-repository-in-spring-framework-b2ce8e5128ca
👉
💪 Как Java-разработчику повысить квалификацию и увеличить доход в 2024?
Освоить JVM с профилированием и оптимизацией приложений в облаках на онлайн-курсе «Java Developer. Advanced» от OTUS.
Программа идеально подойдет для Java-разработчиков с опытом от 2-х лет, желающих углубить знания в устройстве JVM, принципах профилирования и оптимизации приложений в облачной инфраструктуре.
На курсе вас ждут:
▫️ живые вебинары с возможностью задать вопросы экспертам;
▫️много практики и сильные проекты для портфолио;
▫️поддержка профессионального комьюнити;
▫️ рассрочка на комфортных условиях.
🤝 Проверьте свои навыки пройдя тест и получите специальную цену: https://vk.cc/cuSK78
Освоить JVM с профилированием и оптимизацией приложений в облаках на онлайн-курсе «Java Developer. Advanced» от OTUS.
Программа идеально подойдет для Java-разработчиков с опытом от 2-х лет, желающих углубить знания в устройстве JVM, принципах профилирования и оптимизации приложений в облачной инфраструктуре.
На курсе вас ждут:
▫️ живые вебинары с возможностью задать вопросы экспертам;
▫️много практики и сильные проекты для портфолио;
▫️поддержка профессионального комьюнити;
▫️ рассрочка на комфортных условиях.
🤝 Проверьте свои навыки пройдя тест и получите специальную цену: https://vk.cc/cuSK78
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576