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 10 phút

Connection pool tự viết trong Go: tái dùng tài nguyên tốn kém bằng buffered channel

Connection pool giữ sẵn các kết nối và tái dùng thay vì mở/đóng liên tục. Đo thật trong Go 1.23: một pool dựng bằng buffered channel tái dùng 3 kết nối cho 10 lần dùng, có timeout khi cạn, và nhanh hơn tạo mới mỗi lần hàng nghìn lần khi kết nối tốn 5ms bắt tay.

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

Lịch sử Git là một DAG: commit trỏ cha, và lưu snapshot chứ không lưu diff

Nhiều người tưởng Git lưu 'các thay đổi' (diff) giữa các commit. Thực ra mỗi commit lưu một ảnh chụp (snapshot) toàn bộ cây, và trỏ tới commit cha — tạo thành một đồ thị có hướng không chu trình (DAG). Bài này chứng minh bằng lệnh thật: file không đổi dùng lại cùng blob qua nhiều commit, và merge tạo commit hai cha.

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

Ref, HEAD và branch trong Git: một nhánh chỉ là một con trỏ 41 byte

Nhiều người tưởng tạo branch là sao chép cả dự án, nên ngại tạo nhánh. Thực ra một branch chỉ là một file 41 byte chứa SHA của commit. Bài này chứng minh bằng lệnh thật: HEAD trỏ tới ref, ref trỏ tới commit, tạo branch = ghi 41 byte, chuyển branch = đổi con trỏ HEAD — và vì sao Git khuyến khích bạn tạo nhánh thoải mái.

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

Write barrier trong Go: cái giá ẩn của GC đồng thời, đo tận assembly

GC chạy song song với chương trình bắt buộc phải có write barrier, nếu không sẽ thu nhầm object sống. Đo thật: assembly cho thấy ghi con trỏ có gcWriteBarrier còn ghi số thì không, và ghi con trỏ chậm 2.8 lần (0.636 vs 0.226 ns) vì kiểm cờ barrier. Bất biến tricolor và chi phí thật. Go 1.23.