JVM в первую очередь процесс операционной системы. Но важно понимать, что требования к этому процессу на production отличатся от требований на workstation-е разработчика.
Если для разработчику важно, чтобы IDE работала быстро и не потребляла всю возможную память на машине, то для серверных JVM важно потреблять максимальный предоставленный ресурс и работать предельно быстро.
В новом переводе от команды Spring АйО разберем, какие существуют базовые настройки кучи, GC и CPU помогают синхронизировать JVM с лимитами контейнера и не переплачивать за простаивающие ресурсы.
Комментарий от Михаила Поливаха:
Все оптимизации в статье применимы не только к ARM-овым CPU, но и к x86. Это важно, потому что большая часть Ваших серверных workload-ов, даже если Вы об этом не знаете, они бегут на x86_64. Поэтому, статья для Вас тоже актуальна.
📚Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/1003602/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤11🔥5⚡1
❗️Spring АйО на Java Rock Stars meetup ❗️
Друзья, по традиции, эксперты Spring АйО выступят на ближайшем Java Rock Stars meetup.
5 марта. Москва. Лофт Casa Picassa на Бауманской.
💬 В программе:
– Илья и Фёдор Сазоновы расскажут о том, как обычные проекты внезапно начинают задыхаться при масштабировании, хотя пользователей и данных там не так много. Узнаем о причине проблем с производительностью и главном правиле работы с реляционными БД, которое регулярно нарушают.
– Александр Ланцов покажет, как работа со строками и произвольным Unicode в Java может поставить в тупик даже опытного разработчика, и разберёт типичные ошибки на примерах.
Для участия нужна только регистрация.
Друзья, по традиции, эксперты Spring АйО выступят на ближайшем Java Rock Stars meetup.
5 марта. Москва. Лофт Casa Picassa на Бауманской.
💬 В программе:
– Илья и Фёдор Сазоновы расскажут о том, как обычные проекты внезапно начинают задыхаться при масштабировании, хотя пользователей и данных там не так много. Узнаем о причине проблем с производительностью и главном правиле работы с реляционными БД, которое регулярно нарушают.
– Александр Ланцов покажет, как работа со строками и произвольным Unicode в Java может поставить в тупик даже опытного разработчика, и разберёт типичные ошибки на примерах.
Для участия нужна только регистрация.
🔥21❤11👍9⚡1
Forwarded from Amplicode
🔥 Тестирование API простыми словами + практика | Postman, Connekt
В новом видео разбираем тестирование API с нуля: что такое API, как работает HTTP, и переходим к практике в двух инструментах — Postman и Connekt.
В части про Postman: создаём GET и POST запросы, импортируем коллекции из Swagger, cURL и браузера, перехватываем трафик и настраиваем переменные окружения.
Дальше — то же самое в Connekt: импорт из Postman, работа с эндпоинтами Spring-приложения, все основные HTTP-методы, авторизация, работа с файлами, assertions и сложные сценарии с цепочками запросов.
😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
В новом видео разбираем тестирование API с нуля: что такое API, как работает HTTP, и переходим к практике в двух инструментах — Postman и Connekt.
В части про Postman: создаём GET и POST запросы, импортируем коллекции из Swagger, cURL и браузера, перехватываем трафик и настраиваем переменные окружения.
Дальше — то же самое в Connekt: импорт из Postman, работа с эндпоинтами Spring-приложения, все основные HTTP-методы, авторизация, работа с файлами, assertions и сложные сценарии с цепочками запросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍19🔥14❤10
✈️ Когда использовать параллельный стрим в Java?
Параллельные стримы работают через
Где параллельные стримы реально полезны:
📚 Подробнее тут: https://habr.com/ru/companies/spring_aio/articles/1005180/
parallelStream() не всегда быстрее: в бенчмарке sum(1..100) в параллели занял ~35 476 нс/оп против ~68 нс/оп в последовательном.Параллельные стримы работают через
ForkJoinPool.commonPool (кол-во потоков: ядра CPU - 1). Порядок обработки элементов не фиксирован, а некорректный reduce может дать неверный итог: identity прибавляется в каждом worker`е (например, reduce(5, sum)).Где параллельные стримы реально полезны:
– Большой объем данных и много вычислений на элемент (так называемая модель NQ: чем больше N*Q, тем выше шанс ускорения; для тривиального суммирования эмпирически N > 10 000).
– Источник легко и равномерно делится: массивы иArrayList. На 1 000 000 элементовArrayListв бенчмарке быстрее в параллели (~2.0 мс vs ~5.4 мс).
– Дешевая операция объединения результатов: reduce/sum обычно выигрывают. Например, сумма наArrayListбыстрее в параллели (~2.07 мс vs ~5.51 мс).
– Хорошая локальность данных. Например, массив примитивов (int[]) даёт больший выигрыш, чем массив ссылок (Integer[]), потому что меньше скачков по памяти.
– Есть I/O с большим числом объектов: поиск по 1500 текстовым файлам черезFiles.walkв параллели быстрее (~10.8 мс vs ~13.3 мс).
📚 Подробнее тут: https://habr.com/ru/companies/spring_aio/articles/1005180/
2👍23❤7🔥6⚡1
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤8👍6😁2
Сегодня мы живём в мире распределённых систем: Apache Kafka, Apache Spark, Apache Cassandra — это уже не экзотика, а повседневная инфраструктура продакшена.
Сервисы пишут события, стримы обрабатываются в реальном времени, данные реплицируются по датацентрам. И почти в каждом таком сценарии возникает фундаментальный вопрос:
Как понять, что произошло раньше, а что позже, если глобального времени не существует?
Здесь в игру вступают логические часы Лампорта — простая, но концептуально мощная идея, лежащая в основе причинно-следственного порядка в распределённых системах.
📚 Подробнее тут: https://habr.com/ru/companies/spring_aio/articles/1005934/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍10❤6
Cursor пришел в IDE JetBrains: IntelliJ IDEA, PyCharm, WebStorm и другие теперь подключают его через Agent Client Protocol (ACP). А это значит, что работать с агентом можно прямо в JetBrains-IDE.
Cursor ACP дает выбор модели под задачу: OpenAI, Anthropic, Google и модели Cursor. Под каждую модель у Cursor своя агентная обвязка, чтобы держать качество и скорость.
Как включить:
– установить Cursor ACP из ACP Registry
– авторизоваться существующей учеткой Cursor
Плагин является бесплатным для пользователей на платных тарифах Cursor.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21🔥11👍10
🧵 Введение в модели согласованности
Согласованность – это по сути контракт, описывающий семантику видимости изменений в общем ресурсе. Без модели вы не знаете, баг это или допустимое поведение системы.
Примеры моделей:
– Linearizability: запись включается сразу по реальному времени, после завершения её обязаны видеть все
– Serializable: транзакции атомарны, выглядят как выполненные согласно Prоgram Order, но не обязаны уважать реальное время
– Sequential Consistency: суперсет для Linearizability, где действия происходят лишь согласно Program Order, но не Real Time Clock.
– Causal: все процессы видят общий порядок только там, где есть причинность. Однако порядок независимых действий может интерпретироваться процессами по-разному.
– PRAM: каждый процесс видят «в его порядке», между процессами порядок может отличаться
Комментарий от Михаила Поливаха:
Выбор модели консистентности для программы – это часто трейд-офф между предсказуемостью и производительностью. Например, поддержать Serializable гораздо сложнее, чем поддержать Causal.
📚 Подробнее тут: https://habr.com/ru/companies/spring_aio/articles/1006474/
Согласованность – это по сути контракт, описывающий семантику видимости изменений в общем ресурсе. Без модели вы не знаете, баг это или допустимое поведение системы.
Примеры моделей:
– Linearizability: запись включается сразу по реальному времени, после завершения её обязаны видеть все
– Serializable: транзакции атомарны, выглядят как выполненные согласно Prоgram Order, но не обязаны уважать реальное время
– Sequential Consistency: суперсет для Linearizability, где действия происходят лишь согласно Program Order, но не Real Time Clock.
– Causal: все процессы видят общий порядок только там, где есть причинность. Однако порядок независимых действий может интерпретироваться процессами по-разному.
– PRAM: каждый процесс видят «в его порядке», между процессами порядок может отличаться
Комментарий от Михаила Поливаха:
Это статья хоть и теоретическая, но понимание моделей консистетности крайне важно для понимания семантики happens-before в Java, и к тому же для понимания, например, как и почему уровни изоляции транзакций работают так, как работают.
Выбор модели консистентности для программы – это часто трейд-офф между предсказуемостью и производительностью. Например, поддержать Serializable гораздо сложнее, чем поддержать Causal.
📚 Подробнее тут: https://habr.com/ru/companies/spring_aio/articles/1006474/
🔥15👍7❤4
Я тут поймал себя на мысли про ИИ-агентов и open source. Сразу уточню: речь не про проблему обучения ИИ на коде под лицензией.
Не знаю, как кодят другие, но мой текущий процесс выглядит примерно так:
• Сначала собираю спецификацию (
• По спецификации делаю план реализации;
• План отдаю ИИ-агенту.
В плане есть:
• гейты перехода между этапами;
• тесты;
• definition of done.
Дальше агент просто проходит по плану. Конечно, я сильно упрощаю, но общий принцип понятен.
И вот здесь возникает интересный момент.
Спецификацию можно собрать практически из чего угодно.
Например, из проекта под «заразной» лицензией вроде GNU GPL.
Можно внимательно изучить проект и написать подробную спецификацию:
• какие есть модули;
• как они взаимодействуют;
• какие алгоритмы используются;
• какие интерфейсы между компонентами.
По сути — полностью описать архитектуру системы. Причём даже не обязательно делать это вручную: с такой задачей вполне справится любой вменяемый ИИ-агент.
Дальше по этой спецификации другой ИИ-агент составляет план реализации, и запускается разработка. Через несколько итераций получается новый проект:
• он работает;
• код другой;
• структура файлов может быть другой;
• даже язык программирования может быть другим.
Но по сути это та же система, просто переписанная по спецификации.
Фактически получается что-то вроде автоматизированной clean-room реализации.
И вот тут возникает вопрос:
Защищает ли open-source лицензия от такого сценария?
Кажется, что нет. Потому что copyright защищает:
• конкретный код;
• конкретную реализацию.
Но не защищает:
• идеи;
• алгоритмы;
• архитектуру системы.
ИИ просто делает переход от чужой архитектуры к новой реализации очень дешёвым.
Раньше clean-room реализация требовала команды инженеров. Теперь это можно провернуть с помощью одного человека и пары ИИ-агентов (умножить на X).
Поэтому у меня появилась мысль:
Возможно, если кто-то действительно хочет защитить open-source проект от подобного «переизобретения», одной классической лицензии уже недостаточно.
Потому что лицензии регулируют копирование кода, а не пересборку системы по её описанию.
Утекшие исходники
Но это еще не все. Представим, что, не дай бог, исходники вашего закрытого ПО утекли в открытый доступ. Конечно же, никто в здравом виде не будет разворачивать ваш сервис у себя. Но теперь у любого есть армия неутомимых воинов за 100$-200$ в месяц, которые под чутким руководством могут скопировать ваш сервис так, что никто не придерется.
Возможно, ИИ просто подсветил старую юридическую проблему, которая раньше была менее заметна.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥24❤10👍10🤔8
🎬 Документальный фильм про IntelliJ IDEA - IDE, которая изменила Java-разработку
На YouTube вышел отличный документальный фильм про IntelliJ IDEA.
Для нас это особенно интересная история - всё-таки IntelliJ уже много лет является нашим основным инструментом разработки.
В фильме собрали довольно сильный состав участников. Среди них:
- Брайан Гетц (в особом представлении не нуждается)
- Джош Лонг (developer advocate Spring Framework)
- Максим Шафиров (Ex. CEO JetBrains)
- Дмитрий Жемеров (один из первых разработчиков языка Kotlin и автор книги "Kotlin in Action")
- Евгений Беляев (co-founder JetBrains)
- инженеры из Google, Docker, Miro и других компаний
Фильм построен как разговор о том, как вообще появилась IntelliJ IDEA и почему она стала тем инструментом, который мы знаем сегодня.
Там много интересных историй изнутри:
- как создавалась IntelliJ и какие идеи лежали в её основе
- как IDE конкурировала с Eclipse, который долгое время доминировал в Java
- почему появление Community Edition стало важным стратегическим решением
- как сложилось сотрудничество JetBrains и Google, приведшее к появлению Android Studio
- как менялась модель лицензирования и как на это реагировало сообщество
Плюс в фильме есть архивные кадры из ранних офисов JetBrains и воспоминания людей, которые участвовали в развитии платформы.
Отдельно интересно слушать комментарии разработчиков из индустрии. Например, инженеры Miro рассказывают, что их бэкенд построен на Java, Kotlin, Spring Boot, а IntelliJ для них - такая же инфраструктура разработки, как Wi-Fi в офисе: просто открываешь и работаешь.
Получилась довольно живая история про инструмент, без которого сегодня сложно представить разработку на Java.
Посмотреть точно стоит.
https://www.youtube.com/watch?v=Kourq_Lz03U
IntelliJ IDEA в каком-то смысле спасла Java от самой себя
(Брайан Гетц, архитектор языка Java)
На YouTube вышел отличный документальный фильм про IntelliJ IDEA.
Для нас это особенно интересная история - всё-таки IntelliJ уже много лет является нашим основным инструментом разработки.
В фильме собрали довольно сильный состав участников. Среди них:
- Брайан Гетц (в особом представлении не нуждается)
- Джош Лонг (developer advocate Spring Framework)
- Максим Шафиров (Ex. CEO JetBrains)
- Дмитрий Жемеров (один из первых разработчиков языка Kotlin и автор книги "Kotlin in Action")
- Евгений Беляев (co-founder JetBrains)
- инженеры из Google, Docker, Miro и других компаний
Фильм построен как разговор о том, как вообще появилась IntelliJ IDEA и почему она стала тем инструментом, который мы знаем сегодня.
Там много интересных историй изнутри:
- как создавалась IntelliJ и какие идеи лежали в её основе
- как IDE конкурировала с Eclipse, который долгое время доминировал в Java
- почему появление Community Edition стало важным стратегическим решением
- как сложилось сотрудничество JetBrains и Google, приведшее к появлению Android Studio
- как менялась модель лицензирования и как на это реагировало сообщество
Плюс в фильме есть архивные кадры из ранних офисов JetBrains и воспоминания людей, которые участвовали в развитии платформы.
Отдельно интересно слушать комментарии разработчиков из индустрии. Например, инженеры Miro рассказывают, что их бэкенд построен на Java, Kotlin, Spring Boot, а IntelliJ для них - такая же инфраструктура разработки, как Wi-Fi в офисе: просто открываешь и работаешь.
Получилась довольно живая история про инструмент, без которого сегодня сложно представить разработку на Java.
Посмотреть точно стоит.
https://www.youtube.com/watch?v=Kourq_Lz03U
YouTube
IntelliJ IDEA: The Documentary | An origin story
This is the IDE that changed everything.
This documentary traces the 25-year journey of one of the most beloved tools in software development. Through rare archival footage, intimate interviews, and behind-the-scenes moments, it explores how IntelliJ IDEA…
This documentary traces the 25-year journey of one of the most beloved tools in software development. Through rare archival footage, intimate interviews, and behind-the-scenes moments, it explores how IntelliJ IDEA…
🔥42👍17❤11😁2🤯1
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
😁17❤9🔥6🤯2