Kể chuyện patterns và SOLID khi phỏng vấn
Ôn thi phỏng vấn patterns: kể SimUDuck Weather Starbuzz trong hai phút, trả lời khi nào dùng và so sánh cặp đôi dễ nhầm.
KhóDesign pattern ~60 phút
Ôn lại trước khi học
Giới thiệu
Bài này luyện kể chuyện thiết kế trong 2 phút. Dùng để qua vòng phỏng vấn pattern khó nhằn.
Kiến thức cần nhớ
Khung trả lời 4 nhịp
- Nhịp 1: nỗi đau gặp ở đâu trong dự án.
- Nhịp 2: 2 cách đầu và vì sao hỏng.
- Nhịp 3: pattern chọn với vai và quan hệ.
- Ví dụ đời thường: như kể bệnh, thuốc thử, thuốc chốt.
- Nhịp 4: đánh đổi và khi nào không dùng.
Ba chuyện thuộc lòng
- SimUDuck cho Strategy: vịt cao su biết bay sai.
- Tách bay kêu rồi ủy thác, đổi tên lửa lúc chạy.
- Trạm thời tiết cho Observer: thêm bảng không sửa trạm.
- Ví dụ đời thường: như 3 chuyện tủ mang đi thi.
- Starbuzz cho Decorator: bọc cộng giá thay bùng lớp.
| Cặp dễ nhầm | Khác ở | Nhớ bằng |
|---|---|---|
| Strategy-State | Ai quyết đổi | Ngoài hay trong |
| Decorator-Proxy | Thêm hay chặn | Làm thêm hay gác cổng |
| Adapter-Facade | Dịch 1 hay gom hệ | Phiên dịch hay lễ tân |
| Factory 2 loại | 1 món hay cả họ | Món lẻ hay combo |
SOLID gọn
- Đơn trách nhiệm: 1 lớp chỉ 1 lý do đổi.
- Đóng mở: thêm mới không sửa cũ đang chạy.
- Thay thế: lớp con dùng được chỗ lớp cha.
- Ví dụ đời thường: như dao chỉ cắt, không kiêm nĩa.
Ví dụ
- Input: "Khi nào dùng Strategy?" -> Output: kể SimUDuck 4 nhịp 2 phút.
- Giải thích: đủ đau, hỏng, chọn, đánh đổi là đạt điểm.
# Khung kể 2 phút cho mọi pattern
tra_loi = [noi_dau, cach_hong, pattern_chon, danh_doi]
print(len(tra_loi) == 4) # đủ 4 nhịp
💻 Bài tập
Không cần code mới. Dùng code các ngày trước làm ví dụ. Nộp vào day-118/ gồm file Markdown và bản ghi âm hoặc video.
Bài 1: Kể chuyện 4 nhịp
Viết stories.md gồm 6 câu chuyện, mỗi câu chuyện tối đa 200 từ, đúng 4 nhịp:
- Nỗi đau gặp ở đâu (bối cảnh có số liệu: bao nhiêu lớp, bao nhiêu file phải sửa).
- Hai cách đầu tiên và vì sao hỏng.
- Pattern chọn: vai trò các lớp và quan hệ (kèm sơ đồ 5-10 dòng Mermaid).
- Đánh đổi và khi nào không dùng.
Pattern bắt buộc: Strategy, Observer, Decorator, Factory Method, Command, State. Ví dụ lấy từ code chính bạn đã viết (ghi đường dẫn file).
Bài 2: Luyện nói
- Tự ghi âm kể 3 câu chuyện, mỗi câu tối đa 2 phút. Nghe lại và ghi chú: chỗ ấp úng, chỗ dùng thuật ngữ sai, chỗ quá dài.
- Kể lại lần 2, so thời lượng.
Bài 3: Câu hỏi phỏng vấn thường gặp (nâng cao)
Viết câu trả lời ngắn (tối đa 80 từ) cho 10 câu:
- Strategy khác State ở đâu?
- Decorator khác Proxy ở đâu?
- Adapter khác Facade ở đâu?
- Khi nào Singleton là anti-pattern?
- Factory Method khác Abstract Factory ở đâu?
- SOLID chữ nào bạn hay vi phạm nhất? Ví dụ.
- Composition over inheritance nghĩa là gì? Ví dụ trong code của bạn.
- Observer có nhược điểm gì với hệ thống lớn?
- Pattern nào bạn thấy bị lạm dụng nhiều nhất?
- Kể 1 lần bạn gỡ bỏ một pattern vì nó thừa.
✅ Tiêu chí hoàn thành
-
stories.mdđủ 6 câu chuyện, mỗi câu dưới 200 từ, có sơ đồ và đường dẫn code. - Có 2 lần ghi âm và ghi chú cải thiện.
- 10 câu trả lời dưới 80 từ mỗi câu.
- Mỗi câu chuyện có nhịp 4 "khi nào không dùng".
❓ Câu hỏi ôn tập
- 4 nhịp trả lời là gì?
- SimUDuck đau ở đâu?
- Decorator khác Proxy sao?
- 2 Factory khác nhau gì?
🌕 Bạn đã hoàn thành ngày 118. Làm hết bài tập phía trên rồi sang ngày tiếp theo.