Java

🧩 Coordination: как синхронизировать хаос — Java Blocking vs Reactor vs Go Конкурентность — это не про «запустить много потоков». Это про договорённости между ними. Представь кухню ресторана: — повара (потоки / горутины) — заказы (задачи) — и главный вопрос: как они координируются? Сегодня ты увидишь 3 мира: 🟨 Blocking Java — «каждый ждёт» 🟣 Reactor (Reactive Strea...
Когда lock становится бутылочным горлышком: инженерная история AbstractQueuedSynchronizer (AQS) История начинается не с академической теории, а с типичной production-проблемы. Представьте сервис: 48 CPU 300+ потоков нагрузка 200k операций в секунду много shared state Команда использует обычные Java locks: ReentrantLock lock = new ReentrantLock(); lock.lock(); try { updateState(); } fina...
Когда HashMap начинает убивать продакшн: инженерная история ConcurrentHashMap Представьте обычный продакшн-сервис. 32 CPU сотни потоков кэш конфигурации / сессий / rate limits десятки тысяч операций в секунду И где-то внутри — обычный Map. Сначала всё выглядит безобидно. Map<String, Session> sessions = new HashMap<>(); Потом появляется пара потоков. Потом десятк...
Zero Allocation в Java: что это и почему это важно Zero Allocation — это подход к написанию кода, при котором во время выполнения (runtime) не создаются лишние объекты в heap памяти. Главная идея: меньше объектов → меньше GC → выше стабильность и производительность. ⚡ 1. Простое объяснение Каждый раз, когда в Java создаётся объект: выделяется па...
Stream vs For в Java: как писать максимально быстрый код В Java производительность часто определяется не «красотой кода», а тем, как именно он взаимодействует с памятью, JIT-компилятором и CPU cache. Разберём, почему обычный for часто быстрее Stream, и как писать действительно быстрый код. 1. Базовая правда: Stream vs For — это не равная битва Сравнивая ...
Java под микроскопом: стек, куча и GC на примере кода Схема - Java Memory Model - Heap / Non-Heap / Stack Heap (память для объектов) Создаёт объекты через new. Young Generation: Eden + Survivor. Old Generation: объекты, пережившие несколько сборок GC. Размер Heap обычно больше Non-Heap. Young Generation Eden Survivor Old Generation Non...
Асинхронность и реактивность в Java: CompletableFuture, Flow и Virtual Threads В современном Java-разработке есть три основных подхода к асинхронности и параллельности: CompletableFuture — для одиночных асинхронных задач. Flow / Reactive Streams — для потоков данных с контролем скорости (backpressure). Virtual Threads / Loom — для масштабируемой параллельности без блокировок....
Асинхронность в Java: Future, CompletableFuture и Structured Concurrency Java изначально была ориентирована на многопоточность и параллельные вычисления. Со временем появились разные способы работы с результатами асинхронных задач — от классического Future до современных Structured Concurrency. Разберём основные механизмы, их плюсы, минусы и когда их использовать. 1. Fut...
Понимаем многопоточность в Java через коллекции и атомики 1️⃣ HashMap / TreeMap / TreeSet (не потокобезопасные) HashMap: Структура: массив бакетов + связные списки / деревья (для коллизий). Под капотом: при put/remove происходит модификация массива бакетов и, возможно, переупорядочивание цепочек. Проблема при многопоточности: два потока могут одновременно...
От микросервисной революции к эпохе эффективности Период 2010–2020 годов можно назвать эпохой разделения и масштабирования. Системы стали слишком большими, чтобы оставаться монолитами. Решением стали микросервисы — маленькие автономные приложения, развёртываемые независимо. Они позволили командам работать параллельно, а системам — масштабироваться ...
Можно ли знать всё? Пределы мастерства в мире бесконечных технологий Рассуждение о том, почему полнота знаний недостижима и как выстроить личную архитектуру профессионального роста. Каждый разработчик хотя бы раз думал: «Как всё успеть?» Технологии растут быстрее, чем список книг в закладках. Это не провал — это масштаб самой экосистемы. Зрелость приходит, когда...
Java v25: выбор подходящей многопоточности для любых задач Введение Мир Java стремительно развивается, и с каждой версией появляются новые инструменты для эффективной работы с многопоточностью, коллекциями и асинхронностью. В Java 25 разработчики получают мощные возможности: Virtual Threads, Structured Concurrency, Record Patterns, улучшенные API работы с п...
Эволюция языка Java v1–v25: ключевые фичи Легенда ✅ — Production (можно использовать в продакшне) ⚠️ — Preview / Incubator (экспериментальная, не для продакшна, в скобках указана версия, когда стало Production) Таблица версий Версия Основные нововведения Комментарий / Значение Супер-решение (%) Java 1.0 (1996) - Базов...
Современный подход к параллелизму в Java - Fork/Join Framework, CompletableFuture и виртуальные потоки (Project Loom) Предисловие Мир программного обеспечения уже давно перестал быть спокойным океаном: сегодня это бурная экосистема, где каждая миллисекунда отклика приложения может стоить компании клиентов, репутации или денег. Современные бизнес-системы — интернет-магазины, банковские платформы, аналитические серви...
Типы данных в Java Типы данных в Java Привет! С вами Виталий Лесных. В этом уроке курса «Основы Java для начинающих» разберем, что такое типы данных. Типы данных — это фундамент любого языка программирования. С их помощью Java понимает, какую информацию мы храним и какие операции можем с ней выполнять. В Java кажды...
Переменные и Константы в Java Переменные в Java — понятие, типы, область видимости и константы Всем привет! С вами Виталий Лесных. В этом уроке разберём, что такое переменные в Java, зачем они нужны, какие бывают типы, как объявлять и инициализировать, что такое динамическая инициализация, область действия (scope), время жизни и...
Циклы в Java: for, while, do while, Операторы continue и break Привет! С вами Виталий Лесных. Сегодня мы продолжим курс «Основы Java для начинающих» и разберём одну из важнейших тем программирования — циклы. Цикл — это повторение выполнения кода до тех пор, пока выполняется заданное условие. В жизни всё циклично: день сменяет ночь, времена года повторяются....
Условные операторы в Java Java — Условные операторы Наглядная статья с примерами: if / else / логика / тернарный оператор / switch Кратко — условные операторы позволяют программе принимать решения: выполнить один кусок кода или другой в зависимости от выражения. Ниже — компактные объяснения и примеры, чтобы вы могли прямо ...
Побитовые операторы в Java Побитовые операторы в Java В языке программирования Java определено несколько побитовых операторов. Эти операторы применяются к целочисленным типам данных, таким как byte, short, int, long и char. Список побитовых операторов & — побитовое И (AND) | — побитовое ИЛИ (OR) ^ — побитовое исключающее...
Арифметические операторы В этом уроке речь пойдет про арифметические операции и операторы. В программировании операторы — это команды, выполняющие определённые действия: математические, строковые, логические или операции сравнения. К арифметическим операторам в Java относятся: + (сложение), - (вычитание), * (умножение), / (...
Отправляя email, вы принимаете условия политики конфиденциальности

Полезные статьи:

Context, propagation и cancellation patterns в Go vs Java | Паттерны, идиомы и лучшие практики Go
← Связанные статьи: Часть 1 — Error handling и defer в Go (Параллельность и синхронизация) | Паттерны, идиомы и лучшие практики Go 1. Context и его роль В Go context.Context используется для пере...
Арифметические операторы
В этом уроке речь пойдет про арифметические операции и операторы. В программировании операторы — это команды, выполняющие определённые действия: математические, строковые, логические или операции срав...
Указатели, функции и управление выполнением в Go vs Java | Types - Language
Серия: Go для Java-разработчиков — разбираем pointer, closures, defer, panic/recover В этой статье мы разберем, как Go управляет состоянием и жизненным циклом функций. Особенность Go — лёгкая работа ...

Новые статьи:

Конкурентность — это не про «запустить много потоков». Это про договорённости между ними. Представь кухню ресторана: — повара (потоки / горутины) — заказы (задачи) — и главный вопрос: как они коорди...
История начинается не с академической теории, а с типичной production-проблемы. Представьте сервис: 48 CPU 300+ потоков нагрузка 200k операций в секунду много shared state Команда использует обы...
Когда HashMap начинает убивать продакшн: инженерная история ConcurrentHashMap
Представьте обычный продакшн-сервис. 32 CPU сотни потоков кэш конфигурации / сессий / rate limits десятки тысяч операций в секунду И где-то внутри — обычный Map. Сначала всё выглядит безобидно. Map&...