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ơ sở dữ liệu 22/09/2026 6 phút

random_page_cost cho SSD: vì sao mặc định 4.0 làm PostgreSQL né index oan

random_page_cost là tỉ số nói với planner đọc trang ngẫu nhiên đắt gấp mấy lần đọc tuần tự. Mặc định 4.0 hợp ổ cứng cơ HDD (thời gian seek), nhưng quá cao với SSD. Đo thật: cùng truy vấn khớp 1% dữ liệu, rpc=4.0 quét tuần tự cả bảng mất 84 ms, rpc=1.1 dùng index còn 7 ms — nhanh gấp 12 lần. Và cạm bẫy hạ quá tay. PostgreSQL 16.

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

cherry-pick và detached HEAD: bê một commit lẻ, và vì sao HEAD rời không đáng sợ

Bạn chỉ muốn một commit hotfix từ nhánh tính năng sang main, không phải cả nhánh — đó là cherry-pick. Và trạng thái detached HEAD mà bisect/checkout hay đẩy bạn vào khiến nhiều người hoảng. Bài này đo thật: cherry-pick tạo commit mới cùng nội dung khác SHA, và một commit tạo trong detached HEAD mất hay được cứu tùy bạn có đặt tên nhánh hay không.

Web 22/09/2026 5 phút

Ba header HTTP quyết định: Host, Content-Type, và Content-Length vs chunked

Vì sao hàng nghìn website chung một địa chỉ IP vẫn phân biệt được nhau? Vì sao có response biết trước độ dài, có response gửi theo từng khúc? Bài này đo thật ba header cốt lõi: Host cho virtual hosting, Content-Type quyết client hiểu body thế nào, và cặp loại trừ Content-Length vs Transfer-Encoding chunked — xem tận byte khung chunk.

Web 22/09/2026 6 phút

Mã trạng thái và redirect HTTP: 301 vs 302 vs 307/308, và bẫy đổi POST thành GET

Ai cũng biết 404 và 500, nhưng khác biệt thật giữa 301 và 302, giữa 307 và 308 thì nhiều người mơ hồ. Điểm mấu chốt không chỉ là vĩnh viễn hay tạm thời — mà là có giữ nguyên phương thức POST hay không. Bài này đo thật: 301/302 âm thầm đổi POST thành GET, 307/308 giữ nguyên, và một vòng lặp redirect dừng ở đâu.

Web 22/09/2026 5 phút

TLS handshake từng bước: xem tận mắt bằng openssl s_client

Trước khi một byte HTTPS chạy, client và server làm một cuộc bắt tay TLS: thỏa thuận phiên bản, chọn cipher, trao khóa tạm, và server chứng minh danh tính bằng chứng chỉ. Bài này dùng openssl s_client -msg để xem từng handshake message thật của TLS 1.3 (ClientHello, ServerHello, Certificate, Finished), so TLS 1.3 với 1.2, và đọc chuỗi chứng chỉ.

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

Eviction: đo thật một job quét xoá sạch key nóng dưới LRU, còn LFU giữ 199/200

Khi Redis chạm maxmemory, key bị đá ra trước cả khi TTL hết — và chính sách chọn key để đá quyết định cache còn dùng được hay không. Bài này đo thật trên Redis 7: làm nóng 200 key, cho một job quét tuần tự đi qua toàn bộ 2.000 key đúng một lượt, rồi đếm xem key nóng còn lại bao nhiêu. allkeys-lru giữ 18/200, allkeys-random giữ 11/200, allkeys-lfu giữ 199/200. Và đo luôn noeviction: 1.392/1.400 lệnh ghi bị từ chối với lỗi OOM command not allowed, tức bước điền cache của cache-aside hỏng hoàn toàn trong khi đọc vẫn chạy.