java_library | Unsorted

Telegram-канал java_library - Java Books

14242

Java Библиотека По всем вопросам- @notxxx1 @ai_machinelearning_big_data - machine learning @pythonl - Python @itchannels_telegram - 🔥 best it channels @ArtificialIntelligencedl - AI @pythonlbooks-📚 @programming_books_it -it 📚 № 5032728887

Subscribe to a channel

Java Books

Работаете с файлами в Java? Используйте `Path` и `Files` из NIO.2.

Для простого чтения и записи больше не нужны цепочки из FileReader и BufferedReader:


Path path = Path.of("notes.txt");

String text = Files.readString(path);
Files.writeString(path, "Привет, Java!");
List<String> lines = Files.readAllLines(path);


Меньше шаблонного кода, явная работа с путями и UTF-8 по умолчанию у этих методов чтения и записи.

Path.of, readString и writeString доступны с Java 11. Для больших файлов используйте потоковое чтение: приведённые методы загружают содержимое целиком.

Читать полностью…

Java Books

Java: помогите IDE заметить возможный `NullPointerException` до запуска программы.

Аннотации `@NonNull` и `@Nullable` описывают контракт: где null недопустим, а где его нужно обработать.


String displayName(@NonNull User user) {
@Nullable String name = user.getName();

if (name == null) {
return "unknown";
}

return name.toUpperCase();
}


`user` не должен быть `null`, а имя может отсутствовать – поэтому перед toUpperCase() стоит проверка.

При поддержке выбранных аннотаций IDE или статический анализатор предупредит о нарушении контракта прямо во время написания кода.

Сами аннотации не гарантируют проверку во время выполнения. Их поведение зависит от библиотеки и инструментов. Чтобы контракт работал между методами, помечайте и параметры, и возвращаемые значения – например, getName().

Читать полностью…

Java Books

💡 Миллион потоков в Java? С virtual threads это реально

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

Каждому такому потоку не нужен отдельный поток ОС. При многих блокирующих I/O-операциях JVM освобождает системный поток для другой работы, пока виртуальный ждёт.

Код остаётся привычным и последовательным, без обязательного перехода на цепочки колбэков.

Особенно полезно для множества одновременных HTTP-запросов и обращений к БД. Но тяжёлые вычисления быстрее не станут: виртуальные потоки помогают увеличить число обслуживаемых задач, а не скорость процессора.

И да: миллион потоков не означает миллион соединений с БД. Пулы соединений и ограничения нагрузки по-прежнему нужны.

Читать полностью…

Java Books

💡 Одинаковый ввод? Не вычисляйте результат заново.

Сохраняйте результаты затратных вычислений в кэше:

✅ Используйте входные данные как ключ в Map.
✅ Если кэш общий для нескольких потоков, выбирайте ConcurrentHashMap.
✅ computeIfAbsent() вычислит и сохранит значение, если ключа ещё нет. Следующие вызовы вернут готовый результат.

Нюанс: если функция вернула null или выбросила исключение, результат не сохранится и вычисление может повториться.

Сам по себе ConcurrentHashMap не ограничивает размер кэша и не удаляет устаревшие записи.

Читать полностью…

Java Books

🤺 Почему ты получаешь отказ после «норм собеса»?

Дело не в знаниях — ты просто не знаешь, что реально проверяют на собеседованиях.

Решение — знать, чего от тебя ждёт интервьюер, и уметь правильно донести свою мысль.

Для этого ребята из ШОРТКАТ (менторской программы для разработчиков) собрали в один файл ОТВЕТЫ НА 50 СЛОЖНЫХ ВОПРОСОВ с Java-собеседований 🔥

Они проанализировали более 100 мок-интервью и собрали внутри реальные вопросы + ответы сильного кандидата.

⚠️ Забрать можно бесплатно в боте — @shortcut_sh_bot

В том же боте ты сможешь зарегаться на эфир с бесплатным тестовым интервью на Java-разработчика!

Эфир пройдёт 7 октября в 19:00 МСК.
Его проведёт Виктор Анохин — Senior-разработчик из Wildberries, ex-Билайн.

