Библиотека Java разработчика
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
Show more📈 Analytical overview of Telegram channel Библиотека Java разработчика
Channel Библиотека Java разработчика (@bookjava) in the Russian language segment is an active participant. Currently, the community unites 10 275 subscribers, ranking 12 049 in the Technologies & Applications category and 63 967 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 10 275 subscribers.
According to the latest data from 07 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 25 over the last 30 days and by 0 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 8.50%. Within the first 24 hours after publication, content typically collects 4.05% reactions from the total number of subscribers.
- Post reach: On average, each post receives 874 views. Within the first day, a publication typically gains 416 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 6.
- Thematic interests: Content is focused on key topics such as string, интерфейс, строка, boot, api.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.
По всем вопросам @evgenycarter
РКН clck.ru/3KoGeP”
Thanks to the high frequency of updates (latest data received on 08 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
В данной статье будем рассматривать многопоточность без применения webflux, однако если будет спрос, то распишу те же паттерны на webflux'е, там они выглядят более органично Также не буду затрагивать Project Loom, поскольку мне не приходилось отлаживать и поддерживать код с использованием Loom на коммерческом проекте (Java 21 еще не используем), но когда-нибудь я напишу подробную и понятную статью по Loomhttps://habr.com/ru/articles/838402/ 👉@BookJava
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576info' endpoint, установите свойство "http://management.info.ssl.enabled=true"
👉@BookJavaComparator.nullsLast
Принимает Comparator в качестве аргумента, который отвечает за сравнение ненулевых элементов. В случае, если переданный компаратор равен null, ненулевые значения считаются равными. 🔥
https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/Comparator.html#nullsLast(java.util.Comparator)
👉@BookJavaString его нельзя изменить.
- Использование: Широко используется для представления строковых значений.
- Особенности:
- Строки могут быть созданы с использованием строковых литералов или через конструктор.
- Для сравнения строк рекомендуется использовать метод equals(), а не оператор ==.
- Пример:
String str = "Hello, World!";
2. StringBuilder
- Изменяемый класс (mutable): Этот класс позволяет изменять строки без создания нового объекта.
- Основное применение: Используется, когда требуется частое изменение строк, например при конкатенации.
- Не синхронизирован: Этот класс не потокобезопасен, что делает его быстрее при работе в однопоточных приложениях.
- Пример:
StringBuilder sb = new StringBuilder("Hello");
sb.append(", World!");
3. StringBuffer
- Изменяемый класс (mutable): Как и StringBuilder, позволяет изменять строки.
- Синхронизирован: Потокобезопасный, что делает его более медленным по сравнению с StringBuilder.
- Основное применение: Рекомендуется использовать в многопоточных приложениях.
- Пример:
StringBuffer sb = new StringBuffer("Hello");
sb.append(", World!");
Различия между String, StringBuilder и StringBuffer:
- Неизменяемость: String неизменяемый, тогда как StringBuilder и StringBuffer изменяемы.
- Потокобезопасность: StringBuffer синхронизирован, в отличие от StringBuilder.
- Производительность: StringBuilder быстрее, чем StringBuffer при работе в однопоточных средах.
👉@BookJavaРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruString str = "hello";, JVM сначала проверяет, есть ли уже такая строка в пуле. Если есть, то возвращается ссылка на существующую строку, а не создается новый объект.
- Если строка создается с помощью new, например, String str = new String("hello");, новый объект строки создается в куче, даже если такая строка уже есть в пуле.
Оптимизация:
- Используйте строковые литералы вместо явного создания новых объектов String через new, чтобы JVM могла переиспользовать строки из пула.
Пример:
String s1 = "hello"; // переиспользует строку из пула
String s2 = new String("hello"); // создает новую строку в куче
2. Метод `intern()`
- Метод intern() добавляет строку в пул строк, если ее там еще нет, и возвращает ссылку на строку из пула.
- Это полезно, когда вы хотите уменьшить количество дубликатов строк.
Пример:
String s1 = new String("hello").intern(); // добавляет строку в пул и возвращает ссылку из пула
String s2 = "hello"; // использует строку из пула
System.out.println(s1 == s2); // true
3. Избегайте конкатенации строк в циклах
- Операция конкатенации строк через оператор + в Java создает новые объекты String, поскольку строки неизменяемы. Это может привести к большому количеству временных объектов и снижению производительности.
- Внутри циклов это особенно дорого, поскольку каждый раз создается новая строка.
Оптимизация:
- Используйте StringBuilder или StringBuffer для конкатенации строк, если вы собираете строки в цикле.
Пример:
// Плохой подход:
String result = "";
for (int i = 0; i < 1000; i++) {
result += i; // каждый раз создается новая строка
}
// Оптимизированный подход:
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 1000; i++) {
builder.append(i); // строка накапливается без создания временных объектов
}
String result = builder.toString();
4. Используйте `StringBuilder` вместо `StringBuffer` для однопоточных операций
- StringBuffer синхронизирован, и это делает его потокобезопасным, но добавляет накладные расходы. Для однопоточных операций лучше использовать несинхронизированный StringBuilder, который работает быстрее.
5. Использование методов `char[]` и `toCharArray()`
- Если необходимо часто модифицировать строку или выполнять операции с отдельными символами, то преобразование строки в массив символов (`char[]`) может быть более эффективно.
Пример:
String str = "hello";
char[] charArray = str.toCharArray();
charArray[0] = 'H'; // изменяем символ
String modifiedStr = new String(charArray); // создаем новую строку
6. Уменьшение использования временных строк
- Старайтесь избегать создания временных строк, которые сразу выбрасываются сборщиком мусора. Например, при разбиении строки (split) или других операциях, которые могут создать ненужные объекты.
Оптимизация:
- Используйте потоки или регулярные выражения для более эффективной обработки строк.
7. Использование `String.join()` или `Collectors.joining()` для объединения строк
- Если необходимо объединить множество строк (например, из массива или коллекции), лучше использовать String.join() или Collectors.joining() для оптимизации вместо ручной конкатенации.
Пример:
List<String> list = Arrays.asList("one", "two", "three");
String result = String.join(", ", list); // более эффективное объединение строк
👉@BookJavaРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruplugins {
id 'checkstyle'
Плагин проверяет форматирование, неиспользуемые импорты и когнитивную сложность ваших методов при каждой сборке приложения, что помогает поддерживать ваш код удобочитаемым, а следовательно, лучше сопровождаемым.
👉@BookJavaРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru1 List<String› immutableList = List.of("apple", "banana", "orange");
Для создания изменяемого списка следует использовать Arrays.asList()
1 List<String> mutableList = Arrays.asList("red", "green", "blue");
В отличие от List.of(), Arrays.asList() допускает нулевые элементы.
👉@BookJavafinal. Исключение — если по логике эта переменная должна изменяться в последующем коде. Однако, переменных, которые мы инициализируем один раз и далее не изменяем, как правило, большинство.
То же правило можно отнести и к атрибутам класса — по умолчанию их также лучше делать final, если мы хотим сделать состояние класса неизменяемым и потокобезопасным.
Разумеется, если по логике предполагается изменение состояния класса, изменяемые атрибуты не должны быть финальными.
👉@BookJava
Available now! Telegram Research 2025 — the year's key insights 
