Библиотека Java разработчика
10.8K subscribers
1.14K photos
564 videos
58 files
1.44K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
⚡️ Отказоустойчивость и масштабируемость микросервисов
📅 17 сентября | 20:00 мск | бесплатно

Хотите, чтобы ваши микросервисы работали стабильно под нагрузкой? На вебинаре разберём:
• Паттерны отказоустойчивости: Circuit Breaker, Bulkhead, Timeouts
• Паттерны масштабируемости: Auto-scaling, Load Balancing
• Как защитить сервисы от перегрузок и сбоев

💡 Полезно для:
• Разработчиков и архитекторов микросервисов
• DevOps-инженеров
• Руководителей проектов

После вебинара вы сможете:
• Проектировать отказоустойчивую архитектуру
• Настраивать автоскейлинг и балансировку
• Повышать стабильность и производительность сервисов

👉 Регистрируйтесь:

https://vk.cc/cPwgKT

Занятие приурочено к старту курса "Software Architect", обучение на котором позволит освоить компетенции архитектора по моделированию и построению отказоустойчивых, масштабируемых информационных систем.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Debugging Transactions? Let Spring Debugger Do the Heavy Lifting

Обзор нововведений плагина Spring Debugger: теперь при дебаге приложений можно увидеть, контекст какой транзакции сейчас используется. Помимо этого, для JPA-сущностей в дебаггере можно будет увидеть текущее состояние.

https://blog.jetbrains.com/idea/2025/08/debugging-transactions-let-spring-debugger-do-the-heavy-lifting/

👉@BookJava
👍8🔥1
Thread.sleep(0) is not for free.

Небольшая заметка о том, что Thread.sleep(0) не бесплатный. Связано это с тем, что при таком вызове все еще вызывается нативный метод Thread.sleepNanos(0). А за этим методом идет выполнение метода операционной системы, и, хоть он и проводит для такого случая быстрые проверки, они замедляют систему. Поэтому стоит избегать кода:


int delay = allGood ? 0 : waitShorty;

Thread.sleep(delay);


https://mlangc.github.io/java/performance/2025/08/14/thread-sleep0-is-not-for-free.html

👉@BookJava
👍2
📕 Архитектура и написание backend тестов для разработчиков Java, QA инженеров, автоматизаторов, QA Lead и DevOps-специалистов

На открытом уроке 17 сентября в 20:00 мск мы погрузимся в тонкости построения архитектуры надежных и понятных backend-тестов:

📗 На вебинаре разберём:
1. Использование Java и RestAssured для API-тестирования, приёмы структурирования и переиспользования кода.
2. Архитектурные принципы построения надёжных тестов.

📘 В результате на практике освоите построение надежных backend-тестов, научитесь писать чистый, гибкий и поддерживаемый код на Java с RestAssured и получите архитектурные шаблоны и рабочие примеры для своих проектов.

👉 Регистрация и подробности о курсе Java QA Engineer. Professional: https://vk.cc/cPz9xM

Все участники открытого урока получат скидку на курс "Java QA Engineer. Professional"

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
1🔥1
🔥Oracle Releases Java 25

Основные фичи:
JEP 520: Метод-трейсинг и тайминг в JFR — замер времени конкретных методов без кода и агентов
В Java 25 JFR (Java Flight Recorder) позволяет точно отслеживать выполнение конкретных методов — без изменения исходников, без логирования и без сторонних Java-агентов.

Зачем это нужно?
Допустим, приложение долго стартует или внезапно теряет соединения с БД. Раньше приходилось:

🔹Логировать вручную

🔹Добавлять JFR-события в код

🔹Подключать агент через -javaagent

🔹Пытаться что-то угадывать с sampling-профайлером

🔹Использовать Spring AOP и @Around-аспекты

https://www.oracle.com/news/announcement/oracle-releases-java-25-2025-09-16/

👉@BookJava
👍6
Java varargs

Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.

Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.

👉@BookJava
👍3🔥2
С выходом @springboot 4 в GA, @intellijidea добавляет полноценную поддержку версионирования API в Spring MVC.

Теперь можно видеть версии эндпоинтов прямо в Structure и получать подсказки, если версионирование не настроено.

👉@BookJava
👍8
🏗 Курс “Software Architect” от OTUS — набор заканчивается. Успейте пройти вступительный тест и занять место в группе!

Почему стоит присоединиться прямо сейчас:

• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.

💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам

После курса вы сможете:

• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем

Места в группе ограничены — пройдите вступительное тестирование сегодня, чтобы успеть!

https://vk.cc/cPBg9X


Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍1
Ускорение Spring REST API на 200%

