tgindex
Библиотека джависта | Java, Spring, Maven, Hibernate

Библиотека джависта | Java, Spring, Maven, Hibernate

Статистика

Все самое полезное для Java-разработчика в одном канале. Учиться у нас: clc.to/AATM8w Для обратной связи: @proglibrary_feeedback_bot По рекламе: @proglib_adv РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4

Последний пост
14 авг.
Последнее чтение
17:47
Постов за неделю
5
Всего постов
384
Тип
открытый
Язык
русский
Категория
Технологии
В каталоге с
12 авг.
Подписчики
22 147
−18 за 4 дн.
Сутки
−9
−0,04%
Неделя
 
Месяц
 
Просмотров на пост
1 671
40 постов
Вовлечённость
7,5%
к подписчикам
Постов в день
0,7
всего 384
Упоминаний
4
каналов
Охват размещения
оценка
1/24сутки в ленте
1 194
1/48двое суток
1 368
1/72трое суток
1 475

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • 14 авг.1 072105

    🔖 Тернарный оператор в Java: когда одна строка лучше if-else Если условие простое и у него всего два результата, необязательно разворачивать полноценный if-else. Можно использовать тернарный оператор: String access = age >= 18 ? "Проходите!" : "Доступ запрещён»; Схема простая: условие ? значение_если_true : значение_если_false ➡️ Тернарный оператор удобен для коротких присваиваний, return и простых проверок. Но как только появляются несколько условий или вложенные тернарники, компактность начинает работать против читаемости — здесь обычный if-else будет понятнее. 🔗 Источник ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #Enterprise

  • 13 авг.1 316543

    ☕️ 20 идей для пет-проектов на Java Если хочется прокачать Java не на очередных задачках, а на чем-то, что похоже на реальную разработку — держите подборку идей. ⬇️На карточке — проекты ⬇️разного уровня: от трекера ⬇️расходов и URL Shortener до ⬇️микросервисного ⬇️приложения, real-time ⬇️уведомлений и AI-систем. Для каждого указан примерный стек ✅ ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #Enterprise

  • 12 авг.1 34789

    💡 Java-совет: выбирай инструмент для работы со временем правильно В Java не стоит использовать System.currentTimeMillis() для всех задач подряд. Для разных сценариев есть свои инструменты. 🟢 Instant — конкретный момент времени в UTC. Instant now = Instant.now(); Подходит для timestamp’ов, логов и фиксации времени событий. 🟢 Duration — продолжительность между временными точками. Duration timeout = Duration.ofSeconds(30); Удобно для таймаутов, задержек и других временных интервалов. 🟢 System.nanoTime() — когда нужно измерить, сколько выполнялся код. long start = System.nanoTime(); // твоя логика long elapsed = System.nanoTime() - start; 📌 Почему именно так: — Instant работает с абсолютным временем — Duration явно описывает временной интервал — nanoTime() подходит для измерения прошедшего времени и не зависит от перевода системных часов ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #Enterprise

  • 11 авг.1 493213

    ⌛ Сохраняйте шпаргалку с иерархией исключений ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #Enterprise

  • 10 авг.1 715519

    🛡 Circuit Breaker & Resilience4j В микросервисах падение одного сервиса может уронить всю систему — эффект «домино». Circuit Breaker помогает изолировать сбои и держать SLA под контролем. Промпт: Generate a Spring Boot 3 configuration with Resilience4j Circuit Breaker. — Configure Circuit Breaker around external HTTP calls (e.g. RestTemplate/WebClient). — Add Retry policy with exponential backoff. — Add Rate Limiter and Bulkhead isolation (thread pool separation). — Provide fallback methods (graceful degradation). — Enable metrics collection with Micrometer and Prometheus. — Expose actuator endpoints for circuit state monitoring. — Add chaos testing scenario: simulate latency and failures. 💡 Расширения: — Настройте TimeLimiter для защиты от зависаний. — Интегрируйте с Spring Cloud Gateway для глобальных политик. — Добавьте Grafana dashboards для визуализации отказоустойчивости. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #Enterprise

  • 9 авг.1 790149

    ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #DevLife

  • 8 авг.1 76038

    🆕 Java Digest: паттерны, микросервисы и Jackson 3 Топ-3 статьи о Java и смежных технологиях за неделю по версии нашего канала. 1️⃣ Порождающие шаблоны на Java Разбор Factory, Builder, Singleton и др. с практическими примерами. Главная мысль — паттерны нужны там, где реально упрощают код, а не ради “красоты”. 2️⃣ Как hh.ru выносили микросервис из монолита Из монолита выделяли чат-сервис. Год миграции, дублирование логики, проблемы с транзакциями — но результатом стал независимый модуль и гибкость для дальнейшей разработки. 3️⃣ Jackson 3 приходит в Spring Поддержка Java 17+, новый JsonMapper, null-safety, совместимость со Spring Boot 4. Jackson 2 уходит в прошлое — пора проверять зависимости. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #News

  • 8 авг.1 61177

    🎯 IntelliJ IDEA: Bookmarks и Context Bookmarks Большие проекты → десятки файлов → сотни классов. Иногда нужно быстро вернуться к «тем самым» местам в коде. В ход идут Bookmarks — и особенно Context Bookmarks. 🔹 Что делает — Позволяет отмечать строки или файлы как закладки — Поддерживает нумерацию (быстрый переход по цифре) — Context Bookmarks автоматически привязывают закладки к рабочему контексту (ветке, задаче) 🔹 Зачем это нужно — Удобно при отладке: отмечаете подозрительные места и прыгаете между ними — Можно держать список TODO прямо в коде, без комментариев — Context Bookmarks запоминают, что именно важно для текущей задачи, и не мешают в будущем 🔹 Как использовать — Обычная закладка: F11 (Windows/Linux) или F3 (macOS) — Закладка с номером: Ctrl+Shift+<цифра> (Windows/Linux) или ⌘⇧<цифра> (macOS) — Быстрый переход: Ctrl+<цифра> — Context Bookmarks: активируются в View → Tool Windows → Bookmarks ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #Enterprise

  • 7 авг.1 3112из proglib_academy

    🤔 У большинства разработчиков уже есть подписки на IDE, GitHub Copilot, Claude, ChatGPT или облачные сервисы. Логично, что обучение тоже постепенно приходит к той же модели: не покупать отдельный курс под каждую новую тему, а иметь доступ ко всей библиотеке и выбирать, что актуально именно сейчас. Такой формат недавно появился и в Proglib Academy. Вместо одного курса — доступ сразу ко всей библиотеке и новым материалам, которые появляются в подписке 😎 🔗 Подробнее 🏃‍♀️ Proglib Academy

  • 7 авг.1 525

    Кажется, у онлайн-обучения появился формат, которого давно не хватало 👇

  • 6 авг.1 5261113

    ⚡️ Просто о сложном: как JIT делает код быстрее Вы когда-нибудь задумывались, как JIT умеет так ловко оптимизировать код в реальном времени? Сегодня разберём, какие именно суперспособности JIT даёт вашему коду. 🔴 Инлайнинг методов Когда JIT обнаруживает, что какой-то метод выполняется слишком часто, он может инлайнить его. Это значит, что весь код метода не будет вызываться отдельно, а его инструкции будут вставляться прямо в место вызова. Пример: int sum(int a, int b) { return a + b; } int result = sum(5, 10); Стало: int result = 5 + 10; // JIT инлайнит код метода sum 🔴 Удаление мертвого кода JIT всегда анализирует, выполняется ли тот или иной участок кода. Если метод или условие никогда не будет вызвано (например, условие, которое всегда ложно), JIT его удаляет. 🔴 Оптимизация циклов Циклы — частая конструкция, и JIT всегда старается оптимизировать их выполнение. Например, если цикл выполняется много раз, JIT может переработать его для уменьшения количества операций. 🔴 Параллельная компиляция Если ранее компиляция шла поэтапно, сейчас JIT может компилировать несколько частей программы одновременно. Это не только ускоряет работу компилятора, но и уменьшает задержки при запуске программы. 🔴 Использование final переменных JIT предполагает, что final переменные не изменяются после инициализации. Это даёт компилятору возможность предсказать их значения и оптимизировать операции с ними. 🔴 Удаление лишних проверок JIT понимает, какие проверки в коде избыточны. Например, если переменная была уже проверена на null, и это значение не изменяется, JIT может просто игнорировать повторные проверки. 🔴 Классификация горячих и холодных методов JIT следит за тем, какие методы выполняются часто (горячие) и какие — нет (холодные). Он решает компилировать только те методы, которые чаще всего используются. Если горячий метод вдруг перестаёт быть горячим, JIT может освободить его от компиляции, освобождая ресурсы. 🔴 Слияние и удаление дубликатов Если программа выполняет одинаковые операции несколько раз, JIT сливает их в одну или избавляется от дублирующихся вычислений. Пример: int a = 5; int b = 5; int c = a + b; int d = a + b; // Дублирование JIT может понять, что a + b одинаково для обеих операций, и просто использовать результат из первого вычисления во втором. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #CoreJava

  • 5 авг.1 698125

    👑 Магия IntelliJ IDEA: Быстрый запуск и остановка проекта Всё ещё запускаете проект мышкой? Тогда этот пост для вас. На самом деле IDEA умеет стартовать, дебажить и останавливать приложение полностью без кликов мышью. После пары дней привычки вы забудете, где находится зелёная кнопка ▶️ 🔵 Что делает — Позволяет запускать и останавливать проект, не касаясь мыши — Работает с любыми конфигурациями: Application, Maven, Gradle, Spring Boot и др. — Поддерживает горячий перезапуск (rerun) и мгновенный переход к дебагу 🔵 Зачем это нужно — Ускоряет цикл «правка → запуск → проверка» — Позволяет фокусироваться на коде, не отвлекаясь на интерфейс — Особенно удобно при работе на ноутбуке или в tmux-подобном флоу 🔵 Как использовать ▶️ Shift + F10 — запустить последнюю конфигурацию 🐞 Shift + F9 — запустить в режиме отладки ⏹️ Ctrl + F2 — остановить выполнение ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #Enterprise

  • 4 авг.1 890131

    Займи слот ИТ-Пикником от Т-Банка 8 августа — время отложить ноутбуки и встретиться офлайн на ИТ-Пикнике от Т-Банка в музее-заповеднике «Коломенское». Вот сколько всего запланировано: — научпоп-лекции; — мастер-классы; — дискуссии об ИИ и больших языковых моделях; — доклады о кибербезопасности; — примеры, как данные из логов становятся решениями; — много музыки — Сream Soda, IOWA, LAB Антона Беляева и другие артисты. Бери с собой друзей, супругов и детей — каждый найдет себе что-то по душе. Зарегистрироваться и узнать больше можно здесь

  • 4 авг.1 77643

    VK и JUG Ru Group опубликовали исследование State of Java Insights 2026. В нём приняли участие более 700 Java-разработчиков. Главный вывод: стек меняется постепенно. Java 21 уже используют около двух третей специалистов, основой проектов остаются привычные Spring Boot, PostgreSQL и Kafka. PostgreSQL используют 86% опрошенных. При этом ИИ уже стал частью ежедневной работы: 95% разработчиков используют AI-инструменты, больше половины — каждый день.

  • 4 авг.1 9501819

    🐸 Библиотека джависта #DevLife

  • 3 авг.2 0471411

    🧬 Value Objects — зачем нужен Project Valhalla JEP 401 (Value Objects) предложили включить в preview для JDK 28. Это один из ключевых результатов многолетнего проекта Valhalla. ❇️ В чём идея: Сегодня почти любой пользовательский тип в Java — это объект с идентичностью: отдельная аллокация, заголовок объекта и работа через ссылку. Value Objects отказываются от идентичности и описываются только своим состоянием. Благодаря этому JVM получает больше свободы для оптимизаций: может хранить такие объекты компактнее, уменьшать количество аллокаций и снижать нагрузку на GC. ❇️ Что это даёт: — Более эффективное хранение данных. — Меньше накладных расходов на память и сборку мусора. — Производительность, которая во многих случаях может приблизиться к примитивам. Цена — отсутствие объектной идентичности: нельзя использовать synchronized, полагаться на System.identityHashCode() и другие identity-зависимые механизмы. 💡 Если коротко: record сделал работу с данными удобнее, а Value Objects делают её ещё и эффективнее на уровне JVM. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #CoreJava

  • 2 авг.1 8391334

    🔍 Просто о сложном: что такое Garbage Collector (GC)? Garbage Collector (GC) в Java — это механизм автоматического управления памятью, который отвечает за очистку памяти от объектов, которые больше не используются в программе. Вместо того, чтобы разработчик вручную освобождал память, как в некоторых других языках программирования, Java использует сборщик мусора, который делает это автоматически. 🔵 Как работает GC? Когда вы создаёте объект в Java, он занимает место в куче (heap) — области памяти, предназначенной для динамического распределения. Однако по мере работы программы некоторые объекты становятся ненужными, и их можно удалить, чтобы освободить память для других задач. Это и есть основная задача GC — найти объекты, которые больше не используются, и освободить память. 🔵 Основные этапы работы GC 1. Маркировка. На первом этапе система анализирует объекты в куче и помечает те, на которые существуют ссылки, то есть которые всё ещё могут быть использованы в программе. Эти объекты называют живыми. 2. Сборка мусора. После маркировки GC удаляет объекты, которые не были помечены как «живые». Эти объекты больше не используются в программе и могут быть безопасно удалены, а занимаемое ими пространство освобождается. 3. Компактизация (Compaction). Иногда после удаления объектов в куче остаются фрагменты пустой памяти. В этом случае GC может перемещать объекты, чтобы устранить фрагментацию и сделать память более сплошной. Это улучшает использование доступных ресурсов. 🔵 Типы Garbage Collector в Java Java предлагает несколько типов сборщиков мусора, каждый из которых имеет свои особенности и подходит для разных сценариев: — Serial GC: простой сборщик, использующий один поток для работы с памятью. Это может быть полезно в простых приложениях, но вызывает большие паузы в работе программы, что не подходит для сложных многозадачных приложений. — Parallel GC: этот сборщик использует несколько потоков для работы, что ускоряет процесс очистки. Он подходит для многозадачных приложений и приложений с большими объемами данных, где важно минимизировать время пауз. — CMS (Concurrent Mark-Sweep): сборщик мусора, который работает параллельно с основной программой, минимизируя паузы. Он использует несколько шагов для маркировки и уборки мусора, чтобы не блокировать выполнение приложения на долгое время. — G1 (Garbage First): один из самых современных сборщиков мусора. Он фокусируется на минимизации времени пауз и дает разработчикам больше контроля над процессом. G1 отлично подходит для больших приложений с высоким уровнем взаимодействия. 🔵 Паузы и их влияние на производительность Одним из главных аспектов работы GC является Stop-the-World пауза, когда приложение временно приостанавливается, чтобы сборщик мусора очистил память. Хотя паузы в большинстве случаев довольно короткие, они могут заметно повлиять на производительность, особенно в приложениях с высокими требованиями к времени отклика. 🔵 Как улучшить производительность при работе с GC — Оптимизация размера кучи. Размер кучи можно настроить в зависимости от объема данных, с которым работает ваше приложение. Неправильно выбранный размер может привести к слишком частым или слишком редким сборкам мусора. — Использование правильного сборщика. Выбор сборщика мусора зависит от особенностей вашего приложения. Например, для приложений с требованием низкой задержки лучше использовать G1 или CMS. — Профилирование. Используйте инструменты профилирования, чтобы отслеживать, как работает GC в вашем приложении. Это поможет выявить проблемы и оптимизировать использование памяти. 🔵 Когда стоит задуматься о Garbage Collector — Когда ваше приложение работает с большим количеством объектов, и необходимо следить за производительностью. — Если заметны задержки или паузы, вызванные работой GC, и нужно оптимизировать работу с памятью. — В сложных многозадачных или распределённых приложениях, где важно, чтобы GC не блокировал выполнение других задач. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #CoreJava

  • 1 авг.1 843126

    🔴 Java-дайджест: что происходит в экосистеме прямо сейчас: ➡️ JDK 27 выходит в сентябре. Релиз запланирован на 15 сентября, продолжаются early-access сборки. Среди заметных нововведений — JEP 523 (G1 станет GC по умолчанию во всех средах) и JEP 527 (гибридный постквантовый обмен ключами для TLS 1.3). ➡️ Project Valhalla становится ближе. JEP 401 (Value Objects) получил статус Proposed to Target для JDK 28. Это первый шаг к появлению value objects в виде preview-функции. Разбор — в сегодняшнем #CoreJava. ➡️ JSON в стандартной библиотеке. JEP 540 (Simple JSON API) предлагает простой API для чтения и записи JSON без сторонних библиотек. Пока это инкубатор, но направление выглядит многообещающим. ➡️ Security. Июльский Critical Patch Update уже вышел. Если инфраструктура ещё не обновлена, стоит проверить, что используется актуальная сборка JDK с последними исправлениями безопасности. ➡️ Spring Boot 3.5 завершает OSS-жизненный цикл. Последний открытый релиз ветки 3.5.x уже опубликован. Для получения дальнейших OSS-обновлений рекомендуется переходить на Spring Boot 4.x либо использовать коммерческую поддержку. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #News

  • 31 июл.1 9313210

    🐸 Библиотека джависта #DevLife

  • 30 июл.1 9741735

    ☕️ Настройка Testcontainers + PostgreSQL Надоели моки репозиториев, которые не ловят реальные SQL-баги? Настраиваем Testcontainers, запускаем настоящий PostgreSQL прямо в тестах, без внешних зависимостей. ⚙️ Шаг 1 — Зависимости (Maven) <dependency> <groupId>org.testcontainers</groupId> <artifactId>junit-jupiter</artifactId> <version>1.19.7</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>postgresql</artifactId> <version>1.19.7</version> <scope>test</scope> </dependency> > Для Gradle: testImplementation "org.testcontainers:postgresql:1.19.7" 🐳 Шаг 2 — Базовый тест @SpringBootTest @Testcontainers class UserRepositoryTest { @Container static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine"); @DynamicPropertySource static void configureProperties(DynamicPropertyRegistry registry) { registry.add("spring.datasource.url", postgres::getJdbcUrl); registry.add("spring.datasource.username", postgres::getUsername); registry.add("spring.datasource.password", postgres::getPassword); } @Autowired UserRepository userRepository; @Test void shouldSaveAndFindUser() { var user = new User("alice@example.com"); userRepository.save(user); var found = userRepository.findByEmail("alice@example.com"); assertThat(found).isPresent(); } } Всё. Spring подхватит datasource-проперти через @DynamicPropertySource — Liquibase/Flyway накатятся сами. ⚡️ Шаг 3 — Ускоряем: переиспользуем контейнер По умолчанию контейнер поднимается на каждый тест-класс. Чтобы один инстанс жил на весь прогон — выносим в абстрактный класс: @SpringBootTest @Testcontainers public abstract class BaseIntegrationTest { @Container static final PostgreSQLContainer<?> POSTGRES = new PostgreSQLContainer<>("postgres:16-alpine") .withReuse(true); // ← ключевая строка @DynamicPropertySource static void props(DynamicPropertyRegistry r) { r.add("spring.datasource.url", POSTGRES::getJdbcUrl); r.add("spring.datasource.username", POSTGRES::getUsername); r.add("spring.datasource.password", POSTGRES::getPassword); } } Наследуй в каждом интеграционном тесте — контейнер поднимется один раз. 🔍 Шаг 4 — Отладка: смотрим логи контейнера POSTGRES.followOutput(new Slf4jLogConsumer( LoggerFactory.getLogger("postgres-container") )); Добавь до старта контейнера и все PostgreSQL логи пойдут в твой аппендер. 🔖 Сохраняй пост для следующего проекта. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта #Enterprise