CPS Academy

ASP .NET এ DI দিয়ে service register করার সময় তিনটা option — AddSingleton, AddScoped, AddTransient। এদের বলে service lifetime। এরা ঠিক করে একটাই জিনিস: একটা object কখন জন্মায়, কতক্ষণ বাঁচে, আর কখন মরে। 👇

উপরের timeline টা দেখো — সময় বাঁ থেকে ডানে গড়াচ্ছে, ৩টা request আসছে, প্রতিটা bar = একটা instance এর জীবন।

🟢 Singleton — একবার জন্মায়, app বন্ধ পর্যন্ত বাঁচে।
পুরো timeline জুড়ে একটাই টানা bar। ১০টা request আসুক বা ১০০টা — instance মাত্র ১টা, সবাই সেটাই share করে। কখনো মরে না (app বন্ধ হওয়া পর্যন্ত)।

🟡 Scoped — প্রতি request এ জন্মায়, request শেষে মরে।
bar টা ঠিক request এর সীমানার মধ্যেই — request চালু হলে জন্ম, শেষ হলে dispose। একই request এর ভেতরে যতবার লাগুক, একই instance। তাই ৩ request = ৩টা instance।

🔴 Transient — চাওয়ামাত্র জন্মায়, কাজ শেষেই মরে।
টানা bar না, সরু সরু spike — ঝিলিক দিয়ে আসে আর চলে যায়। যতবার চাওয়া হয় ততবার নতুন। ৩ request এ ৬ বার চাওয়া = ৬টা আলাদা instance।

এক লাইনে মনে রাখো:
Singleton = app জুড়ে একটা
Scoped = request জুড়ে একটা
Transient = প্রতিবার একটা।

মূল কথা — lifetime মানে শুধু "কয়টা instance" না, "instance টা কতক্ষণ বাঁচে।" এই বাঁচার সময়টাই ঠিক করে দেয় কোন service এ কোনটা use করা নিরাপদ।

14 minutes ago | [YT] | 0

CPS Academy

যারা CPS Academy-এর student — বিশেষ করে CP Batch ও Job Interview Batch-এর — তাদের জন্য আমাদের ASP .NET কোর্সে থাকছে ৳১৫০০ ডিসকাউন্ট 🎉

মানে তোমাদের জন্য কোর্স ফি মাত্র ৳৪,০০০/- 😍

Website-এ enrolled email দিয়ে login করে ASP .NET course enroll করতে গেলেই discounted fee show করবে ✅

🚀 ASP .NET Full-Stack Course (CPS Academy)
✅ Complete Twitter Clone Project
✅ Learning like real software engineering
✅ Two enterprise-level software development
✅ 4 big projects
✅ ASP .NET Full-Stack Development
✅ DBMS, OOP, SOLID, Clean Architecture
✅ Live Class + Recording
✅ Unpaid Internship Opportunity

💰 Regular Fee: ৳৫,৫০০
🔥 CPS Student Fee: ৳৪,০০০
⏳ Duration: ৬ মাস
📅 ভর্তি চলছে: ১৫ জুলাই ২০২৬ পর্যন্ত
📞 01759261490

2 days ago | [YT] | 2

CPS Academy

একটা ক্লাসের ভেতরে যখন তুমি new EmailSender() লিখে dependency বানাও — দেখতে harmless মনে হয়, কিন্তু এই এক লাইনই পরে অনেক ঝামেলা ডেকে আনে। 👇
কেন? তিনটা সমস্যা:

১. Test করা যায় না 🧪
OrderService এর ভেতরে new EmailSender() hard-coded। এখন তুমি যদি OrderService test করতে চাও — প্রতিবার test চালালেই সত্যিকারের email চলে যাবে! আসল sender এর বদলে একটা mock sender বসানোর কোনো উপায় নাই, কারণ class টা নিজেই ঠিক করে ফেলেছে কোন sender ব্যবহার করবে।

২. Implementation বদলানো যায় না 🔄
আজ EmailSender, কাল SendGridSender, পরশু SmtpSender — প্রতিবার OrderService এর কোড খুলে new এর লাইন বদলাতে হবে। একটা ক্লাসের পরিবর্তনের জন্য আরেকটা ক্লাস ছুঁতে হচ্ছে।

৩. Tightly coupled 🔗
OrderService এখন EmailSender এর সাথে শক্ত করে বাঁধা। একটা ছাড়া আরেকটা নড়ে না — এটাই tight coupling, আর এটাই বড় codebase কে অচল করে দেয়।

সমাধান — Dependency Injection (DI):
ক্লাসকে নিজের dependency বানাতে দিও না। বরং সে কী চায় সেটা interface দিয়ে দাও(IEmailSender), আর আসল object টা constructor দিয়ে বাইরে থেকে দিয়ে দাও।


