Learning Outcome & Exercises: Linux: Process & Thread
Tổng kết chương Linux: Process & Thread: 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/linux.
1. Mục tiêu đầu ra
Học xong chương này, bạn tự làm được:
- Tìm process Java, đếm thread OS và file descriptor đang mở.
- Gửi SIGTERM và chứng minh ứng dụng shutdown gọn gàng.
- Đọc giới hạn cgroup bộ nhớ/CPU trong container.
2. Basic: Process & thread
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
ps, top -H, /proc/<pid>/status cho một app Spring Boot; ánh xạ thread Java sang thread OS.
Bài liên quan: Process lifecycle, JVM thread ↔ OS thread
Hoàn thành khi:
- Lệnh và output có chú thích
3. Intermediate: FD & signal
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 rò rỉ file descriptor, quan sát ls /proc/<pid>/fd tăng; bắt SIGTERM bằng shutdown hook.
Bài liên quan: IPC, file descriptor, signal, Scheduler & context switch
Hoàn thành khi:
- Số FD trước/sau
- Log shutdown hook
4. Challenge: cgroups
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
Chạy JVM trong container giới hạn 512MB, đọc memory.max và so với MaxHeapSize JVM tự chọn.
Bài liên quan: Container & cgroups, Virtual memory
Hoàn thành khi:
- Output memory.max và java -XX:+PrintFlagsFinal
- Cần Docker
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 | Process & thread | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Intermediate | FD & signal | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Challenge | cgroups | ⬜ 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/linux. 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ề Linux: Process & Thread, câu nào hay gặp nhất và trả lời sao?
Q1. Too many open files là lỗi gì?
🇻🇳 Tiếng Việt:
Process đã dùng hết số file descriptor cho phép (socket, file). Kiểm tra bằng ls /proc/pid/fd và ulimit -n; thường là rò rỉ connection/stream chưa đóng chứ không chỉ cần tăng limit.
🇬🇧 English:
The process has used up its allowed file descriptors, which include sockets and files. Check with ls /proc/pid/fd and ulimit -n; usually it is a leak of unclosed connections or streams, not just a low limit.
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 (Process & thread) được coi là xong khi nào?
Lệnh và output 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 (FD & signal) được coi là xong khi nào?
Số FD trước/sau; Log shutdown hook. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Challenge (cgroups) được coi là xong khi nào?
Output memory.max và java -XX:+PrintFlagsFinal; Cần Docker. Chưa có code chạy và bằng chứng thì chưa tính là xong.