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

Tại sao việc sử dụng kiểu dữ liệu ENUM trong MySQL đôi khi được coi là con dao hai lưỡi trong thiết kế database?

Junior

Kiểu dữ liệu ENUM cho phép lưu trữ một tập hợp các giá trị định trước, giúp tiết kiệm không gian lưu trữ và đảm bảo tính toàn vẹn dữ liệu ở mức cơ bả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...
167

Trong MySQL, sự khác biệt giữa EXPLAIN và EXPLAIN ANALYZE là gì và khi nào nên sử dụng chúng?

Junior

Cả hai đều là công cụ quan trọng để phân tích kế hoạch thực thi truy vấn (Query Execution Plan).

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

Tại sao việc sử dụng các cột có độ chọn lọc (selectivity) thấp để làm Index lại không mang lại hiệu quả cao?

Junior

Độ chọn lọc (selectivity) được tính bằng tỷ lệ số giá trị duy nhất (cardinality) trên tổng số dòng dữ liệu. Một cột có độ chọn lọc thấp (ví dụ: cột 'giới tính' chỉ có 2 giá trị) sẽ khiến Index không hiệu quả.

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

Trong ASP.NET Core, tại sao việc sử dụng Data Transfer Object (DTO) thay vì trả về trực tiếp Entity Framework Core Model lại là một quy tắc quan trọng trong kiến trúc Enterprise?

Junior

Việc sử dụng DTO mang lại ba lợi ích cốt lõi trong phát triển phần mềm:

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

Cơ chế Data Seeding trong Entity Framework Core là gì và làm thế nào để thực hiện nó một cách an toàn trong môi trường Production?

Junior

Data Seeding là quá trình khởi tạo dữ liệu ban đầu cho Database khi ứng dụng khởi chạy hoặc khi thực hiện Migration.

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

Trong ASP.NET Core, khái niệm Options Pattern là gì và tại sao nó lại ưu việt hơn việc đọc trực tiếp giá trị từ IConfiguration?

Junior

Options Pattern là cách tiếp cận sử dụng các class POCO (Plain Old CLR Object) để đại diện cho các nhóm cấu hình trong tệp appsettings.json.

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

Sự khác biệt giữa việc sử dụng AddTransient, AddScoped và AddSingleton khi đăng ký Service trong ASP.NET Core là gì? Hãy nêu một ví dụ thực tế cho mỗi loại.

Junior

Sự khác biệt nằm ở thời điểm khởi tạo và vòng đời của đối tượ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...
173

Trong ASP.NET Core, làm thế nào để thực hiện việc phân trang (Pagination) dữ liệu một cách hiệu quả từ Database và tại sao không nên dùng .ToList() trước khi thực hiện .Skip() và .Take()?

Junior

Việc sử dụng .ToList() trước khi phân trang sẽ ép buộc Entity Framework Core tải toàn bộ dữ liệu từ Database vào bộ nhớ (RAM) của Server trước khi thực hiện cắt lọc. Điều này gây ra lỗi tràn bộ nhớ (OutOfMemoryException) và làm chậm hệ thống nghiêm trọ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...
174

Trong kiến trúc WebSocket, tại sao việc sử dụng cơ chế Backpressure lại quan trọng khi server gửi dữ liệu với tần suất cao tới client có đường truyền yếu?

Junior

Bản chất vấn đề

Khi server gửi dữ liệu nhanh hơn tốc độ tiêu thụ của client, bộ đệm (buffer) phía server sẽ bị đầy. Nếu không xử lý Backpressure, bộ nhớ server sẽ tăng đột biến dẫn đến rò rỉ bộ nhớ hoặc làm treo tiến trì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...
175

Tại sao việc sử dụng giao thức WSS thay vì WS là yêu cầu bắt buộc đối với các ứng dụng Enterprise?

Junior

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

  • WS (WebSocket): Dữ liệu được truyền dưới dạng văn bản thuần (plain text), dễ bị tấn công Man-in-the-Middle (MitM) để đánh cắp hoặc thay đổi nội dung tin nhắn.
  • WSS (WebSocket Secure): Sử dụng TLS/SSL để mã hóa toàn bộ luồng dữ liệu, đảm bảo tính toàn vẹn và bảo mật thông tin.

