<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: I.K</title>
    <description>The latest articles on Forem by I.K (@ik_8a78062fd65be769dd835).</description>
    <link>https://forem.com/ik_8a78062fd65be769dd835</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1525090%2Fa170205f-193e-4ae7-8bf3-3e46b4a3ca64.jpg</url>
      <title>Forem: I.K</title>
      <link>https://forem.com/ik_8a78062fd65be769dd835</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ik_8a78062fd65be769dd835"/>
    <language>en</language>
    <item>
      <title>Showing up before you're ready</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Tue, 17 Mar 2026 13:33:22 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/showing-up-before-youre-ready-2dkb</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/showing-up-before-youre-ready-2dkb</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded-2026"&gt;2026 WeCoded Challenge&lt;/a&gt;: Echoes of Experience&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Beginning: Learning in Public
&lt;/h2&gt;

&lt;p&gt;I was months into posting about system design before anyone really noticed. No strategy, no audience. Just a running tab of things I was figuring out in public, shared whether or not I felt ready to share them.&lt;/p&gt;

&lt;p&gt;The resources weren't always great. I was piecing together half-written articles and old YouTube videos, working with what I had. That part was manageable. What nobody warned me about was &lt;strong&gt;motivation&lt;/strong&gt;—how unreliable it is, how fast it dries up. &lt;/p&gt;

&lt;p&gt;Three weeks in, the energy fades and the excuses come easy. What saved me wasn't some dramatic discipline overhaul. It was lowering the bar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Five minutes&lt;/strong&gt; counted. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One post&lt;/strong&gt; counted. &lt;/li&gt;
&lt;li&gt;Showing up badly beat not showing up at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Power of Consistency
&lt;/h2&gt;

&lt;p&gt;That consistency compounded. Since then, I've seen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Over 600 followers.&lt;/li&gt;
&lt;li&gt;A potential ambassadorship.&lt;/li&gt;
&lt;li&gt;Hackathon wins and communities that opened doors I didn't know existed. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wasn't the most talented person in those rooms. I was just the one who kept coming back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned (The Hard Way)
&lt;/h2&gt;

&lt;p&gt;The lessons weren't glamorous. Don't leave things to the last minute. Fourteen hours in one desperate sitting is no substitute for two focused hours every day: &lt;strong&gt;your brain rewards rhythm, not sprints.&lt;/strong&gt; The work you do exhausted and frantic rarely survives the morning.&lt;/p&gt;

&lt;p&gt;And then there's connections—the lesson that surprised me most. I used to think networking was a game for people who already belonged. I was wrong. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Fortune doesn't just favor the bold; it specifically favors the visible.&lt;/strong&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You have to put yourself out there before you feel ready: speak when your voice shakes, walk into rooms where you know no one. Every opportunity that changed something for me came from one of those uncomfortable moments.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  
&lt;h3&gt;
  
  
  A Note to the Underrepresented
&lt;/h3&gt;

&lt;p&gt;If you're under-resourced, flying blind, or unsure whether you belong: the gap usually isn't talent. It's &lt;strong&gt;consistency and visibility&lt;/strong&gt;. Take the speaking slot. Post the thing. Not because you're ready, but because showing up is how you get ready.&lt;br&gt;

&lt;/p&gt;
&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>wecoded</category>
      <category>dei</category>
      <category>career</category>
    </item>
    <item>
      <title>Daily DSA and System Design Journal - 16</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Sat, 01 Nov 2025 17:07:50 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-16-286n</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-16-286n</guid>
      <description>&lt;h2&gt;
  
  
  🔥 Day 16 — Greedy Growth &amp;amp; Global Pulls 🌍⚙️
&lt;/h2&gt;

&lt;p&gt;Greedy algorithms and CDNs both thrive on &lt;em&gt;balance&lt;/em&gt; — optimizing decisions locally to maximize global efficiency. Today’s combo: maximizing distinctness in arrays and minimizing latency with pull-based caching.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧩 DSA Problems [1 hr]
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; &lt;a href="https://leetcode.com/problems/find-maximum-distinct-elements-after-operations/" rel="noopener noreferrer"&gt;3176. Find Maximum Distinct Elements After Operations&lt;/a&gt; &lt;em&gt;(the problem you described matches this one)&lt;/em&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  💡 Approach: Greedy
&lt;/h4&gt;

&lt;h5&gt;
  
  
  🧠 Intuition
&lt;/h5&gt;

&lt;p&gt;We want to &lt;strong&gt;maximize the number of distinct elements&lt;/strong&gt; in an array after at most one operation per element,&lt;br&gt;
where each element &lt;code&gt;nums[i]&lt;/code&gt; can be changed by any value in the range &lt;code&gt;[nums[i] - k, nums[i] + k]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Key idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After applying all operations, all numbers lie within &lt;code&gt;[min(nums) - k, max(nums) + k]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To make as many unique numbers as possible, we should &lt;strong&gt;assign the smallest valid unused value&lt;/strong&gt; to each number.&lt;/li&gt;
&lt;/ul&gt;


&lt;h5&gt;
  
  
  🪜 Step-by-Step Greedy Process
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sort&lt;/strong&gt; the array in ascending order.&lt;/li&gt;
&lt;li&gt;Initialize a variable &lt;code&gt;prev = -inf&lt;/code&gt; to represent the last assigned value.&lt;/li&gt;
&lt;li&gt;For each number in sorted order:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Its valid range after operations is &lt;code&gt;[num - k, num + k]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose the &lt;strong&gt;smallest possible value&lt;/strong&gt; that’s still greater than &lt;code&gt;prev&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt; curr = min(max(num - k, prev + 1), num + k)
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;&lt;p&gt;If &lt;code&gt;curr &amp;gt; prev&lt;/code&gt;, increment the count and set &lt;code&gt;prev = curr&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This ensures that every element takes the &lt;em&gt;earliest distinct spot&lt;/em&gt; available.&lt;/p&gt;




&lt;h5&gt;
  
  
  💻 Code Implementation
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;maxDistinctElements&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="n"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inf&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;curr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;curr&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                &lt;span class="n"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;curr&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h5&gt;
  
  
  ⚙️ Complexity
&lt;/h5&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Complexity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⏱ Time&lt;/td&gt;
&lt;td&gt;O(n log n) — due to sorting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💾 Space&lt;/td&gt;
&lt;td&gt;O(log n) — typical for in-place sorting&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h5&gt;
  
  
  🧠 Insights
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;This greedy algorithm ensures &lt;strong&gt;local optimality per element&lt;/strong&gt;, leading to &lt;strong&gt;global optimal distinctness&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It parallels &lt;em&gt;interval scheduling&lt;/em&gt; — minimizing conflicts while maximizing utilization.&lt;/li&gt;
&lt;li&gt;Alternative view: we’re assigning each element a unique “slot” within its valid range.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🌍 SYSTEM DESIGN — Roadmap.sh [1 hr]
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🧭 Pull CDNs
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Pull CDNs&lt;/strong&gt; automatically fetch and cache your content &lt;strong&gt;on demand&lt;/strong&gt; — that is, &lt;em&gt;only when users request it for the first time&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;When a user requests content (like an image or CSS file):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The CDN checks if it already has a cached copy.&lt;/li&gt;
&lt;li&gt;If not, it &lt;strong&gt;pulls&lt;/strong&gt; it from your origin server.&lt;/li&gt;
&lt;li&gt;The content is cached and served to future users until it expires (based on TTL).&lt;/li&gt;
&lt;/ol&gt;




