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

Generics vs interface trong Go: chi phí thật nằm ở stencil và dictionary

Generics của Go dùng GC shape stenciling: kiểu giá trị sinh mã riêng, mọi con trỏ chung một stencil và phân biệt bằng dictionary lúc chạy. Đo thật trong Go 1.23 bằng benchmark bốn đường thực thi và soi bảng ký hiệu — 4 kiểu chỉ sinh 3 bản mã, generic method nhanh gần gấp đôi interface.

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

Golden file testing trong Go: lưu đầu ra kỳ vọng vào tệp, so tự động

Hàm sinh đầu ra lớn (báo cáo, HTML, JSON, mã sinh) khó viết assertion bằng tay. Golden file lưu đầu ra kỳ vọng vào một tệp, test so từng byte; đổi có chủ đích thì chạy -update ghi lại. Đo thật trong Go: sinh golden, so pass, đổi code thì test bắt khác biệt kèm diff, và -update chấp nhận thay đổi.

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

Nén Parquet hai tầng đo thật: encoding theo cột rồi codec byte, zstd nén còn 33,8 MB nhỏ hơn gzip 37,3 MB mà ghi nhanh hơn bảy lần (240 ms so với 1749 ms), và một cột mười giá trị lặp nhỏ hơn cột năm triệu giá trị duy nhất 417 lần nhờ dictionary

Parquet nén hai tầng: encoding theo cột (dictionary, RLE) giảm kích thước logic trước, rồi codec byte (snappy, gzip, zstd) nén nốt. Đo thật trong DuckDB 2.0 trên 5 triệu dòng: uncompressed 119,9 MB, snappy 71,1 MB, gzip 37,3 MB, zstd 33,8 MB; zstd nhỏ hơn gzip mà ghi nhanh hơn 7 lần (240 ms so với 1749 ms). Dictionary encoding: cột country 10 giá trị nén còn 0,01 MB so với cột id 5 triệu giá trị 4,88 MB, nhỏ hơn 417 lần. Phần lớn lợi ích đến từ tầng encoding, codec chỉ là lớp phủ.

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

Quyền file Unix: chmod 755 nghĩa là gì, và vì sao thư mục thiếu x lại chặn cả file bên trong

chmod 755, 644, 600 — những con số ai cũng gõ nhưng ít người hiểu. Bài này chạy thật: giải mã số bát phân r=4 w=2 x=1, dạng ký hiệu u/g/o, và một điểm hay nhầm — x trên THƯ MỤC nghĩa là quyền đi vào (chạy với user nobody chứng minh thư mục thiếu x chặn đọc file bên trong), cùng umask quyết định quyền mặc định của file mới.

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

Property-based testing trong Go: khẳng định tính chất, để máy tìm phản ví dụ

Test ví dụ kiểm từng cặp input-output cụ thể; property-based testing khẳng định một tính chất đúng với mọi input rồi để máy sinh hàng vạn input tìm phản ví dụ. Đo thật trong Go với testing/quick: bất biến sắp xếp qua 100k input, và round-trip lộ bug logic khi list rỗng ra [0] — thứ fuzzing trần bỏ lọt.