You've successfully subscribed to Заметки Разработчиков
Great! Next, complete checkout for full access to Заметки Разработчиков
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Success! Your billing info is updated.
Billing info update failed.

junior

Парсинг URL c помощью регулярки

// Split URL into protocol, domain, port and URI Pattern pattern = Pattern.compile("(https?://)([^:^/]*)(:\\d*)?(.*)?"); Matcher matcher = pattern.matcher(url); matcher.find(); String protocol = matcher.group(1); String domain = matcher.group(2); String port = matcher.group(3); String uri = matcher.group(4); Разделение URL-адреса на протокол, домен, порт и URI с

// Split URL into protocol, domain, port and URI
Pattern pattern = Pattern.compile("(https?://)([^:^/]*)(:\\d*)?(.*)?");
Matcher matcher = pattern.matcher(url);

matcher.find();

String protocol = matcher.group(1);
String domain   = matcher.group(2);
String port     = matcher.group(3);
String uri      = matcher.group(4);

Разделение URL-адреса на протокол, домен, порт и URI с помощью регулярных выражений.

Модификаторы доступа в Java

Коротко о существующих модификаторах доступа: public, protected, default, private.

private (приватный): члены класса доступны только внутри класса. Для обозначения используется служебное слово private.

default, package-private (доступ на уровне пакета): видимость класса/членов класса только внутри пакета. Является модификатором доступа по умолчанию - специальное обозначение не требуется.

protected (защищённый): члены класса доступны внутри пакета и в наследниках. Для обозначения используется служебное слово protected.

public (публичный): класс/члены класса доступны всем. Для обозначения используется служебное слово public.

Последовательность модификаторов от самого открытого до самого закрытого: public, protected, default, private.

Визуально модификаторы доступа переменной класса можно представить таким образом:

Подробнее про все существующие модификаторы читайте в этой статье 👇

Обзор всех модификаторов в Java
Модификаторы это ключевые слова в Java, которые ”изменяют и регулируют” работу классов, методов и переменных.

Циклические зависимости сервисов

Циклические зависимости между сервисами возникают, когда сервисы взаимно внедряются друг в друга. Например, сервис А внедряет сервис Б, но в тоже время сервис Б внедряет сервис А. Разбираемся, как распутать этот клубок в Spring и Quarkus.

Материалы по Garbage Collector

Решил собрать в одном месте материалы для начинающих разработчиков на Java о сборщиках мусора. Перед изучением GC стоит разобраться в устройстве памяти JVM 1. Сборка мусора в Java. В общих чертах о сборке мусора. 2. Владимир Иванов — G1 Garbage Collector. Закрепляем занания и подробно разбираемся в G1. 3. Алексей Шипилёв

Решил собрать в одном месте материалы для начинающих разработчиков на Java о сборщиках мусора.

Перед изучением GC стоит разобраться в устройстве памяти JVM
  1. Сборка мусора в Java. В общих чертах о сборке мусора.
  2. Владимир Иванов — G1 Garbage Collector. Закрепляем занания и подробно разбираемся в G1.
  3. Алексей Шипилёв — Shenandoah. Подробно рассказаны алгоритмы маркировки и копирования объектов.

Книга, которая упоминается в докладе: The Garbage Collection Handbook

Не используйте @Data

Многие разработчики в принципе против использования Lombok. В общем, это холиварная тема. Но вы используете Lombok в проекте, то не используйте хотя бы спорные и откровенно вредные аннотации.

Многие разработчики в принципе против использования Lombok. В общем, это холиварная тема. Но вы используете Lombok в проекте, то не используйте хотя бы спорные и откровенно вредные аннотации.

Одна из таких – это @Data. Во-первых, мало кто помнит, что она под собой скрывает.

  • @ToString. Не помню, когда последний раз переопределял toString(). А если объект содержит чувствительную информацию?
  • @EqualsAndHashCode. Это самая вредная аннотация в @Data. Потому что она генерирует equals() и hashCode() по всем полям. Обычно вы не хотите, чтобы генерация осуществлялась по всем полям. Например, для сущности достаточно идентификатора.
  • @Getter / @Setter. Здесь ничего плохого.
  • @RequiredArgsConstructor. Тоже окей.

Основная проблема в @EqualsAndHashCode. Можно, конечно, использовать @EqualsAndHashCode.Exclude. Эта аннотация запрещает использовать поле при генерации, но вы хотите расставлять это над почти всеми полями в сущности? Потому что @EqualsAndHashCode.Include просто не сработает, нельзя объявить только нужные поля, нужно будет именно исключать все ненужные.

Также избегайте всех аннотаций из пакета experemental. Все аннотации из этого пакета могут работать не стабильно, и при этом могут быть удалены из следующих версий. Исключением из этого пакета является @FieldNameConstants, за пару лет с ней не было никаких проблем, а все имеющиеся альтернативы не очень.

С Lombok код выглядит чище, но, как и в случае с любым другим магическим инструментом, важно понимать, как именно он работает и когда его использовать. В противном случае производительность приложения может снизиться, либо оно вовсе может перестать работать корректно.

Lombok + JPA: Что может пойти не так?
Lombok — это отличный инструмент, с которым Java-код становится чище и лаконичнее. Однако есть несколько нюансов, которые надо учитывать при его использовании с JPA. В этой статье мы выясним, как...
Дополнительная статья на эту тему