Thư Viện Câu Hỏi Phỏng Vấn

Tổng hợp các câu hỏi tuyển dụng thực tế theo nhiều cấp độ từ Entry đến Expert để bạn tự tin chinh phục nhà tuyển dụng.

Tất cả công nghệ .Net (39) ADO.NET (33) Agile scrum (43) Android (44) Angular (121) API Design (53) Arrays (19) ASP.NET (52) ASP.NET MVC (35) ASP.NET Web API (32) Availability & Reliability (2) Azure (53) Backtracking (7) Big-O Notation (16) Binary Tree (19) Bit Manipulation (9) Blockchain (42) C# (105) Caching (2) CAP Theorem (2) CDN (2) Concurrency (2) Cosmos DB (50) Cryptography (4) CSS (63) Data Structures (69) Databases (50) DDD (2) Dependency Injection (4) Design pattern (23) Devops (32) Divide & Conquer (2) Docker (38) Dynamic Programming (10) Entity Framework (57) Fibonacci Series (4) Flutter (136) Git (63) Go lang (60) Graph Theory (19) GraphQL (71) Greedy Algorithms (7) Hash Tables (25) Heaps and Maps (10) HTML (73) Ionic (29) IOS (75) Java (141) Javascript (137) jQuery (95) Kotlin (60) Kubernetes (27) Laravel (90) Layering & Middleware (2) Linked Lists (17) LINQ (30) Load Balancing (2) Microservices (30) Mongodb (27) MySQL (58) Net core (66) Node.js (119) NoSQL (2) Objective-C (33) OOP (75) Package Managerment (60) PHP (78) PostgreSQL (50) PWA (22) Python (82) Queues (11) React Native (38) React.js (116) Reactive Programming (11) Recursion (5) Redis (25) Ruby (79) Ruby on Rails (121) Rust (88) Searching (18) SOA (2) Software Architecture (3) Software Testing (11) Sorting (13) Spring (78) SQL (43) SQL Server (66) Stacks (10) Strings (17) Swift (89) Systems Design (50) T-SQL (43) Trees (31) Trie (8) Typescript (100) Unit testing (22) UX Design (74) Vue.js (84) Web security (45) WebSockets (25) Xamarin (81)
46

Khái niệm Bounded Context trong Domain-Driven Design (DDD) là gì và tại sao nó là ranh giới quan trọng khi chia nhỏ Monolith thành Microservices?

