Советы по Java API 🚀
Синхронизация в Java - ReentrantLock
Усовершенствуйте синхронизацию потоков с помощью ReentrantLock в Java. Достигайте более тонкого контроля и продвинутых механизмов блокировки.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/locks/ReentrantLock.html
👉@BookJava
Синхронизация в Java - ReentrantLock
Усовершенствуйте синхронизацию потоков с помощью ReentrantLock в Java. Достигайте более тонкого контроля и продвинутых механизмов блокировки.
class X {
private final ReentrantLock lock = new ReentrantLock();
// ...
public void m() {
lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock();
}
}
}
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/locks/ReentrantLock.html
👉@BookJava
👍4👎1
Особенности работы класса Matcher
Как мы уже писали ранее, основная функциональность работы с регулярными выражениями представлена в Java классом
Во-первых, в общем случае матчер действует не по всей строке, а только внутри заданного «региона». Изначально регион совпадает со всей строкой, но его можно сужать и изменять в процессе работы. Методы
Свойство
Регулярные выражения используются для двух задач: поиска и замены. Поговорим о поиске.
Метод
Интерфейс
Есть еще пара свойств последнего поиска, которые актуальны не только для успешного результата, поэтому не вошли в интерфейс:
Метод
Для замены совпавших с регулярным выражением подстрок есть методы
При замене можно использовать
Есть более гибкий способ замены.
👉@BookJava
Как мы уже писали ранее, основная функциональность работы с регулярными выражениями представлена в Java классом
Matcher
. Рассмотрим его подробнее.Во-первых, в общем случае матчер действует не по всей строке, а только внутри заданного «региона». Изначально регион совпадает со всей строкой, но его можно сужать и изменять в процессе работы. Методы
regionStart
и regionEnd
возвращают текущие границы, а region
устанавливает новые.Свойство
transparentBounds
экземпляра матчера может разрешать регулярному выражению заглядывать при поиске за границы, при условии что итоговая совпавшая подстрока будет всё ещё в границах региона (lookahead
и lookbehind
). А выключив свойство anchoringBounds
можно перестать трактовать границы региона как границы строки (^ и $ в выражении).Регулярные выражения используются для двух задач: поиска и замены. Поговорим о поиске.
Метод
matches
проверяет, удовлетворяет ли выражению весь регион, lookingAt
– хотя бы его начало. Метод find
похож на next
итератора – он последовательно идет по строке, и находит следующие совпадения с выражением. Эту итерацию можно сдвинуть на определенную позицию строки, передав позицию как параметр.Matcher
реализует интерфейс MatchResult
. Через него предоставляется информация о последнем успешном поиске (любым из перечисленных методов). Если эту информацию необходимо сохранить, toMatchResult()
выделит её в отдельный иммутабельный объект. А если хочется обработать последовательность всех совпадений в виде стрима, поможет метод results()
.Интерфейс
MatchReslut
предоставляет методы group
, start
и end
. Они дают содержимое найденной подстроки и ее позицию в строке. Если этим методам параметром передать номер или имя группы, то результатом будет информация не о всей подстроке, а о ее группах. Общее количество групп хранится в свойстве groupCount
.Есть еще пара свойств последнего поиска, которые актуальны не только для успешного результата, поэтому не вошли в интерфейс:
hitEnd
и requireEnd
. hitEnd
сообщает, пришлось ли при последнем поиске дойти до конца региона. requireEnd
подскажет, мог ли измениться результат (успех/неудача) последнего поиска, если бы в конец региона был добавлен хвост.Метод
reset
сбрасывает всё это текущее состояние поиска. Передав в него параметр, можно заодно заменить строку, с которой работаем. Используемое регулярное выражение тоже можно заменить, методом usePattern
, но состояние поиска при этом не сбросится.Для замены совпавших с регулярным выражением подстрок есть методы
replaceFirst
и replaceAll
. В них можно передать как строку-замену, так и коллбэк, который будет вычислять её на лету. Оба метода сбрасывают состояние.При замене можно использовать
$
для ссылки на группы совпадения, а символ \
используется для escape
-последовательностей. Если требуется воспринимать эти символы без дополнительного смысла, необходимо обернуть строку-замену в вызов quoteReplacement
.Есть более гибкий способ замены.
Matcher
позволяет последовательно вручную выполнять поиск (всё теми же методами), а затем добавлять пройденный кусок строки с замененным совпадением в StringBuilder/StringBuffer
методом appendReplacement
. Оставшийся непройденный хвост добавляется методом appendTail
. То есть, последовательность вызовов m.find()
; m.appendReplacement()
; m.appendTail()
; эквивалентна вызову m.replaceFirst()
, а while(m.find()) m.appendReplacement()
; m.appendTail()
; – это m.replaceAll()
.👉@BookJava
👍8👏2❤1
🚀Совет Spring
Утилитный класс для сравнения объектов на основе их аннотаций
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/AnnotationAwareOrderComparator.html
👉@BookJava
AnnotationAwareOrderComparator
Утилитный класс для сравнения объектов на основе их аннотаций
@Order
или Ordered
. Он используется в ситуациях, когда нужно определить порядок выполнения компонентов. 🔥https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/AnnotationAwareOrderComparator.html
👉@BookJava
👍6
Что можно делать с классом Connection?
Итак, в результате соединения JDBC драйвера создается объект Connection – сессия работы с базой данных. Это главный класс при работе с JDBC. Основная роль этого класса – исполнение SQL-выражений (Statement) и получение их результатов в виде ResultSet.
Connection предоставляет в виде класса DatabaseMetaData мета-информацию о базе данных в целом: таблицы, поддерживаемая грамматика SQL, хранимые процедуры, возможности этого соединения, и т.д..
В коннекшне задается множество настройки самого соединения. Это уровень изоляции транзакций, режим авто-коммита, ключи шардирования, и многое другое. Маппинг типов данных SQL в Java-типы задается здесь же, свойством typeMap.
Помимо выполнения выражений, Connection предоставляет средства для управления транзакциями. Его методами можно создать Savepoint, откатиться к нему, закоммитить транзакцию когда авто-коммит отключен.
#SQL
👉@BookJava
Итак, в результате соединения JDBC драйвера создается объект Connection – сессия работы с базой данных. Это главный класс при работе с JDBC. Основная роль этого класса – исполнение SQL-выражений (Statement) и получение их результатов в виде ResultSet.
Connection предоставляет в виде класса DatabaseMetaData мета-информацию о базе данных в целом: таблицы, поддерживаемая грамматика SQL, хранимые процедуры, возможности этого соединения, и т.д..
В коннекшне задается множество настройки самого соединения. Это уровень изоляции транзакций, режим авто-коммита, ключи шардирования, и многое другое. Маппинг типов данных SQL в Java-типы задается здесь же, свойством typeMap.
Помимо выполнения выражений, Connection предоставляет средства для управления транзакциями. Его методами можно создать Savepoint, откатиться к нему, закоммитить транзакцию когда авто-коммит отключен.
#SQL
👉@BookJava
👍6🎉3
Совет по JUnit 5 🚀
Тестируйте методы-шаблоны с помощью
Используйте
https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/TestTemplate.html
👉@BookJava
Тестируйте методы-шаблоны с помощью
@TestTemplate
Используйте
@TestTemplate
для определения методов-шаблонов, которые создают динамические тесты на основе входных данных. 🔥https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/TestTemplate.html
👉@BookJava
junit.org
TestTemplate (JUnit 5.12.0 API)
declaration: module: org.junit.jupiter.api, package: org.junit.jupiter.api, annotation type: TestTemplate
👍3
JRE – Java Runtime Environment, Java-окружение времени выполнения. Это набор всего необходимого чтобы запустить скомпилированную Java-программу. Окружение состоит из виртуальной машины Java (JVM), библиотеки классов (Java Class Library), консольной команды java и прочей инфраструктуры. Тем не менее, JRE не достаточно чтобы создавать новые программы.
JDK – Java Development Kit, набор Java-разработчика. Это полнофункциональный SDK для Java. JDK включает в себя JRE, но кроме того содержит компилятор (javac) и другие инструменты разработки, такие как javadoc и jdb. С помощью JDK можно создавать и компилировать программы.
В большинстве случаев, если вам нужно только запускать Java программы, вы устанавливаете только JRE, если же вы планируете программировать на Java, вместо этого вам необходим JDK.
https://stackoverflow.com/questions/1906445/what-is-the-difference-between-jdk-and-jre/1906455#1906455
👉@BookJava
JDK – Java Development Kit, набор Java-разработчика. Это полнофункциональный SDK для Java. JDK включает в себя JRE, но кроме того содержит компилятор (javac) и другие инструменты разработки, такие как javadoc и jdb. С помощью JDK можно создавать и компилировать программы.
В большинстве случаев, если вам нужно только запускать Java программы, вы устанавливаете только JRE, если же вы планируете программировать на Java, вместо этого вам необходим JDK.
https://stackoverflow.com/questions/1906445/what-is-the-difference-between-jdk-and-jre/1906455#1906455
👉@BookJava
👍7
Совет
Если вы случайно уже используете генератор метамодели в своем проекте, вы можете использовать сгенерированные классы модели в атрибуте
👉@BookJava
Если вы случайно уже используете генератор метамодели в своем проекте, вы можете использовать сгенерированные классы модели в атрибуте
mappedBy
ваших отношений, чтобы обеспечить немного большую типобезопасность.👉@BookJava
👍6🎉2🤓1
Тестовое собеседование на Middle Java-разработчика завтра
Завтра, 28 августа в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
1. Роман Половинцев, ex-TeamLed в Сбер, Т-Банк, Райффайзенбанк и ВТБ позадает реальные вопросы и задачи разработчику-добровольцу
2. Роман будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Роману
Что узнаешь на прямом эфире от ШОРТКАТ:
- Чего ждут от кандидатов на Middle позиции в Java-разработке
- Какие вопросы задают на интервью и зачем
- Как подготовиться к собесу, чтобы получить оффер
Это бесплатно?
Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Завтра, 28 августа в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
1. Роман Половинцев, ex-TeamLed в Сбер, Т-Банк, Райффайзенбанк и ВТБ позадает реальные вопросы и задачи разработчику-добровольцу
2. Роман будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Роману
Что узнаешь на прямом эфире от ШОРТКАТ:
- Чего ждут от кандидатов на Middle позиции в Java-разработке
- Какие вопросы задают на интервью и зачем
- Как подготовиться к собесу, чтобы получить оффер
Это бесплатно?
Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
👍1
Media is too big
VIEW IN TELEGRAM
Java Virtual Threads
0:00 Intro
0:42 What are preview features, and how you can use them
3:34 What are Virtual Threads about?
4:21 Goals of Virtual Threads
5:11 Cost of a platform thread and CPU usage
7:49 How to use Virtual Threads
9:11 Using ExecutorServices with Virtual Threads
11:04 ThreadLocals and Synchronization
11:19 Synchronization, pinned threads and locks
13:14 Final words and outro
👉@BookJava
0:00 Intro
0:42 What are preview features, and how you can use them
3:34 What are Virtual Threads about?
4:21 Goals of Virtual Threads
5:11 Cost of a platform thread and CPU usage
7:49 How to use Virtual Threads
9:11 Using ExecutorServices with Virtual Threads
11:04 ThreadLocals and Synchronization
11:19 Synchronization, pinned threads and locks
13:14 Final words and outro
👉@BookJava
👍3
Media is too big
VIEW IN TELEGRAM
🎥 Java для начинающих | Уроки Java
#1 - Программирование на Java
#2 - Установка Java JDK и IntelliJ IDEA
#3 - Типы данных
#4 - Переменные
#5 - Арифметические операции
#6 - Условные операторы
#7 - циклы for, wile, do wile
#8 - Массивы в Java
#9 - Классы в Java
#10 - Тип данных String в Java
#11 - Наследование в Java
#12 - Java интерфейсы
#13 - Абстрактные классы java
#14 - Вложенные классы java
#15 - Пакеты в java
#16 - Перегрузка методов java
#17 - Основы ООП
#18 - Обработка исключений в java , try catch java / Java с нуля
Все видео доступны на youtube
👉@BookJava
#1 - Программирование на Java
#2 - Установка Java JDK и IntelliJ IDEA
#3 - Типы данных
#4 - Переменные
#5 - Арифметические операции
#6 - Условные операторы
#7 - циклы for, wile, do wile
#8 - Массивы в Java
#9 - Классы в Java
#10 - Тип данных String в Java
#11 - Наследование в Java
#12 - Java интерфейсы
#13 - Абстрактные классы java
#14 - Вложенные классы java
#15 - Пакеты в java
#16 - Перегрузка методов java
#17 - Основы ООП
#18 - Обработка исключений в java , try catch java / Java с нуля
Все видео доступны на youtube
👉@BookJava
👍3
Структурированное логирование в Spring Boot 3.4 🚀
В Spring Boot 3.4 поддержка структурированного логирования доступна из коробки. Поддерживаются форматы Elastic Common Schema (ECS) и Logstash. 🔥
https://spring.io/blog/2024/08/23/structured-logging-in-spring-boot-3-4
👉@BookJava
В Spring Boot 3.4 поддержка структурированного логирования доступна из коробки. Поддерживаются форматы Elastic Common Schema (ECS) и Logstash. 🔥
https://spring.io/blog/2024/08/23/structured-logging-in-spring-boot-3-4
👉@BookJava
Structured logging in Spring Boot 3.4
Level up your Java code and explore what Spring can do for you.
👍6
Совет по Spring 🚀
Используйте
👉@BookJava
Используйте
SSEEvent
в Spring для бесшовных обновлений в реальном времени в ваших приложениях 🔥👉@BookJava
👍3
Media is too big
VIEW IN TELEGRAM
🚀 Совет по Spring 🚀
Тестовые библиотеки Spring Boot (Testjars) 🔥
Привет, поклонники Spring! В этом выпуске мы рассмотрим новый проект Spring Boot Testjars, который значительно упрощает создание и повторное использование вспомогательных сервисов на базе Java, таких как микросервисы на основе Spring Boot или инфраструктурные компоненты, например, Spring Authorization Server.
источник
👉@BookJava
Тестовые библиотеки Spring Boot (Testjars) 🔥
Привет, поклонники Spring! В этом выпуске мы рассмотрим новый проект Spring Boot Testjars, который значительно упрощает создание и повторное использование вспомогательных сервисов на базе Java, таких как микросервисы на основе Spring Boot или инфраструктурные компоненты, например, Spring Authorization Server.
источник
👉@BookJava
👍5
Дилемма 3n+1 на Java. Кэшируем рекурсию
Приветствую всех, сегодня я хочу рассказать про одну из самых интересных неразгаданных загадок математики. Гипотеза Коллатца, или же дилемма 3n+1 прославилась благодаря простоте своей формулировки, при этом оставаясь не доказанной уже более 90 лет.
В этом выпуске : обзор самой гипотезы, код-снипеты, кэширование, рекурсия, и много чего еще.
Поехали.
Краткая формулировка, то бишь немного измененная выдержка из википедии Collatz conjecture — Wikipedia Гипотеза Коллатца — Википедия (wikipedia.org):
Берём любое натуральное число n:
1) Если оно чётное, то делим его на 2,
2) Если нечётное, то умножаем на 3 и прибавляем 1.
Над полученным числом выполняем те же самые действия, и так далее.
https://habr.com/ru/articles/839352/
👉@BookJava
Приветствую всех, сегодня я хочу рассказать про одну из самых интересных неразгаданных загадок математики. Гипотеза Коллатца, или же дилемма 3n+1 прославилась благодаря простоте своей формулировки, при этом оставаясь не доказанной уже более 90 лет.
В этом выпуске : обзор самой гипотезы, код-снипеты, кэширование, рекурсия, и много чего еще.
Поехали.
Краткая формулировка, то бишь немного измененная выдержка из википедии Collatz conjecture — Wikipedia Гипотеза Коллатца — Википедия (wikipedia.org):
Берём любое натуральное число n:
1) Если оно чётное, то делим его на 2,
2) Если нечётное, то умножаем на 3 и прибавляем 1.
Над полученным числом выполняем те же самые действия, и так далее.
https://habr.com/ru/articles/839352/
👉@BookJava
👍1
Media is too big
VIEW IN TELEGRAM
Когда ломается магия фреймворков...
Более чем за десять лет работы со Spring Framework и Enterprise Java я успел полюбить Spring Framework, возненавидеть и в итоге пересмотреть свои подходы к работе с ним. То же самое касается работы с рефлексией в целом и работы с АОП в частности.
источник
👉@BookJava
Более чем за десять лет работы со Spring Framework и Enterprise Java я успел полюбить Spring Framework, возненавидеть и в итоге пересмотреть свои подходы к работе с ним. То же самое касается работы с рефлексией в целом и работы с АОП в частности.
источник
👉@BookJava
👍2
Профилирование Java-приложений: от HeapDump до Grafana
Добрый день дорогой читатель. Сегодня я дам тебе несколько советов для поиска и анализа проблем в твоем Java приложении. Мы разберем такие вещи как: HeapDump, ThreadDump, VisualVM, Grafana, HikariPool, Prometheus и Garbage Collector.
Повествование будет строиться следующим образом: Я буду описывать потенциальные проблемные сценарии (use-case’ы) и шаги, которые необходимо предпринять для локализации и решения проблемы.
https://habr.com/ru/articles/837834/
👉@BookJava
Добрый день дорогой читатель. Сегодня я дам тебе несколько советов для поиска и анализа проблем в твоем Java приложении. Мы разберем такие вещи как: HeapDump, ThreadDump, VisualVM, Grafana, HikariPool, Prometheus и Garbage Collector.
Повествование будет строиться следующим образом: Я буду описывать потенциальные проблемные сценарии (use-case’ы) и шаги, которые необходимо предпринять для локализации и решения проблемы.
https://habr.com/ru/articles/837834/
👉@BookJava
👍5
⚡ Эксперт MES
ИТ-команда Росатома ищет Эксперта MES, который будет отвечать за систему управления производством: разрабатывать требования, настраивать, тестировать модули и поддерживать систему после внедрения.
✅ Пригодятся знания типовых моделей и структур данных MES и опыт работы с системой.
✅ Важно, чтобы вы умели программировать в среде фреймворков .NET, J2EE, JavaScript, а также понимали, как моделировать бизнес-процессы.
☎ Узнать о вакансии больше можно по ссылке:
https://voronezh.hh.ru/vacancy/105720940
ИТ-команда Росатома ищет Эксперта MES, который будет отвечать за систему управления производством: разрабатывать требования, настраивать, тестировать модули и поддерживать систему после внедрения.
✅ Пригодятся знания типовых моделей и структур данных MES и опыт работы с системой.
✅ Важно, чтобы вы умели программировать в среде фреймворков .NET, J2EE, JavaScript, а также понимали, как моделировать бизнес-процессы.
☎ Узнать о вакансии больше можно по ссылке:
https://voronezh.hh.ru/vacancy/105720940
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Что если бы Java-разработчики могли создавать веб-приложения, не прибегая к помощи JavaScript? 🤔
👉 @BookJava
👉 @BookJava
👍1
Работа с библиотекой WebFlux вызывает затруднения у многих Java/Kotlin разработчиков
Код выглядит непривычно, непонятно в каких потоках выполняется логика и как этим управлять
Сегодня я попытаюсь объяснить простым языком такой важный аспект, как момент переключения потоков в WebFlux, это поможет вам допускать меньше ошибок и писать более производительный код
Перед тем как начать, подписывайтесь на мой блог в телеграм, где вы сможете найти другие материалы от меня
Статья по теме https://habr.com/ru/articles/811289/
Код выглядит непривычно, непонятно в каких потоках выполняется логика и как этим управлять
Сегодня я попытаюсь объяснить простым языком такой важный аспект, как момент переключения потоков в WebFlux, это поможет вам допускать меньше ошибок и писать более производительный код
Перед тем как начать, подписывайтесь на мой блог в телеграм, где вы сможете найти другие материалы от меня
Статья по теме https://habr.com/ru/articles/811289/
🔥3❤2🎉1
Media is too big
VIEW IN TELEGRAM
Совет по Spring
В этом выпуске мы рассмотрим новый проект Spring Boot Testjars, который значительно упрощает создание и повторное использование сателлитных Java-сервисов, таких как микросервисы на базе Spring Boot или инфраструктура, например, Spring Authorization Server.
👉@BookJava
В этом выпуске мы рассмотрим новый проект Spring Boot Testjars, который значительно упрощает создание и повторное использование сателлитных Java-сервисов, таких как микросервисы на базе Spring Boot или инфраструктура, например, Spring Authorization Server.
👉@BookJava
👍5