Tất cả bài viết
01
Tại sao 'đang online' trên Messenger không phải lúc nào cũng chính xác?

Bạn thân mày hiện 'Active now' nhưng không reply 20 phút. Hay mày tắt app rồi mà vẫn thấy online. Đây không phải bug — đây là hàng loạt trade-off có chủ ý.

online-presencereal-timewebsocketheartbeat
02
Tại sao URL shortener như bit.ly redirect gần như instant?

Click vào bit.ly/3xK9mP và mày đến đích trong tích tắc. Đằng sau đó là một database lookup, một HTTP response code, và một cái trick browser caching mà phần lớn dev không biết.

url-shortenerredishttp-redirectcdn
03
Tại sao Google trả về kết quả trong 0.3 giây dù index hàng tỷ trang web?

Mày search 'python tutorial' và Google trả về 4 tỷ kết quả trong 0.31 giây. Không phải vì server Google siêu nhanh — mà vì nó không bao giờ scan 4 tỷ trang đó.

googlesearchinverted-indexpagerank
04
Tại sao Spotify biết mày sẽ thích bài hát mày chưa từng nghe?

Mỗi thứ Hai, Discover Weekly cho mày 30 bài chưa từng nghe — và ~70% trong số đó đúng trend. Đằng sau là matrix factorization, audio feature vectors, và NLP trên hàng triệu bài blog nhạc.

spotifyrecommendation-systemmatrix-factorizationaudio-analysis
05
Tại sao autocorrect biết mày định gõ gì?

Mày gõ 'teh' và nó tự đổi thành 'the'. Gõ 'im' thành 'I'm'. Đôi khi sai một cách ngớ ngẩn. Đằng sau là edit distance, keyboard proximity, và một language model chấm điểm từng candidate.

autocorrectnlpedit-distancelanguage-model
06
Tại sao Shopee gợi ý đúng thứ mày vừa tìm kiếm?

Mày search 'tai nghe' một lần, hôm sau homepage toàn tai nghe. Không phải Shopee đọc được tâm trí — đó là collaborative filtering và real-time session signals phối hợp với nhau.

recommendation-systemcollaborative-filteringe-commercemachine-learning
07
Tại sao TikTok biết mày thích xem gì chỉ sau vài video?

Instagram Reels mất nhiều tháng để hiểu mày. TikTok chỉ cần 10 phút. Không phải magic — đó là implicit signals, cold start strategy, và two-stage recommendation pipeline.

recommendation-systemmachine-learningtiktokcollaborative-filtering
08
Tại sao QR code thanh toán hết hạn sau vài phút?

QR code của MoMo không chứa số tài khoản của mày — nó chứa một session token có chữ ký mật mã. Đây là thứ ngăn kẻ xấu chụp màn hình rồi thanh toán lại.

paymentsqr-codesecuritysession
09
Tại sao Google Docs nhiều người edit cùng lúc mà không đè lên nhau?

Hai người gõ vào cùng một đoạn văn cùng lúc mà không ai bị mất chữ. Không phải locking, không phải merge conflict — Operational Transformation là cái trick đứng sau tất cả.

collaborationoperational-transformationcrdtreal-time
10
Tại sao game online biết vị trí nhân vật của người khác gần như realtime?

Trong PUBG hay Liên Quân, mày thấy nhân vật đối thủ chạy mượt dù họ ở đầu dây kia của internet. Không phải server gửi data 60 lần/giây — mà client đang tự diễn trên sân khấu của riêng nó, dựa trên dữ liệu 100ms cũ.

game-devnetworkingudpclient-side-prediction
11
Tại sao notification push đến điện thoại dù app đang tắt?

Zalo gửi tin nhắn lúc 2 giờ sáng, điện thoại mày rung dù app đã tắt hoàn toàn. Không phải app đang ngầm chạy — mà OS đang duy trì một kết nối TCP thay cho tất cả app. Đây là cách FCM và APNs hoạt động.

