Почему Files.lines() нельзя оставлять без try-with-resources? Files.lines() выглядит как удобный способ быстро получить Stream строк из файла. Но за этим Stream остаётся открытый файловый ресурс. Stream<String> lines = Files.lines(path); long count = lines.count(); После count поток может быть исчерпан, но файл не обязан закрыться сразу. В долгоживущем сервисе или цикле обработки это приводит к накоплению открытых…
Java Ready | Программирование
Авторский канал по разработке на Java. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Cотрудничество: @energy_c
Динамика подписчиков
с 20 июля 2026 по 28 сентября 2026 · минимум 8 580 · максимум 9 100
Кто рекламировался за полгода
Рекламодатель определён по маркировке рекламы в постах канала.
Публикации
Java 25 становится проще! Автор разбирает JEP-512 и изменения, которые позволяют писать небольшие программы с меньшим количеством обязательной обвязки. Вместо класса, static main и ручных импортов можно сосредоточиться на самой задаче, а не на стартовом шаблоне. В статье разбирают: • как устроены упрощённые исходники Java 25 • зачем появились неявные импорты и класс IO • как запускать короткие Java-скрипты из…
Знали, почему Pattern.compile лучше не вызывать в горячем цикле? В Java регулярные выражения часто используют для валидации, поиска и очистки строк. Рабочий код выглядит так: for (String email : emails) { if (Pattern.compile(".+@.+\\..+").matcher(email).matches()) { valid.add(email); } } Проблема в том, что Pattern.compile создаёт объект шаблона. Если делать это на каждой итерации, программа снова и снова разбирает…
Проверяем пересечение временных интервалов на Java! Нужно понять, конфликтует ли новый слот с уже существующими. Такая задача встречается в календарях, бронированиях, расписаниях задач и системах записи. В этой задаче: • описываем интервал отдельным record • пишем короткое правило пересечения • фильтруем занятые слоты через stream • получаем список конфликтов Вместо набора частных случаев появляется одно…
Почему BigDecimal.equals может странно работать даже при одинаковом числе? BigDecimal часто используют для денег, процентов и точных расчётов. Но сравнивать такие значения через equals не всегда то, что ожидается. Посмотри на пример: var a = new BigDecimal("1.0"); var b = new BigDecimal("1.00"); System.out.println(a.equals(b)); Математически это одно и то же значение. Но equals вернёт false, потому что BigDecimal…
Шпаргалка по контейнеризации Java-приложений! Например, multi-stage build помогает не тащить инструменты сборки в production-образ, а .dockerignore убирает лишние файлы из build context. На картинке собраны практики для Docker-образов с Java. Есть фиксированные base image теги, минимальный runtime, запуск не от root, обработка сигналов, graceful shutdown, .dockerignore и проверка уязвимостей. Сохрани, чтобы не…
Собираем поиск по словам на Java! Нужно быстро находить документы, где встречается слово. Сделаем небольшой inverted index, который хранит для каждого слова набор id документов. Начнём с хранилища индекса: Map<String, Set<Integer>> index = new HashMap<>(); Документ можно представить обычной строкой: int id = 7; String text = "Java streams and maps"; Разобьём текст на слова в нижнем регистре: String[] words = text…
Шпаргалка по контейнеризации Java-приложений! Например, multi-stage build помогает не тащить инструменты сборки в production-образ, а .dockerignore убирает лишние файлы из build context. На картинке собраны практики для Docker-образов с Java. Есть фиксированные base image теги, минимальный runtime, запуск не от root, обработка сигналов, graceful shutdown, .dockerignore и проверка уязвимостей. Сохрани, чтобы не…
Хорошая статья про обработку ошибок в Kafka! Автор разбирает ситуацию, когда консьюмер не может обработать сообщение и снова упирается в тот же offset. Дальше показывает, как использовать Dead Letter Queue, retryable и non-retryable ошибки. В статье автор показывает: • почему ошибка десериализации может остановить консьюмера • как настроить DeadLetterPublishingRecoverer в Spring Kafka • зачем выносить проблемные…