Adetayo Akinsanya unkletayo.dev
Engineering / Tags / #Software Engineering
#Software Engineering 55 Articles

Articles tagged with #Software Engineering

A curated list of engineering series, deep dives, and notes related to #Software Engineering.

Engineering Java Collections From Scratch • Part 25 2026-11-10

Building a Custom In-Memory Data Store in Java: The Collections Capstone

Build a production-grade in-memory key-value database in Java from scratch using custom data structures: HashMaps, LRU caches, priority queues, and SkipLists.

Read →
Engineering Java Collections From Scratch • Part 24 2026-11-06

Java Specialized Queues: SynchronousQueue Handoffs & DelayQueue Expiration

Master Java SynchronousQueue and DelayQueue internals. Learn zero-capacity thread handoffs and how Delayed Min-Heaps power task schedulers.

Read →
Engineering Java Collections From Scratch • Part 23 2026-11-03

Lock-Free Sorted Range Queries: ConcurrentSkipListMap & SkipLists in Java

Learn how ConcurrentSkipListMap uses SkipLists and atomic CAS pointers to deliver lock-free sorted range queries across 64+ CPU cores in Java.

Read →
Engineering Java Collections From Scratch • Part 22 2026-10-30

Java BlockingQueue Performance: ArrayBlockingQueue vs LinkedBlockingQueue

Compare ArrayBlockingQueue vs LinkedBlockingQueue in Java. Learn how dual-lock splitting eliminates contention in multi-threaded task queues.

Read →
Engineering Java Collections From Scratch • Part 21 2026-10-27

Java IdentityHashMap Internals: Reference Equality & Open Addressing Probing

Learn how Java IdentityHashMap uses reference equality (==) and flat array linear probing to prevent infinite recursion in object graph serializers.

Read →
Engineering Java Collections From Scratch • Part 20 2026-10-23

Java WeakHashMap Internals: Preventing Memory Leaks with Weak References

Explore how Java WeakHashMap uses WeakReference keys and ReferenceQueue polling to prevent memory leaks in caches and plugin frameworks.

Read →
Engineering Java Collections From Scratch • Part 19 2026-10-20

High-Performance Java: How EnumSet and EnumMap Achieve Zero-Allocation Speed

Discover why EnumSet and EnumMap are the fastest collections in Java. Learn how 64-bit long bitmasks execute set operations in 1 CPU cycle.

Read →
Engineering Kafka from First Principles • Part 19 2026-10-20

Building a Real-Time Event-Driven Order System with Apache Kafka

Build an end-to-end event-driven microservices architecture in Java using Apache Kafka, Schema Registry, Avro, Dead Letter Topics, and Kafka Streams.

Read →
Engineering System Design & Distributed Systems from First Principles • Part 19 2026-10-20

The Master System Design Framework: 4-Step Methodology for Senior & Staff Architect Interviews

Master the 4-step System Design interview framework. Learn requirement scoping, back-of-the-envelope estimation, and architecture deep dives.

Read →
Engineering Frontend Web Architecture & Performance from First Principles • Part 18 2026-10-16

Frontend System Design Interview Framework: Component Topology, Data Flow, and Scalability

Master the 4-step Frontend System Design Interview Framework. Learn component topology, API contract design, state data flow, and scalability.

Read →
Engineering Java Collections From Scratch • Part 18 2026-10-16

Java ConcurrentHashMap Internals: Lock-Free CAS & Fine-Grained Bucket Sync

Deep dive into Java 8+ ConcurrentHashMap internals. Learn how lock-free CAS, volatile reads, and bucket-level synchronized locks handle high concurrency.

Read →
Engineering Kafka from First Principles • Part 18 2026-10-16

Operating Kafka in Production: Critical JMX Metrics, Kernel Tuning & Runbooks

SRE runbook for operating Kafka in production. Monitor critical JMX metrics (UnderReplicatedPartitions, ConsumerLag), tune Linux sysctl, and troubleshoot outages.

Read →
Engineering Java Collections From Scratch • Part 17 2026-10-13

Java Concurrent Collections: CopyOnWriteArrayList vs Unmodifiable vs List.of()

