<?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>DEV Community: Raihanul Islam Sharif</title>
    <description>The latest articles on DEV Community by Raihanul Islam Sharif (@raihanuldev).</description>
    <link>https://dev.to/raihanuldev</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1132656%2F023acb37-a42a-434d-996e-9dffda36cac7.jpg</url>
      <title>DEV Community: Raihanul Islam Sharif</title>
      <link>https://dev.to/raihanuldev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raihanuldev"/>
    <language>en</language>
    <item>
      <title>How I Built a Microservices System from Scratch (No Tutorial)</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Tue, 16 Jun 2026 01:44:45 +0000</pubDate>
      <link>https://dev.to/raihanuldev/how-i-built-a-microservices-system-from-scratch-no-tutorial-2n16</link>
      <guid>https://dev.to/raihanuldev/how-i-built-a-microservices-system-from-scratch-no-tutorial-2n16</guid>
      <description>&lt;h1&gt;
  
  
  How I Built a Microservices System from Scratch (No Tutorial)
&lt;/h1&gt;

&lt;p&gt;Most microservices tutorials start with a perfect architecture diagram and end with a clean GitHub repo you can clone. Mine started with me staring at a blank screen wondering &lt;em&gt;"where do I even begin?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the real story of how I built my &lt;strong&gt;HR Management System&lt;/strong&gt; — a production-deployed microservices project with an API Gateway, Auth Service, Employee Service, and Attendance Service — containerized with Docker and live on Render.com.&lt;/p&gt;

&lt;p&gt;No hand-holding. No pre-built boilerplate. Just decisions, mistakes, and lessons.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Microservices? (The Honest Answer)
&lt;/h2&gt;

&lt;p&gt;Let me be upfront: for a portfolio project, a monolith would have been &lt;em&gt;faster&lt;/em&gt; to build.&lt;/p&gt;

&lt;p&gt;But I wasn't building for speed. I was building to understand how real systems work at scale — the kind of systems I want to work on professionally. If I was going to spend weeks on a project, I wanted to come out the other side actually knowing something.&lt;/p&gt;

&lt;p&gt;So I committed to microservices. And then immediately had to figure out what that actually meant in practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture (What I Landed On)
&lt;/h2&gt;

&lt;p&gt;After a lot of reading and a few failed attempts, I settled on four core services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
  │
  ▼
API Gateway  ←── single entry point for all requests
  │
  ├── Auth Service       (JWT, login, register)
  ├── Employee Service   (CRUD, employee data)
  └── Attendance Service (check-in/out, records)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each service:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Has its own Express.js server&lt;/li&gt;
&lt;li&gt;Connects to its own MongoDB collection (logically separated)&lt;/li&gt;
&lt;li&gt;Runs in its own Docker container&lt;/li&gt;
&lt;li&gt;Communicates through the API Gateway only&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The client never talks to individual services directly. Everything goes through the gateway. This was the single most important architectural decision I made.&lt;/p&gt;




&lt;h2&gt;
  
  
  The First Real Problem: How Do Services Talk to Each Other?
&lt;/h2&gt;

&lt;p&gt;This sounds obvious until you actually try to do it.&lt;/p&gt;

&lt;p&gt;In a monolith, you just call a function. In microservices, you're making HTTP requests between containers — and suddenly you have to think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What if a service is down?&lt;/li&gt;
&lt;li&gt;How does the Gateway know where each service lives?&lt;/li&gt;
&lt;li&gt;How do I avoid hardcoding &lt;code&gt;localhost:3001&lt;/code&gt; everywhere?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My solution was straightforward: environment variables for service URLs, and Docker Compose to wire everything together locally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# docker-compose.yml (simplified)&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;api-gateway&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./api-gateway&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3000:3000"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;AUTH_SERVICE_URL=http://auth-service:3001&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EMPLOYEE_SERVICE_URL=http://employee-service:3002&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ATTENDANCE_SERVICE_URL=http://attendance-service:3003&lt;/span&gt;

  &lt;span class="na"&gt;auth-service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./auth-service&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3001:3001"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MONGODB_URI=${MONGODB_URI}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;JWT_SECRET=${JWT_SECRET}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside Docker Compose, services can reference each other by &lt;strong&gt;service name&lt;/strong&gt; — not localhost. This tripped me up for an embarrassing amount of time before I understood Docker's internal networking.&lt;/p&gt;




&lt;h2&gt;
  
  
  JWT Auth Across Services — The Tricky Part
&lt;/h2&gt;

&lt;p&gt;Authentication in a monolith: middleware checks the token, done.&lt;/p&gt;

&lt;p&gt;Authentication in microservices: &lt;em&gt;every service&lt;/em&gt; needs to verify the token, but you don't want each service depending on the Auth Service for every request. That creates tight coupling and a single point of failure.&lt;/p&gt;

&lt;p&gt;My approach: &lt;strong&gt;verify the JWT at the Gateway level.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// api-gateway/middleware/auth.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jsonwebtoken&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;verifyToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorization&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No token provided&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JWT_SECRET&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-user-id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-user-role&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Invalid token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Gateway verifies the token and forwards the user's ID and role as custom headers to downstream services. Those services trust those headers — they don't re-verify the JWT. Clean, decoupled, and fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dockerizing Everything
&lt;/h2&gt;