Ты сможешь вживую услышать, какие вопросы задают на собесах в топовых компаниях, и лично задать вопрос ментору из бигтеха 🔝

Всё это бесплатно, тебе нужно только нажать на ссылку и забрать все плюшки ↓
@shortcut_sh_bot

Реклама.
О рекламодателе.

Читать полностью…

Java Books

Apache Kafka курс 2026: бесплатный курс по Kafka с нуля до профи на русском

Kafka обучение без воды: каждый модуль состоит из понятной теории, схем, команд, которые можно запустить у себя, типичных ошибок и вопросов для самопроверки. Курс подходит, чтобы выучить Kafka с нуля, подготовиться к собеседованию на backend, data engineer или DevOps-позицию и спроектировать надёжную систему на Kafka в продакшене.

https://github.com/justxor/KAFKAFREECOURSR

Читать полностью…

Java Books

☕ Java: в HashSet всего 10 элементов, а обход всё равно тормозит

Редкий нюанс: время обхода HashSet зависит от количества элементов и размера внутренней таблицы.


var ids = new HashSet<Integer>(1_000_000);

for (int i = 0; i < 10; i++) {
ids.add(i);
}

for (int id : ids) {
process(id);
}


После добавления элементов внутри выделена огромная таблица. Итератор проходит по её ячейкам, включая пустые, хотя size() возвращает всего 10.

Сложность обхода - O(size + capacity). Поэтому большая ёмкость «про запас» может замедлить регулярный перебор.

Если коллекция уже сильно разрослась, а затем почти опустела, можно пересобрать её:


ids = new HashSet<>(ids);


Новый набор подберёт ёмкость под оставшиеся элементы. Пересборка требует времени и дополнительной памяти, поэтому имеет смысл перед многократными обходами, а не внутри каждого цикла.

Документация - https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/HashSet.html

Читать полностью…

Java Books

☕️ Java получил практический MCP-сервер для медицинского AI-триажа

На JavaOne показали систему, где жалоба пациента превращается в тикет, а AI определяет его срочность. Теперь Oracle подробно разобрала MCP-сервер, который принимает текст и возвращает оценку от 0 до 10.

Сервер построен на Helidon и публикует один инструмент через @Mcp.Tool. Клиенту не нужно знать, какая модель работает внутри.

Доступны два режима:

* локальный MiniLM через DJL - 384-мерные эмбеддинги, без API и сети;
* OpenAI text-embedding-3-small - 1536-мерные эмбеддинги.

Финальную оценку в обоих случаях вычисляет локальная нейросеть DeepNetts.

Важный нюанс: для каждого типа эмбеддингов нужна отдельно обученная модель оценки. Нельзя взять модель, обученную на векторах MiniLM, и передать ей векторы OpenAI, даже если привести их к одинаковому размеру.

MCP-интерфейс при этом остаётся неизменным:


жалоба → эмбеддинг → DeepNetts → срочность 0–10


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

https://inside.java/2026/07/25/design-java-mcp-tool/

Читать полностью…

Java Books

Autobase

Это инструмент, разработанный для автоматизации развёртывания и управления PostgreSQL-кластерами с использованием Ansible. Он поддерживает широкий набор функций, включая настройку репликации, автоматизацию резервного копирования с помощью инструментов, таких как pgBackRest и WAL-G, мониторинг состояния кластеров, а также настройку высокодоступной инфраструктуры (HA).

Проект упрощает настройку PostgreSQL и снижает вероятность ошибок, обеспечивая удобные плейбуки для типичных задач. Его можно использовать как для новых установок, так и для работы с существующими конфигурациями.

https://github.com/autobase-tech/autobase

Читать полностью…

Java Books

⚡️ «Контейнеры - это просто Linux-процессы» - полезное упрощение, но не совсем правда

Обычно контейнер объясняют так:

> контейнер = обычный Linux-процесс + namespaces + cgroups

Для первого знакомства этого хватает. Но OCI Runtime Spec определяет контейнер шире: это изолированная среда для запуска процессов, а не сам процесс.

И Linux-механизмы, только один из вариантов реализации.

OCI охватывает не только Linux, но и:

- Windows
- FreeBSD
- Solaris
- z/OS
- VM-based containers

