💎 Как работает String.intern() под капотом
Многие знают, что строки в Java «живут в пуле». Но что реально происходит, когда мы вызываем intern()?
1️⃣ Что такое String Pool
Java хранит все строковые литералы в специальной области памяти — String Intern Pool. Зачем? Чтобы одинаковые строки не занимали память несколько раз.
Обе ссылки указывают на одну и ту же строку из пула.
2️⃣ Как работает intern()
Если вызвать s.intern():
— JVM проверит, есть ли такая строка в пуле.
— Если есть, вернёт ссылку на неё.
— Если нет, добавит текущую строку в пул и вернёт ссылку.
Пример:
3️⃣ Под капотом JVM
🔹 До Java 7 String Pool находился в PermGen → можно было легко словить OOM.
🔹 Начиная с Java 7 (HotSpot) пул перенесли в heap, что сильно упростило жизнь.
🔹 Реализация — ConcurrentHashMap внутри JVM, так что intern() потокобезопасен.
4️⃣ Где это полезно
🔹 Оптимизация памяти при большом количестве одинаковых строк (например, при парсинге XML/JSON).
🔹 Сравнение строк через == (только если они гарантированно interned).
🔹 При работе с ключами в больших мапах, чтобы уменьшить дубли.
5️⃣ Подводные камни
🔹 intern() не бесплатен — поиск в пуле и вставка стоят ресурсов.
🔹 Чрезмерное использование может привести к росту heap-а и GC-паузам.
🔹 Нельзя бездумно использовать вместо обычных строк → легко получить деградацию.
🔗 Документация: String.intern()
💬 Использовали когда-нибудь intern() в продакшене?
🐸 Библиотека джависта
#CoreJava
Многие знают, что строки в Java «живут в пуле». Но что реально происходит, когда мы вызываем intern()?
Java хранит все строковые литералы в специальной области памяти — String Intern Pool. Зачем? Чтобы одинаковые строки не занимали память несколько раз.
String a = "hello";
String b = "hello";
System.out.println(a == b); // true
Обе ссылки указывают на одну и ту же строку из пула.
Если вызвать s.intern():
— JVM проверит, есть ли такая строка в пуле.
— Если есть, вернёт ссылку на неё.
— Если нет, добавит текущую строку в пул и вернёт ссылку.
Пример:
String x = new String("world");
String y = x.intern();
String z = "world";
System.out.println(x == z); // false
System.out.println(y == z); // true
🔹 До Java 7 String Pool находился в PermGen → можно было легко словить OOM.
🔹 Начиная с Java 7 (HotSpot) пул перенесли в heap, что сильно упростило жизнь.
🔹 Реализация — ConcurrentHashMap внутри JVM, так что intern() потокобезопасен.
🔹 Оптимизация памяти при большом количестве одинаковых строк (например, при парсинге XML/JSON).
🔹 Сравнение строк через == (только если они гарантированно interned).
🔹 При работе с ключами в больших мапах, чтобы уменьшить дубли.
🔹 intern() не бесплатен — поиск в пуле и вставка стоят ресурсов.
🔹 Чрезмерное использование может привести к росту heap-а и GC-паузам.
🔹 Нельзя бездумно использовать вместо обычных строк → легко получить деградацию.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🤔2🔥1
Чтобы вам было проще ориентироваться в постах, мы разделили весь контент по 4 основным направлениям:
🔹 #CoreJava — фундаментальные знания: JVM, JDK, ООП, многопоточность, паттерны и базовые концепции. Всё, что помогает понимать Java глубже, а не просто «писать код, чтобы работало».
🔹 #Enterprise — прикладные инструменты и практика: Spring, Hibernate, Kafka, Docker, микросервисы. Всё, что встречается в работе разработчика каждый день.
🔹 #DevLife — сообщество и карьера: мемы, холивары, задачи с собесов, советы по развитию и личные рубрики. Всё, что создаёт атмосферу и объединяет нас как комьюнити.
🔹 #News — дайджесты, свежие анонсы, релизы и новости. А также реклама и инфоповоды, которые стоит знать.
👉 Используйте теги, чтобы быстро находить посты по интересующей теме.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3👏1
Библиотека джависта | Java, Spring, Maven, Hibernate pinned «📌 Как пользоваться тегами в канале Чтобы вам было проще ориентироваться в постах, мы разделили весь контент по 4 основным направлениям: 🔹 #CoreJava — фундаментальные знания: JVM, JDK, ООП, многопоточность, паттерны и базовые концепции. Всё, что помогает…»
🚀 Релиз Java 25
Сегодня, 16 сентября 2025 года, вышла Java 25, новая версия с долгосрочной поддержкой (LTS). Выпуск включает 18 JEP'ов, среди которых как стабильные, так и экспериментальные и предварительные.
🔹 Полезные новшества:
— JEP 502: Stable Values. Введение нового типа для неизменяемых объектов с отложенной инициализацией.
— JEP 505: Structured Concurrency. Упрощение работы с многозадачностью.
— JEP 506: Scoped Values. Новый способ передачи неизменяемых данных между потоками.
— JEP 513: Flexible Constructor Bodies. Упрощение написания конструктора с кодом до вызова родительского конструктора.
🔹 Не очень важные:
— JEP 512: Compact Source Files. Убирает необходимость в public static void main(String[] args) — интересно только для скриптов и быстрых утилит.
— JEP 511: Module Import Declarations. Упрощение импорта классов и интерфейсов из модулей, хотя это и так на себя берёт IDE.
— JEP 470: PEM Encodings of Cryptographic Objects. Нужно для специфических криптографических нужд, но для большинства проектов — не критично.
— JEP 510: Key Derivation Function API. Обеспечивает работу с производными ключами, но для большинства приложений не станет приоритетом.
— JEP 521: Generational Shenandoah. Улучшения в сборщике мусора для специфических сценариев — для обычных проектов изменения не значительны.
🐸 Библиотека джависта
#News
Сегодня, 16 сентября 2025 года, вышла Java 25, новая версия с долгосрочной поддержкой (LTS). Выпуск включает 18 JEP'ов, среди которых как стабильные, так и экспериментальные и предварительные.
🔹 Полезные новшества:
— JEP 502: Stable Values. Введение нового типа для неизменяемых объектов с отложенной инициализацией.
— JEP 505: Structured Concurrency. Упрощение работы с многозадачностью.
— JEP 506: Scoped Values. Новый способ передачи неизменяемых данных между потоками.
— JEP 513: Flexible Constructor Bodies. Упрощение написания конструктора с кодом до вызова родительского конструктора.
🔹 Не очень важные:
— JEP 512: Compact Source Files. Убирает необходимость в public static void main(String[] args) — интересно только для скриптов и быстрых утилит.
— JEP 511: Module Import Declarations. Упрощение импорта классов и интерфейсов из модулей, хотя это и так на себя берёт IDE.
— JEP 470: PEM Encodings of Cryptographic Objects. Нужно для специфических криптографических нужд, но для большинства проектов — не критично.
— JEP 510: Key Derivation Function API. Обеспечивает работу с производными ключами, но для большинства приложений не станет приоритетом.
— JEP 521: Generational Shenandoah. Улучшения в сборщике мусора для специфических сценариев — для обычных проектов изменения не значительны.
#News
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3❤1👏1
Byteman — это фреймворк для «инъекций» в байткод во время выполнения. Он позволяет менять поведение Java-программ без пересборки и изменения исходного кода.
— Правила-инъекции на DSL (можно подмешать логику в любой метод).
— Удобен для тестирования сложных сценариев (например, эмуляция исключений или задержек).
— Поддержка динамической подгрузки/удаления правил без перезапуска приложения.
— Используется для отладки, тестирования отказоустойчивости и профилирования.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3⚡1
Anonymous Poll
19%
Офис с печеньками
73%
Дома в тишине
6%
Уютный коворкинг/кафе
2%
Свой вариант в комменты
👍3🔥3😁2
ORM (Object-Relational Mapping) — это мост между объектами Java и реляционными базами данных. Вместо того, чтобы писать SQL-запросы руками, вы работаете с привычными объектами и методами.
🔹 Зачем нужен ORM
В Java идет работа с классами, полями, методами. В базе данных всё хранится в виде таблиц, строк и столбцов. ORM выступает «переводчиком»:
— Таблица ↔️ Класс
— Строка ↔️ Объект
— Столбец ↔️ Поле
ORM берёт на себя «грязную работу»:
1. При создании объекта в коде (new User("Alex")) и вызове save(), ORM формирует SQL-запрос
INSERT INTO users (name) VALUES ('Alex')
и отправляет его в базу.2. Когда вы хотите достать данные (userRepository.findById(1)), ORM делает
SELECT * FROM users WHERE id=1
, создаёт объект User и наполняет его полями из результата запроса.3. Если вы меняете поле (user.setName("Ivan")) и сохраняете, ORM сгенерирует
UPDATE users SET name='Ivan' WHERE id=1
.4. Если объект больше не нужен и вы вызываете delete(), ORM сформирует
DELETE FROM users WHERE id=1
.То есть вы оперируете объектами и методами, а ORM переводит ваши действия в SQL и обратно.
🔹 Плюсы ORM
— Меньше шаблонного кода. Не нужно постоянно писать INSERT, SELECT, UPDATE.
— Более читаемо. Идет работа с методами вроде userRepository.findByEmail(), а не с SQL запросами.
— Кросс-СУБД. ORM умеет подстраиваться под разные базы (PostgreSQL, MySQL, Oracle).
— Интеграция. Легко комбинируется со Spring и другими фреймворками.
🔹 Минусы ORM
— Иллюзия простоты. Кажется, что можно забыть про SQL, но «под капотом» всё равно генерируются запросы.
— Проблема N+1. Частая ошибка, когда ORM делает сотни мелких запросов вместо одного «жирного».
— Сложные кейсы. Для тяжёлой аналитики или оптимизации всё равно пишут чистый SQL или хранят процедуры.
— Производительность. ORM добавляет прослойку, которая может стать узким местом при больших нагрузках.
🔹 Типичные ловушки ORM
— Ленивая загрузка (Lazy Click Me Load More). Может неожиданно тянуть данные из БД в середине транзакции.
— Кэширование. ORM кэширует объекты, но если работать невнимательно, то легко получить «старые» данные.
— Транзакции. Многие забывают, что ORM не волшебная палочка: без грамотной работы с транзакциями данные могут остаться в полупрозрачном состоянии.
🔹 Основные инструменты в Java
— JPA (Java Persistence API). Стандарт, описывающий, как именно должны работать ORM-инструменты.
— Hibernate. Самый популярный провайдер JPA, фактический стандарт в экосистеме Java.
— EclipseLink, OpenJPA. Альтернативные реализации, реже используемые.
— Spring Data JPA. Надстройка над JPA, позволяющая писать репозитории и автогенерировать запросы из названий методов.
🔹 ORM или не ORM
— Приложение типовое (CRUD, REST API, веб-сервисы)
— Важна скорость разработки и поддерживаемость
— Команда не хочет тратить часы на ручные SQL-запросы
— Высоконагруженная система с миллионами записей
— Важен каждый миллисекундный отклик
— Есть сложная аналитика или отчёты (там SQL быстрее и прозрачнее)
ORM — это «помощник», а не замена знаний SQL. Он снимает рутину и ускоряет разработку, но требует грамотного использования. Понимать, что происходит «под капотом», — ключ к тому, чтобы не наступать на грабли.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤6🔥2
✅ Чек-лист по Spring Boot профилям
Чтобы не путаться в окружениях и не тащить dev в прод 🚨 — держите компактный список best practices.
Карточка для сохранения👆🏻
🐸 Библиотека джависта
#Enterprise
Чтобы не путаться в окружениях и не тащить dev в прод 🚨 — держите компактный список best practices.
Карточка для сохранения👆🏻
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3❤1👾1
Приглашаем на Java Jam — бесплатный митап ЮMoney для Java-разработчиков 🔥
Спикеры из ЮMoney и главный эксперт по технологиям Сбера расскажут о своём опыте и пообщаются с аудиторией.
Вот какие темы будут на митапе:
🟣 Как мы уменьшали нагрузку на базы данных в очередях задач. Расскажем, как реализовать надёжное асинхронное и отложенное исполнение задач.
🟣 Советы по производительному коду. Поговорим про время выполнения программ, работу со строками и коллекциями, вещественную и битовую арифметику, алгоритмические трюки и многое другое.
🟣 Уязвимости не пройдут. Обсудим, как повысить безопасность разработки с помощью SAST и SCA.
25 сентября, в четверг, в 18:30 (мск) — приходите на митап в Санкт-Петербурге или подключайтесь онлайн.
Зарегистрируйтесь, чтобы принять участие. Все подробности — на сайте митапа Java Jam™
Спикеры из ЮMoney и главный эксперт по технологиям Сбера расскажут о своём опыте и пообщаются с аудиторией.
Вот какие темы будут на митапе:
25 сентября, в четверг, в 18:30 (мск) — приходите на митап в Санкт-Петербурге или подключайтесь онлайн.
Зарегистрируйтесь, чтобы принять участие. Все подробности — на сайте митапа Java Jam
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.
Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».
🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.
Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏
👉 Регистрируйтесь через форму на лендинге
Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».
🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.
Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏
👉 Регистрируйтесь через форму на лендинге
😢3❤1
Forwarded from Библиотека задач по Java | тесты, код, задания
Из-за чего возможна ошибка в рантайме?
Anonymous Quiz
15%
Метод equals вызывается от null
51%
Нет проверки, является ли obj экземпляром BadEquals
21%
Проблема с доступом к полю id
5%
Поле id неинициализировано
9%
Посмотреть ответ
👍4🔥4👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁33💯4🔥3😢1
Spring Boot из коробки интегрируется с Micrometer, позволяя собирать метрики и отправлять их в Prometheus, Grafana или другие системы мониторинга. Чтобы быстро поднять стек наблюдаемости — подключаем AI.
📝 Промпт:
Generate an observability integration for a Spring Boot 3 application using Micrometer and Prometheus.
— Enable Micrometer metrics in a Spring Boot application.
— Configure PrometheusMeterRegistry for collecting application metrics.
— Expose /actuator/prometheus endpoint for Prometheus scraping.
— Add custom application metrics using MeterRegistry (timers, counters, gauges).
— Configure histograms for REST API response times.
— Integrate Micrometer with Logback for unified metrics and logging.
— Enable health checks with Spring Boot Actuator (disk space, DB, cache).
— Set up Grafana dashboards for visualizing metrics and alerts.
— Добавьте
Enable Distributed Tracing with OpenTelemetry
для отслеживания запросов в распределённых системах.— Добавьте
Configure Grafana Alertmanager integration
для настройки алертов и уведомлений.— Добавьте
Implement custom business metrics (e.g. orders per minute)
для отслеживания доменных метрик приложения.#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2❤1
Топ-3 статьи о Java и сопутствующих технологиях за неделю по мнению нашего канала.
Рекомендую хорошее читабельное введение в Spring Security.
Это не просто обзор API, а систематизированный конспект, где наглядно разобраны ключевые механизмы: фильтры, аутентификация, авторизация, отличие stateful/stateless сценариев, CSRF-защита и работа с JWT.
Реализация системы сообщений между экземплярами сервисов через общую базу данных: секционированная таблица, блокировки, планирование партиций, минимальное использование внешних систем типа Kafka/JMS.
Реальный кейс построения observability / tracing-системы при росте нагрузки. Здесь и сравнение стека (Zipkin, Jaeger, ClickHouse и др.), и как решать проблемы с семплированием без потери критичных данных.
#News
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Бэкенд, который изменил мир? Ха-ха, он ещё не начинал! 🚀
4 октября — ваш билет в новую реальность бэкенд-разработки. Конференция «я про бэкенд» в Москве и онлайн.
Здесь не будет «воды». Только прикладные кейсы и реальные примеры от тех, кто строит рекомендательные и генеративные технологии, которые уже влияют на миллионы пользователей. Эксперты из Яндекса, VK, Т-Банка, Сбера и Авито покажут, как они борются с нагрузкой, интегрируют ML и вообще выживают в этой бешеной гонке.
Вот о чем расскажут:
🔹 Антон Полднев (Яндекс Реклама): Как рекомендательный движок экономит 200 тысяч CPU в год.
🔹 Дмитрий Погорелов (VK): Эволюция движка VK и как они перезапустили ленту.
🔹 Михаил Чебаков (T-Банк): Как прятать сложность LLM-инференса за понятными числами.
🔹Андрей Шукшов (Яндекс R&D): Внутри LLM: как выжать максимум из decoder attention на GPU.
🔹 Алёна Васильева ( Шедеврум): Архитектура для ML-моделей и длинный инференс.
Хотите знать, куда движется мир бэкенда и ML? Это мастхэв!
✅ Подробности и регистрация, пока не разобрали все билеты
4 октября — ваш билет в новую реальность бэкенд-разработки. Конференция «я про бэкенд» в Москве и онлайн.
Здесь не будет «воды». Только прикладные кейсы и реальные примеры от тех, кто строит рекомендательные и генеративные технологии, которые уже влияют на миллионы пользователей. Эксперты из Яндекса, VK, Т-Банка, Сбера и Авито покажут, как они борются с нагрузкой, интегрируют ML и вообще выживают в этой бешеной гонке.
Вот о чем расскажут:
🔹 Антон Полднев (Яндекс Реклама): Как рекомендательный движок экономит 200 тысяч CPU в год.
🔹 Дмитрий Погорелов (VK): Эволюция движка VK и как они перезапустили ленту.
🔹 Михаил Чебаков (T-Банк): Как прятать сложность LLM-инференса за понятными числами.
🔹Андрей Шукшов (Яндекс R&D): Внутри LLM: как выжать максимум из decoder attention на GPU.
🔹 Алёна Васильева ( Шедеврум): Архитектура для ML-моделей и длинный инференс.
Хотите знать, куда движется мир бэкенда и ML? Это мастхэв!
✅ Подробности и регистрация, пока не разобрали все билеты
❤1👍1
⚡️ Бесплатный вебинар — ИИ-агенты: новая фаза развития AI
24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.
Тема:
На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.
Подробности рассказываем в гс выше — включай, чтобы не пропустить.
24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.
Тема:
«ИИ-агенты: новая фаза развития искусственного интеллекта».
На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.
Подробности рассказываем в гс выше — включай, чтобы не пропустить.
👍1
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Аннотация используется для обозначения класса как
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2🔥1