My writing.
Java internals, framework quirks, and the occasional Linux command. Explanations and examples for the next time you’re figuring something out.
How Inverted Indexes Work - Postings, Phrase Queries, BM25, Lucene and Full-Text Search
A detailed guide to inverted indexes covering text analysis, postings lists, Boolean and phrase queries, BM25 ranking, segments, compression, distributed search, PostgreSQL GIN, and a Java implementation.
How Redux Works - Store, Actions, Reducers, Middleware, React-Redux and Redux Toolkit
A detailed guide to Redux covering its Flux origins, the three principles, a from-scratch store, combineReducers, middleware internals, thunks, react-redux subscriptions and selectors, Redux Toolkit, RTK Query, and when not to use Redux.
LSM Trees Explained - Memtables, SSTables, Bloom Filters, Compaction and Storage Trade-Offs
A detailed guide to LSM trees covering write-ahead logging, memtables, SSTables, reads, Bloom filters, compaction, tombstones, snapshots, amplification, real systems, and a Java implementation.
The N+1 Problem in JPA and Hibernate - Causes, Detection, Fetch Joins, Entity Graphs and Batch Fetching
A detailed guide to the N+1 query problem covering lazy and eager fetching, SQL detection, fetch joins, entity graphs, batch and subselect fetching, DTO projections, pagination, and Spring Data JPA.
Load Balancing Explained - Algorithms, L4 vs L7, Health Checks and Real-World Setups
How load balancers work, from L4 vs L7 and the classic algorithms (with Java code) to health checks, high availability, global load balancing and the mistakes that cause outages.
Virtual Memory Explained - Pages, Page Tables, TLBs, Page Faults and What It Means for Java
A detailed guide to virtual memory covering address spaces, pages and page tables, the MMU and TLB, page faults, swapping, copy-on-write, mmap, overcommit and the OOM killer, huge pages, and what it all means for Java applications.