Max

Java библиотека

Взрослая ЦА
Прямой пост
max.ru/javalib
Описание канала в MAX

Книги, статьи, мемы и многое другое для Java программиста! По сотрудничеству и рекламе: ссылка скрыта или в ЛС сообщества ВК ссылка скрыта Канал в перечне РКН: ссылка скрыта Мы на бирже: ссылка скрыта Сообщество VK ссылка скрыта

Аудитория
Смешанная аудитория
Подписчики
1 300
+7день
+14неделя
+61месяц
Охват поста
296
296за 24 часа
298в среднем
Вовлечённость
22,8%
22,8%за 24 часа
22,9%в среднем
Упоминания в других каналах

Канал упомянули 31 раз в 2 каналах

Чем больше упоминаний и каналов — тем заметнее канал в своей нише.

Информация о подписчиках
Вк, телеграм, макс

Похожие каналы

26 274
Смешанная аудитория
ERR 15%

🔓 Популярные игры, приложения для android устройств, новости технологий и многое другое. 🤝 Сотрудничество: smm@mannager.ru ⚠️ Наш чат: 🔓 Популярные игры, приложения для android устройств, новости технологий и многое другое. 🔓 Популярные игры, приложения для android устройств, новости технологий Игры, приложения, модификации, моды, новости, android, сма

2 200
4 453
Мужская аудитория
ERR 26%

Здесь рассказывают о технологиях просто и с огоньком 🔥 Канал про гаджеты, ИИ, электронику и интересные технологии — просто, честно и интересно. По вопросам сотрудничества: 6max.ru/vladimir1 Статистика канала: https://maxframe.ru/channel-profile/72081107124477/

1 990
1 827
Смешанная аудитория
ERR 22%

Вся самая новая и полезная литература для Java разработчиков! По вопросам авторских прав, сотрудничества и рекламы: https://t.me/NadikaKir или в ЛС сообщества ВК https://vk.com/javatutorial Мы на бирже: https://telega.in/channels/bookofgeek/card_max/?r=lcDuijdm Канал в перечне РКН: https://vk.cc/cJrTqo

1 000
Telegram
4 384
Смешанная аудитория
ERR 18%

Все новости связанные с Java! По всем вопросам: @NadikaKir Мы на бирже: https://telega.in/c/java_newss

500
31 007
Смешанная аудитория
ERR 9%

Книги, статьи, мемы и многое другое для Java программиста! По сотрудничеству и рекламе: @NadikaKir Канал в перечне РКН: https://vk.cc/cJrT4A Мы на бирже: https://telega.in/c/javalib/ Сообщество VK https://vk.com/javatutorial

4 500
739
Смешанная аудитория
ERR 20%

Канал с вопросами и задачами с собеседований! По сотрудничеству и рекламе: https://t.me/NadikaKir или в ЛС сообщества ВК https://vk.com/javatutorial Канал в перечне РКН: https://vk.cc/cJrSQZ Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm

500
Формат размещения
700

топ 1 час · сутки в ленте · цена напрямую от автора