То есть контейнер не обязан быть «процессом в Linux». Важнее то, что среда соответствует контейнерной модели: изоляция, файловая система, ресурсы, lifecycle и правила запуска.

Хороший разбор того, что контейнер представляет собой на самом деле:

https://labs.iximiuz.com/tutorials/oci-containers-explained

Читать полностью…

Java Books

Приглашаем на курс для прокачки навыков архитектора и проектировщика, которые важны для профессионального роста программиста.

🌐 С курсом «Системный дизайн высоконагруженных проектов» вы:

▪️изучите ключевые фундаментальные паттерны и получите навыки проектирования проектов с миллионной аудиторией (балансировка, масштабирование апп/кешей/субд, высокая доступность и кластерные решения, шардинг, CAP/PACELS, консистентность, саги, транзакционные очереди и многое другое)
▪️поупражняетесь в проектировании и получите обратную связь на реальных задачах: магазин/маркетплейс, такси/доставка, обьявления, соцсети, дейтинг, игры, википедия, мессенжер, CDN, хранилище файлов, онлайн-кинотеатр, счетчики, удаленный мониторинг, интеграционные вебхуки, рассылки и тд.
▪️ научитесь планировать нагрузку и связывать
бизнес-показатели с нефункциональными требованиями к системе
▪️ попрактикуемся в проведении и прохождения секций системного дизайна на интервью.

Всё в формате живых онлайн-сессий (лекции, брейнштормы, презентации домашних проектов).

🤩 Кто мы: R&D-центр Devhands.ru, наш канал (/channel/rybakalexey). Основатель школы и автор курса Алексей Рыбак, ex-СТО Badoo, с 20-летним опытом высоконагруженных проектов и управления глобальными технологическими организациями.

🗓 java_library">Старт 7 сентября, изучаем программу, записываемся здесь

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqvimBRf

Читать полностью…

Java Books

Вам доклады по Go или Java? VK приглашает на митап с двойной начинкой
26 августа VK собирает Go- и Java-инженеров, чтобы прокачать знания.

В программе два трека — Go и Java, по три доклада в каждом.

Трек Go:
• «Компиляция Go в динамическую либу, или как мы ускорили выкатку фичи в два раза, но нам не понравилось», Михаил Кичигин, бэкенд-разработчик, Avito Tech
• «Go-платформа VK: как мы построили единую основу для создания Go-сервисов», Александр Апанасенко, руководитель команды SDK Backend, VK
• «Почтальон от Kubernetes до Palo Alto. Как осуществляется доставка информации об адресах», Дарья Кулькина, бэкенд-разработчик, Точка Банк

Трек Java:
• «Перформанс-трюки в поисковой платформе Ozon», Пётр Портнов, ведущий разработчик среднего поиска, Ozon
• «Архитектура современного движка платёжной системы и переход к новой архитектуре», Игорь Крикунов, технический лидер разработки DBC, Альфа-Банк
• «Переход от федерации S3-кластеров в пользу коммунального и мультитенантного кластера», Кирилл Боблак, ведущий разработчик One-cloud, VK

А ещё будет мастер-класс по прокачке навыка, который сделает вас звездой любого вечера, и афтепати, чтобы обсудить доклады в неформальной обстановке.

Встречаемся в 17:00, начало в 18:00. Участие бесплатное, регистрация обязательна.

Читать полностью…

Java Books

⚡️ Java-приём: не храни метаданные классов в `static Map<Class<?>, ...>` — используй `ClassValue`.

Допустим, библиотека кеширует информацию о каждом классе:


private static final Map<Class<?>, Metadata> CACHE =
new ConcurrentHashMap<>();


На первый взгляд всё нормально.

Но в приложениях с динамической загрузкой классов — plugins, application servers, hot reload — такой кеш может удерживать Class, а вместе с ним и его ClassLoader.

И получить неприятную утечку памяти.

В Java для этого есть малоизвестный ClassValue<T>:


private static final ClassValue<Metadata> CACHE =
new ClassValue<>() {
@Override
protected Metadata computeValue(Class<?> type) {
return buildMetadata(type);
}
};


Использование:


Metadata metadata = CACHE.get(MyClass.class);


