Виртуальные потоки с Project Loom
Традиционные потоки в Java мощный, но тяжёлый механизм, который ограничивает масштабируемость в высоконагруженных многопоточных приложениях.
С появлением Project Loom вводится концепция виртуальных потоков т.е. лёгких потоков, управляемых самой JVM, которые упрощают работу с конкурентностью и делают её более эффективной.
Виртуальные потоки позволяют запускать тысячи параллельных задач с минимальными накладными расходами, при этом сохраняя простой, блокирующий стиль написания кода без ущерба для производительности.😇
👉 Java Portal
Традиционные потоки в Java мощный, но тяжёлый механизм, который ограничивает масштабируемость в высоконагруженных многопоточных приложениях.
С появлением Project Loom вводится концепция виртуальных потоков т.е. лёгких потоков, управляемых самой JVM, которые упрощают работу с конкурентностью и делают её более эффективной.
Виртуальные потоки позволяют запускать тысячи параллельных задач с минимальными накладными расходами, при этом сохраняя простой, блокирующий стиль написания кода без ущерба для производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8
Гайд как откатить последний коммит в Git (пошагово)
① Если ещё не делал
Оставить изменения в
Полностью удалить изменения:
Отредактировать последний коммит (сообщение или содержимое):
② Если уже сделал
Используй
(Если возникнут конфликты — их придётся разрулить вручную.)
Получи хеш нужного коммита с помощью:
★ Уровень «эксперт»:
Используй
Можно менять порядок, объединять, править или удалять коммиты.
После изменений —
Важно: Делай
или вся команда согласована и не против переписывания истории.
👉 Java Portal
① Если ещё не делал
push
:Оставить изменения в
staging
(индексе):git reset --soft HEAD~1
Полностью удалить изменения:
git reset --hard HEAD~1
Отредактировать последний коммит (сообщение или содержимое):
git commit --amend -m "Исправленное сообщение"
② Если уже сделал
push
:Используй
git revert <хеш>
, чтобы создать новый коммит, отменяющий изменения предыдущего.(Если возникнут конфликты — их придётся разрулить вручную.)
Получи хеш нужного коммита с помощью:
git log
★ Уровень «эксперт»:
Используй
git rebase -i
для редактирования локального коммит-истории:Можно менять порядок, объединять, править или удалять коммиты.
После изменений —
git push --force-with-lease
Важно: Делай
rebase
и push --force-with-lease
только если ты один работаешь в веткеили вся команда согласована и не против переписывания истории.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍4
Пример проекта, демонстрирующий, как использовать GraphQL вместе с Spring Boot.
В репозитории показано:
🔸 как настроить GraphQL в Spring-приложении,
🔸 как описывать схемы, резолверы и DTO,
🔸 как работать с базой данных (MongoDB),
🔸 и как совмещать GraphQL с REST-контроллерами.
Подойдёт, если ты хочешь разобраться, как устроен GraphQL в экосистеме Spring или ищешь базу для своего pet-проекта.
👉 Java Portal
В репозитории показано:
Подойдёт, если ты хочешь разобраться, как устроен GraphQL в экосистеме Spring или ищешь базу для своего pet-проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3
Как выдержать нагрузку в 10 000 одновременных пользователей
1. Поставь балансировщик нагрузки (Load Balancer) спереди
- Распределяй трафик между несколькими backend-серверами.
- Инструменты:
2. Масштабируй горизонтально
- Один мощный сервер — нет.
- Используй несколько небольших stateless-серверов за LB.
3. Пиши stateless-сервисы
- Не храни сессии или состояние в оперативке.
- Используй
4. Используй connection pooling
- Базы «захлебываются» от 10 000 одновременных подключений.
- Ограничь число подключений к БД с каждого сервера через пул (например,
5. Активно кэшируй
Кешировать можно:
- Static files → CDN
- DB-запросы → Redis
- HTML-фрагменты → Edge cache
6. Используй read-replicas
- Разделяй чтение и запись, чтобы масштабировать чтение из базы.
7. Async и очереди (Queued Workloads)
- Переноси тяжёлые задачи (почта, видео и т.д.) в background jobs.
- Используй очереди:
8. Включи авто-масштабирование
- Используй инфраструктуру, способную масштабироваться под нагрузку:
9. WebSocket / Реалтайм? Используй gateway-сервисы
- Запускай WebSocket-шлюзы (например,
- Масштабируй через sticky-сессии или pub/sub (
10. Мониторь всё
- Отслеживай
- Инструменты:
👉 Java Portal
1. Поставь балансировщик нагрузки (Load Balancer) спереди
- Распределяй трафик между несколькими backend-серверами.
- Инструменты:
NGINX
, HAProxy
, AWS ELB
.2. Масштабируй горизонтально
- Один мощный сервер — нет.
- Используй несколько небольших stateless-серверов за LB.
3. Пиши stateless-сервисы
- Не храни сессии или состояние в оперативке.
- Используй
Redis
/ Memcached
или JWT
для сессий и авторизации.4. Используй connection pooling
- Базы «захлебываются» от 10 000 одновременных подключений.
- Ограничь число подключений к БД с каждого сервера через пул (например,
HikariCP
).5. Активно кэшируй
Кешировать можно:
- Static files → CDN
- DB-запросы → Redis
- HTML-фрагменты → Edge cache
6. Используй read-replicas
- Разделяй чтение и запись, чтобы масштабировать чтение из базы.
7. Async и очереди (Queued Workloads)
- Переноси тяжёлые задачи (почта, видео и т.д.) в background jobs.
- Используй очереди:
SQS
, RabbitMQ
, Kafka
.8. Включи авто-масштабирование
- Используй инфраструктуру, способную масштабироваться под нагрузку:
AWS EC2 + ASG
, GCP GKE
и т.д.9. WebSocket / Реалтайм? Используй gateway-сервисы
- Запускай WebSocket-шлюзы (например,
Socket.io
за LB). - Масштабируй через sticky-сессии или pub/sub (
Redis
, Kafka
).10. Мониторь всё
- Отслеживай
CPU
, память
, задержки
, глубину очередей
. - Инструменты:
Prometheus + Grafana
, Datadog
, New Relic
.Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥6👍2👀1
Выделение памяти в Java
В Java память по умолчанию выделяется в куче с помощью new.
Это просто, управляется сборщиком мусора и подходит для большинства приложений.
Но если нужны высокая производительность или низкие задержки, можно использовать off-heap память через
Такой подход выделяет память вне кучи, снижает нагрузку на GC и повышает эффективность при работе с большими или долго живущими данными.
Off-heap даёт больше контроля и производительности,
но требует аккуратного управления ресурсами,
так как такая память не очищается автоматически, в отличие от памяти в куче.
👉 Java Portal
В Java память по умолчанию выделяется в куче с помощью new.
Это просто, управляется сборщиком мусора и подходит для большинства приложений.
Но если нужны высокая производительность или низкие задержки, можно использовать off-heap память через
ByteBuffer.allocateDirect()
. Такой подход выделяет память вне кучи, снижает нагрузку на GC и повышает эффективность при работе с большими или долго живущими данными.
Off-heap даёт больше контроля и производительности,
но требует аккуратного управления ресурсами,
так как такая память не очищается автоматически, в отличие от памяти в куче.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2
Вопросы на собеседование по Spring Boot
1. Как Spring Boot определяет, какие бины создавать при автоконфигурации?
2. Для чего используется аннотация
3. Как реализовать пользовательскую валидацию в Spring Boot с помощью аннотаций?
4. Как
5. В чём разница между
6. Как вынести конфигурацию Spring Boot для разных окружений (environments)?
7. Что такое
👉 Java Portal
1. Как Spring Boot определяет, какие бины создавать при автоконфигурации?
2. Для чего используется аннотация
@ConditionalOnProperty
?3. Как реализовать пользовательскую валидацию в Spring Boot с помощью аннотаций?
4. Как
@Transactional
обрабатывает вложенные транзакции?5. В чём разница между
application.properties
и application.yml
в Spring Boot?6. Как вынести конфигурацию Spring Boot для разных окружений (environments)?
7. Что такое
WebClient
в Spring Boot и чем он отличается от RestTemplate
?Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Сохраняем себе: Jimmer
это иммутабельный ORM, заточенный под работу с графами объектов, а не отдельными сущностями.
🔹 Авто-генерация DTO
🔹 Без N+1 (batch fetch из коробки)
🔹 Умные SQL без лишних JOIN'ов
🔹 DSL с type-safety
🔹 GraphQL + TypeScript-генерация
🔹 Кеширование (включая Redis)
🔹 Работает через APT/KSP
⇢ https://github.com/babyfish-ct/jimmer
👉 Java Portal
это иммутабельный ORM, заточенный под работу с графами объектов, а не отдельными сущностями.
⇢ https://github.com/babyfish-ct/jimmer
Please open Telegram to view this post
VIEW IN TELEGRAM
👀5❤3