Java библиотека
31.6K subscribers
2.34K photos
87 videos
9 files
2.15K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Можно ли считать Final переменную константой?

Поскольку у нас не получится присвоить новое значение для final переменной, кажется, что это переменные константы. Но это только на первый взгляд. Если тип данных, на который ссылается переменная — immutable, то да, это константа.

А если тип данных mutable, то есть изменяемый, при помощи методов и переменных можно будет изменить значение объекта, на который ссылается final переменная, и в таком случае назвать ее константой нельзя. Так вот, на примере видно, что часть финальных переменных действительно константы, а часть — нет, и их можно изменить.


Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43👍2😁1
👩‍💻 Просто о сложном: JIT-компилятор

Чтобы ускорить работу приложения, JVM включает в дело Just-In-Time (JIT) компилятор.

Он превращает часто выполняемый байткод в нативные машинные инструкции прямо во время исполнения.

🟢Как это работает

— При старте приложения JVM интерпретирует байткод.

— Когда видит, например, что метод вызывается часто (т.н. hot method), — JIT компилирует его в машинный код.

— В следующий раз этот метод исполняется уже как нативный, без интерпретации.

— Всё это происходит «на лету» — поэтому Java-программы разгоняются после первых секунд работы.

🟢Зачем нужен JIT

Он сочетает плюсы интерпретации и компиляции:

— Быстрый старт приложения (интерпретация).
— Высокая производительность после разогрева (JIT).

🟢Что он умеет оптимизировать

— Inlining: подставляет код мелких методов прямо в место вызова.

— Escape Analysis: определяет, можно ли объект хранить на стеке вместо heap.

— Loop unrolling: разворачивает циклы для ускорения.

— Dead code elimination: выбрасывает ненужные операции.

— И другие алгоритмы.

⚙️ Как посмотреть, что делает JIT

Включите флаг:
-XX:+PrintCompilation


И увидите, какие методы компилируются во время исполнения.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍167🔥6
🏗 Курс “Software Architect” от OTUS — набор заканчивается! 🚨

Успейте занять место в группе курса «Software Architect»! Станьте экспертом в проектировании отказоустойчивых и масштабируемых систем. Пройдите вступительный тест и получите скидку, чтобы не пропустить старт обучения!

Почему стоит пойти:


- 100% практики на реальных проектах
- Проектирование гибких архитектур
- Микросервисы, интеграции, Big Data
- Современные паттерны: CQRS, Event Sourcing
- Карьерный рост: рекомендации партнёрам для лучших

Кому подойдёт:

- Разработчики, готовые к новому уровню
- Архитекторы, углубляющие экспертизу
- Тимлиды

Что освоите:

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

📌 Пройдите тест и забронируйте место со скидкой. Не упустите шанс стать экспертом в архитектуре систем! Подробности уточняйте у менеджера

👉 Пройти тестирование https://vk.cc/cRrOwD

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
4🔥3👍2😁1🎅1
👩‍💻 Еще одна коварная задача на Java - с побочным эффектом

Рассмотрите этот, на первый взгляд, безобидный код:


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
36👍4🔥2😁1
☃️ Зима близко...
Как и 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
👍54🔥3
👩‍💻 Как быстро настроить Zero-Downtime деплой Spring Boot-приложения с помощью Docker + Traefik

Обновлять сервис без остановки — не роскошь, а необходимость. Ни пользователи, ни ваши коллеги не должны видеть "502 Bad Gateway", пока вы выкатываете новую версию.

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

1️⃣ Готовим Dockerfile
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 .


2️⃣ Добавляем Traefik как reverse proxy

Создаём 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 автоматически поднимет роутер и начнёт проксировать трафик.

3️⃣ Выкатываем новую версию без даунтайма

Создаём новый образ:
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.
Можно спокойно проверить, что новая версия работает корректно.

4️⃣ Плавно отключаем старую