Что даёт ClassValue:

- ленивое вычисление значения для каждого класса;
- thread-safe доступ;
- не нужен собственный ConcurrentHashMap;
- кеш лучше согласован с жизненным циклом загруженных классов.

Особенно полезно для reflection, serializers, ORM, DI-контейнеров и framework-кода, где постоянно кешируются данные по Class<?>.

🔥 Если видишь в библиотеке:


static ConcurrentHashMap<Class<?>, ...>


стоит хотя бы задать вопрос:

а почему здесь не `ClassValue`?

#Java #JVM #Backend #Programming

Читать полностью…

Java Books

☕️ Java-совет: не запускайте блокирующий I/O через `CompletableFuture` без собственного пула

Такой код выглядит асинхронным:


CompletableFuture<User> future =
CompletableFuture.supplyAsync(() -> userClient.loadUser(id));


Но без явного Executor задача обычно попадёт в общий ForkJoinPool.commonPool().

Если loadUser() ждёт HTTP, базу данных или файловую систему, поток блокируется. Несколько медленных вызовов могут занять весь общий пул и затормозить совершенно несвязанные операции приложения.

Лучше выделить отдельный пул для блокирующего I/O:


private static final ExecutorService IO_POOL =
Executors.newFixedThreadPool(32);

CompletableFuture<User> future =
CompletableFuture.supplyAsync(
() -> userClient.loadUser(id),
IO_POOL
);


И не забыть корректно его закрыть:


IO_POOL.shutdown();


Для цепочки тоже важно явно выбирать executor:


future.thenApplyAsync(
user -> enrichUser(user),
IO_POOL
);


Почему это полезно:

- медленный внешний сервис не блокирует общий пул;
- нагрузку можно ограничить размером executor;
- проще наблюдать очередь и время выполнения;
- разные типы задач не мешают друг другу.

CompletableFuture не делает блокирующий код неблокирующим. Он лишь переносит ожидание в другой поток.

Асинхронность без контроля executor - это просто блокировка в менее заметном месте.

Читать полностью…

Java Books

💡 Java совет: два пути могут указывать на один и тот же файл

Path.equals() сравнивает только представление пути:


Path a = Path.of("data.txt");
Path b = Path.of("./data.txt");

System.out.println(a.equals(b)); // false


Хотя оба пути могут вести к одному файлу.

Для проверки используйте:


boolean same = Files.isSameFile(a, b);


Files.isSameFile() обращается к файловой системе и учитывает:

- относительные пути;
- символические ссылки;
- реальное расположение файла.


Path file = Path.of("data.txt");
Path link = Path.of("data-link.txt");

Files.isSameFile(file, link); // true, если link ведёт к data.txt


Полезно при поиске дубликатов, проверке пользовательских путей и защите от повторной обработки одного файла.

Учтите: метод может обращаться к диску и выбрасывать IOException, поэтому это не просто строковое сравнение.

Доступно начиная с Java 7.

#Java #JavaTips #Files

Читать полностью…

Java Books

Приглашаем на Java Jam — бесплатный митап ЮMoney для бэкенд-разработчиков 🔥

✅ 29 октября, четверг, 19:00 (мск) — приходите на митап в Санкт-Петербурге или смотрите трансляцию. 

Спикеры из ЮMoney и Сбера выступят с докладами:

🟣 Один апгрейд — больше сотни сервисов: как мы обновляем Java-стек в компании
Обсудим, как обновить Gradle, Spring Boot и Java в 120+ компонентах, не останавливая разработку. Расскажем, как выстраивали процессы на протяжении этого времени: от порядка действий и массовых патчей до взаимодействия с командами и решения трудностей, с которыми столкнулись во время последнего обновления.

🟣 Как я автоматизировал свой проект — и всё сломал
Разберём, как выстроить автоматизацию в проекте с помощью ИИ и какие шишки можно набить на пути. Поговорим, как работает длинный контекст в моделях и как организовать работу с учётом этих особенностей.

🟣 Откатить нельзя оставить: мониторинг выкладки релиза на основе Sentry
Ошибки случаются. Узнаем, какие из них появляются или возникают чаще после последнего релиза — и достаточно ли этого, чтобы принять решение об откате.

