<?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: Kishan vyas</title>
    <description>The latest articles on DEV Community by Kishan vyas (@kishan_vyas).</description>
    <link>https://dev.to/kishan_vyas</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%2F1878901%2Fce811825-deb9-45e9-ad86-eeb51a9e0fb7.png</url>
      <title>DEV Community: Kishan vyas</title>
      <link>https://dev.to/kishan_vyas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kishan_vyas"/>
    <language>en</language>
    <item>
      <title>Interview Questions💥: Git/GitHub · PostgreSQL · MongoDB · Python</title>
      <dc:creator>Kishan vyas</dc:creator>
      <pubDate>Mon, 20 Apr 2026 18:15:47 +0000</pubDate>
      <link>https://dev.to/kishan_vyas/interview-questions-gitgithub-postgresql-mongodb-python-483f</link>
      <guid>https://dev.to/kishan_vyas/interview-questions-gitgithub-postgresql-mongodb-python-483f</guid>
      <description>&lt;h2&gt;
  
  
  The Ultimate Backend Interview Question Bank
&lt;/h2&gt;

&lt;p&gt;If you're preparing for a backend or full-stack role - or just want to solidify your foundations - this is the most comprehensive question bank I've put together.&lt;/p&gt;

&lt;p&gt;This covers everything that actually comes up in real interviews: from Git workflows and database internals to Python deep dives, system design, concurrency, and algorithms. Whether you're a fresher prepping for your first SDE role or an experienced dev brushing up before switching jobs, there's something here for every level.&lt;/p&gt;

