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

LRU cache tự cài trong Go: get/put O(1) bằng map và danh sách liên kết đôi

LRU cache khi đầy loại phần tử lâu nhất chưa dùng. Nó cần cả tra cứu theo key và cập nhật thứ tự dùng đều O(1) — không cấu trúc đơn lẻ nào làm được cả hai. Bài tự cài trong Go bằng map + danh sách liên kết đôi, đo thật: loại đúng phần tử ít dùng nhất, get+put chỉ 79.6 ns O(1) hằng số.

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

Prepared statement caching trong Go: chuẩn bị một lần, chạy nhiều lần

Một câu lệnh có tham số đi qua hai pha ở DB: PREPARE (phân tích + lập kế hoạch, đắt) và EXECUTE (rẻ). Chạy cùng câu lệnh N lần mà prepare lại mỗi lần là lãng phí. Đo thật trong Go: 500 truy vấn với prepare mỗi lần mất 1.98s (500 prepare), prepare một lần rồi tái dùng chỉ 673ms (1 prepare) — nhanh 2.9 lần.

Cơ sở dữ liệu 22/09/2026 6 phút

MVCC trong PostgreSQL: vì sao mỗi UPDATE tạo một dòng mới

PostgreSQL không sửa dòng tại chỗ — mỗi UPDATE viết một phiên bản dòng mới và để lại bản cũ làm dòng chết. Đo thật: ctid đổi sau UPDATE, và 100.000 lần cập nhật một dòng logic làm bảng phình từ 8KB lên 3,5MB. Vì sao MVCC làm vậy, và HOT giảm bloat ra sao. PostgreSQL 16.