💎Эффективность за эти деньги
2,4
CPV · за показ
2 365
CPM · за 1000
Пересчитывается от формата и охвата 296/24ч
Гарантия выхода поста и возврат средств
Надёжность сделки
Среднее время ответа админа
Среднее время ответа админа
Обычно отвечает быстро
Размещений через Помогач
Размещений через Помогач
Первое размещение — за вами
Посты в канале
Java библиотека
MAX · канал
IntelliJ IDEA: продвинутый дебаг Представь, что есть цикл на 10 000 элементов, и баг воспроизводится только на одном конкретном объекте. Без Conditional Breakpoints придется жать F8 вручную сотни раз. А с ними дебаггер сам остановится в нужный момент. 🟢 Как включить Кликни правой кнопкой на кружок брейкпоинта → появится поле Condition. Введите любое булево Java-выражение. Всё, дебаггер будет останавливаться только когда оно true. 🟢 Примеры из реальной жизни ▪️ Фильтрация по ID user.getId() == 42 Останавливаемся только на конкретном пользователе — удобно при обработке списка сущностей из БД. ▪️ Фильтрация по содержимому строки request.getUrl().contains("/admin") Отлавливаем только определённые HTTP-запросы в фильтре или интерцепторе. ▪️ Ловим NPE до того, как он случился order.getItems() == null Останавливаемся именно тогда, когда данные уже сломаны, а не после падения. ▪️ Условие по индексу в цикле i == 999 Прыгаем сразу к последней итерации, не прокручивая весь цикл. 🟢 Продвинутые трюки — Log message вместо остановки. Если не хотите прерывать выполнение, а просто логировать — в том же окне брейкпоинта включите "Evaluate and log" и введите выражение. — Pass count. Чуть ниже в настройках брейкпоинта есть поле "Pass count" — брейкпоинт сработает только на N-м попадании. — Disable until hit. Можно настроить цепочку: один брейкпоинт активирует другой. В настройках есть "Disable until breakpoint is hit" — указываете другой брейкпоинт, и текущий начнёт работать только после срабатывания того. ⚠️ Condition вычисляется на каждом попадании в брейкпоинт — это вызов на стороне JVM. В горячих местах (tight loop, высоконагруженный метод) это может заметно тормозить приложение.
187 просм.1 июля, 19:49
Java Generics — всё, что нужно знать 1. Box → Обобщённый класс • Используй, когда класс работает с любым типом (например, обёртка вокруг любого объекта, как Box, Box). 2. void print(T val) → Обобщённый метод • Используй, когда метод должен принимать любой тип (например, для печати любого объекта, логирования, сравнения и т.п.). 3. → Ограниченный тип • Называется верхней границей. • Используй, когда тип должен быть подклассом чего-то (например, утилита для работы с int, double, float). 4. → Несколько ограничений • Заставляет T реализовывать и A, и B. • Используй, когда нужны обе особенности (например, сортировка объекта, который также требует валидации). 5. → Неограниченный подстановочный тип • Это означает неизвестный тип. • Используй, когда не важен тип, нужно только читать (например, печать элементов из любого списка). 6. → Верхняя граница подстановочного типа • Означает некоторый подкласс T. • Используй при чтении из коллекции (например, чтение чисел из List без модификации). 7. → Нижняя граница подстановочного типа • Означает некоторый суперкласс T. • Используй при записи в коллекцию (например, добавление Integer в List). 8. Правило PECS • Producer Extends, Consumer Super. • Используй extends для чтения, super для записи (например, API-вход против обработки ответа). 9. List list = new ArrayList(); → Сырой тип • Это сырой тип. • Избегай — тк теряется типовая безопасность (например, компилятор не поймает, если добавишь неверные типы). 10. Стирание типов • Java удаляет всю информацию об обобщениях во время выполнения. • Поэтому нельзя использовать T.class, new T(), или instanceof T (например, нельзя делать проверки или создавать объекты на основе T). 11. Обобщённый конструктор MyClass(T val) { } • Используй, когда конструктору нужен обобщённый параметр, даже если сам класс не обобщённый (например, инициализация с динамическими типами). 12. Обобщённый интерфейс interface Mapper { T map(F input); } • Используй при преобразовании одного типа в другой (например, DTO → сущность). 13. Нельзя использовать примитивы • Нельзя List — только List. • Используй обёртки (коллекции могут хранить только объекты, не примитивы). 14. Нельзя создавать массивы с обобщением • new T[] не работает. • Используй List вместо (например, динамические коллекции). 15. Нельзя использовать подстановочные типы для вставки • Нельзя вставлять в List. • Используй , если нужна вставка (например, для пакетной обработки или модификации коллекции).
310 просм.30 июня, 20:32
Магия IntelliJ IDEA IntelliJ IDEA может помочь с созданием тестов. С помощью Ctrl + Shift + T можно сгенерировать структуру тестов для классов и методов. 🟢 Зачем это нужно — Вместо того, чтобы вручную писать шаблон тестов, IDEA сгенерирует базовую структуру тестов для классов или методов. — Особенно полезно, когда проект растет, а тестов слишком много, чтобы каждый раз выдумывать тестовую структуру с нуля. 🟢 Как использовать — Поместите курсор на класс или метод, для которого нужен тест. — Нажмите Ctrl + Shift + T (на Windows/Linux) или Cmd + Shift + T (на macOS). — Выберите, какой тестовый фреймворк использовать (JUnit, TestNG и т.д.), и IDEA предложит создать тестовый класс с нужной структурой. IDE автоматически создаст тестовый класс с методами для проверки каждого (или выбранного) публичного метода.
325 просм.30 июня, 10:07
41 просм.29 июня, 15:01
👩‍💻 Как работает @Transactional в Spring: границы транзакций и типовые ошибки Приглашаем на открытый урок. 🗓 29 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework». На занятии мы разберем: ✔️Что реально делает @Transactional в Spring ✔️Почему важны proxy и вызов метода через Spring Bean ✔️Как работают propagation-режимы на примере REQUIRED и REQUIRES_NEW ✔️Когда происходит rollback и почему checked exceptions не всегда откатывают транзакцию ✔️Типовые ошибки при работе с транзакциями в сервисном слое Урок будет полезен Java/Kotlin-разработчикам, которые уже пишут приложения на Spring или начинают использовать Spring в реальных backend-проектах и хотят лучше понимать поведение транзакций. 🔗 Ссылка на регистрацию: https://vk.cc/cZa52o Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
322 просм.29 июня, 10:02
199 просм.28 июня, 17:50
58 просм.28 июня, 13:02
656 просм.28 июня, 09:15
Security со Spring Boot 3.1 | Авторизация и Аутентификация В этом видео мы разберемся, как выполнить аутентификацию и авторизацию с помощью spring boot 3.1 и spring security 6 СМОТРЕТЬ VKVIDEO СМОТРЕТЬ RUTUBE СМОТРЕТЬ YOUTUBE
378 просм.27 июня, 19:18
30 июня в 18:00 начнется бесплатный вебинар «Почему Java-разработчику следует брать на вооружение Quarkus». В прямом эфире рассмотрим ключевые преимущества Quarkus перед Spring Boot: родную сборку (миллисекундный запуск), малое потребление памяти и удобство разработки. Содержание: ✅Проблема долгого запуска и высокого потребления памяти в Spring Boot. ✅Что такое Quarkus? Окружающая среда расширений, родная сборка (GraalVM). ✅Живой код: создание REST-сервиса на Spring Boot и на Quarkus (сравнение). ✅Измерение времени запуска и потребления памяти. ✅Как родная сборка ускоряет размещение в Kubernetes и снижает затраты. ✅Настоящий случай из практики автора (обработка 1 000 tps). ✅Как продолжить изучение: курс QRK-001 «Quarkus: разработка микросервисов на Java или Kotlin». 👨‍🎓Спикер: Чвилёв Константин, эксперт в области разработки ПО 🗓️Когда: 30 июня, 18:00–19:00 (Мск) 👉Регистрация👈 #реклама О рекламодателе
182 просм.27 июня, 15:01
Java. Анонимное наследование и блок инициализации. Разбираем создание и настройку объекта при помощи анонимного наследования и реализации блока инициализации. СМОТРЕТЬ VKVIDEO СМОТРЕТЬ RUTUBE СМОТРЕТЬ YOUTUBE
393 просм.27 июня, 11:20
Collections.singletonList вместо new ArrayList<>() Когда список точно из одного элемента — не создавай изменяемый: // ❌ Избыточно List roles = new ArrayList<>(); roles.add("ADMIN"); someMethod(roles); // ✅ Лаконично и без лишней аллокации someMethod(Collections.singletonList("ADMIN")); singletonList возвращает неизменяемую обёртку вокруг одного объекта без внутреннего массива. Это дешевле по памяти и явно выражает намерение. ⚠️ Список иммутабельный, add() бросит UnsupportedOperationException. ✔️ Альтернатива в Java 9+: List.of("ADMIN") — то же самое, но более современный API.
432 просм.26 июня, 11:05
🧠 Хотите разрабатывать ИИ-системы — и понимать, как они устроены изнутри? Программа «Математические основы искусственного интеллекта» в Университете Иннополис даёт именно тот фундамент, который отличает сильного AI-специалиста от среднего. 📌 Три трека на выбор: — Академический — наука и исследования в области AI 🔬 — Индустриальный — продукты и бизнес-применения ИИ — Робототехнический — умные машины и автономные системы 🤖 Как строится обучение: • 1–3 курс — математическая и инженерная подготовка, работа с реальными данными • 4 курс — годовая практика в компании-партнёре Преподаватели — специалисты из МФТИ, ВШЭ, ИТМО, Яндекса, Сбера и Т-Банка. 🔖 Грантовый конкурс даёт скидку вплоть до полного покрытия стоимости обучения. Раннее зачисление — до ЕГЭ. 👉 https://tglink.io/bdcef9146b6b12?erid=2W5zFJXS8Gy 👈 #реклама О рекламодателе
228 просм.26 июня, 10:07
Ускоряем Spring Boot без изменения кода Многие приложения тормозят не из-за бизнес-логики, а из-за логирования. Каждый лог - это I/O операция. При высокой нагрузке это становится узким местом. Решение - асинхронное логирование через Logback. Что происходит: - сообщения складываются в очередь - отдельный поток обрабатывает их в фоне - основной поток не блокируется - меньше задержек и выше throughput Настройка проста - добавьте logback-spring.xml в: src/main/resources/ Пример конфигурации: 5000 0 false %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger - %msg%n Когда это особенно полезно: • high-load сервисы • микросервисы с большим количеством логов • API с высокой RPS • продакшен-окружение ⚠️ Важно: при аварийном завершении часть логов из очереди может потеряться. Для критичных логов используйте файл + async. Маленькая настройка - большой прирост производительности.
442 просм.25 июня, 18:27
Как использовать ИИ в разработке не ради экспериментов, а для решения реальных задач? 29 июня в 20:00 на открытом вебинаре рассмотрим современные ИИ-инструменты для разработчиков и практические сценарии их применения. В программе: • разбор решений для ускорения написания и отладки кода; • демонстрация инструментов генерации кода, тестов и документации; • кейсы использования LLM в повседневной разработке; • примеры внедрения ИИ в рабочие процессы и CI/CD-пайплайны. Вебинар поможет разобраться в возможностях современных ИИ-инструментов, понять, как использовать нейросети для рефакторинга и анализа кода, а также подобрать подходящие решения под свой стек технологий. Регистрация бесплатный на урок: https://vk.cc/cZ3MhY Урок пройдёт в рамках старта курса «ИИ для разработчиков». Старт курса 29.06.2026. Плюс скидка 15% за прохождение вступительного тестирования (на страничке курса). Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
409 просм.25 июня, 13:01
Класс "обертка" (wrapper class) Класс-обертка (wrapper class) — это класс, который обеспечивает возможность использования примитивных типов данных как объектов. Каждый примитивный тип данных в Java имеет соответствующий класс-обертку: byte — Byte, short — Short, int — Integer, long — Long, float — Float, double — Double, boolean — Boolean и char — Character. Классы-обертки используются, например, при работе с объектами коллекций, такими как ArrayList, где примитивные типы не могут быть использованы (список может хранить только объекты). В этом примере мы создаем объекты классов-оберток для примитивных типов int, double, char и выводим значения этих объектов с помощью метода println().
449 просм.24 июня, 18:44
erid: 2W5zFGYosa1 Почему одни ИТ-специалисты быстро растут в карьере, а другие годами остаются на одном уровне?🤔 Важный фактор — насмотренность. Следите за новостями отрасли и знакомьтесь с новейшими российскими ИТ-решениями в канале VK Tech. Здесь ведущий вендор российского ПО делится инсайтами с конференций, трендами развития ИИ, кейсами внедрения своих решений и анонсами мероприятий — все здесь, в одном канале. О чем еще говорят в канале: 🔹 Как и почему сейчас рынок отказывается от джунов и ищет архитекторов. Что делать и куда идти по карьерному треку в ИТ? 🔹Что важнее для компаний: скорость развития или технологическая устойчивость? 🔹Исследование: рынок ПО для ИИ в России вырастет почти вчетверо к 2030 году. 🔹Где тонкая грань между простым внедрением продукта в деятельность компании и качественным онбордингом? Подписывайтесь на канал VK Tech, чтобы держать руку на пульсе российских технологий.
208 просм.24 июня, 15:02
Spring Boot: не отдавайте JPA Entity напрямую в API - используйте DTO на границах Если возвращать Entity из контроллера, вы жёстко связываете API с внутренней моделью базы. Любое изменение в persistence-слое может сломать внешний контракт. DTO решает сразу несколько проблем: • API становится независимым от слоя данных • Избегаете ошибок LazyInitializationException • Не утечёт лишняя информация (например, password, internalNote) • Улучшается безопасность и контроль над тем, что видит клиент Идея простая: Entity - для базы DTO - для API Конвертируйте Entity → DTO в сервисе или через mapper (MapStruct / manual mapping). Чистые границы = стабильный API и меньше багов.
509 просм.23 июня, 00:30
ИИ-агенты против младших разработчиков: кто кого заменит к концу 2026 года. Открытый урок курса «ИИ-агенты: продвинутое внедрение и использование» в OTUS Разговоры о том, что ИИ-агенты заменят младших разработчиков, уже перестали быть футуристикой. Но паника здесь бесполезна. Важно понять, что агенты реально умеют в 2026 году, где они уже сильнее начинающего специалиста, а где без человека всё ещё разваливаются на контексте, архитектуре, проверке решений и ответственности за результат. На открытом уроке 22 июня в 20:00 разберём, на что сегодня способны автономные ИИ-агенты в разработке. Дадим агенту реальную задачу с собеседования и посмотрим, справится ли он без помощи человека. Обсудим, какие профессии и роли в ИТ уже начали меняться под давлением ИИ, а какие окажутся следующими. Отдельно поговорим о том, как пересобрать карьерную траекторию: какие навыки останутся востребованными в ближайшие 3–5 лет, как использовать агентов не как угрозу, а как усилитель продуктивности, и с каких проектов стоит начать, чтобы быть «над агентами», а не конкурировать с ними за простые задачи. Урок не для тех, кто хочет услышать успокоительное «ничего не изменится», и не для тех, кто верит в простую замену людей машинами. Будет полезен тем, кто хочет трезво оценить рынок, понять ограничения ИИ-агентов и перестроить свой рост под новую реальность разработки. 👉 Записаться: https://vk.cc/cYXAPg Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
470 просм.22 июня, 12:01
Spring Boot: для чистых REST-контроллеров используйте @RestController вместо @Controller + @ResponseBody @RestController — это мета-аннотация, которая включает @ResponseBody, и затем автоматически применяется ко всем методам: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { } С использованием @Controller и @ResponseBody: @Controller public class MyController { @ResponseBody @GetMapping("/hello") public String hello() { return "Hello!"; } } С использованием @RestController: @RestController public class MyController { @GetMapping("/hello") public String hello() { return "Hello!"; } }
513 просм.22 июня, 09:44
⚡️ Spring Boot: полный контроль над HTTP-ответами через ResponseEntity Если нужно управлять не только телом ответа, но и статусом и заголовками — используйте ResponseEntity. Что это даёт: - Явно задаёте HTTP-статус (200, 404, 201 и т.д.) - Добавляете кастомные заголовки - Возвращаете любой объект в body - Контролируете поведение API на уровне протокола Пример: @GetMapping("/users/{id}") public ResponseEntity getUser(@PathVariable Long id) { User user = userService.findById(id); if (user == null) { return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); } return ResponseEntity .status(HttpStatus.OK) .header("Custom-Header", "UserFound") .body(user); } • разные статусы для разных сценариев (404, 400, 204) • REST API с чёткой семантикой • добавление headers (pagination, tokens, meta) • возврат пустого ответа без body Совет: Если метод просто возвращает данные - достаточно вернуть объект. Если нужен контроль над HTTP - всегда ResponseEntity.
580 просм.21 июня, 11:32
Java API Tip Безопасное приведение long к int Используй Math.toIntExact() — этот метод возвращает значение long, но выбрасывает ArithmeticException, если оно не помещается в int Без него преобразование произойдёт молча — и ты можешь получить некорректный результат без всяких ошибок. Используй toIntExact, когда важно контролировать переполнение
602 просм.20 июня, 11:32
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! — 4 офлайн программы по востребованным направлениям ИТ — 2 онлайн-программы: машинное обучение и продуктовый менеджмент — 550 грантов до 75% — Вечерние занятия и учеба по выходным — удобно совмещать с работой — Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса — Возможность стажировок и трудоустройства в ведущих компаниях — Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас!
368 просм.19 июня, 15:00
Java Совет: вы можете откатить транзакцию БД, созданную аннотацией @Transactional, получив текущий TransactionStatus через класс TransactionAspectSupport и установив для него rollback через setRollbackOnly();. Таким образом, не нужно выбрасывать исключение.
699 просм.18 июня, 16:37
Вайб‑кодинг: хайп для пет-проектов или мощь для прома? Узнаем на митапе! ✌️ Айтишники Новосибирска, собираемся 25 июня в лофте FoodFactory, чтобы обсудить ИИ в финтехе и создании продуктов. В программе митапа: ✔️ реальные кейсы продуктов разного масштаба; ✔️ риски и выгоды агентной разработки; ✔️ дискуссии с экспертами. Занесите в календарь: 25 июня, 19:00, лофт FoodFactory, быть обязательно!  Регистрация тут
683 просм.18 июня, 11:00
🚫 Spring Boot: не используй FetchType.EAGER без реальной необходимости Кажется удобным, но на практике это ловушка. Когда ты ставишь EAGER, ORM начинает загружать связи всегда, даже если они тебе вообще не нужны. Что происходит под капотом: ❌ Загружается лишнее ❌ Растёт нагрузка на БД ❌ Ухудшается производительность И самое неприятное 👇 Ты получаешь классический N+1 problem: - 1 запрос на все Orders - + N запросов на связанные Customers И это может убить приложение на проде. 👉 Правильный подход: - по умолчанию используй LAZY - загружай связи явно (fetch join / entity graph) - контролируй, что и когда тянется из БД EAGER - это не удобство. Это скрытый источник проблем.
705 просм.17 июня, 18:49
Локальный запуск LLM перестал быть экспериментом Все больше команд разворачивают AI-модели внутри своей инфраструктуры, чтобы защитить данные, снизить зависимость от внешних сервисов и сократить расходы на API. 📅 23 июня в 20:00 МСК приглашаем на бесплатный открытый урок «Обзор инфраструктуры Ollama». На занятии разберем: • как устроена платформа Ollama для локального запуска LLM; • установку и настройку на Linux, macOS и Windows; • работу с моделями: загрузку, запуск, управление версиями; • квантизацию и оптимизацию моделей для ограниченных ресурсов. После урока вы: ✅ поймете архитектуру Ollama и принципы ее работы; ✅ сможете развернуть локальную LLM без облачных зависимостей; ✅ узнаете, как эффективно использовать вычислительные ресурсы и выбирать подходящие модели. Урок будет полезен разработчикам, DevOps-инженерам и всем, кто изучает практическое применение ИИ. Регистрация: https://vk.cc/cYOiJr Открытый урок пройдет в преддверии старта курса «ИИ для разработчиков» Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
785 просм.16 июня, 12:02
Java совет: сравнение времени без ловушек точности Иногда при сравнении времени в Java проверки равенства могут неожиданно падать, потому что значения отличаются на миллисекунды или наносекунды. Например: Instant a = Instant.parse("2025-10-01T10:42:11Z"); Instant b = Instant.parse("2025-10-01T10:42:44Z"); Если сравнивать напрямую, они разные. Но если вам важна точность до минуты, это можно легко исправить. Используйте Instant.truncatedTo(): boolean sameMinute = a.truncatedTo(ChronoUnit.MINUTES) .equals(b.truncatedTo(ChronoUnit.MINUTES)); System.out.println(sameMinute); // true Метод truncatedTo() обрезает время до нужной точности: • ChronoUnit.MINUTES • ChronoUnit.HOURS • ChronoUnit.DAYS Это помогает избежать проблем, когда значения отличаются только в миллисекундах или наносекундах. Полезно для: • логов • временных окон • аналитики • дедупликации событий Маленький приём — но часто спасает от неочевидных багов в time-логике.
827 просм.12 июня, 21:36
В России можно посещать IT-мероприятия хоть каждый день: как оффлайн, так и онлайн Но где их находить? Как узнавать о них раньше, чем когда все начнут выкладывать фотографии оттуда? Переходите на канал IT-Мероприятия России. В нём каждый день анонсируются мероприятия со всех городов России 📆 в канале размещаются как онлайн, так и оффлайн мероприятия; 👩‍💻 можно найти ивенты по любому стеку: программирование, frontend-backend разработка, кибербезопасность, дата-аналитика, osint, devops и другие; 🎙 разнообразные форматы мероприятий: митапы с коллегами по цеху, конференции и вебинары с известными опытными специалистами, форумы и олимпиады от важных представителей индустрии и многое другое А чтобы не искать по разным форумам и чатам новости о предстоящих ивентах: 🚀 IT-мероприятия России — подписывайся и будь в курсе всех предстоящих мероприятий!
770 просм.12 июня, 11:02
130 просм.12 июня, 10:39
Java совет: LRU Cache за 10 строк Можно реализовать LRU (Least Recently Used) cache буквально в пару строк с помощью LinkedHashMap. Главная идея: — используем порядок доступа (accessOrder = true) — переопределяем removeEldestEntry Пример: int capacity = 3; Map cache = new LinkedHashMap<>(capacity, 0.75f, true) { protected boolean removeEldestEntry(Map.Entry eldest) { return size() > capacity; } }; cache.put(1, "one"); cache.put(2, "two"); cache.put(3, "three"); cache.get(1); // обновили "свежесть" cache.put(4, "four"); // удалится 2 (LRU) System.out.println(cache); Почему это полезно: — O(1) операции — минимум кода — встроенная реализация без велосипедов Используй, если нужен быстрый in-memory cache без лишней сложности.
879 просм.10 июня, 18:37
👩‍💻 Контейнеризация Java-приложений с Docker Приглашаем на открытый урок. 🗓 22 июня в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Java разработчик. Экспертный уровень». В современной промышленной разработке бизнес-приложения всё чаще запускаются в облачных средах, и умение работать с Docker-контейнерами становится неотъемлемой частью работы Java-разработчика. На занятии мы разберем: ✔️ Что такое Docker-контейнер и зачем он нужен разработчику? ✔️ Как развернуть и запустить Java-приложение в Docker-контейнере? ✔️ Основы профилирования и отладки приложений внутри Docker-контейнера. Урок будет полезен тем, кто хочет: - Освоить навыки работы с Docker-контейнерами. - Узнать, как контейнеризация помогает в разработке и развертывании приложений. - Получить практические знания по запуску, тестированию и профилированию Java-приложений в Docker. 🔗 Ссылка на регистрацию: https://vk.cc/cYBXci Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
858 просм.10 июня, 11:01
Совет по Java : Если нужно посчитать количество вхождений элемента в списке, можно использовать Collections.frequency(...).
930 просм.9 июня, 09:06
Магия IntelliJ IDEA: код без проекта Нужно быстро протестировать Stream API, проверить регулярку или набросать алгоритм? Создавать временный класс в проекте — оверкилл. Для этого есть Scratch Files. 🟢 Что это Временные файлы с полной поддержкой языка: подсветка, автокомплит, запуск кода. Живут в IDE, но не в проекте. Не попадают в Git, не захламляют структуру. 🟢 Как создать — Ctrl+Shift+Alt+Insert → Scratch File. — File → New → Scratch File. — Или Ctrl+Shift+A → "New Scratch File". 🟢 Два типа Scratch Files — файлы с конкретным языком (Java, Kotlin, SQL, JSON). Поддерживают автокомплит и выполнение. Scratch Buffers — простой текст для заметок и TODO. 🟢 Зачем это нужно — Тестируешь алгоритм без создания Test класса. — Прототипируешь SQL перед добавлением в JPA. — Сохраняешь сниппеты со Stack Overflow. — Отлаживаешь регулярки, парсинг JSON, работу с датами. Особенно полезно при рефакторинге: копируешь сложную логику в scratch, тестируешь варианты упрощения, не трогая основной код. 🟢 Фишки — Автосохранение между перезапусками IDE. — Запуск кода: Ctrl+Shift+F10 для Java/Kotlin. — Все файлы в одном месте: Project view → Scratches and Consoles. — Хранятся локально в ~/.config/JetBrains/, не в проекте.
1 008 просм.8 июня, 17:21
123 просм.8 июня, 10:35
127 просм.7 июня, 19:25
1 598 просм.7 июня, 11:04
ObjectMapper и timezone: настройка обработки дат без указания зоны При десериализации дат в формате "2024-01-15T10:00:00" без явной таймзоны Jackson по умолчанию использует UTC. Это может привести к неожиданным результатам при работе с ZonedDateTime или Instant, когда приложение работает в другой временной зоне. 🔵 Решение ▪️ Настройка ObjectMapper через Jackson2ObjectMapperBuilderCustomizer: @Bean public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { return builder -> builder .timeZone(TimeZone.getDefault()) .featuresToDisable( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS ); } Jackson будет использовать системную таймзону приложения вместо UTC. Актуально для микросервисной архитектуры при обмене timestamp'ами между сервисами. ▪️ Для явного указания таймзоны: java.timeZone(TimeZone.getTimeZone("Europe/Moscow"))
1 085 просм.6 июня, 09:23
Java tip: начиная с Java 14 можно использовать switch expressions - код становится короче и чище. Раньше switch выглядел так: много case, break и дополнительная переменная. Теперь можно писать компактнее и понятнее. String season = switch (month) { case 12, 1, 2 -> "Winter"; case 3, 4, 5 -> "Spring"; default -> "Invalid"; }; Что это даёт: - меньше шаблонного кода - нет break - результат можно сразу присвоить переменной - логика читается намного проще Такие мелкие фичи сильно упрощают большие кодовые базы и уменьшают количество ошибок. Java библиотека
1 137 просм.5 июня, 09:50
Совет по Java: начиная с Java 15 можно использовать String.formatted(...) для форматирования строк вместо String.format(...). Работает как String.format, но выглядит немного чище и понятнее: Вместо: String message = String.format("Hello %s, you have %d messages", user, count); System.out.println(String.format("Hello %s, you have %d messages", user, count)); Можно написать: String message = "Hello %s, you have %d messages".formatted(user, count); System.out.println("Hello %s, you have %d messages".formatted(user, count)); Также хорошо работает с многострочным форматированием: String json = """ { "user": "%s", "messages": %d } """.formatted(user, count); Java библиотека
1 229 просм.3 июня, 10:04
👩‍💻 ИИ-ассистенты уже умеют писать код, предлагать исправления и ускорять разработку. Но в реальных проектах вайб-кодинг часто заканчивается нестабильным результатом, неожиданными ошибками и хаосом в промптах. На открытом уроке: разберём, почему красивые демонстрации не всегда работают в production-задачах и как перейти от случайного использования ИИ к системному подходу поговорим о типичных ошибках при работе с ИИ-ассистентами, разберём практики, которые помогают получать предсказуемый результат покажем, как использовать шаблоны и подходы, применимые в реальной разработке разберём живую демонстрацию на open-source проекте После занятия вы поймёте, как выстраивать управляемую работу с ИИ-инструментами, где находятся риски и как переносить рабочие подходы в свои проекты. 🗓 Открытый урок пройдёт 16 июня в 20:00 МСК в преддверии старта курса «ИИ для разработчиков». Подробности и регистрация: https://vk.cc/cYpvEG Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
1 251 просм.2 июня, 12:01
Spring Boot трюк, который спасает продакшен Если ваш сервис обращается к внешним API — рано или поздно они начнут падать, тормозить или отдавать ошибки. Вместо ручной логики повторов используйте @Retryable. Что это даёт: - Автоматические повторные запросы при ошибках - Настраиваемое количество попыток - Exponential backoff (увеличение задержки между попытками) - Fallback-логика через @Recover, если всё окончательно сломалось Когда это нужно: - Платёжные шлюзы - Внешние API - Микросервисы - Любые нестабильные сети Главная идея: Не падай из-за временных ошибок - попробуй ещё раз. Такая мелочь может значительно повысить стабильность системы без сложного кода. Java библиотека
1 263 просм.2 июня, 09:29
Ускоряем Spring-приложение: кэш для @PathVariable и @RequestParam В Spring MVC по умолчанию каждый запрос вызывает полный резолвинг аргументов методов контроллера через рефлексию. Но можно включить кэширование метаданных параметров через spring.mvc.argument-resolvers.cache-size. Это особенно полезно при высоконагруженных API с большим количеством path/query параметров. spring: mvc: argument-resolvers: cache-size: 256 # Включает кэш для резолверов аргументов (PathVariable, RequestParam и т.д.) # 256 — разумный размер для большинства приложений 🟢 Что это даёт: → Меньше overhead на рефлексию при каждом запросе → Заметный прирост производительности на эндпоинтах с 5+ параметрами → Особенно эффективно в микросервисах с REST API 🟢 Подводные камни: → Память займёт немного больше (но обычно незначительно) → При очень динамичных контроллерах (runtime-генерация) может потребоваться настройка размера кэша Java библиотека
1 264 просм.1 июня, 18:02
Spring Boot: когда использовать static-классы, а когда Bean Частая ошибка в Spring - использовать static-утилиты там, где нужен управляемый компонент. Правило простое Используйте static-классы только если: - они не хранят состояние - у них нет зависимостей - не требуется mock в тестах - не нужен AOP (логирование, транзакции и т.д.) Во всех остальных случаях — лучше Spring Bean. Почему это важно Пример с static-кэшем: public class CacheUtils { private static Map cache = new HashMap<>(); } Такой кэш: • общий для всех потоков • может случайно изменяться • сложно контролировать и тестировать нет управления жизненным циклом Правильный подход — Bean со scope: @Component @Scope("request") public class CacheService { private Map cache = new HashMap<>(); } Теперь: Spring управляет жизненным циклом можно задать scope (request, session, singleton) легко тестировать и мокать можно добавить AOP Главная мысль Static — только для чистых функций. Состояние и логика — пусть управляет Spring. Spring лучше всего работает, когда управляет stateful-объектами. Java библиотека
1 316 просм.1 июня, 10:01
Spring Boot: используйте TaskScheduler для реализации лёгких динамических задач. Для более сложных сценариев стоит рассмотреть Quartz. ✅ Инжектим и используем: ... @Autowired TaskScheduler scheduler; scheduler.schedule( () -> System.out.println("Hello!"), new CronTrigger("0 */5 * * * *") // каждые 5 минут ); ... Внедрённый бин — это ThreadPoolTaskScheduler, встроенная реализация как TaskScheduler, так и ScheduledExecutorService. ✅ При необходимости можно настроить его конфигурацию: @Configuration @EnableScheduling public class SchedulerConfig { @Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(5); scheduler.setThreadNamePrefix("my-scheduler-"); scheduler.initialize(); return scheduler; } } Java библиотека
1 335 просм.31 мая, 11:05
Магия IntelliJ IDEA: Structural Search & Replace Рефакторишь проект, нужно найти все места, где используется deprecated метод с определённым паттерном вызова. Ctrl+F не поможет — он ищет текст, а не структуру кода. Для этого есть SSR. 🟢 Что это Structural Search — поиск по AST-дереву кода, а не по тексту. Ищешь паттерны: методы с конкретными параметрами, переменные определённого типа, цепочки вызовов. И сразу заменяешь на новый код. 🟢 Как открыть — Ctrl+Shift+A → "Structural Search" или "Structural Replace". — Edit → Find → Search/Replace Structurally. — Или Ctrl+Shift+F → переключись на вкладку "Structural". 🟢 Готовые шаблоны IDEA поставляется с десятками шаблонов: — Existing templates → Java → видишь примеры для логирования, коллекций, исключений. — Можешь скопировать и доработать под себя. 🟢 Зачем это нужно — Рефакторинг legacy за минуты вместо часов. — Находишь bug patterns (например, забытые null-checks). — Автоматизируешь code review — проверяй стандарты кода. Java библиотека
1 376 просм.30 мая, 21:51
189 просм.30 мая, 11:00
Совет по Java Spring Boot: используйте @Retryable для обработки нестабильных внешних сервисов. Если API отвечает с ошибками или падает, вам не нужно вручную писать циклы с повторными попытками. Аннотация @Retryable позволяет: - автоматически повторять вызовы при возникновении определённых исключений - управлять количеством попыток - настраивать задержку и экспоненциальный backoff - выполнять fallback через @Recover, если всё равно не удалось Например, на картинке: - выполняется 3 попытки при указанных исключениях - стартовая задержка — 2 секунды, далее она удваивается при каждой попытке - вызывается recover(), если все попытки исчерпаны Это удобно, читаемо и избавляет от boilerplate-кода при интеграции с внешними API. Java библиотека
1 449 просм.29 мая, 15:29
Просто о сложном: идемпотентность Идемпотентность — это свойство операции, которую можно выполнить несколько раз, получая тот же результат, что и при однократном выполнении. Простыми словами: повторный вызов не меняет состояние системы после первого успешного выполнения. Классический пример — HTTP методы: GET, PUT, DELETE идемпотентны, POST — нет. 🟢 Ключевые моменты 🔘Идемпотентная операция: setStatus(ACTIVE) — сколько раз ни вызови, статус будет ACTIVE. 🔘Неидемпотентная операция: balance += 100 — каждый вызов увеличивает баланс. 🔘Идемпотентность ≠ отсутствие побочных эффектов (это чистота функций). 🔘Критична для распределённых систем: retry-механизмы, очереди сообщений, API. 🔘Защищает от дублирующих запросов при сетевых сбоях. 🟢 Под капотом В реальных системах идемпотентность достигается через: → Idempotency Key — клиент генерирует уникальный ключ и передаёт в запросе. Сервер проверяет: если операция с таким ключом уже выполнялась — возвращает закешированный результат. → Версионирование — оптимистичные блокировки через версии записей (JPA @Version). → Уникальные идентификаторы — вместо "создай заказ" отправляем "создай заказ с ID=xyz". Повторный запрос с тем же ID игнорируется. → Статус-машины — переходы между состояниями: если уже в целевом состоянии, ничего не делаем. 🟢 Подводные камни — Idempotency key нужно хранить ограниченное время (обычно 24 часа). — Нужна атомарность проверки и выполнения. — Сложность при асинхронной обработке. — Не все бизнес-операции можно сделать идемпотентными. — Overhead на хранение и проверку ключей. ✔️ Когда использовать — REST API с критичными операциями (платежи, создание заказов). — Kafka consumers — защита от повторной обработки при rebalance. — Интеграция с внешними системами через retry. — Scheduled jobs, которые могут запуститься дважды. — Распределённые транзакции (Saga pattern). — Webhook обработчики. — Любые операции с денежными средствами. ❌ Не нужно: — Внутренние CRUD операции без side effects. — Операции чтения (они идемпотентны по умолчанию). — Высоконагруженные операции, где overhead критичен. — Простые внутренние методы без внешних вызовов. 🔧 Бонус-трюк: в Spring можно создать аннотацию @Idempotent и реализовать через AOP с использованием Redis для хранения idempotency keys. Получается декларативная идемпотентность на уровне методов. Java библиотека
1 508 просм.28 мая, 12:31
Java-совет: WeakHashMap для кэша без утечек памяти Если ты используешь HashMap как кэш - будь осторожен. Пока карта жива, ключи и значения не будут удалены GC, даже если они больше нигде не используются. WeakHashMap решает эту проблему: • Ключи хранятся через weak reference • Если на ключ нет сильных ссылок в коде - GC может его удалить • Запись автоматически исчезает из мапы • Отлично подходит для кэшей, метаданных, listener-ов Пример идеи: • Положил объект в WeakHashMap • Убрал на него все обычные ссылки • GC очистил объект → запись исчезла сама Когда использовать: • Кэш, который не должен раздувать память • Вспомогательные данные, завязанные на жизненный цикл объекта • Framework-код, плагины, reflection-кэши Когда не стоит: • Если ключи должны жить строго контролируемо • Если логика зависит от стабильного наличия записи Коротко: HashMap - контроль у тебя WeakHashMap — контроль у GC 🧹 Полезный инструмент, если понимаешь его семантику. Java библиотека
1 539 просм.27 мая, 17:13

Посты загружаются автоматически из канала. Администрация сайта не несёт ответственности за их содержание и размещённые в них ссылки.