Để giúp các bạn đánh giá chính xác năng lực của mình, đồng thời cũng giúp công ty xây dựng kế hoạch sử dụng, phát triển năng lực của các bạn, chúng tôi có một bài kiểm tra năng lực nhỏ.
Dưới đây là mô tả yêu cầu của tính năng:
- Về mặt thực tế, thẻ tích điểm là thứ chủ shop in ra sau đó phát cho người mua.
- Về mặt hệ thống, là đối tượng ghi nhận các thông tin ưu đãi của người mua.
- Thông tin chi tiết:
Trường thông tin | Mô tả | Thuộc tính |
---|---|---|
ID | Số ID của thẻ tích điểm do hệ thống tự sinh ra khi một thẻ tích điểm được khởi tạo thành công | Là trường số Trường thông tin bắt buộc Trường thông tin không được trùng lặp |
Mã thẻ | Dãy ký tự định danh thẻ tích điểm Thông tin này do client truyền xuống khi tạo thẻ, nếu client không truyền hoặc truyền = null thì hệ thống tự sinh mã theo quy tắc sau Lấy 2 ký tự LT ghép với mã id của thẻ Ví dụ: LT0001 |
Là dãy ký tự thuộc bộ mã code - 128 Độ dài trong khoảng 10-20 ký tự Trường thông tin bắt buộc và không được trùng lặp |
Số điện thoại khách hàng | Số điện thoại của khách hàng do client truyền xuống khi tạo thẻ | Là trường số thuộc tập từ 0-9 Độ dài trong khoảng 10-25 ký tự Trường thông tin bắt buộc và không được trùng lặp |
Hạng thẻ | Trường thông tin quy định hạng thẻ Lấy thông tin từ đối tượng hạng thẻ mục 2 Mỗi một thẻ tích điểm chỉ có thể nằm trong 1 hạng thẻ |
Trường thông tin không bắt buộc |
Số điểm | Số điểm tích từ các giao dịch mua hàng | Là trường số Có thể lẻ đến 2 chữ số sau dấu thập phân Có thể âm |
Doanh thu | Lượng doanh thu tính từ các giao dịch mua hàng | Là trường số Có thể âm |
Ngày bắt đầu | Ngày bắt đầu dùng được thẻ để giao dịch, tính từ ngày bắt đầu thẻ lên hạng | Trường thời gian |
Ngày kết thúc | Ngày hết hiệu lực giao dịch của thẻ, tính từ ngày bắt đầu + với thời hạn của hạng thẻ | Trường thời gian |
Ngày tạo | Ngày tạo thẻ | Trường thời gian |
Ngày cập nhật | Ngày cập nhật cuối cùng của thẻ | Trường thời gian |
- Là trường để phân loại thẻ tích điểm, với các hạng khác nhau, khách hàng sẽ có các ưu đãi riêng.
- Thông tin chi tiết:
Trường thông tin | Mô tả | Thuộc tính |
---|---|---|
ID | Số ID của hạng thẻ do hệ thống tự sinh ra khi một thẻ tích điểm được khởi tạo thành công | Là trường số Trường thông tin bắt buộc Trường thông tin không được trùng lặp |
Tên hạng thẻ | Tên của hạng thẻ Ví dụ : Thẻ bạc, thẻ vàng.. |
Là trường text Không bắt trùng Giới hạn tối đa 50 ký tự Trường thông tin bắt buộc |
Doanh thu lên hạng | Số tiền mà một thẻ tích điểm cần đạt được để lên hạng | Là trường số Giá trị nằm trong khoảng 0 - 9,999,999,999 |
Thời hạn | Thời hạn hiệu lực của một hạng thẻ | Tính theo ngày. Ví dụ : 100 ngày, 360 ngày. 7 ngày... |
Chiết khấu % | Ưu đãi cho người mua khi thẻ tích điểm của họ nằm trong hạng này | Là trường số Giá trị nằm trong khoảng 0-100 |
Ngày tạo | Ngày tạo thẻ | Trường thời gian |
Ngày cập nhật | Ngày cập nhật cuối cùng của thẻ | Trường thời gian |
- Thiết lập tỷ lệ quy đổi từ doanh thu ra điểm.
- Thông tin chi tiết:
Trường thông tin | Mô tả | Thuộc tính |
---|---|---|
Config | Dùng để quy đổi điểm từ doanh thu mua hàng | 1 điểm = {x} vnđ X là giá trị doanh thu mà người dùng thiết lập Mặc định = 0 |
- Các giao dịch tăng/ giảm điểm hoặc doanh thu tác động lên thẻ tích điểm của khách hàng.
- Thông tin chi tiết:
Trường thông tin | Mô tả | Thuộc tính |
---|---|---|
ID | Số ID của giao dịch do hệ thống tự sinh ra khi một hành động tích điểm được ghi nhận | Là trường số Trường thông tin bắt buộc Trường thông tin không được trùng lặp |
ID thẻ tích điểm | Đánh dấu cho giao dịch ứng với thẻ tích điểm nào | Là trường thông tin ID do client truyền vào Phải là ID tồn tại trên hệ thống |
Số điểm điều chỉnh | Số điểm điều chỉnh mà mỗi giao dịch tác động lên thẻ tích điểm Transaction cần dựa vào giá trị doanh thu của client truyền xuống, sau đó check config để quy ra điểm điều chỉnh Ví dụ : + 10, -10... |
Là trường số Trường thông tin bắt buộc Giá trị nằm trong khoảng -9,999,999,999 đến 9,999,999,999 |
Số doanh thu điều chỉnh | Giá trị doanh thu điều chỉnh mà mỗi giao dịch tác động lên thẻ tích điểm Khi doanh thu điều chỉnh tác động lên doanh thu tích điểm của thẻ tích điểm vượt qua các ngưỡng của hạng thẻ thì sẽ cập nhật hạng thẻ ( Có thể lên hạng hoặc xuống hạng ) |
Là trường số Trường thông tin bắt buộc Giá trị nằm trong khoảng -9,999,999,999 đến 9,999,999,999 |
Ngày tạo | Ngày tạo ra bản ghi ghi nhận điểm và doanh thu | Trường thời gian |
-
Viết API cho phép chỉnh sửa cấu hình tích điểm lưu trữ vào database.
-
Giả sử hệ thống tại 1 thời điểm phải xử lý rất nhiều giao dịch tại 1 thời điểm (giao dịch được phát sinh liên tục), hãy viết API để ghi nhận lại các giao dịch, đồng thời xử lý tích điểm cho khách hàng, thay đổi thông tin hạng thẻ của khách hàng tương ứng.
-
Viết unit test với tập dữ liệu mô tả trong file excel (data.xlsx).
-
Tuỳ chọn trả lời một số câu hỏi bổ sung sau:
- Nếu giao dịch được tổng hợp từ các hệ thống khác và định kỳ được tải lên hệ thống tích điểm, thì xử lý như thế nào trong trường hợp cấu hình quy đổi điểm bị thay đổi giữa các lần giao dịch của khách hàng.
VD: Khách hàng có 3 giao dịch mua hàng vào buổi sáng, và 2 giao dịch vào buổi chiều cùng ngày. Cấu hình quy đổi điểm được thay đổi vào 12h trưa ngày hôm đó. 22h cuối ngày thì dữ liệu mới được tổng hợp về hệ thống tích điểm. - Để tăng hiệu năng hệ thống khi có rất nhiều giao dịch của nhiều khách hàng đồng thời thì có giải pháp nào không?
- Nếu giao dịch được tổng hợp từ các hệ thống khác và định kỳ được tải lên hệ thống tích điểm, thì xử lý như thế nào trong trường hợp cấu hình quy đổi điểm bị thay đổi giữa các lần giao dịch của khách hàng.
- Nếu bạn dùng mysql/sql server/postgresql,v..v... xin hãy gửi cho chúng tôi schema của bạn.
- Bạn vui lòng mô tả chúng tôi biết từng bước để chạy được từng ý của bài tập.
- Đẩy dự án lên Git và gửi đường link cho chúng tôi theo địa chỉ tuyendung@sapo.vn