Home »
Blog »
AI/ML Engineer সিরিজ » Series 10 » Episode 04
Python ও Coding Interview: data structures, OOP, practical problem
coding screen পার হওয়া (Series 10, Episode 04)
🟡 INTERMEDIATE
Series 10 — AI/ML Engineer হিসেবে চাকরি
Episode 04 / 10
📑 এই পর্বে যা যা আছে
- ১. গল্প: Rahim-এর প্রথম coding screen
- ২. সমস্যা: AI/ML role-এও coding round কেন
- ৩. কী কী আসে: তিন ধরনের প্রশ্ন
- ৪. Data Structures: complexity intuition
- ৫. Practical: dict/set দিয়ে দ্রুত সমাধান
- ৬. OOP প্রশ্ন: কেন sklearn/PyTorch class-based
- ৭. একটা bug-fix/reasoning প্রশ্ন
- ৮. Pythonic code: interviewer যা খোঁজে
- ৯. Live coding-এ কীভাবে কথা বলবেন
- ১০. Job Requirement Decoder: "strong Python fundamentals"
- ১১. সাধারণ ভুল
- ১২. Interview Prep
- ১৩. হাতে-কলমে
- ১৪. Project Connection
- ১৫. সারসংক্ষেপ
- ১৬. পরবর্তী পর্বে কী শিখব
🧩 ১. গল্প: Rahim-এর প্রথম coding screen
Interview call এল! কিন্তু প্রথম round দেখে Rahim অবাক — এটা কোনো ML প্রশ্ন নয়, বরং একটা coding
problem: "একটা list-এ duplicate আছে কিনা বের করো, তারপর optimize করো।" Rahim ভেবেছিল AI/ML role
মানে শুধু model নিয়ে প্রশ্ন হবে।
Arif: "AI/ML Engineer আগে একজন engineer। তুমি model বানাও ঠিকই, কিন্তু সেই model-এর
চারপাশে data pipeline, API, preprocessing — সব কোড দিয়ে লিখতে হয়। তাই কোম্পানি আগে দেখে তুমি
পরিষ্কার, correct কোড লিখতে পারো কিনা। এই round-টা LeetCode grandmaster হওয়ার পরীক্ষা নয় — এটা
দেখার পরীক্ষা যে তুমি চিন্তা করে, কথা বলতে বলতে, একটা সমস্যা সমাধান করতে পারো।"
এই পর্বে আমরা AI/ML role-এর coding screen-এর জন্য practical প্রস্তুতি নেব।
🤔 ২. সমস্যা: AI/ML role-এও coding round কেন
অনেক candidate ভাবে "আমি তো data scientist/AI হবো, coding round কেন?" বাস্তবতা হলো — একজন AI/ML
Engineer-এর দৈনন্দিন কাজের বড় অংশ কোড: data নিয়ে আসা, পরিষ্কার করা, feature বানানো, API লেখা।
দুর্বল কোড মানে ধীর, bug-ভরা, unmaintainable system।
junior AI/ML coding screen সাধারণত medium-easy — advanced dynamic programming নয়।
তারা দেখে: correctness, complexity সম্পর্কে ধারণা, পরিষ্কার Python, আর তুমি চিন্তা করতে করতে কথা বলতে পারো কিনা।
🗂️ ৩. কী কী আসে: তিন ধরনের প্রশ্ন
| ধরন | উদাহরণ | কী পরীক্ষা করে |
| Data structure / algo (easy-medium) | duplicate খোঁজা, two-sum, frequency count | list/dict/set, complexity ধারণা |
| Practical/Pythonic | CSV parse, text-এ word count, data transform | বাস্তব কোড লেখার দক্ষতা |
| OOP / design | একটা small class design, "কেন এই design" | abstraction, sklearn-style ভাবনা |
Must Know / Learn Later: চাকরির আগে must — list/dict/set, loop, function, basic
time complexity (O(n) vs O(n²)), string/CSV handling। Learn later — advanced DP, graph algorithm,
system-level algorithm (এগুলো junior AI role-এ খুব একটা লাগে না)।
⏱️ ৪. Data Structures: complexity intuition
সবচেয়ে বেশি কাজে লাগে — কখন কোন structure। এটাই সেই "duplicate" প্রশ্নের মূল।
Level 1 — intuition: list মানে একটা লাইনে দাঁড়ানো মানুষ — কাউকে খুঁজতে হলে একজন একজন
করে দেখতে হয় (ধীর)। dict/set মানে নাম ধরে সরাসরি ডাক দেওয়া — instant।
Level 2 — technical: list-এ x in mylist হলো O(n)। set/dict-এ
x in myset হলো গড়ে O(1) (hashing)। তাই membership/lookup-এ set/dict অনেক দ্রুত।
Level 3 — engineer perspective: ১০ লাখ row data নিয়ে কাজ করলে O(n²) কোড কার্যত জমে
যায়। set/dict দিয়ে সেটা O(n) করা — এই সিদ্ধান্তই real work-এ পার্থক্য গড়ে দেয়।
# duplicate খোঁজা - naive: O(n^2)
def has_dup_slow(nums):
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] == nums[j]:
return True
return False
# optimized: O(n) time, O(n) space (set দিয়ে)
def has_dup_fast(nums):
seen = set()
for x in nums:
if x in seen: # গড়ে O(1) lookup
return True
seen.add(x)
return False
⚡ ৫. Practical: dict/set দিয়ে দ্রুত সমাধান
AI/ML interview-তে খুব common একটা practical প্রশ্ন — text/data-তে frequency count। এটা আসলে
Bag-of-Words-এর ভিত্তি (Series 07), তাই ML-প্রাসঙ্গিকও।
from collections import Counter
def top_k_words(text: str, k: int) -> list[tuple[str, int]]:
words = text.lower().split()
counts = Counter(words) # dict-এর মতো, O(n)
return counts.most_common(k)
# ব্যবহার
sample = "python sql python ml python sql"
print(top_k_words(sample, 2))
# [('python', 3), ('sql', 2)]
কেন এই approach? Counter হলো একটা specialized dict — একবার data ঘুরে
(O(n)) count বানায়। manual loop-এও করা যায়, কিন্তু interviewer-কে বলুন আপনি standard library চেনেন,
আর কেন এটা O(n)। "আমি Pythonic এবং efficient দুইই জানি" — এই signal দিন।
🏛️ ৬. OOP প্রশ্ন: কেন sklearn/PyTorch class-based
AI/ML role-এ OOP প্রশ্ন প্রায়ই ML-এর সাথে জোড়া লাগে — "একটা simple estimator class design করো"
বা "sklearn-এর fit/predict pattern কেন?"
class MinMaxScaler:
"""একটা ছোট, sklearn-style transformer।"""
def __init__(self):
self.min_ = None
self.max_ = None
def fit(self, data: list[float]) -> "MinMaxScaler":
self.min_ = min(data)
self.max_ = max(data)
return self # chaining-এর জন্য
def transform(self, data: list[float]) -> list[float]:
rng = self.max_ - self.min_
if rng == 0:
return [0.0 for _ in data]
return [(x - self.min_) / rng for x in data]
def fit_transform(self, data: list[float]) -> list[float]:
return self.fit(data).transform(data)
বলার মতো কথা: fit/transform আলাদা কেন? কারণ train data-তে fit করে সেই একই
parameter test data-তে apply করতে হয় — নাহলে data leakage (Series 03/05)। এই একটা উত্তর দিলে
interviewer বুঝবে তুমি শুধু OOP নয়, ML সঠিকভাবেও বোঝো।
🐞 ৭. একটা bug-fix/reasoning প্রশ্ন
একটা খুব common Python "gotcha" যা interview-তে আসে — mutable default argument। এটা AI code-এও
বাস্তব bug ঘটায়।
# ভুল: default list সব call-এ shared হয়ে যায়!
def add_feature(x, features=[]):
features.append(x)
return features
print(add_feature(1)) # [1]
print(add_feature(2)) # [1, 2] <- অপ্রত্যাশিত!
# ঠিক:
def add_feature(x, features=None):
if features is None:
features = []
features.append(x)
return features
এই ধরনের প্রশ্নে interviewer দেখে তুমি "কেন" বুঝতে পারো কিনা — default argument function
definition-এর সময় একবারই তৈরি হয়, তাই mutable default বিপজ্জনক।
✨ ৮. Pythonic code: interviewer যা খোঁজে
- অর্থপূর্ণ নাম (
seen, counts — a, b নয়)
- list comprehension যেখানে পরিষ্কার হয়
- standard library ব্যবহার (
Counter, enumerate, zip)
- edge case ভাবা (empty input, single element, division by zero)
- type hint (junior-এর জন্য bonus, engineer signal)
# comprehension + enumerate: পরিষ্কার এবং Pythonic
def indices_of(nums: list[int], target: int) -> list[int]:
return [i for i, x in enumerate(nums) if x == target]
🗣️ ৯. Live coding-এ কীভাবে কথা বলবেন
Coding screen শুধু কোড নয়, একটা communication পরীক্ষা। এই ধাপগুলো অনুসরণ করুন:
1. প্রশ্ন repeat করো + clarifying প্রশ্ন করো
("input কি sorted? duplicate থাকতে পারে? size কত বড়?")
2. একটা naive solution বলো (brute force) + তার complexity
3. optimize করার idea বলো, তারপর কোড লেখো
4. কোড লেখার সময় জোরে চিন্তা করো
5. একটা উদাহরণ দিয়ে dry-run করো (edge case সহ)
6. শেষে time/space complexity বলো
💼 Boss Question
Boss: "এই algorithm-টা তো Google-এ search করলেই পাওয়া যায়। interview-তে এমন প্রশ্ন করে কী লাভ?"
উত্তর: লাভ হলো — কোড লেখা নয়, চিন্তার প্রক্রিয়া দেখা। বাস্তব কাজে একজন engineer
রোজ নতুন সমস্যা পায় যার উত্তর Google-এ নেই। interviewer দেখতে চায়: তুমি কি প্রশ্ন স্পষ্ট করো, trade-off
নিয়ে ভাবো, ভুল ধরলে শুধরে নাও? এই soft-signal গুলোই একজন junior-কে team-ready প্রমাণ করে — সেটাই আসল business value।
🔎 ১০. Job Requirement Decoder
JD-তে প্রায়ই থাকে: "Strong Python fundamentals and problem-solving ability."
| প্রশ্ন | উত্তর |
| কী বোঝায়? | পরিষ্কার, correct Python লিখতে পারো এবং নতুন সমস্যা যুক্তি দিয়ে ভাঙতে পারো। |
| কেন চায়? | ML-এর চারপাশের ৮০% কাজই সাধারণ Python engineering। |
| কোন সমস্যা সমাধান করে? | ধীর, bug-ভরা, unmaintainable কোডের ঝুঁকি কমায়। |
| junior-এর কী জানা লাগে? | list/dict/set, complexity intuition, OOP basics, Pythonic idiom, edge case। |
| এখনই কী master লাগে না? | advanced DP, graph algorithm, competitive programming। |
| GitHub-এ কীভাবে দেখাবে? | পরিষ্কার src কোড, test, type hint — Series 10 E02-এর repo। |
| Interview-তে কী জিজ্ঞেস করতে পারে? | "এই list-এ duplicate?", "dict বনাম list কখন?", "এই code-এর complexity কত?" |
⚠️ ১১. সাধারণ ভুল
ভুল ১: চুপচাপ কোড লেখা। → ঠিক: জোরে চিন্তা করো, approach আগে বলো।
ভুল ২: clarifying প্রশ্ন না করে ধরে নেওয়া। → ঠিক: input/constraint স্পষ্ট করো।
ভুল ৩: complexity নিয়ে ধারণা নেই। → ঠিক: অন্তত O(n) vs O(n²) বলতে পারো।
ভুল ৪: edge case ভুলে যাওয়া (empty, একটা element)। → ঠিক: আগে থেকে ভাবো ও উল্লেখ করো।
ভুল ৫: সরাসরি optimal solution মুখস্থ বলা কিন্তু ব্যাখ্যা নেই। → ঠিক: কেন কাজ করে ব্যাখ্যা করো।
🎤 ১২. Interview Prep
প্রশ্ন ১: list আর set/dict-এ membership check-এ পার্থক্য কী?
উত্তর: list O(n), set/dict গড়ে O(1) (hashing); বড় data-তে বিশাল পার্থক্য।
প্রশ্ন ২: Python-এ mutable default argument কেন বিপজ্জনক?
উত্তর: default একবারই তৈরি হয়, সব call-এ shared; None ব্যবহার করে ভেতরে init করা উচিত।
প্রশ্ন ৩: sklearn-এ fit আর transform আলাদা কেন?
উত্তর: train data-তে fit করা parameter test-এ apply করতে; নাহলে data leakage হয়।
প্রশ্ন ৪: list comprehension কখন ব্যবহার করবে, কখন না?
উত্তর: সহজ transform/filter-এ ব্যবহার করো; জটিল nested logic হলে পরিষ্কার loop ভালো।
✍️ ১৩. হাতে-কলমে (Mini Exercise)
সময় ধরে (২০ মিনিট) সমাধান করো, জোরে চিন্তা করতে করতে:
১. একটা list-এ দুইটা সংখ্যা খুঁজে বের করো যাদের যোগফল target (two-sum) — O(n) solution লেখো।
২. একটা string-এ প্রতিটা character কতবার আছে বের করো।
৩. উপরের MinMaxScaler class-এ একটা inverse_transform method যোগ করো।
প্রতিটার শেষে নিজের কোডের time ও space complexity বলো।
🚀 ১৪. Project Connection
Flagship "Bangladesh Tech Career Assistant"-এ তুমি ইতিমধ্যে এই skill ব্যবহার করেছ:
job description থেকে skill count করা (dict/Counter), preprocessing function (পরিষ্কার Python),
একটা transformer/estimator class (OOP)। interview-তে coding প্রশ্নের উত্তর দেওয়ার সময় নিজের project
থেকে উদাহরণ টানলে সেটা অনেক বিশ্বাসযোগ্য শোনায় — "আমার career assistant-এ ঠিক এভাবেই skill frequency বের করেছি"।
📌 ১৫. সারসংক্ষেপ
এই Episode-এ আমরা শিখলাম:
✓ AI/ML role-এও coding screen থাকে — engineer আগে, তারপর ML
✓ তিন ধরন: data structure/algo, practical/Pythonic, OOP/design
✓ list O(n) বনাম set/dict O(1) — সঠিক structure বাছাই সবচেয়ে দামি
✓ fit/transform পার্থক্য = data leakage এড়ানো (ML + OOP একসাথে)
✓ mutable default argument-এর মতো Python gotcha জানা থাকা চাই
✓ Live coding = communication: প্রশ্ন করো, জোরে চিন্তা করো, complexity বলো
➡️ ১৬. পরবর্তী পর্বে কী শিখব
পরবর্তী Episode (S10E05): "ML ও Statistics Interview: overfitting, leakage, metrics,
feature engineering, probability"।
Coding round পার হলাম। এবার আসল ML round — যেখানে তোমার overfitting, data leakage, সঠিক metric আর
probability-র বোঝাপড়া যাচাই হবে। পরের পর্বে একটা model-answer সহ question bank তৈরি করব।