Senior
  • Bounded Context: Là ranh giới logic trong đó một mô hình domain cụ thể, ngôn ngữ thống nhất (Ubiquitous Language) và các thực thể chỉ có ý nghĩa và giá trị nhất quán. Bên ngoài ranh giới đó, cùng một từ ngữ hoặc thực thể có thể mang một ý nghĩa hoàn toàn khác.
  • Ví dụ: Thực thể Product trong Context "Bán hàng" (Sales) sẽ chứa thông tin về giá, khuyến mãi. Nhưng trong Context "Vận chuyển" (Shipping), Product lại chỉ quan tâm tới kích thước, cân nặng.
  • Tầm quan trọng khi chia Microservices: Việc ánh xạ trực tiếp mỗi Bounded Context thành một Microservice độc lập giúp tránh việc chia nhỏ hệ thống sai cách. Nó giúp giữ cho cơ sở dữ liệu và mã nguồn của mỗi service được cô lập, giảm thiểu sự phụ thuộc chéo (Coupling) giữa các nhóm phát triển và đảm bảo tính nhất quán dữ liệu nội bộ.
  • 47

    Định lý CAP là gì? Tại sao một hệ thống phân tán không thể đạt được đồng thời cả 3 yếu tố Consistency, Availability, và Partition Tolerance?

    Senior

    Định lý CAP chỉ ra rằng một hệ thống lưu trữ dữ liệu phân tán chỉ có thể chọn tối đa 2 trong số 3 yếu tố sau:

    1. Consistency (Tính nhất quán): Mọi node đều đọc được dữ liệu mới nhất cùng lúc.
    2. Availability (Tính sẵn sàng): Mọi request gửi đến hệ thống đều nhận được phản hồi thành công (không bị lỗi hoặc timeout) dù có node bị sập.
    3. Partition Tolerance (Tính chịu lỗi phân đoạn): Hệ thống vẫn hoạt động bình thường dù kết nối mạng giữa các node bị đứt quãng.
      • Tại sao không thể chọn cả 3: Trên môi trường mạng thực tế, lỗi đường truyền là không thể tránh khỏi (bắt buộc phải có P). Khi xảy ra đứt kết nối giữa Node A và Node B:
      • Nếu chọn C (Consistency): Để dữ liệu đồng bộ, Node A không được phép ghi dữ liệu mới khi chưa đồng bộ được sang Node B. Request ghi vào Node A sẽ bị từ chối hoặc treo -> Mất tính sẵn sàng (A).
      • Nếu chọn A (Availability): Node A vẫn nhận ghi dữ liệu để đảm bảo hệ thống luôn sẵn sàng phản hồi. Nhưng lúc này dữ liệu trên Node B bị cũ lệch -> Mất tính nhất quán (C).
    48

    Sự khác biệt giữa Load Balancer hoạt động ở Layer 4 (Transport Layer) và Layer 7 (Application Layer) is gì?

    Senior
  • L4 Load Balancer (Layer 4): Hoạt động ở tầng Giao vận (Transport Layer - TCP/UDP). Nó đưa ra quyết định điều phối lưu lượng chỉ dựa trên thông tin gói tin mạng cơ bản như IP nguồn, IP đích và Cổng (Port) mà không đọc nội dung bên trong gói tin. Tốc độ xử lý cực nhanh, tốn ít CPU vì không phải thực hiện giải mã SSL/TLS hay phân tích HTTP.
  • L7 Load Balancer (Layer 7): Hoạt động ở tầng Ứng dụng (Application Layer - HTTP/HTTPS). Nó có khả năng đọc và hiểu nội dung của request HTTP/HTTPS (như URI path, HTTP headers, Cookies, query parameters). Thích hợp cho việc điều hướng thông minh (ví dụ: gửi request /api/v1/users về service A, request /static/* về CDN/service B), hỗ trợ Sticky Sessions bằng Cookie và giải mã SSL (SSL Termination) trực tiếp.
  • 49

    So sánh sự khác nhau về trường hợp sử dụng (Use Cases) của các loại cơ sở dữ liệu NoSQL: Document, Key-Value, Column-family, và Graph Databases?

    Senior

    Mỗi loại CSDL NoSQL được tối ưu hóa cho các cấu trúc dữ liệu và mô hình truy cập khác nhau:

    1. Document Databases (như MongoDB, CouchDB): Lưu trữ dữ liệu dưới dạng JSON/BSON. Thích hợp cho các ứng dụng có cấu trúc dữ liệu linh hoạt, thường xuyên thay đổi (ví dụ: Thông tin sản phẩm thương mại điện tử, hệ thống quản lý nội dung CMS, User Profiles).
    2. Key-Value Stores (như Redis, Memcached): Lưu dữ liệu dạng cặp Khóa - Giá trị đơn giản. Tốc độ đọc/ghi cực nhanh (vài mili giây). Thích hợp cho việc Caching, quản lý Session, đếm số lượt xem (counters), làm hàng đợi tin nhắn (Message Queues).
    3. Column-family Stores (như Cassandra, ScyllaDB): Lưu dữ liệu theo cột thay vì theo dòng. Khả năng ghi cực kỳ tối ưu và scale tuyến tính trên hàng trăm server. Thích hợp cho lưu trữ dữ liệu chuỗi thời gian (Time-series), Log hệ thống khổng lồ, dữ liệu IoT từ các cảm biến.
    4. Graph Databases (như Neo4j): Lưu dữ liệu dưới dạng các Đỉnh (Nodes) và Cạnh (Edges - thể hiện mối quan hệ). Tối ưu cho các truy vấn quan hệ nhiều tầng phức tạp. Thích hợp cho Mạng xã hội (Social Networks), Hệ thống gợi ý (Recommendation Engines), Phát hiện gian lận tài chính (Fraud Detection).
    50

    Lỗ hổng Race Condition là gì? Phân biệt cơ chế khóa lạc quan (Optimistic Locking) và khóa bi quan (Pessimistic Locking) khi xử lý bất đồng bộ?

    Senior

    Race Condition xảy ra khi nhiều tiến trình/luồng đồng thời đọc và ghi vào một tài nguyên dùng chung mà không được đồng bộ hóa, dẫn đến kết quả cuối cùng phụ thuộc vào thứ tự thực thi ngẫu nhiên của các luồng.

    • Pessimistic Locking (Khóa bi quan): Giả định xung đột luôn xảy ra. Khi một luồng đọc dữ liệu, nó sẽ khóa ngay bản ghi đó lại (ví dụ: SELECT ... FOR UPDATE trong SQL). Các luồng khác muốn đọc/ghi bản ghi đó bắt buộc phải xếp hàng chờ cho đến khi khóa được giải phóng.
      • Ưu điểm: Đảm bảo tính nhất quán tuyệt đối, tránh hoàn toàn xung đột.
      • Nhược điểm: Dễ gây nghẽn hệ thống (lock contention), giảm hiệu năng và có nguy cơ xảy ra Deadlock.
    • Optimistic Locking (Khóa lạc quan): Giả định xung đột rất hiếm khi xảy ra. Khi đọc dữ liệu, không có khóa nào được thiết lập. Nhưng bản ghi sẽ lưu thêm một trường version hoặc timestamp. Khi ghi đè thay đổi, hệ thống kiểm tra xem version trong DB có còn giống lúc đọc hay không (UPDATE users SET balance = 50, version = version + 1 WHERE id = 1 AND version = 2). Nếu version đã thay đổi do luồng khác ghi trước đó, giao dịch sẽ bị từ chối và luồng hiện tại phải thử lại (retry).
      • Ưu điểm: Hiệu năng cực cao khi ít xung đột.
      • Nhược điểm: Tốn tài nguyên CPU để retry nếu tần suất xung đột lớn.
    51

    Service Mesh (như Istio, Linkerd) là gì? Tại sao nó giải quyết tốt các bài toán về Service-to-Service Communication trong Kubernetes?

    Senior

    Service Mesh là một tầng cơ sở hạ tầng chuyên dụng, độc lập được thêm vào hệ thống để quản lý việc giao tiếp an toàn, tin cậy và nhanh chóng giữa các microservices.

    • Cơ chế hoạt động (Sidecar Pattern): Service Mesh triển khai một proxy siêu nhẹ (như Envoy) chạy song song bên cạnh mỗi container ứng dụng (gọi là Sidecar Proxy). Mọi lưu lượng mạng đi vào và đi ra khỏi service đều được định tuyến qua sidecar này mà ứng dụng không hề hay biết.
    • Các bài toán giải quyết được:
      1. Traffic Management: Cấu hình định tuyến thông minh, Canary Deployments, A/B Testing, tự động Retry khi lỗi, Circuit Breaking.
      2. Security: Tự động mã hóa toàn bộ dữ liệu truyền tải giữa các services bằng giao thức mTLS (mutual TLS) và quản lý chứng chỉ số mà không cần sửa đổi mã nguồn ứng dụng.
      3. Observability: Thu thập số liệu chi tiết (Metrics, Distributed Tracing, Logs) về hiệu năng mạng, tỷ lệ lỗi giữa các cuộc gọi dịch vụ một cách tập trung.
    52

    Phân biệt sự khác nhau giữa Sao chép đồng bộ (Synchronous Replication) và Sao chép bất đồng bộ (Asynchronous Replication) trong cơ sở dữ liệu?

    Senior

    Sao chép dữ liệu (Replication) giúp tăng tính sẵn sàng và khả năng chịu lỗi của hệ thống CSDL bằng cách nhân bản dữ liệu từ Node Chính (Leader/Master) sang các Node Phụ (Follower/Replica):

    • Synchronous Replication (Sao chép đồng bộ): Khi Leader nhận được yêu cầu ghi, nó ghi dữ liệu cục bộ và gửi dữ liệu đó sang toàn bộ các Followers. Leader sẽ chờ cho đến khi tất cả Followers phản hồi đã ghi thành công rồi mới phản hồi commit thành công cho client.
      • Ưu điểm: Nhất quán dữ liệu tuyệt đối (Zero Data Loss). Nếu Leader bị sập, các Followers chắc chắn chứa dữ liệu mới nhất để thay thế.
      • Nhược điểm: Tốc độ ghi bị chậm (bằng tốc độ của Follower chậm nhất) và nếu một Follower bị mất mạng, toàn bộ hệ thống sẽ bị treo ghi.
    • Asynchronous Replication (Sao chép bất đồng bộ): Leader ghi dữ liệu cục bộ và phản hồi commit thành công ngay lập tức cho client. Việc chuyển dữ liệu sang các Followers được thực hiện ngầm (bất đồng bộ) sau đó.
      • Ưu điểm: Tốc độ ghi cực nhanh, hệ thống vẫn hoạt động bình thường kể cả khi các Followers bị mất kết nối.
      • Nhược điểm: Có nguy cơ mất dữ liệu (Data Loss) nếu Leader bị sập đột ngột trước khi kịp đồng bộ các thay đổi mới sang Followers.
    53

    Hãy giải thích thuật toán Token Bucket và Leaky Bucket dùng trong thiết kế hệ thống giới hạn tần suất yêu cầu (Rate Limiting)?

    Senior

    Cả hai đều là thuật toán kinh điển dùng để giới hạn số lượng request gửi lên hệ thống để chống tấn công DDoS và quá tải:

    • Token Bucket (Thùng chứa Token):
      • Cơ chế: Có một thùng chứa có dung lượng tối đa là B tokens. Các tokens được thêm vào thùng một cách tuần tự theo tỷ lệ r cố định mỗi giây. Khi một request gửi đến, nó cần tiêu thụ 1 token để được xử lý. Nếu thùng hết token, request bị từ chối.
      • Đặc điểm: Cho phép xử lý các đợt lưu lượng truy cập tăng đột biến (burst of traffic) miễn là trong thùng vẫn còn đủ token dự trữ.
    • Leaky Bucket (Thùng rò rỉ):
      • Cơ chế: Có một thùng chứa nước có dung lượng tối đa là B (tượng trưng cho hàng đợi request). Các request đến giống như nước đổ vào thùng. Đáy thùng có một lỗ nhỏ rò rỉ nước ra ngoài với tốc độ r cố định không đổi để xử lý. Nếu thùng đầy nước, request mới sẽ bị tràn ra ngoài (bị từ chối).
      • Đặc điểm: Khống chế tốc độ xử lý đầu ra luôn ở mức ổn định, mượt mà (smooth rate) bất kể tốc độ đầu vào có tăng đột biến như thế nào.
    54

    Mẫu thiết kế CQRS (Command Query Responsibility Segregation) kết hợp Event Sourcing hoạt động như thế nào? Ưu và nhược điểm là gì?

    Senior
  • CQRS: Tách biệt hoàn toàn luồng ghi dữ liệu (Command) và luồng đọc dữ liệu (Query). Sử dụng 2 database riêng biệt được tối ưu hóa cho từng mục đích (ví dụ: DB Ghi dạng Write-optimized SQL, DB Đọc dạng Read-optimized NoSQL/Elasticsearch).
  • Event Sourcing: Thay vì chỉ lưu trữ trạng thái hiện tại của đối tượng trong DB, ta lưu trữ toàn bộ chuỗi các sự kiện thay đổi trạng thái xảy ra theo trình tự thời gian (Event Store). Trạng thái hiện tại được dựng lại bằng cách chạy lại (replay) toàn bộ chuỗi sự kiện này.
  • CQRS + Event Sourcing: Khi Command Service ghi một sự kiện mới vào Event Store (DB Ghi), một event handler sẽ lắng nghe sự kiện đó và cập nhật (project) dữ liệu tương ứng sang DB Đọc để phục vụ Query Service.
  • Ưu điểm: Khả năng mở rộng đọc/ghi độc lập cực cao, lưu giữ lịch sử kiểm toán (Audit Trail) hoàn chỉnh, dễ dàng tái tạo trạng thái tại bất kỳ thời điểm nào trong quá khứ.
  • Nhược điểm: Hệ thống cực kỳ phức tạp, tính nhất quán cuối cùng (Eventual Consistency) làm tăng độ khó khi thiết kế UI/UX.
  • 55

    Hãy giải thích các chiến lược thu hồi bộ nhớ đệm (Cache Eviction Policies) phổ biến như LRU (Least Recently Used) và LFU (Least Frequently Used)?

    Senior

    Khi bộ nhớ đệm (Cache) bị đầy, hệ thống cần giải phóng không gian bằng cách loại bỏ các key cũ theo các chiến lược nhất định:

    • LRU (Least Recently Used - Ít được sử dụng gần đây nhất): Loại bỏ phần tử đã lâu không được truy cập. Cơ chế hoạt động dựa trên thứ tự thời gian của lần truy cập cuối cùng. Mỗi lần một key được truy cập, nó sẽ được đưa lên đầu danh sách. Khi đầy, phần tử ở cuối danh sách (cũ nhất) sẽ bị xóa. Phù hợp cho đa số trường hợp vì dữ liệu vừa được truy cập có khả năng cao sẽ được truy cập lại.
    • LFU (Least Frequently Used - Ít được sử dụng thường xuyên nhất): Loại bỏ phần tử có tần suất (số lần) truy cập thấp nhất trong một khoảng thời gian. Cơ chế này đếm số lần truy cập của từng key. Khi đầy, key có bộ đếm nhỏ nhất bị xóa.
    • Khác biệt: LRU tập trung vào tính chất thời gian (recency), trong khi LFU tập trung vào độ phổ biến (frequency). LFU có thể gặp vấn đề nếu một key được truy cập rất nhiều lần trong quá khứ nhưng hiện tại không dùng nữa, nó vẫn chiếm chỗ trong cache do bộ đếm tích lũy quá cao (có thể giải quyết bằng cách áp dụng cơ chế suy giảm - aging).
    56

    Khái niệm Circuit Breaker Pattern trong thiết kế hệ thống phân tán là gì? Giải thích 3 trạng thái Closed, Open và Half-Open?

    Senior

    Circuit Breaker (Bộ ngắt mạch) là mẫu thiết kế ngăn chặn một service liên tục gửi request đến một service khác đang bị lỗi hoặc quá tải, giúp bảo vệ tài nguyên hệ thống không bị cạn kiệt (như nghẽn luồng) và ngăn sập dây chuyền (Cascading Failure).

    • 3 Trạng thái hoạt động:
      1. Closed (Đóng): Trạng thái bình thường. Mọi request đều được cho phép đi qua. Circuit Breaker sẽ theo dõi tỷ lệ lỗi của các phản hồi. Nếu tỷ lệ lỗi vượt quá ngưỡng cấu hình (ví dụ: 50% request thất bại), nó sẽ chuyển sang trạng thái Open.
      2. Open (Mở): Trạng thái ngắt mạch. Mọi request gửi đến sẽ bị chặn ngay lập tức và trả về lỗi giả lập (fallback error/timeout) mà không cần gọi đến service đích, giúp service đích có thời gian phục hồi.
      3. Half-Open (Nửa mở): Sau một khoảng thời gian chờ cấu hình sẵn ở trạng thái Open, Circuit Breaker sẽ tự động chuyển sang Half-Open. Nó cho phép một số lượng nhỏ request thử nghiệm đi qua. Nếu các request này thành công 100%, hệ thống coi như đã phục hồi và chuyển lại về Closed. Nếu có bất kỳ request nào thất bại, nó lập tức quay về trạng thái Open.
    57

    Hãy giải thích tính chất nhất quán cuối cùng (Eventual Consistency) và sự khác biệt so với nhất quán mạnh (Strong Consistency)?

    Senior
  • Strong Consistency (Nhất quán mạnh): Đảm bảo dữ liệu được cập nhật đồng thời ở tất cả các node. Ngay sau khi một thao tác ghi thành công, bất kỳ truy cập đọc nào sau đó ở bất kỳ node nào cũng chắc chắn trả về giá trị mới nhất.
    • Đặc điểm: Rần dễ lập trình, nhưng tốn nhiều thời gian xử lý và làm giảm tính sẵn sàng (Availability) khi có lỗi mạng.
  • Eventual Consistency (Nhất quán cuối cùng): Chấp nhận dữ liệu bị lệch pha tạm thời giữa các node. Hệ thống không hứa rằng mọi node sẽ trả về dữ liệu mới nhất ngay lập tức. Tuy nhiên, nếu không có thao tác ghi mới nào phát sinh, tất cả các node sẽ dần dần đồng bộ dữ liệu và cuối cùng (eventually) đạt trạng thái giống hệt nhau.
    • Đặc điểm: Tốc độ ghi cực nhanh, tính sẵn sàng cao. Thích hợp cho các hệ thống quy mô lớn như mạng xã hội (số lượt thích, bình luận hiển thị lệch vài giây không ảnh hưởng đến trải nghiệm người dùng).
  • 58

    SOA (Service-Oriented Architecture) là gì? So sánh sự khác nhau giữa kiến trúc SOA và kiến trúc Microservices?

    Senior

    SOA là kiến trúc hướng dịch vụ, chia hệ thống thành các dịch vụ độc lập giao tiếp với nhau qua mạng. Microservices được coi là sự tiến hóa và tối giản hóa của SOA:

    • Phạm vi & Chia nhỏ: SOA tập trung vào việc tích hợp các ứng dụng doanh nghiệp lớn khác nhau (Enterprise Application Integration). Microservices tập trung vào việc chia nhỏ một ứng dụng đơn lẻ thành các dịch vụ siêu nhỏ hoạt động độc lập.
    • Giao tiếp: SOA sử dụng một trục tích hợp dịch vụ trung tâm lớn (Enterprise Service Bus - ESB) chứa nhiều logic chuyển đổi định dạng phức tạp (như SOAP/XML). Microservices sử dụng cơ chế giao tiếp đơn giản, gọn nhẹ (như RESTful API / JSON, gRPC, Message Broker).
    • Quản lý dữ liệu: Trong SOA, các dịch vụ có thể chia sẻ chung một cơ sở dữ liệu lớn. Trong Microservices, mỗi dịch vụ bắt buộc phải sở hữu cơ sở dữ liệu riêng của nó (Database-per-Service) để đảm bảo tính cô lập hoàn toàn.
    59

    Enterprise Service Bus (ESB) đóng vai trò gì trong kiến trúc SOA truyền thống và tại sao nó bị loại bỏ trong Microservices?

    Senior

    Trong kiến trúc SOA, ESB hoạt động như một hệ thống bưu điện trung tâm trung chuyển và điều phối toàn bộ thông tin liên lạc giữa các dịch vụ:

    • Vai trò của ESB: Chuyển đổi định dạng dữ liệu (ví dụ: XML sang JSON), chuyển đổi giao thức (HTTP sang JMS), định tuyến tin nhắn thông minh và quản lý các giao dịch phức tạp.
    • Lý do bị loại bỏ trong Microservices:
      1. Quá nhiều Business Logic tập trung: ESB vi phạm nguyên tắc "Smart endpoints and dumb pipes" (Điểm cuối thông minh, đường ống ngu ngốc). Việc đưa quá nhiều logic vào ESB biến nó thành một khối Monolith mới, khiến việc nâng cấp, thay đổi một dịch vụ đòi hỏi phải cấu hình lại ESB, gây chậm trễ.
      2. Single Point of Failure: ESB bị sập sẽ làm toàn bộ hệ thống tê liệt.
      3. Microservices thay thế bằng API Gateway (chỉ làm nhiệm vụ routing, rate limiting, authentication đơn giản) và để các dịch vụ tự xử lý dữ liệu của chúng.
    60

    Cơ chế vô hiệu hóa cache (Cache Invalidation) trong CDN hoạt động như thế nào? Phân biệt giữa Purge và Ban?

    Senior

    Khi dữ liệu tĩnh trên server gốc thay đổi trước khi thời gian hết hạn (TTL) của CDN kết thúc, ta cần vô hiệu hóa cache cũ tại các Edge Servers để người dùng nhận được file mới:

    • Purge (Xóa): CDN sẽ xóa bỏ hoàn toàn file cũ khỏi bộ nhớ đệm của Edge Server ngay lập tức. Lần request tiếp theo của người dùng sẽ là Cache Miss, CDN phải quay lại server gốc kéo file mới về. Thích hợp khi biết chính xác URL của file vừa thay đổi.
    • Ban (Cấm/Gắn thẻ): Thay vì xóa vật lý, CDN đánh dấu (invalidate) file cũ dựa trên các tiêu chí hoặc biểu thức chính quy (Regex) hoặc HTTP Tags (Cache-Tags). Khi người dùng request, CDN gửi một request gọn nhẹ (HEAD) kèm theo điều kiện (If-Modified-Since) về server gốc để kiểm tra xem file thực sự đổi chưa. Nếu có, CDN mới kéo file mới về; nếu chưa, nó tiếp tục dùng file cũ.
    • So sánh: Purge nhanh và triệt để hơn nhưng có thể tạo tải đột biến (thực hiện kéo lại file lớn) lên server gốc. Ban linh hoạt hơn, cho phép xóa hàng loạt file có chung tiền tố.

    vừa nâng cấp PRO khóa 1 phút trước   Tìm hiểu khóa học