Mở đăng ký khóa học Fullstack qua Zoom. Tham khảo tại đây

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.

Interactive Practice Tổng cộng 4,442 câu hỏi độc bản

Luyện Tập Phỏng Vấn Thử

Mô phỏng áp lực phỏng vấn thật với đồng hồ đếm ngược từng câu, tự đánh giá phản xạ và đo lường độ sẵn sàng của bạn.

Vui lòng đăng nhập để tham gia luyện tập và lưu tiến độ phỏng vấn.
Tất cả công nghệ .Net (39) ADO.NET (44) Agile scrum (33) Android (40) Angular (40) API Design (40) Arrays (40) ASP.NET (42) ASP.NET MVC (40) ASP.NET Web API (49) Availability & Reliability (40) Azure (49) Backtracking (40) Big-O Notation (35) Binary Tree (40) Bit Manipulation (40) Blockchain (45) C# (45) Caching (50) CAP Theorem (45) CDN (45) Concurrency (49) Cosmos DB (44) Cryptography (40) CSS (40) Data Structures (40) Databases (35) DDD (42) Dependency Injection (50) Design pattern (45) Devops (50) Divide & Conquer (40) Docker (43) Dynamic Programming (40) Entity Framework (40) Fibonacci Series (35) Flutter (40) Git (40) Go lang (40) Graph Theory (40) GraphQL (40) Greedy Algorithms (40) Hash Tables (40) Heaps and Maps (35) HTML (40) Ionic (45) IOS (45) Java (73) Javascript (81) jQuery (40) Kotlin (50) Kubernetes (11) Laravel (41) Layering & Middleware (44) Linked Lists (45) LINQ (40) Load Balancing (45) Microservices (44) Mongodb (45) MySQL (44) Net core (44) next.js (52) Node.js (40) NoSQL (48) Objective-C (40) OOP (44) Package Managerment (50) PHP (40) PostgreSQL (44) PWA (40) Python (41) Queues (44) React Native (48) React.js (45) Reactive Programming (50) Recursion (45) Redis (40) Ruby (44) Ruby on Rails (48) Rust (40) Searching (45) SOA (42) Software Architecture (44) Software Testing (40) Sorting (48) Spring (45) SQL (37) SQL Server (45) Stacks (44) Strings (50) Swift (45) System Design (56) Systems Design (7) T-SQL (39) Trees (49) Trie (35) Typescript (44) Unit testing (49) UX Design (50) Vue.js (50) Web security (40) WebSockets (49) Xamarin (40)
346

Trong ASP.NET Web API, tại sao việc sử dụng Asynchronous Programming (async/await) lại quan trọng đối với khả năng mở rộng của hệ thống, và những sai lầm phổ biến nào cần tránh?

Junior

Trong ASP.NET Web API, việc sử dụng async/await giúp giải phóng các Thread từ Thread Pool trong khi chờ đợi các tác vụ I/O (như truy vấn Database hoặc gọi API bên thứ ba) hoàn tất. Điều này giúp ứng dụng xử lý được nhiều Concurrent Requests hơn mà không cần tăng số lượng Thread.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
347

Trong MongoDB, tại sao việc thiết kế Schema với mảng dữ liệu tăng trưởng không giới hạn (Unbounded Arrays) lại gây ra vấn đề hiệu năng và cách xử lý tối ưu là gì?

Junior

Bản chất vấn đề

Khi một tài liệu trong MongoDB chứa mảng có kích thước tăng trưởng không giới hạn (ví dụ: danh sách log, bình luận của một bài viết), tài liệu đó sẽ liên tục thay đổi kích thước. Khi kích thước tài liệu vượt quá không gian được cấp phát ban đầu (padding), MongoDB phải di chuyển tài liệu sang một vị trí mới trên đĩa (document relocation), gây ra hiện tượng phân mảnh dữ liệu và làm chậm tốc độ ghi.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
348