Lý do bắt buộc

  1. Bảo mật: Ngăn chặn việc nghe lén dữ liệu nhạy cảm.
  2. Tuân thủ: Hầu hết các trình duyệt hiện đại chặn các kết nối WS không bảo mật nếu trang web đang chạy trên HTTPS (Mixed Content policy).
  3. Proxy/Firewall: WSS giúp tránh việc các thiết bị trung gian (Proxy) can thiệp hoặc chặn đứng kết nối do nghi ngờ nội dung không an toàn.

Kinh nghiệm

Luôn cấu hình chứng chỉ SSL/TLS hợp lệ trên Load Balancer hoặc Reverse Proxy (như Nginx) để xử lý việc giải mã WSS trước khi chuyển tiếp về WebSocket server nội bộ.

176

Làm thế nào để xử lý việc Serialization và Deserialization dữ liệu lớn qua WebSocket mà không làm chặn Event Loop của Node.js?

Junior

Vấn đề kỹ thuật

Việc phân tích các chuỗi JSON khổng lồ bằng JSON.parse() là một tác vụ đồng bộ (synchronous). Nếu chuỗi quá lớn, nó sẽ chặn Event Loop, khiến server không thể phản hồi các kết nối khá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...
177

Sự khác biệt giữa cơ chế 'Broadcast' và 'Unicast' trong WebSocket và khi nào nên ưu tiên sử dụng từng loại?

Junior

Định nghĩa

  • Unicast: Gửi tin nhắn đến một client cụ thể thông qua định danh kết nối (socket ID).
  • Broadcast: Gửi tin nhắn đến tất cả các client đang kết nối với server.

Khi nào sử dụng

  • Unicast: Dùng cho các tác vụ cá nhân hóa như thông báo riêng tư, xác nhận giao dịch, hoặc chat 1-1.
  • Broadcast: Dùng cho các thông báo hệ thống, cập nhật bảng xếp hạng thời gian thực, hoặc thông báo trạng thái server.

Tối ưu hiệu năng

Việc lạm dụng Broadcast sẽ gây tốn băng thông và tài nguyên CPU. Nếu số lượng client lớn, hãy sử dụng cơ chế Room/Namespace để giới hạn phạm vi gửi tin, chỉ gửi cho những client thực sự cần nhận dữ liệu thay vì broadcast toàn hệ thống.

178

Tại sao việc xử lý lỗi (Error Handling) trong WebSocket cần phải được thực hiện ở cả hai phía Client và Server?

Junior

Tầm quan trọng

WebSocket là một kết nối trạng thái (stateful). Nếu một bên gặp lỗi mà không được xử lý, kết nối có thể rơi vào trạng thái 'treo' (zombie) hoặc gây crash ứng dụ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...
179

Trong kiến trúc Ionic, tại sao việc sử dụng Lazy Loading cho các Modules lại đóng vai trò quan trọng đối với hiệu năng khởi chạy ứng dụng (App Startup Time) trên thiết bị di động?

Junior

Lazy Loading giúp giảm kích thước của file bundle chính (main.js) bằng cách chia nhỏ ứng dụng thành các module riêng biệt. Khi người dùng truy cập vào một route cụ thể, ứng dụng mới tải module tương ứng. Điều này giúp giảm thời gian tải ban đầu (Initial Load Time), tiết kiệm bộ nhớ RAM và băng thông mạng. Trong Angular, chúng ta sử dụng thuộc tính loadChildren trong cấu hình Router để thực hiện việc này: { path: 'profile', loadChildren: () => import('./profile/profile.module').then(m => m.ProfilePageModule) }.

180

Làm thế nào để tối ưu hóa việc hiển thị danh sách dữ liệu lớn (Large Lists) trong Ionic để tránh tình trạng giật lag (Jank) hoặc treo ứng dụng?

Junior

Khi làm việc với danh sách lớn, việc render hàng nghìn phần tử DOM cùng lúc sẽ gây quá tải cho bộ nhớ. Giải pháp tối ưu là sử dụng Virtual Scroll (thông qua cdk-virtual-scroll-viewport của Angular CDK). Cơ chế này chỉ render các phần tử đang hiển thị trong vùng nhìn thấy (Viewport) của người dùng. Ngoài ra, cần sử dụng trackBy trong vòng lặp *ngFor để Angular chỉ cập nhật các phần tử bị thay đổi thay vì render lại toàn bộ danh sách.

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