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.
961

Cơ chế hoạt động của Single Field Index và Compound Index trong MongoDB khác nhau như thế nào, và quy tắc Left-prefix áp dụng ra sao?

Junior

1. Bản chất cơ chế

  • Single Field Index: Chỉ mục trên một trường duy nhất của document, giúp tăng tốc độ tìm kiếm cho các truy vấn dựa trên trường đó.
  • Compound Index (Chỉ mục kết hợp): Chỉ mục trên nhiều trường cùng lúc. MongoDB sắp xếp dữ liệu theo thứ tự các trường được định nghĩa trong index.

2. Quy tắc Left-prefix (Tiền tố bên trái)

  • Khi bạn tạo một Compound Index gồm nhiều trường, ví dụ: { status: 1, createdAt: -1 }, MongoDB có thể sử dụng index này cho:
    • Truy vấn tìm kiếm theo status.
    • Truy vấn tìm kiếm theo cả status VÀ createdAt.
  • Tuy nhiên, nó KHÔNG tối ưu hoặc không sử dụng index nếu bạn chỉ truy vấn mỗi trường createdAt.

3. Ví dụ minh họa

// Tạo Compound Index
db.orders.createIndex({ status: 1, totalAmount: -1 });

// Sử dụng hiệu quả Index
db.orders.find({ status: "pending", totalAmount: { $gt: 100 } });

// Vẫn sử dụng được Index vì trường 'status' nằm ở bên trái
db.orders.find({ status: "completed" });

// KHÔNG hiệu quả (phải quét toàn bộ collection - Collection Scan)
db.orders.find({ totalAmount: { $gt: 100 } });

4. Kinh nghiệm thực chiến

Luôn đặt các trường có tính lọc cao (độ phân giải dữ liệu lớn, ví dụ: userId, status) ở vị trí bên trái trong Compound Index để tối ưu hóa hiệu năng truy vấn cho ứng dụng.

962

Làm thế nào để xử lý lỗi Connection Pooling và mô hình kết nối bất đồng bộ trong ứng dụng Node.js khi tương tác với MongoDB?

Junior

1. Bản chất Connection Pooling

  • Connection Pool là tập hợp các kết nối vật lý đã được thiết lập sẵn tới cơ sở dữ liệu MongoDB. Thay vì mở và đóng kết nối liên tục cho mỗi request (gây lãng phí tài nguyên và độ trễ cao), ứng dụng sẽ mượn kết nối từ pool, thực hiện câu lệnh và trả lại.

2. Cấu hình tiêu chuẩn trong Node.js (Mongoose / Native Driver)

Khi khởi tạo kết nối, Junior cần chú ý cấu hình kích thước pool phù hợp:

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...
963

Phương pháp tối ưu hóa phân trang (Pagination) trong MongoDB cho lượng dữ liệu lớn giữa Skip-Limit và Range-Based Pagination là gì?

Junior

1. Vấn đề với Skip-Limit Pagination

  • Cú pháp thông thường:
    db.items.find().sort({ _id: 1 }).skip(100000).limit(10);
  • Hạn chế: Khi số lượng skip lớn (ví dụ: nhảy qua 100,000 bản ghi), MongoDB vẫn phải duyệt qua và bỏ qua đúng 100,000 bản ghi trước đó trong bộ nhớ RAM hoặc trên đĩa cứng, gây suy giảm hiệu năng nghiêm trọng (O(n)).

2. Giải pháp Range-Based Pagination (Cursor-based)

  • Thay vì dùng skip, ta sử dụng giá trị của trường được sắp xếp từ trang trước làm điều kiện lọc cho trang tiếp theo.

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...
964

Cơ chế quản lý kiểu dữ liệu BSON và cách xử lý lỗi tràn giới hạn kích thước Document 16MB trong MongoDB diễn ra như thế nào?

Junior

1. Bản chất BSON và giới hạn 16MB

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...
965

Làm thế nào để phân biệt rõ ràng giữa Bridge Pattern và Adapter Pattern trong thiết kế kiến trúc phần mềm hướng đối tượng?

Junior

Khái niệm cơ bản

Cả Bridge Pattern và Adapter Pattern đều thuộc nhóm Structural Patterns và thường gây nhầm lẫn cho lập trình viên Junior vì chúng đều giúp kết nối các thành phần lại với nhau.

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...
966

Những rủi ro tiềm ẩn nào khi lạm dụng Composite Pattern trong các cấu trúc dữ liệu phân cấp lớn tại ứng dụng doanh nghiệp?

Junior

Tổng quan về Composite Pattern

Composite Pattern cho phép bạn soạn thảo các đối tượng thành các cấu trúc cây để biểu diễn hệ thống phân cấp một phần - toàn thể. Pattern này cho phép client xử lý các đối tượng đơn lẻ và các tổ hợp đối tượng một cách đồng nhất.

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...
967

Template Method Pattern giải quyết bài toán trùng lặp mã nguồn như thế nào và điểm yếu chết người cần tránh là gì?

Junior

Cơ chế hoạt động của Template Method Pattern

Template Method là một Behavioral Design Pattern định nghĩa khung xương của một thuật toán trong một phương thức gốc, nhưng hoãn lại một số bước thực hiện cho các lớp con. Nó cho phép các lớp con định nghĩa lại một số bước của thuật toán mà không làm thay đổi cấu trúc tổng 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...
968

