Skip to content

Cheat Sheet

Tham chiếu một trang cho cả 46 pattern. In ra, đánh dấu, hoặc ctrl-F để tìm trong đây.

Chọn theo bài toán

Chưa rõ cần pattern nào? Bắt đầu từ đây.

Tôi cần...Hãy dùngVì sao
Giới hạn truy cập đồng thờiSemaphoreDùng bộ đếm, đã chứng minh trong kernel OS
Xử lý consumer chậmBackpressureĐừng bỏ — đẩy ngược lại
Cache có loại bỏLRU Cacheget/put O(1), tự loại cái nguội nhất
Tra cứu tiền tố nhanhTrieO(k) theo độ dài key, không phụ thuộc kích thước tập
Kiểm tra có-thể-thuộc-tậpBloom FilterKhông âm tính giả, ít bộ nhớ
Truy vấn khoảng đã sắp xếpB+ Tree hoặc Skip ListB+ Tree cho đĩa, Skip List cho bộ nhớ
Ghi an toàn khi crashWAL + CheckpointingLog-trước-rồi-apply + snapshot định kỳ
Chặn lỗi lan truyềnCircuit BreakerFail nhanh, khôi phục dần
Retry cuộc gọi thất bạiRetry with BackoffDelay theo cấp số nhân + jitter
Kiểm soát throughputRate LimiterToken bucket, refill đều
Xác minh toàn vẹn dữ liệuMerkle TreeBằng chứng O(log n) qua chuỗi hash
Giảm bộ nhớ qua chia sẻFlyweight hoặc InterningChia sẻ giá trị bất biến
Tránh áp lực GCObject Pool hoặc ArenaTái sử dụng hoặc giải phóng hàng loạt
Phát hiện thay đổi rẻDirty FlagBỏ qua tính lại nếu sạch
Sắp xếp sự kiện phân tánLogical ClockLamport hoặc vector clock
Đánh giá lườiIteratorKiểu pull, không cấp phát trung gian
Xử lý nhiều kiểuTagged Union hoặc VtableTag cho tập đóng, vtable cho tập mở
Tải nặng ghiLSM TreeBuffer → flush → merge
Ghép middlewareMiddleware ChainMô hình hành tây, mỗi handler bọc cái kế
Cân bằng việc giữa các threadWork StealingRảnh lấy trộm từ bận
Theo dõi nhiều flagBitmaskN flag trong một số nguyên
Lập lịch theo ưu tiênMin HeapPeek O(1), push/pop O(log n)
FIFO kích thước cố địnhRing BufferVòng quanh, không cấp phát
Diff tối thiểu giữa hai trạng tháiDiff / PatchTính + áp dụng thay đổi
Tách producer/consumerObserverMô hình subscribe
Phân bố key qua các nodeConsistent HashingThêm/bớt node remap ~1/n
Thứ tự build từ dependencyDependency GraphDAG + sắp xếp topo
Chuyển trạng thái nguyên tửState MachineTrạng thái rõ ràng, chuyển bất hợp lệ không biểu diễn được
Xoá mềm và dọn sauTombstoneĐánh dấu đã xoá, dồn nén sau
Chia sẻ với copy khi đổiCopy-on-WriteChia sẻ cho đến khi có người ghi
Dọn dẹp xác địnhReference CountingGiải phóng khi rc=0, không tạm dừng GC
Đăng ký/khám phá serviceRegistryMap name → handler
Hoán đổi trạng thái nguyên tửDouble BufferingGhi vào back, hoán đổi sang front
Đọc không blockMVCCSnapshot có phiên bản
Main thread phản hồi nhanhCooperative SchedulingYield giữa các khối
I/O đơn luồngEvent LoopGhép kênh không cần thread
Tích luỹ rồi flushBatch ProcessingPhân bổ chi phí mỗi thao tác
Cô lập kiểu actorActor ModelState riêng + truyền thông điệp
Dispatch khi duyệt câyVisitorCallback đặc thù theo kiểu
Cấp phát O(1) từ slot đã giải phóngFree ListLinked list các block tự do
Gộp các luồng đã sắp xếpMerge IteratorGộp k-luồng qua min-heap

Tham chiếu độ phức tạp

Cấu trúc dữ liệu