&lt;p&gt;Each service has its own &lt;code&gt;Dockerfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:18-alpine&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--production&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3001&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "server.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I pushed each image to Docker Hub under my account (&lt;code&gt;raihanuldev&lt;/code&gt;) so they could be pulled and deployed independently.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; raihanuldev/auth-service:latest &lt;span class="nb"&gt;.&lt;/span&gt;
docker push raihanuldev/auth-service:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This taught me something important: &lt;strong&gt;the build process and the run process are completely separate.&lt;/strong&gt; You build once, run anywhere. That separation changes how you think about deployment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deploying to Render.com
&lt;/h2&gt;

&lt;p&gt;Render.com let me deploy each Docker container as a separate web service — which is exactly how microservices should be deployed.&lt;/p&gt;

&lt;p&gt;The catch: Render's free tier spins down services after inactivity. When all four services spin down simultaneously and a request comes in, the cold start chain can take a while.&lt;/p&gt;

&lt;p&gt;For production, you'd solve this with health check pings or a paid tier. For a portfolio project, I added a note in the README explaining it. Honesty &amp;gt; pretending it's perfect.&lt;/p&gt;

&lt;p&gt;Each service gets its own Render URL, and the API Gateway's environment variables point to those URLs. Swap localhost for production URLs, and the same code runs everywhere.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Start with the data model first.&lt;/strong&gt;&lt;br&gt;
I jumped into building services before fully thinking through how data would flow between them. Employee IDs referenced in the Attendance Service caused me headaches early on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Add a shared error format from day one.&lt;/strong&gt;&lt;br&gt;
Each service was returning errors in slightly different formats. Standardize this early — your frontend (and your sanity) will thank you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Logging matters more than you think.&lt;/strong&gt;&lt;br&gt;
When something breaks in a distributed system, you need logs from multiple services to understand what happened. I added proper logging late. Should have been the first thing.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Actually Learned
&lt;/h2&gt;

&lt;p&gt;Building this forced me to understand things that tutorials skim over:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker networking&lt;/strong&gt; — how containers actually talk to each other&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stateless services&lt;/strong&gt; — why JWT is a natural fit for microservices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment complexity&lt;/strong&gt; — why DevOps is a real job&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-offs&lt;/strong&gt; — microservices aren't "better," they're a trade-off between complexity and scalability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most valuable outcome wasn't the project itself. It was being able to look at a system architecture diagram and &lt;em&gt;understand&lt;/em&gt; the decisions behind it — not just copy them.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;

&lt;p&gt;The project is live on GitHub: &lt;a href="https://github.com/raihanuldev" rel="noopener noreferrer"&gt;github.com/raihanuldev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Docker images are on Docker Hub: &lt;code&gt;raihanuldev/auth-service&lt;/code&gt;, &lt;code&gt;raihanuldev/employee-service&lt;/code&gt;, etc.&lt;/p&gt;




&lt;p&gt;If you're thinking about building a microservices project — don't wait until you feel "ready." You learn the hard parts by hitting them. Start small, pick 2–3 services, and wire them together. The architecture diagram makes sense after you've built it, not before.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm a Full Stack Engineer (MERN + ASP.NET) based in Bangladesh, currently open to remote internships and junior engineer roles. If you're working on interesting systems, let's connect.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;code&gt;#microservices&lt;/code&gt; &lt;code&gt;#node&lt;/code&gt; &lt;code&gt;#docker&lt;/code&gt; &lt;code&gt;#webdev&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Deep Dive into Strings: The Unsung Hero of DSA (C++ Edition) Blog-1 | DSA Expert Series</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Sat, 16 May 2026 22:48:48 +0000</pubDate>
      <link>https://dev.to/raihanuldev/deep-dive-into-strings-the-unsung-hero-of-dsa-c-edition-blog-1-dsa-expert-series-1jah</link>
      <guid>https://dev.to/raihanuldev/deep-dive-into-strings-the-unsung-hero-of-dsa-c-edition-blog-1-dsa-expert-series-1jah</guid>
      <description>&lt;p&gt;&lt;strong&gt;Deep Dive into Strings: The Unsung Hero of DSA (C++ Edition)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Blog-1 | DSA Expert Series&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Strings are one of the most important data structures in competitive programming and interviews. Mastering them in &lt;strong&gt;C++&lt;/strong&gt; gives you a massive edge.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is a String in C++?
&lt;/h3&gt;

&lt;p&gt;In C++, &lt;code&gt;std::string&lt;/code&gt; is a dynamic, mutable character sequence (unlike Java/Python where strings are immutable).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;bits/stdc++.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s"&gt;" world"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;           &lt;span class="c1"&gt;// mutable - efficient&lt;/span&gt;
    &lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// hello world&lt;/span&gt;
    &lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&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;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// 11 (O(1))&lt;/span&gt;
    &lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;s&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;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// h  → O(1) access&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Operations &amp;amp; Best Practices (C++)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Recommended Way&lt;/th&gt;
