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

Hiện tượng Client Evaluation trong Entity Framework Core là gì và tại sao nó có thể làm sập hiệu năng ứng dụng?

Junior

Bản chất cơ chế

Client Evaluation là hiện tượng khi Entity Framework Core không thể dịch một biểu thức LINQ (viết bằng C#) thành câu lệnh SQL tương ứng để thực thi trên cơ sở dữ liệu. Thay vào đó, nó sẽ tải toàn bộ dữ liệu từ bảng về bộ nhớ RAM của ứng dụng (Client) rồi mới thực hiện việc xử lý logic trên tập dữ liệu đó.

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

Phương pháp tiếp cận Code First trong Entity Framework Core hoạt động như thế nào và quy trình chuẩn để quản lý thay đổi database là gì?

Junior

Bản chất cơ chế

Code First là phương pháp thiết kế ứng dụng nơi lập trình viên định nghĩa các lớp mô hình (Entities) và cấu hình DbContext bằng mã nguồn C#. Cơ sở dữ liệu sẽ được khởi tạo hoặc cập nhật tự động dựa trên các lớp mô hình này thông qua hệ thống 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...
303

Làm thế nào để xử lý hiện tượng N+1 Query Problem khi truy vấn dữ liệu có quan hệ (Relationships) trong Entity Framework Core?

Junior

Bản chất cơ chế

Hiện tượng N+1 Query Problem xảy ra khi ứng dụng thực hiện 1 câu lệnh SQL để lấy ra danh sách bảng cha (N bản ghi), sau đó tiếp tục thực hiện thêm N câu lệnh SQL riêng lẻ để lấy dữ liệu bảng con cho từng bản ghi cha. Điều này làm tăng số lượng round-trip tới cơ sở dữ liệu và làm suy giảm hiệu nă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...
304

Tại sao việc sử dụng SqlParameter thay vì nối chuỗi (String Concatenation) lại là yêu cầu bắt buộc để phòng chống lỗ hổng SQL Injection?

Junior

Nối chuỗi trực tiếp tạo điều kiện cho kẻ tấn công chèn các lệnh SQL độc hại vào tham số đầu vào. Sử dụng SqlParameter giúp ADO.NET gửi giá trị dưới dạng tham số riêng biệt với câu lệnh SQL. Cơ sở dữ liệu sẽ coi giá trị này là dữ liệu thuần túy (literal value) thay vì là một phần của lệnh thực thi. Ngoài ra, việc sử dụng tham số còn giúp SQL Server tái sử dụng Execution Plan, giúp tăng hiệu năng cho các truy vấn lặp lại.

305

Khi làm việc với các kiểu dữ liệu Nullable trong C# và cơ sở dữ liệu, việc sử dụng DBNull.Value khác gì so với giá trị null thông thường?

Junior

Trong C#, null là một tham chiếu không trỏ đến đối tượng nào, trong khi ADO.NET yêu cầu sử dụng DBNull.Value để biểu diễn giá trị NULL trong cơ sở dữ liệu. Nếu bạn truyền trực tiếp null vào SqlParameter, ADO.NET có thể hiểu đó là không có giá trị và gây lỗi hoặc hành vi không mong muốn. Do đó, khi gán giá trị cho tham số, bạn cần kiểm tra: command.Parameters.AddWithValue('@Param', value ?? (object)DBNull.Value);

306

Tại sao chúng ta nên ưu tiên sử dụng phương thức ExecuteScalar thay vì ExecuteReader khi chỉ cần lấy về một giá trị duy nhất từ cơ sở dữ liệu?

Junior

ExecuteScalar được thiết kế tối ưu để trả về cột đầu tiên của hàng đầu tiên trong tập kết quả, bỏ qua các dữ liệu còn lại. Điều này giúp giảm thiểu việc khởi tạo đối tượng SqlDataReader, tiết kiệm bộ nhớ và giảm tải cho hệ thống. Nếu bạn sử dụng ExecuteReader để lấy một giá trị đơn lẻ, bạn sẽ phải tốn thêm tài nguyên để tạo reader, duyệt qua tập kết quả và đóng reader, điều này không cần thiết và kém hiệu quả hơn về mặt tài nguyên.

307

Trong ADO.NET, tại sao việc sử dụng CommandBehavior.CloseConnection khi gọi phương thức ExecuteReader lại là một kỹ thuật tối ưu trong việc quản lý tài nguyên?

Junior

Khi bạn truyền CommandBehavior.CloseConnection vào phương thức ExecuteReader, đối tượng SqlDataReader sẽ tự động đóng SqlConnection liên kết ngay khi nó bị đóng. Điều này giúp giảm thiểu rủi ro quên đóng kết nối (Connection Leak) trong các phương thức trả về SqlDataReader cho tầng xử lý logic khác. Trong kiến trúc Enterprise, việc này đảm bảo kết nối được trả về Connection Pool ngay lập tức, tránh tình trạng cạn kiệt kết nối khi ứng dụng có tải cao.

308

Sự khác biệt giữa thuộc tính CommandTimeout và ConnectionTimeout trong ADO.NET là gì và làm thế nào để cấu hình chúng một cách hợp lý?

Junior

ConnectionTimeout là thời gian chờ tối đa để thiết lập kết nối ban đầu tới Server (mặc định là 15 giây), được cấu hình trong Connection String. CommandTimeout là thời gian chờ tối đa để thực thi một câu lệnh SQL (mặc định là 30 giây), được cấu hình trên đối tượng SqlCommand. Trong thực tế, bạn nên đặt ConnectionTimeout ngắn để phát hiện sớm lỗi mạng, và điều chỉnh CommandTimeout dựa trên độ phức tạp của câu truy vấn để tránh treo ứng dụng khi gặp các câu lệnh SQL chạy quá lâu.

309

Trong Kotlin, tại sao việc sử dụng 'lateinit' lại được coi là một công cụ mạnh mẽ nhưng tiềm ẩn rủi ro, và làm thế nào để kiểm tra trạng thái khởi tạo của nó một cách an toàn?

Junior

Bản chất của lateinit

'lateinit' cho phép khai báo một thuộc tính không null mà không cần khởi tạo ngay tại thời điểm định nghĩa. Điều này cực kỳ hữu ích trong các framework như Android (ví dụ: khởi tạo View trong onCreate) hoặc Dependency Injection.

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

Sự khác biệt giữa 'val' và 'const val' trong Kotlin là gì, và tại sao việc chọn sai có thể ảnh hưởng đến hiệu năng trong các dự án Enterprise?

Junior

Khác biệt cốt lõi

  • 'val': Là biến chỉ đọc (read-only). Giá trị của nó được xác định tại thời điểm runtime.
  • 'const val': Là hằng số biên dịch (compile-time constant). Giá trị của nó phải được biết tại thời điểm biên dịch.

Ảnh hưởng hiệu năng

  • 'const val' được thay thế trực tiếp bằng giá trị thực tế tại nơi sử dụng (inlining), giúp giảm thiểu việc truy cập bộ nhớ hoặc gọi hàm getter.
  • 'val' thông thường sẽ tạo ra một phương thức getter ẩn, gây ra overhead nhỏ khi truy cập.

Quy tắc áp dụng

  • Sử dụng 'const val' cho các giá trị cố định như cấu hình, key, hoặc các giá trị không bao giờ thay đổi trong suốt vòng đời ứng dụng.
  • Sử dụng 'val' khi giá trị phụ thuộc vào logic tính toán hoặc kết quả từ hàm khác tại runtime.

Lưu ý

'const val' chỉ có thể được khai báo ở cấp độ file (top-level) hoặc bên trong 'object' / 'companion object'.

311

Cơ chế 'Delegated Properties' trong Kotlin là gì và tại sao việc sử dụng 'by lazy' lại giúp tối ưu hóa tài nguyên hệ thống?

Junior

Cơ chế Delegated Properties

Delegation cho phép chuyển giao logic của việc truy cập (getter/setter) của một thuộc tính cho một đối tượng khác. Điều này giúp tách biệt logic quản lý dữ liệu khỏi logic nghiệp vụ.

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

Trong Kotlin, sự khác biệt giữa 'map' và 'flatMap' khi xử lý các tập hợp dữ liệu (Collections) là gì, và khi nào nên ưu tiên sử dụng cái nào?

Junior

Bản chất

  • 'map': Biến đổi từng phần tử trong một tập hợp thành một giá trị khác. Kết quả là một tập hợp mới có cùng số lượng phần tử.
  • 'flatMap': Biến đổi từng phần tử thành một tập hợp con, sau đó gộp (flatten) tất cả các tập hợp con đó thành một tập hợp duy nhất.

Khi nào sử dụng?

  • Sử dụng 'map' khi bạn cần chuyển đổi kiểu dữ liệu 1-1 (ví dụ: chuyển danh sách User thành danh sách tên User).
  • Sử dụng 'flatMap' khi mỗi phần tử chứa một danh sách con và bạn muốn lấy ra tất cả các phần tử con đó thành một danh sách phẳng (ví dụ: lấy danh sách tất cả các đơn hàng từ danh sách khách hàng).

Tối ưu hóa

Trong các hệ thống Enterprise xử lý dữ liệu lớn, việc sử dụng 'flatMap' không hợp lý có thể gây tốn bộ nhớ do tạo ra nhiều tập hợp trung gian. Hãy cân nhắc sử dụng 'Sequence' để xử lý dữ liệu theo cơ chế lazy evaluation.

313

Tại sao việc sử dụng 'String' nối chuỗi bằng toán tử '+' trong vòng lặp lại không được khuyến khích trong Kotlin, và giải pháp thay thế tối ưu là gì?

Junior

Vấn đề hiệu năng

Trong Java/Kotlin, 'String' là bất biến (immutable). Mỗi khi bạn dùng toán tử '+', một đối tượng 'String' mới sẽ được tạo ra trong bộ nhớ. Nếu thực hiện trong vòng lặp lớn, nó sẽ tạo ra hàng nghìn đối tượng thừa, gây áp lực lên Garbage Collection (GC).

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

Sự khác biệt giữa hai phương thức .width() và .css('width') trong jQuery là gì và tại sao việc chọn sai phương thức có thể dẫn đến lỗi tính toán giao diện?

Junior

Bản chất vấn đề

Junior lập trình viên thường nhầm lẫn giữa việc lấy kích thước phần tử DOM thông qua thuộc tính CSS hay thông qua các phương thức đo lường nội tại của jQuery. Sự khác biệt cốt lõi nằm ở đơn vị trả về và cách tính toán các thành phần trong Box Model (Padding, Border).

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

Làm thế nào để sử dụng phương thức .filter() và .not() trong jQuery một cách hiệu quả để lọc tập hợp DOM thay vì dùng vòng lặp thủ công?

Junior

Bản chất vấn đề

Khi thao tác với một tập hợp nhiều phần tử DOM (ví dụ: danh sách các hàng trong bảng), Junior thường viết vòng lặp $.each() kết hợp với câu lệnh điều kiện if để tìm kiếm phần tử thỏa mãn. Cách làm này làm giảm hiệu năng và mã nguồn trở nên cồng kềnh, không tận dụng được cơ chế Native Filtering của jQuery.

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