Bộ câu hỏi luyện vấn đáp
Mỗi câu nên trả lời theo mẫu: người dùng làm gì -> frontend gọi gì -> backend xử lý gì -> database lưu gì -> quyền/test nào bảo vệ . Nếu bị bí, mở link ở cột cuối.
Kiến trúc và công nghệ
Câu hỏi
Ý chính cần trả lời
Mở thêm
Dự án LMS Hàng Hải dùng những công nghệ chính nào?
Java/Spring Boot, Angular, PostgreSQL/Flyway, Docker/Caddy, R2, Shaka, PWA/Dexie.
Câu hỏi bảo vệ
Vì sao backend không viết tất cả vào controller?
Controller chỉ nhận request; use case giữ nghiệp vụ; repository adapter lo DB.
Backend
DDD/Clean Architecture giúp gì khi sửa code?
Giảm coupling, dễ test, dễ đổi storage/JPA/API mà không phá domain.
Backend
Domain model khác JPA entity thế nào?
Domain là nghiệp vụ thuần; JPA entity là persistence object.
Thuật ngữ
Nếu gặp lỗi Not a managed type thì nguyên nhân thường là gì?
Spring Data JPA repository trỏ nhầm domain model thay vì *JpaEntity.
Troubleshooting
Vì sao dùng Flyway thay vì chỉ ddl-auto update?
Schema có version, review được migration, production ổn định hơn.
Database
Chạy local và sửa code
Câu hỏi
Ý chính cần trả lời
Mở thêm
Muốn chạy backend local thì làm gì?
Copy env dev, chạy Docker compose db/backend, kiểm /actuator/health.
Chạy local
Muốn chạy frontend local thì làm gì?
cd fe, npm install, npm start, mở port 4200.
Chạy local
Docs đang chạy ở port nào?
Host mở 4010, container Jekyll dùng port trong 4000.
Chạy local
Nếu port 8088 không phải backend LMS thì kiểm gì?
Chạy docker ps xem container nào đang chiếm port.
Chạy local
Thầy bảo đổi màu nút thì mở đâu?
Component/template/SCSS, global style/design token nếu là màu chung.
Vị trí file code
Thầy bảo đổi logic submit course thì mở đâu?
Route/component/service frontend, controller, use case, repository/migration nếu đụng DB.
Vị trí file code
Course authoring và publication
Câu hỏi
Ý chính cần trả lời
Mở thêm
Teacher tạo course đi qua những bảng nào?
courses, chapters, lessons, sections, attachment tables.
Luồng nghiệp vụ
Vì sao learner không đọc draft course?
Draft có thể đang sửa; learner đọc snapshot đã duyệt trong course_publications.
Publication
Submit for approval khác approve thế nào?
Teacher gửi duyệt; Admin/ORG_ADMIN duyệt và tạo/cập nhật publication.
Publication
Course đã approved nhưng thêm video mới student chưa thấy, vì sao?
Learner đọc publication snapshot; cần submit/approve lại để snapshot cập nhật.
Troubleshooting
content_blocks là bảng hay cột?
Là cột JSONB trong lessons và questions, không phải bảng riêng.
Thuật ngữ
Database
Câu hỏi
Ý chính cần trả lời
Mở thêm
Database hiện có bao nhiêu bảng?
78 application tables, 2 materialized views, 107 migration SQL files.
SQL schema catalog
Vì sao V135 không có nghĩa là 135 bảng hoặc 135 file?
Migration version có gap và có V54.1; số file thực tế là 107.
Database
DBeaver chụp database tổng nên chụp gì?
Schema public, ERD theo domain hoặc toàn schema; bỏ qua flyway_schema_history khi đếm nghiệp vụ.
Database
Bảng payment chính là gì?
payment_transactions.
SQL schema catalog
Bảng progress lesson chính là gì?
student_lesson_progress.
SQL schema catalog
Bảng video chính là gì?
video_assets, video_renditions, video_ingest_jobs.
SQL schema catalog
Auth, roles và permission
Câu hỏi
Ý chính cần trả lời
Mở thêm
Có những role nào?
ADMIN, ORG_ADMIN, TEACHER, STUDENT.
Roles
ORG_ADMIN khác ADMIN thế nào?
ORG_ADMIN vận hành/review/user teacher-student; ADMIN giữ quyền system-only.
Câu hỏi bảo vệ
Frontend guard có đủ bảo mật không?
Không, frontend guard chỉ UX; backend vẫn kiểm quyền cuối cùng.
Roles
Ownership guard dùng để làm gì?
Chặn user sửa dữ liệu không thuộc quyền hoặc ngoài phạm vi quản lý.
Roles
Student learning, offline và video
Câu hỏi
Ý chính cần trả lời
Mở thêm
Student học bài thì dữ liệu nào được cập nhật?
Enrollment/progress/video progress/quiz attempt/assignment submission tùy hoạt động.
Luồng nghiệp vụ
Offline/PWA hoạt động thế nào?
Service worker cache app shell; IndexedDB/Dexie lưu dữ liệu học và queue sync.
Video và offline
Shaka Player dùng để làm gì?
Phát HLS/DASH, hỗ trợ adaptive streaming.
Video và offline
ABR là gì?
Adaptive bitrate, tự chọn chất lượng video theo mạng/thiết bị.
Thuật ngữ
Video lớn có làm nghẽn backend không?
File nằm ở storage, ingest qua worker; web backend không stream file nặng lâu dài.
Runtime
Nếu offline sync lỗi thì kiểm đâu?
IndexedDB/Dexie schema, offline sync service, network/API logs.
Troubleshooting
Assessment và grading
Câu hỏi
Ý chính cần trả lời
Mở thêm
Quiz dùng các bảng nào?
quizzes, questions, question_options, quiz_questions, quiz_attempts.
Assessment
Assignment dùng các bảng nào?
assignments, assignment_submissions, assignment_attachments, assignment_rubrics.
Assessment
Rubric là gì?
Bộ tiêu chí/thang điểm để chấm assignment.
Thuật ngữ
Vì sao cần grading audit?
Truy vết thay đổi điểm và người chấm.
SQL schema catalog
Wiii có được tự submit quiz hoặc grade không?
Không, đây là dangerous mutation.
Wiii
Payment và doanh thu
Câu hỏi
Ý chính cần trả lời
Mở thêm
Payment flow đi như thế nào?
Tạo transaction, redirect/callback VNPay hoặc webhook SePay, xác nhận, kích hoạt quyền/enrollment.
Payment
Vì sao không tin giá từ frontend?
Frontend có thể bị sửa; backend phải tính/validate amount từ course/config.
Câu hỏi bảo vệ
Refund/payout là vùng rủi ro gì?
Mutate tiền và quyền lợi, cần admin boundary/audit, không để AI tự làm.
Payment
Wiii có được click payment/refund không?
Không. Payment/refund/payout nằm trong danh sách action nguy hiểm.
Wiii
Wiii và AI safe action
Câu hỏi
Ý chính cần trả lời
Mở thêm
data-wiii-id dùng để làm gì?
DOM target ổn định cho Wiii/Pointy nhận diện.
Wiii
data-wiii-click-safe dùng khi nào?
Chỉ gắn true cho điều hướng/hành động an toàn.
Wiii
Preview/diff trước apply để làm gì?
User kiểm nội dung AI sinh trước khi mutate LMS.
Luồng nghiệp vụ
Wiii không được tự làm gì?
Submit quiz, delete, publish, enroll, grade, payment, refund, payout.
Câu hỏi bảo vệ
Nếu Wiii cần đổi contract thì làm gì?
Không sửa Wiii trực tiếp trong LMS; comment/sync đúng issue/contract.
Wiii
Load, DDoS và scale
Câu hỏi
Ý chính cần trả lời
Mở thêm
Web chịu được bao nhiêu người cùng lúc?
Không trả lời tuyệt đối khi chưa load test; cần kịch bản và metric thật.
Câu hỏi bảo vệ
20.000 người cùng lúc cần kiểm gì?
DB pool/query/index, cache, CPU/RAM, CDN/static/video offload, rate limit.
Runtime
500.000 người cùng lúc cần gì?
Scale ngang, CDN/edge, queue, managed DB/read replica, DDoS protection, load test.
Câu hỏi bảo vệ
Vì sao video/storage tách khỏi backend có lợi?
Giảm tải CPU/network cho web backend, dùng object storage/CDN/worker.
Video và offline
Câu hỏi kết luận
Câu hỏi
Ý chính cần trả lời
Mở thêm
Điểm mạnh nhất của hệ thống là gì?
Có đủ authoring, publication approval, learning, assessment, payment, video/offline, Wiii safety.
Ma trận bao phủ
Nếu được refactor tiếp, ưu tiên gì?
Dựa vào evidence: test/load test, docs sync, CI, schema/API ownership; không nói chung chung.
Troubleshooting
Nếu thầy hỏi một file lạ, em tìm thế nào?
Dùng docs search, Full CodeMap, rg, rồi đi từ route/API/controller/use case/table.
Vị trí file code