Чтобы ускорить работу приложения, JVM включает в дело Just-In-Time (JIT) компилятор.
Он превращает часто выполняемый байткод в нативные машинные инструкции прямо во время исполнения.
— При старте приложения JVM интерпретирует байткод.
— Когда видит, например, что метод вызывается часто (т.н. hot method), — JIT компилирует его в машинный код.
— В следующий раз этот метод исполняется уже как нативный, без интерпретации.
— Всё это происходит «на лету» — поэтому Java-программы разгоняются после первых секунд работы.
Он сочетает плюсы интерпретации и компиляции:
— Быстрый старт приложения (интерпретация).
— Высокая производительность после разогрева (JIT).
— Inlining: подставляет код мелких методов прямо в место вызова.
— Escape Analysis: определяет, можно ли объект хранить на стеке вместо heap.
— Loop unrolling: разворачивает циклы для ускорения.
— Dead code elimination: выбрасывает ненужные операции.
— И другие алгоритмы.
Включите флаг:
-XX:+PrintCompilation
И увидите, какие методы компилируются во время исполнения.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤7🔥7
🏗 Курс “Software Architect” от OTUS — набор заканчивается! 🚨
Успейте занять место в группе курса «Software Architect»! Станьте экспертом в проектировании отказоустойчивых и масштабируемых систем. Пройдите вступительный тест и получите скидку, чтобы не пропустить старт обучения!
✅ Почему стоит пойти:
- 100% практики на реальных проектах
- Проектирование гибких архитектур
- Микросервисы, интеграции, Big Data
- Современные паттерны: CQRS, Event Sourcing
- Карьерный рост: рекомендации партнёрам для лучших
✅ Кому подойдёт:
- Разработчики, готовые к новому уровню
- Архитекторы, углубляющие экспертизу
- Тимлиды
✅ Что освоите:
- Проектирование масштабируемых архитектур
- Оптимизация взаимодействия сервисов
- Повышение качества и устойчивости систем
📌 Пройдите тест и забронируйте место со скидкой. Не упустите шанс стать экспертом в архитектуре систем! Подробности уточняйте у менеджера
👉 Пройти тестирование https://vk.cc/cRrOwD
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Успейте занять место в группе курса «Software Architect»! Станьте экспертом в проектировании отказоустойчивых и масштабируемых систем. Пройдите вступительный тест и получите скидку, чтобы не пропустить старт обучения!
✅ Почему стоит пойти:
- 100% практики на реальных проектах
- Проектирование гибких архитектур
- Микросервисы, интеграции, Big Data
- Современные паттерны: CQRS, Event Sourcing
- Карьерный рост: рекомендации партнёрам для лучших
✅ Кому подойдёт:
- Разработчики, готовые к новому уровню
- Архитекторы, углубляющие экспертизу
- Тимлиды
✅ Что освоите:
- Проектирование масштабируемых архитектур
- Оптимизация взаимодействия сервисов
- Повышение качества и устойчивости систем
📌 Пройдите тест и забронируйте место со скидкой. Не упустите шанс стать экспертом в архитектуре систем! Подробности уточняйте у менеджера
👉 Пройти тестирование https://vk.cc/cRrOwD
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤4🔥3👍2😁1🎅1
Рассмотрите этот, на первый взгляд, безобидный код:
public class SideEffectSurprise {
static int x = 10;
public static void main(String[] args) {
int result = x + increment() + x;
System.out.println("result = " + result);
System.out.println("x = " + x);
}
static int increment() {
return ++x;
}
}
Что выведет программа?
Почему?
Как именно вычисляется выражение x + increment() + x — слева направо или как-то иначе?
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤6👍5🔥2😁1
☃️ Зима близко...
Как и Java-митап от Мир Plat.Form!
Собираемся в тёплой компании, где обсудим:
❄️ Как реализовать справочники в реальном времени на PostgreSQL и Kafka
❄️ Чем Virtual Threads отличается от реактивного подхода
❄️ И узнаем, почему Unicode-текста могут ввести в ступор даже самого опытного разработчика
Познакомьтесь со спикерами и их докладами в карусели и регистрируйтесь на митап по ссылке➡ ️
Увидимся!
Реклама. АО "НСПК", ИНН 7706812159, erid 2Vtzqx5DouT
Как и Java-митап от Мир Plat.Form!
Мир Plat.Form — технологическая команда Национальной системы платежных карт (НСПК). Наши самые известные разработки — платёжная система «Мир» и Система быстрых платежей (СБП).
Собираемся в тёплой компании, где обсудим:
❄️ Как реализовать справочники в реальном времени на PostgreSQL и Kafka
❄️ Чем Virtual Threads отличается от реактивного подхода
❄️ И узнаем, почему Unicode-текста могут ввести в ступор даже самого опытного разработчика
Познакомьтесь со спикерами и их докладами в карусели и регистрируйтесь на митап по ссылке
Увидимся!
27 ноября, 18:00-22:00
Москва, 3-й Красносельский переулок, 19, стр. 13
(Зал «Grey Green»)
Реклама. АО "НСПК", ИНН 7706812159, erid 2Vtzqx5DouT
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5🔥3
Обновлять сервис без остановки — не роскошь, а необходимость. Ни пользователи, ни ваши коллеги не должны видеть "502 Bad Gateway", пока вы выкатываете новую версию.
Пошагово разберём, как сделать быстрый и бесшовный деплой с балансировкой между версиями.
FROM eclipse-temurin:21-jdk
WORKDIR /app
COPY target/myapp.jar app.jar
ENTRYPOINT ["java","-jar","/app/app.jar"]
Собираем образ:
docker build -t myapp:1.0.0 .
Создаём docker-compose.yml:
version: '3.8'
services:
traefik:
image: traefik:v3.1
command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
myapp_v1:
image: myapp:1.0.0
labels:
- "traefik.enable=true"
- "traefik.http.routers.myapp.rule=Host(`myapp.local`)"
- "traefik.http.services.myapp.loadbalancer.server.port=8080"
Запускаем:
docker compose up -d
Traefik автоматически поднимет роутер и начнёт проксировать трафик.
Создаём новый образ:
docker build -t myapp:1.1.0 .
Добавляем в docker-compose.yml рядом:
myapp_v2:
image: myapp:1.1.0
labels:
- "traefik.enable=true"
- "traefik.http.routers.myapp.rule=Host(`myapp.local`)"
- "traefik.http.services.myapp.loadbalancer.server.port=8080"
Теперь Traefik балансирует между двумя версиями — 1.0.0 и 1.1.0.
Можно спокойно проверить, что новая версия работает корректно.
Если всё ок — выключаем старый контейнер:
docker compose stop myapp_v1
docker compose rm -f myapp_v1
Traefik мгновенно перестроит маршрут — без обрывов соединений.
Ни один пользователь не заметит переключения.
В application.yml:
management:
endpoints:
web:
exposure:
include: health
И в Docker-compose:
healthcheck:
test: ["CMD", "curl", "-f", "https://localhost:8080/actuator/health"]
interval: 10s
timeout: 3s
retries: 3
Traefik будет держать в балансе только живые инстансы.
Всё просто и надёжно.
— Обновления без простоев
— Автоматическую балансировку
— Self-healing через health-checks
— Легко масштабируемую инфраструктуру для staging/prod
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤9👍5
Метод PutAll()
Метод putAll() используется для копирования всех элементов одной хэш-таблицы или Map в другую. Он принимает в качестве аргумента другую Map или хэш-таблицу, и копирует все её пары ключ-значение в исходную коллекцию.
Метод putAll() не возвращает значения и не бросает исключений.
Этот метод удобен, когда нужно быстро скопировать данные из одной коллекции в другую. Он работает быстрее, чем добавлять элементы в цикле.
Если в конечной коллекции уже есть ключи, которые содержатся в исходной Map, то значения этих ключей будут перезаписаны.
Также с помощью этого метода можно объединять данные из нескольких Map в одну целевую коллекцию.
Подписывайся на наш канал в Max🟪
Метод putAll() используется для копирования всех элементов одной хэш-таблицы или Map в другую. Он принимает в качестве аргумента другую Map или хэш-таблицу, и копирует все её пары ключ-значение в исходную коллекцию.
Метод putAll() не возвращает значения и не бросает исключений.
Этот метод удобен, когда нужно быстро скопировать данные из одной коллекции в другую. Он работает быстрее, чем добавлять элементы в цикле.
Если в конечной коллекции уже есть ключи, которые содержатся в исходной Map, то значения этих ключей будут перезаписаны.
Также с помощью этого метода можно объединять данные из нескольких Map в одну целевую коллекцию.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3🔥2
Библиотека Spring Boot Startup Report генерирует интерактивные отчеты о работе приложений Spring Boot,и помогает понять, что влияет на время загрузки и запуска приложения, что может помочь в оптимизации
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7🔥3
VK Видео
OAuth 2.0 авторизация в Java Spring Boot приложении: Пошаговое руководство
В этом видео мы подробно рассмотрим процесс реализации OAuth 2.0 авторизации в Java Spring Boot приложении. 🚀 Вы узнаете, как настроить аутентификацию и обеспечить безопасность вашего приложении.🔐 Это руководство будет полезно как для начинающих разработчиков…
OAuth 2.0 авторизация в Java Spring Boot приложении: Пошаговое руководство
В этом видео мы подробно рассмотрим процесс реализации OAuth 2.0 авторизации в Java Spring Boot приложении. 🚀
Вы узнаете, как настроить аутентификацию и обеспечить безопасность вашего приложении.🔐
Это руководство будет полезно как для начинающих разработчиков, так и для тех, кто уже знаком с Java Spring Boot и хочет углубить свои знания в области безопасности и авторизации. 💻
📺 🗣 СМОТРЕТЬ RUTUBE
🌐 🗣 СМОТРЕТЬ VKVIDEO
Подписывайся на наш канал в Max🟪
В этом видео мы подробно рассмотрим процесс реализации OAuth 2.0 авторизации в Java Spring Boot приложении. 🚀
Вы узнаете, как настроить аутентификацию и обеспечить безопасность вашего приложении.🔐
Это руководство будет полезно как для начинающих разработчиков, так и для тех, кто уже знаком с Java Spring Boot и хочет углубить свои знания в области безопасности и авторизации. 💻
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥4
Неожиданное введение в Spring MVC
Spring MVC кажется сложным — пока не поймёшь, как он вырос из обычных сервлетов. На вебинаре шаг за шагом соберём свой первый фреймворк и разберёмся, зачем нужен MVC.
Приглашаем на открытый урок.
📅 Встречаемся 24 ноября в 20:00 мск.
Расскажет Александр Оруджев — Senior Software Engineer. Встречаемся на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом разберете:
• как сервлеты превратились в контроллеры;
• что делает Spring под капотом;
• как построить собственный мини-MVC и понять принципы работы фреймворка.
После вебинара вы:
— поймёте архитектуру MVC без заучивания;
— перестанете бояться Spring MVC и начнёте использовать его осознанно;
— сделаете первый шаг к системному пониманию backend-разработки.
24 ноября в 20:00 открытый урок проходит в преддверие старта курса «Разработчик на Spring Framework». Все участники получат скидку на обучение.
👉 Регистрация бесплатная, но количество мест ограничено — успей занять своё место: https://vk.cc/cRyMsT
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Spring MVC кажется сложным — пока не поймёшь, как он вырос из обычных сервлетов. На вебинаре шаг за шагом соберём свой первый фреймворк и разберёмся, зачем нужен MVC.
Приглашаем на открытый урок.
📅 Встречаемся 24 ноября в 20:00 мск.
Расскажет Александр Оруджев — Senior Software Engineer. Встречаемся на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом разберете:
• как сервлеты превратились в контроллеры;
• что делает Spring под капотом;
• как построить собственный мини-MVC и понять принципы работы фреймворка.
После вебинара вы:
— поймёте архитектуру MVC без заучивания;
— перестанете бояться Spring MVC и начнёте использовать его осознанно;
— сделаете первый шаг к системному пониманию backend-разработки.
24 ноября в 20:00 открытый урок проходит в преддверие старта курса «Разработчик на Spring Framework». Все участники получат скидку на обучение.
👉 Регистрация бесплатная, но количество мест ограничено — успей занять своё место: https://vk.cc/cRyMsT
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
❤4🔥3👍2
💡 Совет по Java
С паттерн-матчингом для
Пример:
Подписывайся на наш канал в Max🟪
С паттерн-матчингом для
instanceof в Java можно объявлять переменную прямо внутри проверки. Это избавляет от лишнего каста и делает код чище.Пример:
if (obj instanceof String s) {
System.out.println("Длина строки: " + s.length());
}
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍12🔥5
🏆 Пройди тест из 10 вопросов, проверь свой уровень знаний и приходи учиться на онлайн-курс «Kotlin Backend Developer. Professional» от OTUS!
На курсе:
🎫 Курс можно приобрести в рассрочку
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥2❤🔥1
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
13%
Программа зациклится, но не упадёт, потому что JVM оптимизирует хвостовую рекурсию.
16%
Будет выброшен OutOfMemoryError, потому что стек вызовов переполнится.
67%
Будет выброшен StackOverflowError, потому что стек вызовов переполнится.
5%
Программа завершится без ошибки, так как рекурсия обрывается автоматически после 1000 вызовов.
Клон Redis на Java с нуля | Полный проект
Добро пожаловать в полный гайд по созданию Redis с нуля на Java!
В этом видео ты узнаешь, как работают базовые команды Redis, реализуешь репликацию, персистентность, стримы и транзакции — всё своими руками, без фреймворков и тяжёлых библиотек.
Погружаемся в систему, которую используют миллионы — на чистом Java-коде!
🌐 🗣 СМОТРЕТЬ VKVIDEO
Подписывайся на наш канал в Max🟪
Добро пожаловать в полный гайд по созданию Redis с нуля на Java!
В этом видео ты узнаешь, как работают базовые команды Redis, реализуешь репликацию, персистентность, стримы и транзакции — всё своими руками, без фреймворков и тяжёлых библиотек.
Погружаемся в систему, которую используют миллионы — на чистом Java-коде!
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍7❤4
Интерфейс Supplier
Интерфейс Supplier — это функциональный интерфейс в языке программирования Java, определенный в пакете java.util.function. Он представляет собой интерфейс, который может использоваться для предоставления значений, но не принимает аргументов. В этом интерфейсе есть один метод, который не принимает аргументов и возвращает значение.
Метод Supplier:
T get();
Где T — это тип возвращаемого значения.
Supplier может быть полезным, когда вам нужно получить значение, но не требуется передавать какие-либо аргументы для его получения. Этот интерфейс часто используется, например, в лямбда-выражениях и стримах для предоставления значений.
Подписывайся на наш канал в Max🟪
Интерфейс Supplier — это функциональный интерфейс в языке программирования Java, определенный в пакете java.util.function. Он представляет собой интерфейс, который может использоваться для предоставления значений, но не принимает аргументов. В этом интерфейсе есть один метод, который не принимает аргументов и возвращает значение.
Метод Supplier:
T get();
Где T — это тип возвращаемого значения.
Supplier может быть полезным, когда вам нужно получить значение, но не требуется передавать какие-либо аргументы для его получения. Этот интерфейс часто используется, например, в лямбда-выражениях и стримах для предоставления значений.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤5🔥5
Предполагает отправку имени пользователя и пароля с каждым запросом, но может быть менее безопасной без шифрования.
Подходит для простых приложений, где безопасность и шифрование не являются приоритетом, или при использовании защищенных соединений.
Использует сгенерированные токены, такие как JSON Web Tokens (JWT), которые обмениваются между клиентом и сервером, обеспечивая повышенную безопасность без необходимости отправки учетных данных с каждым запросом.
Идеально подходит для более безопасных и масштабируемых систем.
Позволяет сторонним приложениям получать ограниченный доступ к ресурсам пользователя без раскрытия учетных данных, выдавая токены доступа после аутентификации пользователя.
Подходит для ситуаций, требующих контролируемого доступа к ресурсам пользователя сторонними приложениями или сервисами.
Назначает уникальные ключи пользователям или приложениям, которые отправляются в заголовках или параметрах; несмотря на простоту, может не обладать всеми преимуществами безопасности, как методы на основе токенов или OAuth.
Удобна для простого контроля доступа в менее чувствительных средах или для предоставления доступа к определённым функциям без необходимости предоставления разрешений, привязанных к конкретному пользователю.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4❤3
🧩 Борьба с блокировками в PostgreSQL: как достичь высокой параллельности при большой нагрузке 🚀
🔥 2 декабря в 20:00 мск — открытый урок в OTUS.
📌 На вебинаре рассмотрим:
— Почему возникают блокировки и как они влияют на скорость работы базы данных
— Типы блокировок в PostgreSQL и их особенности на уровне транзакций и строк
— Как находить узкие места, анализировать ожидания и устранять deadlock-и
— Методы оптимизации запросов и транзакций для повышения параллельности
— Архитектурные приёмы и практики проектирования систем с высокой конкурентностью
🎓 После урока вы:
— Поймёте, как устроен механизм блокировок и научитесь управлять ими осознанно
— Научитесь диагностировать и устранять конфликты между транзакциями
— Получите набор практических решений по оптимизации PostgreSQL под нагрузкой
— Сможете спроектировать архитектуру, обеспечивающую высокую стабильность и масштабируемость
👉 Регистрация https://vk.cc/cRLjY4
Бесплатное занятие приурочено к старту курса Highload Architect, на котором вы освоите подходы к построению производительных архитектур, готовых к тысячам запросов в секунду.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥 2 декабря в 20:00 мск — открытый урок в OTUS.
📌 На вебинаре рассмотрим:
— Почему возникают блокировки и как они влияют на скорость работы базы данных
— Типы блокировок в PostgreSQL и их особенности на уровне транзакций и строк
— Как находить узкие места, анализировать ожидания и устранять deadlock-и
— Методы оптимизации запросов и транзакций для повышения параллельности
— Архитектурные приёмы и практики проектирования систем с высокой конкурентностью
🎓 После урока вы:
— Поймёте, как устроен механизм блокировок и научитесь управлять ими осознанно
— Научитесь диагностировать и устранять конфликты между транзакциями
— Получите набор практических решений по оптимизации PostgreSQL под нагрузкой
— Сможете спроектировать архитектуру, обеспечивающую высокую стабильность и масштабируемость
👉 Регистрация https://vk.cc/cRLjY4
Бесплатное занятие приурочено к старту курса Highload Architect, на котором вы освоите подходы к построению производительных архитектур, готовых к тысячам запросов в секунду.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤3👍3🔥3
В JUnit 5 можно смело использовать package-private классы и методы в тестах.
Это помогает держать тестовую логику ближе к коду, который вы проверяете, и не засорять публичный API.
Меньше public — больше порядка в проекте.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤🔥3🔥3😁1🍾1