Если всё ок — выключаем старый контейнер:
docker compose stop myapp_v1
docker compose rm -f myapp_v1


Traefik мгновенно перестроит маршрут — без обрывов соединений.
Ни один пользователь не заметит переключения.

5️⃣ Добавляем health-checks для надёжности

В 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
🔥119👍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.
🎟 Участие бесплатное, регистрация на сайте.
👍43🔥3🎅1
Метод PutAll()

Метод putAll() используется для копирования всех элементов одной хэш-таблицы или Map в другую. Он принимает в качестве аргумента другую Map или хэш-таблицу, и копирует все её пары ключ-значение в исходную коллекцию.
Метод putAll() не возвращает значения и не бросает исключений.

Этот метод удобен, когда нужно быстро скопировать данные из одной коллекции в другую. Он работает быстрее, чем добавлять элементы в цикле.
Если в конечной коллекции уже есть ключи, которые содержатся в исходной Map, то значения этих ключей будут перезаписаны.

Также с помощью этого метода можно объединять данные из нескольких Map в одну целевую коллекцию.


Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥2
👩‍💻 Советы по Spring Boot 💡

Библиотека Spring Boot Startup Report генерирует интерактивные отчеты о работе приложений Spring Boot,и помогает понять, что влияет на время загрузки и запуска приложения, что может помочь в оптимизации

🖥 Github

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍7🔥3
OAuth 2.0 авторизация в Java Spring Boot приложении: Пошаговое руководство

В этом видео мы подробно рассмотрим процесс реализации OAuth 2.0 авторизации в Java Spring Boot приложении. 🚀

Вы узнаете, как настроить аутентификацию и обеспечить безопасность вашего приложении.🔐

Это руководство будет полезно как для начинающих разработчиков, так и для тех, кто уже знаком с Java Spring Boot и хочет углубить свои знания в области безопасности и авторизации. 💻


📺🗣СМОТРЕТЬ RUTUBE

🌐🗣СМОТРЕТЬ VKVIDEO

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114🔥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
4🔥3👍2
💡 Совет по Java

С паттерн-матчингом для 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
⌨️ 🤖 Хочешь прокачаться в backend-разработке? Но справишься ли ты с тестом по Kotlin?

🏆 Пройди тест из 10 вопросов, проверь свой уровень знаний и приходи учиться на онлайн-курс «Kotlin Backend Developer. Professional» от OTUS!

На курсе:

✔️ Разработаете monolith, микросервисы и serverless с помощью Kotlin и фреймворков Spring, Ktor и бессерверных библиотек.
✔️ Освоите корутины для асинхронных и многопоточных задач, а также WebSocket, RabbitMQ, Kafka для транспорта.
✔️ Научитесь строить хранилища на Postgres, Cassandra, ArcadeDb и интегрировать OpenAPI с любым фронтендом.

🎫
Курс можно приобрести в рассрочку

➡️ Пройди тест и присоединяйся к группе: https://vk.cc/cREFg3

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2🔥2❤‍🔥1
Forwarded from Java Guru 🤓
Что будет результатом кода?
This media is not supported in your browser
VIEW IN TELEGRAM
1
«Мы поняли, что мы как Тринити и Морфеус. Нам нужен был Нео». Как ночной портье за 3 месяца разобрался в инжиниринге данных

Смотрите подкаст «Криптонит говорит» о дата-инженерах! В нём эксперты оюсуждают:
🔹достигла ли пика профессия дата-инженера;
🔹какой стек нужно знать дата-инженерам;
🔹какие намечаются тренды отрасли.

📺 YouTube
📺
Rutube
💙
VK видео
💬
Подкаст в телеграме
🎵 Яндекс.Музыка

Смотрите и подписывайтесь на подкаст «Криптонит говорит» — обсуждаем айти, искусственный интеллект, языки программирования и криптографию.

Реклама АО НПК «Криптонит» ИНН 9701115253 Erid: 2Vtzquk6ZBX
1👍1🔥1