Spring Framework уже многие годы является базой, на которой разрабатывается подавляющее большинство серверных приложений на Java. Он предоставляет абстракции над множеством различных технологий, в том числе и абстракции для разработки REST API. Все эти абстракции имеют свою цену в плане производительности, и иногда эта цена является очень большой, если речь идёт о высоконагруженном приложении. В этой небольшой статье я покажу, как можно избавиться от ненужных накладных расходов и значительно увеличить производительность вашего API.

https://habr.com/ru/companies/maxilect/articles/896240/

👉@BookJava
👍2
Библиотека для кэширования Caffeine: анализ кода

То и дело, прожигая время за чтением reddit, я натыкаюсь на очередной пост, в котором упоминается метод S3 FIFO и говорится, что он лучше LRU (вытеснение реже всего используемых значений) — потому что даёт более низкий процент промахов кэша. Видные компании, в частности, RedPandas, Rising Wave и Cloudflare уже внедрили S3 FIFO у себя на различных мощностях, что только подогрело мой интерес к нему. Кэши — чертовски интересная тема, а по работе мне приходится сильно полагаться на работу с кэшами при обслуживании нескольких сервисов. Так что я был уверен, что рано или поздно мне потребуется протестировать S3 FIFO или, как минимум, удостовериться, что я понимаю ключевые идеи, заложенные в этой технологии.

Правда, казалось, что рановато с головой погружаться в изучение нового подхода к кэшированию, пока ещё досконально не разобрался в аналогичной системе, с которой приходится иметь дело на работе сейчас. У нас в команде для работы с кэшированием используется библиотека Caffeine, и, положа руку на сердце, я не ориентировался в её внутреннем устройстве, не пытался проверить, можно ли в ней что-нибудь подкрутить, и есть ли в ней параметры, поддающиеся тонкой настройке. В этой статье я попробую законспектировать мои изыскания и рассказать, как на собственном опыте разбирался во внутреннем устройстве библиотеки Caffeine.

Все желающие приглашаются в путешествие с разбором сложностей одной из наиболее востребованных систем кэширования, используемых в мире. Будь вы бывалый инженер или просто новичок, интересующийся продвинутыми механизмами кэширования, это исследование прольёт вам свет на многие вопросы и подведёт к важным практическим выводам. Поехали!

https://habr.com/ru/articles/896266/

original https://adriacabeza.github.io/2024/07/12/caffeine-cache.html


Мы в MAX

👉@BookJava
👍2
Быстрый поиск подстроки: Кнут–Моррис–Пратт на практике!

Разберём алгоритм Кнута–Морриса–Пратта (КМП): почему он работает за линейное время и как «переиспользует» уже найденные совпадения. Покажем, где наивный подход теряет секунды (и деньги), а КМП — нет.

После вебинара вы:
— понимаете префикс-функцию и логику «сдвигов»;
— умеете сравнить наивный поиск и КМП на реальных данных;
— знаете, как внедрить быстрый поиск в проде.

Урок пройдёт 24 сентября в 20:00 МСК в преддверие старта курса «Алгоритмы и структуры данных». Всем участникам — персональные условия обучения.

👉 Для участия зарегистрируйтесь:

https://vk.cc/cPIpN3

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Media is too big
VIEW IN TELEGRAM
Запускаем WebSocket сервер на базе Jetty, без Spring

Иногда хочется не целый каравай, а просто хлеб с маслом.
Вот и мне понадобился простой java проект с socket-сервером, без необходимости тащить спринг.

00:00 Старт
00:05 Новый проект
01:04 Jetty dependency
01:54 App
02:14 Server
04:18 WebSocketContainer
04:58 @ WebSocket annotations
07:50 DO NOT COPY A CODE! ))
09:12 server.start()
09:56 @ OnWebSocketError ))
11:21 Done
12:04 Like & Subscribe

GitHub

Источник

Мы в MAX

👉@BookJava
👍4
Офер в VK для бэкендеров и ML-щиков — станьте частью команды за выходные.

4–5 октября пройдёт VK Weekend Offer. Всего за 2 дня вы сможете пройти весь путь от знакомства с командами до приглашения на работу: пройти техническое собеседование, встретиться с лидами и получить офер.

Требования для бекэндеров – три года опыта коммерческой разработки, знание Java, Go, Python, C++.
Для ML-щиков – те же три года опыта + знания Classic ML, RecSys, NLP/LLM, CV, Speech.

Читайте подробности на сайте и подавайте заявку до 2 октября!
💩2👍1
О подводных камнях виртуальных потоков в Java

Виртуальные потоки (JEP 425) являются мощным инструментом для построения приложений, которые в теории могут обслуживать десятки тысяч запросов в секунду. Однако это в теории. Практика же может выглядеть совершенно иначе. Данная статья рассказывает о нескольких подводных камнях, из-за которых виртуальные потоки могут не сработать, а сделать даже хуже.

https://habr.com/ru/articles/950204/

Мы в MAX