push-notificationsfcmapnsmobile
12
Tại sao typing indicator hiện gần như realtime mà không spam server?

Dấu ba chấm '...' xuất hiện chỉ vài mili giây sau khi người kia bắt đầu gõ — nhưng nếu gửi event mỗi lần nhấn phím, server sẽ sập trong vài giây. Trick thật sự là throttle + timeout, và nó đơn giản hơn mày nghĩ.

websocketreal-timethrottlemessaging
13
Tại sao Zalo biết mày đã 'đọc' tin nhắn — read receipt hoạt động thế nào?

1 tick, 2 tick, tick xanh — Zalo biết chính xác lúc nào mày mở tin nhắn. Cơ chế đằng sau không phải là server hỏi thăm liên tục, mà là ACK packet đi ngược chiều.

websocketmessagingreal-timeread-receipt
14
Tại sao HTTPS không bị nghe lén dù đi qua hàng chục server?

Gói tin từ điện thoại mày đến server Netflix đi qua hàng chục router. Bất kỳ ai ngồi giữa đường đều có thể thấy nó. Vậy tại sao họ không đọc được?

httpstlscryptographysecurity
15
Tại sao OTP chỉ dùng được một lần và hết hạn sau 30 giây?

Cái mã 6 số trong Google Authenticator không được tạo ra từ server — điện thoại của mày tự tính nó mà không cần internet. TOTP là thứ đứng sau tất cả.

otptotpauthenticationsecurity
16
Tại sao đăng nhập Google một lần dùng được khắp nơi — SSO hoạt động thế nào?

Gmail, YouTube, Notion, Slack đều dùng tài khoản Google nhưng không app nào biết password của mày. Đây là cách OAuth 2.0, authorization code flow, và session cookie phối hợp để làm điều đó.

ssooauth2oidcauthentication
17
Tại sao kéo refresh trên app mobile có animation mượt — và nó sync với server lúc nào?

Pull-to-refresh không đợi API xong mới chạy animation. Đây là cách touch events, CSS transform, và optimistic UX phối hợp để tạo cảm giác nhanh dù mạng chậm.

mobileuxanimationtouch-events
18
API Gateway vs Load Balancer — hai thứ khác nhau nhưng hay bị gộp làm một

Load balancer phân phối traffic. Gateway xử lý auth, routing, transformation. Hiểu đúng để design microservices đúng.

api-gatewayload-balancermicroservicessystem-design
19
Tại sao YouTube không buffer từ đầu mà buffer đúng đoạn mày đang xem?

YouTube không download cả video — nó chỉ tải đúng mấy giây xung quanh chỗ mày đang xem. Đây là cách DASH, manifest file, và adaptive bitrate làm điều đó.

streamingdashhlsadaptive-bitrate
20
Tại sao Google Search gợi ý ngay khi mày gõ mà không lag?

Mỗi lần mày gõ một chữ, Google trả về gợi ý trong dưới 50ms. Không phải vì server Google nhanh — mà vì có rất nhiều thứ xảy ra trước khi request đó thậm chí được gửi đi.

autocompletetriedebouncesearch
21
Tại sao ảnh Instagram load từ mờ đến rõ thay vì hiện trắng rồi bật ra?

Cái blur nhẹ hiện ra ngay lập tức trước khi ảnh load xong — không phải hiệu ứng cho đẹp. Đó là kết quả của 3 kỹ thuật khác nhau, mỗi cái giải quyết một vấn đề mà cái kia không làm được.

performanceimageslqipprogressive-jpeg
22
Tại sao xe Grab trên map chạy mượt dù không gọi API mỗi giây?

Icon xe Grab di chuyển mượt 60fps trên map của mày — nhưng thực ra nó chỉ nhận dữ liệu GPS mỗi 3-5 giây. Cái trick đằng sau là dead reckoning, kỹ thuật dẫn đường mà NASA dùng từ thập niên 60.