&lt;h4&gt;
  
  
  ⚙️ How It Works
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Clients access resources via CDN URLs (e.g., &lt;code&gt;cdn.example.com/images/logo.png&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The CDN routes the request to the &lt;strong&gt;nearest edge node&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If the content is cached and valid, it’s served instantly.&lt;/li&gt;
&lt;li&gt;Otherwise, it’s fetched from the &lt;strong&gt;origin&lt;/strong&gt;, cached, and then served.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  🕓 TTL (Time To Live)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Determines how long cached content remains before it’s revalidated or re-fetched.&lt;/li&gt;
&lt;li&gt;Choosing a good TTL balances &lt;strong&gt;freshness&lt;/strong&gt; (short TTL) vs. &lt;strong&gt;efficiency&lt;/strong&gt; (long TTL).&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  ✅ Pros
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hands-off caching&lt;/strong&gt; — no need to push content manually.&lt;/li&gt;
&lt;li&gt;Great for &lt;strong&gt;dynamic or frequently accessed&lt;/strong&gt; resources.&lt;/li&gt;
&lt;li&gt;Balances load across global edge servers.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  ⚠️ Cons
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;First request latency&lt;/strong&gt; — the initial user experiences a delay while the content is fetched.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redundant traffic&lt;/strong&gt; — if TTLs expire too soon, the same files may be re-fetched repeatedly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Possible staleness&lt;/strong&gt; — if content changes faster than cache invalidation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  💡 Ideal Use Cases
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Reason&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;High-traffic websites&lt;/td&gt;
&lt;td&gt;Frequent access keeps caches warm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;APIs serving static responses&lt;/td&gt;
&lt;td&gt;Edge caching reduces origin hits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video or image-heavy apps&lt;/td&gt;
&lt;td&gt;Large content benefits from proximity caching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🧩 DSA ↔ System Design Analogy
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;DSA Concept&lt;/th&gt;
&lt;th&gt;CDN Concept&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Assigning smallest valid distinct value&lt;/td&gt;
&lt;td&gt;Fetching content lazily, only when needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Greedy range compression&lt;/td&gt;
&lt;td&gt;Cache-space optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avoiding duplicates via &lt;code&gt;prev&lt;/code&gt; tracking&lt;/td&gt;
&lt;td&gt;Avoiding redundant pulls via TTL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both operate on &lt;strong&gt;lazy evaluation principles&lt;/strong&gt; — do the minimal necessary now to maximize global efficiency later. ⚙️&lt;/p&gt;




&lt;h4&gt;
  
  
  ✅ Day 16 Summary
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Greediness isn’t always bad — when used smartly, it leads to global harmony. Whether assigning numbers or caching content, &lt;strong&gt;optimal local choices build global distinctness and efficiency&lt;/strong&gt;. 🚀&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dsa</category>
      <category>devjournal</category>
      <category>beginners</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Daily DSA and System Design Journal - 15</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Fri, 31 Oct 2025 21:31:40 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-15-4983</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-15-4983</guid>
      <description>&lt;h2&gt;
  
  
  🧩 Day 15 — Sum of Good Subsequences &amp;amp; CDN Fundamentals
&lt;/h2&gt;




&lt;h3&gt;
  
  
  🧠 DSA Problems [1 hr]
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; &lt;a href="https://leetcode.com/problems/sum-of-good-subsequences/" rel="noopener noreferrer"&gt;3351. Sum of Good Subsequences&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  💡 Approach: Dynamic Programming on Value Links
&lt;/h4&gt;

&lt;h5&gt;
  
  
  🧠 Intuition
&lt;/h5&gt;

&lt;p&gt;We define two key state trackers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;count[a]&lt;/code&gt; — number of good subsequences ending with &lt;code&gt;a&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;res[a]&lt;/code&gt; — total sum of all subsequences ending with &lt;code&gt;a&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each number &lt;code&gt;a&lt;/code&gt; in the array:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We can &lt;strong&gt;start&lt;/strong&gt; a new subsequence with &lt;code&gt;a&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Or &lt;strong&gt;extend&lt;/strong&gt; subsequences ending with &lt;code&gt;a - 1&lt;/code&gt; and &lt;code&gt;a + 1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hence,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;count[a] = count[a-1] + count[a+1] + 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each of these subsequences contributes additional sums based on their totals and the value &lt;code&gt;a&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;res[a] = res[a-1] + res[a+1] + a * (count[a-1] + count[a+1] + 1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We take modulo &lt;code&gt;10^9 + 7&lt;/code&gt; to keep values bounded.&lt;br&gt;
Finally, the total sum of all subsequences is &lt;code&gt;sum(res.values())&lt;/code&gt;.&lt;/p&gt;




&lt;h4&gt;
  
  
  💻 Code Implementation
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sumOfGoodSubsequences&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;mod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;%=&lt;/span&gt; &lt;span class="n"&gt;mod&lt;/span&gt;

            &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;%=&lt;/span&gt; &lt;span class="n"&gt;mod&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;mod&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  ⚙️ Complexity
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Complexity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⏱ Time&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💾 Space&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🧩 Key Insight
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The solution uses &lt;strong&gt;local adjacency relationships&lt;/strong&gt; (&lt;code&gt;a-1&lt;/code&gt;, &lt;code&gt;a+1&lt;/code&gt;) to form &lt;strong&gt;global subsequence sums&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;This is a clean example of &lt;strong&gt;DP with aggregation via counters&lt;/strong&gt; instead of full DP arrays — space-efficient and value-oriented.&lt;/li&gt;
&lt;li&gt;The transitions mimic &lt;em&gt;propagation&lt;/em&gt; through neighboring states — a pattern common in DP, graph traversal, and even distributed systems.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🌍 SYSTEM DESIGN — Roadmap.sh [1 hr]
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🌐 Content Delivery Networks (CDNs)
&lt;/h4&gt;

&lt;p&gt;A &lt;strong&gt;CDN&lt;/strong&gt; is a globally distributed network that serves web content from servers &lt;strong&gt;closer to users&lt;/strong&gt;, drastically improving latency and scalability.&lt;/p&gt;

&lt;p&gt;When you load a site like &lt;code&gt;www.netflix.com&lt;/code&gt;, your assets (images, CSS, JS, videos) are often fetched from a nearby CDN edge node — not from Netflix’s origin servers.&lt;/p&gt;




&lt;h4&gt;
  
  
  ⚙️ How It Works
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;A client requests a resource (e.g., image or video).&lt;/li&gt;
&lt;li&gt;DNS resolves the domain to the &lt;strong&gt;nearest CDN edge server&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If cached, content is served immediately.&lt;/li&gt;
&lt;li&gt;If not, the edge server fetches it from the &lt;strong&gt;origin server&lt;/strong&gt;, caches it, and serves the user.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This &lt;strong&gt;reduces latency&lt;/strong&gt;, &lt;strong&gt;distributes load&lt;/strong&gt;, and &lt;strong&gt;saves bandwidth&lt;/strong&gt; at the origin.&lt;/p&gt;




&lt;h4&gt;
  
  
  🧱 Types of CDNs
&lt;/h4&gt;

&lt;h5&gt;
  
  
  🔹 Push CDN
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Content is &lt;strong&gt;pushed manually&lt;/strong&gt; or via automation to CDN nodes when it changes.&lt;/li&gt;
&lt;li&gt;You control cache invalidation and content updates.&lt;/li&gt;
&lt;li&gt;Best for sites with &lt;strong&gt;low traffic&lt;/strong&gt; or &lt;strong&gt;infrequent updates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;✅ Pros: Less redundant traffic, predictable storage.&lt;/li&gt;
&lt;li&gt;⚠️ Cons: Manual management, risk of stale content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  🔹 Pull CDN
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;CDN &lt;strong&gt;fetches content on demand&lt;/strong&gt; when requested for the first time.&lt;/li&gt;
&lt;li&gt;Cached locally afterward for future users.&lt;/li&gt;
&lt;li&gt;Ideal for &lt;strong&gt;high-traffic&lt;/strong&gt; or &lt;strong&gt;dynamic&lt;/strong&gt; sites.&lt;/li&gt;
&lt;li&gt;✅ Pros: Easier setup, automatic caching.&lt;/li&gt;
&lt;li&gt;⚠️ Cons: First-request latency, possible redundancy if TTL is too short.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  ⏳ TTL (Time To Live)
&lt;/h4&gt;

&lt;p&gt;Each cached item has a TTL — after which it expires and must be re-fetched from the origin.&lt;br&gt;
Finding the right TTL is crucial for balancing &lt;strong&gt;freshness vs. efficiency&lt;/strong&gt;.&lt;/p&gt;




&lt;h4&gt;
  
  
  ⚖️ CDN Trade-offs
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Advantage&lt;/th&gt;
&lt;th&gt;Disadvantage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⚡ Faster content delivery&lt;/td&gt;
&lt;td&gt;💰 Extra cost based on bandwidth usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧭 Global scalability&lt;/td&gt;
&lt;td&gt;🕓 Risk of stale content if updates happen before TTL expires&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧱 Reduced load on origin servers&lt;/td&gt;
&lt;td&gt;🔗 Requires rewriting URLs for CDN routing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🔍 Example Providers
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt; — strong free tier, DDoS protection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS CloudFront&lt;/strong&gt; — deep AWS integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Akamai&lt;/strong&gt;, &lt;strong&gt;Fastly&lt;/strong&gt;, &lt;strong&gt;Google Cloud CDN&lt;/strong&gt; — high-performance enterprise-grade CDNs&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  🧠 Reflection
&lt;/h4&gt;

&lt;p&gt;Today’s DSA and System Design topics beautifully align:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;DSA Concept&lt;/th&gt;
&lt;th&gt;CDN Analogy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Local adjacency propagation&lt;/td&gt;
&lt;td&gt;Content caching propagation across edge nodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic aggregation via neighbors&lt;/td&gt;
&lt;td&gt;Dynamic content refresh via TTL and caching rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(1) lookups via Counter&lt;/td&gt;
&lt;td&gt;Constant-time retrieval via global CDN caches&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both rely on &lt;strong&gt;localized computation&lt;/strong&gt; to achieve &lt;strong&gt;global efficiency&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;✅ &lt;strong&gt;Day 15 Summary:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From subsequences to CDNs — efficiency grows when we connect adjacent states and cache intelligently. 🚀&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dsa</category>
      <category>beginners</category>
      <category>devjournal</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Daily DSA and System Design Journal - 14</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Thu, 30 Oct 2025 16:28:44 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-14-2hdf</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-14-2hdf</guid>
      <description>&lt;h2&gt;
  
  
  🧠 Day 14 — Adjacent Patterns &amp;amp; Domain Resolution
&lt;/h2&gt;




&lt;h3&gt;
  
  
  🧩 DSA Problems [1 hr]
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; &lt;a href="https://leetcode.com/problems/adjacent-increasing-subarrays-detection-ii/" rel="noopener noreferrer"&gt;3350. Adjacent Increasing Subarrays Detection II&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  💡 Approach: One-time Traversal
&lt;/h4&gt;

&lt;h5&gt;
  
  
  🧠 Intuition
&lt;/h5&gt;

&lt;p&gt;We’re looking for &lt;strong&gt;adjacent strictly increasing subarrays&lt;/strong&gt; — essentially, zones where the array keeps climbing before it resets.&lt;/p&gt;

&lt;p&gt;We maintain two counters throughout one pass:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cnt&lt;/code&gt; — current increasing streak&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;precnt&lt;/code&gt; — previous streak length&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whenever the sequence stops increasing (&lt;code&gt;nums[i] &amp;lt;= nums[i-1]&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the previous count becomes &lt;code&gt;precnt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;we reset &lt;code&gt;cnt&lt;/code&gt; to 1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At every step, there are two possible adjacent subarray pairs to consider:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Current vs. Previous Segment:&lt;/strong&gt; max potential = &lt;code&gt;min(precnt, cnt)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single Extended Segment:&lt;/strong&gt; when both lie within one long increasing run, potential = &lt;code&gt;cnt // 2&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By tracking both, we find the &lt;strong&gt;maximum adjacent pattern size&lt;/strong&gt; in a single linear scan.&lt;/p&gt;




&lt;h4&gt;
  
  
  💻 Code
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;maxIncreasingSubarrays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;precnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;precnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ans&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;precnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ans&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ans&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  ⚙️ Complexity
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Complexity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⏱ Time&lt;/td&gt;
&lt;td&gt;O(n) — single traversal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💾 Space&lt;/td&gt;
&lt;td&gt;O(1) — constant memory&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🔍 Key Learnings
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;One-pass algorithms thrive on &lt;strong&gt;state compression&lt;/strong&gt; — carrying only the info that truly matters.&lt;/li&gt;
&lt;li&gt;Understanding &lt;strong&gt;segment relationships&lt;/strong&gt; (current vs. previous) simplifies multi-phase problems.&lt;/li&gt;
&lt;li&gt;Sometimes, the &lt;em&gt;simplest recurrence&lt;/em&gt; hides the &lt;em&gt;deepest efficiency&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🌍 SYSTEM DESIGN — Roadmap.sh [1 hr]
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🌐 Domain Name System (DNS)
&lt;/h4&gt;

&lt;p&gt;The &lt;strong&gt;Domain Name System&lt;/strong&gt; is the &lt;em&gt;phonebook of the internet&lt;/em&gt; — translating human-readable domain names into IP addresses that machines can understand.&lt;/p&gt;

&lt;p&gt;When you type &lt;code&gt;www.example.com&lt;/code&gt; in your browser, DNS resolves it to something like &lt;code&gt;93.184.216.34&lt;/code&gt;.&lt;/p&gt;




&lt;h4&gt;
  
  
  🧭 Hierarchical Architecture
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Root DNS Servers&lt;/strong&gt; — top-level, directing queries to TLD (Top-Level Domain) servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TLD Servers&lt;/strong&gt; — responsible for domains like &lt;code&gt;.com&lt;/code&gt;, &lt;code&gt;.org&lt;/code&gt;, &lt;code&gt;.net&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authoritative DNS Servers&lt;/strong&gt; — final source for a given domain’s records.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your device or local resolver caches results to avoid redundant lookups — governed by &lt;strong&gt;TTL (Time To Live)&lt;/strong&gt;.&lt;/p&gt;




&lt;h4&gt;
  
  
  📑 Common DNS Records
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Record Type&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧭 &lt;strong&gt;A&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Maps domain to IPv4 address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧭 &lt;strong&gt;AAAA&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Maps domain to IPv6 address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📬 &lt;strong&gt;MX&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Mail Exchange — email routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌍 &lt;strong&gt;CNAME&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Canonical Name — points to another domain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧾 &lt;strong&gt;NS&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Name Server — specifies authoritative DNS servers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🚀 Managed DNS Providers
&lt;/h4&gt;

&lt;p&gt;Modern systems often use &lt;strong&gt;managed DNS&lt;/strong&gt; to add reliability and routing intelligence.&lt;br&gt;
Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/dns/" rel="noopener noreferrer"&gt;Cloudflare DNS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/route53/" rel="noopener noreferrer"&gt;AWS Route53&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  ⚖️ Routing Policies
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Policy Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⚖️ &lt;strong&gt;Weighted Round Robin&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Distribute traffic based on server weights — useful for load balancing or A/B testing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🕓 &lt;strong&gt;Latency-Based Routing&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Direct users to the server with the lowest network latency.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📍 &lt;strong&gt;Geolocation Routing&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Route users to the geographically closest data center.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🧠 Reflection
&lt;/h4&gt;

&lt;p&gt;Both today’s topics — &lt;strong&gt;array traversal&lt;/strong&gt; and &lt;strong&gt;DNS resolution&lt;/strong&gt; — rely on &lt;em&gt;hierarchy and memory&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The algorithm builds meaning incrementally — one element at a time.&lt;/li&gt;
&lt;li&gt;DNS builds resolution hierarchically — one level at a time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both turn &lt;strong&gt;complex discovery&lt;/strong&gt; into &lt;strong&gt;efficient lookup&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;✅ &lt;strong&gt;Day 14 Summary:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Whether in data or domains, efficient systems &lt;em&gt;remember just enough&lt;/em&gt; and &lt;em&gt;resolve just in time&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dsa</category>
      <category>systemdesign</category>
      <category>devjournal</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Daily DSA and System Design Journal - 13</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Tue, 28 Oct 2025 21:44:36 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-13-391b</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-13-391b</guid>
      <description>&lt;h2&gt;
  
  
  🧠 Day 13 — Bitmasking &amp;amp; Background Job Communication ⚙️
&lt;/h2&gt;




&lt;h3&gt;
  
  
  🧩 DSA Problems [1 hr]
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; &lt;a href="https://leetcode.com/problems/maximize-the-number-of-partitions-after-operations/" rel="noopener noreferrer"&gt;3003. Maximize the Number of Partitions After Operations&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  💡 Approach: Bitwise Operations + Preprocessing + Enumeration
&lt;/h4&gt;

&lt;h5&gt;
  
  
  🧠 Intuition
&lt;/h5&gt;

&lt;p&gt;We can modify &lt;strong&gt;at most one character&lt;/strong&gt; in the string.&lt;br&gt;
Without modifications, we can compute all valid partitions easily.&lt;br&gt;
When we introduce one modification, only its &lt;strong&gt;local segment&lt;/strong&gt; changes — everything before and after it remains unaffected.&lt;/p&gt;

&lt;p&gt;To analyze this efficiently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We &lt;strong&gt;split the problem&lt;/strong&gt; into a &lt;strong&gt;left segment&lt;/strong&gt; and &lt;strong&gt;right segment&lt;/strong&gt; around the position of modification.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Each segment tracks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧩 Number of splits&lt;/li&gt;
&lt;li&gt;🧮 Character mask (bitwise representation)&lt;/li&gt;
&lt;li&gt;🔢 Count of distinct characters&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Using bit operations lets us quickly track which characters exist in each split.&lt;/p&gt;

&lt;p&gt;We then simulate all modification positions and compute the best outcome.&lt;/p&gt;




&lt;h4&gt;
  
  
  💻 Code
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;maxPartitionsAfterOperations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
        &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

        &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;binary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mask&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;mask&lt;/span&gt; &lt;span class="o"&gt;|=&lt;/span&gt; &lt;span class="n"&gt;binary&lt;/span&gt;
                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                    &lt;span class="n"&gt;mask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;binary&lt;/span&gt;
                    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;
            &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mask&lt;/span&gt;
            &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;

        &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;binary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mask&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;mask&lt;/span&gt; &lt;span class="o"&gt;|=&lt;/span&gt; &lt;span class="n"&gt;binary&lt;/span&gt;
                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                    &lt;span class="n"&gt;mask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;binary&lt;/span&gt;
                    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;
            &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mask&lt;/span&gt;
            &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;

        &lt;span class="n"&gt;max_val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;seg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
            &lt;span class="n"&gt;tot_mask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="n"&gt;tot_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tot_mask&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;tot_count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;seg&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tot_count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;seg&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="n"&gt;max_val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_val&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;max_val&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  ⚙️ Key Learnings
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Bitmasking enables &lt;strong&gt;constant-time distinct character tracking&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Dividing problems into &lt;strong&gt;left and right contexts&lt;/strong&gt; simplifies otherwise complex state management.&lt;/li&gt;
&lt;li&gt;Enumerating possible modifications systematically ensures you don’t miss edge cases.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🏗 System Design — Roadmap.sh [1 hr]
&lt;/h3&gt;

&lt;h4&gt;
  
  
  💬 Returning Results from Background Jobs
&lt;/h4&gt;

&lt;p&gt;Background jobs often run &lt;strong&gt;asynchronously&lt;/strong&gt; — decoupled from the main request-response cycle.&lt;br&gt;
But what happens when the &lt;strong&gt;caller&lt;/strong&gt; needs to know if the background task:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;finished successfully? ✅&lt;/li&gt;
&lt;li&gt;failed? ❌&lt;/li&gt;
&lt;li&gt;or made progress? 🔄&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s where &lt;strong&gt;communication mechanisms&lt;/strong&gt; come in.&lt;/p&gt;




&lt;h4&gt;
  
  
  🧩 Common Strategies
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧾 &lt;strong&gt;Status Store&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;The job writes its progress or results to a shared datastore (DB, Redis). The UI polls or queries it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📬 &lt;strong&gt;Reply Queue&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;A “reply-to” queue receives messages from the job — includes &lt;code&gt;ReplyTo&lt;/code&gt; and &lt;code&gt;CorrelationId&lt;/code&gt; for mapping results to requests.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌐 &lt;strong&gt;API Endpoint&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;The job exposes an API for clients to request status updates or results.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔔 &lt;strong&gt;Callback / Webhook&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;The job calls back to the client via API or publishes an event when it completes.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🧠 Example Scenarios
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;🧮 &lt;strong&gt;Report Generation:&lt;/strong&gt; The user triggers a report → background job runs → result stored in S3 → UI polls until ready.&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Machine Learning Pipeline:&lt;/strong&gt; Background task publishes progress to a queue; dashboard listens for updates.&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Order Processing:&lt;/strong&gt; System publishes “order completed” event via a message bus; microservices subscribe to react accordingly.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  ⚠️ Design Considerations
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concern&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧱 &lt;strong&gt;Reliability&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Messages or writes can fail — implement retries and acknowledgements.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧩 &lt;strong&gt;Idempotence&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Duplicate completion messages shouldn’t cause inconsistencies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⏳ &lt;strong&gt;Timeouts &amp;amp; TTLs&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Define how long clients should wait for results.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📡 &lt;strong&gt;Scalability&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;For large systems, prefer async event-driven feedback over polling.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🧠 Reflection
&lt;/h4&gt;

&lt;p&gt;This day beautifully mirrors the DSA concept:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the algorithm, you used &lt;strong&gt;bit-level precision&lt;/strong&gt; to track states efficiently.&lt;/li&gt;
&lt;li&gt;In system design, you used &lt;strong&gt;communication-level precision&lt;/strong&gt; to synchronize async processes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are about &lt;strong&gt;smart tracking and controlled feedback&lt;/strong&gt; — small signals, big coordination.&lt;/p&gt;




&lt;p&gt;✅ &lt;strong&gt;Day 13 Summary:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Progress isn’t just computation — it’s communication. Systems (and developers) that &lt;em&gt;report back effectively&lt;/em&gt; scale gracefully. 🚀&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dsa</category>
      <category>devjournal</category>
      <category>beginners</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Daily DSA and System Design Journal - 12</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Mon, 27 Oct 2025 21:22:46 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-12-439i</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-12-439i</guid>
      <description>&lt;h2&gt;
  
  
  🧠 Day 12 — Smallest Missing Integer &amp;amp; Schedule-Driven Jobs ⚙️
&lt;/h2&gt;




&lt;h3&gt;
  
  
  🧩 DSA Problems [1 hr]
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; &lt;a href="https://leetcode.com/problems/smallest-missing-non-negative-integer-after-operations/" rel="noopener noreferrer"&gt;2598. Smallest Missing Non-negative Integer After Operations&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  💡 Approach: Greedy
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Intuition
&lt;/h5&gt;

&lt;p&gt;Each number in the array can be shifted by multiples of &lt;code&gt;value&lt;/code&gt;.&lt;br&gt;
That means all numbers that share the same remainder when divided by &lt;code&gt;value&lt;/code&gt; belong to the same &lt;em&gt;transformable group&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
If &lt;code&gt;value = 3&lt;/code&gt;, then numbers &lt;code&gt;0, 3, 6, 9&lt;/code&gt; can all become one another through these operations.&lt;/p&gt;

&lt;p&gt;We want to &lt;strong&gt;maximize the MEX&lt;/strong&gt; (minimum excluded non-negative integer).&lt;br&gt;
To do this, we iterate from &lt;code&gt;0&lt;/code&gt; upward and check if there’s still a number left in the corresponding remainder group (&lt;code&gt;mex % value&lt;/code&gt;).&lt;br&gt;
If yes → use one and move forward.&lt;br&gt;
If no → we found our MEX.&lt;/p&gt;




&lt;h4&gt;
  
  
  💻 Code
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;findSmallestInteger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;mp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;mex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;mp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mex&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;mp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mex&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="n"&gt;mex&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;mex&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  📊 Complexity
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Complexity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⏱ Time&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💾 Space&lt;/td&gt;
&lt;td&gt;O(value)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🧩 Key Learnings
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Grouping by modular equivalence can simplify complex transformation logic.&lt;/li&gt;
&lt;li&gt;Greedy strategies work beautifully when you can define a clear incremental choice.&lt;/li&gt;
&lt;li&gt;“Remainders as buckets” is a powerful way to partition search spaces efficiently.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🏗 System Design — Roadmap.sh [1 hr]
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ⏰ Schedule-Driven Background Jobs
&lt;/h4&gt;

&lt;p&gt;Not every task needs an event or user trigger — some just need to &lt;em&gt;run on time&lt;/em&gt;.&lt;br&gt;
That’s where &lt;strong&gt;schedule-driven jobs&lt;/strong&gt; come in: systems that operate on &lt;strong&gt;timers&lt;/strong&gt;, &lt;strong&gt;intervals&lt;/strong&gt;, or &lt;strong&gt;cron schedules&lt;/strong&gt;.&lt;/p&gt;




&lt;h4&gt;
  
  
  💡 What It Is
&lt;/h4&gt;

&lt;p&gt;A schedule-driven job runs automatically based on time-based triggers such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every minute/hour/day (&lt;code&gt;cron&lt;/code&gt;, &lt;code&gt;Celery Beat&lt;/code&gt;, &lt;code&gt;Airflow DAGs&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;At specific times (&lt;code&gt;00:00 UTC&lt;/code&gt; daily backup)&lt;/li&gt;
&lt;li&gt;After delays (&lt;code&gt;run job after 5 minutes&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  🧱 Common Examples
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧾 &lt;strong&gt;Batch Processing&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Aggregate logs, update indexes, or recompute recommendations daily.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📊 &lt;strong&gt;Reports &amp;amp; Analytics&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Generate daily KPIs or email summaries every morning.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧹 &lt;strong&gt;Maintenance Tasks&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Cleanup old data, archive inactive sessions, or delete expired tokens.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧮 &lt;strong&gt;Consistency Checks&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Verify data integrity or sync caches periodically.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  ⚙️ How It’s Done
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Local Scheduler:&lt;/strong&gt; OS-based (like cron jobs or Windows Task Scheduler).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App Scheduler:&lt;/strong&gt; Framework-level (Celery Beat, Sidekiq Scheduler, or Quartz).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External Scheduler:&lt;/strong&gt; Managed cloud services (AWS EventBridge, Azure Logic Apps, Google Cloud Scheduler).&lt;/li&gt;
&lt;/ol&gt;




&lt;h4&gt;
  
  
  ⚠️ Design Considerations
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concern&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧩 &lt;strong&gt;Idempotence&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;A job might run twice — make sure repeating it doesn’t cause data corruption.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧍 &lt;strong&gt;Single Instance Execution&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;When your system scales, you must ensure only one instance of the job runs globally.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⏳ &lt;strong&gt;Overlapping Jobs&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;A job may still be running when the next scheduled run starts — use locks or queues to prevent overlap.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;🔗 &lt;em&gt;Great read:&lt;/em&gt; &lt;a href="https://particular.net/blog/what-does-idempotent-mean" rel="noopener noreferrer"&gt;What Does Idempotent Mean? (Particular.net)&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  🧠 Reflection
&lt;/h4&gt;

&lt;p&gt;This day connects two powerful ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;DSA&lt;/strong&gt;, you optimized resource use by smartly grouping operations.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;System Design&lt;/strong&gt;, you optimized time and execution with predictable schedules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both require &lt;strong&gt;discipline, rhythm, and state awareness&lt;/strong&gt; — hallmarks of scalable design, both in code and in life.&lt;/p&gt;




&lt;p&gt;✅ &lt;strong&gt;Day 12 Summary:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Consistency breeds reliability — in arrays, systems, and habits.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dsa</category>
      <category>devjournal</category>
      <category>beginners</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Daily DSA and System Design Journal - 11</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Sat, 25 Oct 2025 16:45:32 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-11-51m0</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-11-51m0</guid>
      <description>&lt;h2&gt;
  
  
  🧠 Day 11 — Adjacent Subarrays II &amp;amp; Event-Driven Systems 🚀
&lt;/h2&gt;




&lt;h3&gt;
  
  
  🧩 DSA Problems [1 hr]
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; &lt;a href="https://leetcode.com/problems/adjacent-increasing-subarrays-detection-ii/" rel="noopener noreferrer"&gt;3350. Adjacent Increasing Subarrays Detection II&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  🧭 Intuition
&lt;/h4&gt;

&lt;p&gt;This is the &lt;em&gt;extension&lt;/em&gt; of the Day 10 problem — instead of checking if adjacent increasing subarrays exist, now we calculate the &lt;strong&gt;maximum possible&lt;/strong&gt; value of &lt;code&gt;k&lt;/code&gt; for which such adjacent increasing subarrays can exist.&lt;/p&gt;

&lt;p&gt;To do that efficiently, you only need &lt;strong&gt;one traversal&lt;/strong&gt;, keeping track of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cnt&lt;/code&gt; — length of current increasing subarray&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;precnt&lt;/code&gt; — length of previous increasing subarray&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whenever the sequence breaks, you swap and reset counts, updating your &lt;code&gt;ans&lt;/code&gt; as the max of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;min(precnt, cnt)&lt;/code&gt; — previous and current adjacent segments&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cnt // 2&lt;/code&gt; — when both subarrays are within one long increasing sequence&lt;/li&gt;
&lt;/ol&gt;




&lt;h4&gt;
  
  
  💻 Code
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;maxIncreasingSubarrays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;precnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;precnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ans&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;precnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ans&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ans&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  🧩 Key Learnings
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Reusing logic from simpler problems to solve harder variants is &lt;em&gt;true problem-solving maturity&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Tracking previous states is often more efficient than recomputation.&lt;/li&gt;
&lt;li&gt;Pattern recognition in algorithms mirrors &lt;strong&gt;event tracking&lt;/strong&gt; in systems — both rely on &lt;em&gt;state transitions&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🏗 System Design — Roadmap.sh [1 hr]
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ⚡ Event-Driven Architecture
&lt;/h4&gt;

&lt;p&gt;Event-driven systems are designed around &lt;strong&gt;reactions to triggers&lt;/strong&gt;, not continuous polling or synchronous requests. Instead of waiting for something to finish, the system responds &lt;strong&gt;when&lt;/strong&gt; something happens.&lt;/p&gt;




&lt;h4&gt;
  
  
  💡 How It Works
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Event Source:&lt;/strong&gt; Something happens — user clicks “Place Order”, a file is uploaded, a payment is completed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event Message:&lt;/strong&gt; The system emits an &lt;em&gt;event&lt;/em&gt; (like “OrderPlaced”).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event Queue or Broker:&lt;/strong&gt; Middleware (like Kafka, RabbitMQ, or AWS SNS/SQS) transports the event asynchronously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event Consumers:&lt;/strong&gt; Background workers or services listen for specific events and react accordingly — sending emails, updating databases, or triggering other workflows.&lt;/li&gt;
&lt;/ol&gt;




&lt;h4&gt;
  
  
  🧱 Common Patterns
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;📨 &lt;strong&gt;Message Queue&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;UI or another service puts an event into a queue. Workers listen and process them asynchronously.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💾 &lt;strong&gt;Change Data Capture (CDC)&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Background job reacts to updates in storage or database tables.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌐 &lt;strong&gt;Webhooks / API Calls&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;One service triggers another by making HTTP requests or publishing an event.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  ⚙️ Real-World Examples
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;🛒 E-commerce: “OrderPlaced” event triggers inventory update, payment capture, and confirmation email.&lt;/li&gt;
&lt;li&gt;💬 Messaging apps: “MessageSent” event triggers push notifications to the receiver.&lt;/li&gt;
&lt;li&gt;🧾 Finance systems: “TransactionProcessed” event triggers audit logs and downstream reconciliation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  🧩 Why Event-Driven Architectures Matter
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Advantage&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⚡ &lt;strong&gt;Responsiveness&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Systems react immediately when something happens.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧭 &lt;strong&gt;Scalability&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Different services can scale independently.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔁 &lt;strong&gt;Loose Coupling&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Services communicate through events, not direct dependencies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧰 &lt;strong&gt;Resilience&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;If one consumer fails, events stay in the queue until retried.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h4&gt;
  
  
  🧠 Reflection
&lt;/h4&gt;

&lt;p&gt;Both today’s DSA and system design concepts highlight the &lt;em&gt;power of state and sequence&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In arrays → detecting transitions (increasing → reset).&lt;/li&gt;
&lt;li&gt;In systems → reacting to events (trigger → response).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Progress isn’t just about &lt;em&gt;doing things&lt;/em&gt; — it’s about &lt;em&gt;reacting better to change&lt;/em&gt;.&lt;/p&gt;




</description>
      <category>dsa</category>
      <category>devjournal</category>
      <category>systemdesign</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Daily DSA and System Design Journal - 10</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Tue, 14 Oct 2025 12:30:13 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/day-10-dsa-x-system-design-learning-log-2obk</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/day-10-dsa-x-system-design-learning-log-2obk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"Small daily progress leads to massive long-term impact."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After 10 days of deliberate consistency (with one comeback arc), I’m starting to see deeper intuition forming — both in coding logic and in understanding scalable systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 DSA Problems [1 hr]
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; &lt;a href="https://leetcode.com/problems/adjacent-increasing-subarrays-detection-i/" rel="noopener noreferrer"&gt;3349. Adjacent Increasing Subarrays Detection I&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one was subtly challenging — the logic feels simple at first glance, but optimizing for a &lt;em&gt;single traversal&lt;/em&gt; takes thought.&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 Approach: One-Time Traversal
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🧠 Intuition
&lt;/h4&gt;

&lt;p&gt;If two adjacent strictly increasing subarrays of length &lt;em&gt;k&lt;/em&gt; exist, they also exist for all lengths &amp;lt; &lt;em&gt;k&lt;/em&gt;.&lt;br&gt;
So the key is to find the &lt;strong&gt;largest valid k′&lt;/strong&gt; and check if it satisfies the condition.&lt;/p&gt;

&lt;p&gt;We track two variables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cnt&lt;/code&gt;: length of the current increasing subarray&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;precnt&lt;/code&gt;: length of the previous one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At every point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;nums[i] &amp;gt; nums[i−1]&lt;/code&gt;, increment &lt;code&gt;cnt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Else, the increasing streak resets — set &lt;code&gt;precnt = cnt&lt;/code&gt;, &lt;code&gt;cnt = 1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then compute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;min(precnt, cnt)&lt;/code&gt; → represents adjacent subarrays.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cnt // 2&lt;/code&gt; → represents one long continuous increasing run.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💻 Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hasIncreasingSubarrays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;precnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;precnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ans&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;precnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ans&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cnt&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ⚡ Takeaways
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built intuition around &lt;em&gt;state tracking&lt;/em&gt; across traversals.&lt;/li&gt;
&lt;li&gt;Reinforced understanding of &lt;em&gt;adjacency logic&lt;/em&gt; and &lt;em&gt;sequence continuity&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Learned to express a condition efficiently without nested loops.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🏗 System Design — Roadmap.sh [1 hr]
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🎯 Topic: Background Jobs
&lt;/h3&gt;

&lt;p&gt;Background jobs handle work that doesn’t need to block the main application flow. Think of them as quiet backstage workers keeping your system smooth.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 Common Use Cases
&lt;/h3&gt;

&lt;p&gt;✅ &lt;strong&gt;Maintenance tasks:&lt;/strong&gt; cleanups, report generation, backups&lt;br&gt;
✅ &lt;strong&gt;Heavy computation:&lt;/strong&gt; ML training, analytics, or aggregation&lt;br&gt;
✅ &lt;strong&gt;Async communication:&lt;/strong&gt; emails, notifications, webhooks&lt;br&gt;
✅ &lt;strong&gt;Batch data ops:&lt;/strong&gt; imports/exports, ETL pipelines&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚙️ Implementation Patterns
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Job Queue + Workers:&lt;/strong&gt; Tasks get queued (e.g., RabbitMQ, SQS, Redis Queue), then processed by worker nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schedulers (e.g., Cron):&lt;/strong&gt; Trigger recurring background tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retry + Monitoring:&lt;/strong&gt; Failed jobs should retry intelligently with backoff and be observable (via dashboards/logs).&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧩 Real-World Examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gmail: sending emails asynchronously after user hits “Send”&lt;/li&gt;
&lt;li&gt;Stripe: generating reports and invoices via background batch jobs&lt;/li&gt;
&lt;li&gt;GitHub: background actions for CI/CD pipelines&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💬 Reflection
&lt;/h3&gt;

&lt;p&gt;The “background job” concept mirrors our own learning process:&lt;br&gt;
the main thread is &lt;em&gt;daily consistency&lt;/em&gt;, while the background jobs are &lt;em&gt;reflection, documentation,&lt;/em&gt; and &lt;em&gt;review&lt;/em&gt; — silently compounding over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;DSA sharpened my reasoning for adjacency-based problems.&lt;/li&gt;
&lt;li&gt;System Design reinforced &lt;em&gt;non-blocking execution&lt;/em&gt; and &lt;em&gt;asynchronous scaling&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;10 Days in — this rhythm is starting to feel automatic.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤝 Let’s Connect
&lt;/h2&gt;

&lt;p&gt;10 days in — what’s your &lt;strong&gt;“background job” for personal growth&lt;/strong&gt;?&lt;br&gt;
Something that runs quietly every day, but changes you over time?&lt;/p&gt;

&lt;p&gt;Drop a ⚙️ if you’ve got one.&lt;/p&gt;

</description>
      <category>dsa</category>
      <category>devjournal</category>
      <category>beginners</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>🧠 Day 9 — Back After 34 Days! Restarting My DSA + System Design Journey 🚀</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Mon, 13 Oct 2025 19:47:23 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/day-9-back-after-34-days-restarting-my-dsa-system-design-journey-4c97</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/day-9-back-after-34-days-restarting-my-dsa-system-design-journey-4c97</guid>
      <description>&lt;p&gt;After a 34-day drought, I’m officially back in the grind — and it feels good to get the rhythm going again. 💪&lt;/p&gt;

&lt;p&gt;🧩 DSA Problems [1 hr]&lt;/p&gt;

&lt;p&gt;Problem: Find Resultant Array After Removing Anagrams (LeetCode 2273)&lt;/p&gt;

&lt;p&gt;This was a nice warm-up to shake off the rust — not too complex, but a solid logic-based question.&lt;/p&gt;

&lt;p&gt;🧠 Idea&lt;/p&gt;

&lt;p&gt;Iterate through the list, and only keep a word if its sorted characters differ from the previous one’s sorted characters (meaning it’s not an anagram).&lt;/p&gt;

&lt;p&gt;💻 Code&lt;br&gt;
class Solution(object):&lt;br&gt;
    def removeAnagrams(self, words):&lt;br&gt;
        ans = [words[0]]&lt;br&gt;
        for i in range(1, len(words)):&lt;br&gt;
            a, b = sorted(words[i]), sorted(ans[-1])&lt;br&gt;
            if a != b:&lt;br&gt;
                ans.append(words[i])&lt;br&gt;
        return ans&lt;/p&gt;

&lt;p&gt;⚡ Takeaways&lt;/p&gt;

&lt;p&gt;Used sorted strings to detect anagrams efficiently.&lt;/p&gt;

&lt;p&gt;Perfect reminder that simplicity &amp;gt; cleverness — clean logic wins.&lt;/p&gt;

&lt;p&gt;Great re-entry problem to rebuild problem-solving momentum.&lt;/p&gt;

&lt;p&gt;🏗 System Design — Roadmap.sh [1 hr]&lt;br&gt;
🌐 Topic: Availability in Numbers&lt;/p&gt;

&lt;p&gt;Availability is all about how long a service stays up and running — usually expressed in number of 9s.&lt;/p&gt;

&lt;p&gt;Level   Uptime %    Max Downtime Per Year&lt;br&gt;
3 Nines 99.9 %  8 h 41 min 38 s&lt;br&gt;
4 Nines 99.99 % 52 min 9.8 s&lt;/p&gt;

&lt;p&gt;Even one extra “9” massively cuts downtime.&lt;/p&gt;

&lt;p&gt;⚙️ Availability in Sequence vs Parallel&lt;/p&gt;

&lt;p&gt;In Sequence&lt;/p&gt;

&lt;p&gt;Availability drops because both components must work.&lt;/p&gt;

&lt;p&gt;Total = A(Foo) × A(Bar)&lt;/p&gt;

&lt;p&gt;Example: 99.9 % × 99.9 % = 99.8 %.&lt;/p&gt;

&lt;p&gt;In Parallel&lt;/p&gt;

&lt;p&gt;Availability rises since one component can cover for another.&lt;/p&gt;

&lt;p&gt;Total = 1 – (1 – A(Foo)) × (1 – A(Bar))&lt;/p&gt;

&lt;p&gt;Example: 99.9 % each ⇒ 99.9999 %.&lt;/p&gt;

&lt;p&gt;You can experiment with numbers here → uptime.is calculator&lt;br&gt;
.&lt;/p&gt;

&lt;p&gt;🧩 Reflection&lt;/p&gt;

&lt;p&gt;Coming back after a break reminded me that availability applies to humans too: when one part of your routine goes down, redundancy (habits, structure, accountability) helps bring it back up. 😉&lt;/p&gt;

&lt;p&gt;💬 Final Thoughts&lt;/p&gt;

&lt;p&gt;✅ Day 9 done!&lt;br&gt;
It’s not about never falling off — it’s about coming back stronger.&lt;/p&gt;

&lt;p&gt;Key takeaways:&lt;/p&gt;

&lt;p&gt;Keep DSA problems light to rebuild momentum.&lt;/p&gt;

&lt;p&gt;Revisit System Design numbers to solidify intuition.&lt;/p&gt;

&lt;p&gt;Progress &amp;gt; Perfection — always.&lt;/p&gt;

&lt;p&gt;🤝 Let’s Connect&lt;/p&gt;

&lt;p&gt;Have you ever taken a break and struggled to restart your learning streak?&lt;br&gt;
Drop a 🔁 if you’ve ever had to “replicate” your own discipline!&lt;/p&gt;

</description>
      <category>dsa</category>
    </item>
    <item>
      <title>Daily DSA and System Design Journal - 8</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Tue, 09 Sep 2025 22:50:45 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-8-1i7a</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-8-1i7a</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Day 8: System Design + DSA Journey
&lt;/h2&gt;

&lt;p&gt;Hello! I’m continuing my journey of daily learning, focusing on &lt;strong&gt;System Design concepts&lt;/strong&gt; (via the roadmap.sh System Design Roadmap) and then tackling &lt;strong&gt;DSA challenges&lt;/strong&gt; on LeetCode. This is &lt;strong&gt;DAY 8 — kicking off a brand new week! 💡&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗 System Design: Replication
&lt;/h2&gt;

&lt;p&gt;Today’s concept was &lt;strong&gt;Replication&lt;/strong&gt; — an &lt;strong&gt;availability pattern&lt;/strong&gt; where multiple copies of data are stored across locations to improve resilience and scalability.&lt;/p&gt;

&lt;p&gt;There are two main types:&lt;/p&gt;




&lt;h3&gt;
  
  
  🧭 Master-Slave Replication
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Master&lt;/strong&gt; handles all &lt;strong&gt;writes&lt;/strong&gt; (and sometimes reads).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slaves&lt;/strong&gt; handle &lt;strong&gt;reads only&lt;/strong&gt;, reducing load on the master.&lt;/li&gt;
&lt;li&gt;If the master fails, a &lt;strong&gt;slave can be promoted&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Often used to scale read-heavy workloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Disadvantages&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slave promotion adds complexity.&lt;/li&gt;
&lt;li&gt;Replication lag can cause &lt;strong&gt;stale reads&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Heavy write loads can overwhelm replicas.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔁 Master-Master Replication
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Multiple &lt;strong&gt;masters&lt;/strong&gt; handle both reads and writes.&lt;/li&gt;
&lt;li&gt;Higher availability since any node can serve as fallback.&lt;/li&gt;
&lt;li&gt;Useful when you need &lt;strong&gt;multi-region writes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Disadvantages&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires conflict resolution (e.g., two writes at once).&lt;/li&gt;
&lt;li&gt;Can hurt performance due to synchronization overhead.&lt;/li&gt;
&lt;li&gt;Often trades off &lt;strong&gt;consistency for availability&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💭 My Thoughts: Replication is one of those things that sounds simple (“just copy the data”), but the &lt;strong&gt;edge cases and trade-offs&lt;/strong&gt;—lag, conflicts, and complexity—make it a real engineering challenge.&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 DSA Challenge: 3Sum
&lt;/h2&gt;

&lt;p&gt;Today’s LeetCode challenge was &lt;strong&gt;&lt;a href="https://leetcode.com/problems/3sum/" rel="noopener noreferrer"&gt;15. 3Sum&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;⏳ Time spent: ~1+ hours (with the help of &lt;a href="https://youtu.be/9HDVSJn3obo" rel="noopener noreferrer"&gt;this YouTube walkthrough&lt;/a&gt;).&lt;/p&gt;




&lt;h3&gt;
  
  
  👨‍💻 Code Snippet
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;threeSum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]]:&lt;/span&gt;
        &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;

            &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
            &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
                    &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
                    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                        &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✨ Key Takeaways
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sorting + &lt;strong&gt;two-pointer technique&lt;/strong&gt; = super efficient here.&lt;/li&gt;
&lt;li&gt;Avoids brute-force O(n³) by reducing it to O(n²).&lt;/li&gt;
&lt;li&gt;Learned how to &lt;strong&gt;skip duplicates&lt;/strong&gt; to keep results clean.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Day 8 gave me a powerful reminder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the &lt;strong&gt;System Design&lt;/strong&gt; side, replication is about balancing &lt;strong&gt;availability vs complexity&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;DSA&lt;/strong&gt; side, smart strategies like &lt;strong&gt;sorting + two pointers&lt;/strong&gt; can completely transform performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m excited to keep this momentum rolling into the new week 🚀.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Let’s Connect!
&lt;/h2&gt;

&lt;p&gt;💡 This is Day 8 — the start of Week 2!&lt;/p&gt;

&lt;p&gt;I’d love to hear from you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have you worked with &lt;strong&gt;replication setups&lt;/strong&gt; (master-slave or master-master)? Which challenges stood out?&lt;/li&gt;
&lt;li&gt;Any &lt;strong&gt;alternative approaches&lt;/strong&gt; you’ve used for the 3Sum problem?&lt;/li&gt;
&lt;li&gt;Or just drop a 🔁 in the comments if you’ve ever had to replicate systems (or solve 3Sum 😉).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your feedback, experiences, and encouragement push me to keep showing up daily — let’s make this journey even more interactive 🙏.&lt;/p&gt;

</description>
      <category>dsa</category>
      <category>systemdesign</category>
      <category>beginners</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>📅 Week 1 Recap: System Design + DSA Journey</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Fri, 05 Sep 2025 21:30:45 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/week-1-recap-system-design-dsa-journey-1c34</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/week-1-recap-system-design-dsa-journey-1c34</guid>
      <description>&lt;p&gt;Hello everyone! This week I began my &lt;strong&gt;daily learning journey&lt;/strong&gt; — diving into &lt;strong&gt;System Design concepts&lt;/strong&gt; (via the roadmap.sh System Design Roadmap) and solving &lt;strong&gt;DSA challenges&lt;/strong&gt; on LeetCode.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;7 days straight&lt;/strong&gt; of showing up. Here are the highlights:&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗 System Design Concepts Covered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Latency vs Throughput&lt;/strong&gt; → Learned how speed (latency) and volume (throughput) trade off in system performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency Patterns&lt;/strong&gt; → Strong, Weak, and Eventual — and where each makes sense (finance vs gaming vs social media).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability Patterns&lt;/strong&gt; → Redundancy, Replication, Load Balancing, Circuit Breakers, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failover&lt;/strong&gt; → Active-passive vs active-active setups, and why resilience always adds complexity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;Biggest Insight:&lt;/strong&gt; System Design is about trade-offs, not absolutes. You never get high availability, high consistency, and high performance all at once.&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 DSA Problems Tackled
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regular Expression Matching&lt;/strong&gt; (hard) → Recursive approach stretched my thinking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integer ↔ Roman Conversions&lt;/strong&gt; → Dictionary lookups + loops made the logic clean.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Longest Common Prefix&lt;/strong&gt; → Sorting trick was an elegant win.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;Biggest Insight:&lt;/strong&gt; For DSA, sometimes brute force teaches you the problem space — but the best solutions come from reframing (like sorting or recursion).&lt;/p&gt;




&lt;h2&gt;
  
  
  🏆 Week 1 Reflections
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Showed up &lt;strong&gt;daily&lt;/strong&gt; despite challenges (some problems took 2–3 hours).&lt;/li&gt;
&lt;li&gt;Learned to balance &lt;strong&gt;deep dives&lt;/strong&gt; (like regex recursion) with &lt;strong&gt;practical clarity&lt;/strong&gt; (like Roman numeral conversions).&lt;/li&gt;
&lt;li&gt;Seeing &lt;strong&gt;patterns&lt;/strong&gt; emerge between System Design and DSA: both are about trade-offs and structured problem solving.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 What’s Next (Week 2 Goals)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Push into &lt;strong&gt;more advanced system design topics&lt;/strong&gt; (e.g., gRPC, DB sharding, caching strategies).&lt;/li&gt;
&lt;li&gt;Continue solving &lt;strong&gt;medium/hard LeetCode problems&lt;/strong&gt;, but improve on &lt;strong&gt;timeboxing&lt;/strong&gt; solutions.&lt;/li&gt;
&lt;li&gt;Start sharing &lt;strong&gt;shorter code insights&lt;/strong&gt; to make posts even more practical for readers.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤝 Let’s Connect!
&lt;/h2&gt;

&lt;p&gt;That’s &lt;strong&gt;Week 1 in the books 🎉&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you’ve been following along, I’d love to hear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which &lt;strong&gt;System Design trade-off&lt;/strong&gt; do you find most challenging in real projects?&lt;/li&gt;
&lt;li&gt;What’s your &lt;strong&gt;DSA strategy&lt;/strong&gt; — brute force first or optimal-first thinking?&lt;/li&gt;
&lt;li&gt;Or just drop a 💡 to celebrate learning and consistency!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your engagement helps me keep momentum, and I’d love to make Week 2 even better — for me and for everyone reading 🚀.&lt;/p&gt;




</description>
      <category>dsa</category>
      <category>systemdesign</category>
      <category>beginners</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Daily DSA and System Design Journal - 7</title>
      <dc:creator>I.K</dc:creator>
      <pubDate>Fri, 05 Sep 2025 15:04:16 +0000</pubDate>
      <link>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-7-1pie</link>
      <guid>https://forem.com/ik_8a78062fd65be769dd835/daily-dsa-and-system-design-journal-7-1pie</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Day 7: System Design + DSA Journey
&lt;/h1&gt;

&lt;p&gt;Hello! I’m continuing my journey of daily learning, focusing on &lt;strong&gt;System Design concepts&lt;/strong&gt; (via the roadmap.sh System Design Roadmap) and then tackling &lt;strong&gt;DSA challenges&lt;/strong&gt; on LeetCode. This is &lt;strong&gt;DAY 7 — one full week complete! 🎉&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗 System Design: Failover
&lt;/h2&gt;

&lt;p&gt;Today’s concept was &lt;strong&gt;Failover&lt;/strong&gt; — an &lt;strong&gt;availability pattern&lt;/strong&gt; that ensures a system can continue to function if a component fails.&lt;/p&gt;

&lt;p&gt;At its core:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;primary component&lt;/strong&gt; handles requests.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;secondary/backup component&lt;/strong&gt; stays on standby.&lt;/li&gt;
&lt;li&gt;If the primary fails, the backup kicks in — keeping the system alive with minimal disruption.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔄 Types of Failover
&lt;/h3&gt;

&lt;h4&gt;
  
  
  💤 Active-Passive (Master-Slave)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Primary handles all traffic.&lt;/li&gt;
&lt;li&gt;Backup sits idle, monitoring via heartbeats.&lt;/li&gt;
&lt;li&gt;If the primary fails → backup takes over.&lt;/li&gt;
&lt;li&gt;Can be &lt;strong&gt;hot standby&lt;/strong&gt; (already running) or &lt;strong&gt;cold standby&lt;/strong&gt; (needs startup).&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  ⚡ Active-Active (Master-Master)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Both servers handle traffic concurrently.&lt;/li&gt;
&lt;li&gt;Load is shared between them.&lt;/li&gt;
&lt;li&gt;Public-facing: DNS must know about both IPs.&lt;/li&gt;
&lt;li&gt;Internal-facing: application logic must route to both.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚠️ Challenges with Failover
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Extra &lt;strong&gt;hardware + complexity&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Risk of &lt;strong&gt;data loss&lt;/strong&gt; if primary fails before replication completes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💭 My Thoughts: Failover reminds me that resilience is never “free.” You gain uptime, but at the cost of added complexity, infra, and edge-case handling. Still, for critical systems, it’s worth it.&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 DSA Challenge: Longest Common Prefix
&lt;/h2&gt;

&lt;p&gt;Today’s DSA problem was &lt;strong&gt;&lt;a href="https://leetcode.com/problems/longest-common-prefix/" rel="noopener noreferrer"&gt;14. Longest Common Prefix&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;⏳ Time spent: ~1 hour.&lt;br&gt;
I started with a fixed-prefix-length approach (which worked but wasn’t optimal). After exploring more solutions, I found this &lt;strong&gt;sorted strings approach&lt;/strong&gt; to be elegant and efficient.&lt;/p&gt;




&lt;h3&gt;
  
  
  👨‍💻 Code Snippet
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Solution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;longestCommonPrefix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
        &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;))):&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ans&lt;/span&gt;
            &lt;span class="n"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ans&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✨ Key Takeaways
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sorting reduces the problem to comparing just the &lt;strong&gt;first and last strings&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Clean, efficient, and avoids unnecessary checks.&lt;/li&gt;
&lt;li&gt;Sometimes a &lt;strong&gt;different perspective&lt;/strong&gt; on the problem (like sorting) gives a more elegant solution than brute-force approaches.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Day 7 wraps up my &lt;strong&gt;first full week&lt;/strong&gt; of this journey.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the &lt;strong&gt;System Design side&lt;/strong&gt;, Failover showed me how high availability is engineered through redundancy and switchover strategies.&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;DSA side&lt;/strong&gt;, I learned that simplicity often emerges from smart problem framing (like sorting).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One week in, and I already feel sharper at identifying trade-offs and structuring solutions. 💪&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Let’s Connect!
&lt;/h2&gt;

&lt;p&gt;🎉 &lt;strong&gt;7 days straight — the first milestone achieved!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But here’s where I’d love your help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What’s your experience with &lt;strong&gt;failover&lt;/strong&gt; setups — active-passive vs active-active?&lt;/li&gt;
&lt;li&gt;Do you prefer clever solutions like &lt;strong&gt;sorting&lt;/strong&gt; for prefix problems, or do you stick with more direct approaches?&lt;/li&gt;
&lt;li&gt;Or just drop a 🎯 in the comments to celebrate 1 full week!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your engagement (likes, shares, comments) not only motivates me but also helps more learners see this journey. Let’s keep building together 🚀.&lt;/p&gt;

</description>
      <category>dsa</category>
      <category>systemdesign</category>
      <category>devjournal</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
