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

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 countlist/dict/set, complexity ধারণা
Practical/PythonicCSV 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 যা খোঁজে

# 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 তৈরি করব।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.