<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Bimal's Vault</title>
    <link>https://bimalray.me</link>
    <description>Engineering notes, deep dives, and projects by Bimal Ray</description>
    <language>en</language>
    <lastBuildDate>Sat, 18 Jul 2026 07:59:13 GMT</lastBuildDate>
    <atom:link href="https://bimalray.me/rss.xml" rel="self" type="application/rss+xml"/>
  <item>
    <title>System Design Fundamentals</title>
    <link>https://bimalray.me/backend/system-design-fundamentals</link>
    <guid>https://bimalray.me/backend/system-design-fundamentals</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description></description>
  </item>
  <item>
    <title>Thread Synchronization</title>
    <link>https://bimalray.me/backend/thread-synchronization</link>
    <guid>https://bimalray.me/backend/thread-synchronization</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>Every multithreaded bug you'll ever debug traces back to one thing: two threads touching the same piece of memory at the same time, with no agreement on who goes first.

count++ looks like one operation. It's actually three, read the value, add one, write it back. If two threads interleave those thre</description>
  </item>
  <item>
    <title>Thread Executors</title>
    <link>https://bimalray.me/backend/thread-executors</link>
    <guid>https://bimalray.me/backend/thread-executors</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>Creating a thread in Java is cheap to write and expensive to run at scale. new Thread(() -&gt; doWork()).start() looks harmless, but every call to it creates a real OS thread, with its own stack, its own scheduling overhead, and no coordination with any other thread you've spun up elsewhere in the syste</description>
  </item>
  <item>
    <title>Semaphores</title>
    <link>https://bimalray.me/backend/semaphores</link>
    <guid>https://bimalray.me/backend/semaphores</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>Every lock covered so far, synchronized, ReentrantLock, ReentrantReadWriteLock, answers the same question: how many threads can be in this critical section at once. The answer is always one, or in the read/write case, one writer or unlimited readers.

That's fine when the resource genuinely only tole</description>
  </item>
  <item>
    <title>Quality Attributes</title>
    <link>https://bimalray.me/backend/quality-attributes</link>
    <guid>https://bimalray.me/backend/quality-attributes</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>Non-functional requirements told you what qualities a system needs, scale, latency, availability. Quality attributes are the more formal, architecture-review version of the same idea, a specific vocabulary for talking about those qualities precisely enough that they can actually be measured, tested, </description>
  </item>
  <item>
    <title>Performance vs Scalability</title>
    <link>https://bimalray.me/backend/performance-vs-scalability</link>
    <guid>https://bimalray.me/backend/performance-vs-scalability</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>Performance vs Scalability

These two terms get used interchangeably in casual conversation, &quot;the system needs to be faster and scale better,&quot; as if they're the same goal. They're not, and conflating them leads to a specific, recurring mistake, optimizing one while assuming it fixes the other, when s</description>
  </item>
  <item>
    <title>Future and CompletableFuture</title>
    <link>https://bimalray.me/backend/future-and-completablefuture</link>
    <guid>https://bimalray.me/backend/future-and-completablefuture</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>Everything so far in this series solves a coordination problem, threads sharing state safely, or threads waiting on each other. Futures solve a different problem entirely, getting a result back from work that hasn't finished yet.

When you submit a task to an ExecutorService, that call returns before</description>
  </item>
  <item>
    <title>Locks and Types of Locks</title>
    <link>https://bimalray.me/backend/locks-and-types-of-locks</link>
    <guid>https://bimalray.me/backend/locks-and-types-of-locks</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>synchronized covers the common case, acquire a lock, do work, release it automatically, even if an exception fires. For most critical sections, that's all you need.

But synchronized is rigid in ways that eventually bite you. You can't try to acquire it and give up after a timeout. You can't interrup</description>
  </item>
  <item>
    <title>Thread Communication</title>
    <link>https://bimalray.me/backend/thread-communication</link>
    <guid>https://bimalray.me/backend/thread-communication</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>synchronized, volatile, and atomic variables all solve the same narrow problem, keeping shared state consistent when multiple threads touch it. None of them solve a completely different problem: what happens when a thread has nothing to do yet.

