Phỏng vấn 6: kể chuyện patterns và SOLID
Luyện kể chuyện thiết kế: chọn pattern đúng, ánh xạ SOLID, refactor trước sau và trả lời chất vấn trade-off.
KhóDesign pattern ~90 phút
Ôn lại trước khi học
Giới thiệu
Bạn luyện kể chuyện thiết kế rõ ràng. Mỗi chuyện kể dưới 2 phút.
Kiến thức cần nhớ
Kể chuyện refactor
- Kể lại quyết định pattern trong dự án cũ.
- Khung 5 phần: bối cảnh, nỗi đau, lựa chọn, đánh đổi, bài học.
- Ví dụ đời thường: giống kể ca bệnh: triệu chứng, thuốc, tác dụng phụ.
- Thiếu phần đánh đổi là mất điểm nặng.
Chọn pattern mới
- Nghe tình huống mới rồi chọn pattern hợp.
- Mọi quyết định gắn tới một nguyên lý SOLID.
- Ví dụ đời thường: giống kê đơn phải đúng bệnh.
- Nói sai ánh xạ SOLID là mất điểm.
Trade-off và over-engineering
- Trade-off là giá phải trả của lựa chọn.
- Over-engineering là dùng pattern quá mức cần.
- Ví dụ đời thường: giống mang đại bác bắn chim sẻ.
- Luôn nêu nhược điểm trước khi giám khảo hỏi.
# ví dụ kể: trước rối, sau tách strategy
# trước: if bay == "canh": ... elif bay == "tenlua": ...
# sau: self.cach_bay.bay() # thay khối là xong
Ví dụ
- Chuyện đủ 5 phần -> đạt, thiếu đánh đổi -> fail.
- Mỗi quyết định gắn đúng nguyên lý SOLID -> đạt.
💻 Bài tập
Luyện phỏng vấn về thiết kế hướng đối tượng. Dùng stories.md ngày 118. Nộp vào day-166/.
Bài 1: Kể chuyện theo khung 5 phần
Viết lại 4 câu chuyện từ dự án của bạn (ưu tiên project ngày 116, 117, 125, 147-149) theo khung: bối cảnh, nỗi đau, lựa chọn, đánh đổi, bài học. Mỗi câu chuyện tối đa 250 từ và ánh xạ đúng 1-2 nguyên lý SOLID.
Bài 2: Thiết kế OOP tại chỗ
Mỗi đề 30 phút: hỏi làm rõ, liệt kê lớp và trách nhiệm, vẽ sơ đồ lớp, viết interface chính (không cần cài đặt đầy đủ), chỉ ra pattern dùng và không dùng.
- Bãi đỗ xe nhiều tầng: xe máy, ô tô, xe tải; tính tiền theo giờ; nhiều cổng vào ra.
- Thang máy cho tòa nhà 20 tầng, 4 thang.
- Máy bán hàng tự động nhiều loại hàng, nhiều cách thanh toán.
Bài 3: Phản biện (nâng cao)
- Với mỗi đề Bài 2, viết 1 phiên bản đơn giản hơn (ít lớp hơn) và so sánh: khi nào bản đơn giản tốt hơn.
- Trả lời 5 câu hỏi "bẫy":
- "Tại sao không dùng Singleton cho bãi đỗ xe?"
- "Thêm loại xe điện cần sạc thì sửa những gì?"
- "Interface này có vi phạm ISP không?"
- "Nếu 2 cổng cùng gán 1 chỗ đỗ thì sao?"
- "Pattern nào bạn đã dùng mà giờ thấy thừa?"
✅ Tiêu chí hoàn thành
- 4 câu chuyện đủ 5 phần, có ánh xạ SOLID.
- 3 thiết kế OOP có sơ đồ lớp và interface.
- Mỗi thiết kế có bản đơn giản hơn để so.
- 5 câu hỏi bẫy có câu trả lời dưới 80 từ.
❓ Câu hỏi ôn tập
- Khung kể chuyện có mấy phần?
- Phần nào giám khảo trông đợi nhất?
- Ánh xạ SOLID sai thì sao?
- Over-engineering là gì?
🌕 Bạn đã hoàn thành ngày 166. Làm hết bài tập phía trên rồi sang ngày tiếp theo.