Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Nhiều bạn nghĩ thiết kế hệ thống chỉ dành cho vị trí senior. Thực tế, các công ty cũng thường hỏi những bài thiết kế quy mô nhỏ với junior để xem cách bạn suy nghĩ về bức tranh tổng thể. Bạn không cần biết mọi công nghệ, chỉ cần một quy trình rõ ràng và hiểu vài khối xây dựng cơ bản.
Yêu cầu: người dùng nhập một đường dẫn dài, hệ thống trả về đường dẫn ngắn; khi ai đó truy cập đường dẫn ngắn, hệ thống chuyển hướng đến đường dẫn gốc.
POST /api/links { "url": "https://example.com/rat-dai" }-> 201 { "short": "https://sho.rt/aB3dE9" }GET /aB3dE9-> 302 Location: https://example.com/rat-daiMột bảng đơn giản là đủ: mã ngắn (khóa chính), URL gốc, thời điểm tạo, thời điểm hết hạn (tùy chọn), người tạo (tùy chọn). Truy vấn chính là tìm theo mã ngắn nên cần chỉ mục hoặc khóa chính trên cột này.
Có ba hướng thường gặp:
const ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';function toBase62(n) { if (n === 0) return '0'; let s = ''; while (n > 0) { s = ALPHABET[n % 62] + s; n = Math.floor(n / 62); } return s;}console.log(toBase62(125)); // 21Với 6 ký tự trong bảng 62 ký tự, ta có khoảng 56 tỉ tổ hợp, thừa sức cho nhiều ứng dụng nhỏ và vừa.
Vì lượt đọc rất nhiều, việc dùng bộ nhớ đệm như Redis để lưu ánh xạ mã ngắn sang URL gốc giúp giảm tải cơ sở dữ liệu đáng kể. Cách làm: khi nhận yêu cầu, kiểm tra cache trước; nếu không có, truy vấn cơ sở dữ liệu rồi ghi vào cache với thời gian sống hợp lý. Một số đường dẫn rất phổ biến sẽ luôn nằm trong cache.
301 là chuyển hướng vĩnh viễn, trình duyệt có thể nhớ nên giảm tải cho hệ thống nhưng bạn khó thống kê lượt nhấn. 302 là tạm thời, mỗi lần nhấn đều đi qua máy chủ nên thống kê chính xác hơn. Đây là một đánh đổi điển hình để nêu ra.
Bắt đầu bằng thiết kế đơn giản chạy được, sau đó hỏi: điều gì hỏng đầu tiên khi lượng người dùng tăng gấp mười? Có thể là cơ sở dữ liệu (thêm bản sao đọc, phân mảnh dữ liệu), máy chủ ứng dụng (thêm máy phía sau load balancer) hoặc bộ đếm sinh mã (cần phân phối khoảng giá trị cho từng máy chủ). Hãy trình bày các đánh đổi thay vì khẳng định một đáp án duy nhất.
Với junior, người phỏng vấn đánh giá tư duy hệ thống hơn là kiến thức quy mô lớn. Hãy luyện vài bài như rút gọn URL, hệ thống ghi chú, tin nhắn đơn giản, và ghi lại quy trình bốn bước để áp dụng mỗi lần.
Để nắm vững nền tảng backend, cơ sở dữ liệu và triển khai ứng dụng, bạn có thể xem các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment