Phỏng vấn vị trí kỹ sư phần mềm thường không thể thiếu các câu hỏi hóc búa về SQL và Cơ sở dữ liệu. Bài viết này vạch ra lộ trình 7 ngày tinh gọn giúp bạn hệ thống hóa kiến thức trọng tâm, tự tin chinh phục nhà tuyển dụng.
Ngày 1 & 2: Truy vấn nâng cao, JOIN và Window Functions
Phần lớn các buổi phỏng vấn SQL trực tiếp (live coding) đều bắt đầu bằng việc viết câu lệnh truy vấn từ đơn giản đến phức tạp. Bạn cần nắm vững các loại JOIN, cách xử lý NULL và đặc biệt là các hàm cửa sổ (Window Functions).
Thay vì chỉ dùng GROUP BY, nhà tuyển dụng rất thích hỏi về ROW_NUMBER(), RANK(), DENSE_RANK(), và các hàm phân tích chuỗi thời gian như LAG() hoặc LEAD(). Hãy luyện tập thuần thục trên các nền tảng như LeetCode hoặc HackerRank.
- Phân biệt rõ INNER JOIN, LEFT/RIGHT JOIN và FULL OUTER JOIN cùng các trường hợp bẫy với điều kiện ON và WHERE.
- Hiểu sâu về cú pháp OVER (PARTITION BY ... ORDER BY ...) của Window Functions.
- Thực hành tối thiểu 15 bài Medium trên LeetCode ở chủ đề Database.
Ngày 3: Hiệu năng câu lệnh và Indexing
Khi dữ liệu lớn, một câu lệnh SQL chạy đúng logic chưa đủ mà phải chạy nhanh. Đây là lúc kiến thức về Indexing và Execution Plan đóng vai trò quyết định trong phần phỏng vấn.
Bạn cần hiểu sâu về cấu trúc dữ liệu B-Tree, sự khác nhau giữa Clustered Index và Non-Clustered Index, cũng như khái niệm Index Scan và Index Seek. Đừng quên ôn lại các tình huống gây ra việc mất index (Index Scan do dùng hàm ở cột điều kiện, phép toán NOT IN, v.v.).
- Nắm vững nguyên lý hoạt động của B-Tree Index và Composite Index (quy tắc Leftmost Prefix).
- Biết cách đọc cơ bản Execution Plan để tìm điểm nghẽn (bottleneck).
- Hiểu rõ khi nào nên và không nên tạo index để tránh làm chậm thao tác Write (INSERT/UPDATE/DELETE).
Ngày 4: Transaction, ACID và Isolation Levels
Các câu hỏi về tính toàn vẹn dữ liệu và concurrency luôn là điểm phân loại ứng viên Senior hay Junior. Bạn phải nằm lòng các thuộc tính ACID và các mức cô lập giao dịch (Isolation Levels).
Hãy chuẩn bị sẵn ví dụ thực tế để giải thích các hiện tượng tranh chấp dữ liệu kinh điển và cách mà các mức cô lập (Read Uncommitted, Read Committed, Repeatable Read, Serializable) giải quyết chúng bằng Locking hoặc MVCC (Multi-Version Concurrency Control).
- Định nghĩa chuẩn xác 4 đặc tính ACID trong hệ CSDL quan hệ.
- Phân biệt chi tiết: Dirty Read, Non-Repeatable Read, Phantom Read.
- Hiểu cách PostgreSQL hoặc MySQL (InnoDB) ứng dụng MVCC để tối ưu hiệu suất đọc ghi đồng thời.
Ngày 5: Thiết kế cơ sở dữ liệu và Chuẩn hóa (Normalization)
Ở vòng thiết kế hệ thống hoặc thiết kế database, bạn sẽ được yêu cầu xây dựng lược đồ cho một bài toán thực tế (ví dụ: hệ thống e-commerce, mạng xã hội).
Bạn cần nắm vững các dạng chuẩn hóa từ 1NF đến 3NF/BCNF, biết cách thiết kế quan hệ One-to-Many, Many-to-Many, và khi nào nên phi chuẩn hóa (Denormalization) để tối ưu hiệu năng đọc.
- Nắm chắc các quy tắc chuẩn hóa dữ liệu để tránh dư thừa và dị thường (anomaly).
- Biết cách thiết kế bảng trung gian (junction table) cho quan hệ Many-to-Many.
- Cân nhắc đánh đổi giữa tính nhất quán (normalization) và tốc độ truy vấn (denormalization).
Ngày 6: NoSQL, Caching và Replication/Sharding cơ bản
Phỏng vấn hiện đại không chỉ giới hạn ở SQL truyền thống. Bạn cần có cái nhìn tổng quan về các hệ cơ sở dữ liệu phi quan hệ và các mô hình mở rộng quy mô.
Hãy ôn tập lý thuyết về CAP Theorem (Consistency, Availability, Partition Tolerance), sự khác biệt giữa Document Store (MongoDB), Key-Value (Redis), và khi nào nên dùng Sharding hay Replication (Master-Slave).
- Hiểu rõ định lý CAP Theorem và cách các hệ thống CSDL đánh đổi giữa Consistency và Availability.
- Phân biệt Horizontal Scaling (Sharding) và Vertical Scaling.
- Ứng dụng Redis làm Cache Layer để giảm tải cho Database chính.
Ngày 7: Tổng ôn, Mock Interview và Xử lý tình huống
Ngày cuối cùng không phải là lúc học kiến thức mới, mà là thời gian để tổng hợp và luyện tập phản xạ phỏng vấn.
Hãy tự đặt câu hỏi hoặc cùng bạn bè thực hiện mock interview. Tập trung vào cách bạn tư duy giải quyết vấn đề: làm rõ yêu cầu, đưa ra giải pháp ngây thơ trước, sau đó tối ưu hóa và thảo luận về các góc khuất (edge cases) như dữ liệu lớn, độ trễ mạng hoặc lỗi phần cứng.
- Ôn lại các ghi chú (cheat sheet) về cú pháp SQL và các lỗi hay gặp.
- Luyện tập kỹ thuật nói to suy nghĩ của mình (out loud thinking) khi làm bài code trực tiếp.
- Chuẩn bị sẵn 1-2 câu hỏi thông minh để hỏi lại nhà tuyển dụng về kiến trúc database của họ.
Ghi nhớ nhanh
- Chia nhỏ 7 ngày ôn tập theo các chủ đề chuyên sâu từ cơ bản đến nâng cao: SQL nâng cao, Index, ACID, Thiết kế CSDL và NoSQL.
- Luôn kết hợp lý thuyết với việc thực hành code trực tiếp để không bị lúng túng ở vòng live coding.
- Hiểu sâu bản chất cơ chế bên dưới (như B-Tree, MVCC, Execution Plan) thay vì chỉ học thuộc lòng cú pháp.
- Rèn luyện kỹ năng giao tiếp và giải thích giải pháp rõ ràng trong quá trình phỏng vấn.