public OrderService(IEmailSender emailSender)
{
_emailSender = emailSender;
}

এখন OrderService জানেই না কে আসলে email পাঠাচ্ছে — সে শুধু জানে "আমার একটা IEmailSender লাগবে।" কে দেবে, সেটা তার মাথাব্যথা না।
তাহলে আসল object টা কে দেয়? — DI Container. Program.cs এ একবার বলে দাও:

builder.Services.AddScoped<IEmailSender, EmailSender>();

ব্যস — এখন থেকে যেখানেই IEmailSender দরকার, container নিজে EmailSender বানিয়ে inject করে দেবে। তুমি কোথাও আর new লিখবে না।

ছোট একটা কথা — AddScoped এর জায়গায় তিনটা option আছে, এদের বলে service lifetime (object টা কতক্ষণ বাঁচবে):
AddSingleton — পুরো app এ একটাই object, সবাই সেটাই share করে। (যেমন: config, logging)
AddScoped — প্রতি HTTP request এ একটা নতুন object, ওই request এর ভেতরে সবাই সেটাই পায়। (যেমন: database context — DI তে সবচেয়ে common)
AddTransient — প্রতিবার চাইলেই একদম নতুন object। (হালকা, state-less service এর জন্য)

কোনটা নেবে নির্ভর করে object টা কতক্ষণ বাঁচা উচিত তার উপর। ওয়েব app এ বেশিরভাগ service এর জন্য AddScoped নিরাপদ default।
ফলাফল:
✅ Test এ একটা mock IEmailSender দিয়ে দাও — আসল email ছাড়াই test হবে
✅ Implementation বদলাতে শুধু registration এর এক লাইন বদলাও, OrderService ছুঁতে হবে না
✅ Loosely coupled — প্রতিটা ক্লাস শুধু contract জানে, কে implement করে তা জানে না

⚡ Interview tip: DI জিজ্ঞেস করলে শুধু "object বাইরে থেকে দেওয়া" বললে অর্ধেক উত্তর। আসল কথাটা বলো — DI আসলে Dependency Inversion এর প্রয়োগ: তুমি concrete class এর উপর না, abstraction (interface) এর উপর depend করো। এই এক লাইন বললে interviewer বুঝবে তুমি শুধু "কীভাবে" না, "কেন" টাও জানো।


এই ধরনের clean architecture আর real-world .NET practice একদম গোড়া থেকে শিখতে চাও?
👉 CPS Academy — ASP .NET Full-Stack Course| Admission চলছে ১৫ জুলাই পর্যন্ত।

6 days ago | [YT] | 8

CPS Academy

Batch-7’s "Module-1 | Contest-3: Loops" is officially over.

Really happy to see many learners seriously trying the problems and pushing themselves throughout the contest. Some finished all the problems, some struggled through tricky cases, but everyone gained experience from it.

Congrats to the top performers on the leaderboard, especially:

🥇 Bikrom_Roy
🥈 Toslim_Aman
🥉 atiq_250137

Also, congratulations to everyone who participated and kept solving until the end. Competitive programming is not always easy, but regular practice and consistency are what make the difference over time.

More contests and more challenging topics are coming next. Keep practicing and keep improving.

#CompetitiveProgramming #CPSAcademy #ProblemSolving #CodingJourney

6 days ago | [YT] | 7

CPS Academy

তুমি যখন ASP .NET এ app.UseAuthentication(), app.UseRouting() এভাবে একটার পর একটা middleware জুড়ে দাও — জানো তো এটা আসলে একটা ৩০ বছরের পুরনো design pattern? 🤔
এটা হলো Chain of Responsibility — Gang of Four এর একটা behavioral pattern।
আইডিয়াটা খুব সহজ 👇

একটা request আসলো। সে pipeline এর প্রথম middleware এর কাছে গেল। সেই middleware এখন দুটোর একটা করবে:

✅ নিজে handle করে চেইন থামিয়ে দেবে — যেমন auth layer দেখলো access নাই, তখনই 401 দিয়ে request টা থামিয়ে দিল। চেইন আর সামনে গেল না।

➡️ নাহলে next() কল করে পরের জনের কাছে পাঠাবে — "আমার কাজ শেষ, এবার তুমি দেখো।"

এভাবে request টা Logging → Auth → Routing → Endpoint পুরো চেইন ধরে এগোয়, আর response আবার উল্টো পথে ফেরত আসে।
এটাই Chain of Responsibility এর মূল কথা — একগুচ্ছ handler পরপর সাজানো, প্রতিটা নিজে decide করে কাজটা নিজে করবে নাকি পরের জনের হাতে ছেড়ে দেবে। যে request পাঠাচ্ছে, তাকে জানতেই হয় না কে আসলে কাজটা করবে।
কেন এই design এত সুন্দর?
নতুন একটা middleware লাগবে? চেইনে একটা লাইন যোগ করো — বাকি কোড ছুঁতে হয় না।
প্রতিটা middleware এর একটাই কাজ — single responsibility, clean।
কে কার পরে চলবে, শুধু order বদলেই ঠিক করা যায়।
মজার ব্যাপার — তুমি হয়তো GoF pattern মুখস্থ না করেও প্রতিদিন এই pattern টা use করছো। Framework গুলো এই classic pattern গুলোর উপরেই দাঁড়িয়ে আছে।

