Skip to content

Lộ trình học

Chưa biết bắt đầu từ đâu? Chọn một track phù hợp với mục tiêu. Mỗi track được sắp xếp sao cho các pattern đầu làm nền tảng cho các pattern sau.

Cách hiểu mức độ khó

Mỗi pattern được gắn nhãn theo cấp độ:

  • Beginner — một cơ chế cốt lõi, ít yêu cầu nền tảng
  • Intermediate — kết hợp 2-3 khái niệm, cần một chút nền tảng
  • Advanced — hệ thống đa thành phần phức tạp, yêu cầu nền tảng vững

Track 1: Nền tảng cấu trúc dữ liệu

Đi từ container kích thước cố định đơn giản đến cây tự cân bằng.

#PatternĐộ khóÝ chính
1BitmaskBeginnerNhồi N flag vào một số nguyên
2Ring BufferBeginnerFIFO kích thước cố định, không cấp phát
3Tagged UnionBeginnerTag kiểu để dispatch an toàn
4Min HeapIntermediateTruy cập phần tử ưu tiên cao nhất O(1)
5TrieIntermediateTra cứu O(k) theo độ dài key
6Bloom FilterIntermediateKiểm tra thành viên tập theo xác suất
7LRU CacheIntermediateKết hợp hash map + linked list
8Skip ListAdvancedCấu trúc sắp xếp theo xác suất
9B+ TreeAdvancedCây cân bằng tối ưu cho đĩa
10Merkle TreeAdvancedChuỗi hash cho bằng chứng toàn vẹn
11VisitorAdvancedTách việc duyệt khỏi thao tác

Sau track này, bạn sẽ hiểu các cấu trúc dữ liệu cốt lõi đằng sau database (B+ Tree), cache (LRU) và blockchain (Merkle Tree).

Track 2: Concurrency & lập lịch

Từ các primitive khoá cơ bản đến phân phối công việc cấp production.

#PatternĐộ khóÝ chính
1SemaphoreBeginnerGiới hạn concurrency bằng bộ đếm
2Double BufferingBeginnerHoán đổi nguyên tử hai buffer
3ObserverBeginnerTách rời subscribe/notify
4Event LoopIntermediateGhép kênh I/O đơn luồng
5BackpressureIntermediateKiểm soát luồng giữa producer/consumer
6Copy-on-WriteIntermediateChia sẻ cho đến khi sửa đổi
7Cooperative SchedulingAdvancedĐiểm yield để giữ phản hồi
8MVCCAdvancedReader có phiên bản không bao giờ chặn writer
9Work StealingAdvancedThread rảnh lấy việc từ queue bận
10Actor ModelAdvancedTrạng thái cô lập + truyền thông điệp

Sau track này, bạn sẽ hiểu cách React giữ phản hồi nhanh (Cooperative Scheduling), cách database xử lý transaction đồng thời (MVCC) và cách Go/Tokio lên lịch goroutine (Work Stealing).

Track 3: Độ tin cậy hệ thống

Xây dựng service kiên cường, xử lý lỗi một cách mượt mà.

#PatternĐộ khóÝ chính
1Retry with BackoffBeginnerDelay theo cấp số nhân + jitter
2Batch ProcessingBeginnerPhân bổ chi phí mỗi thao tác
3State MachineBeginnerTrạng thái rõ ràng, chuyển tiếp bất hợp lệ bị chặn
4Circuit BreakerIntermediateFail nhanh khi service bị sập
5Rate LimiterIntermediateToken bucket điều tiết throughput
6Middleware ChainIntermediateHandler request có thể ghép
7Dependency GraphIntermediateDAG + sắp xếp topo
8RegistryBeginnerTự đăng ký để khám phá plugin
9Consistent HashingAdvancedRemap tối thiểu khi đổi node
10Logical ClockAdvancedSắp xếp nhân quả không cần wall clock

Sau track này, bạn sẽ thiết kế được API gateway kiên cường, service mesh và scheduler phân tán.

Track 4: Nội tại storage engine

Hiểu cách database và storage engine hoạt động bên trong.

#PatternĐộ khóÝ chính
1TombstoneBeginnerĐánh dấu đã xoá, dồn nén sau
2Dirty FlagBeginnerBỏ qua tính lại nếu không đổi
3IteratorBeginnerDuyệt lười kiểu pull
4Write-Ahead LogIntermediateLog trước khi áp dụng để an toàn khi crash
5CheckpointingIntermediateSnapshot trạng thái định kỳ
6Diff / PatchIntermediateTính toán thay đổi tối thiểu
7LSM TreeAdvancedLưu trữ trên đĩa tối ưu cho ghi
8Merge IteratorAdvancedGộp k luồng đã sắp xếp

Sau track này, bạn sẽ hiểu kiến trúc của LevelDB/RocksDB (LSM Tree + WAL + Checkpointing) và cách Git theo dõi thay đổi (Diff/Patch + Merkle Tree).

Track quản lý bộ nhớ (Bonus)

Dành cho lập trình viên hệ thống muốn hiểu allocator và các giải pháp thay thế GC.

#PatternĐộ khóÝ chính
1Reference CountingBeginnerDọn dẹp xác định khi rc=0
2Object PoolBeginnerCấp phát trước và tái sử dụng
3FlyweightBeginnerChia sẻ các instance giống nhau
4InterningIntermediateKhử trùng lặp dựa trên hash
5Free ListIntermediateCấp phát O(1) từ slot đã giải phóng
6Arena AllocatorIntermediateCấp phát bump, giải phóng hàng loạt
7VtableAdvancedCon trỏ hàm cho đa hình lúc runtime

Sau track này, bạn sẽ hiểu cách sync.Pool của Go, bumpalo của Rust và allocator object nhỏ của CPython hoạt động.

Lịch học gợi ý

NhịpThời gian/ngàyHoàn thành đầy đủ
Thư giãn30 phút/ngày~8 tuần
Vừa phải1 tiếng/ngày~4 tuần
Cường độ cao2 tiếng/ngày~2 tuần

Với mỗi pattern: đọc tài liệu (10 phút) → chạy trực quan hoá (5 phút) → làm bài tập bằng một ngôn ngữ (15-30 phút) → thử các câu hỏi thử thách (5 phút).

Mẹo: Fork repo và dùng Kế hoạch học để theo dõi tiến độ bằng các checkbox.

Released under the MIT License.