Большинство разработчиков делают частичные индексы так:
CREATE INDEX idx_active_users ON users(id) WHERE active = true;
Но фишка в том, что partial index может радикально ускорить запросы, где фильтр стоит не в WHERE, а «прячется» в JOIN-условии. Оптимизатор всё равно понимает условие и использует индекс.
Например, у вас есть таблица logs, где 95% строк — архив, и только 5% актуальные. Запрос делает join:
SELECT u.id, l.event
FROM users u
JOIN logs l ON l.user_id = u.id AND l.is_archived = false;
Если делать обычный индекс, он будет огромный. Но partial index:
CREATE INDEX idx_logs_active ON logs(user_id)
WHERE is_archived = false;
Теперь:
- индекс в 20–30 раз меньше
- cache hit rate выше
- планы меняются с seq scan на index scan
- JOIN начинает работать почти как в in-memory базе
Прикольно, что работает даже если в SELECT самого условия нет — главное, чтобы оно было в ON.
Это отличный способ ускорять «холодные» большие таблицы, где часто обращаются только к маленькому активному сегменту.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍7❤5
💻 Асинхронная обработка данных в высоконагруженных системах 🚀
🔥 16 декабря в 20:00 мск — открытый урок в OTUS.
📌 На вебинаре вы узнаете:
— Как использовать асинхронную обработку данных для масштабирования сервисов
— Как работают очереди сообщений, веб-сокеты и другие инструменты асинхронного взаимодействия
— Как выглядит архитектура реального проекта: от веб-сервера до брокера сообщений и базы данных
— Какие узкие места чаще всего встречаются в асинхронных системах и как их устранять
🎓 После занятия вы:
— Разберётесь в принципах асинхронной архитектуры и её влиянии на производительность
— Научитесь применять асинхронные подходы
— Получите реальные примеры архитектурных решений
👉 Регистрация: https://vk.cc/cS8P7w
Бесплатный урок приурочен к старту курса Highload Architect, на котором вы освоите архитектуры, выдерживающие миллионы запросов в секунду, и научитесь проектировать системы без узких мест. 🚀
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥 16 декабря в 20:00 мск — открытый урок в OTUS.
📌 На вебинаре вы узнаете:
— Как использовать асинхронную обработку данных для масштабирования сервисов
— Как работают очереди сообщений, веб-сокеты и другие инструменты асинхронного взаимодействия
— Как выглядит архитектура реального проекта: от веб-сервера до брокера сообщений и базы данных
— Какие узкие места чаще всего встречаются в асинхронных системах и как их устранять
🎓 После занятия вы:
— Разберётесь в принципах асинхронной архитектуры и её влиянии на производительность
— Научитесь применять асинхронные подходы
— Получите реальные примеры архитектурных решений
👉 Регистрация: https://vk.cc/cS8P7w
Бесплатный урок приурочен к старту курса Highload Architect, на котором вы освоите архитектуры, выдерживающие миллионы запросов в секунду, и научитесь проектировать системы без узких мест. 🚀
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤3👍2🔥2
В Java 8 появился CompletableFuture — это реализация паттерна Promise, которая позволяет строить декларативные цепочки асинхронных операций.
По сути, это обёртка над Future, которая может быть завершена вручную (отсюда "Completable") и предоставляет богатый API для композиции.
Классический Future не позволяет:
— Комбинировать несколько асинхронных операций.
— Обрабатывать результат без блокировки.
— Реагировать на ошибки внутри цепочки.
CompletableFuture решает эти проблемы, предоставляя fluent API для композиции асинхронных вычислений.
javaCompletableFuture<String> future = CompletableFuture
.supplyAsync(() -> fetchUserFromDB(userId))
.thenApply(user -> user.getEmail())
.thenApply(String::toUpperCase)
.exceptionally(ex -> "[email protected]");
future.thenAccept(System.out::println); // не блокирует
Здесь каждый этап выполняется асинхронно. Если где-то произошла ошибка, сработает exceptionally().
По умолчанию CompletableFuture использует ForkJoinPool.commonPool(). Для задач с блокирующими операциями (IO, БД) лучше передать свой Executor. Иначе можно заблокировать общий пул и замедлить всё приложение.
— Отсутствие отмены
CompletableFuture.cancel() не останавливает выполнение задачи, а только меняет статус. Реальная отмена требует проверки Thread.interrupted() внутри задачи.
— Проглатывание исключений
Если не добавить exceptionally() или handle(), исключение останется внутри future до вызова get() или join().
— Цепочки могут выполняться синхронно
Методы без суффикса Async (например, thenApply) могут выполниться в том же потоке, где завершился предыдущий этап. Если нужна гарантия асинхронности, используйте thenApplyAsync().
— Для композиции нескольких асинхронных операций (API-вызовы, запросы в БД).
— Когда нужны неблокирующие обработчики результатов.
— В реактивных архитектурах (хотя там лучше Project Reactor или RxJava).
— Для CPU-bound задач с высокой конкуренцией (лучше использовать параллельные стримы или явное управление потоками).
— Когда важна отмена выполняющейся задачи.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥5❤4
StackWalker - удобный инструмент для обхода стек-фреймов и их интроспекции. Полезен для дебага, профилирования и анализа поведения кода на лету. Позволяет считывать текущий стек, фильтровать фреймы, смотреть классы и методы, откуда был вызван код.
Документация
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5❤3
code_review_checklist.pdf
59.7 KB
Собрали в один PDF всё, что нужно проверять при код-ревью — от архитектуры до безопасности. 75+ пунктов с цветовой маркировкой по приоритетам.
Чтобы ничего не упустить и держать единый стандарт качества в команде.
Открываете при каждом PR, идёте по чек-листу. Красные пункты — критично, жёлтые — важно, белые — рекомендации.
Адаптируйте под свой проект и дополняйте на основе опыта команды.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4🔥4
Docker и docker-compose и их использование в автотестировании
Многие инженеры по автоматизации тестирования со временем задумываются о том, чтобы версионировать тесты и поставлять их как часть продукта. Так же сталкиваются с проблемой ручного определения контекста, необходимого для запуска автотестов, которые очень часто написаны на разных стеках. На занятии поговорим как можно решить данные проблемы при помощи Docker и docker-compose и почему Docker сегодня так востребован и популярен среди инженеров по автоматизации тестирования.
Что будет рассмотрено:
Рассмотрим Docker как инструмент для управления жизненным циклом контейнеров
поговорим о тонкостях его использования
немного затронем docker-compose для описания стека и управления им.
Какие результаты на выходе:
После занятия слушатели смогут:
- заворачивать автотесты в контейнеры
- управлять ими
- использовать docker-compose для разворачивания стека тестирования.
Регистрация и подробности о курсе: https://vk.cc/cSatOP
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Многие инженеры по автоматизации тестирования со временем задумываются о том, чтобы версионировать тесты и поставлять их как часть продукта. Так же сталкиваются с проблемой ручного определения контекста, необходимого для запуска автотестов, которые очень часто написаны на разных стеках. На занятии поговорим как можно решить данные проблемы при помощи Docker и docker-compose и почему Docker сегодня так востребован и популярен среди инженеров по автоматизации тестирования.
Что будет рассмотрено:
Рассмотрим Docker как инструмент для управления жизненным циклом контейнеров
поговорим о тонкостях его использования
немного затронем docker-compose для описания стека и управления им.
Какие результаты на выходе:
После занятия слушатели смогут:
- заворачивать автотесты в контейнеры
- управлять ими
- использовать docker-compose для разворачивания стека тестирования.
Регистрация и подробности о курсе: https://vk.cc/cSatOP
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤2👍2🔥2
Начиная с Java 11 можно легко повторить строку нужное количество раз.
Для этого у класса String есть метод repeat который принимает число повторений.
Пример
"Hi ".repeat(3)
Вернет строку Hi Hi Hi Хороший способ сделать код короче и понятнее
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤7🔥3
Forwarded from Amplicode
О программировании с помощью AI-агентов трубят из-за каждого угла. Последнее время появилось достаточно много инструментов, которые буквально пишут код за разработчика.
Наша команда следит за индустрией ИИ в разработке достаточно давно. Помимо внедрения ИИ в сам процесс разработки наших продуктов, мы активно занимаемся интеграцией Amplicode с современными AI-агентами и не только.
И у нас есть свои мысли на этот счет)
Реклама. ООО "ХОУЛМОНТ". ИНН 6316134393. erid: 2W5zFJj4KpU
📚 Читать на Хабр: https://habr.com/ru/companies/haulmont/articles/925088/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😁2
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
52%
Hello, world! Hello, world!
32%
Hello, world! Hello, world! *Сотступом слева
13%
Ошибка компиляции
3%
RuntimeException
Media is too big
VIEW IN TELEGRAM
Тестовое собеседование Java разработчика #33 - Максим Солодков
Кандидат - опытный Java Tech Lead - Максим Солодков.
🌐 🗣 СМОТРЕТЬ VKVIDEO
🎞 🗣 СМОТРЕТЬ YOUTUBE
Подписывайся на наш канал в Max🟪
Кандидат - опытный Java Tech Lead - Максим Солодков.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥4
⚡️ Потоковые приложения с Apache Kafka: от событий к реальному времени
📅 16 декабря | 20:00 мск | бесплатно
🎓 На вебинаре разберём:
– Что такое потоковая обработка и чем она отличается от пакетной
– Как устроена Apache Kafka и почему она стала основой real-time архитектур
– Ключевые паттерны: Event Sourcing, Pub/Sub, CQRS
– Как проектировать и развернуть потоковый конвейер событий
– Как интегрировать Kafka с микросервисами и внешними системами
💡 Кому будет полезно:
– Backend-разработчикам, работающим с событийными системами
– DevOps-инженерам, отвечающим за масштабирование и мониторинг Kafka
– Архитекторам ПО, проектирующим real-time решения
– Системным аналитикам, изучающим потоки данных и событийные модели
✅ После вебинара вы сможете:
– Проектировать потоковые приложения и пайплайны в Kafka
– Встраивать Kafka в микросервисную архитектуру
– Использовать проверенные паттерны для построения систем реального времени
💥 Регистрируйтесь и прокачайте навык проектирования real-time систем: https://vk.cc/cSfGmM
Занятие приурочено к старту курса «Архитектура и шаблоны проектирования», где вы освоите DDD, CQRS, Event Storming, Event Sourcing и научитесь создавать архитектуры, готовые к миллионам событий в секунду. 🚀
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📅 16 декабря | 20:00 мск | бесплатно
🎓 На вебинаре разберём:
– Что такое потоковая обработка и чем она отличается от пакетной
– Как устроена Apache Kafka и почему она стала основой real-time архитектур
– Ключевые паттерны: Event Sourcing, Pub/Sub, CQRS
– Как проектировать и развернуть потоковый конвейер событий
– Как интегрировать Kafka с микросервисами и внешними системами
💡 Кому будет полезно:
– Backend-разработчикам, работающим с событийными системами
– DevOps-инженерам, отвечающим за масштабирование и мониторинг Kafka
– Архитекторам ПО, проектирующим real-time решения
– Системным аналитикам, изучающим потоки данных и событийные модели
✅ После вебинара вы сможете:
– Проектировать потоковые приложения и пайплайны в Kafka
– Встраивать Kafka в микросервисную архитектуру
– Использовать проверенные паттерны для построения систем реального времени
💥 Регистрируйтесь и прокачайте навык проектирования real-time систем: https://vk.cc/cSfGmM
Занятие приурочено к старту курса «Архитектура и шаблоны проектирования», где вы освоите DDD, CQRS, Event Storming, Event Sourcing и научитесь создавать архитектуры, готовые к миллионам событий в секунду. 🚀
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
❤2👍2🔥2
**@SpringBootApplication(exclude = …)**.
Это удобно, когда в проекте есть своя кастомная конфигурация, которая конфликтует с дефолтной, или когда вы хотите убрать лишние автоматические настройки и контролировать поведение вручную.
Так вы оставляете только нужные части автоконфигурации и избегаете скрытых конфликтов.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥2
Т-Банк ищет стажеров
Хотите начать карьеру в бигтехе без опыта? В 2024 году это сделали больше тысячи студентов. 75% из них остались в команде и сегодня работают над продуктами, которыми пользуются миллионы.
Стажеры здесь не остаются один на один с трудностями. С первого дня рядом менторы и команда, которая помогает разобраться в новых задачах, поддерживает и делится опытом.
Вас ждет оплачиваемая стажировка с официальным оформлением и гибким графиком, чтобы совмещать работу с учебой.
Что ждет новых участников стажировки:
— восемь направлений на выбор: разработка, аналитика, QA, SRE и другие;
— погружение в бизнес-задачи с первого дня;
— работа над продуктами, которыми пользуются миллионы;
— возможность работать удаленно или в офисе;
— комьюнити, где вы быстро почувствуете себя своим.
Подайте заявку на оплачиваемую стажировку уже сейчас
Хотите начать карьеру в бигтехе без опыта? В 2024 году это сделали больше тысячи студентов. 75% из них остались в команде и сегодня работают над продуктами, которыми пользуются миллионы.
Стажеры здесь не остаются один на один с трудностями. С первого дня рядом менторы и команда, которая помогает разобраться в новых задачах, поддерживает и делится опытом.
Вас ждет оплачиваемая стажировка с официальным оформлением и гибким графиком, чтобы совмещать работу с учебой.
Что ждет новых участников стажировки:
— восемь направлений на выбор: разработка, аналитика, QA, SRE и другие;
— погружение в бизнес-задачи с первого дня;
— работа над продуктами, которыми пользуются миллионы;
— возможность работать удаленно или в офисе;
— комьюнити, где вы быстро почувствуете себя своим.
Подайте заявку на оплачиваемую стажировку уже сейчас
👍8❤3😁3🔥2
Ctrl + Shift + F7 → Подсветка всех использований в файле
— Рефакторите метод и хотите быстро увидеть все места вызова? Один клик — и все использования подсвечены жёлтым.
— Не нужно открывать Find Usages и искать глазами.
— Ставите курсор на переменную → хоткей → мгновенно видите весь её жизненный цикл в файле.
— F3 и Shift + F3 для быстрого прыжка между подсвеченными местами.
— Esc убирает подсветку.
— Не открывается отдельная панель.
— Работает молниеносно даже на огромных проектах.
— Идеально для локального анализа: видите использования только в текущем файле, без шума из других классов.
— Работает для переменных, методов, классов, полей.
— Комбинируйте с Ctrl + W (расширить выделение), чтобы быстро выделить нужный участок кода.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3❤2🤩1