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 22/09/2026 8 phút

Chọn cấu trúc dữ liệu xác suất nào? Tổng kết 12 phần bằng một bảng đo thật

Khép lại loạt Cấu trúc dữ liệu xác suất: điểm lại 11 cấu trúc đã học, mỗi cái trả lời một câu hỏi khác nhau, rồi chạy thật cả năm trên CÙNG một luồng 2 triệu sự kiện để so bộ nhớ và sai số với cách 'giữ hết + tính chính xác'. Kết quả đo được: 5 sketch cộng lại chỉ 527 KB thay cho 52 MB — nhỏ hơn ~96 lần, đổi lấy sai số 0,08%–4,57%. Kèm cây quyết định và khi nào KHÔNG nên dùng ước lượng.

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

Cuckoo filter: bộ lọc vừa tiết kiệm bộ nhớ vừa xóa được — thứ Bloom không làm

Bloom filter (phần 1 loạt này) kiểm tra tồn tại rất gọn nhưng không xóa được phần tử và tỉ lệ dương tính giả cố định. Cuckoo filter lưu fingerprint vào một trong hai bucket, đá (kick) khi đầy, nên xóa được và thường chính xác hơn Bloom ở cùng bộ nhớ. Bài này tự cài Cuckoo filter bằng Python, chạy thật: 249.036 phần tử ở load 95%, FPP 0,18%, xóa hoạt động — và đo điểm giao FPP Cuckoo vs Bloom.

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

CQRS trong Go: tách mô hình đọc khỏi mô hình ghi, và cái giá của read model

CQRS tách đường ghi (command, chuẩn hóa) khỏi đường đọc (query, gộp sẵn) để mỗi bên tối ưu độc lập. Đo thật trong Go 1.23: đọc từ read model dựng sẵn nhanh hơn tính lại từ 100k đơn khoảng 328 lần, đổi lại mỗi lệnh ghi phải chiếu và có thể trễ nhất quán.

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

Schema evolution: thêm field mà không làm sập dịch vụ đang chạy phiên bản cũ

Trong hệ phân tán, code cũ và mới chạy song song lúc triển khai — dữ liệu phải đọc chéo được cả hai chiều. Bài này chạy thật bằng Protobuf: code mới ghi 4 field, code cũ đọc vẫn lấy được 2 field và bỏ qua field lạ không crash; code cũ ghi 2 field, code mới đọc field mới nhận default. Và một cái bẫy đo được: đổi kiểu field làm mất dữ liệu âm thầm. Kèm luật an toàn vs nguy hiểm.

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

Varint và ZigZag: vì sao số -1 tốn 10 byte, và mẹo đưa nó về 1 byte

Varint là kỹ thuật nền tảng khiến Protobuf và CBOR gọn: số nhỏ tốn ít byte. Nhưng nó có một cái bẫy đo được: mọi số ÂM trong varint thuần đều tốn 10 byte, kể cả -1. ZigZag sửa điều đó bằng cách ánh xạ đan xen âm-dương. Bài này đo thật số byte bằng Go: -1 từ 10 byte xuống 1, -1000 từ 10 xuống 2 — và giải thích công thức.