&lt;p&gt;I've organized it into 22 sections so you can target exactly what you need, skip what you know, deep-dive what you don't.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How to use this:&lt;/strong&gt; Don't try to memorize answers. Use these as prompts to &lt;em&gt;understand&lt;/em&gt; the concept. If you can explain it out loud in plain English, you know it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What's covered
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Git &amp;amp; GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4–20&lt;/td&gt;
&lt;td&gt;Python (Basics, OOP, Concurrency, Memory, Testing &amp;amp; more)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;System Design &amp;amp; Architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;Data Structures &amp;amp; Algorithms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Git &amp;amp; GitHub&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Python — Basics &amp;amp; Built-ins&lt;/li&gt;
&lt;li&gt;Python — Data Structures &amp;amp; Collections&lt;/li&gt;
&lt;li&gt;Python — Functions &amp;amp; Functional Programming&lt;/li&gt;
&lt;li&gt;Python — OOP (Object-Oriented Programming)&lt;/li&gt;
&lt;li&gt;Python — Modules, Packages &amp;amp; Imports&lt;/li&gt;
&lt;li&gt;Python — File Handling &amp;amp; I/O&lt;/li&gt;
&lt;li&gt;Python — Error &amp;amp; Exception Handling&lt;/li&gt;
&lt;li&gt;Python — Iterators, Generators &amp;amp; Comprehensions&lt;/li&gt;
&lt;li&gt;Python — Decorators &amp;amp; Context Managers&lt;/li&gt;
&lt;li&gt;Python — Concurrency &amp;amp; Parallelism&lt;/li&gt;
&lt;li&gt;Python — Memory Management &amp;amp; Internals&lt;/li&gt;
&lt;li&gt;Python — Standard Library &amp;amp; Useful Modules&lt;/li&gt;
&lt;li&gt;Python — Type Hints &amp;amp; Annotations&lt;/li&gt;
&lt;li&gt;Python — Testing&lt;/li&gt;
&lt;li&gt;Python — Database Integration&lt;/li&gt;
&lt;li&gt;Python — Web &amp;amp; APIs&lt;/li&gt;
&lt;li&gt;Python — Advanced Topics&lt;/li&gt;
&lt;li&gt;System Design / Architecture Questions&lt;/li&gt;
&lt;li&gt;Data Structures &amp;amp; Algorithms (Bonus)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. Git &amp;amp; GitHub
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Conceptual Questions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is Git? How is it different from GitHub?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;git fetch&lt;/code&gt; and &lt;code&gt;git pull&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;git merge&lt;/code&gt; and &lt;code&gt;git rebase&lt;/code&gt;? When would you use each?&lt;/li&gt;
&lt;li&gt;What is a detached HEAD state? How do you get into it and how do you recover?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;git reset&lt;/code&gt;, &lt;code&gt;git revert&lt;/code&gt;, and &lt;code&gt;git restore&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;git stash&lt;/code&gt;? When would you use it?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;git cherry-pick&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;--soft&lt;/code&gt;, &lt;code&gt;--mixed&lt;/code&gt;, and &lt;code&gt;--hard&lt;/code&gt; in &lt;code&gt;git reset&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a Git hook? Give examples of pre-commit and post-commit hooks.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;git bisect&lt;/code&gt;? How does it help in debugging?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;origin&lt;/code&gt; and &lt;code&gt;upstream&lt;/code&gt; in Git?&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;.gitignore&lt;/code&gt; file? How do you ignore an already tracked file?&lt;/li&gt;
&lt;li&gt;What is the difference between a &lt;code&gt;tag&lt;/code&gt; and a &lt;code&gt;branch&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;git reflog&lt;/code&gt; and when is it useful?&lt;/li&gt;
&lt;li&gt;What is the difference between a fast-forward merge and a three-way merge?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Branching &amp;amp; Workflow Questions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Explain the Git Flow branching strategy.&lt;/li&gt;
&lt;li&gt;What is trunk-based development? How is it different from Git Flow?&lt;/li&gt;
&lt;li&gt;What is the purpose of a &lt;code&gt;develop&lt;/code&gt;, &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;release&lt;/code&gt;, and &lt;code&gt;hotfix&lt;/code&gt; branch?&lt;/li&gt;
&lt;li&gt;How do you handle a situation where two developers edit the same file?&lt;/li&gt;
&lt;li&gt;What is a pull request / merge request? What is its purpose beyond code merging?&lt;/li&gt;
&lt;li&gt;How do you squash commits before merging a PR?&lt;/li&gt;
&lt;li&gt;What is code review? What do you look for in a code review?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Scenario-Based Questions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; You accidentally committed sensitive credentials to a public repo. What do you do?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; You have a bug in production. Your last 5 commits are all broken. How do you roll back safely without losing other developers' work?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; You are working on a feature branch for 2 weeks. The &lt;code&gt;main&lt;/code&gt; branch has moved ahead by 30 commits. How do you bring your branch up to date?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; You need to move the last 3 commits from &lt;code&gt;main&lt;/code&gt; to a new feature branch because you committed to the wrong branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; Two team members have merge conflicts on the same PR. How do you resolve it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; Your &lt;code&gt;git pull&lt;/code&gt; fails due to diverged branches. What are your options?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; You want to apply a bug fix from one branch to multiple other branches. What do you do?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; A junior developer force-pushed to the shared &lt;code&gt;main&lt;/code&gt; branch and erased commits. How do you recover?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 GitHub Specific Questions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is GitHub Actions? How does a CI/CD pipeline work with it?&lt;/li&gt;
&lt;li&gt;What is the difference between a fork and a clone?&lt;/li&gt;
&lt;li&gt;What are GitHub branch protection rules? Why are they important?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;CODEOWNERS&lt;/code&gt; in GitHub?&lt;/li&gt;
&lt;li&gt;What is the difference between Issues, Milestones, and Projects in GitHub?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  2. PostgreSQL
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Conceptual / Fundamentals
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is PostgreSQL? How is it different from MySQL?&lt;/li&gt;
&lt;li&gt;What are the ACID properties? Explain each with an example.&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;CHAR&lt;/code&gt;, &lt;code&gt;VARCHAR&lt;/code&gt;, and &lt;code&gt;TEXT&lt;/code&gt; in PostgreSQL?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;SERIAL&lt;/code&gt;, &lt;code&gt;BIGSERIAL&lt;/code&gt;, and &lt;code&gt;UUID&lt;/code&gt; as primary key types?&lt;/li&gt;
&lt;li&gt;What is a schema in PostgreSQL? How is it different from a database?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;TRUNCATE&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;, and &lt;code&gt;DROP&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What are sequences in PostgreSQL? How do you create and use them?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;IS NULL&lt;/code&gt; and &lt;code&gt;= NULL&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;COALESCE&lt;/code&gt;? Give a practical example.&lt;/li&gt;
&lt;li&gt;What are CTEs (Common Table Expressions)? How are they different from subqueries?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Joins &amp;amp; Queries
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is the difference between &lt;code&gt;INNER JOIN&lt;/code&gt;, &lt;code&gt;LEFT JOIN&lt;/code&gt;, &lt;code&gt;RIGHT JOIN&lt;/code&gt;, and &lt;code&gt;FULL OUTER JOIN&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;CROSS JOIN&lt;/code&gt;? When would you use it?&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;SELF JOIN&lt;/code&gt;? Give a real-world example.&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;UNION&lt;/code&gt; and &lt;code&gt;UNION ALL&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;WHERE&lt;/code&gt; and &lt;code&gt;HAVING&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;DISTINCT ON&lt;/code&gt; clause in PostgreSQL?&lt;/li&gt;
&lt;li&gt;What is a window function? Explain &lt;code&gt;ROW_NUMBER()&lt;/code&gt;, &lt;code&gt;RANK()&lt;/code&gt;, &lt;code&gt;DENSE_RANK()&lt;/code&gt;, and &lt;code&gt;LAG()&lt;/code&gt;/&lt;code&gt;LEAD()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Write a query to find the second highest salary from an &lt;code&gt;employees&lt;/code&gt; table.&lt;/li&gt;
&lt;li&gt;Write a query to find duplicate records in a table.&lt;/li&gt;
&lt;li&gt;Write a query to delete duplicate rows while keeping one.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Indexing &amp;amp; Performance
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is an index? What are the types of indexes in PostgreSQL?&lt;/li&gt;
&lt;li&gt;What is the difference between a &lt;code&gt;B-Tree&lt;/code&gt; index and a &lt;code&gt;Hash&lt;/code&gt; index?&lt;/li&gt;
&lt;li&gt;What is a partial index? When is it useful?&lt;/li&gt;
&lt;li&gt;What is a composite index? What is column order importance?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;EXPLAIN&lt;/code&gt; and &lt;code&gt;EXPLAIN ANALYZE&lt;/code&gt;? How do you read a query plan?&lt;/li&gt;
&lt;li&gt;What is a table scan vs an index scan vs an index-only scan?&lt;/li&gt;
&lt;li&gt;What causes an index not to be used by the query planner?&lt;/li&gt;
&lt;li&gt;What is vacuuming in PostgreSQL? Why is it needed?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pg_stat_activity&lt;/code&gt;? What do you use it for?&lt;/li&gt;
&lt;li&gt;What is connection pooling? Why is it important in PostgreSQL?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Transactions &amp;amp; Concurrency
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What are transaction isolation levels in PostgreSQL?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;READ COMMITTED&lt;/code&gt; and &lt;code&gt;REPEATABLE READ&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a dirty read, non-repeatable read, and phantom read?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;SELECT FOR UPDATE&lt;/code&gt;? When do you use it?&lt;/li&gt;
&lt;li&gt;What is a deadlock in PostgreSQL? Give a real-world scenario.&lt;/li&gt;
&lt;li&gt;How does PostgreSQL handle deadlock detection?&lt;/li&gt;
&lt;li&gt;What is MVCC (Multi-Version Concurrency Control)?&lt;/li&gt;
&lt;li&gt;What is an optimistic lock vs a pessimistic lock?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;SAVEPOINT&lt;/code&gt; in a transaction?&lt;/li&gt;
&lt;li&gt;What is a two-phase commit?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Schema Design &amp;amp; Advanced
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is normalization? Explain 1NF, 2NF, 3NF, and BCNF.&lt;/li&gt;
&lt;li&gt;What is denormalization? When is it preferred?&lt;/li&gt;
&lt;li&gt;What is a foreign key constraint? What are &lt;code&gt;ON DELETE CASCADE&lt;/code&gt; and &lt;code&gt;ON DELETE SET NULL&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;CHECK&lt;/code&gt; constraint? Give an example.&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;UNIQUE&lt;/code&gt; constraint vs a &lt;code&gt;PRIMARY KEY&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a materialized view? How is it different from a regular view?&lt;/li&gt;
&lt;li&gt;What are table partitioning strategies in PostgreSQL?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;JSON&lt;/code&gt; vs &lt;code&gt;JSONB&lt;/code&gt; in PostgreSQL? When would you use each?&lt;/li&gt;
&lt;li&gt;What is full-text search in PostgreSQL? What are &lt;code&gt;tsvector&lt;/code&gt; and &lt;code&gt;tsquery&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;pg_dump&lt;/code&gt; and &lt;code&gt;pg_restore&lt;/code&gt; tool? How do you take backups?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 PostgreSQL vs MySQL
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What are the key differences between PostgreSQL and MySQL?&lt;/li&gt;
&lt;li&gt;Why would you choose PostgreSQL over MySQL for a new project?&lt;/li&gt;
&lt;li&gt;Which supports better ACID compliance — PostgreSQL or MySQL (InnoDB)?&lt;/li&gt;
&lt;li&gt;How does PostgreSQL handle JSON differently from MySQL?&lt;/li&gt;
&lt;li&gt;What are the replication options in PostgreSQL vs MySQL?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  3. MongoDB
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Conceptual / Fundamentals
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is MongoDB? How is it different from a relational database?&lt;/li&gt;
&lt;li&gt;What is a document in MongoDB? What format does it use?&lt;/li&gt;
&lt;li&gt;What is a collection? How is it different from a table in SQL?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;_id&lt;/code&gt; field in MongoDB? Can you override it?&lt;/li&gt;
&lt;li&gt;What is BSON? How is it different from JSON?&lt;/li&gt;
&lt;li&gt;What are the different data types supported in MongoDB?&lt;/li&gt;
&lt;li&gt;What is MongoDB Atlas? How is it different from self-hosted MongoDB?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;insertOne()&lt;/code&gt;, &lt;code&gt;insertMany()&lt;/code&gt;, and &lt;code&gt;bulkWrite()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;findOne()&lt;/code&gt; and &lt;code&gt;find()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a cursor in MongoDB?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Querying
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;How do you perform conditional queries using &lt;code&gt;$gt&lt;/code&gt;, &lt;code&gt;$lt&lt;/code&gt;, &lt;code&gt;$gte&lt;/code&gt;, &lt;code&gt;$lte&lt;/code&gt;, &lt;code&gt;$ne&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;$in&lt;/code&gt; operator? Give an example.&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;$and&lt;/code&gt;, &lt;code&gt;$or&lt;/code&gt;, &lt;code&gt;$not&lt;/code&gt;, and &lt;code&gt;$nor&lt;/code&gt; operator?&lt;/li&gt;
&lt;li&gt;How do you query nested documents in MongoDB?&lt;/li&gt;
&lt;li&gt;How do you query array fields using &lt;code&gt;$elemMatch&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;$regex&lt;/code&gt; operator in MongoDB?&lt;/li&gt;
&lt;li&gt;How do you perform a text search in MongoDB?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;$exists&lt;/code&gt; operator?&lt;/li&gt;
&lt;li&gt;How do you sort and limit query results in MongoDB?&lt;/li&gt;
&lt;li&gt;What is projection in MongoDB? How do you include/exclude fields?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Aggregation
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is the Aggregation Pipeline in MongoDB?&lt;/li&gt;
&lt;li&gt;Explain the following stages: &lt;code&gt;$match&lt;/code&gt;, &lt;code&gt;$group&lt;/code&gt;, &lt;code&gt;$sort&lt;/code&gt;, &lt;code&gt;$project&lt;/code&gt;, &lt;code&gt;$limit&lt;/code&gt;, &lt;code&gt;$skip&lt;/code&gt;, &lt;code&gt;$unwind&lt;/code&gt;, &lt;code&gt;$lookup&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;$lookup&lt;/code&gt;? How does it compare to SQL JOINs?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;$unwind&lt;/code&gt;? When is it useful?&lt;/li&gt;
&lt;li&gt;Write an aggregation pipeline to find the total sales per product category.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;$facet&lt;/code&gt; in MongoDB aggregation?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;$bucket&lt;/code&gt; and &lt;code&gt;$bucketAuto&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;$addFields&lt;/code&gt; vs &lt;code&gt;$project&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;$sum&lt;/code&gt;, &lt;code&gt;$avg&lt;/code&gt;, &lt;code&gt;$min&lt;/code&gt;, &lt;code&gt;$max&lt;/code&gt; in &lt;code&gt;$group&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;$graphLookup&lt;/code&gt;? When is it used?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Indexing &amp;amp; Performance
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What types of indexes does MongoDB support?&lt;/li&gt;
&lt;li&gt;What is a compound index in MongoDB? What is field order significance?&lt;/li&gt;
&lt;li&gt;What is a multikey index? When is it automatically created?&lt;/li&gt;
&lt;li&gt;What is a text index in MongoDB?&lt;/li&gt;
&lt;li&gt;What is a TTL (Time-To-Live) index? Give a use case.&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;explain()&lt;/code&gt; method? What does &lt;code&gt;executionStats&lt;/code&gt; tell you?&lt;/li&gt;
&lt;li&gt;What is a covered query in MongoDB?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;$hint&lt;/code&gt; operator in MongoDB?&lt;/li&gt;
&lt;li&gt;What is index intersection in MongoDB?&lt;/li&gt;
&lt;li&gt;What is the WiredTiger storage engine?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Schema Design &amp;amp; Modeling
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is embedding vs referencing in MongoDB schema design?&lt;/li&gt;
&lt;li&gt;When should you embed documents vs reference them?&lt;/li&gt;
&lt;li&gt;What is the one-to-many relationship pattern in MongoDB?&lt;/li&gt;
&lt;li&gt;What is the many-to-many relationship pattern in MongoDB?&lt;/li&gt;
&lt;li&gt;What is the Bucket Pattern in MongoDB?&lt;/li&gt;
&lt;li&gt;What is the Outlier Pattern?&lt;/li&gt;
&lt;li&gt;What is the Subset Pattern?&lt;/li&gt;
&lt;li&gt;What is the Extended Reference Pattern?&lt;/li&gt;
&lt;li&gt;What is schema validation in MongoDB?&lt;/li&gt;
&lt;li&gt;What is GridFS? When do you use it?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Transactions &amp;amp; Replication
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Does MongoDB support ACID transactions? Since which version?&lt;/li&gt;
&lt;li&gt;What is a replica set in MongoDB?&lt;/li&gt;
&lt;li&gt;What is a primary and secondary node? What happens if the primary goes down?&lt;/li&gt;
&lt;li&gt;What is read preference in MongoDB?&lt;/li&gt;
&lt;li&gt;What is write concern in MongoDB?&lt;/li&gt;
&lt;li&gt;What is a sharded cluster in MongoDB?&lt;/li&gt;
&lt;li&gt;What is a shard key? How do you choose a good one?&lt;/li&gt;
&lt;li&gt;What is the difference between a hashed shard key and a ranged shard key?&lt;/li&gt;
&lt;li&gt;What is an oplog in MongoDB?&lt;/li&gt;
&lt;li&gt;What is change streams in MongoDB?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  4. Python — Basics &amp;amp; Built-ins
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Language Fundamentals
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is Python? What makes it different from compiled languages like Java or C++?&lt;/li&gt;
&lt;li&gt;What is PEP 8? Why does it matter?&lt;/li&gt;
&lt;li&gt;What is the difference between Python 2 and Python 3?&lt;/li&gt;
&lt;li&gt;Is Python interpreted or compiled? Explain the execution model.&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;.pyc&lt;/code&gt; file? What is the &lt;code&gt;__pycache__&lt;/code&gt; directory?&lt;/li&gt;
&lt;li&gt;What are Python's key features? (dynamic typing, garbage collection, etc.)&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;==&lt;/code&gt; and &lt;code&gt;is&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between mutable and immutable objects? Give examples of each.&lt;/li&gt;
&lt;li&gt;What is dynamic typing in Python?&lt;/li&gt;
&lt;li&gt;What is duck typing?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Variables &amp;amp; Data Types
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What are Python's built-in data types?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;float&lt;/code&gt;, &lt;code&gt;complex&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;None&lt;/code&gt; in Python? What type is it?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;str&lt;/code&gt;, &lt;code&gt;bytes&lt;/code&gt;, and &lt;code&gt;bytearray&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How does Python handle integer overflow?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;True&lt;/code&gt;/&lt;code&gt;False&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt;/&lt;code&gt;0&lt;/code&gt; in Python?&lt;/li&gt;
&lt;li&gt;What is type casting? How do you convert between types?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;id()&lt;/code&gt; in Python? What does it return?&lt;/li&gt;
&lt;li&gt;What is integer caching (interning) in Python? (caches -5 to 256)&lt;/li&gt;
&lt;li&gt;What is string interning in Python?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Operators
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What are Python's arithmetic operators?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;/&lt;/code&gt; and &lt;code&gt;//&lt;/code&gt; in Python?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;%&lt;/code&gt; operator? What is it used for beyond modulo?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;**&lt;/code&gt; operator?&lt;/li&gt;
&lt;li&gt;What are comparison operators and what do they return?&lt;/li&gt;
&lt;li&gt;What are Python's logical operators (&lt;code&gt;and&lt;/code&gt;, &lt;code&gt;or&lt;/code&gt;, &lt;code&gt;not&lt;/code&gt;)? How do they short-circuit?&lt;/li&gt;
&lt;li&gt;What are bitwise operators in Python? (&lt;code&gt;&amp;amp;&lt;/code&gt;, &lt;code&gt;|&lt;/code&gt;, &lt;code&gt;^&lt;/code&gt;, &lt;code&gt;~&lt;/code&gt;, &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What is the walrus operator (&lt;code&gt;:=&lt;/code&gt;)? Give a use case.&lt;/li&gt;
&lt;li&gt;What are augmented assignment operators?&lt;/li&gt;
&lt;li&gt;What is operator precedence in Python?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Control Flow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is the difference between &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;elif&lt;/code&gt;, and &lt;code&gt;else&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a ternary expression in Python?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;for&lt;/code&gt; and &lt;code&gt;while&lt;/code&gt; loops?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;else&lt;/code&gt; clause on a &lt;code&gt;for&lt;/code&gt; or &lt;code&gt;while&lt;/code&gt; loop? When does it execute?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;break&lt;/code&gt;, &lt;code&gt;continue&lt;/code&gt;, and &lt;code&gt;pass&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;range()&lt;/code&gt;? How is it memory efficient?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;enumerate()&lt;/code&gt;? Why is it preferred over using an index?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;zip()&lt;/code&gt;? What happens if the iterables are of different lengths?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;reversed()&lt;/code&gt;? How is it different from &lt;code&gt;[::-1]&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;sorted()&lt;/code&gt; vs &lt;code&gt;.sort()&lt;/code&gt;? What is the &lt;code&gt;key&lt;/code&gt; argument?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Strings
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Is a Python string mutable or immutable?&lt;/li&gt;
&lt;li&gt;What is string slicing? Give examples including step slicing.&lt;/li&gt;
&lt;li&gt;What are f-strings? How do they compare to &lt;code&gt;.format()&lt;/code&gt; and &lt;code&gt;%&lt;/code&gt; formatting?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;split()&lt;/code&gt; and &lt;code&gt;rsplit()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;join()&lt;/code&gt;? Why is it preferred over string concatenation in a loop?&lt;/li&gt;
&lt;li&gt;What are common string methods: &lt;code&gt;strip()&lt;/code&gt;, &lt;code&gt;lstrip()&lt;/code&gt;, &lt;code&gt;rstrip()&lt;/code&gt;, &lt;code&gt;replace()&lt;/code&gt;, &lt;code&gt;find()&lt;/code&gt;, &lt;code&gt;count()&lt;/code&gt;, &lt;code&gt;startswith()&lt;/code&gt;, &lt;code&gt;endswith()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;encode()&lt;/code&gt; and &lt;code&gt;decode()&lt;/code&gt; in Python strings?&lt;/li&gt;
&lt;li&gt;What is a raw string (&lt;code&gt;r"..."&lt;/code&gt;)? When do you use it?&lt;/li&gt;
&lt;li&gt;What is string multiplication and string addition?&lt;/li&gt;
&lt;li&gt;How does Python handle Unicode strings?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  5. Python — Data Structures &amp;amp; Collections
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Lists
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;How is a Python list stored in memory?&lt;/li&gt;
&lt;li&gt;What is the time complexity of common list operations: append, insert, delete, search, access by index?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;append()&lt;/code&gt; and &lt;code&gt;extend()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;list.copy()&lt;/code&gt; vs &lt;code&gt;list[:]&lt;/code&gt; vs &lt;code&gt;copy.copy()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;list.pop()&lt;/code&gt; vs &lt;code&gt;del list[i]&lt;/code&gt; vs &lt;code&gt;list.remove()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How does &lt;code&gt;sort()&lt;/code&gt; work internally? What algorithm does Python use? (Timsort)&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;list.index()&lt;/code&gt; vs &lt;code&gt;list.count()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a 2D list? How do you create and access elements?&lt;/li&gt;
&lt;li&gt;How do you flatten a nested list in Python?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;list * n&lt;/code&gt; and &lt;code&gt;[list] * n&lt;/code&gt;? (shallow copy trap)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Tuples
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a tuple? How is it different from a list?&lt;/li&gt;
&lt;li&gt;Can you modify elements inside a tuple? What about mutable elements inside a tuple?&lt;/li&gt;
&lt;li&gt;What is tuple unpacking? Give examples.&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;*&lt;/code&gt; operator in tuple unpacking?&lt;/li&gt;
&lt;li&gt;What is a named tuple? How do you create one?&lt;/li&gt;
&lt;li&gt;Why are tuples faster than lists?&lt;/li&gt;
&lt;li&gt;When should you use a tuple over a list?&lt;/li&gt;
&lt;li&gt;What is a single-element tuple? What is the syntax pitfall?&lt;/li&gt;
&lt;li&gt;How do you convert a list to a tuple and vice versa?&lt;/li&gt;
&lt;li&gt;Can tuples be used as dictionary keys? Why?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Dictionaries
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;How is a Python dictionary implemented internally? (hash table)&lt;/li&gt;
&lt;li&gt;What is the time complexity of dictionary operations (get, set, delete)?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;dict.get()&lt;/code&gt; and &lt;code&gt;dict[key]&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;dict.setdefault()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;collections.defaultdict&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;collections.OrderedDict&lt;/code&gt;? Is it still necessary in Python 3.7+?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;collections.Counter&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What are dictionary views: &lt;code&gt;keys()&lt;/code&gt;, &lt;code&gt;values()&lt;/code&gt;, &lt;code&gt;items()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How do you merge two dictionaries? (multiple ways: &lt;code&gt;|&lt;/code&gt;, &lt;code&gt;update()&lt;/code&gt;, &lt;code&gt;**unpacking&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What is a dictionary comprehension?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;dict.update()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;dict.pop()&lt;/code&gt; vs &lt;code&gt;del dict[key]&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;dict.fromkeys()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How do you sort a dictionary by value?&lt;/li&gt;
&lt;li&gt;What is a nested dictionary? How do you safely access nested keys?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Sets
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a Python set? What are its properties?&lt;/li&gt;
&lt;li&gt;What is the time complexity of &lt;code&gt;in&lt;/code&gt; for a set vs a list?&lt;/li&gt;
&lt;li&gt;What are set operations: union (&lt;code&gt;|&lt;/code&gt;), intersection (&lt;code&gt;&amp;amp;&lt;/code&gt;), difference (&lt;code&gt;-&lt;/code&gt;), symmetric difference (&lt;code&gt;^&lt;/code&gt;)?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;set.discard()&lt;/code&gt; and &lt;code&gt;set.remove()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a frozenset? How is it different from a set?&lt;/li&gt;
&lt;li&gt;Can a set contain another set? What about a list? Why?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;set.update()&lt;/code&gt; vs &lt;code&gt;|=&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How do you find common elements between two lists efficiently?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;set.issubset()&lt;/code&gt; and &lt;code&gt;set.issuperset()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How do you remove duplicates from a list using a set?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Collections Module
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;collections.deque&lt;/code&gt;? Why is it better than a list for queues?&lt;/li&gt;
&lt;li&gt;What is the time complexity of &lt;code&gt;deque.appendleft()&lt;/code&gt; vs &lt;code&gt;list.insert(0, x)&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;collections.ChainMap&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;collections.namedtuple&lt;/code&gt; vs a regular tuple vs a dataclass?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;collections.UserDict&lt;/code&gt;, &lt;code&gt;UserList&lt;/code&gt;, &lt;code&gt;UserString&lt;/code&gt; and when do you use them?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Python — Functions &amp;amp; Functional Programming
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Function Basics
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;How do you define a function in Python?&lt;/li&gt;
&lt;li&gt;What is the difference between a parameter and an argument?&lt;/li&gt;
&lt;li&gt;What are default arguments? What is the mutable default argument trap?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;*args&lt;/code&gt;? How is it different from a list parameter?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;**kwargs&lt;/code&gt;? How is it different from a dict parameter?&lt;/li&gt;
&lt;li&gt;What is the order of parameters: positional, &lt;code&gt;*args&lt;/code&gt;, keyword-only, &lt;code&gt;**kwargs&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a keyword-only argument (parameters after &lt;code&gt;*&lt;/code&gt;)?&lt;/li&gt;
&lt;li&gt;What is a positional-only argument (parameters before &lt;code&gt;/&lt;/code&gt;)? (Python 3.8+)&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;return&lt;/code&gt; statement? Can a function return multiple values?&lt;/li&gt;
&lt;li&gt;What happens if a function has no &lt;code&gt;return&lt;/code&gt; statement?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Scope &amp;amp; Closures
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is the LEGB rule in Python (Local, Enclosing, Global, Built-in)?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;global&lt;/code&gt; keyword? When would you use it?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;nonlocal&lt;/code&gt; keyword? Give a use case.&lt;/li&gt;
&lt;li&gt;What is a closure in Python?&lt;/li&gt;
&lt;li&gt;What is a free variable?&lt;/li&gt;
&lt;li&gt;How do closures capture variables? What is the late binding problem?&lt;/li&gt;
&lt;li&gt;Write a counter function using closures.&lt;/li&gt;
&lt;li&gt;What is the difference between a closure and a class?&lt;/li&gt;
&lt;li&gt;What is a first-class function in Python?&lt;/li&gt;
&lt;li&gt;What is a higher-order function?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Lambda &amp;amp; Functional Tools
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a lambda function? What are its limitations?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;map()&lt;/code&gt;? Give an example.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;filter()&lt;/code&gt;? Give an example.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;reduce()&lt;/code&gt; from &lt;code&gt;functools&lt;/code&gt;? Give an example.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;functools.partial()&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;functools.lru_cache()&lt;/code&gt;? How does it work?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;functools.wraps()&lt;/code&gt;? Why is it needed in decorators?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;functools.total_ordering()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;functools.cache()&lt;/code&gt; vs &lt;code&gt;lru_cache()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;operator&lt;/code&gt; module? Give examples of &lt;code&gt;operator.itemgetter&lt;/code&gt; and &lt;code&gt;operator.attrgetter&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Recursion
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is recursion? What is a base case?&lt;/li&gt;
&lt;li&gt;What is the maximum recursion depth in Python? How do you change it?&lt;/li&gt;
&lt;li&gt;What is tail recursion? Does Python optimize tail calls?&lt;/li&gt;
&lt;li&gt;Write a recursive function for factorial.&lt;/li&gt;
&lt;li&gt;Write a recursive function for Fibonacci. What is its time complexity?&lt;/li&gt;
&lt;li&gt;What is memoization? How does it improve recursive functions?&lt;/li&gt;
&lt;li&gt;What is the difference between recursion and iteration?&lt;/li&gt;
&lt;li&gt;What is mutual recursion?&lt;/li&gt;
&lt;li&gt;What is a recursive data structure?&lt;/li&gt;
&lt;li&gt;When should you avoid recursion in Python?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  7. Python — OOP (Object-Oriented Programming)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Classes &amp;amp; Objects
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is the difference between a class and an object (instance)?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;self&lt;/code&gt;? Why is it the first parameter of instance methods?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__init__&lt;/code&gt;? How is it different from &lt;code&gt;__new__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What are class variables vs instance variables? What happens when they share a name?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__dict__&lt;/code&gt; on a class and on an instance?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;vars()&lt;/code&gt; in Python?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;dir()&lt;/code&gt; in Python?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;hasattr()&lt;/code&gt;, &lt;code&gt;getattr()&lt;/code&gt;, &lt;code&gt;setattr()&lt;/code&gt;, &lt;code&gt;delattr()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How do you check if an object is an instance of a class? (&lt;code&gt;isinstance()&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;How do you check if a class is a subclass of another? (&lt;code&gt;issubclass()&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 The Four Pillars
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;strong&gt;Encapsulation&lt;/strong&gt;? How do you implement it in Python?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;_name&lt;/code&gt; (convention), &lt;code&gt;__name&lt;/code&gt; (name mangling), and &lt;code&gt;__name__&lt;/code&gt; (dunder)?&lt;/li&gt;
&lt;li&gt;What is &lt;strong&gt;Abstraction&lt;/strong&gt;? How does it differ from encapsulation?&lt;/li&gt;
&lt;li&gt;What is &lt;strong&gt;Inheritance&lt;/strong&gt;? Give an example.&lt;/li&gt;
&lt;li&gt;What is single vs multiple inheritance in Python?&lt;/li&gt;
&lt;li&gt;What is the MRO (Method Resolution Order)? What is the C3 linearization algorithm?&lt;/li&gt;
&lt;li&gt;How do you find the MRO of a class? (&lt;code&gt;ClassName.__mro__&lt;/code&gt; or &lt;code&gt;mro()&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What is &lt;strong&gt;Polymorphism&lt;/strong&gt;? Give a Python example.&lt;/li&gt;
&lt;li&gt;What is method overriding? How does it work in Python?&lt;/li&gt;
&lt;li&gt;Does Python support method overloading? How do you simulate it?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Special / Dunder Methods
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;__str__&lt;/code&gt; vs &lt;code&gt;__repr__&lt;/code&gt;? Which is called in which situation?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__len__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__getitem__&lt;/code&gt;, &lt;code&gt;__setitem__&lt;/code&gt;, &lt;code&gt;__delitem__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__iter__&lt;/code&gt; and &lt;code&gt;__next__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__contains__&lt;/code&gt; (enables &lt;code&gt;in&lt;/code&gt; operator)?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__call__&lt;/code&gt;? How do you make an object callable?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__eq__&lt;/code&gt;, &lt;code&gt;__lt__&lt;/code&gt;, &lt;code&gt;__gt__&lt;/code&gt;, &lt;code&gt;__le__&lt;/code&gt;, &lt;code&gt;__ge__&lt;/code&gt;, &lt;code&gt;__ne__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__add__&lt;/code&gt;, &lt;code&gt;__sub__&lt;/code&gt;, &lt;code&gt;__mul__&lt;/code&gt;, &lt;code&gt;__truediv__&lt;/code&gt;? (operator overloading)&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__enter__&lt;/code&gt; and &lt;code&gt;__exit__&lt;/code&gt;? (context manager protocol)&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__slots__&lt;/code&gt;? What are its advantages and limitations?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__init_subclass__&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__del__&lt;/code&gt;? When is it called? Is it reliable?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__hash__&lt;/code&gt;? What is the relationship between &lt;code&gt;__eq__&lt;/code&gt; and &lt;code&gt;__hash__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__bool__&lt;/code&gt;? When is it called vs &lt;code&gt;__len__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__missing__&lt;/code&gt; in a dict subclass?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Class Methods &amp;amp; Properties
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;@staticmethod&lt;/code&gt;? When would you use it?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;@classmethod&lt;/code&gt;? When would you use it?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;@staticmethod&lt;/code&gt; and &lt;code&gt;@classmethod&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;@property&lt;/code&gt;? What is a getter and setter in Python?&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;@property.setter&lt;/code&gt; and &lt;code&gt;@property.deleter&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;When would you use a property vs a regular method?&lt;/li&gt;
&lt;li&gt;What is a class factory method? Give an example.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__new__&lt;/code&gt; used for? Give a practical example (e.g., Singleton).&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;type()&lt;/code&gt; used as a metaclass? How do you create a class dynamically?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;object.__class__&lt;/code&gt;?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Inheritance &amp;amp; Advanced OOP
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;super()&lt;/code&gt;? How does it work with multiple inheritance?&lt;/li&gt;
&lt;li&gt;What is a mixin? Give a real-world use case.&lt;/li&gt;
&lt;li&gt;What is composition vs inheritance? When do you prefer composition?&lt;/li&gt;
&lt;li&gt;What is an abstract class? How do you create one using the &lt;code&gt;abc&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;@abstractmethod&lt;/code&gt;? What happens if you don't implement it?&lt;/li&gt;
&lt;li&gt;What is the difference between an abstract class and an interface (Protocol)?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;typing.Protocol&lt;/code&gt;? How is it used for structural subtyping?&lt;/li&gt;
&lt;li&gt;What is a dataclass (&lt;code&gt;@dataclass&lt;/code&gt;)? What does it auto-generate?&lt;/li&gt;
&lt;li&gt;What are the parameters of &lt;code&gt;@dataclass&lt;/code&gt;: &lt;code&gt;frozen&lt;/code&gt;, &lt;code&gt;order&lt;/code&gt;, &lt;code&gt;eq&lt;/code&gt;, &lt;code&gt;repr&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;field()&lt;/code&gt; in dataclasses? What is &lt;code&gt;default_factory&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__post_init__&lt;/code&gt; in dataclasses?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;NamedTuple&lt;/code&gt; vs &lt;code&gt;dataclass&lt;/code&gt; vs regular class?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;Enum&lt;/code&gt; class? How do you define an enumeration?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;IntEnum&lt;/code&gt;, &lt;code&gt;StrEnum&lt;/code&gt;, &lt;code&gt;Flag&lt;/code&gt;, &lt;code&gt;IntFlag&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a descriptor in Python? What are &lt;code&gt;__get__&lt;/code&gt;, &lt;code&gt;__set__&lt;/code&gt;, &lt;code&gt;__delete__&lt;/code&gt;?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Design Patterns
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Implement the &lt;strong&gt;Singleton&lt;/strong&gt; pattern in Python (at least 2 ways).&lt;/li&gt;
&lt;li&gt;Implement the &lt;strong&gt;Factory&lt;/strong&gt; pattern in Python.&lt;/li&gt;
&lt;li&gt;Implement the &lt;strong&gt;Abstract Factory&lt;/strong&gt; pattern.&lt;/li&gt;
&lt;li&gt;Implement the &lt;strong&gt;Observer&lt;/strong&gt; pattern in Python.&lt;/li&gt;
&lt;li&gt;Implement the &lt;strong&gt;Strategy&lt;/strong&gt; pattern in Python.&lt;/li&gt;
&lt;li&gt;Implement the &lt;strong&gt;Decorator&lt;/strong&gt; design pattern (not Python &lt;code&gt;@decorator&lt;/code&gt;) in Python.&lt;/li&gt;
&lt;li&gt;Implement the &lt;strong&gt;Command&lt;/strong&gt; pattern in Python.&lt;/li&gt;
&lt;li&gt;Implement the &lt;strong&gt;Iterator&lt;/strong&gt; pattern using &lt;code&gt;__iter__&lt;/code&gt; and &lt;code&gt;__next__&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;What is dependency injection? Give a Python example.&lt;/li&gt;
&lt;li&gt;What is the &lt;strong&gt;Repository&lt;/strong&gt; pattern and why is it used with databases?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  8. Python — Modules, Packages &amp;amp; Imports
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Modules &amp;amp; Packages
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a module in Python?&lt;/li&gt;
&lt;li&gt;What is a package? What is &lt;code&gt;__init__.py&lt;/code&gt;? What is a namespace package?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;import module&lt;/code&gt; and &lt;code&gt;from module import name&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;import *&lt;/code&gt;? Why is it discouraged?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__all__&lt;/code&gt; in a module?&lt;/li&gt;
&lt;li&gt;What is a relative import vs absolute import?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;importlib&lt;/code&gt;? How do you import a module dynamically?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;sys.path&lt;/code&gt;? How does Python find modules?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__name__ == "__main__"&lt;/code&gt;? Why is it used?&lt;/li&gt;
&lt;li&gt;What is the difference between a script and a module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__file__&lt;/code&gt; in a module?&lt;/li&gt;
&lt;li&gt;How do you reload a module at runtime?&lt;/li&gt;
&lt;li&gt;What is a circular import? How do you resolve it?&lt;/li&gt;
&lt;li&gt;What is a virtual environment? Why is it important?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__package__&lt;/code&gt; attribute?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Package Management
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;pip&lt;/code&gt;? How do you install, uninstall, upgrade, and list packages?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;requirements.txt&lt;/code&gt;? How do you generate it?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;pip install&lt;/code&gt; and &lt;code&gt;pip install -e&lt;/code&gt; (editable mode)?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pyproject.toml&lt;/code&gt;? How is it different from &lt;code&gt;setup.py&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;venv&lt;/code&gt; vs &lt;code&gt;virtualenv&lt;/code&gt; vs &lt;code&gt;conda&lt;/code&gt;?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  9. Python — File Handling &amp;amp; I/O
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 File Operations
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;How do you open a file in Python? What are the different modes (&lt;code&gt;r&lt;/code&gt;, &lt;code&gt;w&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;rb&lt;/code&gt;, &lt;code&gt;wb&lt;/code&gt;, &lt;code&gt;r+&lt;/code&gt;)?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;with&lt;/code&gt; statement for file handling? Why is it preferred?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;read()&lt;/code&gt;, &lt;code&gt;readline()&lt;/code&gt;, and &lt;code&gt;readlines()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;write()&lt;/code&gt; and &lt;code&gt;writelines()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;seek()&lt;/code&gt; and &lt;code&gt;tell()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How do you check if a file exists?&lt;/li&gt;
&lt;li&gt;How do you copy, move, rename, and delete files in Python?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;os.path&lt;/code&gt; vs &lt;code&gt;pathlib.Path&lt;/code&gt;? Which is preferred and why?&lt;/li&gt;
&lt;li&gt;How do you list files in a directory? How do you walk a directory tree?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;glob&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;How do you read a large file line by line without loading it into memory?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;tempfile&lt;/code&gt; module? When do you use it?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;shutil&lt;/code&gt;? What can it do?&lt;/li&gt;
&lt;li&gt;How do you work with CSV files in Python? (&lt;code&gt;csv&lt;/code&gt; module)&lt;/li&gt;
&lt;li&gt;How do you work with JSON files in Python?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Serialization
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;pickle&lt;/code&gt;? What are the security risks of using it?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;json.dumps()&lt;/code&gt; vs &lt;code&gt;json.dump()&lt;/code&gt;? What is the difference?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;json.loads()&lt;/code&gt; vs &lt;code&gt;json.load()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;indent&lt;/code&gt; and &lt;code&gt;separators&lt;/code&gt; argument in &lt;code&gt;json.dumps()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;shelve&lt;/code&gt;? When would you use it?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  10. Python — Error &amp;amp; Exception Handling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Exception Basics
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is an exception in Python? How is it different from a syntax error?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;Exception&lt;/code&gt; and &lt;code&gt;BaseException&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What are built-in exceptions? Name at least 15. (&lt;code&gt;ValueError&lt;/code&gt;, &lt;code&gt;TypeError&lt;/code&gt;, &lt;code&gt;KeyError&lt;/code&gt;, &lt;code&gt;IndexError&lt;/code&gt;, &lt;code&gt;AttributeError&lt;/code&gt;, &lt;code&gt;NameError&lt;/code&gt;, &lt;code&gt;ImportError&lt;/code&gt;, &lt;code&gt;OSError&lt;/code&gt;, &lt;code&gt;RuntimeError&lt;/code&gt;, &lt;code&gt;StopIteration&lt;/code&gt;, &lt;code&gt;NotImplementedError&lt;/code&gt;, &lt;code&gt;ZeroDivisionError&lt;/code&gt;, &lt;code&gt;OverflowError&lt;/code&gt;, &lt;code&gt;MemoryError&lt;/code&gt;, &lt;code&gt;RecursionError&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What is the exception hierarchy in Python?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;try&lt;/code&gt;, &lt;code&gt;except&lt;/code&gt;, &lt;code&gt;else&lt;/code&gt;, &lt;code&gt;finally&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;else&lt;/code&gt; clause in a try block? When does it run?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;finally&lt;/code&gt; clause? Does it always execute?&lt;/li&gt;
&lt;li&gt;Can you have multiple &lt;code&gt;except&lt;/code&gt; blocks? Can you catch multiple exceptions in one block?&lt;/li&gt;
&lt;li&gt;What is the order of &lt;code&gt;except&lt;/code&gt; blocks? Does it matter? (more specific first)&lt;/li&gt;
&lt;li&gt;What is a bare &lt;code&gt;except:&lt;/code&gt;? Why is it dangerous?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Raising &amp;amp; Custom Exceptions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;raise&lt;/code&gt;? How do you re-raise the current exception?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;raise ... from ...&lt;/code&gt;? What does it do to the traceback?&lt;/li&gt;
&lt;li&gt;How do you create a custom exception class?&lt;/li&gt;
&lt;li&gt;What is exception chaining? What is &lt;code&gt;__cause__&lt;/code&gt; and &lt;code&gt;__context__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;warnings&lt;/code&gt; module? How is it different from exceptions?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;contextlib.suppress()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;ExceptionGroup&lt;/code&gt; in Python 3.11+?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;except*&lt;/code&gt; syntax in Python 3.11+?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;sys.exc_info()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Best practices: When should you catch exceptions broadly vs specifically?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  11. Python — Iterators, Generators &amp;amp; Comprehensions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Iterators &amp;amp; Iterables
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is an iterable? What is an iterator?&lt;/li&gt;
&lt;li&gt;What is the iterator protocol? (&lt;code&gt;__iter__&lt;/code&gt; and &lt;code&gt;__next__&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;StopIteration&lt;/code&gt;? How is it raised?&lt;/li&gt;
&lt;li&gt;What is the difference between calling &lt;code&gt;iter()&lt;/code&gt; and &lt;code&gt;next()&lt;/code&gt; built-ins?&lt;/li&gt;
&lt;li&gt;What is lazy evaluation? How do iterators implement it?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools&lt;/code&gt; module? Name at least 10 functions from it.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools.chain()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools.islice()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools.product()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools.groupby()&lt;/code&gt;? What is its sorting requirement gotcha?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools.cycle()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools.accumulate()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools.combinations()&lt;/code&gt; vs &lt;code&gt;itertools.permutations()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools.zip_longest()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;itertools.starmap()&lt;/code&gt;?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Generators
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a generator function? What makes it a generator?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;yield&lt;/code&gt;? How is it different from &lt;code&gt;return&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;yield from&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is a generator expression? How does it differ from a list comprehension?&lt;/li&gt;
&lt;li&gt;How does &lt;code&gt;send()&lt;/code&gt; work on a generator?&lt;/li&gt;
&lt;li&gt;How does &lt;code&gt;throw()&lt;/code&gt; work on a generator?&lt;/li&gt;
&lt;li&gt;How does &lt;code&gt;close()&lt;/code&gt; work on a generator? What exception is raised internally? (&lt;code&gt;GeneratorExit&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What are the states of a generator? (created, running, suspended, closed)&lt;/li&gt;
&lt;li&gt;What are the memory advantages of generators over lists?&lt;/li&gt;
&lt;li&gt;Write an infinite generator for Fibonacci numbers.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;next()&lt;/code&gt; with a default value?&lt;/li&gt;
&lt;li&gt;Write a generator pipeline for processing large files.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;inspect.isgenerator()&lt;/code&gt; vs &lt;code&gt;inspect.isgeneratorfunction()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;types.GeneratorType&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How do you convert a generator to a list? What are the implications?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Comprehensions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a list comprehension? What is its syntax?&lt;/li&gt;
&lt;li&gt;What is a dictionary comprehension?&lt;/li&gt;
&lt;li&gt;What is a set comprehension?&lt;/li&gt;
&lt;li&gt;What is a generator expression vs a list comprehension?&lt;/li&gt;
&lt;li&gt;Can you have nested comprehensions? Give an example.&lt;/li&gt;
&lt;li&gt;What are the performance implications of list comprehensions vs for loops?&lt;/li&gt;
&lt;li&gt;What is a conditional comprehension (with &lt;code&gt;if&lt;/code&gt; clause as filter)?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;[x for x in range(10) if x &amp;gt; 5]&lt;/code&gt; and &lt;code&gt;[x if x &amp;gt; 5 else 0 for x in range(10)]&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;When should you NOT use a comprehension?&lt;/li&gt;
&lt;li&gt;What is variable leaking in Python 2 list comprehensions vs Python 3?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  12. Python — Decorators &amp;amp; Context Managers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Decorators
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a decorator in Python?&lt;/li&gt;
&lt;li&gt;How do you write a simple function decorator?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;functools.wraps()&lt;/code&gt;? Why must you use it in decorators?&lt;/li&gt;
&lt;li&gt;What is a decorator with arguments? How do you write one (decorator factory)?&lt;/li&gt;
&lt;li&gt;What is a class-based decorator? How does &lt;code&gt;__call__&lt;/code&gt; enable it?&lt;/li&gt;
&lt;li&gt;What is the order of stacked decorators? Which applies first?&lt;/li&gt;
&lt;li&gt;Write a decorator that measures function execution time.&lt;/li&gt;
&lt;li&gt;Write a decorator that retries a function on exception (with max retries).&lt;/li&gt;
&lt;li&gt;Write a decorator that caches function results (manual &lt;code&gt;lru_cache&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Write a decorator that validates function argument types.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;@staticmethod&lt;/code&gt;, &lt;code&gt;@classmethod&lt;/code&gt;, &lt;code&gt;@property&lt;/code&gt; — are these decorators?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;@functools.lru_cache&lt;/code&gt;? What are &lt;code&gt;maxsize&lt;/code&gt; and &lt;code&gt;typed&lt;/code&gt; parameters?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;@functools.cached_property&lt;/code&gt;? How is it different from &lt;code&gt;@property&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a parametrized decorator factory?&lt;/li&gt;
&lt;li&gt;What are real-world use cases for decorators? (logging, auth, rate limiting, caching, timing)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Context Managers
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a context manager? What protocol does it use?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__enter__&lt;/code&gt; and &lt;code&gt;__exit__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What do the arguments of &lt;code&gt;__exit__(exc_type, exc_val, exc_tb)&lt;/code&gt; mean?&lt;/li&gt;
&lt;li&gt;How do you suppress an exception inside &lt;code&gt;__exit__&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;contextlib.contextmanager&lt;/code&gt;? How do you write a generator-based context manager?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;contextlib.suppress()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;contextlib.ExitStack()&lt;/code&gt;? When is it useful?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;contextlib.asynccontextmanager&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Write a context manager for timing code execution.&lt;/li&gt;
&lt;li&gt;Write a context manager that manages a database connection.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  13. Python — Concurrency &amp;amp; Parallelism
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Core Concepts
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is the difference between concurrency and parallelism?&lt;/li&gt;
&lt;li&gt;What is a process vs a thread?&lt;/li&gt;
&lt;li&gt;What is the GIL (Global Interpreter Lock) in Python? Why does it exist?&lt;/li&gt;
&lt;li&gt;How does the GIL affect CPU-bound vs I/O-bound programs?&lt;/li&gt;
&lt;li&gt;When does the GIL not matter?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;threading&lt;/code&gt; module vs &lt;code&gt;multiprocessing&lt;/code&gt; module? When do you use each?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio&lt;/code&gt;? How is it different from threading?&lt;/li&gt;
&lt;li&gt;What is an event loop in asyncio?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;async&lt;/code&gt; and &lt;code&gt;await&lt;/code&gt;? How do they work?&lt;/li&gt;
&lt;li&gt;What is a coroutine in Python?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Threading
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;How do you create and start a thread in Python?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;threading.Thread&lt;/code&gt;? What are the &lt;code&gt;target&lt;/code&gt;, &lt;code&gt;args&lt;/code&gt;, &lt;code&gt;kwargs&lt;/code&gt;, &lt;code&gt;daemon&lt;/code&gt; parameters?&lt;/li&gt;
&lt;li&gt;What is a daemon thread? What happens when the main thread exits?&lt;/li&gt;
&lt;li&gt;What is thread safety? How do you make code thread-safe?&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;Lock&lt;/code&gt; in threading?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;RLock&lt;/code&gt; (Reentrant Lock)? When do you need it over a regular Lock?&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;Semaphore&lt;/code&gt;? What is &lt;code&gt;BoundedSemaphore&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;threading.Event&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;threading.Condition&lt;/code&gt;? Give a producer-consumer example.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;threading.Barrier&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;threading.Timer&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;threading.local()&lt;/code&gt;? When would you use thread-local storage?&lt;/li&gt;
&lt;li&gt;What is a race condition? Give a Python threading example.&lt;/li&gt;
&lt;li&gt;What is a deadlock? Give a Python threading deadlock example.&lt;/li&gt;
&lt;li&gt;What is thread starvation?&lt;/li&gt;
&lt;li&gt;What is the producer-consumer problem? How do you solve it in Python?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;queue.Queue&lt;/code&gt;? How is it thread-safe?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;queue.LifoQueue&lt;/code&gt; vs &lt;code&gt;queue.PriorityQueue&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How do you join threads? What does &lt;code&gt;thread.join()&lt;/code&gt; do?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;threading.active_count()&lt;/code&gt; and &lt;code&gt;threading.enumerate()&lt;/code&gt;?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Multiprocessing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;multiprocessing.Process&lt;/code&gt;? How is it different from &lt;code&gt;threading.Thread&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;How do processes share memory? What about threads?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;multiprocessing.Pool&lt;/code&gt;? What methods does it offer?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;Pool.map()&lt;/code&gt;, &lt;code&gt;Pool.starmap()&lt;/code&gt;, &lt;code&gt;Pool.apply()&lt;/code&gt;, &lt;code&gt;Pool.apply_async()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;multiprocessing.Queue&lt;/code&gt;? How is it different from &lt;code&gt;queue.Queue&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;multiprocessing.Pipe&lt;/code&gt;? What is the difference between &lt;code&gt;send()&lt;/code&gt; and &lt;code&gt;recv()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;multiprocessing.Value&lt;/code&gt; and &lt;code&gt;multiprocessing.Array&lt;/code&gt;? (shared memory)&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;multiprocessing.Manager&lt;/code&gt;? What objects does it support?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;multiprocessing.Lock()&lt;/code&gt; vs &lt;code&gt;threading.Lock()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;fork&lt;/code&gt;, &lt;code&gt;spawn&lt;/code&gt;, and &lt;code&gt;forkserver&lt;/code&gt; start methods?&lt;/li&gt;
&lt;li&gt;Why is &lt;code&gt;if __name__ == '__main__'&lt;/code&gt; required in multiprocessing?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;concurrent.futures.ProcessPoolExecutor&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;concurrent.futures.ThreadPoolExecutor&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;executor.submit()&lt;/code&gt; vs &lt;code&gt;executor.map()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a &lt;code&gt;Future&lt;/code&gt; object in &lt;code&gt;concurrent.futures&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;as_completed()&lt;/code&gt; in &lt;code&gt;concurrent.futures&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;wait()&lt;/code&gt; in &lt;code&gt;concurrent.futures&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;chunksize&lt;/code&gt; in &lt;code&gt;Pool.map()&lt;/code&gt;? Why does it matter for performance?&lt;/li&gt;
&lt;li&gt;How do you handle exceptions in child processes?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;multiprocessing.cpu_count()&lt;/code&gt;?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Asyncio &amp;amp; Async Programming
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.run()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.create_task()&lt;/code&gt;? How is it different from &lt;code&gt;await coroutine&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.gather()&lt;/code&gt;? How does it handle exceptions?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.wait()&lt;/code&gt; vs &lt;code&gt;asyncio.gather()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.sleep()&lt;/code&gt;? Why not &lt;code&gt;time.sleep()&lt;/code&gt; in async code?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.Queue&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.Lock()&lt;/code&gt;, &lt;code&gt;asyncio.Semaphore()&lt;/code&gt;, &lt;code&gt;asyncio.Event()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.shield()&lt;/code&gt;? When is it useful?&lt;/li&gt;
&lt;li&gt;How do you run a blocking (synchronous) function inside an async program?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;loop.run_in_executor()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.timeout()&lt;/code&gt; / &lt;code&gt;asyncio.wait_for()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;aiohttp&lt;/code&gt;? How does it differ from &lt;code&gt;requests&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between a coroutine object and a task?&lt;/li&gt;
&lt;li&gt;How do you cancel an asyncio task?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;asyncio.current_task()&lt;/code&gt; and &lt;code&gt;asyncio.all_tasks()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What are task groups (&lt;code&gt;asyncio.TaskGroup&lt;/code&gt;) in Python 3.11+?&lt;/li&gt;
&lt;li&gt;What is structured concurrency?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Scenario / Real-World Questions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; You are building a web scraper that needs to scrape 10,000 URLs. Would you use threading, multiprocessing, or asyncio? Why?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; You have a CPU-intensive image processing task across 1 million images. Which approach do you choose?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; You need to make 1000 HTTP API requests as fast as possible. Which approach gives the best performance?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; Describe a real-world deadlock scenario in a web application and how you would prevent it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; Two threads are incrementing a shared counter. The result is always less than expected. Why? How do you fix it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; You have a mixed workload — some tasks are CPU-bound and some are I/O-bound. How do you architect this?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  14. Python — Memory Management &amp;amp; Internals
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Memory Management
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;How does Python manage memory?&lt;/li&gt;
&lt;li&gt;What is reference counting in Python?&lt;/li&gt;
&lt;li&gt;What is the garbage collector in Python? When does it run?&lt;/li&gt;
&lt;li&gt;What is a reference cycle? Give an example.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;gc&lt;/code&gt; module? What does &lt;code&gt;gc.collect()&lt;/code&gt; do?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;sys.getrefcount()&lt;/code&gt;? Why does it always return at least 1?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__del__&lt;/code&gt;? Is it reliable? Why or why not?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;weakref&lt;/code&gt;? When would you use a weak reference?&lt;/li&gt;
&lt;li&gt;What is a memory leak in Python? How can it happen?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;tracemalloc&lt;/code&gt;? How do you use it to track memory usage?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;sys.getsizeof()&lt;/code&gt;? What are its limitations?&lt;/li&gt;
&lt;li&gt;What is the small object allocator (pymalloc) in CPython?&lt;/li&gt;
&lt;li&gt;How do &lt;code&gt;__slots__&lt;/code&gt; reduce memory usage?&lt;/li&gt;
&lt;li&gt;What is the difference between stack memory and heap memory in Python?&lt;/li&gt;
&lt;li&gt;What is memory fragmentation in Python?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Python Internals
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is Python bytecode? How do you view it?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;dis&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is the CPython interpreter?&lt;/li&gt;
&lt;li&gt;What are the alternatives to CPython? (PyPy, Jython, IronPython, MicroPython)&lt;/li&gt;
&lt;li&gt;What is PyPy? How is it faster than CPython? (JIT compilation)&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;ctypes&lt;/code&gt;? How can you call C functions from Python?&lt;/li&gt;
&lt;li&gt;How does Python's &lt;code&gt;int&lt;/code&gt; object handle arbitrarily large integers?&lt;/li&gt;
&lt;li&gt;What is integer caching in CPython? Which integers are cached?&lt;/li&gt;
&lt;li&gt;What is string interning? Which strings are automatically interned?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__pycache__&lt;/code&gt;? What is the &lt;code&gt;.pyc&lt;/code&gt; file format?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  15. Python — Standard Library &amp;amp; Useful Modules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Must-Know Modules
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;os&lt;/code&gt; module? Name 10 commonly used functions/attributes.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;sys&lt;/code&gt; module? Name 5 commonly used attributes.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pathlib&lt;/code&gt;? How is it different from &lt;code&gt;os.path&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;datetime&lt;/code&gt; module? How do you get the current date and time?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;datetime.date&lt;/code&gt;, &lt;code&gt;datetime.time&lt;/code&gt;, and &lt;code&gt;datetime.datetime&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;timedelta&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;time.time()&lt;/code&gt; vs &lt;code&gt;time.perf_counter()&lt;/code&gt; vs &lt;code&gt;time.process_time()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;random&lt;/code&gt; module? Name 5 commonly used functions.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;math&lt;/code&gt; module? Name 5 commonly used functions.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;statistics&lt;/code&gt; module? What functions does it provide?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;re&lt;/code&gt; module? What are &lt;code&gt;re.match()&lt;/code&gt;, &lt;code&gt;re.search()&lt;/code&gt;, &lt;code&gt;re.findall()&lt;/code&gt;, &lt;code&gt;re.sub()&lt;/code&gt;, &lt;code&gt;re.split()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between &lt;code&gt;re.match()&lt;/code&gt; and &lt;code&gt;re.search()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What are groups in regex? What is &lt;code&gt;re.group()&lt;/code&gt; and named groups?&lt;/li&gt;
&lt;li&gt;What is a compiled regex pattern? Why use &lt;code&gt;re.compile()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;hashlib&lt;/code&gt;? Name common hash algorithms and give a use case.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;uuid&lt;/code&gt; module? What is the difference between UUID1, UUID4, UUID5?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;base64&lt;/code&gt; encoding? How do you encode/decode?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;io&lt;/code&gt; module? What is &lt;code&gt;StringIO&lt;/code&gt; and &lt;code&gt;BytesIO&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;logging&lt;/code&gt; module? How do you set up basic and advanced logging?&lt;/li&gt;
&lt;li&gt;What are logging levels? (&lt;code&gt;DEBUG&lt;/code&gt;, &lt;code&gt;INFO&lt;/code&gt;, &lt;code&gt;WARNING&lt;/code&gt;, &lt;code&gt;ERROR&lt;/code&gt;, &lt;code&gt;CRITICAL&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What is a logging handler? What is a logging formatter? What is a logging filter?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;argparse&lt;/code&gt;? How do you parse command-line arguments?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;configparser&lt;/code&gt;? How do you read &lt;code&gt;.ini&lt;/code&gt; files?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;subprocess&lt;/code&gt;? How do you run a shell command from Python?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;subprocess.run()&lt;/code&gt; vs &lt;code&gt;subprocess.Popen()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;socket&lt;/code&gt; module? What is TCP vs UDP?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;copy&lt;/code&gt; module? What is &lt;code&gt;copy.copy()&lt;/code&gt; vs &lt;code&gt;copy.deepcopy()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pprint&lt;/code&gt;? When do you use it?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;decimal&lt;/code&gt; module? Why use it over &lt;code&gt;float&lt;/code&gt;? (floating point precision)&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;fractions&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;heapq&lt;/code&gt; module? Name its key functions.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;bisect&lt;/code&gt; module? What are &lt;code&gt;bisect_left()&lt;/code&gt; and &lt;code&gt;bisect_right()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;array&lt;/code&gt; module? How is it different from a list?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;struct&lt;/code&gt; module? When is it used?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;textwrap&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;difflib&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;calendar&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;zlib&lt;/code&gt; and &lt;code&gt;gzip&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;tarfile&lt;/code&gt; and &lt;code&gt;zipfile&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;sqlite3&lt;/code&gt; module?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  16. Python — Type Hints &amp;amp; Annotations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Type Hints Basics
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What are type hints in Python? Are they enforced at runtime?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;typing&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Optional[T]&lt;/code&gt;? How is it different from &lt;code&gt;Union[T, None]&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Union[T1, T2]&lt;/code&gt;? What is &lt;code&gt;T1 | T2&lt;/code&gt; syntax (Python 3.10+)?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;List[T]&lt;/code&gt;, &lt;code&gt;Dict[K, V]&lt;/code&gt;, &lt;code&gt;Tuple[T, ...]&lt;/code&gt;, &lt;code&gt;Set[T]&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Any&lt;/code&gt; type? When would you use it?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Callable[[args], return_type]&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;TypeVar&lt;/code&gt;? How is it used for generic functions?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Generic[T]&lt;/code&gt;? How do you write a generic class?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Protocol&lt;/code&gt;? How is it used for structural typing (duck typing with types)?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;TypedDict&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Final&lt;/code&gt;? How does it signal a constant?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Literal&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;ClassVar&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;overload&lt;/code&gt; decorator in &lt;code&gt;typing&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;mypy&lt;/code&gt;? How do you use it?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pyright&lt;/code&gt;? How is it different from &lt;code&gt;mypy&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;TYPE_CHECKING&lt;/code&gt;? Why is it used?&lt;/li&gt;
&lt;li&gt;What are forward references (string annotations) in type hints?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;get_type_hints()&lt;/code&gt;?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  17. Python — Testing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Testing Fundamentals
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is unit testing vs integration testing vs end-to-end testing?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;unittest&lt;/code&gt; module? How do you write a test case?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;setUp()&lt;/code&gt; and &lt;code&gt;tearDown()&lt;/code&gt; in unittest?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;setUpClass()&lt;/code&gt; and &lt;code&gt;tearDownClass()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pytest&lt;/code&gt;? How is it different from &lt;code&gt;unittest&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What are pytest fixtures? How are they different from setUp/tearDown?&lt;/li&gt;
&lt;li&gt;What is fixture scope in pytest? (&lt;code&gt;function&lt;/code&gt;, &lt;code&gt;class&lt;/code&gt;, &lt;code&gt;module&lt;/code&gt;, &lt;code&gt;session&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pytest.mark.parametrize&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pytest.raises&lt;/code&gt;? How do you test for exceptions?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pytest.warns&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is mocking in Python testing?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;unittest.mock.Mock&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;unittest.mock.MagicMock&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;@patch&lt;/code&gt; decorator? What does it replace?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;patch.object()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;side_effect&lt;/code&gt; in Mock? How is it different from &lt;code&gt;return_value&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;assert_called_once_with()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is code coverage? How do you measure it with &lt;code&gt;pytest-cov&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is TDD (Test-Driven Development)?&lt;/li&gt;
&lt;li&gt;What is property-based testing? What is &lt;code&gt;hypothesis&lt;/code&gt; library?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  18. Python — Database Integration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Working with Databases
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;psycopg2&lt;/code&gt;? How do you connect to PostgreSQL from Python?&lt;/li&gt;
&lt;li&gt;What is a connection vs a cursor in database programming?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;cursor.execute()&lt;/code&gt; vs &lt;code&gt;cursor.executemany()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is a parameterized query? Why is it important for SQL injection prevention?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;connection.commit()&lt;/code&gt; vs &lt;code&gt;connection.rollback()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;pymongo&lt;/code&gt;? How do you connect to MongoDB from Python?&lt;/li&gt;
&lt;li&gt;What is SQLAlchemy? What are its two main components?&lt;/li&gt;
&lt;li&gt;What is SQLAlchemy Core vs SQLAlchemy ORM?&lt;/li&gt;
&lt;li&gt;What is a SQLAlchemy &lt;code&gt;Session&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;declarative_base()&lt;/code&gt; in SQLAlchemy?&lt;/li&gt;
&lt;li&gt;What are SQLAlchemy relationships? (&lt;code&gt;relationship()&lt;/code&gt;, &lt;code&gt;ForeignKey&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;What is lazy loading vs eager loading in SQLAlchemy?&lt;/li&gt;
&lt;li&gt;What is Alembic? How do you create and apply migrations?&lt;/li&gt;
&lt;li&gt;What is an ORM? What are its advantages and disadvantages?&lt;/li&gt;
&lt;li&gt;What is connection pooling in SQLAlchemy?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  19. Python — Web &amp;amp; APIs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Web Frameworks &amp;amp; HTTP
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;requests&lt;/code&gt; library? How do you make a GET and POST request?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;requests.Session()&lt;/code&gt;? What are its advantages?&lt;/li&gt;
&lt;li&gt;What are request headers, query params, and request body?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;requests.Response&lt;/code&gt;? What are &lt;code&gt;status_code&lt;/code&gt;, &lt;code&gt;text&lt;/code&gt;, &lt;code&gt;json()&lt;/code&gt;, &lt;code&gt;content&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;httpx&lt;/code&gt;? How is it different from &lt;code&gt;requests&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;aiohttp&lt;/code&gt;? Why is it used with asyncio?&lt;/li&gt;
&lt;li&gt;What is REST? What are the HTTP methods and their semantic meanings?&lt;/li&gt;
&lt;li&gt;What is Flask? Write a simple Hello World API in Flask.&lt;/li&gt;
&lt;li&gt;What is FastAPI? What makes it fast? (Starlette + Pydantic + async)&lt;/li&gt;
&lt;li&gt;What is Django? How is it different from Flask and FastAPI?&lt;/li&gt;
&lt;li&gt;What is middleware in web frameworks?&lt;/li&gt;
&lt;li&gt;What is WSGI vs ASGI?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Pydantic&lt;/code&gt;? How is it used for data validation in FastAPI?&lt;/li&gt;
&lt;li&gt;What is dependency injection in FastAPI?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;uvicorn&lt;/code&gt;? What role does it play?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  20. Python — Advanced Topics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Metaclasses
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a metaclass in Python?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;type&lt;/code&gt;? How is it the metaclass of all classes?&lt;/li&gt;
&lt;li&gt;How do you create a custom metaclass?&lt;/li&gt;
&lt;li&gt;What are &lt;code&gt;__prepare__&lt;/code&gt;, &lt;code&gt;__new__&lt;/code&gt;, &lt;code&gt;__init__&lt;/code&gt; hooks in a metaclass?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__init_subclass__&lt;/code&gt;? How is it used as a simpler alternative to metaclasses?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;abc.ABCMeta&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is the difference between a class decorator and a metaclass?&lt;/li&gt;
&lt;li&gt;What are real-world use cases for metaclasses? (ORMs, plugin systems, validation)&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;type.__new__()&lt;/code&gt; vs &lt;code&gt;object.__new__()&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__class_getitem__&lt;/code&gt; used for?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Descriptors
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is a descriptor in Python?&lt;/li&gt;
&lt;li&gt;What is the difference between a data descriptor and a non-data descriptor?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__get__&lt;/code&gt;, &lt;code&gt;__set__&lt;/code&gt;, &lt;code&gt;__delete__&lt;/code&gt; in a descriptor?&lt;/li&gt;
&lt;li&gt;How does &lt;code&gt;@property&lt;/code&gt; use the descriptor protocol?&lt;/li&gt;
&lt;li&gt;How do &lt;code&gt;classmethod&lt;/code&gt; and &lt;code&gt;staticmethod&lt;/code&gt; use descriptors internally?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔹 Advanced Python Features
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What is &lt;code&gt;__getattr__&lt;/code&gt; vs &lt;code&gt;__getattribute__&lt;/code&gt;? What is the difference?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;__set_name__&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is structural pattern matching (&lt;code&gt;match&lt;/code&gt;/&lt;code&gt;case&lt;/code&gt;) in Python 3.10+?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;TypeAlias&lt;/code&gt; in Python 3.10+?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;ParamSpec&lt;/code&gt; in &lt;code&gt;typing&lt;/code&gt;? Give a use case.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Self&lt;/code&gt; type in Python 3.11+?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;LiteralString&lt;/code&gt; in Python 3.11+?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;zoneinfo&lt;/code&gt; module?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;graphlib&lt;/code&gt; in Python 3.9+?&lt;/li&gt;
&lt;li&gt;What is the &lt;code&gt;ast&lt;/code&gt; module? How do you parse Python source code?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;inspect&lt;/code&gt; module? Name 5 use cases.&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;dis&lt;/code&gt; module? How do you disassemble Python bytecode?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;cProfile&lt;/code&gt;? How do you profile a Python script?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;line_profiler&lt;/code&gt;? How is it more granular than &lt;code&gt;cProfile&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;code&gt;Cython&lt;/code&gt;? How does it speed up Python?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  21. System Design / Architecture Questions
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;(Based on real interview experience — these come up often)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database Choice:&lt;/strong&gt; You are a software architect. You have a development team and a client-facing team. How do you decide between SQL and NoSQL for the project?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SQL vs NoSQL trade-offs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When is NoSQL preferred over SQL?&lt;/li&gt;
&lt;li&gt;When is SQL preferred over NoSQL?&lt;/li&gt;
&lt;li&gt;What factors influence the decision? (data structure, scale, consistency requirements, query patterns)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PostgreSQL vs MySQL:&lt;/strong&gt; Both are relational — why would you pick PostgreSQL over MySQL? What about the reverse?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CAP Theorem:&lt;/strong&gt; What is the CAP theorem? Where do PostgreSQL and MongoDB fit?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ACID vs BASE:&lt;/strong&gt; What is the difference? Which databases follow which model?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Real-World Deadlock:&lt;/strong&gt; Describe a real-world deadlock scenario in a web application. How do you detect and prevent it?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Example: Two users trying to transfer money to each other simultaneously.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scaling:&lt;/strong&gt; How do you scale a PostgreSQL database? What about a MongoDB cluster?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Caching:&lt;/strong&gt; When would you add a cache (like Redis) in front of a database?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sharding vs Replication:&lt;/strong&gt; What is the difference? When do you use each?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Schema-less vs Schema:&lt;/strong&gt; What are the advantages and disadvantages of MongoDB's schema-less nature in a production system?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  22. Data Structures &amp;amp; Algorithms (Bonus)
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;(Appeared in interviews — practice these)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Peak Mountain Element:&lt;/strong&gt; Given an array, find the peak element (element greater than its neighbors). What is the O(log n) approach using binary search?&lt;/li&gt;
&lt;li&gt;What is the difference between a stack and a queue? Implement both using Python lists.&lt;/li&gt;
&lt;li&gt;What is a linked list? Implement &lt;code&gt;reverse()&lt;/code&gt; on a singly linked list.&lt;/li&gt;
&lt;li&gt;What is the difference between BFS and DFS? When do you use each?&lt;/li&gt;
&lt;li&gt;What is a binary search tree? What are its time complexities for insert, search, and delete?&lt;/li&gt;
&lt;li&gt;What is a hash table? How does Python's dictionary implement it internally?&lt;/li&gt;
&lt;li&gt;What is the two-pointer technique? Give an example problem.&lt;/li&gt;
&lt;li&gt;What is dynamic programming? Explain with the Fibonacci and knapsack example.&lt;/li&gt;
&lt;li&gt;Write a function to check if a string is a palindrome.&lt;/li&gt;
&lt;li&gt;What is the sliding window technique? Give an example.&lt;/li&gt;
&lt;li&gt;What is a heap? What is &lt;code&gt;heapq&lt;/code&gt; in Python?&lt;/li&gt;
&lt;li&gt;What is the time complexity of sorting algorithms: Bubble, Selection, Insertion, Merge, Quick, Heap, Tim?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scenario:&lt;/strong&gt; Given a list of integers, find all pairs that sum to a target value. What is the optimal approach?&lt;/li&gt;
&lt;li&gt;What is a trie? When would you use one?&lt;/li&gt;
&lt;li&gt;What is a graph? Explain adjacency list vs adjacency matrix representation.&lt;/li&gt;
&lt;li&gt;What is Dijkstra's algorithm? What data structure does it use?&lt;/li&gt;
&lt;li&gt;What is a topological sort? When is it used?&lt;/li&gt;
&lt;li&gt;What is a union-find (disjoint set) data structure?&lt;/li&gt;
&lt;li&gt;What is the difference between a min-heap and a max-heap?&lt;/li&gt;
&lt;li&gt;What is an LRU cache? Implement it in Python using &lt;code&gt;OrderedDict&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




</description>
      <category>interview</category>
      <category>python</category>
      <category>git</category>
      <category>postgres</category>
    </item>
    <item>
      <title>I Spent a Full Day Learning OOP in Python, Here's Everything, Explained Like You're 15</title>
      <dc:creator>Kishan vyas</dc:creator>
      <pubDate>Thu, 26 Mar 2026 18:51:49 +0000</pubDate>
      <link>https://dev.to/kishan_vyas/i-spent-a-full-day-learning-oop-in-python-heres-everything-explained-like-youre-15-af2</link>
      <guid>https://dev.to/kishan_vyas/i-spent-a-full-day-learning-oop-in-python-heres-everything-explained-like-youre-15-af2</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%2Frlc6qkzfvhya4fhiiz7a.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%2Frlc6qkzfvhya4fhiiz7a.png" alt=" " width="548" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay real talk.&lt;/p&gt;

&lt;p&gt;I used to see OOP code - with all its classes, &lt;code&gt;self&lt;/code&gt;, &lt;code&gt;super()&lt;/code&gt;, &lt;code&gt;__dunder__&lt;/code&gt; stuff - and immediately feel my brain shut down.&lt;/p&gt;

&lt;p&gt;Today I finally sat down, refused to move until I understood it, and... it actually clicked.&lt;/p&gt;

&lt;p&gt;So here's my attempt to explain everything I learned in the way I &lt;em&gt;wish&lt;/em&gt; someone had explained it to me - with analogies, stories, and zero corporate jargon.&lt;/p&gt;

&lt;p&gt;Grab a chai This is a long one. But I promise it's worth it.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What we're covering:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Encapsulation&lt;/li&gt;
&lt;li&gt;Inheritance&lt;/li&gt;
&lt;li&gt;Abstraction&lt;/li&gt;
&lt;li&gt;Polymorphism&lt;/li&gt;
&lt;li&gt;Descriptors (bonus brain-bender)&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  First, the 30 second version of "What even IS OOP?"
&lt;/h2&gt;

&lt;p&gt;Imagine you're building a game. You have a &lt;code&gt;Hero&lt;/code&gt;, a &lt;code&gt;Dragon&lt;/code&gt;, a &lt;code&gt;Sword&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You &lt;em&gt;could&lt;/em&gt; write everything as a big list of instructions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;hero_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Arjun&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;hero_health&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="n"&gt;hero_attack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;
&lt;span class="n"&gt;dragon_health&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
&lt;span class="c1"&gt;# ... 300 more variables later 😵
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or - you could bundle related data and behavior into &lt;strong&gt;objects&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;hero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Hero&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Arjun&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;health&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;dragon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Dragon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;health&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;hero&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;attack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dragon&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# clean. readable. beautiful.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's OOP. You model the world as &lt;em&gt;things&lt;/em&gt; (objects) that have &lt;em&gt;data&lt;/em&gt; (attributes) and can &lt;em&gt;do stuff&lt;/em&gt; (methods).&lt;/p&gt;

&lt;p&gt;Python has &lt;strong&gt;4 pillars&lt;/strong&gt; of OOP. Think of them as the 4 superpowers. Let's unlock them one by one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pillar 1: Encapsulation - "What happens in the class, stays in the class"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; Think of your phone. You tap icons and apps open. You don't need to know about the CPU, RAM allocation, or kernel calls happening underneath. The phone &lt;em&gt;encapsulates&lt;/em&gt; all that complexity.&lt;/p&gt;

&lt;p&gt;Encapsulation = bundling data + methods together, and &lt;strong&gt;controlling who can access what&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Underscore Rules 🐍
&lt;/h3&gt;

&lt;p&gt;Python doesn't have "hard" access control like Java. Instead, it uses a naming &lt;em&gt;convention&lt;/em&gt; - think of it as a gentleman's agreement between developers:&lt;br&gt;
&lt;/p&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;BankAccount&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;__init__&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;owner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;balance&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;owner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;owner&lt;/span&gt;       &lt;span class="c1"&gt;# 🟢 PUBLIC - anyone can see/change this
&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;_balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt;  &lt;span class="c1"&gt;# 🟡 PROTECTED - "hey, please don't touch this from outside"
&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;__pin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1234&lt;/span&gt;        &lt;span class="c1"&gt;# 🔴 PRIVATE - Python actually hides this one
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's test what happens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;account&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BankAccount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Arjun&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;# "Arjun"
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_balance&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;# Works... but you're breaking the rules
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__pin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;# AttributeError! Where did it go??
&lt;/span&gt;
&lt;span class="c1"&gt;# Python secretly renamed it 👀
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_BankAccount__pin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# 1234 - name mangling revealed!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;** Wait, why does Python bother hiding &lt;code&gt;__pin&lt;/code&gt; if you can still access it with a longer name?**&lt;br&gt;
Because it prevents &lt;em&gt;accidental&lt;/em&gt; access and name collisions in subclasses - not to stop a determined hacker. Python trusts you to be an adult.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  @property - The Pythonic Getter/Setter
&lt;/h3&gt;

&lt;p&gt;In Java, you write &lt;code&gt;getBalance()&lt;/code&gt; and &lt;code&gt;setBalance()&lt;/code&gt;. In Python, we do it better:&lt;br&gt;
&lt;/p&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;BankAccount&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;__init__&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;balance&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;_balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt;

    &lt;span class="nd"&gt;@property&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;balance&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="c1"&gt;# called when you READ acc.balance
&lt;/span&gt;        &lt;span class="k"&gt;return&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;_balance&lt;/span&gt;

    &lt;span class="nd"&gt;@balance.setter&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;balance&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;amount&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;     &lt;span class="c1"&gt;# called when you WRITE acc.balance = x
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;amount&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="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bro you can&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t have negative money 💀&lt;/span&gt;&lt;span class="sh"&gt;"&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;_balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;

&lt;span class="n"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BankAccount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;     &lt;span class="c1"&gt;# 1000  looks like attribute access, runs the getter
&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;     &lt;span class="c1"&gt;# looks like assignment, runs the setter
&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;     &lt;span class="c1"&gt;# 💥 ValueError
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It &lt;em&gt;looks&lt;/em&gt; like you're accessing an attribute. You're secretly calling a method. That's elegant.&lt;/p&gt;

&lt;h3&gt;
  
  
  @classmethod vs @staticmethod - What's the difference?
&lt;/h3&gt;

&lt;p&gt;This confuses everyone. Here's the mental model:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Knows about...&lt;/th&gt;
&lt;th&gt;Use when...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regular method&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;self&lt;/code&gt; (instance)&lt;/td&gt;
&lt;td&gt;Working with instance data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;@classmethod&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cls&lt;/code&gt; (the class itself)&lt;/td&gt;
&lt;td&gt;Working with class-level data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;@staticmethod&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;nothing&lt;/td&gt;
&lt;td&gt;Utility function that belongs here logically&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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;Employee&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;company&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TechCorp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;   &lt;span class="c1"&gt;# class variable - shared by ALL instances
&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&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;name&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;   &lt;span class="c1"&gt;# instance variable - unique per object
&lt;/span&gt;
    &lt;span class="nd"&gt;@classmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;change_company&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;new_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new_name&lt;/span&gt;    &lt;span class="c1"&gt;# changes it for ALL employees!
&lt;/span&gt;
    &lt;span class="nd"&gt;@staticmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_valid_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&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="ow"&gt;and&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;name&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="c1"&gt;# no self, no cls
&lt;/span&gt;
&lt;span class="n"&gt;Employee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;change_company&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NewCorp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Employee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                   &lt;span class="c1"&gt;# "NewCorp" - affects everyone
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Employee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_valid_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Riya&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;     &lt;span class="c1"&gt;# True
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;slots&lt;/strong&gt; - For when you need to go fast ⚡
&lt;/h3&gt;

&lt;p&gt;By default, every object stores its attributes in a hidden dictionary (&lt;code&gt;__dict__&lt;/code&gt;). That's flexible but uses memory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;__slots__&lt;/code&gt; says: "I know &lt;em&gt;exactly&lt;/em&gt; what attributes this object will have. Lock it down."&lt;br&gt;
&lt;/p&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;Point&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;__slots__&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;x&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;y&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;   &lt;span class="c1"&gt;# pre-declare allowed attributes
&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&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;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&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;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&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;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;

&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;    &lt;span class="c1"&gt;# AttributeError - you said only x and y!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When to use it: when you're creating &lt;strong&gt;millions&lt;/strong&gt; of small objects and memory is tight. Think game particles, simulation nodes, etc.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pillar 2: Inheritance - "Why repeat yourself when you can just... inherit?"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; You inherited your dad's nose and your mom's stubbornness. You didn't write that code yourself - it came from your parents. But you also have your &lt;em&gt;own&lt;/em&gt; traits that neither of them have.&lt;/p&gt;

&lt;p&gt;Inheritance = a child class gets all the stuff from a parent class, plus adds its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 5 Types (Yes, Five!)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Single - the classic
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&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;breathe&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inhale... exhale...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Animal&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;speak&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Woof!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Multilevel - grandparent → parent → child
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Puppy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Dog&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;play&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chasing tail...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Hierarchical - one parent, many children
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Animal&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;speak&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Meow!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Multiple - inheriting from TWO parents
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Pet&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;cuddle&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;purrrr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DomesticCat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Pet&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;  &lt;span class="c1"&gt;# gets methods from BOTH
&lt;/span&gt;    &lt;span class="k"&gt;pass&lt;/span&gt;

&lt;span class="c1"&gt;# Hybrid - combination of above (gets complex fast!)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💎 The Diamond Problem - Python's Trickiest Puzzle
&lt;/h3&gt;

&lt;p&gt;What happens when D inherits from B and C, and B and C &lt;em&gt;both&lt;/em&gt; inherit from A?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      A
     / \
    B   C
     \ /
      D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;A&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;greet&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello from A&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;B&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greet&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello from B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;C&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greet&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello from C&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;D&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&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="k"&gt;pass&lt;/span&gt;

&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;D&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;  &lt;span class="c1"&gt;# "Hello from B" - but WHY? 🤯
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python uses &lt;strong&gt;MRO (Method Resolution Order)&lt;/strong&gt; to figure this out. Think of it as Python asking: &lt;em&gt;"What's the search order when I look for a method?"&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;D&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__mro__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# D → B → C → A → object
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python walks left to right through the inheritance chain. It finds &lt;code&gt;greet&lt;/code&gt; in B first, so that's what runs. The rule is called &lt;strong&gt;C3 linearization&lt;/strong&gt; - it's a whole algorithm but the key insight is: &lt;strong&gt;Python always respects the order you wrote the parents.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Always use &lt;code&gt;super()&lt;/code&gt; instead of calling &lt;code&gt;ParentClass.method(self)&lt;/code&gt; directly. &lt;code&gt;super()&lt;/code&gt; respects MRO. Hardcoding the parent name doesn't.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Pillar 3: Abstraction - "Tell me WHAT to do, not HOW"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; You plug a phone charger into any socket. You don't need to know the voltage regulation, wire resistance, or circuit breaker internals. The socket gives you an &lt;em&gt;interface&lt;/em&gt; (two holes, specific voltage). How it delivers that is hidden.&lt;/p&gt;

&lt;p&gt;Abstraction = define &lt;em&gt;what&lt;/em&gt; a class must do, leave the &lt;em&gt;how&lt;/em&gt; up to subclasses.&lt;/p&gt;

&lt;p&gt;Python gives us the &lt;code&gt;abc&lt;/code&gt; module (Abstract Base Classes) for this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;abc&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ABC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;abstractmethod&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Shape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ABC&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;          &lt;span class="c1"&gt;# ABC = "I am an abstract class"
&lt;/span&gt;
    &lt;span class="nd"&gt;@abstractmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;area&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="c1"&gt;# Every Shape MUST implement this
&lt;/span&gt;        &lt;span class="k"&gt;pass&lt;/span&gt;

    &lt;span class="nd"&gt;@abstractmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;perimeter&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="c1"&gt;# And this
&lt;/span&gt;        &lt;span class="k"&gt;pass&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;describe&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="c1"&gt;# This one is optional - already implemented
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I am a shape with area &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;area&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's make some shapes:&lt;br&gt;
&lt;/p&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;Circle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Shape&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;__init__&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;radius&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;radius&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;radius&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;area&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="k"&gt;return&lt;/span&gt; &lt;span class="mf"&gt;3.14159&lt;/span&gt; &lt;span class="o"&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;radius&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;perimeter&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="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;3.14159&lt;/span&gt; &lt;span class="o"&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;radius&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Shape&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;__init__&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;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&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;w&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;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;area&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="k"&gt;return&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;w&lt;/span&gt; &lt;span class="o"&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;h&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;perimeter&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="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&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;w&lt;/span&gt; &lt;span class="o"&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;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# shape = Shape()  TypeError - you can't instantiate an abstract class!
&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Circle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&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="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;   &lt;span class="c1"&gt;# "I am a shape with area 78.54"
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;   &lt;span class="c1"&gt;# "I am a shape with area 24.00"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why is this useful in real projects?&lt;/strong&gt;&lt;br&gt;
Imagine you're building a payment system. You define an abstract &lt;code&gt;PaymentGateway&lt;/code&gt; class with &lt;code&gt;charge()&lt;/code&gt; and &lt;code&gt;refund()&lt;/code&gt; methods. Now every developer adding a new gateway (Stripe, Razorpay, PayPal) is &lt;em&gt;forced&lt;/em&gt; to implement both. No more "oops I forgot the refund method" bugs.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Pillar 4: Polymorphism - "Same name, totally different behavior"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The analogy:&lt;/strong&gt; The word "run" means different things to a human (legs), a computer (execute), a river (flow), and your nose (drip when sick 🤧). Same word, different behavior depending on context.&lt;/p&gt;

&lt;p&gt;Polymorphism = the same method name works differently on different objects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Method Overriding
&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;Animal&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;speak&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Animal&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;speak&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Woof! 🐶&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Animal&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;speak&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Meow! 🐱&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Duck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Animal&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;speak&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="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Quack! 🦆&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# The MAGIC - you can treat them all the same!
&lt;/span&gt;&lt;span class="n"&gt;zoo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nc"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nc"&gt;Duck&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nc"&gt;Animal&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;animal&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;zoo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# Output:
# Woof! 🐶
# Meow! 🐱
# Quack! 🦆
# ...
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don't need to know &lt;em&gt;what kind&lt;/em&gt; of animal you have. You just call &lt;code&gt;.speak()&lt;/code&gt; and Python figures it out. This is polymorphism in action.&lt;/p&gt;

&lt;h3&gt;
  
  
  Operator Overloading - Making Python's &lt;code&gt;+&lt;/code&gt; do YOUR bidding
&lt;/h3&gt;

&lt;p&gt;Did you know &lt;code&gt;+&lt;/code&gt; doesn't always mean "add numbers"? &lt;code&gt;"hello" + " world"&lt;/code&gt; is string concat. &lt;code&gt;[1,2] + [3,4]&lt;/code&gt; is list merge. Python lets YOU define what &lt;code&gt;+&lt;/code&gt; means for your own classes using &lt;strong&gt;dunder methods&lt;/strong&gt; (double underscore = "dunder"):&lt;br&gt;
&lt;/p&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;Vector&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;__init__&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;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&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;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&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;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__add__&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;other&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;          &lt;span class="c1"&gt;# what + does
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Vector&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;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&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;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&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;__mul__&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;scalar&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;         &lt;span class="c1"&gt;# what * does
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Vector&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;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;scalar&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;y&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;scalar&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;__eq__&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;other&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;           &lt;span class="c1"&gt;# what == does
&lt;/span&gt;        &lt;span class="k"&gt;return&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;x&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;and&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;y&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__repr__&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="c1"&gt;# what print() shows
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vector(&lt;/span&gt;&lt;span class="si"&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;x&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&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;y&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Vector&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Vector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;# Vector(4, 6) - our __add__ ran!
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;# Vector(3, 6) - our __mul__ ran!
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;     &lt;span class="c1"&gt;# True - our __eq__ ran!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here are the most useful dunder methods to know:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;You write...&lt;/th&gt;
&lt;th&gt;Dunder that runs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;a + b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__add__&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;a - b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__sub__&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;a * b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__mul__&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;a == b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__eq__&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;a &amp;lt; b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__lt__&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;len(a)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__len__&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;print(a)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__str__&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;repr(a)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__repr__&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;a[0]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;__getitem__&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Bonus: Descriptors - "The magic behind the magic"
&lt;/h2&gt;

&lt;p&gt;Okay, here's where it gets &lt;em&gt;genuinely mind-bending&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every time you use &lt;code&gt;@property&lt;/code&gt;, you're using a descriptor.&lt;/strong&gt; And every time Python accesses &lt;code&gt;obj.attribute&lt;/code&gt;, there's a whole lookup protocol happening under the hood.&lt;/p&gt;

&lt;p&gt;A descriptor is any class that implements &lt;code&gt;__get__&lt;/code&gt;, &lt;code&gt;__set__&lt;/code&gt;, or &lt;code&gt;__delete__&lt;/code&gt;.&lt;br&gt;
&lt;/p&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;Validator&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 reusable descriptor that validates integer attributes&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__set_name__&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;owner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;         &lt;span class="c1"&gt;# Python tells us our attribute name automatically
&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__get__&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;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;objtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&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;obj&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;          &lt;span class="c1"&gt;# accessed on the class itself, not an instance
&lt;/span&gt;            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__dict__&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&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;name&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;__set__&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;obj&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="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;isinstance&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="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;value&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="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="si"&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;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; must be a non-negative integer. Got: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__dict__&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;name&lt;/span&gt;&lt;span class="p"&gt;]&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;class&lt;/span&gt; &lt;span class="nc"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Validator&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;       &lt;span class="c1"&gt;# ← descriptor instance as a CLASS attribute
&lt;/span&gt;    &lt;span class="n"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Validator&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;__init__&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;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;quantity&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;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;price&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;quantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;quantity&lt;/span&gt;

&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;# 100
&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;       &lt;span class="c1"&gt;# fine
&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;        &lt;span class="c1"&gt;# ValueError: 'price' must be a non-negative integer. Got: -50
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why is this cool?&lt;/strong&gt; One &lt;code&gt;Validator&lt;/code&gt; class works for BOTH &lt;code&gt;price&lt;/code&gt; and &lt;code&gt;quantity&lt;/code&gt;. You write the validation logic once. &lt;code&gt;@property&lt;/code&gt; would need two separate property definitions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mind-blowing fact:&lt;/strong&gt; &lt;code&gt;@property&lt;/code&gt;, &lt;code&gt;@classmethod&lt;/code&gt;, &lt;code&gt;@staticmethod&lt;/code&gt; - they're all descriptors themselves. Learning descriptors is learning how Python itself works at a fundamental level.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Quick Knowledge Check - Can you answer these?
&lt;/h2&gt;

&lt;p&gt;Before you scroll away, try these in your head (or your REPL):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q1:&lt;/strong&gt; What's the difference between &lt;code&gt;_name&lt;/code&gt; and &lt;code&gt;__name&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q2:&lt;/strong&gt; Why would you use &lt;code&gt;@classmethod&lt;/code&gt; over a regular method?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q3:&lt;/strong&gt; What does MRO stand for, and why does it exist?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q4:&lt;/strong&gt; What happens if a subclass doesn't implement an &lt;code&gt;@abstractmethod&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q5:&lt;/strong&gt; What dunder method would you override to make &lt;code&gt;len(your_object)&lt;/code&gt; work?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Answers are in the code examples above - go find them! 🕵️)&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🗺️ The Full Picture
&lt;/h2&gt;

&lt;p&gt;Here's everything we covered, in one table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pillar&lt;/th&gt;
&lt;th&gt;Core Idea&lt;/th&gt;
&lt;th&gt;Key Python Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Encapsulation&lt;/td&gt;
&lt;td&gt;Bundle data + control access&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;_x&lt;/code&gt;, &lt;code&gt;__x&lt;/code&gt;, &lt;code&gt;@property&lt;/code&gt;, &lt;code&gt;__slots__&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inheritance&lt;/td&gt;
&lt;td&gt;Reuse + extend parent code&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;class Child(Parent)&lt;/code&gt;, &lt;code&gt;super()&lt;/code&gt;, MRO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Abstraction&lt;/td&gt;
&lt;td&gt;Enforce interface, hide details&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ABC&lt;/code&gt;, &lt;code&gt;@abstractmethod&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Polymorphism&lt;/td&gt;
&lt;td&gt;Same name, different behavior&lt;/td&gt;
&lt;td&gt;Method overriding, dunder methods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Descriptors&lt;/td&gt;
&lt;td&gt;Customize attribute access itself&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;__get__&lt;/code&gt;, &lt;code&gt;__set__&lt;/code&gt;, &lt;code&gt;__delete__&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💬 Let's Talk!
&lt;/h2&gt;

&lt;p&gt;If you made it this far - you're a legend. Genuinely.&lt;/p&gt;

&lt;p&gt;Drop a comment and tell me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Which concept clicked the most for you?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Which one still feels fuzzy?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What should I write about next?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm documenting my learning journey here in public - every day I learn something new. Follow along if you want to learn together. 🙌&lt;/p&gt;

</description>
      <category>python</category>
      <category>oop</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Kishan vyas</dc:creator>
      <pubDate>Thu, 22 May 2025 04:46:21 +0000</pubDate>
      <link>https://dev.to/kishan_vyas/-34o2</link>
      <guid>https://dev.to/kishan_vyas/-34o2</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/kishan_vyas/understanding-23-design-patterns-in-software-development-424g" class="crayons-story__hidden-navigation-link"&gt;Understanding 23 Design Patterns in Software Development&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/kishan_vyas" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1878901%2Fce811825-deb9-45e9-ad86-eeb51a9e0fb7.png" alt="kishan_vyas profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/kishan_vyas" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Kishan vyas
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Kishan vyas
                
              
              &lt;div id="story-author-preview-content-2513158" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/kishan_vyas" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F1878901%2Fce811825-deb9-45e9-ad86-eeb51a9e0fb7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Kishan vyas&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/kishan_vyas/understanding-23-design-patterns-in-software-development-424g" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 22 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/kishan_vyas/understanding-23-design-patterns-in-software-development-424g" id="article-link-2513158"&gt;
          Understanding 23 Design Patterns in Software Development
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/kishan_vyas/understanding-23-design-patterns-in-software-development-424g" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/kishan_vyas/understanding-23-design-patterns-in-software-development-424g#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>designpatterns</category>
      <category>softwaredevelopment</category>
      <category>programming</category>
    </item>
    <item>
      <title>Understanding 23 Design Patterns in Software Development</title>
      <dc:creator>Kishan vyas</dc:creator>
      <pubDate>Thu, 22 May 2025 04:33:44 +0000</pubDate>
      <link>https://dev.to/kishan_vyas/understanding-23-design-patterns-in-software-development-424g</link>
      <guid>https://dev.to/kishan_vyas/understanding-23-design-patterns-in-software-development-424g</guid>
      <description>&lt;p&gt;If you're diving deeper into software development and want to write cleaner, more scalable code — design patterns are your new best friends.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll walk you through the &lt;strong&gt;23 most commonly used design patterns&lt;/strong&gt;, grouped under &lt;strong&gt;Creational&lt;/strong&gt;, &lt;strong&gt;Structural&lt;/strong&gt;, and &lt;strong&gt;Behavioral&lt;/strong&gt; patterns — all explained simply and with real-world examples in JavaScript.&lt;/p&gt;

&lt;p&gt;Let’s go.........&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Creational Design Patterns
&lt;/h2&gt;

&lt;p&gt;These deal with object creation mechanisms. The idea is to abstract the instantiation logic so that the system is not tightly coupled to the specific classes.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Singleton Pattern
&lt;/h3&gt;

&lt;p&gt;Only one instance of a class is created and shared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Logger, Config manager, DB connection.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&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="nx"&gt;Singleton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&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;Singleton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;Singleton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Singleton&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;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Singleton&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;a&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fdwk24xto4lzv36xc5j42.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%2Fdwk24xto4lzv36xc5j42.png" alt=" " width="284" height="440"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Factory Pattern
&lt;/h3&gt;

&lt;p&gt;Creates objects without exposing the instantiation logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; UI component factory, Notification sender (Email/SMS).&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;drive&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Driving a car&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;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Bike&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;drive&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Riding a bike&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;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;VehicleFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;type&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="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;car&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Car&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="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bike&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Bike&lt;/span&gt;&lt;span class="p"&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;vehicle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;VehicleFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bike&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;vehicle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drive&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Riding a bike&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Abstract Factory Pattern
&lt;/h3&gt;

&lt;p&gt;Factory of factories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Theme factory for UI (DarkThemeFactory, LightThemeFactory)&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;darkButton&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;black&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;function&lt;/span&gt; &lt;span class="nf"&gt;lightButton&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&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;function&lt;/span&gt; &lt;span class="nf"&gt;UIFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mode&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="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;createButton&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;darkButton&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lightButton&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;factory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UIFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createButton&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// { color: "black" }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  4. Builder Pattern
&lt;/h3&gt;

&lt;p&gt;Step-by-step creation of a complex object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Building complex HTML, query builder, or form builders.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BurgerBuilder&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;burger&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="nf"&gt;addCheese&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;burger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cheese&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;addLettuce&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;burger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lettuce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;build&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;burger&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;burger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BurgerBuilder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;addCheese&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;addLettuce&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;build&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;burger&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// { cheese: true, lettuce: true }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. Prototype Pattern
&lt;/h3&gt;

&lt;p&gt;Clone an existing object instead of creating a new one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Performance optimization, default object templates.&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;car&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;wheels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nf"&gt;drive&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Driving...&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;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myCar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;car&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;myCar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wheels&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&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%2Fx2md0ifs2kjke4sfvykc.jpg" alt=" " width="223" height="226"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🧱 Structural Design Patterns
&lt;/h2&gt;

&lt;p&gt;These are about class and object composition, focusing on how large structures are built from smaller pieces.&lt;/p&gt;




&lt;h3&gt;
  
  
  6. Adapter Pattern
&lt;/h3&gt;

&lt;p&gt;Converts one interface to another.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Legacy APIs, payment gateway adapters.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OldPrinter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;oldPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Old Print:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;msg&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Adapter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;oldPrinter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OldPrinter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;oldPrinter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;oldPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;printer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Adapter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;printer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  7. Decorator Pattern
&lt;/h3&gt;

&lt;p&gt;Add new functionality without modifying the original class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Middleware, logging wrappers.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;coffee&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;coffee&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;function&lt;/span&gt; &lt;span class="nf"&gt;withMilk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coffeeFunc&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="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;coffeeFunc&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; + milk&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;const&lt;/span&gt; &lt;span class="nx"&gt;fancyCoffee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;withMilk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coffee&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="nf"&gt;fancyCoffee&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// coffee + milk&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  8. Facade Pattern
&lt;/h3&gt;

&lt;p&gt;Simplifies a complex subsystem by exposing a high-level API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Simplify media player libraries, SDKs.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Engine&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;start&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Engine started&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;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Lights&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;on&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Lights on&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;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CarFacade&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Engine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lights&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Lights&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;startCar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lights&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;car&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CarFacade&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;car&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startCar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  9. Composite Pattern
&lt;/h3&gt;

&lt;p&gt;Treat a group of objects the same way as a single object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; File system, nested UI elements.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Leaf&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;show&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Folder&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&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="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;show&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;child&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;file1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Leaf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;file1.txt&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;file2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Leaf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;file2.txt&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;folder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Folder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MyFolder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  10. Bridge Pattern
&lt;/h3&gt;

&lt;p&gt;Separate abstraction from implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Theme-switching, rendering strategies.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LightTheme&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;getColor&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;Light color&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;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DarkTheme&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;getColor&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;Dark color&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;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Page&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;getContent&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="s2"&gt;`Page with &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getColor&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="p"&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;darkPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DarkTheme&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;darkPage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContent&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Page with Dark color&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  11. Proxy Pattern
&lt;/h3&gt;

&lt;p&gt;A placeholder that controls access to another object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Lazy loading, access control, logging.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RealImage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;display&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Displaying image&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;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProxyImage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;realImage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;display&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="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;realImage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;realImage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RealImage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;realImage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;display&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ProxyImage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;display&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧠 Behavioral Design Patterns
&lt;/h2&gt;

&lt;p&gt;These are all about how objects interact with each other.&lt;/p&gt;




&lt;h3&gt;
  
  
  12. Observer Pattern
&lt;/h3&gt;

&lt;p&gt;Notify all subscribers when something changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Event listeners, Pub/Sub.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Subject&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subscribers&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="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subscribers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;notify&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;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subscribers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;fn&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;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Subject&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  13. Strategy Pattern
&lt;/h3&gt;

&lt;p&gt;Change the algorithm at runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Sorting strategies, payment gateways.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&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;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;multiply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&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;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&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="nf"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;calculate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 8&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="nf"&gt;calculate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;multiply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  14. Command Pattern
&lt;/h3&gt;

&lt;p&gt;Encapsulate requests as objects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Undo/Redo, menu actions.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Light&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;turnOn&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Light on&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;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Command&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;device&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;device&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;device&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;turnOn&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;light&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Light&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;cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  15. Chain of Responsibility Pattern
&lt;/h3&gt;

&lt;p&gt;Pass requests down a chain until someone handles it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Express middlewares, support ticket routing.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handler1&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;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;if &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;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;log&lt;/span&gt;&lt;span class="dl"&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Handler1 processed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;else&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handler2&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="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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Handler2 processed&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;function&lt;/span&gt; &lt;span class="nf"&gt;processRequest&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="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;handler1&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="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;handler2&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="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;processRequest&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// Handler2 processed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  16. Template Method Pattern
&lt;/h3&gt;

&lt;p&gt;Define the skeleton of an algorithm, but let subclasses fill in the steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Framework hooks.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Game&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;play&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
  &lt;span class="nf"&gt;play&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
  &lt;span class="nf"&gt;end&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Football&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Game&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;init&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Football Initialized&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="nf"&gt;play&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Playing Football&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="nf"&gt;end&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Football Ended&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;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Football&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  17. State Pattern
&lt;/h3&gt;

&lt;p&gt;Change behavior based on internal state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Media players, form steps, UI modes.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TrafficLight&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;states&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;green&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yellow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&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="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;change&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Light:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;states&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;states&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;light&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TrafficLight&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;change&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// green&lt;/span&gt;
&lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;change&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// yellow&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  18. Mediator Pattern
&lt;/h3&gt;

&lt;p&gt;Centralized communication between objects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Chatrooms, component interactions.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ChatRoom&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;showMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;message&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;log&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="nx"&gt;user&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="nx"&gt;message&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="p"&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;room&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ChatRoom&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;room&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;showMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello Bob!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  19. Visitor Pattern
&lt;/h3&gt;

&lt;p&gt;Add operations to objects without changing their classes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Compilers, object structure traversal.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Book&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;visitor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;visitor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;visitBook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BookVisitor&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;visitBook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;book&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Visiting book&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;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;book&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Book&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;book&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BookVisitor&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  20. Interpreter Pattern
&lt;/h3&gt;

&lt;p&gt;Build a simple language interpreter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Regex, Expression evaluators.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;interpret&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;one&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Number&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;two&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Number&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="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;one&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interpret&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;two&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interpret&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  21. Memento Pattern
&lt;/h3&gt;

&lt;p&gt;Capture and restore an object's state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Undo features, save/restore.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Editor&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&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="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;save&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;restore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;saved&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;saved&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;h3&gt;
  
  
  22. Iterator Pattern
&lt;/h3&gt;

&lt;p&gt;Access elements without exposing the structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Custom collections.&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&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;iterator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iterator&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;iterator&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="c1"&gt;// { value: 1, done: false }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  23. Null Object Pattern
&lt;/h3&gt;

&lt;p&gt;Use an object that does nothing instead of null.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Avoid if (obj) checks.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NullUser&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;getName&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;Guest&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;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&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;user&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;NullUser&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;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Guest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Happy Coding 👨‍💻🔥&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%2Fgj0ngyiv52issbu0m0yn.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%2Fgj0ngyiv52issbu0m0yn.jpg" alt=" " width="499" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Singleton Design Pattern: Explained Simply</title>
      <dc:creator>Kishan vyas</dc:creator>
      <pubDate>Sun, 11 May 2025 12:36:05 +0000</pubDate>
      <link>https://dev.to/kishan_vyas/singleton-design-pattern-explained-simply-53oh</link>
      <guid>https://dev.to/kishan_vyas/singleton-design-pattern-explained-simply-53oh</guid>
      <description>&lt;p&gt;The &lt;strong&gt;Singleton Design Pattern&lt;/strong&gt; is a creational design pattern that ensures a class has &lt;strong&gt;only one instance&lt;/strong&gt; and provides a &lt;strong&gt;global point of access&lt;/strong&gt; to it. Think of it as a single, shared resource that everyone can use, but no one can duplicate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use the Singleton Pattern?
&lt;/h2&gt;

&lt;p&gt;The Singleton pattern is ideal when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need &lt;strong&gt;exactly one instance&lt;/strong&gt; of a class, such as for a database connection, configuration manager, or logging system.&lt;/li&gt;
&lt;li&gt;You want to control access to this instance to avoid issues like inconsistent states caused by multiple instances.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Does It Work?
&lt;/h2&gt;

&lt;p&gt;The Singleton pattern relies on three core principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Private Constructor&lt;/strong&gt;: The class restricts instantiation from outside by making its constructor private.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static Instance&lt;/strong&gt;: The class maintains a single, static instance of itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static Access Method&lt;/strong&gt;: A public static method (often called &lt;code&gt;getInstance()&lt;/code&gt;) provides access to the single instance, creating it if it doesn’t exist.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Simple Code Example (Java)
&lt;/h2&gt;

&lt;p&gt;Here’s a basic implementation of the Singleton pattern in Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Static variable to hold the single instance&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Private constructor to prevent instantiation&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;Singleton&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Public static method to access the instance&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt; &lt;span class="nf"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Using the Singleton&lt;/span&gt;
&lt;span class="nc"&gt;Singleton&lt;/span&gt; &lt;span class="n"&gt;s1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="nc"&gt;Singleton&lt;/span&gt; &lt;span class="n"&gt;s2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// s1 and s2 refer to the SAME instance&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How It Ensures a Single Instance
&lt;/h2&gt;

&lt;p&gt;When you use the Singleton pattern, multiple variables (like &lt;code&gt;s1&lt;/code&gt; and &lt;code&gt;s2&lt;/code&gt;) requesting the instance will point to the &lt;strong&gt;same object&lt;/strong&gt;, ensuring only one instance exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Analogy
&lt;/h2&gt;

&lt;p&gt;Imagine a &lt;strong&gt;company CEO&lt;/strong&gt;. There’s only one CEO for the entire company, and everyone accesses the same person for high-level decisions. You can’t have multiple CEOs, and the CEO’s office (the &lt;code&gt;getInstance()&lt;/code&gt; method) is the way to reach them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Considerations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thread Safety&lt;/strong&gt;: In multithreaded environments, synchronization is needed to prevent multiple instances. Options include using the &lt;code&gt;synchronized&lt;/code&gt; keyword or double-checked locking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lazy Initialization&lt;/strong&gt;: The instance is created only when first requested, saving resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eager Initialization&lt;/strong&gt;: Alternatively, you can create the instance when the class is loaded (e.g., &lt;code&gt;private static Singleton instance = new Singleton();&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pros of the Singleton Pattern
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Guarantees a &lt;strong&gt;single instance&lt;/strong&gt; of the class.&lt;/li&gt;
&lt;li&gt;Provides &lt;strong&gt;global access&lt;/strong&gt; to the instance.&lt;/li&gt;
&lt;li&gt;Supports &lt;strong&gt;lazy initialization&lt;/strong&gt; to optimize resource usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cons of the Singleton Pattern
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Can be tricky in &lt;strong&gt;multithreaded environments&lt;/strong&gt; without proper synchronization.&lt;/li&gt;
&lt;li&gt;May cause &lt;strong&gt;tight coupling&lt;/strong&gt;, reducing code flexibility.&lt;/li&gt;
&lt;li&gt;Complicates &lt;strong&gt;unit testing&lt;/strong&gt; due to its global state.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to Use It
&lt;/h2&gt;

&lt;p&gt;The Singleton pattern shines when you need a single, shared resource, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A logging system writing to a single file.&lt;/li&gt;
&lt;li&gt;A configuration manager for application-wide settings.&lt;/li&gt;
&lt;li&gt;A connection pool for database connections.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Singleton Design Pattern is a straightforward yet powerful tool for ensuring a class has only one instance while providing global access to it. By leveraging a private constructor, a static instance, and a static access method, you can enforce this constraint effectively. Just be cautious of thread safety and design challenges when implementing it.&lt;/p&gt;

&lt;p&gt;Whether you’re building a small app or a complex system, the Singleton pattern can help manage shared resources efficiently!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>From Internship to Impact: How I Automated Deployment with Telegram Alerts</title>
      <dc:creator>Kishan vyas</dc:creator>
      <pubDate>Mon, 05 May 2025 18:21:18 +0000</pubDate>
      <link>https://dev.to/kishan_vyas/from-internship-to-impact-how-i-automated-deployment-with-telegram-alerts-3n7c</link>
      <guid>https://dev.to/kishan_vyas/from-internship-to-impact-how-i-automated-deployment-with-telegram-alerts-3n7c</guid>
      <description>&lt;p&gt;In the world of full-stack development, building features is just one part of the job. What really separates a developer from an engineer is how you handle deployments, automation, and monitoring.&lt;/p&gt;

&lt;p&gt;As an intern working on a real-world Import Export management system, I recently faced a challenge:&lt;br&gt;
How do I ensure seamless deployment with zero guesswork—especially when working alone or in a small team?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Every time I updated the backend code:&lt;br&gt;
I had to manually pull the code on the server.&lt;br&gt;
Restart services and check for errors.&lt;br&gt;
Pray that I didn’t miss something in the deployment process.&lt;/p&gt;

&lt;p&gt;It wasn’t scalable. So I built a simple yet powerful CI/CD system with Telegram alerts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Here’s what the pipeline does:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GitHub Webhook triggers on push&lt;/li&gt;
&lt;li&gt;Server pulls the latest code&lt;/li&gt;
&lt;li&gt;Runs build + restart commands&lt;/li&gt;
&lt;li&gt;Sends a Telegram message with the result: success or failure&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;Node.js backend&lt;br&gt;
Bash scripts on a Linux VPS&lt;br&gt;
GitHub Webhooks&lt;br&gt;
Telegram Bot API&lt;br&gt;
Nginx for reverse proxy&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Telegram?
&lt;/h2&gt;

&lt;p&gt;Simple. Instant feedback without needing to check logs or dashboards.&lt;br&gt;
If deployment fails, I know immediately. If it succeeds, I keep building confidently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Snippet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/bash
cd /home/udhyog/ImportExport/management-sheet
git pull origin main

if pm2 restart backend; then
  curl -s -X POST "https://api.telegram.org/bot&amp;lt;token&amp;gt;/sendMessage" \
  -d chat_id=&amp;lt;your_chat_id&amp;gt; \
  -d text="✅ Deployment succeeded!"
else
  curl -s -X POST "https://api.telegram.org/bot&amp;lt;token&amp;gt;/sendMessage" \
  -d chat_id=&amp;lt;your_chat_id&amp;gt; \
  -d text="❌ Deployment failed!"
fi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Impact
&lt;/h2&gt;

&lt;p&gt;Reduced downtime&lt;br&gt;
Instant awareness of issues&lt;br&gt;
Peace of mind as a solo/full-stack dev&lt;br&gt;
Made the system production-ready&lt;/p&gt;

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

&lt;p&gt;Small automations = huge productivity gains.&lt;br&gt;
Whether you're an intern, solo dev, or working in a team, it's worth investing time into your deployment process.&lt;/p&gt;

&lt;p&gt;Let your code deploy and talk to you.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A Deep Dive into Forward and Reverse Proxy with NGINX on Linux</title>
      <dc:creator>Kishan vyas</dc:creator>
      <pubDate>Mon, 02 Sep 2024 01:25:51 +0000</pubDate>
      <link>https://dev.to/kishan_vyas/a-deep-dive-into-forward-and-reverse-proxy-with-nginx-on-linux-5gdd</link>
      <guid>https://dev.to/kishan_vyas/a-deep-dive-into-forward-and-reverse-proxy-with-nginx-on-linux-5gdd</guid>
      <description>&lt;h4&gt;
  
  
  Proxies play a critical role in modern web architecture, enabling secure, efficient, and manageable network communications. NGINX, a powerful and widely-used web server, excels in providing both forward and reverse proxy capabilities. In this blog, we'll dive into the concepts of forward and reverse proxies, how they work in NGINX, and provide code examples for setting them up on a Linux machine.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Table of Contents
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;What is a Proxy?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forward Proxy&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Definition&lt;/li&gt;
&lt;li&gt;Use Cases&lt;/li&gt;
&lt;li&gt;Setting up Forward Proxy with NGINX&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reverse Proxy&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Definition&lt;/li&gt;
&lt;li&gt;Use Cases&lt;/li&gt;
&lt;li&gt;Setting up Reverse Proxy with NGINX&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Differences Between Forward and Reverse Proxy&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  1. What is a Proxy?
&lt;/h3&gt;

&lt;p&gt;A proxy acts as an intermediary between a client and a server. It handles requests from clients, forwards them to the appropriate server, and then returns the server's response back to the client. This can be done for various purposes, such as improving security, load balancing, or accessing blocked resources.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Forward Proxy
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Definition
&lt;/h4&gt;

&lt;p&gt;A forward proxy sits between a client and the internet. It is used by clients to access resources on the internet that they might not be able to reach directly. This could be due to network restrictions, privacy concerns, or simply to cache content for quicker access.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Access Control&lt;/strong&gt;: Allow or block access to certain websites or resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy&lt;/strong&gt;: Hide the client's IP address from the internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Filtering&lt;/strong&gt;: Block specific types of content (e.g., ads or adult content).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching&lt;/strong&gt;: Store copies of frequently accessed resources to speed up requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Setting up Forward Proxy with NGINX
&lt;/h4&gt;

&lt;p&gt;Here's how you can set up a forward proxy server with NGINX on a Linux machine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install NGINX&lt;/strong&gt;:
Make sure NGINX is installed on your Linux machine. If not, install it using the package manager:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure NGINX as a Forward Proxy&lt;/strong&gt;:
Edit the NGINX configuration file to set up the forward proxy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Open the NGINX configuration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/nginx/nginx.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;   &lt;span class="k"&gt;events&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

   &lt;span class="k"&gt;http&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# The port on which the forward proxy will listen&lt;/span&gt;

           &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
               &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;$host$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
               &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
               &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
               &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
               &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="p"&gt;}&lt;/span&gt;

           &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;/var/log/nginx/proxy-access.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="kn"&gt;error_log&lt;/span&gt; &lt;span class="n"&gt;/var/log/nginx/proxy-error.log&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;This configuration tells NGINX to listen on port 8080 and forward all requests it receives to the destination server.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Restart NGINX&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After editing the configuration file, restart NGINX to apply the changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Test the Forward Proxy&lt;/strong&gt;:
You can test the forward proxy by configuring a web browser to use your Linux machine's IP address and port 8080 as a proxy server.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  3. Reverse Proxy
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Definition
&lt;/h4&gt;

&lt;p&gt;A reverse proxy, on the other hand, sits between the internet and a server. It forwards client requests to one or more backend servers and returns the server's response to the client. The client interacts with the reverse proxy as if it were the actual server.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Load Balancing&lt;/strong&gt;: Distribute incoming traffic across multiple servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSL Termination&lt;/strong&gt;: Handle SSL encryption/decryption on behalf of backend servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Protect backend servers by hiding their IP addresses and managing access control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching&lt;/strong&gt;: Store responses from backend servers to reduce load and improve response times.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Setting up Reverse Proxy with NGINX
&lt;/h4&gt;

&lt;p&gt;Here's how to configure NGINX as a reverse proxy on a Linux machine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install NGINX&lt;/strong&gt;:
Ensure NGINX is installed:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure NGINX as a Reverse Proxy&lt;/strong&gt;:
Edit the NGINX configuration file to set up the reverse proxy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Open the NGINX configuration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/nginx/sites-available/default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modify the server block to include the reverse proxy configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;   &lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

       &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# Replace with your domain or IP address&lt;/span&gt;

       &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://backend_server_ip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;# Replace with your backend server IP or domain&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="p"&gt;}&lt;/span&gt;

       &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;/var/log/nginx/reverse-proxy-access.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="kn"&gt;error_log&lt;/span&gt; &lt;span class="n"&gt;/var/log/nginx/reverse-proxy-error.log&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;This configuration directs NGINX to forward all requests it receives on port 80 to the backend server specified by &lt;code&gt;proxy_pass&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Restart NGINX&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After updating the configuration, restart NGINX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Test the Reverse Proxy&lt;/strong&gt;:
You can test the reverse proxy by accessing your domain or IP address in a web browser. The requests should be forwarded to the backend server.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  4. Key Differences Between Forward and Reverse Proxy
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direction of Proxying&lt;/strong&gt;: A forward proxy handles requests from clients seeking resources from servers, while a reverse proxy handles requests from clients and forwards them to backend servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client Awareness&lt;/strong&gt;: In a forward proxy, the client knows it's using a proxy, whereas, in a reverse proxy, the client is unaware it's interacting with a proxy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Common Uses&lt;/strong&gt;: Forward proxies are commonly used for privacy, filtering, and access control, while reverse proxies are used for load balancing, SSL termination, and security.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  5. Conclusion
&lt;/h3&gt;

&lt;p&gt;NGINX is a versatile tool that can act as both a forward and reverse proxy, providing a variety of benefits including improved security, load balancing, and access control. Whether you need to set up a forward proxy to control client access to the internet or a reverse proxy to manage and secure backend server traffic, NGINX on Linux offers a robust solution.&lt;/p&gt;

&lt;p&gt;By understanding and implementing these proxies, you can enhance your network architecture, making it more efficient and secure.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Importance of Connection Pooling</title>
      <dc:creator>Kishan vyas</dc:creator>
      <pubDate>Sat, 03 Aug 2024 18:29:55 +0000</pubDate>
      <link>https://dev.to/kishan_vyas/the-importance-of-connection-pooling-3km</link>
      <guid>https://dev.to/kishan_vyas/the-importance-of-connection-pooling-3km</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In the world of modern web applications, efficient database management is critical for performance and scalability. One key technique that ensures efficient database interaction is &lt;strong&gt;connection pooling&lt;/strong&gt;. In this blog, we will explore the need for connection pooling, the consequences of not using it, and the benefits it brings when properly implemented, especially in the context of Prisma ORM and PostgreSQL.&lt;/p&gt;

&lt;p&gt;Imagine this: every time a user visits your app, a brand new connection to the database is created. Sounds simple, right? But this can quickly lead to delays, especially when your app is handling multiple users at once. That's where connection pooling saves the day!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Connection Pooling?
&lt;/h2&gt;

&lt;p&gt;Connection pooling is a method of managing database connections by maintaining a pool of reusable connections. Instead of creating a new connection for every request, the pool reuses existing connections, significantly reducing the overhead associated with establishing new connections.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is Connection Pooling Needed?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Resource Optimization:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Establishing a new database connection is resource-intensive and time-consuming. Connection pooling minimizes this overhead by reusing existing connections.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modern applications often handle a high number of concurrent requests. Without connection pooling, each request would require a new connection, quickly overwhelming the database. Connection pooling helps manage and limit the number of active connections.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reusing connections reduces latency, leading to faster query execution and improved overall application performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Happens Without Connection Pooling?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;High Latency:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every new request results in creating a new database connection, introducing significant latency due to the overhead of connection establishment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resource Exhaustion:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Databases have a limit on the number of concurrent connections they can handle. Without pooling, the application can easily exceed this limit, leading to connection failures and degraded performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Increased Costs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In cloud environments, unnecessary creation and management of connections can lead to higher operational costs due to increased resource usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Unstable Applications:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frequent connection creation and teardown can cause instability, leading to frequent crashes and unreliable application behavior.&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%2Ftx25uimwu30evkydrza0.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%2Ftx25uimwu30evkydrza0.png" alt=" " width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens With Connection Pooling?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Improved Performance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reusing existing connections minimizes latency, resulting in faster response times and a smoother user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Efficient Resource Utilization:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connection pooling ensures that database resources are used efficiently, reducing the risk of connection limits being exceeded and improving overall stability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The application can handle a higher number of concurrent requests without overwhelming the database, making it more scalable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cost Efficiency:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Efficient connection management leads to optimized resource usage, potentially reducing operational costs in cloud environments.&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%2Ff9g655r4jgh8bnn604t7.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%2Ff9g655r4jgh8bnn604t7.png" alt=" " width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Connection pooling is essential for any application interacting with a database, especially in serverless environments. It optimizes resource usage, enhances performance, ensures scalability, and reduces operational costs. By implementing connection pooling with Prisma ORM and PostgreSQL, you can significantly improve your application's efficiency and reliability.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