Compare Fail-Fast vs Fail-Safe collections in Java. Learn CopyOnWriteArrayList memory mechanics and the difference between List.of() and unmodifiable wrappers.

Read →
Engineering Kafka from First Principles • Part 17 2026-10-13

Kafka Connect vs Kafka Streams: Zero-Code ELT Pipelines vs Real-Time Analytics

Compare Kafka Connect vs Kafka Streams. Learn when to use zero-code ELT connectors versus in-process Java stream processing with embedded RocksDB.

Read →
Engineering Java Collections From Scratch • Part 16 2026-10-09

Java PriorityQueue Internals: Building a Min-Heap Array from Scratch

Build a custom PriorityQueue in Java using a flat Min-Heap array. Learn parent-child index formulas, siftUp, and siftDown algorithms.

Read →
Engineering Kafka from First Principles • Part 16 2026-10-09

Kafka Schema Registry & Avro: Guarding Against Breaking Payload Changes

Prevent production microservice crashes with Confluent Schema Registry and Apache Avro. Learn 5-byte wire format headers and compatibility modes.

Read →
Engineering Java Collections From Scratch • Part 15 2026-10-06

Java TreeMap Internals: Building a Navigable Sorted Map from Scratch

Build a custom TreeMap in Java. Learn how NavigableMap range queries and custom Comparators maintain sorted keys in O(log N) time.

Read →
Engineering Kafka from First Principles • Part 15 2026-10-06

Kafka Exactly-Once Semantics (EOS): Idempotent Producers & 2PC Transactions

Learn how Kafka achieves Exactly-Once Semantics (EOS) across read-process-write stream loops using Idempotent Producers, Transactional Coordinators, and 2PC.

Read →
Engineering Java Collections From Scratch • Part 14 2026-10-02

Red-Black Tree Rotations Explained: Self-Balancing Trees in Java

Demystify Red-Black tree rotations and recoloring. Understand how Java TreeMap and HashMap maintain O(log N) balance guarantees.

Read →
Engineering Kafka from First Principles • Part 14 2026-10-02

Kafka KRaft Consensus Mode: Replacing ZooKeeper for Million-Partition Scale

Understand KIP-500 and KRaft mode in Kafka. Learn how self-managed Raft metadata consensus eliminates ZooKeeper and unlocks million-partition scale.

Read →
Engineering Java Collections From Scratch • Part 13 2026-09-29

Building a Binary Search Tree (BST) in Java: Recursive Operations & Range Queries

Implement a Binary Search Tree in Java. Learn recursive insertion, in-order traversal for sorted data, and why skewed trees degrade.

Read →
Engineering Kafka from First Principles • Part 13 2026-09-29

Kafka Partition Replication: High Watermark, LEO & In-Sync Replicas (ISR)

Learn how Kafka achieves high availability without data corruption using leader/follower replication, High Watermarks, ISR tracking, and Leader Epochs.

Read →
Engineering Java Collections From Scratch • Part 12 2026-09-25

Building a Custom LRU Cache in Java Using LinkedHashMap

Build an LRU Cache in Java in 10 lines of code by extending LinkedHashMap and leveraging access-order doubly linked entry pointers.

Read →
Engineering Kafka from First Principles • Part 12 2026-09-25

Kafka Consumer Rebalancing: Eager Storms vs Cooperative Sticky Assignors

Eliminate stop-the-world consumer processing outages in Kafka. Compare legacy Eager Rebalancing with modern Cooperative Sticky Assignors.

Read →
Engineering Java Collections From Scratch • Part 11 2026-09-22

How Java HashSet Works Under the Hood: Building a Set via Composition

Discover how Java HashSet uses composition to wrap HashMap key uniqueness, spending zero extra memory on static dummy value references.

Read →
Engineering Kafka from First Principles • Part 11 2026-09-22

Kafka Offset Management: Manual Commits, __consumer_offsets & Message Replay

Master Kafka offset management and delivery semantics. Implement manual commits to achieve At-Least-Once processing and seek historical offsets.

Read →
Engineering Java Collections From Scratch • Part 10 2026-09-18

Java HashMap Internals (Part 2): Load Factor, Resizing & Red-Black Treeification