Зарегистрируйтесь, чтобы принять участие. Все подробности — на сайте митапа Java Jam👈

Читать полностью…

Java Books

Spring Boot запустился быстрее. А обязательная проверка так и не выполнилась.

Причиной может быть одна настройка:


spring.main.lazy-initialization=true


Она откладывает создание многих бинов до момента, когда они понадобятся. Вместе с ними откладывается и `@PostConstruct`.

Если внутри такого бина спрятаны прогрев кеша или ваша проверка схемы БД, они выполнятся только при его создании. Никто не запросил бин — код может вообще не запуститься.

Другие последствия: первый запрос может стать медленнее, а ошибка конфигурации обнаружится уже после старта приложения.

Критическую инициализацию можно оставить на старте:


@Component
@Lazy(false)
public class SchemaVerifier {

@PostConstruct
void init() {
verifySchema();
}

private void verifySchema() {
// Проверка совместимости схемы БД
}
}


`@PostConstruct` означает «после создания бина», а не «обязательно при запуске приложения».

Нюанс: lazy-бин всё же может создаться на старте, если нужен другому бину, который инициализируется сразу.

https://docs.spring.io/spring-boot/reference/features/spring-application.html

Читать полностью…

Java Books

🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку

Окружение решает больше, чем кажется.

Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.

AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: /channel/+90Z5TAyfuNU5YmRi
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_ci
Java: t.me/javatg
JavaScript: t.me/javascriptv
React: t.me/react_tg
Frontend: t.me/front
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Базы данных: t.me/sqlhub
Data Science: t.me/data_analysis_ml
Big Data: t.me/bigdatai
Математика: t.me/data_math
Физика: t.me/fizmat
Kubernetes: t.me/kubernetc
GameDev: /channel/gamedev
Haskell: t.me/haskell_tg

Собеседования и карьера:

DS собеседования: t.me/machinelearning_interview
Python собеседования: t.me/python_job_interview

Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: /channel/addlist/2Ls-snqEeytkMDgy
Папка Frontend: /channel/addlist/mzMMG3RPZhY2M2Iy

Полезное сверху:

ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: /channel/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: /channel/addlist/BkskQciUW_FhNjEy

Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg

Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.

Читать полностью…

Java Books

🧠 Spring AI показал, как сделать RAG заметно умнее обычного vector search.

Проблема классического RAG: похожий документ ещё не значит полезный.

Новый пайплайн делает так:

Question → Rewrite → MultiQuery → Vector Search → Jev Filter → Rerank → LLM

Jev проверяет каждый найденный chunk: есть ли там реальный ответ, противоречие или prompt injection.

В демо vector search нашёл 6 фрагментов, но до модели дошли только 2 действительно полезных.

Меньше мусора в контексте → точнее ответы и меньше шансов на prompt injection.

Код и разбор:
https://spring.io/blog/2026/10/02/spring-ai-modular-rag-typesafe-jev/

Читать полностью…

Java Books

💡 Предпочитайте делегирование наследованию

Связь is-a выглядит удобно: создаём подкласс, наследуем поведение и пишем меньше кода.

Но есть цена.

✅ Подкласс получает весь API родителя.
✅ Он зависит от деталей реализации суперкласса.
✅ Изменение родительского класса может неожиданно сломать потомка.

И чем глубже иерархия, тем сложнее понять, откуда вообще взялось конкретное поведение.

Часто безопаснее композиция:


class OrderService {
private final PaymentService paymentService;
}


Вместо наследования:


class OrderService extends PaymentService {
}


Композиция связывает объекты. Наследование связывает их судьбы.

Если объекту просто нужна чужая функциональность, чаще лучше её делегировать, а не наследовать.

Читать полностью…

Java Books

🖥 Java в 2026 году: 25 лучших практических примеров кода от основ до многопоточности

https://uproger.com/java-v-2026-godu-25-luchshih-prakticheskih-primerov-koda-ot-osnov-do-mnogopotochnosti/

Читать полностью…

Java Books

🔥 Python + AI без игрушечных демок. Курс для тех, кто хочет собирать рабочие системы.

Stepik: «Python современный AI для разработчика и автоматизации задач»