websocketdead-reckoningreal-timemaps
23
Service Mesh là gì và khi nào mày cần nó

Sidecar proxy pattern, control plane vs data plane, và câu hỏi quan trọng nhất: có phải lúc nào cũng cần không?

service-meshistiomicroservicessystem-design
24
Circuit Breaker — vì sao một service chậm có thể kéo sập cả hệ thống

3 trạng thái Closed/Open/Half-Open, khi nào trip, khi nào reset, fallback strategy với Resilience4j + Spring Boot.

circuit-breakerresilience4jfault-tolerancesystem-design
25
Read replica lag — vì sao đọc stale ngay sau khi write

Replica async sau primary — read-your-writes, route sau mutation, và khi nào chấp nhận eventual consistency.

databasereplicationconsistencymysql
26
Covering index — khi query không cần chạm bảng

EXPLAIN Using index, composite index và thứ tự cột — vì sao index đúng tên vẫn không cover query.

databaseindexmysqlperformance
27
Timezone và slot lịch hẹn — 9h sáng không lệch ngày

LocalDateTime không có timezone. API contract: Instant + ZoneId, lưu UTC, hiển thị theo clinic. Bug lịch hẹn ngày 15 thành 14.

case-studytimezoneappointmentapi-design
28
Doctor double-booking — khi race lọt xuống tầng database

Redis Lua chặn tranh slot ở cache — nhưng confirm vào DB vẫn có thể trùng nếu thiếu ràng buộc và lock đúng chỗ.

case-studyconcurrencydatabasebooking
29
Notification preferences — opt-out, unsubscribe, không spam người đã tắt

User tắt email marketing vẫn nhận reminder — check preference trước send, link unsubscribe one-click, audit log.

case-studynotificationemailcompliance
30
Payment webhook — signature verify và idempotent

Gateway gọi ngược POST /webhooks/payment — không tin body, verify HMAC, xử lý trùng eventId. Cặp đôi với idempotency key phía client.

case-studypaymentwebhooksecurity
31
Bulk import CSV bệnh nhân — batch, validation, không dừng cả file

Import 10k dòng: chunk size, validate từng row, gom lỗi trả report — một dòng sai không rollback cả file.

case-studyimportcsvbatch
32
Outbox pattern — email không mất sau commit

AFTER_COMMIT vẫn fail nếu process chết trước khi gửi mail. Ghi outbox trong cùng transaction DB, worker gửi sau — at-least-once có kiểm soát.

case-studyoutboxtransactionnotification
33
Optimistic lock — hai điều dưỡng sửa cùng MedicalRecord

@Version và OptimisticLockException: last-write-wins im lặng vs báo conflict cho user merge. Khác race booking slot nhưng cùng đau production.

case-studyconcurrencyjpaoptimistic-lock
34
WebSocket, SSE, và Polling — khi nào dùng cái nào

HTTP không tự push. Short polling đốt server, SSE cho one-way realtime, WebSocket khi cần hai chiều — chọn sai là mở connection vô ích hoặc over-engineer notification đơn giản.

backendwebsocketssepolling
35
Search trong HMS — LIKE, FULLTEXT INDEX, và Elasticsearch

LIKE '%nguyen%' không scale. FULLTEXT cho tên bệnh nhân vừa. Elasticsearch khi cần fuzzy, facet, relevance — đừng over-engineer ngày đầu.

case-studysearchmysqlelasticsearch
36
File upload đúng cách — multipart, base64, và S3 presigned URL

Ảnh X-quang 15MB không nên base64 qua JSON. Multipart cho upload vừa, presigned URL cho file lớn — backend không làm proxy băng thông.

case-studyfile-uploadS3spring-boot
37
Rate limit theo endpoint — cùng một user, khác hàng rào

Global limit 100 req/phút không cứu được POST /payments khi GET /schedules vẫn ổn. Cấu hình limit theo route, tier user, và trả header để client không retry vô hạn.