⚡ Interview tip: "middleware কীভাবে কাজ করে?" জিজ্ঞেস করলে শুধু "request pipeline" বললে average উত্তর। "এটা আসলে Chain of Responsibility, প্রতিটা handler next() দিয়ে decide করে" — এটা বললে তুমি এগিয়ে গেলে।

আর কেউ যদি আরও push করে — "শুধু CoR তো request একদিকে পাঠায়, তাহলে response ফেরত আসে কীভাবে?" — তখন এই উত্তরটা তোমাকে আলাদা level এ নিয়ে যাবে:
"ASP .NET এ প্রতিটা middleware await next() এর আগে pre-processing আর পরে post-processing চালায় — অর্থাৎ এক middleware পরের সবগুলোকে ঘিরে (wrap করে) রাখে। এই wrap-around বা nested execution টা Decorator pattern এর core। তাই middleware কে নিখুঁতভাবে বললে এটা Chain of Responsibility + Decorator এর hybrid — যাকে সংক্ষেপে Pipeline pattern বলা হয়।"

এই depth টাই বুঝিয়ে দেয় তুমি framework এর low level design সত্যিই বোঝো।


Framework শুধু use না, ভেতরে কী pattern কাজ করছে সেটাসহ শিখতে চাও?
👉 CPS Academy — ASP .NET Full-Stack Course | Admission চলছে ১৫ জুলাই পর্যন্ত।

1 week ago | [YT] | 9

CPS Academy

string += "x" আর StringBuilder.Append("x") — দুটোই তো একই loop, n বার চলছে। তাহলে complexity ও তো একই হওয়ার কথা, তাই না? 🤔

একটু ভেবে দেখো... অনেকেই বলবে দুটোই O(n)।
এবার মজার ব্যাপার হলো — ভুল। 👇
✅ StringBuilder → O(n)
❌ string += → O(n²)

একই দেখতে, কিন্তু আকাশ-পাতাল তফাত। কেন?
কারণ string immutable — একবার তৈরি হলে ওটা আর বদলানো যায় না। তাই result += "x" করলে runtime পুরনোটায় "x" জুড়ে দেয় না, বরং পুরো পুরনো string টা copy করে একদম নতুন একটা object বানায়। মানে প্রতিবার পুরনো সব অক্ষর copy + নতুন "x" — সব মিলিয়ে নতুন length-এর সমান অক্ষর লিখতে হয়:
১ম বার: "" → "x" — ০ copy + ১ নতুন = ১ অক্ষর লেখা, length ১
২য় বার: "x" → "xx" — ১ copy + ১ নতুন = ২ অক্ষর লেখা, length ২
৩য় বার: "xx" → "xxx" — ২ copy + ১ নতুন = ৩ অক্ষর লেখা, length ৩
...
n তম বার: (n−১) copy + ১ নতুন = n অক্ষর লেখা, length n

মোট অক্ষর = 1 + 2 + 3 + ... + n = n(n+1)/2 ≈ O(n²)।
ধরো n = 10,000 — final string-এর length মাত্র 10,000, অথচ মোট প্রায় ৫ কোটি অক্ষর Write হয়! এই বিশাল গ্যাপটাই O(n²)-এর আসল Operations। loop দেখে নিরীহ O(n) মনে হলেও, ভেতরের এই hidden copy ই তাকে O(n²) বানিয়ে দেয়।

StringBuilder এই copy টাই করে না — ভেতরে একটা buffer রাখে, Append করলে সেই buffer-এই লিখে যায়, প্রতিবার নতুন string বানায় না। তাই পুরো কাজ O(n)।

এক কথায়: অল্প concatenation (২-৩ বার) হলে += ঠিক আছে। কিন্তু loop এ string জোড়া লাগালে সবসময় StringBuilder।

⚡ Interview tip: কেউ জিজ্ঞেস করলে শুধু "immutable" বললে হবে না — কেন slow সেটা copy + allocation দিয়ে explain করতে হবে। এই depth টাই তোমাকে আলাদা করবে।


এমন interview-ready C# / .NET fundamentals একদম গোড়া থেকে শিখতে চাও?

👉 CPS Academy — ASP .NET Full-Stack Web Development Course| Admission চলছে ১৫ জুলাই পর্যন্ত।

#CSharp #dotnet #aspnet #CPSAcademy #ProgrammingBangla #InterviewPrep #StringBuilder

