Learning Outcome & Exercises: Networking & Web server
Tổng kết chương Networking & Web server: học xong mình phải làm được gì, và làm bài tập nào để chứng minh?
Đọc hiểu chưa đủ để đi phỏng vấn. Mỗi chương kết thúc bằng những việc làm được và chứng minh được: có code chạy, có test cho cả trường hợp lỗi, có log hoặc số đo. Bài tập nằm trong repo riêng java-backend-interview-labs, thư mục labs/networking.
1. Mục tiêu đầu ra
Học xong chương này, bạn tự làm được:
- Lần theo một request bằng curl -v, dig và ss để chỉ ra DNS, TCP, TLS, HTTP.
- Dựng Nginx reverse proxy trước Spring Boot với timeout và header X-Forwarded-*.
- Phân biệt connect timeout, read timeout và timeout của từng tầng.
2. Basic: Giải phẫu request
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
curl -v --trace-time tới một API HTTPS; chú thích từng pha DNS, TCP, TLS, HTTP và thời gian.
Bài liên quan: Một request đi từ client tới Spring Boot, DNS, TLS/HTTPS
Hoàn thành khi:
- Log curl có chú thích
3. Intermediate: Nginx reverse proxy
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
Nginx proxy tới 2 instance, round-robin, proxy_read_timeout; tắt một instance và quan sát.
Bài liên quan: Nginx reverse proxy, Tomcat: connector & thread, Load balancer L4/L7, NAT, VPC
Hoàn thành khi:
- Cấu hình nginx.conf
- Log 502/504 khi backend chết/chậm
4. Challenge: Debug timeout
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
Tạo backend trễ 30s; chỉnh timeout client < Nginx < backend và giải thích lỗi nhận được ở mỗi tầng.
Bài liên quan: Timeout ở từng tầng, Debug mạng: curl, dig, ss, tcpdump, Ping được nhưng không connect được: port & firewall
Hoàn thành khi:
- Bảng timeout và lỗi tương ứng
5. Tiêu chí hoàn thành chung
- Tự giải thích được bài toán và vì sao chọn giải pháp.
- Code chạy được bằng lệnh ghi trong README, không chứa secret.
- Có test tự động cho happy path và failure path.
- Có log hoặc số đo trong
evidence/chứng minh kết quả. - Có câu trả lời phỏng vấn ngắn bằng tiếng Việt và tiếng Anh.
- README của lab có link ngược về bài học tương ứng.
6. Lab và trạng thái
| Mức | Bài tập | Trạng thái | Test / bằng chứng |
|---|---|---|---|
| Basic | Giải phẫu request | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Intermediate | Nginx reverse proxy | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Challenge | Debug timeout | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
Repo lab: java-backend-interview-labs/labs/networking. TODO: link GitHub là placeholder cho tới khi repo được push.
evidence/; chỉ đánh dấu xong khi có bằng chứng.Phỏng vấn hỏi về Networking & Web server, câu nào hay gặp nhất và trả lời sao?
Q1. Ping được server mà không connect được port 8080, nguyên nhân là gì?
🇻🇳 Tiếng Việt:
Ping dùng ICMP, chỉ chứng minh host sống. Connect cần TCP tới đúng port: có thể app không listen, chỉ bind localhost, hoặc firewall/security group chặn port.
🇬🇧 English:
Ping uses ICMP and only proves the host is up. A connect needs TCP on that port: the app may not be listening, may bind only to localhost, or a firewall or security group blocks the port.
Cách nhớ ngắn gọn
- Mỗi bài tập = code + test + log.
- Luôn có ít nhất một failure case.
- Chưa có bằng chứng thì chưa xong.
Tự kiểm tra
Bài tập Basic (Giải phẫu request) được coi là xong khi nào?
Log curl có chú thích. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Intermediate (Nginx reverse proxy) được coi là xong khi nào?
Cấu hình nginx.conf; Log 502/504 khi backend chết/chậm. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Challenge (Debug timeout) được coi là xong khi nào?
Bảng timeout và lỗi tương ứng. Chưa có code chạy và bằng chứng thì chưa tính là xong.