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

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.

  1. 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.
  2. Thang máy cho tòa nhà 20 tầng, 4 thang.
  3. 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)

  1. 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.
  2. 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

  1. Khung kể chuyện có mấy phần?
  2. Phần nào giám khảo trông đợi nhất?
  3. Ánh xạ SOLID sai thì sao?
  4. 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.

Bớt paste mù, hiểu sâu từng dòng mình viết.

180 Days Challenge. 180 ngày cai nghiện vibe code.