1 week ago | [YT] | 14

CPS Academy

🚀 ASP.NET Full-Stack Web Development Course — তোমার ট্রেইনার প্যানেল

একটা কোর্স তখনই দাঁড়ায়, যখন পেছনে থাকে ইন্ডাস্ট্রির মানুষ। তাই এবার আমরা এমন একটা প্যানেল নিয়ে এসেছি, যারা প্রতিদিন রিয়েল প্রোডাকশন কোড লেখে, রিয়েল প্রজেক্ট ডেলিভার করে। 👇

👨‍💻 Subhashis Mollick
Computer Science, University of Greenwich
Senior Software Engineer — SELISE Digital Platforms
👨‍💻 Muhammad Mehraj Hossain
Noakhali Science and Technology University
Software Engineer II — Cefalo Bangladesh Ltd
👨‍💻 Muhammad Shahriar
Ex Senior Software Engineer — Enosis
CEO & Founder — CPS Academy

এরা শুধু পড়াবে না — কীভাবে একটা প্রজেক্ট শূন্য থেকে শুরু করে প্রোডাকশন পর্যন্ত নিয়ে যেতে হয়, সেই পুরো জার্নিটা হাতে-কলমে দেখাবে। ক্যাপস্টোন হিসেবে তুমি বানাবে একটা ফুল Twitter Clone 🔥

📌 ভর্তি চলছে — শেষ তারিখ ১৫ জুলাই, ২০২৬
আসন সীমিত, তাই দেরি করো না।

1 week ago | [YT] | 11

CPS Academy

🚀 ASP .NET Full-Stack Web Development Course — CPS Academy
C# দিয়ে শুরু করে একজন production-ready full-stack developer হয়ে উঠতে চাও? তাহলে এই batch-টা তোমার জন্যই। 💙

শুধু syntax না — Clean Architecture, real API design, database, frontend, সব মিলিয়ে একটা complete project (Twitter clone) নিজের হাতে তৈরি করবে। সাথে আরও ৪টা quality project থাকবে assignment হিসেবে, যাতে শেখাটা শুধু দেখে দেখে না হয়, নিজে করে পাকা হয়। Job market-এ যেটা আসলে কাজে লাগে, ঠিক সেটাই শিখবে।

👨‍🏫 Trainers:
▫️ Muhammad Mehraj Hossain — Software Engineer II, Cefalo Bangladesh Ltd
▫️ Subhashis Mollick — Senior Software Engineer, SELISE Digital Platforms
▫️ Muhammad Shahriar — Ex Senior Software Engineer (Enosis Solutions) | CEO & Founder, CPS Academy

📌 এক নজরে:
💰 ফি: ৫,৫০০৳ (CPS-এর পুরনো student-দের জন্য ৪,০০০৳)
⏳ সময়: ৬ মাস
📝 ভর্তি চলবে: ৫ জুন – ১৫ জুলাই ২০২৬
🎯 শুধু top performer-দের জন্য ২ মাসের unpaid internship
আসন সীমিত, তাই দেরি কোরো না।

👉 Join Us আজই!

#CPSAcademy #ASPNET #FullStackDeveloper #DotNet #CodingBangladesh

1 week ago | [YT] | 9

CPS Academy

🎉 Celebrating a Significant Milestone 🎉

Alhamdulillah. We’re incredibly proud to announce that Tawhid Ahmmed from Mymensingh Engineering College has become the 128th Pupil at CPS Academy -and the 38th Pupil from Batch-3 of our Complete Competitive Programming Course

Tawhid Ahmmed, your dedication, perseverance, and love for problem-solving have brought you this far, and it's truly inspiring. Congratulations on this well-deserved achievement - the journey ahead is even more exciting, InshaAllah.

2 weeks ago | [YT] | 19

CPS Academy

🎉 Alhamdulillah!অপেক্ষা শেষ! ASP. NET Full-Stack Bootcamp এ ভর্তি শুরু হয়ে গেছে।

চার বছর CSE পড়েও CV-তে দেখানোর মতো একটা real project নেই? এই কোর্সে তুমি নিজের হাতে একটা পুরো Twitter বানাবে — ঠিক যেভাবে আসল কোম্পানিতে software তৈরি হয়।

✅ নিজের Twitter project

✅ নিজের হাতে ৪টা high-quality project

✅ লাইভ ক্লাস + রেকর্ডিং

✅ Industry expert এর কাছে শেখা

✅ যারা ভালো করবে, তাদের জন্য real-team internship (Inventory Management project)

💰 মাত্র ৳৫,৫০০

⏱ ৬ মাস

📅 শেষ তারিখ: ১৫ জুলাই ২০২৬ · সিট সীমিত

👉 আজই enroll করো: Check Comment

2 weeks ago | [YT] | 18