63 урока, 382 шага, практика с кодом и автопроверкой.

Внутри: RAG, tool calling, агенты, evals, MCP, Ollama, vLLM, pgvector + HNSW, безопасный text-to-SQL, prompt injection, кэш, очереди и sandbox для агентного кода.

Плюс реальные автоматизации: почта, отчёты, боты, вебхуки и браузерные сценарии.

Для тех, кто уже знает Python и хочет перейти к production AI.

⏳ 72 часа скидка 55%

https://stepik.org/a/295921

Читать полностью…

Java Books

Apache Kafka 4.x - продвинутый бесплатный практический курс 2026 года

https://github.com/justxor/KAFKAFREECOURSR/tree/main

Читать полностью…

Java Books

Школа программирования Java Online Projects поздравляет с Днем Знаний!🧑‍🎓📚

Вышло наше финальное занятие курса по Микросервисной архитектуре — «Нагрузочное тестирование. Gatling». На нем мы на практике разбираем, как наше приложение ведет себя под реальной высокой нагрузкой.
Вместе с ним мы запускаем последнюю акцию перед подорожанием:

🔥 Скидка 50% на курсы «Микросервисы, Kafka, Docker Spring Cloud, WebFlux» и «Деплой микросервисов в Kubernetis/Helm»
✨ Бонусы: выпускные проекты Rescue Service и TopJava2
✨ Курс TopKotlin или DocJava в подарок

Суперпредложение: скидка 55% скидка на всю линейку Микросервисов + все бонусы включены🔥

Программа на 100% покрывает продвинутый стек компетенций:

✨ Архитектура и веб-стек — начинаем с реактивных приложений: Project Reactor, Spring WebFlux, R2DBC. Дальше переходим на Spring Boot 4 — полный MVC-стек и виртуальные потоки (Virtual Threads).

✨ Инфраструктура Spring Cloud — отказоустойчивые системы на Spring Cloud Gateway и Config Server, паттерны Circuit Breaker, RateLimiter, Retry.

✨ Event-Driven & Data — асинхронное взаимодействие через Kafka, сериализация в Avro и хранение схем в Schema Registry, паттерн Outbox с Kafka Connect и Debezium поверх PostgreSQL, Hibernate/JPA и миграции Flyway.

✨ Безопасность — сквозная аутентификация и авторизация на Keycloak, OAuth 2.0, OpenID Connect и JWT, защита от CSRF, хранение сессий в Redis.

✨ Тестирование и качество — интеграционные тесты с Testcontainers, WireMock и Awaitility, проверка под высокой нагрузкой с Gatling.

✨ Observability — метрики, логи и распределенные трассировки через Micrometer, Prometheus, Loki, Tempo (или Zipkin) и визуализация всего этого в Grafana.

✨ DevOps и развертывание — пайплайны в GitHub Actions, Docker и Docker Compose, оркестрация в Kubernetes, управление релизами через Helm.

🚀 Больше 30 технологий в одной линейке!

Успейте забрать курсы по суперцене до окончания акции! 💥

Читать полностью…

Java Books

🔥 Java: subList() может неожиданно удерживать огромный список в памяти

Кажется, что:


List<Item> small = hugeList.subList(0, 10);
hugeList = null;


оставит только 10 элементов.

Но subList() обычно создаёт представление исходного списка, а не независимую копию. Пока жив small, исходный ArrayList и его внутренний массив тоже могут оставаться в памяти.

Если нужна отдельная маленькая коллекция:


List<Item> small = new ArrayList<>(hugeList.subList(0, 10));


Особенно неприятный баг в кэшах и долгоживущих объектах: сохраняешь 10 элементов — а в памяти остаются сотни тысяч.

Читать полностью…

Java Books

Java-ловушка: почему `parallelStream()` может замедлить приложение

Многие думают:

«Есть stream(), добавлю parallelStream() — станет быстрее».

Но не всегда.

parallelStream() использует общий ForkJoinPool Java:


users.parallelStream()
.map(this::callExternalApi)
.toList();


Если внутри идут HTTP-запросы, SQL или ожидание внешнего сервиса, можно получить обратный эффект:

