1. Dependency Injection Container (ví dụ Autofac, Ninject, .NET built-in DI container) có vai trò gì trong ứng dụng .NET Core?
A. Quản lý bộ nhớ.
B. Tạo và quản lý dependencies (sự phụ thuộc) giữa các components.
C. Xử lý routing requests.
D. Xác thực người dùng.
2. Kỹ thuật Caching trong .NET (ví dụ MemoryCache, Distributed Cache) dùng để làm gì?
A. Tăng cường bảo mật ứng dụng.
B. Tạm lưu trữ dữ liệu thường xuyên truy cập để tăng tốc độ truy xuất.
C. Quản lý bộ nhớ hiệu quả hơn.
D. Giảm tải cho cơ sở dữ liệu.
3. `Garbage Collector` trong .NET hoạt động như thế nào?
A. Giải phóng bộ nhớ ngay lập tức khi đối tượng không còn được tham chiếu đến.
B. Định kỳ quét bộ nhớ và giải phóng bộ nhớ không còn được sử dụng.
C. Yêu cầu lập trình viên gọi phương thức `Dispose()` thủ công để giải phóng bộ nhớ.
D. Chỉ giải phóng bộ nhớ khi ứng dụng kết thúc.
4. Trong .NET, JIT compiler (Just-In-Time compiler) thực hiện công việc gì?
A. Biên dịch mã nguồn C# sang mã máy trước khi thực thi.
B. Biên dịch mã IL (Intermediate Language) sang mã máy khi thực thi.
C. Quản lý bộ nhớ tự động.
D. Debug mã nguồn.
5. Delegate trong C# được sử dụng để làm gì?
A. Định nghĩa một lớp trừu tượng.
B. Tham chiếu đến một phương thức.
C. Tạo một luồng (thread) mới.
D. Xử lý ngoại lệ.
6. Trong WPF (Windows Presentation Foundation), XAML được sử dụng để làm gì?
A. Viết logic nghiệp vụ (business logic).
B. Định nghĩa giao diện người dùng (UI).
C. Truy vấn cơ sở dữ liệu.
D. Quản lý tài nguyên ứng dụng.
7. Razor syntax trong ASP.NET Core được sử dụng để làm gì?
A. Viết mã JavaScript.
B. Nhúng mã C# vào trang HTML để tạo ra nội dung động.
C. Định nghĩa CSS styles.
D. Quản lý database connections.
8. Thành phần nào của .NET Framework chịu trách nhiệm quản lý bộ nhớ?
A. CLR (Common Language Runtime)
B. CTS (Common Type System)
C. CLS (Common Language Specification)
D. FCL (Framework Class Library)
9. Boxing và unboxing trong C# là gì và khi nào chúng xảy ra?
A. Chuyển đổi giữa kiểu tham chiếu và kiểu giá trị, xảy ra khi dùng `List` với value types.
B. Chuyển đổi giữa kiểu giá trị và kiểu tham chiếu, xảy ra khi value type được gán cho `object`.
C. Quá trình đóng gói và giải nén dữ liệu để truyền qua mạng.
D. Cơ chế bảo mật của .NET framework.
10. Event trong C# là gì và chúng hoạt động như thế nào?
A. Một loại delegate đặc biệt dùng để xử lý lỗi.
B. Cơ chế cho phép một đối tượng thông báo cho các đối tượng khác khi có sự kiện xảy ra.
C. Một cách để tạo ra đa luồng (multithreading).
D. Một kiểu dữ liệu đặc biệt để lưu trữ các hàm.
11. Sự khác biệt giữa `using` statement và `using` directive trong C# là gì?
A. `using` statement nhập namespace, `using` directive đảm bảo `IDisposable` được dispose.
B. `using` directive nhập namespace, `using` statement đảm bảo `IDisposable` được dispose.
C. Không có sự khác biệt, chúng có thể dùng thay thế nhau.
D. `using` statement dùng cho namespace, `using` directive cho classes.
12. Đâu là namespace chứa lớp `StringBuilder` trong .NET?
A. System.IO
B. System.Text
C. System.Collections.Generic
D. System.Linq
13. LINQ (Language Integrated Query) trong .NET dùng để làm gì?
A. Thiết kế giao diện người dùng.
B. Truy vấn dữ liệu từ nhiều nguồn khác nhau.
C. Quản lý bộ nhớ.
D. Xây dựng ứng dụng web.
14. `IActionResult` interface trong ASP.NET Core dùng để làm gì?
A. Định nghĩa logic nghiệp vụ.
B. Trả về HTTP responses từ Action methods trong Controller.
C. Xử lý routing requests.
D. Xác thực người dùng.
15. Trong .NET, kiểu dữ liệu nào được sử dụng để biểu diễn một chuỗi ký tự Unicode?
A. int
B. string
C. char
D. bool
16. `async` và `await` keywords trong C# được sử dụng để làm gì?
A. Tạo đa luồng (multithreading).
B. Thực hiện các hoạt động bất đồng bộ (asynchronous operations).
C. Quản lý bộ nhớ.
D. Xử lý ngoại lệ.
17. Sự khác biệt giữa `interface` và `abstract class` trong C# là gì?
A. Interface có thể chứa implementation, abstract class thì không.
B. Class có thể implement nhiều interfaces nhưng chỉ kế thừa một abstract class.
C. Abstract class nhanh hơn interface về hiệu suất.
D. Interface chỉ dùng cho kiểu dữ liệu value types, abstract class cho reference types.
18. `yield return` statement trong C# được sử dụng trong trường hợp nào?
A. Xử lý ngoại lệ.
B. Tạo ra iterator (bộ lặp) cho phép trả về từng phần tử của một collection.
C. Tạo ra đa luồng (multithreading).
D. Định nghĩa extension methods.
19. NuGet Package Manager trong .NET dùng để làm gì?
A. Quản lý bộ nhớ.
B. Quản lý các thư viện và packages bên ngoài cho dự án .NET.
C. Biên dịch mã nguồn.
D. Debug ứng dụng.
20. Reflection trong .NET cho phép làm gì?
A. Tối ưu hiệu suất ứng dụng.
B. Kiểm tra metadata và cấu trúc của assembly, types và members tại runtime.
C. Biên dịch mã nguồn sang mã máy.
D. Tạo ra giao diện người dùng động.
21. Entity Framework Core (EF Core) là gì?
A. Một framework để xây dựng giao diện người dùng web.
B. Một ORM (Object-Relational Mapper) để làm việc với cơ sở dữ liệu.
C. Một công cụ để quản lý bộ nhớ.
D. Một thư viện để xử lý JSON.
22. Sự khác biệt giữa `ValueType` và `ReferenceType` trong .NET là gì?
A. Value types được lưu trên heap, reference types trên stack.
B. Value types lưu giá trị trực tiếp, reference types lưu tham chiếu đến giá trị.
C. Value types hỗ trợ kế thừa, reference types thì không.
D. Value types chậm hơn reference types.
23. Attribute trong C# được sử dụng để làm gì?
A. Định nghĩa thuộc tính của một lớp.
B. Cung cấp metadata (dữ liệu về dữ liệu) cho code.
C. Tạo ra các phương thức mở rộng (extension methods).
D. Xử lý sự kiện (events).
24. Trong ASP.NET Core, Middleware là gì?
A. Một thành phần giao diện người dùng.
B. Một pipeline xử lý request và response HTTP.
C. Một cơ chế quản lý session.
D. Một công cụ ORM (Object-Relational Mapper).
25. Dependency Injection (DI) trong .NET Core mang lại lợi ích gì?
A. Tăng hiệu suất ứng dụng.
B. Giảm sự phụ thuộc giữa các thành phần, dễ bảo trì và kiểm thử.
C. Tự động quản lý bộ nhớ.
D. Đơn giản hóa việc triển khai ứng dụng.
26. Trong .NET, Serialization và Deserialization là gì?
A. Mã hóa và giải mã dữ liệu.
B. Chuyển đổi đối tượng sang định dạng có thể lưu trữ∕truyền tải và ngược lại.
C. Nén và giải nén dữ liệu.
D. Kiểm tra và sửa lỗi dữ liệu.
27. Phương thức `Dispose()` trong C# được sử dụng để làm gì?
A. Giải phóng bộ nhớ được quản lý bởi Garbage Collector.
B. Giải phóng tài nguyên không được quản lý (unmanaged resources).
C. Khởi tạo lại đối tượng.
D. Đóng ứng dụng.
28. Sự khác biệt giữa `var`, `dynamic` và `object` keywords trong C# là gì?
A. `var` dynamic typing, `dynamic` static typing, `object` boxing.
B. `var` type inference, `dynamic` runtime type checking, `object` base type for all types.
C. `dynamic` compile-time type checking, `var` runtime type checking, `object` reference type.
D. Không có sự khác biệt, chúng dùng thay thế nhau.
29. Sự khác biệt chính giữa `List` và `ArrayList` trong .NET là gì?
A. `List` là non-generic, còn `ArrayList` là generic.
B. `List` là kiểu an toàn (type-safe) và generic, còn `ArrayList` thì không.
C. `ArrayList` nhanh hơn `List` trong hầu hết các trường hợp.
D. `List` chỉ có thể chứa các kiểu dữ liệu tham chiếu, còn `ArrayList` thì không.
30. Extension methods 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 sửa đổi lớp đó.
B. Thay đổi hành vi của các phương thức hiện có trong một lớp.
C. Tạo ra các lớp con từ một lớp đã tồn tại.
D. Ẩn các phương thức của một lớp.