rate-limitingredisapiproduction
38
State machine thanh toán — cancel đã trả tiền và refund

Boolean isPaid + isCancelled dễ lệch. Enum trạng thái, transition hợp lệ, và refund chỉ khi payment đã CAPTURED — tránh free slot và double refund.

case-studystate-machinepaymentrefund
39
Retry outbound và idempotency — khi HMS gọi gateway

Bài 84 idempotency inbound. Outbound: RestClient timeout, @Retryable chỉ trên read hoặc request có Idempotency-Key — tránh capture hai lần.

retryidempotencyresilienceintegration
40
Soft delete leak — data đã xóa vẫn lọt ra API

@Where giúp nhưng native query, JOIN thiếu filter, và admin export quên deleted_at — patient thấy appointment đã hủy. Cách audit và phòng leak.

soft-deletesecuritydata-leakhibernate
41
Password reset flow — one-time token, expiry, và tại sao không gửi password trong URL

Reset link mang token ngẫu nhiên có TTL, hash trong DB, invalidate sau dùng. Không bao giờ đặt password mới hoặc password cũ trong query string.

case-studysecurityauthenticationKeycloak
42
HTTP status codes đúng cách — tại sao return 200 cho mọi thứ là sai

4xx là lỗi client, 5xx là lỗi server. 201 Created vs 200 OK. API trả 200 kèm success:false khiến monitoring và client đều mù.

APIHTTPRESTsystem-design
43
Spring Security filter chain — request đi qua những gì trước controller

OncePerRequestFilter, JwtAuthenticationFilter, authorization vs authentication — và tại sao filter chạy trước @PreAuthorize.

backendspring-securityJWTfilter
44
CORS — tại sao browser block và config đúng trong Spring

Postman chạy được, browser báo CORS error. Same-origin policy, preflight OPTIONS, và cách cấu hình CorsConfigurationSource trong Spring Security.

backendCORSspringsecurity
45
JWT là gì — và tại sao token không phải session

Session lưu state ở server, JWT tự chứa thông tin và server không cần nhớ gì. Anatomy của một JWT, verify flow, access token vs refresh token, và tại sao JWT không thể revoke ngay.

backendJWTauthenticationsecurity
46
Pagination — offset vs cursor, và tại sao page 500 chậm hơn page 1 đến 500 lần

LIMIT/OFFSET đơn giản nhưng chậm khi offset lớn. Cursor pagination nhanh hơn nhưng không nhảy trang được. Trade-off và cách implement cả hai trong Spring Data.

databasepaginationperformancespring-data
47
Database Migration — vì sao schema thay đổi mà không có migration là đang chơi với lửa

ALTER TABLE tay trên production, ddl-auto=update, hay migration script có version — ba cách thay đổi schema và tại sao chỉ một cái an toàn. Flyway trong Spring Boot từ đầu đến cuối.

databasemigrationflywayschema
48
Behind the feature — nút "Book Appointment" ẩn chứa bao nhiêu hệ thống phía sau

Một nút bấm đơn giản với người dùng — nhưng phía sau là availability check, concurrency control, payment processing, notification, calendar sync, và audit logging.

case-studysystem-designbehind-the-feature
49
Một cái tên đặt sai gây ra bug production

isActive, isEnabled, isDeleted — ba field có vẻ tương tự nhưng semantic khác nhau. Khi developer mới hiểu nhầm, logic sai được build lên trên đó, và bug chỉ xuất hiện trong production.

case-studynamingclean-codebugs
50
Tại sao user thấy data cũ dù đã update — cache consistency trong thực tế

Update profile thành công, reload trang vẫn thấy tên cũ. Cache invalidation là một trong hai vấn đề khó nhất trong computer science — và đây là cách xử lý thực tế.

case-studycachingcache-invalidationconsistency
51
Keycloak revert fail — compensation pattern và cái giá của distributed state

