Аккаунт Войти / Регистрация
Тема
Размер текста

Блог:

« 1 2 3 4 5 »
1 / 5 · 53
🧩 Coordination: как синхронизировать хаос — Java Blocking vs Reactor vs Go Конкурентность — это не про «запустить много потоков». Это про договорённости между ними. Представь кухню ресторана: — повара (потоки / горутины) — заказы (задачи) — и главный вопрос: как они координируются? Сегодня ты увидишь 3 мира: 🟨 Blocking Java — «каждый ждёт» 🟣 Reactor (Reactive Streams…
Когда 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 — это не равная битва Сравнивая …
Compiler, Build и Tooling в Go и Java: как устроены сборка, инициализация, анализ и диагностика в двух экосистемах Эта статья посвящена общему обзору того, как в Go устроены compiler, build и tooling-практики, и как их удобнее понимать через сравнение с Java. Мы не будем уходить в узкоспециализированные детали каждой отдельной команды или внутренней реализации компилятора, а сосредоточимся на главном: как в двух…
Низкоуровневые механизмы - часть 2 | Go ↔ Java В этой статье мы собрали ключевые low-level механизмы Go, которые чаще всего вызывают вопросы у разработчиков, приходящих из Java. Мы рассмотрим: unsafe.Pointer, выравнивание структур, арифметику указателей, zero-copy, iota, внутренности интерфейсов, runtime.SetFinalizer и runtime.KeepAlive. Мы ра…
Go ↔ Java: Полное руководство по Runtime, памяти и аллокатору - часть 3 Эта статья — комплексное руководство по ключевым аспектам работы памяти и рантайма в Go и Java. Мы разберем фундаментальные концепции: планировщик выполнения, memory barriers, выравнивание памяти, рост стека, фрагментацию, горячие точки аллокации и внутреннюю архитектуру аллокатора Go. Главная цел…
Низкоуровневые механизмы | Go ↔ Java В этой статье мы разберем ключевые низкоуровневые механизмы Go, сравнивая их с аналогичными инструментами в Java. Статья предназначена для Java-разработчиков, которые хотят глубже понять Go, а также для Go-разработчиков, желающих увидеть, как их привычные механизмы устроены в Java. Мы рассмотрим ато…
Scheduler internals в Go ↔ Java: как на самом деле исполняется твой код Когда ты пишешь go func() или создаёшь Thread в Java, кажется, что ты управляешь параллельностью. Но на самом деле ты даёшь задачу планировщику — scheduler у. И вот тут начинается настоящее шоу. Go и Java используют принципиально разные модели: Go — M:N scheduler (много goroutine на меньшее число …
Slice internals в Go ↔ Java: от заголовка до скрытых аллокаций Slice в Go — это одна из тех структур, которая выглядит простой, но под капотом ведёт себя как маленький хитрый зверь. Если ты Java-разработчик, ты можешь думать: «ну это же просто ArrayList». И вот здесь начинается магия — это не совсем так. В этой статье мы разберём: как работает slice header, п…
Map internals от случайного порядка до эвакуации бакетов | Go ↔ Java В этой статье мы разберём внутреннее устройство map / hash-таблиц в Go и Java. Если ты Java-разработчик, привыкший к HashMap, тебе будет интересно, насколько иначе мыслит Go. Если ты гофер — ты увидишь, почему в Java сделаны такие компромиссы. Мы пройдёмся по ключевым аспектам: случайный порядок ите…
« 1 2 3 4 5 »
1 / 5 · 53
Отправляя email, вы принимаете условия политики конфиденциальности

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

Типы данных в Java
Типы данных в Java Привет! С вами Виталий Лесных. В этом уроке курса «Основы Java для начинающих» разберем, что такое типы данных. Типы данных — это фундамент любого языка программирования. С их помо…
Рассуждение о том, почему полнота знаний недостижима и как выстроить личную архитектуру профессионального роста. Каждый разработчик хотя бы раз думал: «Как всё успеть?» Технологии растут быстрее,…
Эволюция языка Java v1–v25: ключевые фичи
Легенда ✅ — Production (можно использовать в продакшне) ⚠️ — Preview / Incubator (экспериментальная, не для продакшна, в скобках указана версия, когда стало Production) Таблица версий Версия…

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

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