gram news
Java Ready | Программирование channel avatar

Java Ready | Программирование

@java_ready

Авторский канал по разработке на Java. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_c Реклама на бирже: https://telega.in/c/java_ready

ProjectsRUProgramming

9,010subscribers

Open the Channel

Latest posts

  • Java Ready | Программирование

    22 Sept, 06:30

    Java 25 становится проще!Автор разбирает JEP-512 и изменения, которые позволяют писать небольшие программы с меньшим количеством обязательной обвязки. Вместо класса, static main и ручных импортов можно сосредоточиться на самой задаче, а не на стартовом шаблоне.В статье разбирают: • как устроены упрощённые исходники Java 25 • зачем появились неявные импорты и класс IO • как запускать короткие Java-скрипты из командной строкиПродолжай читать на Habr👉 Java Ready | #статья
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    616443Open in Telegram
  • Java Ready | Программирование

    18 Sept, 17:12

    Знали, почему Pattern.compile лучше не вызывать в горячем цикле?В Java регулярные выражения часто используют для валидации, поиска и очистки строк. Рабочий код выглядит так: for (String email : emails) { if (Pattern.compile(".+@.+\\..+").matcher(email).matches()) { valid.add(email); } }Проблема в том, что Pattern.compile создаёт объект шаблона. Если делать это на каждой итерации, программа снова и снова разбирает одно и то же выражение.Для короткого списка разницы почти не видно. Но в обработке логов, CSV, API-ответов или очередей это превращается в лишнюю нагрузку.Лучше скомпилировать шаблон один раз: private static final Pattern EMAIL = Pattern.compile(".+@.+\\..+");А внутри цикла только создавать matcher: for (String email : emails) { if (EMAIL.matcher(email).matches()) {
    1,0107441Open in Telegram
  • Java Ready | Программирование

    18 Sept, 07:12

    Проверяем пересечение временных интервалов на Java!Нужно понять, конфликтует ли новый слот с уже существующими. Такая задача встречается в календарях, бронированиях, расписаниях задач и системах записи.В этой задаче: • описываем интервал отдельным record • пишем короткое правило пересечения • фильтруем занятые слоты через stream • получаем список конфликтовВместо набора частных случаев появляется одно универсальное условие.👉 Java Ready | #задача
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    944433Open in Telegram
  • Java Ready | Программирование

    17 Sept, 08:12

    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    914954Open in Telegram
  • Java Ready | Программирование

    16 Sept, 12:12

    Почему 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 сравнивает не только число, но и scale.У этих объектов разный scale: System.out.println(a.scale()); // 1 System.out.println(b.scale()); // 2Для денежных расчётов это может быть неожиданно. Например, значение из базы пришло как 1.00, а значение из расчёта получилось как 1.0.Если нужно сравнить именно числовое значение, используй compareTo: if (a.compareTo(b) == 0) {
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    913955Open in Telegram
  • Java Ready | Программирование

    16 Sept, 08:12

    Шпаргалка по контейнеризации Java-приложений!Например, multi-stage build помогает не тащить инструменты сборки в production-образ, а .dockerignore убирает лишние файлы из build context.На картинке собраны практики для Docker-образов с Java. Есть фиксированные base image теги, минимальный runtime, запуск не от root, обработка сигналов, graceful shutdown, .dockerignore и проверка уязвимостей.Сохрани, чтобы не потерять!👉 Java Ready | #совет
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    786522Open in Telegram
  • Java Ready | Программирование

    15 Sept, 15:12

    Собираем поиск по словам на Java!Нужно быстро находить документы, где встречается слово. Сделаем небольшой inverted index, который хранит для каждого слова набор id документов.Начнём с хранилища индекса: Map<String, Set<Integer>> index = new HashMap<>();Документ можно представить обычной строкой: int id = 7; String text = "Java streams and maps";Разобьём текст на слова в нижнем регистре: String[] words = text .toLowerCase() .split("\\W+");Теперь добавим каждое слово в индекс: for (String word : words) { index.computeIfAbsent(word, k -> new HashSet<>()) .add(id);
    8575221Open in Telegram
  • Java Ready | Программирование

    15 Sept, 08:12

    Шпаргалка по контейнеризации Java-приложений!Например, multi-stage build помогает не тащить инструменты сборки в production-образ, а .dockerignore убирает лишние файлы из build context.На картинке собраны практики для Docker-образов с Java. Есть фиксированные base image теги, минимальный runtime, запуск не от root, обработка сигналов, graceful shutdown, .dockerignore и проверка уязвимостей.Сохрани, чтобы не потерять!👉 Java Ready | #ресурс
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    8744431Open in Telegram
  • Java Ready | Программирование

    14 Sept, 08:12

    Хорошая статья про обработку ошибок в Kafka!Автор разбирает ситуацию, когда консьюмер не может обработать сообщение и снова упирается в тот же offset. Дальше показывает, как использовать Dead Letter Queue, retryable и non-retryable ошибки.В статье автор показывает: • почему ошибка десериализации может остановить консьюмера • как настроить DeadLetterPublishingRecoverer в Spring Kafka • зачем выносить проблемные сообщения в отдельный DLT процессорПродолжай читать на Habr👉 Java Ready | #статья
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    1,1505322Open in Telegram
  • Java Ready | Программирование

    12 Sept, 12:10

    Почему Stream.peek не стоит использовать для бизнес-логики?peek выглядит удобным способом вставить действие внутрь stream pipeline. Часто туда кладут логирование, метрики или даже изменение объекта.Например, такой код кажется коротким: users.stream() .peek(User::activate) .toList();Проблема в том, что peek задуман как инструмент для отладки и наблюдения за элементами, а не как основной шаг бизнес-логики.Пока нет terminal operation, ничего не выполняется: users.stream() .peek(User::activate);В этом примере activate вообще не вызовется, потому что pipeline только описан, но не запущен.Ещё хуже, когда поведение зависит от terminal operation. Например, count может быть оптимизирован так, что часть промежуточных действий не выполняется ожидаемым способом.Если нужно изменить объекты явно, лучше использовать обычный цикл:
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    1,1607421Open in Telegram
  • Java Ready | Программирование

    12 Sept, 07:12

    📂 Напоминалка по структуре каталогов Linux!Например, /bin содержит системные бинарные файлы, а /etc — конфигурации, управляющие поведением системы.На картинке — директории Linux, их назначение и место в иерархии.Сохрани, чтобы не забыть!👉 Java Ready | #ресурс
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    1,0309542Open in Telegram
  • Java Ready | Программирование

    11 Sept, 06:12

    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    1,070985Open in Telegram
  • Java Ready | Программирование

    10 Sept, 08:12

    Собираем diff двух списков по id!Нужно сравнить старый и новый список объектов и понять, что добавилось, что изменилось и что исчезло. Сделаем небольшой diff по идентификатору.В этой задаче: • индексируем старые элементы по id • ищем новые и изменённые записи • отдельно находим удалённые id • возвращаем понятный результатТакой подход полезен для синхронизации справочников, импорта данных, обновления кеша и подготовки изменений перед записью в базу.👉 Java Ready | #задача
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    1,1505441Open in Telegram
  • Java Ready | Программирование

    9 Sept, 15:12

    Делаем простой registry обработчиков команд на Java!Когда команд становится больше, длинная цепочка if/else быстро начинает мешать. Вместо этого можно хранить обработчики в Map.Опишем интерфейс команды: @FunctionalInterface interface Command { void run(String[] args); }Создадим registry: Map<String, Command> commands = new HashMap<>();Добавим пару команд: commands.put("hello", args -> System.out.println("Hello, " + args[0]));commands.put("sum", args -> System.out.println(Integer.parseInt(args[0]) + Integer.parseInt(args[1])));
    1,1408621Open in Telegram
  • Java Ready | Программирование

    9 Sept, 07:12

    Java Programming MOOC - большой курс Java от University of Helsinki!На сайте собран большой открытый курс по Java от University of Helsinki. Есть две части, отдельные уроки, упражнения, основы синтаксиса, объекты, коллекции, обработка ошибок, файлы и более продвинутые темы.Материал удобно проходить по главам. В боковой навигации есть части курса, внутри разделов много объяснений и примеров, поэтому ресурс хорошо подходит как маршрут от базы к уверенной практике.Оставляю ссылочку на Java Programming MOOC👉 Java Ready | #ресурс
    1,140video11541Open in Telegram
  • Java Ready | Программирование

    8 Sept, 15:12

    Разбиваем список на батчи в Java!Когда нужно отправить много записей в API или базу, их часто удобнее обрабатывать пачками. Так проще контролировать нагрузку и размер одного запроса.Пусть есть список событий: List events = List.of("a", "b", "c", "d", "e");Размер пачки лучше держать отдельной переменной: int batchSize = 2;Идём по списку шагом batchSize: for (int start = 0; start < events.size(); start += batchSize) { int end = Math.min(start + batchSize, events.size()); }Теперь получаем часть списка: List batch = events.subList(start, end);Эту пачку можно отправить дальше: sendBatch(batch);
    1,200732Open in Telegram
  • Java Ready | Программирование

    8 Sept, 08:12

    Шпаргалка по generics в Java!Например, ? extends T удобно использовать для чтения данных из producer-коллекции, а ? super T подходит для коллекции, в которую нужно безопасно добавлять значения.На картинке собраны generics, wildcards, PECS, method overloading, recursive generics, covariance и важный нюанс type erasure. Особенно полезно держать под рукой правило Producer Extends Consumer Super.Сохрани, чтобы не потерять!👉 Java Ready | #ресурс
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    1,2108332Open in Telegram
  • Java Ready | Программирование

    7 Sept, 09:12

    Интересный разбор WebFlux и Virtual Threads под нагрузкой!Автор сравнивает реактивный WebFlux и Spring MVC с виртуальными потоками на микросервисной системе под нагрузкой 2000 RPS.В статье автор показывает: • чем event loop отличается от thread-per-request модели • как WebFlux и Virtual Threads ведут себя при I/O • какие параметры JVM и Spring влияют на результатПродолжай читать на Habr👉 Java Ready | #статья
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    1,270622Open in Telegram
  • Java Ready | Программирование

    4 Sept, 08:12

    Собираем маскировщик секретов для логов!В логах не должны оставаться токены, пароли и API-ключи. Сделаем небольшой sanitizer, который находит опасные поля и заменяет значение на маску.В этой задаче: • описываем шаблон секретного поля • используем Matcher для замены • сохраняем имя ключа • прячем только значение после знака равенства👉 Java Ready | #задача
    Image from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | ПрограммированиеImage from a post by Java Ready | Программирование
    1,63084321Open in Telegram
  • Java Ready | Программирование

    3 Sept, 07:12

    W3Resource Java Exercises - большая база задач по Java!На сайте собраны тысячи упражнений по Java с решениями и пояснениями. Есть базовый синтаксис, методы, массивы, строки, коллекции, исключения, потоки, ООП, регулярные выражения и алгоритмы.Разделы удобно проходить как практику. Можно открыть конкретную тему, решить задачу самостоятельно, сравнить с готовым решением и перейти к похожим упражнениям.Оставляю ссылочку на W3Resource👉 Java Ready | #ресурс
    1,330video1485Open in Telegram