Learn how Java HashMap resizes its bucket table when reaching load factor threshold, and how JDK 8 treeifies long bucket chains.

Read →
Engineering Kafka from First Principles • Part 10 2026-09-18

Kafka Consumer Groups & Pull Model: Scale-Out Processing Without Lock Contention

Learn how Kafka Consumer Groups scale out event processing. Understand why Kafka uses a Pull Model for native backpressure protection.

Read →
Engineering Java Collections From Scratch • Part 9 2026-09-15

Java HashMap Internals (Part 1): Hashing Functions, Buckets & Separate Chaining

Deep dive into Java HashMap internals. Learn how hash functions, bitwise masking, and separate bucket chaining store key-value pairs.

Read →
Engineering Kafka from First Principles • Part 9 2026-09-15

Kafka Producer Reliability: Balancing acks=all, min.insync.replicas & Data Loss

Understand Kafka producer durability trade-offs. Configure acks=all and min.insync.replicas=2 to guarantee zero data loss on critical event streams.

Read →
Engineering Java Collections From Scratch • Part 8 2026-09-11

Building a Double-Ended Queue (Deque) in Java for Sliding Window Algorithms

Implement a custom ArrayDeque in Java for dual-ended operations. Solve sliding window maximum algorithms in O(1) time.

Read →
Engineering Kafka from First Principles • Part 8 2026-09-11

Kafka Partition Routing: MurmurHash2 Keys, Sticky Partitioning & Idempotence

Master Kafka message ordering. Learn how MurmurHash2 routes keyed records, how Sticky Partitioning optimizes null keys, and how idempotence fixes out-of-order retries.

Read →
Engineering Spring & Spring Boot Core Internals from First Principles • Part 8 2026-09-11

Why Spring Boot Exists: Eliminating XML Configuration and Dependency Hell

Trace the architectural history of Spring Framework from XML bean wiring and WAR deployments to Spring Boot opinionated starter dependencies.

Read →
Engineering Java Collections From Scratch • Part 7 2026-09-08

Building a Circular Queue in Java: Array Ring Buffers and Modulo Math

Build a high-performance circular array queue in Java. Eliminate O(N) array shifts using modulo arithmetic head and tail pointers.

Read →
Engineering Kafka from First Principles • Part 7 2026-09-08

Kafka Producer Internals: Tuning RecordAccumulator, batch.size & linger.ms

Deep dive into KafkaProducer mechanics. Learn how RecordAccumulator, batch.size, linger.ms, and ZSTD batch compression maximize streaming throughput.

Read →
Engineering Database Internals from First Principles • Part 6 2026-09-04

The InnoDB Buffer Pool: Dirty Pages, LRU Eviction, and LSN Checkpointing

Learn how MySQL InnoDB Buffer Pool caches 16KB data pages, evicts cold pages via midpoint LRU algorithms, and flushes dirty pages asynchronously.

Read →
Engineering Java Collections From Scratch • Part 6 2026-09-04

Building a Custom Java Stack: LIFO Mechanics & Why Legacy Stack is Broken

Build a custom LIFO Stack in Java. Learn why java.util.Stack is obsolete and how ArrayDeque provides better performance.

Read →
Engineering Kafka from First Principles • Part 6 2026-09-04

Kafka Storage Internals: Log Segments, Sparse Indexes & Log Compaction

Learn how Kafka locates any message in microseconds using sparse memory-mapped index files (.index) and prunes stale keys using Log Compaction.

Read →
Engineering Database Internals from First Principles • Part 5 2026-09-01

Write-Ahead Logging (WAL) & ARIES Crash Recovery: How Databases Guarantee Durability

Learn how Write-Ahead Logging (WAL) and the ARIES algorithm guarantee zero data loss during power outages and system crashes.

Read →
Engineering Java Collections From Scratch • Part 5 2026-09-01

Java Iterator and modCount: How Fail-Fast Iteration Prevents Data Corruption

Explore how Java iterators use modCount to throw ConcurrentModificationException and prevent silent data corruption during list traversal.

Read →
Engineering Kafka from First Principles • Part 5 2026-09-01

Kafka Zero-Copy Optimization: How sendfile() Streams Millions of Events/Sec