Trong Redis, cơ chế Persistence giữa RDB (Redis Database Backup) và AOF (Append Only File) khác nhau như thế nào và khi nào nên sử dụng kết hợp cả hai?

Junior

So sánh cơ chế

  1. RDB: Tạo các bản snapshot của dữ liệu tại các thời điểm cụ thể. Ưu điểm là tốc độ khôi phục nhanh, tệp tin nhỏ. Nhược điểm là có thể mất dữ liệu từ lần snapshot cuối cùng nếu hệ thống gặp sự cố.
  2. AOF: Ghi lại mọi lệnh thay đổi dữ liệu vào tệp log. Ưu điểm là tính an toàn dữ liệu cao hơn (có thể cấu hình fsync mỗi giây). Nhược điểm là tệp tin lớn hơn và tốc độ khôi phục chậm hơn RDB.

Chiến lược thực chiến

Trong môi trường Enterprise, khuyến nghị sử dụng kết hợp cả hai:

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
349

Trong các hệ thống NoSQL, khái niệm Partition Key và Clustering Key trong Apache Cassandra đóng vai trò gì trong việc truy vấn dữ liệu?

Junior

Phân tích kiến trúc

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
350

Tại sao việc sử dụng các truy vấn có chứa toán tử $ne (not equal) hoặc $nin (not in) trong MongoDB thường gây suy giảm hiệu năng trên các tập dữ liệu lớn?

Junior

Bản chất kỹ thuật

Toán tử $ne và $nin yêu cầu MongoDB phải thực hiện quét toàn bộ chỉ mục (Index Scan) hoặc thậm chí là quét toàn bộ collection (Collection Scan) vì chúng không thể tận dụng hiệu quả cấu trúc cây B-Tree của chỉ mục để tìm kiếm một dải giá trị cụ thể.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
351

Trong kiến trúc Microservices sử dụng NoSQL, làm thế nào để xử lý bài toán nhất quán dữ liệu giữa các dịch vụ khi không thể sử dụng Transaction ACID truyền thống?

Junior

Giải pháp kiến trúc

Vì NoSQL thường không hỗ trợ Transaction đa dịch vụ, chúng ta áp dụng mô hình Eventual Consistency thông qua các cơ chế sau:

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
352

Trong cấu trúc dữ liệu cây, tại sao việc sử dụng đệ quy (Recursion) để duyệt cây có thể dẫn đến lỗi Stack Overflow và làm thế nào để chuyển đổi sang phương pháp duyệt lặp (Iterative) sử dụng Stack thủ công?

Junior

Bản chất vấn đề

Khi duyệt cây bằng đệ quy, mỗi lần gọi hàm, hệ thống sẽ tạo một Stack Frame mới để lưu trữ biến cục bộ và địa chỉ trả về. Nếu cây có độ sâu quá lớn (ví dụ cây bị lệch - Skewed Tree), số lượng Stack Frame sẽ vượt quá dung lượng bộ nhớ Stack được cấp phát, gây ra lỗi Stack Overflow.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
353

Khi thiết kế hệ thống gợi ý từ khóa (Autocomplete), tại sao cấu trúc cây Trie lại tối ưu hơn so với việc lưu trữ danh sách từ khóa trong một mảng hoặc Hash Table?

Junior

Phân tích hiệu năng

  1. Hash Table: Mặc dù tìm kiếm theo khóa chính mất O(1), nhưng không hỗ trợ tìm kiếm tiền tố (Prefix Search) hiệu quả. Để tìm các từ bắt đầu bằng 'uni', bạn phải duyệt qua toàn bộ bảng băm, gây lãng phí tài nguyên.
  2. Mảng: Tìm kiếm nhị phân trên mảng đã sắp xếp mất O(k * log n) với k là độ dài từ. Tuy nhiên, việc chèn thêm từ mới rất tốn kém do phải dịch chuyển phần tử.
  3. Trie (Prefix Tree):
    • Độ phức tạp tìm kiếm là O(m) với m là độ dài của tiền tố, độc lập với số lượng từ có trong tập dữ liệu.
    • Chia sẻ tiền tố chung giữa các từ, giúp tiết kiệm bộ nhớ khi lưu trữ tập từ vựng lớn.