👉@BookJava
👍1
Spring Boot — Управление транзакциями с использованием аннотации @Transactional

В корпоративных приложениях транзакции обеспечивают согласованность и целостность данных.
Транзакция — это последовательность операций, выполняемых как единое логическое целое.
Все операции внутри транзакции либо успешно выполняются (commit), либо полностью откатываются (rollback).

Spring Boot упрощает управление транзакциями с помощью аннотации @Transactional, которая основана на декларативном механизме управления транзакциями Spring.
Это избавляет разработчиков от написания шаблонного кода для ручного управления транзакциями.

https://www.geeksforgeeks.org/springboot/spring-boot-transaction-management-using-transactional-annotation/

Мы в MAX

👉@BookJava
👍3🔥1
Маршрут построен: в пятницу – на VK JT Meetup!

Это неформальная встреча для ML-инженеров и Java-разработчиков от VK.

О чём расскажут:
• Какие вызовы возникают перед бэкендером в процессе создания B2B-продукта
• Как строят единую инфраструктуру поисковой платформы

А также поделятся пошаговым гайдом по выпуску RAG в прод

Дальше гостей ждут два потока: нетворкинг-зона и групповое решение кейсов по ML и Java.

Мероприятие пройдёт только офлайн — редкий шанс пообщаться с коллегами, задать вопросы экспертам и выиграть призы от VK. Регистрируйтесь!

📍 Нижний Новгород, только офлайн
📅 3 октября, сбор с 18:00
🎟 Вход по регистрации
1🤮1
Защита Spring Boot приложений с помощью Keycloak и OIDC

Многие приложения используют аутентификацию и авторизацию. Однако для разработчиков это часто оказывается непростой задачей.

В этой статье рассматривается Spring Security — решение от Spring для добавления безопасности в ваши Spring-приложения. С помощью примеров и модульных тестов вы познакомитесь с аннотациями и классами Spring. Конечная цель — настроить приложение с использованием OpenID Connect в связке с Keycloak. Введение в OpenID Connect и Keycloak уже рассматривалось в предыдущей статье. Если вы ещё не знакомы с этими концепциями, рекомендуется ознакомиться с тем материалом.

https://mydeveloperplanet.com/2025/06/11/secure-your-spring-boot-apps-using-keycloak-and-oidc/

Мы в MAX

👉@BookJava
👍2
🔍Тестовое собеседование с Java-разработчиком из МТС уже завтра

1 октября (уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
📂 Илья Аров, старший разработчик в МТС, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Илья будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Илье

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Что вы знаете про Collection?

Collection — это интерфейс в java.util, который задаёт общий контракт для всех коллекций, хранящих группы объектов. Через него определяются ключевые операции: добавление и удаление элементов, проверка их наличия, очистка коллекции, получение размера и итерация. Основные реализации — List, Set и Queue.

Сам интерфейс не потокобезопасен, но его можно обернуть в синхронизированную версию через Collections.synchronizedCollection() или использовать классы из java.util.concurrent. Collection работает с дженериками, что обеспечивает типобезопасность и упрощает работу с элементами.

Важно помнить, что Map не наследуется от Collection, так как представляет пары ключ–значение и имеет свою иерархию.

Мы в MAX

👉@BookJava
👍31
Что такое Spring контейнер?

Spring контейнер — это основной компонент фреймворка Spring, который отвечает за управление жизненным циклом объектов (или бинов). Контейнер создаёт, конфигурирует и управляет зависимостями между объектами, а также реализует инъекцию зависимостей (DI), что упрощает разработку, улучшает тестируемость и поддерживаемость кода.

Он также управляет аспектами транзакций и безопасности.

Основной принцип Spring контейнера — это инверсия управления (IoC), при которой ответственность за создание объектов и управление их состоянием перекладывается на контейнер, а не на код разработчика.

Мы в MAX

👉@BookJava
👍1
Стань участником МТС True Tech Champ 2025 — масштабного ИТ-чемпионата по программированию с призовым фондом 10 250 000 рублей.

Соревнования пройдут в двух треках:

1. Алгоритмические задачи
Покажи индивидуальное мастерство в работе со структурами данных и написании алгоритмов. Чтобы успешно справиться с заданиями, пригодится опыт решения олимпиад.

2. Программирование роботов
Оживи робота с помощью кода, чтобы он прошел лабиринт быстрее всех. Трек будет интересен разработчикам: С++, Go, Python, JS, Java, C# и не только.

Участвовать могут школьники, студенты, начинающие ИТ-специалисты и опытные разработчики. Отборочные этапы пройдут онлайн, шоу-финал — 21 ноября в МТС Live Холл в Москве.

Ты можешь выйти на арену как участник или наблюдать за чемпионатом как зритель.

Регистрируйся до 20 октября по ссылке.