Tại sao việc sử dụng Mediator Pattern giúp giảm sự phụ thuộc phức tạp giữa các đối tượng trong hệ thống giao diện người dùng?

Junior

Bản chất của Mediator Pattern

Mediator là một Behavioral Design Pattern giúp giảm bớt sự phụ thuộc hỗn loạn giữa các đối tượng. Pattern này hạn chế giao tiếp trực tiếp giữa các đối tượng và bắt buộc chúng chỉ được giao tiếp thông qua một đối tượng trung gian duy nhất là Mediator.

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...
969

Khi nào lập trình viên cấp độ Junior nên lựa chọn Prototype Pattern thay vì sử dụng từ khóa khởi tạo đối tượng trực tiếp trong dự án thực tế?

Junior

Bản chất của Prototype Pattern

Prototype Pattern là một Creational Design Pattern cho phép bạn sao chép các đối tượng hiện có mà không làm cho mã nguồn của bạn phụ thuộc vào các lớp cụ thể của chúng. Pattern này cực kỳ hữu ích khi việc khởi tạo một đối tượng trực tiếp tốn kém hoặc phức tạp.

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...
970

Sự khác biệt cốt lõi giữa IQueryable và IEnumerable trong LINQ là gì và khi nào nên sử dụng loại nào trong kiến trúc Enterprise?

Junior

Phân tích bản chất

  • IEnumerable: Thường được sử dụng cho các bộ sưu tập trong bộ nhớ (LINQ to Objects). Khi bạn thực hiện truy vấn, toàn bộ dữ liệu sẽ được tải về bộ nhớ trước khi các bộ lọc (filter) được áp dụng.
  • IQueryable: Được thiết kế cho các nguồn dữ liệu từ xa như SQL Server (LINQ to Entities). Nó cho phép chuyển đổi truy vấn thành câu lệnh SQL và thực thi trực tiếp trên Database Server.

Khi nào sử dụng?

  • Sử dụng IEnumerable: Khi làm việc với các tập hợp nhỏ, dữ liệu đã có sẵn trong bộ nhớ hoặc các thao tác xử lý không liên quan đến Database.
  • Sử dụng IQueryable: Khi làm việc với Database để tận dụng cơ chế Server-side filtering, giúp giảm thiểu lượng dữ liệu truyền tải qua mạng.

Lưu ý thực chiến

Việc nhầm lẫn giữa hai loại này có thể dẫn đến lỗi nghiêm trọng về hiệu năng (ví dụ: tải hàng triệu bản ghi về RAM chỉ để lọc lấy 1 dòng). Luôn ưu tiên IQueryable khi làm việc với Entity Framework.

971

Tại sao việc sử dụng Select N+1 trong LINQ lại gây suy giảm hiệu năng nghiêm trọng và làm thế nào để khắc phục bằng Eager Loading?

Junior

Vấn đề Select N+1

Lỗi này xảy ra khi bạn truy vấn một danh sách đối tượng, sau đó trong vòng lặp, bạn lại truy vấn thêm một lần nữa để lấy dữ liệu liên quan (Navigation Property). Nếu có N bản ghi, bạn sẽ thực hiện 1 + N câu lệnh truy vấn.

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...
972

Cơ chế của phương thức AsNoTracking trong Entity Framework giúp tối ưu hóa hiệu năng như thế nào trong các kịch bản chỉ đọc (Read-only)?

Junior

Bản chất cơ chế

Theo mặc định, khi truy vấn dữ liệu, Entity Framework sẽ theo dõi (track) các đối tượng đó trong Change Tracker để phục vụ việc cập nhật dữ liệu sau này. Việc này tiêu tốn tài nguyên CPU và bộ nhớ.

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...
973

Tại sao việc sử dụng các phương thức như ToList() hoặc ToArray() quá sớm trong chuỗi truy vấn LINQ lại là một anti-pattern?

Junior

Phân tích

LINQ sử dụng cơ chế Deferred Execution (thực thi trì hoãn). Khi bạn gọi .ToList(), bạn đang ép buộc LINQ thực thi truy vấn ngay lập tức và đưa toàn bộ kết quả vào bộ nhớ.

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...
974

Làm thế nào để xử lý các bài toán phân trang (Pagination) hiệu quả bằng LINQ để tránh quá tải bộ nhớ?

Junior

Giải pháp kỹ thuật

Để phân trang hiệu quả, bạn phải kết hợp hai toán tử .Skip() và .Take(). Điều này đảm bảo rằng Database chỉ trả về đúng số lượng bản ghi cần thiết thay vì toàn bộ bảng.

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...
975

Làm thế nào để tránh tình trạng memory leak khi gán Event Handlers trên các phần tử DOM bị xóa trong jQuery?

Junior

Bản chất vấn đề

Khi sử dụng jQuery để gắn sự kiện trực tiếp lên các phần tử DOM (ví dụ: $('#my-button').on('click', handler)), nếu phần tử đó bị xóa khỏi DOM bằng phương thức remove() mà không được gỡ sự kiện trước, tham chiếu đến phần tử đó vẫn còn tồn tại trong bộ nhớ JavaScript, dẫn đến hiện tượng memory leak (rò rỉ bộ nhớ).

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...
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