A consumer thread with an empty queue in front of it is</description>
  </item>
  <item>
    <title>Capacity Estimation</title>
    <link>https://bimalray.me/backend/capacity-estimation</link>
    <guid>https://bimalray.me/backend/capacity-estimation</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>Back-of-the-envelope estimation was the general skill, rough math, memorized reference numbers, ruling architectures in or out fast. Capacity estimation is that skill applied as a specific, repeatable pipeline, five numbers computed in a fixed order, where each one feeds directly into the next. The d</description>
  </item>
  <item>
    <title>Java Concurrent Collections</title>
    <link>https://bimalray.me/backend/java-concurrent-collections</link>
    <guid>https://bimalray.me/backend/java-concurrent-collections</guid>
    <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
    <description>Every standard Java collection, HashMap, ArrayList, LinkedList, was designed with one assumption baked in: a single thread owns it.

That assumption works fine until it doesn't. The moment two threads touch the same collection at the same time, that assumption breaks, and Java's standard collections </description>
  </item>
  <item>
    <title>Non-Functional Requirements</title>
    <link>https://bimalray.me/backend/non-functional-requirements</link>
    <guid>https://bimalray.me/backend/non-functional-requirements</guid>
    <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
    <description>Non-Functional Requirements

Functional requirements answer what a system does. Non-functional requirements answer how well it needs to do it, and this second question is usually the one that actually determines the architecture. Two systems with identical functional requirements, &quot;users can post and</description>
  </item>
  <item>
    <title>How to Approach HLD Problems</title>
    <link>https://bimalray.me/backend/how-to-approach-hld-problems</link>
    <guid>https://bimalray.me/backend/how-to-approach-hld-problems</guid>
    <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
    <description>Every previous note in this section covered one specific skill, gathering requirements, estimating capacity, distinguishing performance from scalability. This one is the assembly instructions, the order those skills actually get applied in during a real HLD conversation, and just as importantly, roug</description>
  </item>
  <item>
    <title>Back of the Envelope Estimation</title>
    <link>https://bimalray.me/backend/back-of-the-envelope-estimation</link>
    <guid>https://bimalray.me/backend/back-of-the-envelope-estimation</guid>
    <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
    <description>Back of the Envelope Estimation

At some point in a system design conversation, the discussion needs to leave the abstract, &quot;the system needs to scale,&quot; and land on actual numbers, how many servers, how much storage, whether a single database can handle the load at all. Back-of-the-envelope estimatio</description>
  </item>
  <item>
    <title>Functional Requirements</title>
    <link>https://bimalray.me/backend/functional-requirements</link>
    <guid>https://bimalray.me/backend/functional-requirements</guid>
    <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
    <description>Functional Requirements

Every system design conversation, whether it's a real project or an interview, starts from an ambiguous prompt. &quot;Design Instagram.&quot; &quot;Build a notification system.&quot; That prompt on its own tells you almost nothing about what to actually build. Functional requirements are the fir</description>
  </item>
  <item>
    <title>HLD vs LLD</title>
    <link>https://bimalray.me/backend/hld-vs-lld</link>
    <guid>https://bimalray.me/backend/hld-vs-lld</guid>
    <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
    <description>HLD vs LLD

The previous note touched on this distinction briefly, mostly to establish what HLD actually is. This one earns its own full treatment, because &quot;HLD vs LLD&quot; isn't just a definitional footnote, it's one of the most commonly misunderstood distinctions in system design prep, and getting it w</description>
  </item>
  <item>
    <title>Scale from 0 to Millions</title>
    <link>https://bimalray.me/backend/scale-from-0-to-millions</link>
    <guid>https://bimalray.me/backend/scale-from-0-to-millions</guid>
    <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
    <description>Scale from 0 to Millions

