Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình .net - Đề 02 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) chịu trách nhiệm chính cho việc gì trong quá trình thực thi ứng dụng?
- A. Biên dịch mã nguồn C# thành mã máy trực tiếp.
- B. Quản lý bộ nhớ, thực thi mã byte trung gian (IL), và cung cấp môi trường runtime.
- C. Đóng gói và triển khai ứng dụng .NET lên các nền tảng khác nhau.
- D. Hỗ trợ gỡ lỗi và kiểm thử ứng dụng trong quá trình phát triển.
Câu 2: Cho đoạn mã C# sau: `List numbers = new List() { 1, 2, 3, 4, 5 }; var evenNumbers = numbers.Where(n => n % 2 == 0);`. `evenNumbers` trong đoạn mã trên là kiểu dữ liệu nào?
- A. List
- B. int[]
- C. IEnumerable
- D. IQueryable
Câu 3: Phương thức mở rộng (Extension Method) trong C# cho phép làm gì?
- A. Thêm phương thức mới vào một lớp đã tồn tại mà không cần kế thừa hoặc sửa đổi mã nguồn của lớp đó.
- B. Thay thế hoàn toàn các phương thức hiện có của một lớp bằng các phương thức mới.
- C. Tạo ra một lớp con (derived class) từ một lớp cha (base class) và thêm phương thức vào lớp con.
- D. Thay đổi hành vi của toán tử trên các kiểu dữ liệu nguyên thủy.
Câu 4: Đâu là phát biểu đúng về sự khác biệt giữa `struct` và `class` trong C#?
- A. `struct` hỗ trợ đa kế thừa, trong khi `class` chỉ hỗ trợ đơn kế thừa.
- B. `struct` là kiểu giá trị (value type) và được lưu trữ trên stack, còn `class` là kiểu tham chiếu (reference type) và lưu trữ trên heap.
- C. `struct` có thể chứa các phương thức ảo (virtual methods), còn `class` thì không.
- D. Không có sự khác biệt đáng kể giữa `struct` và `class`, chúng có thể được sử dụng thay thế cho nhau trong mọi trường hợp.
Câu 5: Trong lập trình hướng đối tượng với C#, nguyên tắc "SOLID" nào khuyến khích việc các lớp nên được mở rộng để thay đổi hành vi, nhưng phải đóng để sửa đổi mã nguồn?
- A. Single Responsibility Principle (SRP)
- B. Liskov Substitution Principle (LSP)
- C. Open/Closed Principle (OCP)
- D. Interface Segregation Principle (ISP)
Câu 6: Cho đoạn code C# sau: `public interface ILogger { void Log(string message); } public class FileLogger : ILogger { public void Log(string message) { // Ghi log vào file } } public class ConsoleLogger : ILogger { public void Log(string message) { // Ghi log ra console } }`. Đoạn code trên thể hiện rõ nhất khái niệm nào trong lập trình hướng đối tượng?
- A. Tính đóng gói (Encapsulation)
- B. Tính kế thừa (Inheritance)
- C. Tính trừu tượng hóa dữ liệu (Data Abstraction)
- D. Tính đa hình (Polymorphism)
Câu 7: Trong ASP.NET Core, Middleware pipeline được sử dụng để làm gì?
- A. Định nghĩa cấu trúc dữ liệu và tương tác với cơ sở dữ liệu.
- B. Xử lý các HTTP request và response trong ứng dụng, thực hiện các tác vụ như xác thực, ghi log, định tuyến.
- C. Quản lý trạng thái phiên (session state) của người dùng.
- D. Tạo giao diện người dùng động (dynamic user interface) cho ứng dụng web.
Câu 8: Dependency Injection (DI) container trong .NET Core Framework có vai trò gì chính?
- A. Biên dịch mã nguồn ứng dụng thành mã thực thi.
- B. Quản lý bộ nhớ và thu gom rác cho ứng dụng.
- C. Khởi tạo và quản lý các đối tượng phụ thuộc (dependencies) của ứng dụng, giúp giảm sự phụ thuộc giữa các thành phần.
- D. Cung cấp các dịch vụ bảo mật và xác thực cho ứng dụng.
Câu 9: Cho đoạn code C# sử dụng async/await: `public async Task CalculateAsync() { await Task.Delay(1000); return 5; } public async Task Main() { int result = await CalculateAsync(); Console.WriteLine(result); }`. Điều gì sẽ xảy ra khi đoạn code này được thực thi?
- A. Chương trình sẽ in ra số 5 sau khoảng 1 giây.
- B. Chương trình sẽ in ra số 5 ngay lập tức mà không cần chờ.
- C. Chương trình sẽ gây ra lỗi runtime do sử dụng `await` trong `Main` method.
- D. Chương trình sẽ không in ra gì cả và kết thúc ngay lập tức.
Câu 10: Trong Entity Framework Core (EF Core), "Code-First" approach nghĩa là gì?
- A. Database được thiết kế và tạo ra trước, sau đó code C# được sinh ra dựa trên database schema.
- B. Code C# và database schema phải được thiết kế đồng thời và song song.
- C. Chỉ database được tạo ra, code C# không cần thiết trong quá trình phát triển.
- D. Code C# (model lớp) được viết trước, và EF Core sẽ tự động tạo database schema tương ứng từ code.
Câu 11: `Garbage Collector` (GC) trong .NET CLR thực hiện công việc chính nào?
- A. Biên dịch mã IL thành mã máy.
- B. Quản lý luồng (threads) trong ứng dụng.
- C. Tự động thu hồi bộ nhớ không còn được sử dụng bởi ứng dụng, ngăn ngừa rò rỉ bộ nhớ.
- D. Xác thực và phân quyền truy cập vào các tài nguyên hệ thống.
Câu 12: `Boxing` và `Unboxing` trong C# liên quan đến việc chuyển đổi giữa kiểu dữ liệu nào?
- A. Giữa các kiểu dữ liệu nguyên thủy khác nhau (ví dụ: int sang float).
- B. Giữa kiểu giá trị (value type) và kiểu tham chiếu (reference type - cụ thể là object).
- C. Giữa các lớp kế thừa nhau trong hệ thống phân cấp lớp.
- D. Giữa các kiểu dữ liệu nullable và non-nullable.
Câu 13: Trong C#, từ khóa `sealed` được sử dụng để làm gì?
- A. Khai báo một lớp hoặc phương thức là tĩnh (static).
- B. Khai báo một lớp hoặc phương thức là trừu tượng (abstract).
- C. Cho phép một lớp hoặc phương thức được kế thừa hoặc override ở bất kỳ đâu.
- D. Ngăn chặn một lớp không thể bị kế thừa hoặc một phương thức ảo không thể bị override trong lớp con.
Câu 14: Namespace `System.Reflection` trong .NET Framework cung cấp chức năng chính nào?
- A. Cho phép kiểm tra metadata của assemblies, types, members và tạo instance của types tại runtime.
- B. Cung cấp các lớp để làm việc với các luồng (streams) và file system.
- C. Hỗ trợ các hoạt động mạng và giao tiếp qua giao thức HTTP.
- D. Cung cấp các lớp và interface cho lập trình đa luồng (multithreading).
Câu 15: `Delegates` trong C# có thể được xem như là?
- A. Một kiểu dữ liệu nguyên thủy để lưu trữ các giá trị số nguyên.
- B. Một cơ chế để quản lý bộ nhớ và thu gom rác.
- C. Một kiểu dữ liệu tham chiếu đại diện cho các phương thức, cho phép truyền phương thức như tham số.
- D. Một cách để tạo ra các lớp trừu tượng (abstract classes).
Câu 16: Cho đoạn mã C#: `try { // Code có thể gây ra exception } catch (Exception ex) { // Xử lý exception } finally { // Code luôn được thực thi }`. Khối `finally` được sử dụng để làm gì?
- A. Chỉ thực thi khi có exception xảy ra trong khối `try`.
- B. Luôn được thực thi, bất kể có exception xảy ra hay không, thường dùng để giải phóng tài nguyên.
- C. Thực thi thay cho khối `catch` nếu không có exception xảy ra.
- D. Không có vai trò cụ thể, chỉ dùng để ghi log exception.
Câu 17: `async` và `await` keywords trong C# được sử dụng chủ yếu để giải quyết vấn đề gì?
- A. Tăng hiệu suất tính toán của CPU.
- B. Giảm thiểu sử dụng bộ nhớ RAM.
- C. Đơn giản hóa việc quản lý đa luồng.
- D. Viết mã bất đồng bộ một cách dễ đọc và dễ bảo trì, tránh blocking UI thread trong các ứng dụng GUI.
Câu 18: Trong mô hình lập trình Web API .NET Core, HTTP methods nào thường được sử dụng để tạo mới một tài nguyên (resource)?
- A. POST
- B. GET
- C. PUT
- D. DELETE
Câu 19: Cho đoạn code C#: `string name =
- A.
- B.
- C.
- D. Lỗi biên dịch do cú pháp không hợp lệ.
Câu 20: Trong .NET, khái niệm `NuGet` package manager dùng để làm gì?
- A. Biên dịch và đóng gói ứng dụng .NET để triển khai.
- B. Quản lý và cài đặt các thư viện và dependencies của bên thứ ba vào dự án .NET.
- C. Gỡ lỗi và kiểm thử ứng dụng .NET.
- D. Tạo giao diện người dùng đồ họa (GUI) cho ứng dụng .NET.
Câu 21: Đâu là kiểu dữ liệu tham chiếu (reference type) trong các lựa chọn sau của C#?
- A. int
- B. enum
- C. string
- D. struct
Câu 22: Trong C#, từ khóa `virtual` được sử dụng khi muốn...
- A. ngăn chặn một phương thức bị override trong lớp con.
- B. cho phép một phương thức của lớp cha có thể được override bởi lớp con.
- C. khai báo một phương thức là tĩnh (static).
- D. khai báo một phương thức là private.
Câu 23: `LINQ` (Language Integrated Query) trong .NET Framework cung cấp khả năng chính nào?
- A. Quản lý bộ nhớ tự động và thu gom rác.
- B. Tạo giao diện người dùng đồ họa (GUI) cho ứng dụng.
- C. Xử lý bất đồng bộ và đa luồng.
- D. Truy vấn dữ liệu từ nhiều nguồn khác nhau (collections, databases, XML, etc.) một cách thống nhất bằng cú pháp giống SQL.
Câu 24: Trong ASP.NET Core MVC, `IActionResult` interface được sử dụng để làm gì?
- A. Định nghĩa model dữ liệu cho view.
- B. Xử lý các HTTP request trước khi đến action method.
- C. Đại diện cho kết quả trả về của một action method, bao gồm HTTP status code, content type, và body response.
- D. Quản lý routing và điều hướng trong ứng dụng MVC.
Câu 25: Cho đoạn code C#: `int? nullableInt = null;`. `nullableInt` có thể nhận giá trị nào?
- A. Chỉ có thể nhận giá trị số nguyên dương.
- B. Có thể nhận giá trị số nguyên hoặc `null`.
- C. Chỉ có thể nhận giá trị 0 hoặc 1.
- D. Chỉ có thể nhận giá trị số nguyên âm.
Câu 26: Trong C#, thuộc tính (property) khác với trường (field) ở điểm nào chính?
- A. Trường (field) luôn là public, còn thuộc tính (property) luôn là private.
- B. Thuộc tính (property) không thể có kiểu dữ liệu, còn trường (field) thì có.
- C. Trường (field) chỉ có thể đọc, còn thuộc tính (property) có thể đọc và ghi.
- D. Thuộc tính (property) cung cấp cơ chế truy cập có kiểm soát thông qua `get` và `set` accessors, trong khi trường (field) truy cập trực tiếp.
Câu 27: Trong .NET Core, cấu hình ứng dụng (application configuration) thường được quản lý thông qua file nào?
- A. appsettings.json
- B. web.config
- C. Program.cs
- D. Startup.cs
Câu 28: Kiểu dữ liệu `dynamic` trong C# có đặc điểm gì nổi bật?
- A. Là kiểu dữ liệu tĩnh, được kiểm tra kiểu tại thời điểm biên dịch.
- B. Chỉ có thể lưu trữ các giá trị số nguyên.
- C. Kiểm tra kiểu (type checking) được thực hiện tại thời gian chạy (runtime), không phải thời gian biên dịch (compile time).
- D. Không thể sử dụng trong các ứng dụng web ASP.NET Core.
Câu 29: Trong Entity Framework Core, phương thức `Include()` dùng để làm gì?
- A. Lọc dữ liệu trả về từ database theo điều kiện chỉ định.
- B. Tải trước (eager loading) các related entities trong một query, tránh vấn đề N+1 query.
- C. Thêm một entity mới vào database context.
- D. Cập nhật một entity đã tồn tại trong database.
Câu 30: Cho đoạn code C#: `Action greet = name => { Console.WriteLine(
- A. Một biến kiểu string.
- B. Một phương thức tĩnh (static method).
- C. Một lớp (class) dùng để in ra lời chào.
- D. Một delegate type `Action` đại diện cho một phương thức nhận một tham số kiểu string và không trả về giá trị.