&lt;th&gt;Time Complexity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Concatenation&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;+=&lt;/code&gt; or &lt;code&gt;reserve()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Amortized O(1) per op&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build large string&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;reserve()&lt;/code&gt; + &lt;code&gt;+=&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;O(n) total&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reverse&lt;/td&gt;
&lt;td&gt;&lt;code&gt;reverse(s.begin(), s.end())&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Substring&lt;/td&gt;
&lt;td&gt;&lt;code&gt;s.substr(pos, len)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;O(len)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: Always use &lt;code&gt;s.reserve(n)&lt;/code&gt; when you know the final size to avoid reallocations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Must-Know Techniques with C++ Code
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Two Pointers - Reverse String (In-place)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;reverseString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;left&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="n"&gt;right&lt;/span&gt; &lt;span class="o"&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;length&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;while&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;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;swap&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="n"&gt;s&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Check Palindrome (Ignoring non-alphanumeric)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;isPalindrome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;left&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="n"&gt;right&lt;/span&gt; &lt;span class="o"&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;length&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;while&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;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;while&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;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;isalnum&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="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="k"&gt;while&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;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;isalnum&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;right&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="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tolower&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="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;tolower&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;right&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt; 
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Longest Substring Without Repeating Characters (Sliding Window)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;lengthOfLongestSubstring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;unordered_map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;mp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;left&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="n"&gt;maxLen&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="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;right&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="n"&gt;right&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&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;length&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="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&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;count&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;right&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&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;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;right&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;left&lt;/span&gt;&lt;span class="p"&gt;)&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="n"&gt;mp&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;right&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="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;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;right&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;maxLen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxLen&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="n"&gt;left&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="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;maxLen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Group Anagrams (Using Frequency Array - Fastest)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;getKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;count&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="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;islower&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&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;c&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="sc"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;freq&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;key&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;to_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;freq&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"#"&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;key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Advanced: Rolling Hash (Rabin-Karp) in C++
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="nf"&gt;rollingHash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;MOD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1e9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;hash&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="n"&gt;power&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="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="sc"&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;power&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="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;power&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;power&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;base&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="p"&gt;;&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;hash&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pro Tips for C++ Developers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prefer &lt;code&gt;std::string&lt;/code&gt; over &lt;code&gt;char[]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;s.reserve()&lt;/code&gt; before heavy concatenations.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;string_view&lt;/code&gt; (C++17) for read-only views — very fast, zero copy.&lt;/li&gt;
&lt;li&gt;For very large input, use fast input: &lt;code&gt;ios::sync_with_stdio(false); cin.tie(NULL);&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Practice Path
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Easy&lt;/strong&gt;: Reverse String, Valid Palindrome, Valid Anagram&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Medium&lt;/strong&gt;: Longest Substring Without Repeating, Group Anagrams, Minimum Window Substring&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Hard&lt;/strong&gt;: Longest Palindromic Substring, Distinct Subsequences, Wildcard Matching&lt;/p&gt;




&lt;p&gt;Strings may look easy, but deep mastery (especially in C++) separates good coders from experts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next Blog&lt;/strong&gt;: Deep Dive into Tries &amp;amp; Suffix Structures in C++.&lt;/p&gt;

&lt;p&gt;What’s your favorite string problem? Comment below 👇&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy Coding!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;br&gt;
Rihanul Islam&lt;br&gt;
Competitive Programmer | DSA Enthusiast | Building strong fundamentals in Data Structures and Algorithms.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Closure Bangla</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Mon, 29 Sep 2025 08:11:25 +0000</pubDate>
      <link>https://dev.to/raihanuldev/closure-bangla-3mc9</link>
      <guid>https://dev.to/raihanuldev/closure-bangla-3mc9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flo86h0apobw5zd6b0qvf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flo86h0apobw5zd6b0qvf.png" alt=" " width="234" height="216"&gt;&lt;/a&gt;&lt;br&gt;
🚀 Go Language এ Closure + Escape Analysis&lt;br&gt;
প্রোগ্রামিং-এ closure একটা দারুণ কনসেপ্ট।&lt;br&gt;
Closure মানে হলো → একটা function, যেটা outer function এর ভেতরের variable কে "মনে রাখে", এমনকি outer function শেষ হয়ে গেলেও।&lt;br&gt;
👉 Example in Go:&lt;br&gt;
func counter() func() int {&lt;br&gt;
 x := 0&lt;br&gt;
 return func() int {&lt;br&gt;
 x++&lt;br&gt;
 return x&lt;br&gt;
 }&lt;br&gt;
}&lt;br&gt;
এখানে counter() ফাংশন return করছে একটা inner function।&lt;br&gt;
 Inner function এখনও x ভ্যারিয়েবল মনে রাখছে।&lt;br&gt;
 তাহলে প্রশ্ন আসলো → outer function তো শেষ হয়ে গেছে,x বেঁচে রইলো কিভাবে? 🤔&lt;br&gt;
এখানেই আসে Escape Analysis।&lt;/p&gt;

&lt;p&gt;Go compiler একটা process চালায় যেটাকে বলে escape analysis।&lt;br&gt;
 এটা basically চেক করে → কোন ভ্যারিয়েবল stack এ থাকবে আর কোনটা heap এ escape করবে।&lt;br&gt;
🔎 উপরের কোড x → heap এ চলে গেছে।&lt;br&gt;
 কারণ closure ফাংশন return হচ্ছে, আর তার বাইরে থেকেও x এর দরকার হচ্ছে।&lt;br&gt;