Every system starts as one machine running everything. A system built for a million users doesn't look like that one machine with better hardware, it looks structurally different, pieces split apart, duplicated, and specialized in ways that only make sense once traffic actua</description>
  </item>
  <item>
    <title>Introduction to High-Level Design (HLD)</title>
    <link>https://bimalray.me/backend/introduction-to-high-level-design-hld</link>
    <guid>https://bimalray.me/backend/introduction-to-high-level-design-hld</guid>
    <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
    <description>What is HLD?

Every real system starts as a vague idea, &quot;build something like Instagram,&quot; &quot;build a payment system,&quot; and the actual engineering work only begins once that vague idea gets turned into decisions. Which pieces exist. How they talk to each other. Where data lives. What happens when somethi</description>
  </item>
  <item>
    <title>4.Command Design Pattern</title>
    <link>https://bimalray.me/backend/4-command-design-pattern</link>
    <guid>https://bimalray.me/backend/4-command-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Command Design Pattern

A TV remote needs to turn the TV on, turn it off, change the channel, adjust volume. The obvious first pass is a RemoteControl class holding a reference to a TV object, with one method per button, each one directly calling the matching method on TV.

public void pressOnButton(</description>
  </item>
  <item>
    <title>3.Iterator Design Pattern</title>
    <link>https://bimalray.me/backend/3-iterator-design-pattern</link>
    <guid>https://bimalray.me/backend/3-iterator-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Iterator Design Pattern

A playlist needs to be played through, one song at a time. The obvious way to do that is a for loop inside a playPlaylist() method, walking the underlying list by index.

That's fine until a second way of playing the playlist shows up. Shuffle mode, say. The instinct is to ad</description>
  </item>
  <item>
    <title>7. Template Design Pattern</title>
    <link>https://bimalray.me/backend/7-template-design-pattern</link>
    <guid>https://bimalray.me/backend/7-template-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Template Design Pattern

Making coffee and making tea look almost identical as processes. Boil water, prepare the drink, pour it into a cup, add something to finish it off. The specific brewing step differs, and what gets added at the end differs, but the shape of the process is the same both times.
</description>
  </item>
  <item>
    <title>5.Prototype Design Pattern</title>
    <link>https://bimalray.me/backend/5-prototype-design-pattern</link>
    <guid>https://bimalray.me/backend/5-prototype-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>The setup

A game character has a name, health, attack power, level. Players want variations of characters that already exist, mostly the same stats, a different name here, a bumped level there.

The first instinct is usually a factory method per kind of change. One method to create a character with </description>
  </item>
  <item>
    <title>10.Memento Design Pattern</title>
    <link>https://bimalray.me/backend/10-memento-design-pattern</link>
    <guid>https://bimalray.me/backend/10-memento-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Memento Design Pattern

A text editor needs undo. The most direct attempt is to just keep a variable holding whatever the text was before the last change.

String backup = &quot;Hello&quot;;
editor.setText(&quot;Hello, World!&quot;);
editor.undo(backup);


Single undo, this technically works. The moment more than one le</description>
  </item>
  <item>
    <title>4.Singleton Design Pattern</title>
    <link>https://bimalray.me/backend/4-singleton-design-pattern</link>
    <guid>https://bimalray.me/backend/4-singleton-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Singleton Design Pattern

Why this pattern exists at all

Some objects only make sense once. A logger, a database connection pool, a configuration object, these represent a single shared resource, and having more than one instance of them isn't just wasteful, it actively causes inconsistency.

Logs s</description>
  </item>
  <item>
    <title>3.Builder Design Pattern</title>
    <link>https://bimalray.me/backend/3-builder-design-pattern</link>
    <guid>https://bimalray.me/backend/3-builder-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Why this pattern exists at all



Every object that has more than a handful of fields runs into the same design tension eventually: how do you construct it in a way that's both correct and readable, especially when half those fields are optional?



The naive answer is a constructor that takes everyt</description>
  </item>
  <item>
    <title>6.State Design Pattern</title>
    <link>https://bimalray.me/backend/6-state-design-pattern</link>
    <guid>https://bimalray.me/backend/6-state-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>State Design Pattern

A traffic light cycles through red, green, yellow. The most direct implementation stores the color as a string, and a next() method branches on that string to figure out what to change it to.

public void next() {
    if (color.equals(&quot;RED&quot;)) {
        color = &quot;GREEN&quot;;
    } els</description>
  </item>
  <item>
    <title>9.Visitor Design Pattern</title>
    <link>https://bimalray.me/backend/9-visitor-design-pattern</link>
    <guid>https://bimalray.me/backend/9-visitor-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Visitor Design Pattern

A hospital has three patient types, child, adult, and senior, and each one needs diagnosis and billing handled slightly differently. The direct way to write this is instanceof checks in the calling code, branching based on which concrete patient class you're actually holding.
</description>
  </item>
  <item>
    <title>5.Mediator Design Pattern</title>
    <link>https://bimalray.me/backend/5-mediator-design-pattern</link>
    <guid>https://bimalray.me/backend/5-mediator-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Mediator Design Pattern

An auction has three bidders, and every time one places a bid, the other two need to know about it. The direct way to do this is to give each Bidder a reference to every other bidder, and have placeBid() loop through all of them, calling receiveBid() on each one directly.

pu</description>
  </item>
  <item>
    <title>1.Strategy Design Pattern</title>
    <link>https://bimalray.me/backend/1-strategy-design-pattern</link>
    <guid>https://bimalray.me/backend/1-strategy-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Strategy Design Pattern

An e-commerce checkout needs to support Credit Card, PayPal, and Crypto, with more payment methods arriving over time. The naive version of this is a single processPayment() method with an if-else chain checking the payment type string and running the matching block inline.

</description>
  </item>
  <item>
    <title>8.Chain of Responsibility Pattern</title>
    <link>https://bimalray.me/backend/8-chain-of-responsibility-pattern</link>
    <guid>https://bimalray.me/backend/8-chain-of-responsibility-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Chain of Responsibility Design Pattern

A leave request needs approval, and who approves it depends on how many days off are being requested. Short leave goes to a supervisor, a longer one needs a manager, longer still needs a director. The direct way to code this is a single function with nested if-</description>
  </item>
  <item>
    <title>2.Observer Design Pattern</title>
    <link>https://bimalray.me/backend/2-observer-design-pattern</link>
    <guid>https://bimalray.me/backend/2-observer-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Observer Design Pattern

A YouTube channel has subscribers. Every time a new video drops, every subscriber needs to know about it. The first version of this looks reasonable enough, a YouTubeChannel holding a list of subscriber names, and a notifySubscribers() method that loops through them and print</description>
  </item>
  <item>
    <title>1.Factory Design Pattern</title>
    <link>https://bimalray.me/backend/factory-design-pattern</link>
    <guid>https://bimalray.me/backend/factory-design-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Why this exists at all



The previous article introduced Factory Method as a concept, delegate the decision of which subtype to create. This one is worth seeing built up from scratch, because the pattern doesn't look necessary until you watch the alternative fall apart first.



Start simple. A tran</description>
  </item>
  <item>
    <title>2.Abstract Factory Pattern</title>
    <link>https://bimalray.me/backend/abstract-factory-pattern</link>
    <guid>https://bimalray.me/backend/abstract-factory-pattern</guid>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <description>Why this exists at all

The Simple Factory from the previous article solved scattered if/else chains by centralizing them into one method. That fix has a shelf life. The centralization helps, but the method itself still needs to change every time a new type shows up, and that's a different problem th</description>
  </item>
  <item>
    <title>Symmetric Encryption</title>
    <link>https://bimalray.me/networking/symmetric-encryption</link>
    <guid>https://bimalray.me/networking/symmetric-encryption</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>🔐 Symmetric Encryption (Explained Simply)

🧠 Imagine This First…

You and your friend have a secret locker.

You both use the same key to lock and unlock it

Anyone without that key? ❌ No access

That’s exactly how symmetric encryption works.

🔁 Basic Idea

Plaintext ──(Key)──▶ Ciphertext ──(Same Key</description>
  </item>
  <item>
    <title>RSA Encryption</title>
    <link>https://bimalray.me/networking/rsa-encryption</link>
    <guid>https://bimalray.me/networking/rsa-encryption</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>🔐 RSA Encryption (Explained Simply)

🧠 Imagine This First…

You have a locked box:

Anyone can lock it using your public key 📩

Only you can unlock it using your private key 🔓

👉 That’s how RSA encryption works

🧩 What is RSA?

RSA is one of the most widely used asymmetric encryption algorithms

👉 It</description>
  </item>
  <item>
    <title>Secret Key</title>
    <link>https://bimalray.me/networking/secret-key</link>
    <guid>https://bimalray.me/networking/secret-key</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>🔑 Secret Keys (Explained Simply)

🧠 Imagine This First…

Think of a password to your phone.

Only you (and someone you trust) know it

Anyone else? ❌ Locked out

That password is basically your secret key.

🧩 What is a Secret Key?

A secret key is:

A sequence of 1’s and 0’s (binary data)

Used in cr</description>
  </item>
  <item>
    <title>Pseudo Random Function</title>
    <link>https://bimalray.me/networking/pseudo-random-function</link>
    <guid>https://bimalray.me/networking/pseudo-random-function</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>🎲 Pseudo-Random Functions (PRF) &amp; KDF (Explained Simply)

🧠 Imagine This First…

You have a master secret key, and instead of sharing it again and again…

👉 You use it to generate new keys whenever needed

Same secret → consistent results

But output looks completely random

👉 That’s what a PRF does
</description>
  </item>
  <item>
    <title>Hashing &amp; Hash Function</title>
    <link>https://bimalray.me/networking/hashing-and-hash-function</link>
    <guid>https://bimalray.me/networking/hashing-and-hash-function</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>🧩 Hashing &amp; Hash Functions (Explained Simply)

🧠 Imagine This First…

You upload a file, and the system gives you a unique fingerprint.

If the file changes even slightly → fingerprint changes

Same file → same fingerprint

👉 That fingerprint is a hash

⚠️ First Rule: Hashing ≠ Encryption

Encryption</description>
  </item>
  <item>
    <title>HMAC/MAC</title>
    <link>https://bimalray.me/networking/hmac-mac</link>
    <guid>https://bimalray.me/networking/hmac-mac</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>🔐 Message Authentication Code (MAC) &amp; HMAC (Explained Simply)

🧠 Imagine This First…

You send a message to your friend along with a secret stamp.

Only you and your friend know how to create that stamp

If someone changes the message → the stamp becomes invalid ❌

👉 That stamp is like a MAC

🧩 What </description>
  </item>
  <item>
    <title>Key-Exchange</title>
    <link>https://bimalray.me/networking/key-exchange</link>
    <guid>https://bimalray.me/networking/key-exchange</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>🔑 Key Exchange (Explained Simply)

🧠 Imagine This First…

You and your friend want to share a secret password, but:

You’re talking over the internet 🌐

Someone might be listening 👂

👉 So how do you agree on a secret without revealing it?

That’s where Key Exchange comes in.

🧩 What is Key Exchange?
</description>
  </item>
  <item>
    <title>CRYPTOGRAPHY</title>
    <link>https://bimalray.me/networking/cryptography</link>
    <guid>https://bimalray.me/networking/cryptography</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>🔐 What is Cryptography and Why Does It Matter?

Every time you send a message, make an online payment, or log into a website, cryptography is working silently in the background to keep your data safe.

At its core, cryptography is the science of securing information—transforming readable data (plaint</description>
  </item>
  <item>
    <title>Asymmetric Encryption</title>
    <link>https://bimalray.me/networking/asymmetric-encryption</link>
    <guid>https://bimalray.me/networking/asymmetric-encryption</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>🔐 Asymmetric Encryption (Explained Simply)

🧠 Imagine This First…

You have a mailbox with two keys:

One key is public → anyone can use it to drop messages in 📩

One key is private → only you can open and read them 🔓

👉 That’s how asymmetric encryption works

🧩 What is Asymmetric Encryption?

Asymme</description>
  </item>
  <item>
    <title>RSA Key Exchange</title>
    <link>https://bimalray.me/networking/rsa-key-exchange</link>
    <guid>https://bimalray.me/networking/rsa-key-exchange</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description></description>
  </item>
  <item>
    <title>Signatures</title>
    <link>https://bimalray.me/networking/signatures</link>
    <guid>https://bimalray.me/networking/signatures</guid>
    <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    <description>✍️ Digital Signatures (Explained Simply)

🧠 Imagine This First…

You sign a document with your unique signature.

Anyone can see and verify it 👀

But only you can create it ✍️

👉 That’s exactly how digital signatures work in cryptography

🧩 What is a Digital Signature?

A digital signature is:

👉 A c</description>
  </item>
  <item>
    <title>Decorator Design Pattern</title>
    <link>https://bimalray.me/backend/decorator-design-pattern</link>
    <guid>https://bimalray.me/backend/decorator-design-pattern</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>Decorator Design Pattern

A coffee shop sells Espresso and Cappuccino, and customers add milk, sugar, or vanilla in whatever combination they want. The direct way to represent this is matching strings against exact order descriptions.

if (coffeeOrder.equals(&quot;Espresso with Milk and Sugar&quot;)) {
    Sys</description>
  </item>
  <item>
    <title>Concurrency in JAVA</title>
    <link>https://bimalray.me/backend/concurrency-in-java</link>
    <guid>https://bimalray.me/backend/concurrency-in-java</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>Java Threads: Thread Class, Runnable Interface, and Callable

Java applications normally execute one task at a time using a single thread. However, modern applications often need to perform multiple tasks simultaneously—such as serving multiple users, downloading files in the background, or processin</description>
  </item>
  <item>
    <title>Quick notes(SDP)</title>
    <link>https://bimalray.me/backend/quick-notes-sdp</link>
    <guid>https://bimalray.me/backend/quick-notes-sdp</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>Structural Design Patterns — Fundamental Understanding

Even More Fundamental

Forget the names. Just remember the problem.



What They're Actually Doing Internally



Adapter

Nothing new is created.

Nothing changes.

It simply translates communication.

It solves a communication problem.

Composi</description>
  </item>
  <item>
    <title>LLD problems</title>
    <link>https://bimalray.me/backend/lld-problems</link>
    <guid>https://bimalray.me/backend/lld-problems</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>LLD problems</description>
  </item>
  <item>
    <title>Bridge Design Pattern</title>
    <link>https://bimalray.me/backend/bridge-design-pattern</link>
    <guid>https://bimalray.me/backend/bridge-design-pattern</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>Bridge Design Pattern

A drawing app needs to render shapes, circles, rectangles, and needs to support multiple rendering methods, raster and vector. The most direct way to combine these is a method per shape-rendering combination, checked with string comparisons.

if (shapeType.equals(&quot;Circle&quot;) &amp;&amp; r</description>
  </item>
  <item>
    <title>Proxy Design Pattern</title>
    <link>https://bimalray.me/backend/proxy-design-pattern</link>
    <guid>https://bimalray.me/backend/proxy-design-pattern</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>Proxy Design Pattern

A video streaming service needs to check whether a user is allowed to watch a given video, cache videos that get requested repeatedly, and stop any single user from hammering the system with requests. The direct way to build this is putting all three concerns straight into the s</description>
  </item>
  <item>
    <title>Design Tic Tac Toe Game</title>
    <link>https://bimalray.me/backend/design-tic-tac-toe-game</link>
    <guid>https://bimalray.me/backend/design-tic-tac-toe-game</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>something</description>
  </item>
  <item>
    <title>Facade Design Pattern</title>
    <link>https://bimalray.me/backend/facade-design-pattern</link>
    <guid>https://bimalray.me/backend/facade-design-pattern</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>Facade Design Pattern

A multimedia app needs to play music, play video, and view images. Each of these is genuinely complicated underneath, playing music means initializing audio drivers, decoding the audio format, then starting playback, three separate steps that all need to happen in the right ord</description>
  </item>
  <item>
    <title>Flyweight Design Pattern</title>
    <link>https://bimalray.me/backend/flyweight-design-pattern</link>
    <guid>https://bimalray.me/backend/flyweight-design-pattern</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>Flyweight Design Pattern

A game rendering a thousand explosion particles needs an object per particle, each one tracking color, sprite, position, and velocity. The direct way to build this stores all four properties directly on every single particle object.

public class Particle {
    private Strin</description>
  </item>
  <item>
    <title>Java Thread Pool and Thread Lifecycle</title>
    <link>https://bimalray.me/backend/java-thread-pool-and-thread-lifecycle</link>
    <guid>https://bimalray.me/backend/java-thread-pool-and-thread-lifecycle</guid>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <description>Creating a new thread for every task is expensive. Every thread requires memory, CPU scheduling, and operating system resources. In applications that handle hundreds or thousands of requests, continuously creating and destroying threads leads to poor performance and resource exhaustion.

To solve thi</description>
  </item>
  <item>
    <title>Structural Design Patterns</title>
    <link>https://bimalray.me/backend/structural-design-patterns</link>
    <guid>https://bimalray.me/backend/structural-design-patterns</guid>
    <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
    <description>Structural Design Patterns

Creational patterns worry about how objects get built. Behavioral patterns worry about how objects communicate once they exist. Structural patterns sit in a third spot entirely, they worry about how objects and classes get composed together into larger structures, how piec</description>
  </item>
  <item>
    <title>Composite Design Pattern</title>
    <link>https://bimalray.me/backend/composite-design-pattern</link>
    <guid>https://bimalray.me/backend/composite-design-pattern</guid>
    <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
    <description>Composite Design Pattern

A smart home has devices nested inside rooms, rooms nested inside floors, floors nested inside the house. Turning off &quot;the whole house&quot; should cascade down through every floor, every room, every individual device. The direct way to write this is exactly what it sounds like, </description>
  </item>
  <item>
    <title>Adapter Design Pattern</title>
    <link>https://bimalray.me/backend/adapter-design-pattern</link>
    <guid>https://bimalray.me/backend/adapter-design-pattern</guid>
    <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
    <description>Adapter Design Pattern

A smart home app needs to control an air conditioner over Bluetooth, a smart light over Wi-Fi, and a coffee machine over Zigbee. The direct way to wire this up is a controller with an if-else chain checking device type, connecting to whichever protocol matches.

if (deviceType</description>
  </item>
  <item>
    <title>access-modifiers,Generics &amp; Wildcards</title>
    <link>https://bimalray.me/backend/access-modifiers</link>
    <guid>https://bimalray.me/backend/access-modifiers</guid>
    <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
    <description>Access Modifiers define the visibility and accessibility of classes, methods, constructors, and variables.

They are one of the fundamental mechanisms used to implement Encapsulation by controlling which parts of a program can access a particular member.

Java provides four access modifiers:

private</description>
  </item>
  <item>
    <title>Design Patterns</title>
    <link>https://bimalray.me/backend/design-patterns</link>
    <guid>https://bimalray.me/backend/design-patterns</guid>
    <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
    <description>Object creation looks trivial until you're deep in a real codebase. new Car() here, new Truck() there, scattered across dozens of files, each one hardcoding exactly which class to instantiate and how.

That works fine until the creation logic needs to change. Maybe a car now needs a different constru</description>
  </item>
  <item>
    <title>Design Principles</title>
    <link>https://bimalray.me/backend/design-principles</link>
    <guid>https://bimalray.me/backend/design-principles</guid>
    <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
    <description>Good software is not defined by the number of features it provides but by how easy it is to understand, extend, and maintain. Over the years, developers have identified a set of principles that help build systems that are scalable, readable, and resilient to change. Among the most influential are SOL</description>
  </item>
  <item>
    <title>Behavioral Design Patterns</title>
    <link>https://bimalray.me/backend/behavioral-design</link>
    <guid>https://bimalray.me/backend/behavioral-design</guid>
    <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
    <description>Creational patterns worry about how objects get built. Structural patterns worry about how they're composed together. Behavioral patterns are the third category, and they worry about something different entirely: once objects exist and are wired together, how do they actually talk to each other, and </description>
  </item>
  <item>
    <title>Encapsulation</title>
    <link>https://bimalray.me/backend/encapsulation</link>
    <guid>https://bimalray.me/backend/encapsulation</guid>
    <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
    <description>Encapsulation is the process of bundling data (fields) and the methods that operate on that data into a single unit (class) while restricting direct access to the object's internal state.

It is one of the four fundamental principles of Object-Oriented Programming (OOP) and helps protect an object's </description>
  </item>
  <item>
    <title>Inheritance</title>
    <link>https://bimalray.me/backend/inheritance</link>
    <guid>https://bimalray.me/backend/inheritance</guid>
    <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
    <description>It allows a class to inherit the properties and behaviors of another class, promoting code reuse, extensibility, and hierarchical modeling.

The class being inherited from is called the Parent, Base, or Superclass, while the class that inherits is called the Child, Derived, or Subclass.

Inheritance </description>
  </item>
  <item>
    <title>Abstraction</title>
    <link>https://bimalray.me/backend/abstraction</link>
    <guid>https://bimalray.me/backend/abstraction</guid>
    <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
    <description>Abstraction is a core concept of Object-Oriented Programming (OOP) that focuses on exposing only the essential details of an object while hiding the implementation details. It enables developers to interact with objects at a higher level, focusing on what an object does rather than how it does it.

‍</description>
  </item>
  <item>
    <title>Polymorphism</title>
    <link>https://bimalray.me/backend/polymorphism</link>
    <guid>https://bimalray.me/backend/polymorphism</guid>
    <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
    <description>Polymorphism is one of the four fundamental pillars of Object-Oriented Programming (OOP). In OOP, polymorphism allows the same interface or method to exhibit different behaviors depending on the object invoking it. Instead of writing separate logic for each object type, we define a common contract an</description>
  </item>
  <item>
    <title>intro</title>
    <link>https://bimalray.me/backend/lld</link>
    <guid>https://bimalray.me/backend/lld</guid>
    <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
    <description>What is Low level System Design ?



Low-Level Design (LLD) is a detailed phase in the software development process that focuses on designing the individual components outlined in the High-Level Design (HLD). LLD delves into the specifics, defining how modules, classes, functions, and data structures</description>
  </item>
  <item>
    <title>OOPs</title>
    <link>https://bimalray.me/backend/oops</link>
    <guid>https://bimalray.me/backend/oops</guid>
    <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
    <description>Object-Oriented Programming (OOP) is a programming paradigm that organizes code into objects, which represent real-world entities. It allows developers to model complex systems by breaking them down into smaller, manageable pieces.

‍

The foundation of OOP lies in classes and objects, which together</description>
  </item>
  </channel>
</rss>