Java

🧩 Coordination: how to synchronize chaos — Java Blocking vs Reactor vs Go Concurrency is not about “starting many threads”. It’s about agreements between them. Imagine a restaurant kitchen: — cooks (threads / goroutines) — orders (tasks) — and the main question: how do they coordinate? Today you will see 3 worlds: 🟨 Blocking Java — “everyone waits” 🟣 Reactor (Reac...
When HashMap starts killing production: the engineering story of ConcurrentHashMap Imagine a typical production service. 32 CPU hundreds of threads configuration / session / rate limits cache tens of thousands of operations per second And somewhere inside — a regular Map. At first, everything looks harmless. Map<String, Session> sessions = new HashMap<>(); Then a cou...
Zero Allocation in Java: what it is and why it matters Zero Allocation — is an approach to writing code in which no unnecessary objects are created in heap memory during runtime. The main idea: fewer objects → less GC → higher stability and performance. ⚡ 1. Simple explanation Every time an object is created in Java: memory is allocated in the heap ...
Stream vs For in Java: how to write the fastest code possible In Java, performance is often determined not by the "beauty of the code," but by how it interacts with memory, the JIT compiler, and CPU cache. Let s analyze why the usual for is often faster than Stream, and how to write truly fast code. 1. Basic truth: Stream vs For — this is not an equal battle ...
Java under the Microscope: Stack, Heap, and GC using Code Examples Diagram - Java Memory Model - Heap / Non-Heap / Stack Heap (memory for objects) Creates objects via new. Young Generation: Eden + Survivor. Old Generation: objects that have survived several GC collections. Heap size is usually larger than Non-Heap. Young Generation Eden Survivor Old G...
Asynchrony and Reactivity in Java: CompletableFuture, Flow, and Virtual Threads In modern Java development, there are three main approaches to asynchrony and concurrency: CompletableFuture — for single asynchronous tasks. Flow / Reactive Streams — for data flows with backpressure. Virtual Threads / Loom — for scalable, lock-free concurrency. Figurative Understanding Flow i...
Asynchrony in Java: Future, CompletableFuture, and Structured Concurrency Java was originally designed for multithreading and parallel computing. Over time, various methods for working with the results of asynchronous tasks have emerged—from the classic Future to modern Structured Concurrency. Let s look at the main mechanisms, their pros and cons, and when to use them. 1...
Understanding multithreading in Java through collections and atomics Understanding Multithreading in Java through Collections and Atomics 1️⃣ HashMap / TreeMap / TreeSet (not thread-safe) HashMap: Structure: array of buckets + linked lists / trees (for collisions). Under the hood: on put/remove, the array of buckets is modified and, possibly, the chains are reorder...
From the microservice revolution to the age of efficiency The period from 2010 to 2020 can be called an era of separation and scaling. Systems have become too large to remain monoliths. The solution has been microservices — small autonomous applications that are deployed independently. They allowed teams to work in parallel and systems to scale horizontall...
Is it possible to know everything? The limits of mastery in a world of endless technologies Reflection on why the completeness of knowledge is unattainable and how to build a personal architecture of professional growth. Every developer has at least once thought: “How to keep up with everything?” Technologies grow faster than the list of books in bookmarks. This is not a failure — it ...
Java v25: Choosing the Right Multithreading for Any Task Introduction The Java world is rapidly evolving, and with each version, new tools are emerging for effectively working with multithreading, collections, and asynchrony. Java 25 brings powerful features to developers: Virtual Threads, Structured Concurrency, Record Patterns, and improved memory and n...
Evolution of Java language v1–v25: key features Legend ✅ — Production (can be used in production) ⚠️ — Preview / Incubator (experimental, not for production, version when it became Production is indicated in parentheses) Version Table Version Main Innovations Comment / Value Super Solution (%) Java 1.0 (1996) - Basic syntax...
Modern approach to parallelism in Java - Fork/Join Framework, CompletableFuture, and virtual threads (Project Loom) Preface The world of software has long ceased to be a calm ocean: today it is a turbulent ecosystem where every millisecond of application response can cost a company customers, reputation, or money. Modern business systems — online stores, banking platforms, analytical services, social networks — o...
Data types in Java Data Types in Java Hello! This is Vitaly Lesnykh. In this lesson of the "Java Basics for Beginners" course, we will discuss what data types are. Data types are the foundation of any programming language. They allow Java to understand what information we are storing and what operations we can perfor...
Variables and Constants in Java Variables in Java — concept, types, scope, and constants Hello everyone! This is Vitaly Lesnykh. In this lesson, we will discuss what variables are in Java, why they are needed, what types there are, how to declare and initialize them, what dynamic initialization is, scope, lifetime, and constants. ...
Loops in Java: for, while, do while, continue and break statements Hello! This is Vitaly Lesnykh. Today we will continue the course “Java Basics for Beginners” and discuss one of the most important topics in programming — loops. A loop is the repetition of code execution as long as a given condition is met. In life, everything is cyclical: day replaces night, s...
Conditional operators in Java Java — Conditional Operators Visual article with examples: if / else / logic / ternary operator / switch In brief — conditional operators allow the program to make decisions: to execute one piece of code or another depending on the expression. Below are compact explanations and examples that you c...
Bitwise Operators in Java Bitwise Operators in Java In the Java programming language, several bitwise operators are defined. These operators are applied to integer data types, such as byte, short, int, long, and char. List of Bitwise Operators & — bitwise AND (AND) | — bitwise OR (OR) ^ — bitwise XOR (XOR) ~ — bitwise N...
Arithmetic operators In this lesson, we will talk about arithmetic operations and operators. In programming, operators are commands that perform specific actions: mathematical, string, logical, or comparison operations. The arithmetic operators in Java include: + (addition), - (subtraction), * (multiplication), / (divis...
How to write Hello World in Java. What is a Statement. How to write Comments in Java Today we will go over the basic elements of Java: Statement (instructions) Code blocks We will create a simple program Hello World! We will analyze each word in the code We will learn to write comments that are not executed What is a Statement Any code in Java consists of statements, which is tran...
By sending an email, you agree to the terms of the privacy policy

Useful Articles:

Scheduler internals in Go ↔ Java: how your code is actually executed
When you write go func() or create a Thread in Java, it seems like you are managing concurrency. But in reality, you are passing the task to the scheduler. And this is where the real show begins. Go...
Resource cleanup, rate-limiting strategies, bounded vs unbounded channels - in Go vs Java | Patterns, idioms, and best practices for Go
We continue the series of articles for developers who want to learn Go based on knowledge of Java, and vice versa. In this article, we will discuss three key topics: Resource Cleanup (resource release...
Slice internals in Go ↔ Java: from header to hidden allocations
Slice in Go is one of those structures that looks simple, but under the hood behaves like a little clever beast. If you are a Java developer, you might think: "well, this is just an ArrayList." And th...

New Articles:

Concurrency is not about “starting many threads”. It’s about agreements between them. Imagine a restaurant kitchen: — cooks (threads / goroutines) — orders (tasks) — and the main question: how do th...
When HashMap starts killing production: the engineering story of ConcurrentHashMap
Imagine a typical production service. 32 CPU hundreds of threads configuration / session / rate limits cache tens of thousands of operations per second And somewhere inside — a regular Map. At first...
Zero Allocation in Java: what it is and why it matters
Zero Allocation — is an approach to writing code in which no unnecessary objects are created in heap memory during runtime. The main idea: fewer objects → less GC → higher stability and performance. ...