📌 Bottom line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Local variable হলে → normally stack এ থাকে&lt;br&gt;
Closure বা long-living object হলে → escape করে heap এ যায়💡 আমার মতে শুরুতে closure বুঝা জরুরি, কারণ এটা হলো concept। তারপর naturally curiosity আসবে — “variable বাঁচলো কিভাবে?” → তখন escape analysis বোঝা easy হয়ে যাবে।&lt;br&gt;
👉 আপনার মতে Go শেখার শুরুতে closure &amp;amp; escape analysis – কোনটা আগে বোঝা উচিত?&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>go</category>
      <category>backend</category>
      <category>programming</category>
      <category>development</category>
    </item>
    <item>
      <title>Go Internal Memory Bangla</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Mon, 29 Sep 2025 08:09:26 +0000</pubDate>
      <link>https://dev.to/raihanuldev/go-internal-memory-bangla-1j05</link>
      <guid>https://dev.to/raihanuldev/go-internal-memory-bangla-1j05</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnecrr884b0uqfgfql3pe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnecrr884b0uqfgfql3pe.jpg" alt=" " width="600" height="239"&gt;&lt;/a&gt;&lt;br&gt;
আজকে আমি শেয়ার করছি Go (Golang) প্রোগ্রামের ভেতরে মেমোরি কিভাবে কাজ করে সেটা নিয়ে আমার শেখা কিছু জিনিস।&lt;br&gt;
 প্রথমে মনে হতে পারে এটা শুধু "টেকনিক্যাল" ব্যাপার, কিন্তু আসলে মেমোরি কিভাবে ম্যানেজ হয় সেটা বুঝলে কোড অপটিমাইজ করা আর বাগ ফিক্স করা অনেক সহজ হয়ে যায়। 🙂&lt;/p&gt;

&lt;p&gt;⚡ Go Program এর Phase&lt;br&gt;
Go প্রোগ্রাম রান হওয়ার আগে/পরে সাধারণত দুইটা ধাপে কাজ হয়&lt;br&gt;
1.Compilation Phase → আমাদের কোড মেশিন readable হয়ে যায়।&lt;br&gt;
2.Execution Phase → আসল প্রোগ্রাম চালু হয় এবং memory allocate হয়।&lt;/p&gt;

&lt;p&gt;🧠 Internal Memory Layout&lt;br&gt;
Go প্রোগ্রাম রান করার সময় মেমোরি সাধারণত ৪ ভাগে ভাগ হয়ে যায় –&lt;/p&gt;

&lt;p&gt;1️⃣ Code Segment&lt;br&gt;
এখানে প্রোগ্রামের সব function আর compiled instructions store থাকে।&lt;br&gt;
উদাহরণ: main(), square() – এগুলো code segment এ থাকে।&lt;br&gt;
2️⃣ Data Segment&lt;br&gt;
এখানে global আর static variables store হয়।&lt;br&gt;
যেমন:&lt;br&gt;
var version string = "1.0.0"&lt;br&gt;
এই version data segment এ থাকবে।&lt;br&gt;
3️⃣ Stack&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;যখন কোনো function কল হয় তখন Stack Frame তৈরি হয়।&lt;br&gt;
লোকাল ভ্যারিয়েবল, parameter, return address সব এখানে অস্থায়ীভাবে থাকে।&lt;br&gt;
কাজ শেষ হয়ে গেলে সেই stack frame pop হয়ে যায় (LIFO – Last In First Out)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;4️⃣ Heap&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Heap memory গুলো Garbage Collector (GC) ম্যানেজ করে, মানে ম্যানুয়ালি free করতে হয় না।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;📌 Summary (Easy Way to Remember)&lt;br&gt;
Code Segment → function definitions&lt;br&gt;
Data Segment → global/static variables&lt;br&gt;
Stack → temporary data (function call এর সময়)&lt;br&gt;
Heap → dynamically allocated data (GC দ্বারা free হয়)&lt;/p&gt;

</description>
      <category>go</category>
      <category>bangla</category>
      <category>backenddevelopment</category>
      <category>godotengine</category>
    </item>
    <item>
      <title>Stack কি?</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Thu, 30 Jan 2025 17:41:08 +0000</pubDate>
      <link>https://dev.to/raihanuldev/stack-ki-4mp8</link>
      <guid>https://dev.to/raihanuldev/stack-ki-4mp8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Stack হলো একটি লিনিয়ার ডাটা স্ট্রাকচার যা LIFO (Last In, First Out) পদ্ধতিতে কাজ করে। অর্থাৎ যে আইটেমটি শেষবার স্ট্যাকে ঢোকানো হয়, সেটি সবার আগে বের হয়।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack এর মূল কাজ:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Push:&lt;/strong&gt; স্ট্যাকে নতুন একটি আইটেম যোগ করা।&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pop:** স্ট্যাক থেকে একটি আইটেম মুছে ফেলা।&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;3. Top/Peek:&lt;/strong&gt; স্ট্যাকের শীর্ষে থাকা আইটেমটি দেখা (মুছা ছাড়াই)।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. isEmpty:&lt;/strong&gt; চেক করা যে স্ট্যাক খালি কিনা।&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F890i8debk9ttk9dnumf9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F890i8debk9ttk9dnumf9.jpg" alt=" " width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**&lt;br&gt;
Stack কিভাবে কাজ করে?**&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;/p&gt;

&lt;p&gt;ধরা যাক, একটি স্ট্যাকে আমরা নিচের কাজগুলো করবো:&lt;/p&gt;

&lt;p&gt;Push: 10 → 20 → 30&lt;/p&gt;

&lt;p&gt;Pop: একবার Pop করলে 30 মুছে যাবে।&lt;/p&gt;

&lt;p&gt;স্ট্যাকের অবস্থান:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Push(10): [10]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Push(20): [10, 20]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Push(30): [10, 20, 30]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pop(): [10, 20]&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stack ইমপ্লিমেন্টেশন (C++):&lt;/p&gt;

