Welcome to MikeDaDev's Blog – notes on Java, backend & system design.

Explore
MikeDaDev's Blog

#concurrency

Things I've written about #concurrency
  • Kinh nghiệm phỏng vấn tại công ty A*

    Bài test viết gồm 5 câu của một công ty fintech mình tạm gọi là A*: đa luồng cho n chiếc xe xuất phát cùng lúc, chuỗi con dài nhất không lặp ký tự, thiết kế API 3 tầng có mã hoá bất đối xứng, SDLC và mô hình OSI. Mình đi qua từng câu, chỗ dễ mất điểm, code đã chạy thử, rồi tổng hợp các vòng phỏng vấn thường gặp phía sau và cách chuẩn bị.

  • Java Memory Model & happens-before

    Đào vào Java Memory Model (JSR-133): giao thức MESI, Store Buffer, 4 loại Memory Barrier, quan hệ Happens-Before, chuyện False Sharing (@Contended), và Acquire/Release với VarHandle từ Java 9.

  • cạm bẫy Virtual Threads trong production

    Bật Virtual Threads trong Java 21 xong ứng dụng production lại treo? Bài này đi qua 4 chỗ hay dính: pinning carrier thread do synchronized (và chuyện JDK 24 đã sửa nó), ThreadLocal làm phình bộ nhớ, pool thread không cần thiết và connection pool bị đè bẹp, kèm cách xử lý cho từng cái.

  • LMAX Disruptor & kiến trúc lock-free

    Sàn giao dịch tài chính LMAX xử lý khoảng 6 triệu lệnh mỗi giây trên một luồng CPU duy nhất, truyền message giữa các thread chỉ mất vài chục nano giây, và viết bằng Java. Bài này đi qua cấu trúc RingBuffer, hiện tượng False Sharing, Cache Line Padding và cách làm lock-free của Disruptor.

  • in java / jvm

    Generational ZGC trong java 21

    Heap lên tới vài chục, vài trăm GB thì mấy GC truyền thống như G1 hay Parallel hay kéo theo những lần Stop-The-World (STW) dài cả giây, dịch vụ đứng hình. Generational ZGC trong Java 21+ dùng Colored Pointers, Load Barriers (và Store Barriers) ra sao để giữ pause GC dưới 1 mili-giây.

  • câu hỏi phỏng vấn java senior

    Các câu hỏi phỏng vấn nâng cao cho Senior & Staff Software Engineer: False Sharing & Cache Line 64-byte, bẫy Carrier Pinning trong Virtual Threads, Parent-Child Connection Starvation trong HikariCP, Zero-Allocation trên đường dẫn hiệu năng cao và thiết kế Idempotency.

  • iterator pattern

    Đào sâu Iterator Pattern trong Java: fail-fast hoạt động nhờ biến modCount ra sao, CopyOnWriteArrayList đổi bộ nhớ lấy an toàn thế nào, Spliterator giúp chạy song song ra sao, và cách tự viết cursor iterator để stream hàng triệu bản ghi mà không OOM.

  • singleton pattern

    Singleton Pattern nhìn kỹ hơn một chút: vì sao việc đảo lệnh của JIT và CPU buộc Double-Checked Locking phải có volatile, 4 cách phá Singleton (Reflection, Serialization, Clone, ClassLoader) và vì sao dự án Spring nên để IoC Container quản lý singleton.

  • java concurrency

    Concurrency trong Java 21 & Spring Boot 3.x: Virtual Threads, ScopedValue và các pattern xử lý bất đồng bộ trong hệ thống phân tán hiệu năng cao.

  • java stream API

    Nhìn vào bên trong Java Stream API: pipeline được dựng thế nào, Loop Fusion chạy qua interface Sink ra sao, Stateless khác Stateful operation chỗ nào, và vì sao parallelStream xài chung ForkJoinPool có thể làm treo cả hệ thống.

  • threadpool executor pool size

    ThreadPoolExecutor nhìn từ góc kiến trúc: biến bit ctl, Định luật Little & công thức Goetz để tính Pool Size, cái bẫy Unbounded Queue gây OOM, Thread Starvation Deadlock và so sánh với Virtual Threads.

  • java ThreadPoolExecutor

    Mổ ThreadPoolExecutor từ bên trong: biến ctl gói bit thế nào, vì sao mấy static factory của Executors là quả bom OOM, vì sao Worker tự dựng khoá không tái nhập trên AQS, 4 cách xử lý backpressure và quy trình graceful shutdown 2 pha để chạy production.

  • controlled concurrency with semaphores

    A practical look at backpressure and concurrency limits in Java: how java.util.concurrent.Semaphore works on top of AbstractQueuedSynchronizer (AQS), why Virtual Threads waiting on it unmount instead of pinning their carrier, how to size the limit with Little’s Law, and patterns that hold up in production.