Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

2312 bài viết · Website
Lập trình Go 22/09/2026 9 phút

Middleware chain trong Go: xâu chuỗi xử lý HTTP bằng hàm bậc cao, gần như không tốn phí

Middleware trong Go là hàm func(http.Handler) http.Handler, xâu chuỗi được thành lớp xử lý HTTP kiểu củ hành. Đo thật trong Go 1.23: thứ tự thực thi vào-ra, middleware short-circuit dừng chuỗi, và một Chain combinator — 5 lớp middleware gần như không thêm chi phí vì chuỗi dựng một lần lúc khởi tạo.

DevOps 22/09/2026 5 phút

Build context: vì sao docker build gửi cả thư mục lên daemon, và .dockerignore cứu bạn

Dấu chấm trong docker build . là build context — docker nén CẢ thư mục và gửi lên daemon trước khi build, kể cả file không dùng tới. Bài này đo thật: một thư mục 70MB (node_modules + .git) gửi nguyên context 70.01MB dù Dockerfile chỉ COPY app.py; thêm .dockerignore, context còn 4.096kB — và quan trọng hơn, nó chặn .env/.git lọt vào image.

Hệ thống 22/09/2026 7 phút

Load average thực sự nghĩa là gì: ba số 1/5/15 phút, và vì sao load cao không phải lúc nào cũng là CPU

Ai cũng thấy 'load average: 3.54, 1.34, 0.49' mà ít người đọc đúng. Nó không phải %CPU — mà là số tiến trình trung bình đang chạy HOẶC chờ I/O. Bài này chạy thật: 4 tiến trình CPU-bound làm load 1-phút leo từ 0.11 lên ~4; rồi 6 tiến trình dd kẹt ở D-state (chờ đĩa, gần 0% CPU) vẫn đẩy load lên — chứng minh load khác CPU. Và cách so load với số core để biết máy có quá tải không.

Hệ thống 22/09/2026 5 phút

Tìm tiến trình ngốn CPU hay RAM: ps và top, và vì sao %CPU có thể vượt 100%

Máy chậm hoặc nóng — tiến trình nào là thủ phạm? ps aux --sort xếp hạng ngay: sort theo %cpu tìm kẻ busy loop, sort theo %mem tìm kẻ ngốn RAM. Bài này chạy thật hai tiến trình (một ngốn CPU 99.5%, một giữ 257MB RAM) và tìm chúng; giải thích vì sao %CPU có thể vượt 100% trên đa lõi, và đọc đúng cột RSS.

Lập trình 22/09/2026 6 phút

Regex thật ra là một cỗ máy trạng thái: engine khớp chuỗi thế nào

Nhiều người dùng regex như phép thuật mà không biết bên trong nó là gì. Thực ra engine làm hai việc: biên dịch mẫu thành một máy trạng thái, rồi chạy máy đó trên input. Bài này mở máy ra xem: python re.DEBUG in opcode thật của mẫu a(b|c)*d, và Go regexp (RE2) chứng minh nó duyệt input tuyến tính — input tăng gấp 5 thì thời gian cũng tăng gấp 5, ns mỗi ký tự gần như hằng số.