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

String internals trong Go: header 16 byte, bất biến, và chi phí ẩn của []byte(s)

String là header 16 byte trỏ vào dữ liệu bất biến, không có cap. Đo thật: substring s[7:13] miễn phí (chia sẻ backing, 0 cấp phát) nhưng chuyển string sang []byte phải copy toàn bộ (21 ns, 1 cấp phát) vì string bất biến còn byte sửa được. Vì sao và khi nào tốn kém. Go 1.23.

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

unsafe.Pointer trong Go: bốn mẫu chuyển đổi hợp lệ, và quy tắc uintptr sống còn

unsafe.Pointer cho phép gạt kiểu an toàn sang bên, nhưng chỉ vài mẫu chuyển đổi là hợp lệ và được runtime bảo đảm. Đo thật trong Go 1.23: các mẫu đúng chạy sạch, go vet bắt mẫu sai lưu uintptr vào biến, và chuyển []byte sang string không sao chép nhanh gấp 136 lần.

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

sqlc trong Go: viết SQL, sinh code Go an toàn kiểu — bắt lỗi lúc biên dịch

ORM giấu SQL và dùng reflection; database/sql viết tay linh hoạt nhưng Scan thủ công dễ sai và lỗi tên cột chỉ lộ lúc chạy. sqlc lật ngược: bạn viết SQL thật, nó sinh code Go an toàn kiểu và kiểm SQL so với schema ngay lúc sinh. Đo thật: sqlc bắt cột không tồn tại trước cả khi biên dịch Go.

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

Tối ưu query từ đầu tới cuối: cây quyết định, checklist, và một query từ 51ms xuống 3.7ms

Loạt SQL sâu đi qua 11 công cụ; bài cuối ghép chúng thành một quy trình. Query chậm không phải chuyện thử-sai — có cây quyết định rõ ràng bắt đầu từ EXPLAIN ANALYZE. Bài này đo thật một query chậm (JOIN + filter + ORDER BY LIMIT trên 2 triệu dòng): viết sargable một mình không đủ (vẫn 51ms), nhưng sargable + index đúng + ANALYZE đưa xuống 3.66ms — nhanh 14 lần. Kèm cây quyết định và checklist tối ưu.

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

SQL injection: vì sao nối chuỗi làm lộ cả tài khoản admin, và prepared statement chặn triệt để

SQL injection vẫn nằm trong OWASP Top 10 sau hai thập kỷ, vì gốc rễ của nó đơn giản mà dễ mắc: trộn lẫn code và data. Bài này tái hiện thật trong lab PostgreSQL cô lập: một query đăng nhập nối chuỗi bị input ' OR '1'='1 biến điều kiện thành luôn-đúng, trả về 2 dòng (bypass đăng nhập, lộ cả admin); cùng input đó qua prepared statement trả 0 dòng — bị coi là chuỗi mật khẩu, không bao giờ thành SQL. Đây là kiến thức phòng thủ.

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

Encoding nhị phân tùy biến trong Go: nhỏ hơn và nhanh hơn JSON

JSON là văn bản tự mô tả — lặp tên field, số là chuỗi ASCII, phải phân tích cú pháp khi đọc. Với dữ liệu nội bộ nóng, một định dạng nhị phân tùy biến gọn và nhanh hơn nhiều. Đo thật trong Go: 100k bản ghi, binary nhỏ hơn 2.3 lần, mã hóa nhanh 4 lần, giải mã nhanh 9 lần — cùng đánh đổi và rủi ro.