&lt;p&gt;`#include &lt;br&gt;
using namespace std;&lt;/p&gt;

&lt;h1&gt;
  
  
  define MAX 100 // স্ট্যাকের ম্যাক্সিমাম সাইজ
&lt;/h1&gt;

&lt;p&gt;class Stack {&lt;br&gt;
 int top; // শীর্ষ আইটেমের অবস্থান&lt;br&gt;
 int arr[MAX]; // স্ট্যাক হিসেবে অ্যারে ব্যবহার&lt;/p&gt;

&lt;p&gt;public:&lt;br&gt;
 Stack() { top = -1; } // কন্সট্রাক্টর: স্ট্যাক শুরুতে খালি&lt;br&gt;
 bool isEmpty() { return top == -1; } // চেক খালি কিনা&lt;br&gt;
 bool isFull() { return top == MAX - 1; } // চেক পূর্ণ কিনা&lt;/p&gt;

&lt;p&gt;void push(int value) {&lt;br&gt;
 if (isFull()) {&lt;br&gt;
 cout &amp;lt;&amp;lt; "Stack Overflow!" &amp;lt;&amp;lt; endl;&lt;br&gt;
 return;&lt;br&gt;
 }&lt;br&gt;
 arr[++top] = value; // টপ ইনক্রিমেন্ট করে ভ্যালু যোগ&lt;br&gt;
 cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; " pushed to stack." &amp;lt;&amp;lt; endl;&lt;br&gt;
 }&lt;/p&gt;

&lt;p&gt;void pop() {&lt;br&gt;
 if (isEmpty()) {&lt;br&gt;
 cout &amp;lt;&amp;lt; "Stack Underflow!" &amp;lt;&amp;lt; endl;&lt;br&gt;
 return;&lt;br&gt;
 }&lt;br&gt;
 cout &amp;lt;&amp;lt; arr[top--] &amp;lt;&amp;lt; " popped from stack." &amp;lt;&amp;lt; endl; // টপ থেকে ভ্যালু মুছে টপ কমানো&lt;br&gt;
 }&lt;/p&gt;

&lt;p&gt;void peek() {&lt;br&gt;
 if (isEmpty()) {&lt;br&gt;
 cout &amp;lt;&amp;lt; "Stack is empty!" &amp;lt;&amp;lt; endl;&lt;br&gt;
 return;&lt;br&gt;
 }&lt;br&gt;
 cout &amp;lt;&amp;lt; "Top element is: " &amp;lt;&amp;lt; arr[top] &amp;lt;&amp;lt; endl;&lt;br&gt;
 }&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;int main() {&lt;br&gt;
 Stack s;&lt;/p&gt;

&lt;p&gt;s.push(10);&lt;br&gt;
 s.push(20);&lt;br&gt;
 s.push(30);&lt;br&gt;
 s.peek(); // শীর্ষ দেখানো&lt;br&gt;
 s.pop(); // শীর্ষ মুছে ফেলা&lt;br&gt;
 s.peek(); // নতুন শীর্ষ দেখানো&lt;/p&gt;

&lt;p&gt;return 0;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;আউটপুট:&lt;/p&gt;

&lt;p&gt;10 pushed to stack.&lt;br&gt;
20 pushed to stack.&lt;br&gt;
30 pushed to stack.&lt;br&gt;
Top element is: 30&lt;br&gt;
30 popped from stack.&lt;br&gt;
Top element is: 20&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;Stack এর ব্যবহার:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;ফাংশন কলের ট্র্যাক রাখা।&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;আনডো/রিডো অপারেশন।&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;প্যালিনড্রোম চেক।&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ব্যালেন্সড প্যারেনথেসিস চেক করা।&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Stack সহজ, কিন্তু শক্তিশালী একটি ডাটা স্ট্রাকচার!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>datastructures</category>
      <category>cpp</category>
      <category>stack</category>
      <category>bangla</category>
    </item>
    <item>
      <title>Middle Of the Linked List Solution | DS Topic |Leetcode</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Wed, 25 Dec 2024 13:46:18 +0000</pubDate>
      <link>https://dev.to/raihanuldev/middle-of-the-linked-list-solution-ds-topic-leetcode-2bij</link>
      <guid>https://dev.to/raihanuldev/middle-of-the-linked-list-solution-ds-topic-leetcode-2bij</guid>
      <description>&lt;p&gt;&lt;a href="https://leetcode.com/problems/middle-of-the-linked-list/solutions/6185567/middle-of-the-linked-list-solution-ds-to-6ap5" rel="noopener noreferrer"&gt;https://leetcode.com/problems/middle-of-the-linked-list/solutions/6185567/middle-of-the-linked-list-solution-ds-to-6ap5&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linkedlist</category>
      <category>cpp</category>
      <category>dsa</category>
      <category>leetcode</category>
    </item>
    <item>
      <title>Coordinate System Summary</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Tue, 17 Sep 2024 22:26:50 +0000</pubDate>
      <link>https://dev.to/raihanuldev/coordinate-system-summary-2lbo</link>
      <guid>https://dev.to/raihanuldev/coordinate-system-summary-2lbo</guid>
      <description>&lt;p&gt;A &lt;strong&gt;coordinate system&lt;/strong&gt; is a framework that allows you to locate points in space using numbers called coordinates. It defines a reference grid or plane and specifies how to assign values to points based on their position relative to a set of axes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Main Types of Coordinate Systems:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cartesian Coordinate System (Rectangular):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses two perpendicular axes (x and y) in 2D, and three (x, y, z) in 3D.&lt;/li&gt;
&lt;li&gt;Points are defined by distances from these axes (e.g., (3, 4) in 2D).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Polar Coordinate System:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used for 2D plane; defines points by a distance from the origin (radius, r) and an angle (θ) from the positive x-axis.&lt;/li&gt;
&lt;li&gt;Useful for circular and rotational problems.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Spherical and Cylindrical Coordinate Systems:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used for 3D space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spherical:&lt;/strong&gt; Points are defined by radius, polar angle, and azimuthal angle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cylindrical:&lt;/strong&gt; Points are defined by radius, angle, and height (r, θ, z).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each system has its advantages and is chosen based on the geometry of the problem being solved.&lt;/p&gt;

</description>
      <category>number</category>
      <category>mathforprogramming</category>
      <category>coordinatesystem</category>
      <category>cpp</category>
    </item>
    <item>
      <title>বুবল সর্ট, সিলেকশন সর্ট এবং ইনসার্টশন সর্ট</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Wed, 26 Jun 2024 22:36:47 +0000</pubDate>
      <link>https://dev.to/raihanuldev/bubl-srtt-silekshn-srtt-ebn-insaarttshn-srtt-3a2a</link>
      <guid>https://dev.to/raihanuldev/bubl-srtt-silekshn-srtt-ebn-insaarttshn-srtt-3a2a</guid>
      <description>&lt;p&gt;কম্পিউটার বিজ্ঞানে সর্টিং অ্যালগরিদমগুলি ডেটা সংগঠনের জন্য অত্যন্ত গুরুত্বপূর্ণ। এখানে আমরা তিনটি বেসিক সর্টিং অ্যালগরিদম নিয়ে আলোচনা করব: বুবল সর্ট, সিলেকশন সর্ট, এবং ইনসার্টশন সর্ট। প্রতিটি অ্যালগরিদমের নিজস্ব পদ্ধতি এবং কার্যকারিতা রয়েছে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;১. বুবল সর্ট (Bubble Sort)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;সংক্ষিপ্ত বিবরণ:&lt;/strong&gt;&lt;br&gt;
বুবল সর্ট একটি সহজ সর্টিং অ্যালগরিদম যা বারবার তালিকাটির মধ্য দিয়ে যায়, সংলগ্ন উপাদানগুলির তুলনা করে এবং প্রয়োজনে তাদের স্থান বিনিময় করে। এই প্রক্রিয়া চলতে থাকে যতক্ষণ না তালিকাটি সম্পূর্ণভাবে সর্ট হয়ে যায়।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;মূল পয়েন্ট:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;পদ্ধতি:&lt;/strong&gt; সংলগ্ন উপাদানগুলির তুলনা এবং প্রয়োজন অনুযায়ী স্থান বিনিময়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;দক্ষতা:&lt;/strong&gt; সেরা ক্ষেত্রে (O(n)), গড় এবং সবচেয়ে খারাপ ক্ষেত্রে (O(n^2))।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;স্থিতিশীলতা:&lt;/strong&gt; হ্যাঁ, এটি সমান উপাদানগুলির আপেক্ষিক ক্রম বজায় রাখে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ব্যবহার:&lt;/strong&gt; ছোট ডেটাসেট বা শিক্ষামূলক উদ্দেশ্যে সর্বোত্তম।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6286osgsw8jpj2kc58ij.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6286osgsw8jpj2kc58ij.jpg" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;২. সিলেকশন সর্ট (Selection Sort)&lt;br&gt;
**&lt;br&gt;
**সংক্ষিপ্ত বিবরণ:&lt;/strong&gt;&lt;br&gt;
সিলেকশন সর্ট প্রতিটি পদক্ষেপে তালিকাটি দুটি অংশে বিভক্ত করে: সর্ট করা এবং অসম্পূর্ণ। এটি অসম্পূর্ণ অংশ থেকে সর্বনিম্ন (বা সর্বাধিক) উপাদানটি খুঁজে বের করে এবং সর্ট করা অংশে যোগ করে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;মূল পয়েন্ট:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;পদ্ধতি:&lt;/strong&gt; সর্বনিম্ন উপাদান খুঁজে বের করা এবং তার স্থান বিনিময় করা।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;দক্ষতা:&lt;/strong&gt; সেরা, গড় এবং সবচেয়ে খারাপ ক্ষেত্রে (O(n^2))।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;স্থিতিশীলতা:&lt;/strong&gt; না, এটি সমান উপাদানগুলির আপেক্ষিক ক্রম বজায় রাখে না।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ব্যবহার:&lt;/strong&gt; সাধারণভাবে শিক্ষামূলক উদ্দেশ্যে ব্যবহৃত হয়।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;৩. ইনসার্টশন সর্ট (Insertion Sort)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;সংক্ষিপ্ত বিবরণ:&lt;/strong&gt;&lt;br&gt;
ইনসার্টশন সর্ট তালিকাটির প্রতিটি উপাদানকে তার সঠিক স্থানে স্থানান্তরিত করে এবং ক্রমান্বয়ে সর্ট করা তালিকা তৈরি করে। এটি প্রতিটি উপাদানকে আগের উপাদানগুলির সাথে তুলনা করে এবং সঠিক স্থানে প্রবেশ করায়।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;মূল পয়েন্ট:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;পদ্ধতি:&lt;/strong&gt; প্রতিটি উপাদানকে তার সঠিক স্থানে প্রবেশ করানো।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;দক্ষতা:&lt;/strong&gt; সেরা ক্ষেত্রে (O(n)), গড় এবং সবচেয়ে খারাপ ক্ষেত্রে (O(n^2))।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;স্থিতিশীলতা:&lt;/strong&gt; হ্যাঁ, এটি সমান উপাদানগুলির আপেক্ষিক ক্রম বজায় রাখে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ব্যবহার:&lt;/strong&gt; ছোট ডেটাসেট বা প্রায়-সর্ট করা তালিকার জন্য উপযুক্ত।&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Redux কি?</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Thu, 30 May 2024 06:04:03 +0000</pubDate>
      <link>https://dev.to/raihanuldev/redux-ki-4cnc</link>
      <guid>https://dev.to/raihanuldev/redux-ki-4cnc</guid>
      <description>&lt;p&gt;রিডাক্স হলো একটি প্রেডিক্টেবল স্টেট কন্টেইনার যা জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়। রিডাক্সের প্রধান উদ্দেশ্য হলো অ্যাপ্লিকেশনের স্টেটকে সুসংগঠিত ও পূর্বাভাসযোগ্য রাখা। এটি সাধারণত রিয়্যাক্টের সাথে ব্যবহৃত হলেও অন্যান্য ফ্রেমওয়ার্ক বা লাইব্রেরিতেও ব্যবহার করা যায়।&lt;/p&gt;

&lt;p&gt;রিডাক্সের মূল তিনটি নীতি হলো:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;একক স্টেট সোর্স&lt;/strong&gt;: সম্পূর্ণ অ্যাপ্লিকেশনের স্টেট একটি একক অবজেক্ট ট্রি হিসাবে একটি স্টোরে সংরক্ষিত থাকে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;স্টেট শুধুমাত্র রিড-অনলি&lt;/strong&gt;: স্টেট সরাসরি পরিবর্তন করা যায় না, বরং অ্যাকশন ডিসপ্যাচ করে তা পরিবর্তন করতে হয়। অ্যাকশন হলো একটি সাধারণ জাভাস্ক্রিপ্ট অবজেক্ট যা স্টেট পরিবর্তনের ইচ্ছা প্রকাশ করে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;স্টেট পরিবর্তনকারী রিডিউসার&lt;/strong&gt;: স্টেট কিভাবে পরিবর্তিত হবে তা রিডিউসার ফাংশন দ্বারা সংজ্ঞায়িত হয়। রিডিউসার হলো একটি পিওর ফাংশন যা পূর্ববর্তী স্টেট ও অ্যাকশন নিয়ে নতুন স্টেট রিটার্ন করে।&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;রিডাক্স ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনের স্টেট ম্যানেজমেন্ট সহজ এবং পরিষ্কার হয়, যা ডিবাগিং ও টেস্টিং সহজ করে তোলে। &lt;/p&gt;

</description>
      <category>redux</category>
      <category>banglaprogramming</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Async এবং await কিভাবে কাজ করে?</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Thu, 30 May 2024 06:01:22 +0000</pubDate>
      <link>https://dev.to/raihanuldev/async-ebn-await-kibhaabe-kaaj-kre-2e89</link>
      <guid>https://dev.to/raihanuldev/async-ebn-await-kibhaabe-kaaj-kre-2e89</guid>
      <description>&lt;p&gt;জাভাস্ক্রিপ্টে অ্যাসিনক্রোনাস অপারেশন পরিচালনার জন্য &lt;code&gt;async&lt;/code&gt; এবং &lt;code&gt;await&lt;/code&gt; কীওয়ার্ডগুলি ব্যবহার করা হয়, যা কোডকে আরও পাঠযোগ্য এবং পরিষ্কার করে তোলে।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;async&lt;/code&gt; ফাংশন
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;async&lt;/code&gt; কীওয়ার্ডটি একটি ফাংশনের আগে ব্যবহার করা হয়, যা ফাংশনটিকে অ্যাসিনক্রোনাস ফাংশনে রূপান্তরিত করে এবং প্রমিস রিটার্ন করে। উদাহরণস্বরূপ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Data fetched!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উপরের &lt;code&gt;fetchData&lt;/code&gt; ফাংশনটি স্বাভাবিকভাবে &lt;code&gt;Promise&lt;/code&gt; রিটার্ন করবে যা "Data fetched!" রেজলভ করবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;await&lt;/code&gt; এক্সপ্রেশন
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;await&lt;/code&gt; কীওয়ার্ডটি শুধুমাত্র &lt;code&gt;async&lt;/code&gt; ফাংশনের ভিতরে ব্যবহার করা যায় এবং এটি একটি প্রমিসের রেজলভ বা রিজেক্ট হওয়া পর্যন্ত অপেক্ষা করে। উদাহরণস্বরূপ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উপরের উদাহরণে, প্রথমে &lt;code&gt;fetch&lt;/code&gt; ফাংশনটি একটি প্রমিস রিটার্ন করে এবং &lt;code&gt;await&lt;/code&gt; এর মাধ্যমে সেই প্রমিস রেজলভ হওয়া পর্যন্ত অপেক্ষা করে। এরপর, &lt;code&gt;response.json()&lt;/code&gt; এর মাধ্যমে JSON ডেটা পাওয়ার জন্য আবার &lt;code&gt;await&lt;/code&gt; ব্যবহার করা হয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  সম্পূর্ণ উদাহরণ
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getUserData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://api.example.com/users/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Network response was not ok&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;userData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;There has been a problem with your fetch operation:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;getUserData&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে, &lt;code&gt;getUserData&lt;/code&gt; ফাংশনটি একটি ইউজারের ডেটা ফেচ করে এবং যদি কোনো সমস্যা থাকে, তাহলে &lt;code&gt;catch&lt;/code&gt; ব্লকের মাধ্যমে সেটি হ্যান্ডেল করে। &lt;code&gt;async&lt;/code&gt; ও &lt;code&gt;await&lt;/code&gt; ব্যবহারের ফলে কোডটি আরও সহজে পড়া এবং বোঝা যায়, যা অ্যাসিনক্রোনাস অপারেশন পরিচালনা করার জন্য অত্যন্ত উপকারী। &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>beginners</category>
    </item>
    <item>
      <title>MVC</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Thu, 07 Mar 2024 13:04:57 +0000</pubDate>
      <link>https://dev.to/raihanuldev/mvc-1m9n</link>
      <guid>https://dev.to/raihanuldev/mvc-1m9n</guid>
      <description>&lt;p&gt;MVC (Model-View-Controller) is a software architectural pattern commonly used in designing user interfaces and web applications. It divides an application into three interconnected components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Model: The Model represents the data and the business logic of the application. It encapsulates the data and the behavior associated with that data. The Model responds to requests for information (usually from the Controller) and updates itself accordingly. It does not know about the user interface or how the data is presented to the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;View: The View is responsible for presenting the data to the user. It represents the user interface elements such as screens, pages, forms, or widgets. The View receives data from the Model and presents it to the user in a way that is understandable and visually appealing. Views are passive and do not contain any business logic; they simply display the data provided by the Model.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;3.Controller: The Controller acts as an intermediary between the Model and the View. It receives user input from the View, processes it (often by interacting with the Model), and updates the View accordingly. The Controller interprets user actions and translates them into commands for the Model or the View. It also handles application logic, such as routing and determining which View to display.&lt;/p&gt;

&lt;p&gt;The key principles of MVC =&amp;gt; Separation of concerns,Modifiability and maintainability,Testability.&lt;br&gt;
It provides a structured approach to building applications, making them more organized, maintainable, and scalable.&lt;/p&gt;

&lt;h1&gt;
  
  
  mvc #modular #model #view #controller #developercommunity
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>টাইপস্ক্রিপ্ট</title>
      <dc:creator>Raihanul Islam Sharif</dc:creator>
      <pubDate>Mon, 26 Feb 2024 20:30:08 +0000</pubDate>
      <link>https://dev.to/raihanuldev/ttaaipskriptt-1fc1</link>
      <guid>https://dev.to/raihanuldev/ttaaipskriptt-1fc1</guid>
      <description>&lt;p&gt;টাইপস্ক্রিপ্ট মুলত একটি Javascript ভিত্তিক প্রোগ্রামিং ভাষা। যা ডেবলপারদের কোডে ডাটা টাইপিং মিস্টেক এর হাত থেকে রক্ষা করে। যেমন: জাভাস্ক্রিপ্ট এ আমরা যদি কোনো অবজেক্ট ডিক্লেয়ার করি তখন সেখানে কিন্তু আমরা কোনো টাইপ বলে দি না। তখন কিন্তু আমাদের কোডে এক প্রকার একটা ডাটা টাইপিং এ প্রবলেম হতে পারে, যেমন আমরা ইনপুট হিসেবে চাইলাম ইউজার এর নাম ; অবশ্যই সেটা স্ট্রি হতে হবে, আমরাও জানি সেটা স্ট্রিং হবে, প্রবলেম টা হবে তখনই যখন ইনপুট হিসেবে আমরা স্ট্রিং এর বদলে অন্য কোন টাইপ দিবো। তখন কিন্তু একটা প্রবলেম মাস্ট হবে।&lt;br&gt;
তো এই প্রবলেমটাকে হ্যান্ডেল করার জন্য মুলত টাইপ স্ক্রিপ্ট মামাকে তৈরি করা হয়েছে।&lt;/p&gt;

&lt;p&gt;এই টাইস্ক্রিপ্ট আমাদের কোড করার সময়ই দিক নির্দেশনা দিয়ে দিবে যেমনটা আমরা তাকে আগে বলে দিসি।&lt;br&gt;
যেমন: একটা অবজেক্ট ডিক্লেয়ার করার সময় বলে দিতে হয় যে, এই প্রোপার্টির এই এই টাইপ হবে, তখন যদি আমরা ভুলে বা বে খেয়ালে টাইপ ভুল করি তখনই আমাদের টাইপস্ক্রিপ্ট বলে দিবে যে ভাই আমাকে তুমরা এই এই টাইপ দিবে বলসো কিন্তু এখন অন্য একটা দিচ্ছো,এইটা কিন্তু সেই মাইন্ড করবে।&lt;/p&gt;

&lt;p&gt;সো আমার দিক থেকে টাইপ স্ক্রিপ্ট এর এই ব্যাপারটা খুব মজা লাগছে বিষয়টা ভালো লাগছে।&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>webdev</category>
      <category>raihanuldev</category>
      <category>bd</category>
    </item>
  </channel>
</rss>