Tạo user trong DB thành công, tạo user trong Keycloak thất bại — hệ thống ở trạng thái inconsistent. Saga pattern và compensation transaction là cách xử lý distributed failure.

case-studysaga-patternKeycloakdistributed-systems
52
Doctor chỉ thấy bệnh nhân của mình — ABAC implement đúng chỗ hay sai chỗ

Role-based access control không đủ cho bài toán: Doctor A chỉ xem được bệnh nhân của Doctor A. Attribute-based access control và cách implement đúng trong Spring Security.

case-studyABACsecurityauthorization
53
Notification gửi trước khi transaction commit — bug thầm lặng nhất

Gửi email xác nhận đặt lịch, sau đó transaction rollback vì lỗi — user nhận email nhưng lịch không tồn tại. Transactional outbox pattern giải quyết vấn đề này đúng cách.

case-studytransactionsoutbox-patternevents
54
User bấm thanh toán 2 lần — idempotency key hoạt động ra sao

Network timeout, user double-click, retry logic — tất cả đều có thể gây ra duplicate payment. Idempotency key đảm bảo cùng một request chỉ được xử lý đúng một lần.

case-studyidempotencypaymentsdistributed-systems
55
2 người đặt lịch cùng 1 slot — Redis Lua atomic giải quyết thế nào

Race condition trong booking system: hai người cùng thấy slot trống, cùng đặt, cả hai thành công — nhưng chỉ có một slot. Redis Lua script và atomic operation là giải pháp.

case-studyRedisconcurrencyrace-condition
56
More layers không phải lúc nào cũng là design tốt hơn

Mỗi layer thêm vào là một indirection, một điểm failure, và một thứ cần maintain. Layer nên tồn tại vì nó giải quyết vấn đề thật — không phải vì pattern nói phải có.

tech-mythsarchitecturelayered-architecture
57
Scaling sớm không phải lúc nào cũng là quyết định đúng

Premature optimization là evil — premature scaling còn tệ hơn. Phần lớn startup thất bại vì không có user, không phải vì không scale được. Build for now, design for scale.

tech-mythsscalabilitystartup
58
Queue không phải lúc nào cũng làm hệ thống ổn định hơn

Queue che đi failure thay vì giải quyết nó. Message tích lũy trong queue, consumer xử lý không kịp, queue overflow — hệ thống sập theo cách chậm hơn nhưng vẫn sập.

tech-mythsqueueresilience
59
Clean Architecture không phải lúc nào cũng tốt

Clean Architecture thêm nhiều layer và abstraction. Với CRUD app đơn giản — đây là over-engineering. Với hệ thống phức tạp có nhiều business rule — đây là đầu tư đúng đắn.

tech-mythsclean-architecturetrade-off
60
DRY không phải lúc nào cũng là best practice

Don't Repeat Yourself hướng dẫn về knowledge duplication — không phải code duplication. Đôi khi duplicate code là đúng. Wrong abstraction tệ hơn duplicate code.

tech-mythsDRYabstraction
61
Cache không phải lúc nào cũng làm hệ thống nhanh hơn

Cache thêm complexity, tăng memory usage, và tạo ra stale data problems. Nếu cache hit rate thấp — bạn đang trả chi phí của cache mà không nhận được lợi ích.

tech-mythscachingperformance
62
NoSQL không scale tốt hơn SQL — đó là cú lừa hoàn hảo

PostgreSQL scale tốt đến hàng tỷ row với index và sharding đúng cách. Nhiều công ty chuyển sang NoSQL rồi nhận ra vấn đề không phải ở SQL — mà ở cách họ dùng database.

tech-mythsNoSQLSQLdatabase
63
Microservices không phải phép màu giúp mày scale

Microservices giải quyết vấn đề team autonomy và deployment independence — không phải vấn đề performance. Scale nằm ở database, caching, và infrastructure — không phải ở việc chia service.

