Danh mục:

Dưới đây là bộ câu hỏi phỏng vấn tuyển dụng lập trình viên middle Web (cả frontend và backend), được chia theo các chủ đề quan trọng. Mỗi câu có kèm gợi ý hoặc đáp án ngắn gọn giúp bạn đánh giá ứng viên hoặc luyện tập:
## 1. Kiến thức chung về Web
1. HTTP và HTTPS khác nhau ở điểm nào?
- HTTPS dùng TLS/SSL để mã hóa dữ liệu, tăng bảo mật.
2. Các phương thức HTTP phổ biến là gì? Khác nhau thế nào?
- GET, POST, PUT, DELETE,...
- GET lấy dữ liệu, POST gửi dữ liệu, PUT cập nhật toàn bộ, PATCH cập nhật một phần, DELETE xóa.
3. Stateless nghĩa là gì trong giao tiếp HTTP?
- Mỗi request là độc lập, không lưu trạng thái giữa client-server.
## 2. Backend (Java, Node.js, Python, v.v.)
4. ORM là gì? Ưu điểm và nhược điểm?
- ORM (Object-Relational Mapping) ánh xạ object thành bảng DB.
- Ưu: dễ phát triển, code rõ ràng. Nhược: khó tối ưu truy vấn phức tạp.
5. Sự khác nhau giữa Monolithic và Microservices?
- Monolithic: toàn bộ ứng dụng là một khối.
- Microservices: chia nhỏ thành các service độc lập.
6. Explain the N+1 problem in ORM and how to solve it.
- Khi truy vấn nhiều bản ghi và truy vấn thêm các quan hệ, gây ra nhiều query.
- Cách giải quyết: eager loading, fetch join, batch fetching.
7. CORS là gì? Khi nào gặp lỗi CORS?
- Cross-Origin Resource Sharing. Khi frontend và backend khác domain, trình duyệt sẽ chặn nếu không được cấp phép.
8. JWT hoạt động thế nào?
- Token gồm 3 phần: header, payload, signature. Token được backend ký và client gửi lại trong request.
## 3. Frontend (HTML, CSS, JavaScript, Frameworks)
9. Sự khác biệt giữa var, let và const trong JavaScript?
- var: function scope, hoisting.
- let, const: block scope. const không thể gán lại.
10. Virtual DOM là gì (React)?
- Cấu trúc DOM ảo dùng để so sánh và cập nhật DOM thật một cách hiệu quả.
11. SSR và CSR khác nhau thế nào?
- SSR (Server-side Rendering): render ở server, SEO tốt.
- CSR (Client-side Rendering): render ở client, nhanh khi đã load.
12. Bạn xử lý form validation thế nào trên frontend?
- Dùng HTML5 validation, JavaScript kiểm tra hoặc dùng thư viện như Formik, Yup (React).
## 4. Bảo mật Web
13. Các lỗ hổng phổ biến: XSS, CSRF, SQL Injection là gì?
- XSS: chèn mã JS. CSRF: giả request từ người dùng. SQL Injection: chèn câu lệnh SQL độc hại.
14. Cách phòng tránh SQL Injection?
- Dùng prepared statements, ORM an toàn, không nối chuỗi SQL thủ công.
15. Bạn sẽ bảo vệ API như thế nào?
- Dùng token (JWT), xác thực OAuth2, rate limiting, CORS, HTTPS.
## 5. DevOps & Triển khai
16. CI/CD là gì? Bạn dùng công cụ nào?
- CI: tự động build/test. CD: tự động triển khai.
- Jenkins, GitHub Actions, GitLab CI, CircleCI,…
17. Bạn triển khai ứng dụng web như thế nào?
- Docker container, deploy lên cloud (AWS, GCP, Railway,…), cấu hình reverse proxy (Nginx).
18. Log và giám sát ứng dụng nên làm thế nào?
- Dùng ELK Stack, Prometheus + Grafana, hoặc tích hợp APM như New Relic, Datadog.
## 6. Kiến thức hệ thống
19. Caching là gì? Dùng khi nào?
- Lưu trữ tạm thời để giảm tải và tăng tốc độ. Dùng Redis, Memcached, HTTP Cache,…
20. Load Balancer là gì? Có những loại nào?
- Phân phối tải giữa nhiều server. Có layer 4 (TCP) và layer 7 (HTTP).
## 7. Tư duy lập trình / Coding
21. Bạn sẽ tối ưu đoạn code duyệt danh sách và tìm phần tử như thế nào?
- Dùng Map/Set thay vì vòng lặp lồng nhau nếu có thể, phân tích độ phức tạp.
22. Kể một ví dụ bug khó bạn từng xử lý và cách giải quyết.
23. Giải thích SOLID và áp dụng trong thực tế?
Chúc bạn may mắn!