1. Phương thức `Dispose()` trong .NET Framework chủ yếu đượ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 về trạng thái ban đầu.
D. Đánh dấu đối tượng để Garbage Collector thu hồi ngay lập tức.
2. Trong C#, từ khóa `volatile` được sử dụng để làm gì?
A. Tối ưu hóa hiệu suất truy cập biến.
B. Đảm bảo biến được đọc từ bộ nhớ chính (main memory) thay vì cache trong môi trường đa luồng.
C. Khai báo biến hằng số (constant).
D. Ngăn không cho biến bị Garbage Collector thu hồi.
3. ViewState trong ASP.NET Web Forms được sử dụng để làm gì?
A. Lưu trữ dữ liệu phiên (session data) trên máy chủ.
B. Lưu trữ trạng thái của các control trên trang web giữa các postback.
C. Lưu trữ thông tin cấu hình ứng dụng.
D. Lưu trữ cache của trang web trên trình duyệt người dùng.
4. Trong .NET, khái niệm 'boxing′ và 'unboxing′ liên quan đến kiểu dữ liệu nào?
A. String và Char.
B. Reference types và Value types.
C. Generics và Collections.
D. Interfaces và Abstract classes.
5. Trong .NET, Garbage Collector (GC) hoạt động dựa trên nguyên tắc nào?
A. Đếm số lượng tham chiếu đến đối tượng.
B. Dựa trên thời gian tồn tại của đối tượng trong bộ nhớ.
C. Tìm kiếm và thu hồi các đối tượng không còn được tham chiếu từ root.
D. Phân tích mức độ sử dụng bộ nhớ của từng đối tượng.
6. Mục đích chính của việc sử dụng Dependency Inversion Principle (DIP) trong lập trình hướng đối tượng là gì?
A. Tăng hiệu suất ứng dụng.
B. Giảm sự phụ thuộc giữa các module cấp cao và cấp thấp.
C. Đơn giản hóa việc quản lý bộ nhớ.
D. Cải thiện tính bảo mật của ứng dụng.
7. Đâu là mục đích chính của việc sử dụng 'middleware′ trong ASP.NET Core?
A. Quản lý database migrations.
B. Xử lý các request và response HTTP trong pipeline.
C. Tạo view components.
D. Định nghĩa routing cho ứng dụng.
8. Sự khác biệt chính giữa interface và abstract class trong C# là gì?
A. Abstract class hỗ trợ đa kế thừa, interface thì không.
B. Interface có thể chứa implementation cho methods, abstract class thì không.
C. Một lớp có thể implement nhiều interfaces, nhưng chỉ có thể kế thừa từ một abstract class.
D. Abstract class chỉ dùng cho desktop app, interface dùng cho web app.
9. Đâu là sự khác biệt chính giữa `async` và `await` trong lập trình bất đồng bộ C#?
A. `async` tạo thread mới, `await` giải phóng thread hiện tại.
B. `async` đánh dấu phương thức là bất đồng bộ, `await` tạm dừng thực thi phương thức cho đến khi tác vụ hoàn thành.
C. `async` dùng cho I∕O-bound operations, `await` dùng cho CPU-bound operations.
D. `async` chỉ dùng cho Web API, `await` dùng cho ứng dụng desktop.
10. Trong C#, từ khóa `params` có nghĩa là gì khi được sử dụng trong tham số phương thức?
A. Tham số là optional.
B. Tham số là kiểu generic.
C. Cho phép truyền vào một số lượng biến đổi (variable number) các đối số cùng kiểu cho tham số.
D. Tham số chỉ được truyền theo kiểu reference.
11. Trong .NET, P∕Invoke (Platform Invoke) được sử dụng để làm gì?
A. Gọi các phương thức .NET từ ngôn ngữ khác.
B. Gọi các hàm native (unmanaged code) từ code .NET.
C. Tối ưu hóa hiệu suất ứng dụng .NET.
D. Triển khai ứng dụng .NET trên nhiều nền tảng.
12. Trong C#, từ khóa `sealed` được sử dụng để làm gì đối với một lớp?
A. Ngăn không cho lớp đó bị khởi tạo.
B. Ngăn không cho lớp đó được kế thừa.
C. Đảm bảo lớp đó chỉ có thể được truy cập trong cùng một assembly.
D. Tối ưu hóa hiệu suất của lớp khi được sử dụng đa luồng.
13. Trong .NET, kiểu dữ liệu nào sau đây được sử dụng để biểu diễn một ký tự Unicode duy nhất?
A. string
B. char
C. int
D. byte
14. NuGet package manager trong .NET được sử dụng để làm gì?
A. Quản lý phiên bản .NET SDK.
B. Quản lý và cài đặt các thư viện và công cụ bên thứ ba vào dự án .NET.
C. Triển khai ứng dụng .NET lên server.
D. Tạo môi trường ảo cho phát triển .NET.
15. Trong Entity Framework Core, 'lazy loading′ là gì và khi nào nên cân nhắc sử dụng?
A. Tải trước tất cả related data khi query entity, nên dùng khi cần truy cập tất cả related data.
B. Tải related data khi được truy cập lần đầu tiên, nên dùng khi không phải lúc nào cũng cần related data.
C. Tải data theo batch, nên dùng khi làm việc với lượng data lớn.
D. Không tải related data, mà chỉ tải entity chính, nên dùng khi chỉ cần entity chính.
16. Trong LINQ, phương thức mở rộng `Where()` dùng để làm gì?
A. Sắp xếp các phần tử trong collection.
B. Chọn ra một số lượng phần tử đầu tiên từ collection.
C. Lọc các phần tử trong collection dựa trên một điều kiện.
D. Nhóm các phần tử trong collection theo một khóa.
17. Đâu là nhược điểm chính của việc sử dụng Reflection trong .NET?
A. Khó debug hơn.
B. Giảm hiệu suất thực thi so với code thông thường.
C. Tăng độ phức tạp của code.
D. Khó bảo trì hơn.
18. Sự khác biệt giữa `IEnumerable` và `IQueryable` trong LINQ là gì?
A. `IEnumerable` thực thi truy vấn trên server, `IQueryable` thực thi trên client.
B. `IEnumerable` thực thi truy vấn tại client-side (in-memory), `IQueryable` cho phép thực thi truy vấn tại server-side (database).
C. `IEnumerable` dùng cho LINQ to Objects, `IQueryable` dùng cho LINQ to SQL.
D. `IEnumerable` hỗ trợ deferred execution, `IQueryable` thì không.
19. Trong ASP.NET Core, middleware pipeline được sử dụng để làm gì?
A. Quản lý database connection.
B. Xử lý HTTP request và response.
C. Xác thực và phân quyền người dùng.
D. Lưu trữ cache của ứng dụng.
20. Trong .NET, Assembly manifest chứa thông tin gì?
A. Mã IL (Intermediate Language) của assembly.
B. Metadata về assembly, bao gồm tên, phiên bản, culture, dependencies.
C. Code thực thi native của assembly.
D. Thông tin cấu hình cho assembly.
21. Sự khác biệt chính giữa `HttpContext.Session` và `HttpContext.Request.Cookies` trong ASP.NET Core là gì?
A. `Session` lưu trữ dữ liệu trên client, `Cookies` lưu trên server.
B. `Session` lưu trữ dữ liệu tạm thời trên server, `Cookies` lưu trữ dữ liệu trên client.
C. `Session` dùng cho dữ liệu nhỏ, `Cookies` dùng cho dữ liệu lớn.
D. `Session` bảo mật hơn `Cookies`.
22. Đâu là lợi ích chính của việc sử dụng Blazor WebAssembly?
A. Chạy code C# trên server-side.
B. Chạy code C# trực tiếp trong trình duyệt web (client-side).
C. Tăng hiệu suất server-side rendering.
D. Đơn giản hóa việc phát triển mobile app.
23. Mục đích của việc sử dụng `Razor Pages` trong ASP.NET Core là gì?
A. Thay thế hoàn toàn MVC pattern.
B. Đơn giản hóa việc xây dựng UI-driven web pages với code-behind model trong ASP.NET Core.
C. Tăng cường bảo mật cho ứng dụng web.
D. Cải thiện hiệu suất rendering trang web.
24. Đặc điểm nào sau đây KHÔNG phải là lợi ích chính của việc sử dụng LINQ trong .NET?
A. Cú pháp truy vấn thống nhất cho nhiều nguồn dữ liệu.
B. Tăng hiệu suất thực thi truy vấn đáng kể so với vòng lặp truyền thống.
C. Kiểm tra lỗi cú pháp truy vấn tại thời điểm biên dịch.
D. Giảm thiểu lượng code cần viết để truy vấn dữ liệu.
25. Trong Entity Framework Core, 'Code-First′ approach nghĩa là gì?
A. Tạo database trước, sau đó sinh code entity từ database.
B. Viết code entity trước, sau đó Entity Framework Core sẽ tạo database schema tương ứng.
C. Sử dụng database đã tồn tại và tự động map với code entity.
D. Code entity và database schema phải được tạo đồng thời và thủ công.
26. Trong .NET, `HttpClient` được sử dụng để làm gì?
A. Tạo giao diện người dùng (UI).
B. Thực hiện HTTP request để tương tác với Web API hoặc web services.
C. Quản lý database connection.
D. Xử lý file I∕O.
27. Trong mô hình lập trình hướng sự kiện (event-driven programming), 'event handler′ có vai trò gì?
A. Xác định sự kiện nào sẽ được kích hoạt.
B. Chứa logic để phản ứng lại một sự kiện khi nó xảy ra.
C. Quản lý danh sách các sự kiện có thể xảy ra.
D. Tối ưu hóa hiệu suất xử lý sự kiện.
28. WebApi attribute routing trong ASP.NET Web API mang lại lợi ích gì so với convention-based routing?
A. Tăng hiệu suất xử lý request.
B. Giảm độ phức tạp của cấu hình routing.
C. Kiểm soát routing chi tiết hơn, dễ đọc và bảo trì hơn.
D. Tự động sinh document API (Swagger∕OpenAPI).
29. Dependency Injection (DI) container trong .NET Framework (ví dụ: Autofac, Ninject) giúp giải quyết vấn đề gì?
A. Vấn đề hiệu suất của ứng dụng.
B. Vấn đề quản lý bộ nhớ.
C. Vấn đề phụ thuộc giữa các component và giảm sự gắn kết.
D. Vấn đề bảo mật của ứng dụng.
30. Khi nào nên sử dụng cấu trúc `struct` thay vì `class` trong C#?
A. Khi cần kế thừa từ lớp khác.
B. Khi cần tạo đối tượng có hành vi phức tạp.
C. Khi cần biểu diễn một kiểu dữ liệu nhỏ, giá trị (value type) và hiệu suất là quan trọng.
D. Khi cần quản lý tài nguyên unmanaged.