Можно ли считать Final переменную константой?
Поскольку у нас не получится присвоить новое значение для final переменной, кажется, что это переменные константы. Но это только на первый взгляд. Если тип данных, на который ссылается переменная — immutable, то да, это константа.
А если тип данных mutable, то есть изменяемый, при помощи методов и переменных можно будет изменить значение объекта, на который ссылается final переменная, и в таком случае назвать ее константой нельзя. Так вот, на примере видно, что часть финальных переменных действительно константы, а часть — нет, и их можно изменить.
Подписывайся на наш канал в Max🟪
Поскольку у нас не получится присвоить новое значение для final переменной, кажется, что это переменные константы. Но это только на первый взгляд. Если тип данных, на который ссылается переменная — immutable, то да, это константа.
А если тип данных mutable, то есть изменяемый, при помощи методов и переменных можно будет изменить значение объекта, на который ссылается final переменная, и в таком случае назвать ее константой нельзя. Так вот, на примере видно, что часть финальных переменных действительно константы, а часть — нет, и их можно изменить.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤3👍2😁1
Чтобы ускорить работу приложения, 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🔥6
🏗 Курс “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
❤3🔥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👍4🔥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❤4🔥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
This media is not supported in your browser
VIEW IN TELEGRAM
Исәнмесез! Встречайте новый VK JT Meetup: ML + Java!
4 декабря VK приглашает ML-инженеров и Java-разработчиков Казани на офлайн-встречу.
В программе:
— Практические доклады от экспертов VK: управление облаком One-cloud, запуск генеративного поиска в мессенджере и выкатка RAG в прод
— Два потока на выбор: нетворкинг с настольными играми или решение реальных кейсов от VK с призами
Общайтесь с экспертами, находите лучшие решения и оставайтесь на афтепати: фуршет, нетворкинг, настолки и свободное общение.
Только офлайн, в Big Twin Arena.
🎟 Участие бесплатное, регистрация на сайте.
4 декабря VK приглашает ML-инженеров и Java-разработчиков Казани на офлайн-встречу.
В программе:
— Практические доклады от экспертов VK: управление облаком One-cloud, запуск генеративного поиска в мессенджере и выкатка RAG в прод
— Два потока на выбор: нетворкинг с настольными играми или решение реальных кейсов от VK с призами
Общайтесь с экспертами, находите лучшие решения и оставайтесь на афтепати: фуршет, нетворкинг, настолки и свободное общение.
Только офлайн, в Big Twin Arena.
🎟 Участие бесплатное, регистрация на сайте.
👍4❤3🔥3🎅1
Метод 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
👍8❤3🔥2
Библиотека Spring Boot Startup Report генерирует интерактивные отчеты о работе приложений Spring Boot,и помогает понять, что влияет на время загрузки и запуска приложения, что может помочь в оптимизации
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍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❤4🔥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👍11🔥5
🏆 Пройди тест из 10 вопросов, проверь свой уровень знаний и приходи учиться на онлайн-курс «Kotlin Backend Developer. Professional» от OTUS!
На курсе:
🎫 Курс можно приобрести в рассрочку
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥2❤🔥1
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
13%
Программа зациклится, но не упадёт, потому что JVM оптимизирует хвостовую рекурсию.
15%
Будет выброшен OutOfMemoryError, потому что стек вызовов переполнится.
67%
Будет выброшен StackOverflowError, потому что стек вызовов переполнится.
6%
Программа завершится без ошибки, так как рекурсия обрывается автоматически после 1000 вызовов.
«Мы поняли, что мы как Тринити и Морфеус. Нам нужен был Нео». Как ночной портье за 3 месяца разобрался в инжиниринге данных
Смотрите подкаст «Криптонит говорит» о дата-инженерах! В нём эксперты оюсуждают:
🔹достигла ли пика профессия дата-инженера;
🔹какой стек нужно знать дата-инженерам;
🔹какие намечаются тренды отрасли.
📺 YouTube
📺 Rutube
💙 VK видео
💬 Подкаст в телеграме
🎵 Яндекс.Музыка
Смотрите и подписывайтесь на подкаст «Криптонит говорит» — обсуждаем айти, искусственный интеллект, языки программирования и криптографию.
Реклама АО НПК «Криптонит» ИНН 9701115253 Erid: 2Vtzquk6ZBX
Смотрите подкаст «Криптонит говорит» о дата-инженерах! В нём эксперты оюсуждают:
🔹достигла ли пика профессия дата-инженера;
🔹какой стек нужно знать дата-инженерам;
🔹какие намечаются тренды отрасли.
📺 YouTube
📺 Rutube
💙 VK видео
💬 Подкаст в телеграме
🎵 Яндекс.Музыка
Смотрите и подписывайтесь на подкаст «Криптонит говорит» — обсуждаем айти, искусственный интеллект, языки программирования и криптографию.
Реклама АО НПК «Криптонит» ИНН 9701115253 Erid: 2Vtzquk6ZBX
❤1👍1🔥1