tech-mythsmicroservicesscalability
64
CAP Theorem — ba thứ không thể có cùng lúc

Consistency, Availability, Partition Tolerance — bạn chỉ có thể chọn hai. Hiểu CAP không phải để thuộc lòng — mà để đưa ra quyết định đúng khi thiết kế distributed system.

system-designCAP-theoremdistributed-systems
65
Circuit Breaker — vì sao một service chết mà cả hệ thống không sập theo

Khi service B chậm, service A gọi B sẽ bị block, thread pool cạn kiệt, và A sập theo. Circuit Breaker phát hiện failure và ngắt connection trước khi cascade xảy ra.

system-designcircuit-breakerresilience
66
Rate Limiting — hàng rào bảo vệ API khỏi spam và DDoS

Rate limiting kiểm soát số lượng request trong một khoảng thời gian. Token bucket, sliding window, fixed window — mỗi thuật toán có trade-off khác nhau về accuracy và memory.

system-designrate-limitingsecurity
67
Message Queue — khi nào cần, khi nào không

Queue giải decoupling giữa producer và consumer — nhưng cũng thêm complexity, latency, và failure modes mới. Không phải bài toán nào cũng cần queue.

system-designmessage-queueasync
68
Load Balancer — bí mật giúp hệ thống chịu hàng chục nghìn request/giây

Load balancer phân phối traffic đến nhiều server — nhưng thuật toán, layer 4 vs layer 7, health check, và sticky session mới là thứ quyết định hệ thống có thật sự reliable không.

system-designload-balancerscalability
69
API Design — vì sao 70% lỗi hệ thống bắt nguồn từ API tệ

API xấu không gây lỗi ngay — nó tạo ra misunderstanding giữa các team, edge case không được handle, và coupling ẩn tích lũy theo thời gian.

APIRESTsystem-designdesign
70
Monolith vs Microservices — chọn sai kiến trúc là đốt cả năm

Microservices không phải bước tiến hoá tự nhiên của Monolith. Đây là hai lựa chọn kiến trúc khác nhau, giải quyết vấn đề khác nhau — và cái giá của việc chọn sai rất đắt.

system-designmicroservicesmonolitharchitecture
71
Functional vs Non-functional Requirements — hiểu sai là thiết kế sai

Functional: hệ thống làm gì. Non-functional: hệ thống hoạt động tốt thế nào. Bỏ qua non-functional requirements là lý do nhiều hệ thống sập khi có người dùng thật.

system-designrequirementsscalability
72
System Design là gì — và tại sao code giỏi vẫn làm hệ thống sập

Code đúng chưa đủ để hệ thống chạy tốt ở scale lớn. System design là khả năng thiết kế hệ thống đáp ứng được non-functional requirements: scale, availability, latency.

system-designscalabilityarchitecture
73
Queue — vì sao không phải lúc nào cũng xử lý request ngay lập tức

Một số việc không cần làm ngay: gửi email, tạo report, resize ảnh. Queue tách việc nhận request và xử lý request — giúp hệ thống responsive và resilient hơn.

queueasyncmessage-queue
74
Concurrency — khi nhiều request cùng chạm một tài nguyên

Race condition, lost update, dirty read — đây là những vấn đề xảy ra khi concurrent requests cùng thao tác trên một dữ liệu. Và chúng chỉ xảy ra trong production.

concurrencyrace-conditiondistributed-systems
75
Cache Stampede — khi cache sập gây sập cả hệ thống

Cache expire, hàng nghìn request cùng lúc hit database, database quá tải và sập — kéo theo cache không thể warm up lại. Thundering herd problem và cách phòng tránh.

cachingperformancedistributed-systems
76
Caching — vì sao server không query database mỗi lần

Cache là một trong những công cụ mạnh nhất để tăng performance — và cũng là nguồn gốc của những bug khó chịu nhất. Hiểu caching strategy trước khi implement.

