💻 Блог о программировании и технологиях:
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 сделаны такие компромиссы. Мы пройдёмся по ключевым аспектам: случайный порядок ите...
Внутреннее устройство Garbage Collector: Go ↔ Java
В этой статье мы подробно разберём работу сборщика мусора (Garbage Collector, GC) в Go и Java, рассмотрим ключевые внутренние механизмы: concurrent mark & sweep, mutator vs collector, tricolor marking, GC pacing, root set scanning и stack scanning. Для Java-разработчиков это поможет понять подхо...
Memory, Runtime и Allocator: Сравнение Go и Java для разработчиков
В этой статье мы разберём ключевые аспекты работы с памятью, runtime и механизмами аллокации объектов в Go и Java. Мы сфокусируемся на различиях подходов к управлению памятью, работе со стеком и кучей, а также как эти механизмы влияют на производительность, безопасность и удобство разработки. Статья...
Atomic vs Mutex, Blocking vs Non‑Blocking, Read/Write Splitting (RWMutex), Logging | Concurrency Patterns и Best Practices часть 5 | Go ↔ Java
В этой статье мы разберём ключевые подходы к работе с параллелизмом и синхронизацией в Go и Java. Мы сравним, как одни и те же задачи решаются на этих языках, покажем идиомы, паттерны и лучшие практики. Материал будет полезен как Java-разработчикам, изучающим Go, так и гоферам, которые хотят понять ...
Resource cleanup, rate‑limiting strategies, bounded vs unbounded channels - в Go vs Java | Паттерны, идиомы и лучшие практики Go
Продолжаем серию статей для разработчиков, которые хотят изучить Go на основе знаний Java, и наоборот. В этой статье мы обсудим три ключевые темы: Resource Cleanup (освобождение ресурсов), Rate-Limiting Strategies (стратегии ограничения нагрузки) и Bounded vs Unbounded Channels (ограниченные и неогр...
Разбираем: Rate‑limiter, non‑blocking operations, scheduler Go vs Java | Concurrency часть 4
Эта статья посвящена пониманию принципов работы с конкурентностью и синхронизацией в Go и Java. Мы рассмотрим ключевые подходы, такие как rate‑limiter, неблокирующие операции и планирование задач, сравним их реализацию и философию в двух языках. Это поможет Java-разработчику быстро освоить Go и, нао...
Разбираем: Trace, Profiling, Integration Testing, Code Coverage, Mocking, Deadlock Detection в Go vs Java | Testing, Debugging и Profiling
Серия: Go для Java-разработчиков — разбор trace, профилирования и тестирования В этой статье мы разберем инструменты и практики для тестирования, отладки и профилирования в Go. Для Java-разработчика это позволит легко ориентироваться в Go, а Go-разработчику — сравнить подходы с Java. Trace — отсл...
Generics, Reflection и каналы - Go vs Java | Types - Language
В этой статье мы разберем продвинутые возможности системы типов в Go: generics (параметры типов), reflection (рефлексию) и типы каналов для работы с конкурентностью. Мы сравним подходы Go и Java, чтобы Java-разработчикам было проще освоить Go, а опытным гоферам — понять, как эти концепции реализован...
Указатели, функции и управление выполнением в Go vs Java | Types - Language
Серия: Go для Java-разработчиков — разбираем pointer, closures, defer, panic/recover В этой статье мы разберем, как Go управляет состоянием и жизненным циклом функций. Особенность Go — лёгкая работа с указателями без сложной арифметики, мощные функции-замыкания и встроенные механизмы для безопасног...
Struct, методы и интерфейсы в Go vs Java | Types - Language
Серия: Go для Java-разработчиков — разбираем struct, interface, receiver types и type embedding В этой статье мы разберем, как в Go строится архитектура типов. Для Java-разработчика это особенно важно, так как Go не использует классы в привычном понимании, а типы и методы организованы иначе. Мы сра...
Разбираем: array, slice, map, zero value - в Go vs Java | Types - Language
Серия: Go для Java-разработчиков Эта статья открывает серию материалов о языке Go для разработчиков, которые уже хорошо знакомы с Java. Мы будем сравнивать подходы двух языков, чтобы быстрее понять, как устроена модель данных Go и почему она выглядит именно так. Зачем вообще разбирать базовые стру...
Разбор Unit testing, Race detector, Benchmarking, Profiling (pprof) Go vs Java | Testing, Debugging и Profiling
1. Unit testing В Go встроенный пакет testing позволяет писать unit-тесты. Для Java-разработчиков это аналог JUnit/TestNG. Unit-тесты в Go просты и встроены в стандартную библиотеку. Для Java привычнее использовать JUnit или TestNG. 2. Race detector Go имеет встроенный -race флаг для выявлени...
Channel direction и select patterns в Go vs Java | Паттерны, идиомы и лучшие практики Go
← Связанные статьи: Context, propagation и cancellation patterns в Go vs Java | Паттерны, идиомы и лучшие практики Go 1. Channel direction — направление каналов В Go каналы могут быть односторонними: только для отправки или получения. Это помогает делать интерфейсы функций более безопасными и я...
Context, propagation и cancellation patterns в Go vs Java | Паттерны, идиомы и лучшие практики Go
← Связанные статьи: Часть 1 — Error handling и defer в Go (Параллельность и синхронизация) | Паттерны, идиомы и лучшие практики Go 1. Context и его роль В Go context.Context используется для передачи сигналов отмены и таймаутов между goroutine, а также для передачи значений (propagation). Для J...
Полезные статьи:
← Часть 2 — Синхронизация и безопасность в Go В этой части мы рассмотрим практические паттерны параллельной обработки задач: worker pool, pipeline pattern и схемы сборки результатов. Эти паттерн...
Переменные в Java — понятие, типы, область видимости и константы Всем привет! С вами Виталий Лесных. В этом уроке разберём, что такое переменные в Java, зачем они нужны, какие бывают типы, как объявля...
Введение Мир Java стремительно развивается, и с каждой версией появляются новые инструменты для эффективной работы с многопоточностью, коллекциями и асинхронностью. В Java 25 разработчики получают мощ...
Новые статьи:
Эта статья посвящена общему обзору того, как в Go устроены compiler, build и tooling-практики, и как их удобнее понимать через сравнение с Java. Мы не будем уходить в узкоспециализированные детали каж...
В этой статье мы собрали ключевые low-level механизмы Go, которые чаще всего вызывают вопросы у разработчиков, приходящих из Java. Мы рассмотрим: unsafe.Pointer, выравнивание структур, арифметику указ...
Эта статья — комплексное руководство по ключевым аспектам работы памяти и рантайма в Go и Java. Мы разберем фундаментальные концепции: планировщик выполнения, memory barriers, выравнивание памяти, рос...