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
Công cụ 22/09/2026 6 phút

Packfile trong Git: vì sao mỗi commit là snapshot mà .git không phình vô hạn

Git lưu snapshot đầy đủ mỗi commit chứ không lưu diff — nghe như thư mục .git phải nhân đôi mỗi lần sửa file lớn. Thực tế không. Bài này đo thật: 6 phiên bản của một file 622 KB, git gc gói lại chỉ còn 34 KB nhờ packfile nén delta. Mở verify-pack xem tận mắt chuỗi delta depth 1 đến 5, mỗi bản sửa chỉ tốn ~350 byte.

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

singleflight trong Go: gộp 100 lời gọi trùng thành 1 để chống thundering herd

Khi cache miss một key nóng, 100 request cùng lao vào gọi DB. singleflight gộp chúng thành một lời gọi thật, 99 kia chờ và dùng chung kết quả. Đo thật: 100 goroutine cùng key khiến hàm đắt chạy đúng 1 lần thay vì 100. Cơ chế, DoChan, và cạm bẫy lỗi lan. Go 1.23.

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

RED method: ba tín hiệu đủ để biết service có khoẻ không — và vì sao phải tách theo route

Service của bạn khoẻ không? RED method trả lời bằng đúng ba tín hiệu: Rate, Errors, Duration. Bài này dựng thật một dashboard RED từ một Go service hai route, rồi cho thấy cú lừa chí mạng: tỉ lệ lỗi tổng hợp 3.9% trông chấp nhận được, nhưng tách theo route lộ ra /checkout đang lỗi 9.3% — đúng route tiền bạc. Chỉ hai metric, ba câu PromQL.

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

TLS handshake: cái giá thật của HTTPS đo được, và session resumption cắt nó ra sao

HTTPS an toàn nhưng không miễn phí: sau bắt tay TCP, TLS thêm một bắt tay riêng tốn CPU (toán khóa công khai) và một RTT. Bài này chạy thật trong Go với self-signed cert: TLS full handshake tốn 391µs so với TCP thường 23µs — thêm ~368µs, phần lớn là CPU. Session resumption (500/500 kết nối resumed) bỏ phần đắt; giải thích vì sao trên localhost nó chỉ nhanh 1,1 lần còn trên mạng thực tiết kiệm cả một RTT.

Công cụ 22/09/2026 6 phút

Reflog trong Git: vì sao gần như không thao tác nào làm mất commit vĩnh viễn

Nhiều người tưởng git reset --hard hay xoá nhánh là mất commit không cứu được, rồi hoảng loạn. Sự thật: Git ghi mọi lần HEAD dịch chuyển vào reflog, và commit mồ côi còn nằm trong kho hàng tuần trước khi bị gc dọn. Bài này khôi phục thật một reset --hard làm 'mất' hai commit và một nhánh đã xoá — chỉ bằng SHA đọc từ reflog.

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

SSA trong compiler Go: xem tận mắt 50 pha biến hàm của bạn thành 3 lệnh

SSA là biểu diễn trung gian nơi mọi tối ưu compiler diễn ra. Đo thật với GOSSAFUNC: một hàm 2 phép cộng, 1 phép nhân và nhánh chết đi qua 50 pha (regalloc và lower đắt nhất) rồi co xuống còn 3 lệnh — CSE gộp biểu thức trùng, DCE xoá nhánh chết, strength reduction đổi nhân thành dịch bit. Go 1.23.