Sẵn sàng thử sức?
Phỏng vấn thử với AI, nhận đánh giá và feedback chi tiết
Monolith vs Microservices - Ưu nhược điểm?
| Monolith | Microservices | |
|---|---|---|
| Ưu | Đơn giản, dễ debug, 1 deploy | Scale độc lập, fault isolation |
| Nhược | Khó scale, tight coupling | Phức tạp, network latency |
Khi nào dùng Microservices? Team lớn, cần scale từng phần, different tech stacks.
Cache strategies: Cache-Aside vs Write-Through?
Cache-Aside (Lazy Loading):
- Read: Check cache → miss → query DB → update cache
- Write: Update DB → invalidate cache
Write-Through:
- Write: Update cache → update DB
- Đảm bảo consistency nhưng write chậm hơn
# Cache-Aside
def get_user(user_id):
user = cache.get(f"user:{user_id}")
if not user:
user = db.query(User).get(user_id)
cache.set(f"user:{user_id}", user, ttl=3600)
return user
Message Queue dùng để làm gì? Ví dụ?
Use cases:
- Async processing: Send email, resize image
- Decoupling: Services communicate không cần biết về nhau
- Load leveling: Buffer spikes in traffic
Tools: RabbitMQ, Kafka, AWS SQS, Redis Streams.
Database transactions và ACID là gì?
- Atomicity: Tất cả hoặc không gì cả
- Consistency: Data luôn valid state
- Isolation: Transactions không ảnh hưởng lẫn nhau
- Durability: Committed data không mất
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
N+1 Query Problem là gì? Cách fix?
Problem: 1 query lấy list, N queries lấy relations.
# N+1 Problem
posts = Post.all() # 1 query
for post in posts:
print(post.author.name) # N queries
# Solution: Eager loading
posts = Post.query.options(joinedload(Post.author)).all() # 1 query
JWT vs Session-based Authentication?
| Session | JWT | |
|---|---|---|
| Storage | Server (Redis/DB) | Client (localStorage) |
| Stateful | Yes | No |
| Revoke | Easy | Hard (cần blacklist) |