Ứng dụng thực chiến

Trong các hệ thống Enterprise, Trie thường được tối ưu bằng cách sử dụng Compressed Trie (Radix Tree) để giảm số lượng nút trung gian, từ đó giảm thiểu số lần truy cập bộ nhớ (Cache Misses) và tăng tốc độ phản hồi cho người dùng.

354

Trong bài toán tìm kiếm giá trị lớn nhất hoặc nhỏ nhất trong một cây nhị phân tìm kiếm (BST), tại sao chúng ta chỉ cần đi theo một hướng duy nhất thay vì duyệt toàn bộ cây?

Junior

Bản chất của BST

Cây tìm kiếm nhị phân (BST) duy trì tính chất: mọi nút ở nhánh trái đều nhỏ hơn nút gốc, và mọi nút ở nhánh phải đều lớn hơn nút gốc. Tính chất này được bảo toàn đệ quy trên toàn bộ các cây con.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
355

Làm thế nào để xác định một cây nhị phân có phải là cây nhị phân tìm kiếm (BST) hợp lệ hay không? Những lỗi logic nào thường gặp khi lập trình viên Junior giải quyết bài toán này?

Junior

Lỗi logic thường gặp

Nhiều lập trình viên Junior thường chỉ kiểm tra điều kiện: node.left.val < node.val < node.right.val. Cách này sai vì nó không kiểm tra được các nút ở nhánh con xa hơn. Ví dụ: một nút bên phải của gốc có thể nhỏ hơn gốc, vi phạm tính chất BST.

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
356

Trong quá trình xóa một nút trong cây nhị phân tìm kiếm (BST), tại sao việc thay thế nút bị xóa bằng giá trị kế nhiệm (In-order Successor) lại được ưu tiên hơn các phương pháp khác?

Junior

Các trường hợp xóa nút

  1. Nút lá: Chỉ cần xóa trực tiếp.
  2. Nút có một con: Thay thế nút đó bằng nút con duy nhất.
  3. Nút có hai con: Đây là trường hợp phức tạp nhất.

Tại sao chọn In-order Successor?

In-order Successor là nút nhỏ nhất trong cây con bên phải. Việc thay thế nút bị xóa bằng giá trị này đảm bảo:

Nội dung chi tiết câu trả lời, phân tích kỹ thuật chuyên sâu, mã nguồn minh họa và các trường hợp ngoại lệ chỉ dành riêng cho học viên Unicode E-learning...

Để mở khóa toàn bộ giải pháp chi tiết và tài liệu hướng dẫn phỏng vấn, vui lòng nâng cấp tài khoản hoặc tham gia gói Learning Pass để truy cập không giới hạn.

// Mã nguồn và kiến trúc giải pháp bị ẩn đối với tài khoản chưa nâng cấp...
357

Trong kiến trúc Azure, khi nào bạn nên sử dụng Azure Functions thay vì Azure App Service để triển khai một tính năng trong hệ thống Enterprise?

Junior

Azure Functions là dịch vụ Serverless Compute, trong khi Azure App Service là nền tảng PaaS dành cho các ứng dụng web truyền thống. Bạn nên chọn Azure Functions khi: 1. Xử lý các tác vụ theo sự kiện (Event-driven): Ví dụ như xử lý tệp khi được tải lên Blob Storage hoặc xử lý tin nhắn từ Service Bus. 2. Tải công việc không liên tục: Nếu ứng dụng chỉ chạy vào các khung giờ nhất định, Serverless giúp tối ưu chi phí vì bạn chỉ trả tiền khi code thực thi. 3. Kiến trúc Microservices nhỏ: Các logic nghiệp vụ tách biệt, độc lập. Ngược lại, chọn App Service khi ứng dụng yêu cầu thời gian chạy liên tục (Always On), cần kiểm soát cấu hình server chi tiết hoặc ứng dụng có lưu trữ trạng thái (stateful) phức tạp.