PatternThêmTraXoáBộ nhớĐánh đổi chính
BitmaskO(1)O(1)O(1)O(1)Giới hạn số flag bằng độ rộng word
Min HeapO(log n)O(1) peekO(log n)O(n)Chỉ peek-min là nhanh
Ring BufferO(1)O(1)O(1)O(n) cố địnhSức chứa cố định
TrieO(k)O(k)O(k)O(SIGMA * n)Tốn bộ nhớ với key thưa
Skip ListO(log n) trung bìnhO(log n) trung bìnhO(log n) trung bìnhO(n) trung bìnhTheo xác suất, đơn giản hơn cây
Bloom FilterO(k)O(k)N/AO(m) bitCó thể có dương tính giả
LRU CacheO(1)O(1)O(1)O(n)Loại bỏ khi đầy
B+ TreeO(log n)O(log n)O(log n)O(n)Tối ưu cho đĩa, fanout cao
Tagged UnionN/AO(1) dispatchN/AO(variant lớn nhất)Tập kiểu đóng
Merkle TreeO(log n)O(log n)O(log n)O(n)Để xác minh, không phải tìm kiếm
Merge IteratorN/AO(log k) nextN/AO(k)k = số luồng

Pattern hệ thống

PatternThroughputĐộ trễCách lỗi
Circuit BreakerBình thường khi đóng+0 đóng, fail-fast khi mởChặn mọi cuộc gọi khi mở
Rate LimiterBị chặn ở tốc độ token+0 nếu có tokenTừ chối quá tải (429)
Retry with BackoffGiảm khi retryTăng theo cấp số nhânKhuếch đại nếu không có jitter
WALTốc độ ghi tuần tự+1 ghi (log trước)An toàn — replay từ log
Batch ProcessingCao hơn (phân bổ)Cao hơn (chờ lô)Mất lô khi crash
Consistent HashingNhư nền bên dưới+chi phí hash~1/n key remap khi đổi node

Pattern bộ nhớ

PatternCấp phátGiải phóngOverheadTốt nhất cho
Object PoolO(1) phân bổO(1) trả vềKích thước poolObject cùng kiểu thay đổi nhiều
Arena AllocatorO(1) bumpO(1) hàng loạtPhí canh chỉnhVòng đời theo pha
Free ListO(1)O(1)Con trỏ next mỗi slotBlock kích thước cố định
FlyweightO(1) traChia sẻ, không giải phóngBảng traNhiều object nhỏ giống nhau
Copy-on-WriteO(1) chia sẻO(n) khi ghi đầuRef count mỗi pageDữ liệu chia sẻ nặng đọc
Reference CountingO(1) cloneO(1) khi rc=0Bộ đếm mỗi objectDọn dẹp xác định
InterningO(k) lần đầu, O(1) sauPoolHash tableKhử trùng lặp chuỗi/symbol

Bộ combo pattern

Các pattern hiếm khi xuất hiện đơn lẻ. Đây là các combo production phổ biến nhất:

ComboDùng trongVì sao kết hợp
WAL + CheckpointingPostgreSQL, etcdWAL cho an toàn, checkpoint giới hạn replay
Bloom Filter + LSM TreeLevelDB, RocksDBBỏ qua đọc đĩa không cần
Min Heap + Merge IteratorCompaction LevelDBGộp hiệu quả K luồng đã sắp xếp
Circuit Breaker + RetrygRPC, HystrixRetry lỗi thoáng qua, ngắt khi kéo dài
Rate Limiter + BackpressureAPI gatewayGiới hạn đầu vào, tín hiệu quá tải
Ring Buffer + Event Looplibuv, io_uringQueue kích thước cố định cho event I/O
Object Pool + Free ListGo runtimePool quản lý slab, free list theo dõi slot
MVCC + B+ TreePostgreSQLRow có phiên bản trong index tối ưu cho đĩa
Dirty Flag + Double BufferingReact FiberĐánh dấu dirty, gom vào frame tiếp theo
Bitmask + State MachineReconciler ReactFlag mã hoá state, chuyển tiếp qua phép bitwise
Consistent Hashing + RegistryService meshHash để định vị, registry để khám phá
Trie + InterningCompilerIntern chuỗi, tra theo prefix

Cây quyết định

"Cache nào?"

?Need eviction?

"Chiến lược bộ nhớ nào?"

?All objects same size?

"Mô hình concurrency nào?"

?Shared state?

Released under the MIT License.