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

Hàng đợi lock-free Michael-Scott trong Go: mổ xẻ, và vì sao channel vẫn thắng

Xây một hàng đợi lock-free chuẩn Michael-Scott với head/tail riêng, node giả và cơ chế giúp đỡ. Đo thật: nó đúng đắn (8000 phần tử, FIFO, -race sạch) nhưng dưới tranh chấp chậm hơn channel ~3 lần. Vì sao queue khó hơn stack, và khi nào channel là câu trả lời. Go 1.23.

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

govulncheck trong Go: quét lỗ hổng theo cái code thực sự gọi tới

Scanner thường báo động mọi phụ thuộc dính CVE dù code không dùng hàm lỗi — ngập trong cảnh báo giả. govulncheck phân tích call graph, chỉ báo lỗ hổng code thực sự gọi tới, kèm đường dẫn gọi chính xác. Đo thật: 3 lỗ hổng yaml.v2 code gọi tới (kèm trace + phiên bản vá) so với 42 chỉ-có-không-gọi.

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

Distributed tracing với OpenTelemetry trong Go: lần theo một request qua nhiều dịch vụ

Log rời rạc không cho biết thời gian một request nằm ở đâu khi nó đi qua API, DB, cache. Distributed tracing nối tất cả bằng một trace_id và quan hệ cha-con giữa span. Đo thật trong Go với OpenTelemetry: dựng cây trace, và chi phí một span 50 ns (tắt) đến 763 ns (ghi đủ) — sampling là nút chỉnh.

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.

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

Lookahead và lookbehind: nhìn quanh mà không nuốt, và cái giá của nó

Lookaround cho regex khả năng khẳng định điều kiện về ngữ cảnh mà không tiêu thụ ký tự. Bài này đo thật bằng python: chèn dấu phẩy nghìn '1234567' thành '1,234,567' bằng (?<=\d)(?=(\d{3})+$), kiểm mật khẩu mạnh bằng ba lookahead cùng vị trí, lấy số sau $ bằng (?<=\$)\d+, và bỏ 'cats' bằng cat(?!s). Vì sao những phép này mạnh — và vì sao RE2 từ chối chúng.