1. Async và Await trong C# được sử dụng chủ yếu để giải quyết vấn đề nào?
A. Bảo mật ứng dụng.
B. Xử lý song song (parallel processing).
C. Lập trình bất đồng bộ (asynchronous programming) và tránh blocking UI thread.
D. Quản lý bộ nhớ hiệu quả hơn.
2. Delegate trong C# đại diện cho khái niệm nào?
A. Một biến chứa giá trị.
B. Một con trỏ hàm (function pointer) hoặc tham chiếu đến một phương thức.
C. Một lớp cơ sở (base class) cho các lớp khác.
D. Một interface định nghĩa hợp đồng.
3. Trong ASP.NET Core, Middleware pipeline được sử dụng để làm gì?
A. Quản lý kết nối cơ sở dữ liệu.
B. Xử lý yêu cầu HTTP đến và trả về phản hồi HTTP.
C. Định tuyến (routing) yêu cầu đến controller thích hợp.
D. Xác thực và ủy quyền người dùng.
4. Blazor trong .NET cho phép xây dựng ứng dụng web theo mô hình nào?
A. Chỉ phía máy chủ (server-side).
B. Chỉ phía máy khách (client-side) với JavaScript.
C. Cả phía máy chủ và phía máy khách sử dụng C#.
D. Chỉ ứng dụng web tĩnh (static web applications).
5. NuGet là gì trong hệ sinh thái .NET?
A. Một trình biên dịch C#.
B. Một công cụ quản lý package (package manager) cho .NET.
C. Một framework phát triển web.
D. Một nền tảng đám mây của Microsoft.
6. Trong ASP.NET Core MVC, Controller chịu trách nhiệm chính cho việc gì?
A. Hiển thị giao diện người dùng.
B. Xử lý logic ứng dụng và tương tác với Model, trả về View hoặc dữ liệu.
C. Quản lý database.
D. Xác thực người dùng.
7. 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 sealed.
B. Thay đổi hành vi của phương thức hiện có trong lớp.
C. Tạo lớp con từ một lớp sealed.
D. Truy cập các thành viên private của lớp khác.
8. Dependency Inversion Principle (DIP) là một trong 5 nguyên tắc SOLID. Nội dung chính của DIP là gì?
A. Các lớp con nên có thể thay thế cho lớp cha của chúng.
B. Một lớp chỉ nên có một lý do duy nhất để thay đổi.
C. Module cấp cao không nên phụ thuộc vào module cấp thấp, cả hai nên phụ thuộc vào abstraction.
D. Interface của lớp con nên nhỏ hơn hoặc bằng interface của lớp cha.
9. Boxing và Unboxing trong C# liên quan đến việc chuyển đổi giữa kiểu nào?
A. Kiểu số nguyên và kiểu số thực.
B. Kiểu tham chiếu và kiểu giá trị.
C. Kiểu dữ liệu nguyên thủy và kiểu dữ liệu phức tạp.
D. Kiểu dữ liệu động và kiểu dữ liệu tĩnh.
10. Đặc điểm nào sau đây là đúng về 'struct′ trong C# so với 'class′?
A. Struct là kiểu tham chiếu, class là kiểu giá trị.
B. Struct hỗ trợ kế thừa, class không hỗ trợ.
C. Struct thường được sử dụng cho các kiểu dữ liệu nhỏ, nhẹ và bất biến, class cho các đối tượng phức tạp hơn.
D. Struct được lưu trữ trên heap, class được lưu trữ trên stack.
11. 'yield return′ keyword trong C# được sử dụng để làm gì?
A. Xử lý ngoại lệ.
B. Tạo iterator (bộ lặp) cho phép trả về từng phần tử của một collection một cách lazy.
C. Thực hiện đa luồng (multithreading).
D. Quản lý transaction.
12. HttpContext trong ASP.NET Core cung cấp thông tin về điều gì?
A. Cấu hình ứng dụng.
B. Database connection.
C. Thông tin về HTTP request hiện tại và response đang được xây dựng.
D. Session người dùng.
13. Sự khác biệt chính giữa .NET Framework và .NET (.NET Core trở lên) là gì?
A. .NET Framework chỉ hỗ trợ Windows, còn .NET là đa nền tảng (cross-platform).
B. .NET Framework sử dụng mã nguồn mở, còn .NET là mã nguồn đóng.
C. .NET Framework mạnh hơn .NET về hiệu suất.
D. .NET Framework chỉ hỗ trợ lập trình web, còn .NET hỗ trợ đa dạng loại ứng dụng.
14. Attribute trong C# được sử dụng để làm gì?
A. Tăng tốc độ thực thi chương trình.
B. Cung cấp metadata (dữ liệu về dữ liệu) cho code.
C. Xác thực dữ liệu đầu vào của người dùng.
D. Tạo giao diện người dùng động.
15. LINQ (Language Integrated Query) trong .NET Framework cung cấp khả năng gì?
A. Tạo giao diện người dùng đồ họa.
B. Truy vấn dữ liệu từ nhiều nguồn khác nhau (database, XML, objects).
C. Quản lý bộ nhớ và garbage collection.
D. Triển khai dịch vụ web RESTful.
16. Phương thức 'Dispose()′ trong interface IDisposable được sử dụng để làm gì?
A. Giải phóng bộ nhớ không được quản lý (unmanaged resources).
B. Khởi tạo đối tượng.
C. Xử lý ngoại lệ (exception handling).
D. Ghi log hoạt động của ứng dụng.
17. Thành phần nào của .NET chịu trách nhiệm chuyển đổi mã IL (Intermediate Language) thành mã máy cụ thể cho nền tảng đích?
A. CTS (Common Type System)
B. CLS (Common Language Specification)
C. CLR (Common Language Runtime)
D. FCL (Framework Class Library)
18. Reflection trong .NET cho phép làm gì?
A. Tự động sửa lỗi code.
B. Kiểm tra và thao tác metadata của types, assemblies, modules và members tại runtime.
C. Tối ưu hóa hiệu suất ứng dụng.
D. Bảo mật ứng dụng khỏi tấn công.
19. Kỹ thuật 'Code First′ trong Entity Framework Core cho phép làm gì?
A. Tạo database schema từ code C# (classes).
B. Tạo code C# từ database schema hiện có.
C. Tối ưu hóa truy vấn database bằng cách viết code trước.
D. Quản lý migration database bằng giao diện đồ họa.
20. Sự khác biệt giữa 'var′ và kiểu dữ liệu tường minh (explicit type) khi khai báo biến trong C# là gì?
A. 'var′ làm cho code chạy nhanh hơn.
B. Kiểu dữ liệu của 'var′ được suy luận (inferred) bởi compiler, kiểu tường minh được khai báo rõ ràng.
C. 'var′ chỉ dùng cho kiểu giá trị, kiểu tường minh cho kiểu tham chiếu.
D. Không có sự khác biệt về chức năng, chỉ khác nhau về cú pháp.
21. Razor Pages trong ASP.NET Core là gì?
A. Một framework JavaScript để xây dựng giao diện người dùng.
B. Một cách tiếp cận phát triển web dựa trên trang (page-based) trong ASP.NET Core.
C. Một công cụ để tạo Web API RESTful.
D. Một hệ thống quản lý nội dung (CMS) cho .NET.
22. Generic trong C# mang lại lợi ích chính nào?
A. Tăng tốc độ thực thi code.
B. Tái sử dụng code và kiểu an toàn (type safety).
C. Giảm dung lượng bộ nhớ ứng dụng.
D. Đơn giản hóa việc triển khai ứng dụng.
23. Entity Framework Core (EF Core) là một ORM (Object-Relational Mapper) cho .NET. Chức năng chính của ORM là gì?
A. Tối ưu hóa hiệu suất truy vấn database.
B. Ánh xạ dữ liệu giữa database quan hệ và các đối tượng .NET.
C. Tạo database schema từ code.
D. Quản lý transaction database.
24. Dependency Injection (DI) container trong .NET Core giúp đạt được mục tiêu chính nào?
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 (loose coupling).
C. Đơn giản hóa việc triển khai ứng dụng.
D. Tự động sinh mã (code generation).
25. Kiểu dữ liệu nào sau đây không phải là kiểu giá trị (value type) trong C#?
A. int
B. char
C. struct
D. string
26. Mục đích chính của việc sử dụng 'using′ statement trong C# là gì?
A. Tăng tốc độ thực thi code.
B. Đảm bảo tài nguyên IDisposable được giải phóng đúng cách (gọi Dispose()).
C. Quản lý bộ nhớ hiệu quả hơn.
D. Xử lý ngoại lệ.
27. Garbage Collection (GC) trong .NET CLR thực hiện chức năng gì?
A. Quản lý bộ nhớ bằng cách tự động giải phóng bộ nhớ không còn được sử dụng.
B. Tối ưu hóa hiệu suất CPU.
C. Phát hiện và sửa lỗi bộ nhớ.
D. Quản lý kết nối database.
28. Interface và Abstract class trong C# có điểm chung nào?
A. Cả hai đều có thể được khởi tạo trực tiếp.
B. Cả hai đều định nghĩa hợp đồng (contract) mà các lớp kế thừa phải tuân theo.
C. Cả hai đều hỗ trợ đa kế thừa (multiple inheritance).
D. Cả hai đều chỉ chứa các phương thức static.
29. Namespace trong C# được sử dụng để làm gì?
A. Tăng tốc độ biên dịch code.
B. Tổ chức code thành các nhóm logic và tránh xung đột tên.
C. Quản lý phiên bản của thư viện.
D. Tối ưu hóa bộ nhớ ứng dụng.
30. Sự khác biệt chính giữa 'virtual′ và 'abstract′ keyword khi định nghĩa phương thức trong C# là gì?
A. Phương thức virtual không cần phải có implementation trong lớp cha, abstract thì phải có.
B. Phương thức abstract phải được override trong lớp con, virtual thì không bắt buộc.
C. Phương thức virtual chỉ có thể được gọi từ lớp con, abstract có thể gọi từ bất kỳ đâu.
D. Không có sự khác biệt, chúng có thể thay thế cho nhau.