Java библиотека
前往频道在 Telegram
Java коротко и по делу ☕️ Разборы кода, книги, статьи и задачи с собеседований. Реклама: @NadikaKir РКН: https://vk.cc/cJrT4A Биржа: https://telega.in/c/javalib/ ВК: https://vk.com/javatutorial
显示更多📈 Telegram 频道 Java библиотека 的分析概览
频道 Java библиотека (@javalib) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 30 393 名订阅者,在 技术与应用 类别中位列第 4 370,并在 俄罗斯 地区排名第 21 069 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 30 393 名订阅者。
根据 01 十一月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -220,过去 24 小时变化为 -19,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 6.30%。内容发布后 24 小时内通常能获得 4.38% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 1 914 次浏览,首日通常累积 1 330 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 5。
- 主题关注点: 内容集中在 string, мониторинг, строка, boot, архитектура 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Java коротко и по делу ☕️
Разборы кода, книги, статьи и задачи с собеседований.
Реклама: @NadikaKir
РКН: https://vk.cc/cJrT4A
Биржа: https://telega.in/c/javalib/
ВК: https://vk.com/javatutorial”
凭借高频更新(最新数据采集于 02 十一月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
30 393
订阅者
-1924 小时
-1207 天
-22030 天
正在加载数据
相似频道
标签云
进出提及
---
---
---
---
---
---
吸引订阅者
十一月 '2611月 '26
十一月 '26
+12
在0个频道中
十月 '26
+200
在1个频道中
Get PRO
九月 '26
+179
在1个频道中
Get PRO
八月 '26
+147
在2个频道中
Get PRO
七月 '26
+166
在3个频道中
Get PRO
六月 '26
+255
在4个频道中
Get PRO
五月 '26
+278
在4个频道中
Get PRO
四月 '26
+223
在3个频道中
Get PRO
三月 '26
+370
在2个频道中
Get PRO
二月 '26
+336
在1个频道中
Get PRO
一月 '26
+291
在1个频道中
Get PRO
十二月 '25
+219
在1个频道中
Get PRO
十一月 '25
+295
在3个频道中
Get PRO
十月 '25
+271
在1个频道中
Get PRO
九月 '25
+343
在9个频道中
Get PRO
八月 '25
+296
在1个频道中
Get PRO
七月 '25
+353
在2个频道中
Get PRO
六月 '25
+394
在2个频道中
Get PRO
五月 '25
+353
在3个频道中
Get PRO
四月 '25
+296
在2个频道中
Get PRO
三月 '25
+363
在1个频道中
Get PRO
二月 '25
+353
在2个频道中
Get PRO
一月 '25
+384
在0个频道中
Get PRO
十二月 '24
+421
在2个频道中
Get PRO
十一月 '24
+378
在0个频道中
Get PRO
十月 '24
+486
在1个频道中
Get PRO
九月 '24
+541
在2个频道中
Get PRO
八月 '24
+459
在1个频道中
Get PRO
七月 '24
+394
在0个频道中
Get PRO
六月 '24
+340
在0个频道中
Get PRO
五月 '24
+430
在2个频道中
Get PRO
四月 '24
+597
在0个频道中
Get PRO
三月 '24
+605
在2个频道中
Get PRO
二月 '24
+691
在2个频道中
Get PRO
一月 '24
+731
在3个频道中
Get PRO
十二月 '23
+489
在0个频道中
Get PRO
十一月 '23
+715
在3个频道中
Get PRO
十月 '23
+778
在0个频道中
Get PRO
九月 '23
+893
在0个频道中
Get PRO
八月 '23
+624
在0个频道中
Get PRO
七月 '23
+572
在0个频道中
Get PRO
六月 '23
+560
在0个频道中
Get PRO
五月 '23
+563
在0个频道中
Get PRO
四月 '23
+609
在0个频道中
Get PRO
三月 '23
+962
在0个频道中
Get PRO
二月 '23
+634
在0个频道中
Get PRO
一月 '23
+1 068
在0个频道中
Get PRO
十二月 '22
+1 083
在0个频道中
Get PRO
十一月 '22
+901
在0个频道中
Get PRO
十月 '22
+639
在0个频道中
Get PRO
九月 '22
+586
在0个频道中
Get PRO
八月 '22
+1 130
在0个频道中
Get PRO
七月 '22
+991
在0个频道中
Get PRO
六月 '22
+1 150
在0个频道中
Get PRO
五月 '22
+1 570
在0个频道中
Get PRO
四月 '22
+1 138
在0个频道中
Get PRO
三月 '22
+950
在0个频道中
Get PRO
二月 '22
+408
在0个频道中
Get PRO
一月 '22
+1 252
在0个频道中
Get PRO
十二月 '21
+1 364
在0个频道中
Get PRO
十一月 '21
+1 388
在0个频道中
Get PRO
十月 '21
+772
在0个频道中
Get PRO
九月 '21
+1 798
在0个频道中
Get PRO
八月 '21
+1 679
在0个频道中
Get PRO
七月 '21
+1 517
在0个频道中
Get PRO
六月 '21
+1 215
在0个频道中
Get PRO
五月 '21
+468
在0个频道中
Get PRO
四月 '21
+393
在0个频道中
Get PRO
三月 '21
+493
在0个频道中
Get PRO
二月 '21
+236
在0个频道中
Get PRO
一月 '21
+3 155
在0个频道中
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 02 十一月 | +11 | |||
| 01 十一月 | +1 |
频道帖子
Утечка памяти, фрагментация и нагрузка на GC: в чём разница?
Приложение потребляет много памяти — это ещё не означает утечку. Причины могут быть разными.
Memory Leak — ненужные объекты остаются достижимыми. Программа больше не использует их, но продолжает хранить ссылки, поэтому сборщик мусора не может освободить память.
Типичные причины: кэш без ограничений, растущие статические коллекции, неудалённые слушатели и неправильная работа с
ThreadLocal. Один из признаков — устойчивый рост занятой памяти даже после сборок мусора.
Memory Fragmentation — свободная память есть, но она разбита на неудобные участки. Например, суммарно места достаточно, но нет подходящего непрерывного блока для выделения.
В Java влияние фрагментации зависит от сборщика мусора и области памяти: heap, native или off-heap. Многие сборщики перемещают объекты и уплотняют память, но это не устраняет все возможные случаи.
GC Pressure — объекты создаются быстрее, чем системе удобно их убирать. Память освобождается, однако GC приходится работать часто или интенсивно, расходуя CPU и увеличивая задержки.
Причины: высокая скорость выделения памяти, множество временных объектов, большие промежуточные структуры и частая сериализация.
При диагностике смотрите на разные сигналы:
• Утечка: какие объекты остаются живыми и что удерживает ссылки на них.
• Фрагментация: в какой области памяти не удаётся выделить нужный блок.
• GC Pressure: скорость аллокаций, частоту сборок, паузы и затраты CPU.
Увеличение -Xmx иногда помогает, но при утечке лишь откладывает проблему. Сначала выясните, почему память растёт и на что тратится время GC.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪| 2 | 🛠 JDK 28 сможет выделять небольшие блоки нативной памяти из повторно используемых пулов
Вызову нативной функции нужен указатель на одно число. Создавать полноценное выделение памяти ради нескольких байт может оказаться дороже самой работы с ними.
Типичный код FFM выглядит так:
try (Arena arena = Arena.ofConfined()) {
MemorySegment segment =
arena.allocate(ValueLayout.JAVA_INT);
segment.set(ValueLayout.JAVA_INT, 0, 42);
}
В разрабатываемом JDK 28 небольшие выделения confined-арены могут обслуживаться из пула. Он запрашивается лениво, при первом подходящем выделении. По умолчанию кеш платформенного потока может хранить четыре пула по 64 байта.
Если размер или выравнивание не подходят, используется обычный путь.
🟡 Закрытая арена не становится доступной повторно
После close() её сегменты всё так же недоступны. Перед повторным использованием занятая часть пула очищается. Повторно используется внутренняя память, а не старые MemorySegment.
Менять исходный код ради этой оптимизации не требуется. Но это улучшение будущего JDK 28: пример API уже знаком по выпущенным версиям, описанный механизм пулов — ещё нет.
🔗 Как устроены пулы confined-арен
══════ Навигация ══════
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 509 |
| 3 | Spring Boot + Kafka: отправка и получение событий с минимумом кода
Внедрите KafkaTemplate, чтобы отправлять сообщения в топик.
Добавьте @KafkaListener к методу, чтобы обрабатывать входящие сообщения.
Автоконфигурация Spring Boot настроит компоненты Kafka по параметрам spring.kafka.*.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 740 |
| 4 | Не нашли готовое ИИ-решение для своей компании?
Скорее всего, его и не существует.
Мы Джи-спарк создаём корпоративные ИИ-системы под процессы конкретного бизнеса.
Не продаём коробочные сервисы.
Не предлагаем типовых ботов.
Если задача нестандартная,
мы проектируем решение с нуля для:
• Производства
• Логистики
• Строительства
• Банков
• Ритейла
• B2B-компаний
Интегрируем ИИ в существующие процессы компании без их перестройки. Именно поэтому к нам обращаются, когда готовые сервисы уже не подходят.
Если вы рассматриваете ИИ как инвестицию в развитие бизнеса, а не как эксперимент давайте обсудим вашу задачу.
📞 Бесплатная консультация
Узнать больше
#реклама 16+
g-spark.ru
О рекламодателе | 1 733 |
| 5 | ☕️ JDK 27 копирует HashMap без повторного вычисления хешей в специальных сценариях
Копирование Map выглядит коротко:
var copy = new HashMap<>(source);
Но внутри общего пути могут быть итератор, обращения к ключам и значениям, повторный hashCode(). Когда через одну точку вызова проходят разные реализации Map, JIT сложнее убрать эти расходы.
В JDK 27 добавили специальные пути для источника, который является именно HashMap, и неизменяемой обёртки над HashMap. Они обходят исходную таблицу напрямую и используют хеши, уже сохранённые в её узлах.
Оптимизация относится и к putAll(). Для других реализаций Map остаётся общий путь.
🟡 Это не глубокое копирование
Новая таблица по-прежнему содержит ссылки на те же ключи и значения. Изменяемый объект внутри карты не станет независимым после создания копии.
В статье приведены заметные выигрыши микробенчмарков на конкретной платформе. Переносить эти проценты на весь сервис нельзя: сначала проверьте, есть ли копирование карт среди его горячих участков.
🔗 Что ускорили в библиотеках JDK 27
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 957 |
| 6 | 🛠 Spring переводит регулярные исправления на единый день выпуска
Раньше обновления проектов Spring выходили по очереди в течение двух недель. Теперь команда собирает их в один выпуск: в четверг после третьего понедельника месяца.
Первый регулярный выпуск по новой схеме назначен на 22 октября. Это дата из анонса — наличие конкретных версий в Maven Central всё равно нужно проверять.
Причина изменения практическая: при растянутом графике исправления уязвимостей появлялись в разные дни. Единый выпуск позволяет получить согласованный набор обновлений сразу.
🟡 Что проверить в своём проекте
— Какая версия Spring Boot и какой BOM управляют зависимостями.
— Какие рекомендации по безопасности относятся к используемым компонентам.
— Какие тесты нужно прогнать перед обновлением.
На spring.io/security появились фильтры по проекту, серьёзности и номеру CVE. Это удобнее, чем искать нужный компонент в длинной ленте.
Общий день выпуска не означает, что можно обновить только одну случайную библиотеку и считать весь стек исправленным. Сначала проверьте рекомендации для затронутых проектов и совместимость версий.
🔗 Как меняется выпуск обновлений Spring
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 856 |
| 7 | 👩💻 Как Java-баги ломают Minecraft-мод
В статье разбирают ошибки в Create — одном из популярных модов для Minecraft. Есть проблемы с неизменяемыми строками, null, мёртвым кодом и обработкой исключений.
Причём автор не просто показывает предупреждения анализатора, а проверяет, как баги ведут себя прямо в игре.
⛓ Читать статью
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 764 |
| 8 | Сверяем файлы сборки и находим расхождения!
После копирования приложения можно проверить, что файлы совпадают с исходной сборкой. Напишем небольшую проверку двух каталогов, которая найдёт отсутствующие и изменённые файлы, не загружая их целиком в память.
Обойдём файлы без загрузки всего списка в память и закроем поток после проверки. Символические ссылки отфильтруем через LinkOption.NOFOLLOW_LINKS:
try (Stream<Path> files = Files.walk(buildDir)) {
Iterator<Path> paths = files.filter(path ->
Files.isRegularFile(path, NOFOLLOW_LINKS)).iterator();
while (paths.hasNext()) compare(paths.next(), buildDir, deployDir);
}
Для каждого файла строим такой же относительный путь в каталоге развёртывания. Это сохраняет структуру вложенных папок:
Path relative = buildDir.relativize(source);
Path deployed = deployDir.resolve(relative);
Отсутствующий файл отмечаем отдельно, иначе проверка совпадения не сможет отличить его от пустого файла:
if (!Files.isRegularFile(deployed)) {
reportMissing(relative);
return;
}
Для существующих файлов используем Files.mismatch. Метод читает содержимое по мере необходимости и возвращает позицию первого различия, а -1 означает полное совпадение:
long offset = Files.mismatch(source, deployed);
if (offset == -1) reportMatch(relative);
else reportDifference(relative, offset);
Можно добавить обратный проход по каталогу развёртывания, если нужно также находить лишние файлы.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 641 |
| 9 | Java Records — больше, чем сокращённая запись класса
record User(String name, String email) {}
Вы получаете:
→ Поля компонентов с модификатором final.
→ Автоматические equals(), hashCode() и toString().
→ Явный сигнал: «этот тип хранит данные».
Используйте records для DTO — меньше шаблонного кода, проще ревью.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 599 |
| 10 | Java Records, Lombok и POJO: в чём разница?
Все три подхода помогают описывать данные, но отвечают на разные потребности: краткость, генерация шаблонного кода и контроль над поведением класса.
• Record — компактный носитель данных. Records стали стандартной возможностью языка в Java 16:
public record User(
Long id,
String name,
String email
) {}
Компилятор создаёт конструктор для всех компонентов, методы доступа id(), name(), email(), а также equals(), hashCode() и toString(). Подходит для DTO, моделей запросов и ответов API, данных событий.
Неизменяемость поверхностная: поля компонентов — final, но содержимое переданного списка или другого изменяемого объекта всё ещё может меняться.
• Lombok — меньше шаблонного кода. Аннотации позволяют генерировать методы и конструкторы при компиляции:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
private String email;
}
Lombok умеет создавать getters/setters, конструкторы, equals(), hashCode(), toString() и builder через @Builder.
Удобен для существующих проектов и классов с большим количеством повторяющегося кода. При этом добавляет зависимость при сборке и требует понимания того, что именно генерируется.
С JPA-сущностями аннотации стоит выбирать аккуратно: автоматически созданные equals(), hashCode() и toString() могут некорректно работать со связями и ленивой загрузкой.
• POJO — обычный Java-объект. Класс без обязательной привязки к специальному фреймворку или модели программирования. Вы сами определяете конструкторы, валидацию, изменяемость, бизнес-логику и правила сравнения. Подходит для доменных моделей и классов с нестандартным поведением.
Это не три взаимоисключающих варианта: record — возможность языка, Lombok — инструмент генерации кода, POJO — характеристика класса. Класс с аннотациями Lombok вполне может оставаться POJO. Выбирайте подход по назначению класса, а не только по количеству сэкономленных строк.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 534 |
| 11 | Как кешировать данные о классах и не удерживать ClassLoader?
Фреймворки часто читают аннотации и методы через reflection. Сохранять такие данные в обычной статической map не всегда безопасно, если приложение выгружает плагины или модули.
Например, типичный кеш хранит ссылку на класс в ключе:
Map<Class<?>, Metadata> cache = new ConcurrentHashMap<>();
Заполнять такой кеш можно через computeIfAbsent:
cache.computeIfAbsent(type, MetadataCache::inspect);
Но долгоживущий кеш удерживает ключи-Class, а вместе с ними может задержать выгрузку ClassLoader. Для данных, привязанных к Class, в Java есть ClassValue.
Опиши вычисление один раз в computeValue:
ClassValue<Metadata> cache = new ClassValue<>() {
protected Metadata computeValue(Class<?> type) {
return inspect(type);
}
};
Значение вычисляется по запросу, отдельно для каждого класса. Оставляй inspect без побочных эффектов, поскольку конкурентные вызовы могут привести к повторному вычислению.
Читай метаданные через get:
Metadata metadata = cache.get(Order.class);
metadata.invoke(order);
Такой доступ не требует вручную синхронизировать создание значения. ClassValue подходит для reflection-кеша, который индексируется объектами Class.
Если значение нужно пересчитать, удали его:
cache.remove(Order.class);
Metadata refreshed = cache.get(Order.class);
Следующий get снова вызовет computeValue. Для обычных кешей с произвольными ключами ClassValue не подходит.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 451 |
| 12 | Что такое тернарный оператор выбора?
Тернарный условный оператор ?: - оператор, которым можно заменить некоторые конструкции операторов if-then-else.
Выражение записывается в следующей форме:
условие ? выражение1 : выражение2
Если условие выполняется, то вычисляется выражение1 и его результат становится результатом выполнения всего оператора. Если же условие равно false, то вычисляется выражение2 и его значение становится результатом работы оператора. Оба операнда выражение1 и выражение2 должны возвращать значение одинакового (или совместимого) типа.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 557 |
| 13 | Java 21: виртуальные потоки для задач с ожиданием I/O
JVM управляет множеством лёгких потоков без отдельного потока ОС для каждого.
Можно сохранить привычный блокирующий код и обрабатывать много задач одновременно.
Подходят для многочисленных HTTP-запросов и обращений к БД, где значительная часть времени уходит на ожидание.
Вычисления на CPU сами по себе быстрее не станут. И не забывайте ограничивать параллельные обращения: виртуальные потоки не увеличивают пропускную способность базы или внешнего API.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 718 |
| 14 | Какие весовые рамки у integer?
В Java тип int занимает 4 байта (32 бита) и имеет диапазон:
-2^{31} \text{ до } 2^{31} - 1
Точный диапазон `int`
Минимальное значение
Integer.MIN_VALUE = -2,147,483,648
Максимальное значение
Integer.MAX_VALUE = 2,147,483,647
public class Main {
public static void main(String[] args) {
System.out.println("Минимальный int: " + Integer.MIN_VALUE);
System.out.println("Максимальный int: " + Integer.MAX_VALUE);
}
}
Вывод:
Минимальный int: -2147483648
Максимальный int: 2147483647
Почему именно такой диапазон?
4 байта (32 бита) означают, что у нас 2³² возможных значений.
Поскольку int знаковый (поддерживает отрицательные и положительные числа), половина значений отводится подотрицательные числа.
Один бит используется для знака (0 – положительное число, 1 – отрицательное).
\text{Диапазон} = - (2^{31}) \text{ до } (2^{31} - 1)
Что будет, если выйти за пределы `int`?
Если сложить два максимальных значения int, произойдёт переполнение (overflow)
int a = Integer.MAX_VALUE;
int b = 1;
int c = a + b;
System.out.println(c); // Выведет -2147483648 (переполнение!)
Как работать с числами больше `int`?
Использовать `long` (8 байт, диапазон от -2^63 до 2^63 - 1):
long bigNumber = 2_147_483_648L; // Обязательно добавлять "L" в конце
Использовать BigInteger (неограниченный размер):
BigInteger bigNum = new BigInteger("999999999999999999999999");
Ставь и забирай Базу знаний
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 669 |
| 15 | Проверяем пересечение бронирований на Java!
В календаре нужно отклонить новую бронь, если выбранное время уже занято. Для проверки достаточно сравнить начало и конец двух интервалов, не перебирая каждую минуту внутри них.
Сделаем модель с полуоткрытым интервалом, где начало включается, а конец уже свободен:
record Booking(LocalDateTime start, LocalDateTime end) {
Booking {
if (!start.isBefore(end)) {
throw new IllegalArgumentException("End must be after start");
}
}
boolean overlaps(Booking other) {
return start.isBefore(other.end())
&& other.start().isBefore(end);
}
}
Проверка не даст создать бронь нулевой или отрицательной длины. Условие пересечения учитывает обе границы и не считает соседние интервалы конфликтом.
Подготовим уже занятые промежутки и новый запрос:
List<Booking> existing = List.of(
new Booking(start1, end1),
new Booking(start2, end2)
);
Booking requested = new Booking(requestStart, requestEnd);
Здесь предполагается, что все значения уже приведены к одной временной зоне. Для расписания в нескольких регионах лучше сравнивать Instant, а исходный ZoneId сохранять отдельно.
Проверим весь список и получим понятный результат:
boolean conflict = existing.stream()
.anyMatch(booking -> booking.overlaps(requested));
anyMatch завершает проверку, как только найдёт первое пересечение. Если conflict равен false, новую бронь можно добавить, а интервалы, которые соприкасаются ровно по границе, останутся допустимыми.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 571 |
| 16 | Сохрани, сессия скоро
ИИ, который реально помогает с учёбой, а не выдумывает источники 📊
Объяснит тему, соберёт план и презу, подберёт литературу.
400 токенов дарят просто за регистрацию. Дальше 399 ₽/мес, дешевле рафа.
Попробовать
#реклама 16+
kampus.ai
О рекламодателе | 1 400 |
| 17 | ☕️ Скользящие окна в Stream без ручного буфера
Нужно сравнить соседние измерения или обработать последовательность небольшими перекрывающимися группами? В Java 24+ есть готовый gatherer.
var windows = Stream.of(1, 2, 3, 4, 5)
.gather(Gatherers.windowSliding(3))
.toList();
// [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
Каждое следующее окно теряет самый старый элемент и получает новый. Если вход короче размера окна, получится одно неполное окно; пустой Stream не выдаст ни одного.
🟡 Окна нельзя изменять. Большой размер окна может потреблять лишнюю память — это не бесплатная замена любого буфера.
Gatherers стали стабильным API в Java 24. В докладе автора API есть примеры собственных преобразований и правила работы с параллельными потоками.
🔗 Источник • Разбор и примеры
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 773 |
| 18 | final, finally и finalize: разные задачи
final запрещает повторное присваивание переменной, переопределение метода или наследование класса. final-ссылка не делает объект неизменяемым:
final var names = new ArrayList<String>();
names.add("Java"); // допустимо
finally выполняется при выходе из try, в том числе после return или исключения. Это не гарантия на случай аварийного завершения JVM. Для AutoCloseable обычно удобнее try-with-resources.
finalize() — устаревший механизм финализации. В Java 18 его пометили для удаления, а не удалили: метод ещё присутствует в API Java 25. Момент вызова не гарантирован, поэтому закрывать файлы и соединения через него нельзя.
#Java
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 946 |
| 19 | Шпаргалка по выбору типа даты и времени в Java!
Для календарного интервала вроде срока подписки используют Period, а для точной длительности в часах и секундах подходит Duration. Когда важен конкретный момент, выбирают Instant или тип с часовым поясом.
На картинке собрана схема выбора между LocalDate, LocalTime, LocalDateTime, Instant и ZonedDateTime. Она помогает не потерять часовой пояс там, где он влияет на расписание и переходы летнего времени.
Сохрани, чтобы не потерять!
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 1 969 |
| 20 | Подборка Spring от 13 октября: что открыть
В выпуске This Week in Spring от 13 октября собраны материалы по Spring Boot, Spring Modulith, Spring AI и инструментам разработчика.
Такую подборку удобнее читать выборочно: выберите технологию из своего проекта, откройте первоисточник и сопоставьте версию API со своей. Одна ссылка из обзора не заменяет проверку совместимости зависимостей.
Полный выпуск с исходными ссылками.
#Java
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪 | 2 031 |
