2026 সালে পাইথন ইন্টারভিউ প্রশ্নগুলি মৌলিক সিনট্যাক্স থেকে শুরু করে উন্নত অ্যাসিঙ্ক প্যাটার্ন, ডেটা স্ট্রাকচার এবং OOP ডিজাইন পর্যন্ত সবকিছুই কভার করে। আপনি জুনিয়র ডেভেলপারের ভূমিকার জন্য প্রস্তুতি নিচ্ছেন বা FAANG কোম্পানিতে সিনিয়র পদের জন্য, এই নির্দেশিকাটি স্পষ্ট, সংক্ষিপ্ত উত্তর সহ সর্বাধিক জিজ্ঞাসিত পাইথন ইন্টারভিউ প্রশ্নগুলিকে কভার করে৷
📋 Table of Contents
মূল পাইথন প্রশ্ন
1. একটি তালিকা এবং একটি tuple মধ্যে পার্থক্য কি?
তালিকাপরিবর্তনযোগ্য – উপাদানগুলি যোগ করা, সরানো বা পরিবর্তন করা যেতে পারে।টিপলসঅপরিবর্তনীয় – একবার তৈরি হয়ে গেলে, সেগুলি পরিবর্তন করা যায় না।
# List — mutable
my_list = [1, 2, 3]
my_list.append(4) # OK
my_list[0] = 10 # OK
# Tuple — immutable
my_tuple = (1, 2, 3)
# my_tuple[0] = 10 # TypeError!
# Tuples are faster and use less memory
# Use tuples for heterogeneous data (coordinates, RGB)
# Use lists for homogeneous, modifiable sequences
# Named tuples — readable tuples
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x, p.y) # 3 4
2. পাইথনের জিআইএল (গ্লোবাল ইন্টারপ্রেটার লক) ব্যাখ্যা করুন
জিআইএল হল একটি মিউটেক্স যা এক সময়ে শুধুমাত্র একটি থ্রেডকে পাইথন বাইটকোড চালানোর অনুমতি দেয়, এমনকি মাল্টি-কোর সিস্টেমেও। এর মানে পাইথন থ্রেড পাইথন কোডের জন্য সত্যিকারের CPU সমান্তরালতা অর্জন করতে পারে না।
- থ্রেডগুলি I/O অপারেশন (নেটওয়ার্ক, ডিস্ক) চলাকালীন GIL প্রকাশ করে — তাই থ্রেডিং I/O-বাউন্ড কাজগুলির জন্য কাজ করে
- CPU- আবদ্ধ সমান্তরালতার জন্য, ব্যবহার করুন
multiprocessing(প্রতিটি প্রক্রিয়ার নিজস্ব জিআইএল আছে) - Python 3.13+ এর পরীক্ষামূলক ফ্রি-থ্রেডেড মোড রয়েছে (GIL অক্ষম করা যেতে পারে)
3. ডেকোরেটর কি? একটা উদাহরণ দাও।
import functools, time
def timer(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
elapsed = time.perf_counter() - start
print(f"{func.__name__}: {elapsed*1000:.2f}ms")
return result
return wrapper
@timer
def slow_function():
time.sleep(0.1)
return 42
slow_function() # "slow_function: 100.12ms"
4. *args এবং **kwargs এর মধ্যে পার্থক্য কি?
def func(*args, **kwargs):
print(args) # tuple of positional arguments
print(kwargs) # dict of keyword arguments
func(1, 2, 3, name="Alice", age=30)
# (1, 2, 3)
# {'name': 'Alice', 'age': 30}
# Unpacking
def add(a, b, c): return a + b + c
numbers = [1, 2, 3]
print(add(*numbers)) # 6
settings = {"a": 1, "b": 2, "c": 3}
print(add(**settings)) # 6
5. জেনারেটর কি এবং আপনি কখন ব্যবহার করবেন?
# Generator — lazy evaluation, memory efficient
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# vs list — loads everything into memory
fib = fibonacci()
print([next(fib) for _ in range(10)])
# Use generators when:
# 1. Processing large datasets (files, DB rows)
# 2. Infinite sequences
# 3. Building pipelines
OOP প্রশ্ন
6. @classmethod এবং @staticmethod এর মধ্যে পার্থক্য কি?
class Circle:
pi = 3.14159
def __init__(self, radius):
self.radius = radius
# Regular method — receives instance (self)
def area(self):
return self.pi * self.radius ** 2
# classmethod — receives class (cls), can access class variables
@classmethod
def from_diameter(cls, diameter):
return cls(diameter / 2) # factory method
# staticmethod — receives nothing, utility function
@staticmethod
def is_valid_radius(radius):
return radius > 0
c1 = Circle(5)
c2 = Circle.from_diameter(10)
print(Circle.is_valid_radius(-1)) # False
7. MRO ব্যাখ্যা করুন (পদ্ধতি রেজোলিউশন অর্ডার)
class A:
def method(self): return "A"
class B(A):
def method(self): return "B"
class C(A):
def method(self): return "C"
class D(B, C): # Multiple inheritance
pass
d = D()
print(d.method()) # "B" — follows MRO
print(D.__mro__) # (D, B, C, A, object)
# Python uses C3 linearization for MRO
উন্নত প্রশ্ন
8. পাইথনের মেমরি ম্যানেজমেন্ট কিভাবে কাজ করে?
- রেফারেন্স গণনা– প্রতিটি বস্তু ট্র্যাক করে কতগুলি রেফারেন্স এটি নির্দেশ করে
- যখন গণনা 0 এ পৌঁছায়, বস্তু অবিলম্বে মুক্ত হয়
- আবর্জনা সংগ্রহকারী— সার্কুলার রেফারেন্স পরিচালনা করে (রেফারেন্স গণনা করা যাবে না)
gc.collect()– ম্যানুয়ালি আবর্জনা সংগ্রহ ট্রিগার করুন- ইন্টার্নিং— ছোট পূর্ণসংখ্যা (-5 থেকে 256) এবং ছোট স্ট্রিং ক্যাশে করা হয়
9. অগভীর এবং গভীর অনুলিপি মধ্যে পার্থক্য কি?
import copy
original = [[1, 2, 3], [4, 5, 6]]
# Shallow copy — new list, but nested objects are shared
shallow = copy.copy(original) # or list(original) or original[:]
shallow[0].append(99)
print(original[0]) # [1, 2, 3, 99] — MODIFIED! (shared reference)
# Deep copy — completely independent copy
deep = copy.deepcopy(original)
deep[0].append(88)
print(original[0]) # [1, 2, 3] — unchanged
10. পাইথনের অন্তর্নির্মিত ডেটা স্ট্রাকচার এবং তাদের সময় জটিলতাগুলি কী কী?
| অপারেশন | তালিকা | dict | set | deque |
|---|---|---|---|---|
| অ্যাক্সেস | O(1) | O(1) গড় | N/A | O(n) |
| অনুসন্ধান করুন | O(n) | O(1) গড় | O(1) গড় | O(n) |
| সন্নিবেশ (শেষ) | O(1) amort | O(1) গড় | O(1) গড় | O(1) |
| ঢোকান (শুরু) | O(n) | N/A | N/A | O(1) |
| মুছে দিন | O(n) | O(1) গড় | O(1) গড় | O(1) |
Async প্রশ্ন
11. asyncio.gather() এবং asyncio.TaskGroup-এর মধ্যে পার্থক্য কী?
import asyncio
# asyncio.gather — partial failures possible
async def example_gather():
results = await asyncio.gather(
task1(),
task2(),
return_exceptions=True # don't cancel others on failure
)
# Results include exceptions if return_exceptions=True
# asyncio.TaskGroup (Python 3.11+) — all-or-nothing
async def example_task_group():
async with asyncio.TaskGroup() as tg:
t1 = tg.create_task(task1())
t2 = tg.create_task(task2())
# If any task raises, all are cancelled — structured concurrency
asyncio.run(example_task_group())
পাইথন ইন্টারভিউতে সাফল্য আসে ভাষা গভীরভাবে বোঝার মাধ্যমে, শুধু উত্তর মুখস্থ করা থেকে নয়। প্রতিটি ধারণার পিছনে “কেন” এর উপর ফোকাস করুন — কেন জিআইএল বিদ্যমান, কেন জেনারেটর মেমরি-দক্ষ, কেন গভীর অনুলিপি গুরুত্বপূর্ণ। ট্রেড-অফ ব্যাখ্যা করুন এবং প্রতিটি ধারণার বাস্তব-বিশ্বের প্রয়োগ দেখান।
🔗 Share this article
✍️ Leave a Comment