358

Làm thế nào để giám sát và truy vết lỗi (Logging & Tracing) cho ứng dụng trên Azure hiệu quả nhất bằng Azure Application Insights?

Junior

Để giám sát hiệu quả, bạn cần tích hợp Application Insights SDK vào ứng dụng. Các bước thực hiện: 1. Cấu hình Connection String trong App Settings. 2. Sử dụng TelemetryClient để ghi lại các sự kiện tùy chỉnh (Custom Events) hoặc ngoại lệ (Exceptions). 3. Tận dụng tính năng Application Map để trực quan hóa các phụ thuộc giữa các dịch vụ. 4. Sử dụng Kusto Query Language (KQL) trong Log Analytics để truy vấn dữ liệu. Ví dụ truy vấn lỗi: requests | where success == false | summarize count() by operation_Name. Kinh nghiệm thực chiến: Luôn gắn Correlation ID vào các request để truy vết luồng dữ liệu đi qua nhiều dịch vụ khác nhau.

359

Sự khác biệt giữa Azure Content Delivery Network (CDN) và Azure Front Door là gì và khi nào nên sử dụng mỗi loại?

Junior

Azure CDN tập trung vào việc tăng tốc phân phối nội dung tĩnh (hình ảnh, CSS, JS) bằng cách cache tại các Edge Node gần người dùng nhất. Azure Front Door là một dịch vụ Application Delivery Network toàn diện hơn, cung cấp khả năng cân bằng tải (Load Balancing) lớp 7, bảo mật WAF (Web Application Firewall) và tăng tốc cho cả nội dung động lẫn tĩnh. Sử dụng Azure CDN khi bạn chỉ cần phân phối tệp tĩnh đơn thuần. Sử dụng Azure Front Door khi bạn cần kiến trúc Global Load Balancing, yêu cầu khả năng failover giữa các vùng (regions) và bảo mật nâng cao cho ứng dụng web đa vùng.

360

Khi triển khai ứng dụng trên Azure, làm thế nào để đảm bảo tính bảo mật cho các kết nối giữa các dịch vụ mà không cần dùng Connection String chứa mật khẩu?

Junior

Giải pháp tối ưu là sử dụng Managed Identity. Cơ chế này cho phép Azure tự động quản lý danh tính của tài nguyên (ví dụ: App Service) trong Microsoft Entra ID. Các bước thực hiện: 1. Bật System-assigned Managed Identity trên App Service. 2. Cấp quyền truy cập (RBAC) cho Identity đó trên tài nguyên đích (ví dụ: SQL Database hoặc Key Vault). 3. Trong code, sử dụng thư viện DefaultAzureCredential để xác thực. Ví dụ C#: var client = new SecretClient(new Uri(vaultUri), new DefaultAzureCredential());. Cách này loại bỏ hoàn toàn việc lưu trữ thông tin xác thực trong mã nguồn hoặc tệp cấu hình.

High-Ticket Mentoring
Cần Mentor Phỏng Vấn Thử 1-1 & Tối Ưu CV?

Mô phỏng phỏng vấn kỹ thuật thực tế 1-1 qua Google Meet, nhận xét chi tiết điểm mạnh/yếu và sửa CV trực tiếp cùng giảng viên Unicode.

AI Resume Scanner
Kiểm Tra CV Chuẩn ATS Miễn Phí

Tải CV của bạn lên để hệ thống AI rà soát từ khóa kỹ năng, định dạng và tính điểm chuẩn nhà tuyển dụng.

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