Discover how Kafka uses Java NIO transferTo() and Linux sendfile() Zero-Copy optimization to stream gigabits of data per second with minimal CPU load.

Read →
Engineering Database Internals from First Principles • Part 4 2026-08-28

Demystifying ACID: Transactions as an Isolation & Recovery Abstraction

Deconstruct ACID transaction guarantees in database engines. Learn how atomicity, consistency, isolation, and durability function under the hood.

Read →
Engineering Java Collections From Scratch • Part 4 2026-08-28

Java LinkedList Internals: Building a Doubly Linked List from Scratch

Learn how Java LinkedList works under the hood by building a doubly linked list. Compare ArrayList vs LinkedList performance trade-offs.

Read →
Engineering Kafka from First Principles • Part 4 2026-08-28

Kafka Architecture Deep Dive: Topics, Partitions, and Offset Ordering Rules

Deconstruct Kafka storage anatomy: Topics, Partitions, and Offsets. Learn how partition sharding scales write throughput and consumer parallelism.

Read →
Engineering Database Internals from First Principles • Part 3 2026-08-25

The B+ Tree Deep Dive: Why Database Indexes Use Balanced Trees Instead of Hash Maps

Discover why database storage engines use B+ Trees for primary and secondary indexes. Learn how high fan-out page nodes enable range scans in 3 disk IOs.

Read →
Engineering Java Collections From Scratch • Part 3 2026-08-25

How Java ArrayList Works Internally: Building a Dynamic Array from Scratch

Build a custom ArrayList in Java from scratch. Understand dynamic array resizing, System.arraycopy performance, and garbage collection.

Read →
Engineering Kafka from First Principles • Part 3 2026-08-25

The Append-Only Log Abstraction: Why Immutability Rules Event Streaming

Explore the append-only log data structure behind Apache Kafka. Learn how immutability enables lock-free concurrency and multi-team data replay.

Read →
Engineering Database Internals from First Principles • Part 2 2026-08-21

Pages, Blocks, and Heap Files: How Database Storage Engines Layout Data on Disk

Explore how database engines organize table data on disk using 16KB Slotted Pages, slot offset arrays, tuple headers, and Record IDs.

Read →
Engineering Java Collections From Scratch • Part 2 2026-08-21

Java equals() and hashCode() Contract: Avoiding Silent HashMap Bugs

Learn the unbreakable contract between equals() and hashCode() in Java to prevent silent HashMap lookup bugs and memory leaks.

Read →
Engineering Kafka from First Principles • Part 2 2026-08-21

Kafka Performance Secrets: Why Sequential Disk I/O Beats Random RAM Access

Learn why Kafka stores all events on disk. Understand how sequential disk writes and Linux OS Page Cache bypass JVM Garbage Collection pauses.

Read →
Engineering Database Internals from First Principles • Part 1 2026-08-18

Why Files Fail as Databases: Concurrent Access, Update Anomalies & Crash Recovery

Discover why storing application data inside flat CSV or JSON files leads to race conditions, lost updates, corrupted data on crash, and performance failure.

Read →
Engineering Java Collections From Scratch • Part 1 2026-08-18

Java Memory Model Explained: Stack vs Heap Allocation for Arrays

Understand how the JVM allocates memory on the stack and heap when declaring primitive and object reference arrays in Java.

Read →
Engineering Kafka from First Principles • Part 1 2026-08-18

Why Apache Kafka Exists: Solving Microservice N² Integration Spaghetti

Discover why Apache Kafka was created at LinkedIn. Learn how central append-only event logs solve microservice point-to-point integration spaghetti.

Read →
Engineering Spring & Spring Boot Core Internals from First Principles • Part 1 2026-08-18

Why Manual Object Wiring Fails at Scale: The Inversion of Control (IoC) Problem

Discover why manual Java object instantiation fails at scale: tight coupling, rigid constructor dependencies, and Inversion of Control (IoC) solutions.

Read →
Engineering Java Collections From Scratch • Part 0 2026-08-14

Mastering Java Collections from First Principles: Series Introduction & Learning Roadmap

Discover what you will learn in this 25-part series on Java Collections internals. Build data structures from scratch and master memory mechanics.

Read →