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.

2300 bài viết · Website
Giải thuật 03/09/2026 8 phút

Ma trận kề nhìn gọn mà ngốn RAM 127 lần: bẫy đồ thị thưa

Ma trận kề đơn giản nên cứ dùng? Tôi đo thử: với đồ thị thưa (đa số thực tế), ma trận tốn RAM gấp 127 lần và duyệt chậm 302 lần vì phải quét cả V² ô. Danh sách kề chỉ lưu cạnh thật. Nhưng ma trận lại thắng khi cần hỏi 'có cạnh (i,j) không' — O(1). Chọn theo mật độ đồ thị.

Giải thuật 03/09/2026 8 phút

LRU chỉ cần một map? Cái bẫy O(n) khiến cache lớn chậm 5862 lần

LRU chỉ cần một map, quét tìm phần tử cũ khi đuổi? Tôi đo thử: quét map tìm phần tử ít dùng nhất là O(n) — cache 100 nghìn thì mỗi lần đuổi mất 128 µs, chậm 5862 lần bản đúng. LRU O(1) phải kết hợp hash map (tra O(1)) với danh sách liên kết đôi (thứ tự dùng O(1)). Sức mạnh nằm ở sự kết hợp.

Giải thuật 03/09/2026 8 phút

Cùng dữ liệu, đổi cách xếp: nhanh 3,6 lần hoặc chậm 2 lần (SoA vs AoS)

Bố cục struct chỉ là cách tổ chức, không đổi tốc độ? Tôi đo thử: duyệt một trường trên 15 triệu phần tử, SoA nhanh hơn AoS 3,6 lần vì cache line không bị lãng phí. Nhưng truy cập ngẫu nhiên mọi trường thì AoS lại nhanh gấp đôi. Không có bố cục nào luôn thắng — chọn theo mẫu truy cập.

Mạng 03/09/2026 10 phút

Cùng là 'chặn' mà một luật khiến client treo 2 phút, luật kia từ chối trong 0,1 ms

DROP nuốt gói trong im lặng khiến client treo ~127 giây trên máy mặc định; REJECT từ chối ngay 0,1 ms. Và 10000 luật iptables làm RTT gấp 2,5 lần, còn đúng một luật ipset thì không. Vì sao chọn nhầm giữa hai kiểu 'chặn' là gốc rễ của vô số buổi gỡ lỗi mất hàng giờ. Đo thật.

Giải thuật 03/09/2026 7 phút

s = s + x trong vòng lặp: quả bom O(N²) khiến 20 triệu ký tự mất 72 phút

Nối chuỗi trong vòng lặp s = s + phần trông vô hại? Tôi đo thử: với chuỗi bất biến (tạo chuỗi mới mỗi lần), nối 200 nghìn ký tự đã copy 20 tỷ byte — O(N²), 2151 ns/ký tự; nếu 20 triệu thì mất 72 phút. Buffer/StringBuilder append tại chỗ chỉ 2,18 ns/ký tự, O(N) — nhanh hơn 1000 lần mỗi ký tự.