Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình .net - Đề 05 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Trong .NET, Common Language Runtime (CLR) đóng vai trò trung tâm. Chức năng chính nào sau đây KHÔNG phải là trách nhiệm của CLR?
- A. Quản lý bộ nhớ và thu gom rác (Garbage Collection)
- B. Cung cấp các dịch vụ bảo mật và quản lý kiểu dữ liệu
- C. Biên dịch mã nguồn C# thành mã máy (machine code) trực tiếp
- D. Hỗ trợ đa ngôn ngữ và khả năng tương tác giữa các ngôn ngữ .NET
Câu 2: Cho đoạn mã C# sau: `List numbers = new List() { 1, 2, 3, 4, 5 }; var result = numbers.Where(n => n % 2 == 0).Select(n => n * n);`. `result` sẽ chứa các giá trị nào sau khi đoạn mã này thực thi?
- A. [1, 4, 9, 16, 25]
- B. [4, 16]
- C. [2, 4]
- D. [1, 2, 3, 4, 5]
Câu 3: Dependency Injection (DI) là một nguyên tắc quan trọng trong phát triển ứng dụng .NET. Lợi ích chính của việc sử dụng DI là gì?
- A. Tăng cường tính module hóa, khả năng kiểm thử và bảo trì của ứng dụng
- B. Giảm hiệu suất ứng dụng do tạo thêm lớp trung gian
- C. Làm phức tạp cấu hình ứng dụng và tăng thời gian phát triển
- D. Hạn chế khả năng tái sử dụng code trong dự án
Câu 4: Trong ASP.NET Core, Middleware pipeline xử lý request HTTP theo thứ tự nhất định. Điều gì xảy ra nếu một middleware không gọi `await next.Invoke()`?
- A. Request sẽ được chuyển trực tiếp đến middleware cuối cùng trong pipeline.
- B. Request sẽ được xử lý bởi middleware tiếp theo một cách tuần tự.
- C. Pipeline sẽ bị đoản mạch và request không được xử lý tiếp bởi các middleware sau đó.
- D. Ứng dụng sẽ tự động khởi động lại để thiết lập lại pipeline.
Câu 5: Entity Framework Core (EF Core) là ORM phổ biến trong .NET. Phát biểu nào sau đây mô tả đúng nhất về "Code-First Migrations" trong EF Core?
- A. Cơ chế tự động tạo database từ database schema đã tồn tại.
- B. Công cụ để viết câu lệnh SQL trực tiếp và bỏ qua lớp ORM.
- C. Phương pháp quản lý kết nối database trong ứng dụng .NET.
- D. Cách tiếp cận phát triển database schema từ code C# và quản lý thay đổi schema theo thời gian.
Câu 6: Cho đoạn code C# sau: `async Task ProcessDataAsync() { await Task.Delay(1000); return 42; }`. Từ khóa `async` và `await` được sử dụng trong lập trình bất đồng bộ (asynchronous programming) để làm gì?
- A. Tăng tốc độ thực thi code bằng cách sử dụng đa luồng.
- B. Cho phép thực thi code không đồng bộ mà vẫn giữ cấu trúc code tuần tự, dễ đọc.
- C. Ngăn chặn việc thực thi đồng thời của các phương thức.
- D. Đảm bảo rằng các hoạt động I/O luôn được thực hiện đồng bộ.
Câu 7: `IEnumerable` và `IQueryable` đều là interface trong .NET để làm việc với tập hợp dữ liệu. Sự khác biệt chính giữa chúng là gì?
- A. `IEnumerable` hỗ trợ truy vấn LINQ, còn `IQueryable` thì không.
- B. `IQueryable` chỉ dùng cho dữ liệu in-memory, còn `IEnumerable` dùng cho database.
- C. `IQueryable` cho phép trì hoãn thực thi truy vấn và tối ưu hóa truy vấn ở phía nguồn dữ liệu (ví dụ: database), còn `IEnumerable` thực thi truy vấn in-memory.
- D. Không có sự khác biệt đáng kể, chúng có thể thay thế cho nhau trong mọi trường hợp.
Câu 8: Trong C#, "boxing" và "unboxing" liên quan đến việc chuyển đổi giữa kiểu giá trị (value type) và kiểu tham chiếu (reference type). Khi nào "boxing" xảy ra?
- A. Khi một kiểu giá trị (ví dụ: `int`) được gán cho một kiểu tham chiếu (ví dụ: `object`).
- B. Khi một kiểu tham chiếu được chuyển đổi ngược lại thành kiểu giá trị.
- C. Khi một phương thức trả về một kiểu giá trị.
- D. Khi một biến kiểu tham chiếu được khởi tạo.
Câu 9: Attribute trong .NET được sử dụng để làm gì?
- A. Định nghĩa kiểu dữ liệu mới trong C#.
- B. Kiểm soát quyền truy cập (access modifiers) cho các thành viên lớp.
- C. Thực hiện dependency injection.
- D. Cung cấp metadata (thông tin mô tả) cho các thành phần code như lớp, phương thức, thuộc tính.
Câu 10: Delegate trong C# là gì và nó thường được sử dụng trong trường hợp nào?
- A. Một loại lớp đặc biệt dùng để tạo ra các đối tượng.
- B. Một kiểu dữ liệu tham chiếu đến phương thức, thường dùng để thực hiện callback và xử lý sự kiện.
- C. Một cơ chế quản lý bộ nhớ tự động trong .NET.
- D. Một kỹ thuật để tối ưu hóa hiệu suất ứng dụng.
Câu 11: Cho đoạn mã C#: `string str1 =
- A. true
- B. Có thể là true hoặc false tùy thuộc vào cài đặt hệ thống.
- C. false
- D. Gây ra lỗi biên dịch.
Câu 12: Garbage Collection (GC) là một phần quan trọng của CLR. Mục đích chính của GC là gì?
- A. Tự động thu hồi bộ nhớ không còn được sử dụng bởi ứng dụng, ngăn chặn rò rỉ bộ nhớ.
- B. Tối ưu hóa hiệu suất CPU bằng cách giảm tải cho bộ xử lý.
- C. Quản lý phiên bản của các thư viện .NET Framework.
- D. Kiểm soát quyền truy cập vào bộ nhớ của ứng dụng.
Câu 13: "Reflection" trong .NET cho phép làm gì?
- A. Biên dịch code C# sang mã máy.
- B. Kiểm tra metadata và thông tin kiểu của các assembly, module, type và thành viên của chúng tại runtime.
- C. Tối ưu hóa code để chạy nhanh hơn.
- D. Debug ứng dụng .NET.
Câu 14: Interface và abstract class đều được dùng để hiện thực tính trừu tượng (abstraction) trong C#. Sự khác biệt chính giữa chúng là gì?
- A. Abstract class hỗ trợ đa kế thừa, còn interface thì không.
- B. Interface có thể chứa code thực thi, còn abstract class thì không.
- C. Một lớp có thể kế thừa nhiều interface nhưng chỉ có thể kế thừa một abstract class.
- D. Không có sự khác biệt về chức năng, chỉ khác nhau về cú pháp.
Câu 15: "Generics" trong C# mang lại lợi ích gì?
- A. Giảm kích thước file thực thi của ứng dụng.
- B. Tăng tốc độ biên dịch code C#.
- C. Cho phép viết code hướng đối tượng mà không cần interface.
- D. Tăng tính type-safe, tái sử dụng code và hiệu suất bằng cách tránh boxing/unboxing.
Câu 16: Trong mô hình lập trình hướng sự kiện (event-driven programming), event handler là gì?
- A. Một đối tượng chứa thông tin về sự kiện đã xảy ra.
- B. Một phương thức được gọi khi một sự kiện cụ thể xảy ra.
- C. Một lớp dùng để định nghĩa các loại sự kiện.
- D. Một giao diện (interface) mà các lớp sự kiện phải implement.
Câu 17: Extension methods trong C# cho phép làm gì?
- A. Thay đổi cách thức hoạt động của các toán tử trong C#.
- B. Tạo ra các lớp kế thừa từ các lớp sealed.
- C. Thêm phương thức mới vào một kiểu dữ liệu đã tồn tại mà không cần sửa đổi trực tiếp kiểu đó hoặc kế thừa.
- D. Tăng cường bảo mật cho ứng dụng .NET.
Câu 18: LINQ Provider chịu trách nhiệm chính trong việc gì khi sử dụng LINQ với các nguồn dữ liệu khác nhau (ví dụ: database, XML, objects)?
- A. Chuyển đổi các truy vấn LINQ thành ngôn ngữ truy vấn cụ thể của nguồn dữ liệu (ví dụ: SQL cho database).
- B. Quản lý kết nối đến các nguồn dữ liệu khác nhau.
- C. Tối ưu hóa hiệu suất của các truy vấn LINQ.
- D. Xác thực quyền truy cập vào nguồn dữ liệu.
Câu 19: Cho đoạn code C#: `int? nullableInt = null; int regularInt = nullableInt;`. Đoạn code này có biên dịch thành công không? Nếu không, tại sao?
- A. Biên dịch thành công và `regularInt` sẽ có giá trị 0.
- B. Không biên dịch thành công vì không thể gán `null` từ `nullableInt` cho `regularInt` mà không ép kiểu hoặc kiểm tra null.
- C. Biên dịch thành công và `regularInt` sẽ có giá trị `null`.
- D. Chỉ biên dịch thành công nếu `nullableInt` không phải là `null`.
Câu 20: "Sealed class" trong C# có đặc điểm gì?
- A. Chỉ có thể chứa các phương thức static.
- B. Không thể tạo instance (đối tượng) từ sealed class.
- C. Bắt buộc phải được kế thừa bởi một lớp khác.
- D. Không thể được sử dụng làm lớp cơ sở (base class) cho các lớp khác (ngăn chặn kế thừa).
Câu 21: `ValueTask` trong C# được giới thiệu để giải quyết vấn đề gì so với `Task` trong lập trình bất đồng bộ?
- A. `ValueTask` cung cấp khả năng hủy bỏ tác vụ (cancellation) tốt hơn so với `Task`.
- B. `ValueTask` luôn thực thi tác vụ một cách đồng bộ.
- C. `ValueTask` giúp giảm overhead và cải thiện hiệu suất trong các trường hợp tác vụ bất đồng bộ có thể hoàn thành đồng bộ.
- D. `ValueTask` chỉ được sử dụng cho các tác vụ I/O, còn `Task` cho các tác vụ CPU-bound.
Câu 22: Trong ASP.NET Core, `IActionResult` là gì?
- A. Một interface dùng để định nghĩa request HTTP.
- B. Một interface đại diện cho kết quả trả về từ một action method trong controller, cho phép trả về các HTTP response khác nhau (ví dụ: View, JSON, Redirect).
- C. Một class dùng để cấu hình middleware pipeline.
- D. Một attribute dùng để xác thực người dùng.
Câu 23: Khi nào nên sử dụng "struct" thay vì "class" trong C#?
- A. Khi cần tạo ra các kiểu dữ liệu nhỏ, value-type, và quan tâm đến hiệu suất (giảm overhead của heap allocation).
- B. Khi cần đa kế thừa (multiple inheritance).
- C. Khi cần sử dụng garbage collection.
- D. Khi cần tạo ra các kiểu dữ liệu phức tạp với nhiều phương thức và thuộc tính.
Câu 24: Cho đoạn code C#: `var numbers = new int[] { 1, 2, 3 }; foreach (var num in numbers) { numbers = new int[] { 4, 5, 6 }; Console.WriteLine(num); }`. Đoạn code này in ra kết quả gì?
- A. 1 2 3 4 5 6
- B. 4 5 6
- C. 1 4
- D. 1 2 3
Câu 25: "nameof" operator trong C# được sử dụng để làm gì?
- A. Kiểm tra kiểu của một biến tại runtime.
- B. Chuyển đổi một biến sang kiểu string.
- C. Lấy tên của một biến, kiểu, hoặc thành viên của kiểu (method, property, etc.) dưới dạng string.
- D. Định nghĩa tên alias cho một namespace.
Câu 26: Trong ngữ cảnh bảo mật ứng dụng web ASP.NET Core, Cross-Site Scripting (XSS) là loại tấn công nào?
- A. Tấn công từ chối dịch vụ (Denial of Service).
- B. Tấn công bằng cách chèn mã script độc hại vào website, thực thi trên trình duyệt của người dùng khác.
- C. Tấn công giả mạo yêu cầu (Cross-Site Request Forgery).
- D. Tấn công vét cạn mật khẩu (Brute-force attack).
Câu 27: Kestrel là gì trong ASP.NET Core?
- A. Một ORM (Object-Relational Mapper) cho ASP.NET Core.
- B. Một công cụ để quản lý dependency injection trong ASP.NET Core.
- C. Một framework testing cho ASP.NET Core.
- D. Một web server đa nền tảng, mã nguồn mở, mặc định cho ASP.NET Core.
Câu 28: Cho đoạn code C#: `Action greet = name => { Console.WriteLine(
- A. Một delegate kiểu generic đại diện cho một phương thức trả về `void` và có một tham số kiểu `string`.
- B. Một class dùng để định nghĩa các action trong ASP.NET Core MVC.
- C. Một attribute dùng để xác định action method trong controller.
- D. Một interface dùng để tạo ra các action bất đồng bộ.
Câu 29: "async void" method trong C# thường được khuyến cáo sử dụng trong trường hợp nào?
- A. Cho tất cả các phương thức bất đồng bộ để tăng hiệu suất.
- B. Khi cần trả về một giá trị từ phương thức bất đồng bộ.
- C. Chủ yếu dùng cho event handlers vì chúng không thể trả về `Task`.
- D. Để thực hiện các tác vụ đồng bộ bên trong một phương thức bất đồng bộ.
Câu 30: NuGet Package Manager được sử dụng để làm gì trong .NET development?
- A. Biên dịch code C# thành mã máy.
- B. Quản lý và cài đặt các thư viện và packages bên ngoài vào dự án .NET.
- C. Debug ứng dụng .NET.
- D. Tạo database schema từ code C#.