🤖
Sẵn sàng thử sức?
Phỏng vấn thử với AI, nhận đánh giá và feedback chi tiết
Bắt đầu ngay →

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)