cachingRedisperformance
77
Blocking vs Non-Blocking — thread đang làm gì khi chờ I/O

Blocking I/O giữ thread chờ. Non-blocking I/O giải phóng thread để làm việc khác. Hiểu sự khác biệt này giúp bạn thiết kế hệ thống xử lý concurrent requests tốt hơn.

backendI/Onon-blockingperformance
78
Thread per Request vs Event Loop — Spring Boot đang chọn gì và tại sao

Thread-per-request model của Spring Boot truyền thống vs non-blocking Event Loop của Spring WebFlux. Trade-off về complexity, performance, và khi nào nên dùng cái nào.

backendthreadingconcurrencyspring-boot
79
Request đi qua server như thế nào — từ TCP đến response

Từ lúc bạn gõ Enter đến khi nhận được response — hàng chục bước xảy ra. Hiểu luồng này giúp bạn debug performance issue và thiết kế hệ thống tốt hơn.

backendnetworkingHTTPTCP
80
Connection Pool — vì sao hàng ngàn request chỉ cần vài chục connection

Tạo database connection tốn kém. Connection pool tái sử dụng connection — nhưng pool quá nhỏ thì bottleneck, pool quá lớn thì database overload.

databaseconnection-poolperformance
81
Soft Delete — đơn giản hơn mày nghĩ, và phức tạp hơn mày tưởng

Thêm cột is_deleted tưởng là dễ — cho đến khi unique constraint bị vỡ, query trở nên phức tạp, và audit log không hoạt động như kỳ vọng.

databasesoft-deleteschema-design
82
SQL vs NoSQL — chọn sai là refactor cả đời

NoSQL không phải phiên bản mới hơn của SQL. Chúng giải quyết vấn đề khác nhau. Chọn dựa trên access pattern, consistency requirement, và team capability — không phải trend.

databaseSQLNoSQLtrade-off
83
Normalization vs Denormalization — chuẩn hóa bao nhiêu là đủ?

Normalize quá thì JOIN nhiều, query chậm. Denormalize quá thì data inconsistency. Không có công thức cố định — chỉ có trade-off dựa trên access pattern thực tế.

databasenormalizationschema-design
84
N+1 Query — bug thầm lặng giết performance từ từ

Load 100 user, mỗi user trigger thêm 1 query để lấy orders — là 101 queries thay vì 2. N+1 không gây lỗi, chỉ làm app ngày càng chậm cho đến khi không thể chịu được.

databaseN+1ORMperformance
85
Deadlock — vì sao database tự kill query của mày

Deadlock xảy ra khi hai transaction chờ nhau giải phóng lock. Database phát hiện và kill một transaction — nhưng fix đúng cách mới tránh được tái diễn.

databasedeadlocktransactions
86
Isolation Levels — bốn cấp độ và khi nào mày cần cái nào

Read Uncommitted, Read Committed, Repeatable Read, Serializable — mỗi level là một trade-off giữa consistency và performance. Chọn sai là data corruption hoặc bottleneck.

databasetransactionsisolation
87
MVCC — vì sao read không block write

Multi-Version Concurrency Control là lý do PostgreSQL và MySQL InnoDB có thể xử lý concurrent reads và writes hiệu quả. Hiểu MVCC là hiểu cách database thật sự hoạt động.

databaseMVCCconcurrency
88
Query Execution Plan — database đang làm gì sau cánh gà

EXPLAIN ANALYZE là công cụ mạnh nhất để debug query chậm. Hiểu execution plan giúp bạn biết database đang làm gì và tại sao query của bạn không dùng index.

databasequery-optimizationperformance
89
Index là gì — và tại sao tạo index rồi query vẫn chậm?

Index không phải phép màu. Tạo sai index, query sai cách, hoặc index quá nhiều — đều có thể làm hệ thống chậm hơn thay vì nhanh hơn.

databaseindexperformance