забить общий пул потоков
увеличить задержки
замедлить другие части приложения

parallelStream() хорошо подходит для:

✅ сложных CPU-вычислений
✅ обработки больших коллекций
✅ математических операций

Но плохо подходит для:

❌ HTTP
❌ базы данных
❌ файлового I/O
❌ ожидания внешних сервисов

Для таких задач лучше использовать отдельный пул:


ExecutorService executor =
Executors.newFixedThreadPool(20);


и контролировать количество параллельных операций.

Главное правило:

parallelStream() — для вычислений.
ExecutorService — для бизнес-логики и внешних вызовов.

Код может идеально работать на тестах, но в production внезапно получить проблемы из-за одного parallelStream().

Читать полностью…

Java Books

Полезный Java-совет:

Не вызывай parallelStream() просто потому, что данных много.

Для коротких операций он легко оказывается медленнее обычного stream(), потому что платишь за разбиение задачи, синхронизацию и работу ForkJoinPool.

Особенно неприятно то, что по умолчанию parallelStream() использует общий ForkJoinPool.commonPool(). Если приложение уже нагружает его другими задачами, производительность может внезапно просесть вообще в другом месте.

Если параллелизм реально нужен, лучше контролировать executor явно, а не прятать его внутри parallelStream().

Читать полностью…

Java Books

💻 Как прокачать фронтенд, бэкенд и зайти в разработку ИИ-систем

Современный веб-интерфейс на React, сложные архитектуры, асинхронность или сборка RAG-пайплайнов — все эти вещи требуют плотной практики. Если планируете расти в грейде, освоить новую профессию или менять стек, скоро завершается прием документов на двухлетнюю онлайн-магистратуру ИТМО в партнерстве с Яндекс Практикумом «Фронтенд-, бэкенд‑разработка и ИИ‑решения».

Учеба идет по вечерам, так что бросать текущую работу не придется. При этом сохраняются все бонусы очников, включая студенческие льготы.

Что ждет студентов:

— Разделение по уровням. Сетка из 9 треков на выбор: от старта с нуля на Java, Python, C++ или JS до хардовых программ для продвинутых. Там уже будут разбирать Spring Boot, Kafka, Cloud Native, C++ под Boost, NestJS и асинхронный бэкенд. 

— Отдельное направление «ИИ-решения в разработке». Оно заточено под проектирование LLM-систем, сборку RAG-пайплайнов и работу с мультиагентными сетями. 

— Практика, которой очень много. Сможете пополнить портфолио 10+ проектами, а еще будете решать реальные задачи от партнеров программы и команд Яндекса. 

— Применение AI с пользой. Научат отдавать нейросетям рутину: от дебага и рефакторинга до генерации тестов и документации.

Выпускники получают диплом магистра ИТМО и официальный диплом о профпереподготовке от Яндекса. Отбор проходит по вступительным испытаниям или по рекомендательному письму для выпускников Практикума. 

Узнать подробности. 

Читать полностью…

Java Books

Лето, ИТ-Пикник и музыка известных артистов уже через несколько дней!

8 августа в Коломенском пройдет ИТ-Пикник.

В программе — выступления проекта LAB Антона Беляева, IOWA, Cream Soda, Pompeya, мартина и Совы.

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

Зарегистрироваться и узнать подробности можно на сайте мероприятия.

В билет входит +1 — можно позвать близких и друзей.

До встречи в месте притяжения ИТ.

Читать полностью…

Java Books

Собираем бэкенд-комьюнити на JVM Day

Бэкендеры, 29 августа в Москве пройдет хардкорная конференция. Ждут своих: Java-, Scala- и Kotlin-разработчиков, архитекторов и тимлидов.

Здесь выступят и расскажут:
— Андрей Кулешов — что нового в мире JVM за год.
— Сергей Петрелевич — разработка по Mechanical Sympathy.
— Александр Ланцов — Java после Loom: другие модели concurrency.
— Антон Курако — как бенчмарки вводят в заблуждение.

А вечером во дворе T-Space — посиделки, интерактивы и открытый микрофон с историями ошибок.
Мест мало, а цена билета будет расти.

Успевай зарегистрироваться

Читать полностью…
Subscribe to a channel