Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình .net - Đề 06 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, AssemblyManifest chứa thông tin quan trọng nào về assembly?
- A. Chỉ chứa thông tin về các kiểu dữ liệu công khai (public types)
- B. Chỉ chứa thông tin về các assembly tham chiếu (referenced assemblies)
- C. Chỉ chứa thông tin về phiên bản và tên assembly
- D. Chứa metadata toàn diện bao gồm tên, phiên bản, assembly tham chiếu, và các module của assembly
Câu 2: Cho đoạn code C# sau:
```csharp
using System;
public class MyClass
{
public static void Main(string[] args)
{
int? nullableInt = null;
Console.WriteLine(nullableInt.HasValue);
}
}
```
Đoạn code trên sẽ in ra giá trị nào?
- A. True
- B. False
- C. Null
- D. Báo lỗi biên dịch
Câu 3: Phương thức mở rộng (Extension Method) trong C# được định nghĩa như thế nào để có thể mở rộng lớp `StringBuilder` và thêm chức năng đếm số từ?
- A. public class StringExtensions {
public int CountWords(StringBuilder sb) { /* ... */ }
}
- B. public static class StringExtensions {
public static int CountWords(string sb) { /* ... */ }
}
- C. public static class StringExtensions {
public static int CountWords(this StringBuilder sb) { /* ... */ }
}
- D. public interface IStringExtensions {
int CountWords(StringBuilder sb);
}
Câu 4: Trong lập trình bất đồng bộ (Asynchronous Programming) với async/await trong C#, điều gì xảy ra khi gặp từ khóa `await`?
- A. Phương thức async tạm dừng thực thi cho đến khi tác vụ được await hoàn thành, sau đó tiếp tục thực thi từ điểm dừng.
- B. Luồng hiện tại bị chặn hoàn toàn cho đến khi tác vụ được await hoàn thành.
- C. Một luồng mới được tạo ra để thực hiện tác vụ và phương thức async tiếp tục thực thi song song.
- D. Từ khóa `await` không có tác dụng gì và chương trình tiếp tục thực thi tuần tự.
Câu 5: Khi nào nên sử dụng `struct` thay vì `class` trong C#?
- A. Khi cần tạo ra các đối tượng phức tạp với nhiều phương thức và thuộc tính.
- B. Khi cần biểu diễn các kiểu dữ liệu nhỏ, nhẹ, mang tính giá trị như điểm tọa độ, số phức.
- C. Khi cần sử dụng kế thừa và đa hình.
- D. Khi muốn đối tượng được quản lý bộ nhớ bởi Garbage Collector một cách hiệu quả nhất.
Câu 6: Đoạn mã C# sau minh họa khái niệm OOP nào:
```csharp
public interface IShape
{
double GetArea();
}
public class Circle : IShape
{
public double Radius { get; set; }
public double GetArea() => Math.PI * Radius * Radius;
}
public class Square : IShape
{
public double Side { get; set; }
public double GetArea() => Side * Side;
}
```
- A. Đóng gói (Encapsulation)
- B. Kế thừa (Inheritance)
- C. Đa hình (Polymorphism)
- D. Trừu tượng (Abstraction)
Câu 7: Trong mô hình lập trình hướng sự kiện (Event-driven programming) trong .NET, Delegate đóng vai trò gì?
- A. Đại diện cho dữ liệu sự kiện (event data).
- B. Quản lý vòng đời của sự kiện.
- C. Định nghĩa giao diện người dùng cho sự kiện.
- D. Đại diện cho phương thức xử lý sự kiện (event handler).
Câu 8: Cho đoạn code LINQ sau:
```csharp
List numbers = new List() { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(n => n % 2 == 0).Select(n => n * 2);
```
`evenNumbers` sẽ chứa các giá trị nào sau khi đoạn code trên thực thi?
- A. [2, 4, 6]
- B. [4, 8, 12]
- C. [1, 2, 3, 4, 5, 6]
- D. [] (danh sách rỗng)
Câu 9: Trong Entity Framework Core, DbSet được sử dụng để làm gì?
- A. Đại diện cho một bảng trong cơ sở dữ liệu và cho phép truy vấn dữ liệu từ bảng đó.
- B. Định nghĩa cấu trúc của cơ sở dữ liệu (database schema).
- C. Thiết lập kết nối đến cơ sở dữ liệu.
- D. Thực hiện migration cơ sở dữ liệu.
Câu 10: Dependency Injection (DI) container trong .NET (ví dụ: Autofac, Ninject, .NET built-in DI container) giúp giải quyết vấn đề gì trong phát triển phần mềm?
- A. Tăng hiệu năng ứng dụng bằng cách tối ưu hóa việc sử dụng bộ nhớ.
- B. Đơn giản hóa việc quản lý phiên bản của các thư viện bên ngoài.
- C. Giảm sự phụ thuộc giữa các lớp và thành phần, giúp code dễ bảo trì và kiểm thử hơn.
- D. Tự động tạo mã (code generation) để tăng tốc độ phát triển.
Câu 11: Cho đoạn code C# sau:
```csharp
string str1 =
- A. True, vì hai chuỗi có cùng giá trị và `ReferenceEquals` so sánh giá trị chuỗi.
- B. Có thể True hoặc False, vì `ReferenceEquals` so sánh tham chiếu, và string interning có thể làm cho tham chiếu giống nhau trong một số trường hợp, nhưng không đảm bảo.
- C. False, vì `ReferenceEquals` luôn trả về false khi so sánh hai chuỗi khác nhau.
- D. Báo lỗi biên dịch, vì `ReferenceEquals` không thể so sánh kiểu string.
Câu 12: Garbage Collector (GC) trong .NET Framework hoạt động như thế nào?
- A. GC là một thành phần của hệ điều hành, hoạt động độc lập với .NET Framework.
- B. GC chỉ hoạt động khi ứng dụng yêu cầu giải phóng bộ nhớ một cách явление.
- C. GC giải phóng bộ nhớ ngay lập tức khi một đối tượng không còn được tham chiếu đến.
- D. GC là một tiến trình chạy ngầm, định kỳ kiểm tra và giải phóng bộ nhớ không còn được tham chiếu bởi ứng dụng.
Câu 13: Sự khác biệt chính giữa `virtual` và `abstract` keyword khi định nghĩa thành viên lớp (class members) trong C# là gì?
- A. `virtual` dùng cho phương thức, `abstract` dùng cho thuộc tính.
- B. Lớp chứa phương thức `virtual` không thể khởi tạo, lớp chứa phương thức `abstract` thì có thể.
- C. `virtual` cho phép lớp con ghi đè (override) phương thức, có thể có implementation ở lớp cha. `abstract` bắt buộc lớp con ghi đè, không có implementation ở lớp cha.
- D. `virtual` là phạm vi truy cập (access modifier), `abstract` là kiểu dữ liệu trả về.
Câu 14: Trong ASP.NET Core, Middleware pipeline là gì và nó hoạt động như thế nào trong xử lý request?
- A. Middleware pipeline là một chuỗi các component được gọi tuần tự để xử lý HTTP request và response.
- B. Middleware pipeline chỉ được sử dụng để xử lý lỗi trong ứng dụng ASP.NET Core.
- C. Middleware pipeline là một cơ chế để routing request đến controller thích hợp.
- D. Middleware pipeline chỉ hoạt động khi ứng dụng chạy ở môi trường production.
Câu 15: Cho đoạn code C# sau:
```csharp
int[] numbers = { 1, 2, 3, 4, 5 };
ref int element = ref numbers[2];
element = 10;
Console.WriteLine(numbers[2]);
```
Đoạn code trên sẽ in ra giá trị nào và tại sao?
- A. 3, vì `ref` chỉ tạo bản sao của giá trị.
- B. 10, vì `ref` tạo tham chiếu đến phần tử mảng, thay đổi `element` thay đổi giá trị gốc.
- C. Báo lỗi biên dịch, vì không thể gán giá trị cho `ref` locals.
- D. 5, vì `element` chỉ ảnh hưởng đến phạm vi cục bộ (local scope).
Câu 16: Khi nào nên sử dụng `sealed` keyword cho một class trong C#?
- A. Khi muốn tăng hiệu năng của lớp.
- B. Khi muốn lớp chỉ có thể được truy cập từ bên trong assembly.
- C. Khi muốn lớp tự động giải phóng bộ nhớ khi không còn sử dụng.
- D. Khi muốn ngăn chặn lớp bị kế thừa bởi các lớp khác.
Câu 17: Trong .NET, khái niệm boxing và unboxing 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 (primitive types) khác nhau (ví dụ: int sang float).
- B. Giữa các lớp (classes) khác nhau.
- C. Giữa kiểu giá trị (value types) và kiểu tham chiếu (reference types), cụ thể là `object`.
- D. Giữa các kiểu dữ liệu nullable và non-nullable.
Câu 18: Cho đoạn code C# sử dụng Generics:
```csharp
public class GenericClass
{
public T Value { get; set; }
}
GenericClass stringObject = new GenericClass();
stringObject.Value = 123;
```
Đoạn code trên có lỗi không? Nếu có, lỗi ở đâu và tại sao?
- A. Có lỗi. Lỗi ở dòng `stringObject.Value = 123;` vì cố gắng gán giá trị kiểu `int` cho thuộc tính kiểu `string`.
- B. Không lỗi. Code biên dịch và chạy bình thường.
- C. Lỗi ở dòng khai báo `GenericClass stringObject = new GenericClass();` vì kiểu tham số không hợp lệ.
- D. Lỗi chỉ xảy ra khi runtime, không phải lỗi biên dịch.
Câu 19: Attribute trong .NET được sử dụng để làm gì?
- A. Định nghĩa quyền truy cập (access modifiers) cho các thành viên lớp.
- B. Cung cấp metadata (dữ liệu về dữ liệu) cho code, có thể được đọc và xử lý tại runtime hoặc bởi các công cụ khác.
- C. Tối ưu hóa hiệu năng thực thi của code.
- D. Tạo ra giao diện người dùng (UI) cho ứng dụng.
Câu 20: Cho đoạn code C# sử dụng `yield return`:
```csharp
public static IEnumerable GetNumbers()
{
yield return 1;
yield return 2;
yield return 3;
}
foreach (int number in GetNumbers())
{
Console.WriteLine(number);
}
```
Đoạn code trên minh họa khái niệm gì và nó hoạt động như thế nào?
- A. Đa luồng (Multithreading), các số được trả về đồng thời.
- B. Đệ quy (Recursion), phương thức `GetNumbers` gọi lại chính nó.
- C. Iterator (Bộ lặp), cho phép trả về từng phần tử của một tập hợp một cách lazy (khi cần) thay vì tạo ra toàn bộ tập hợp cùng một lúc.
- D. LINQ, sử dụng cú pháp truy vấn LINQ để tạo ra dãy số.
Câu 21: HttpContext trong ASP.NET Core cung cấp thông tin gì?
- A. Chỉ thông tin về request (yêu cầu) HTTP gửi đến server.
- B. Chỉ thông tin về response (phản hồi) HTTP trả về client.
- C. Chỉ thông tin về session (phiên làm việc) của người dùng.
- D. Thông tin toàn diện về HTTP request và response hiện tại, bao gồm request, response, user, session, và nhiều thông tin khác.
Câu 22: Trong C#, sự khác biệt giữa `string` và `String` (System.String) là gì?
- A. `string` là kiểu dữ liệu giá trị, `String` là kiểu dữ liệu tham chiếu.
- B. Không có sự khác biệt, `string` là keyword (bí danh) cho `System.String`.
- C. `string` là immutable, `String` là mutable.
- D. `String` chỉ được sử dụng trong .NET Framework, `string` chỉ được sử dụng trong .NET Core.
Câu 23: Cho đoạn code C#:
```csharp
Action greet = name => {
string greeting =
- A. Một lớp (class) dùng để định nghĩa hành động (action) trong ứng dụng.
- B. Một interface dùng để định nghĩa các phương thức bất đồng bộ (asynchronous methods).
- C. Một delegate đại diện cho một phương thức trả về `void` và nhận một tham số kiểu `string`.
- D. Một event handler dùng để xử lý sự kiện click chuột.
Câu 24: Razor Pages trong ASP.NET Core khác biệt so với MVC (Model-View-Controller) như thế nào?
- A. Razor Pages chỉ hỗ trợ front-end, MVC chỉ hỗ trợ back-end.
- B. Razor Pages nhanh hơn MVC về hiệu năng.
- C. MVC dễ học hơn Razor Pages.
- D. Razor Pages page-centric, tập trung vào trang và xử lý request trong trang. MVC request-centric, tách biệt logic xử lý và view, phù hợp cho ứng dụng phức tạp.
Câu 25: Unit testing framework (ví dụ: xUnit, NUnit, MSTest) được sử dụng để làm gì trong phát triển .NET?
- A. Để triển khai ứng dụng lên môi trường production.
- B. Để viết và chạy các bài kiểm thử tự động cho các đơn vị code nhỏ nhất (functions, methods, classes) nhằm đảm bảo chất lượng code.
- C. Để theo dõi hiệu năng ứng dụng trong quá trình chạy.
- D. Để tạo tài liệu hướng dẫn sử dụng ứng dụng.
Câu 26: Cho đoạn code C#:
```csharp
var result = 5 & 3;
Console.WriteLine(result);
```
Giá trị của `result` sẽ là bao nhiêu và phép toán `&` là phép toán gì?
- A. 8, phép toán `&` là phép cộng bit (bitwise addition).
- B. 15, phép toán `&` là phép nhân bit (bitwise multiplication).
- C. 1, phép toán `&` là phép AND bit (bitwise AND).
- D. 0, phép toán `&` là phép XOR bit (bitwise XOR).
Câu 27: Sự khác biệt giữa interface và abstract class trong C# là gì và khi nào nên sử dụng loại nào?
- A. Interface chỉ định nghĩa contract (hợp đồng) về phương thức, không chứa implementation và state. Abstract class có thể chứa implementation và state. Class có thể implement nhiều interface, nhưng chỉ kế thừa một abstract class.
- B. Interface có thể chứa implementation, abstract class thì không.
- C. Abstract class nhanh hơn interface về hiệu năng.
- D. Interface chỉ dùng cho UI, abstract class dùng cho logic nghiệp vụ.
Câu 28: NuGet Package Manager được sử dụng để làm gì trong .NET development?
- A. Để biên dịch code C# thành assembly.
- B. Để debug ứng dụng .NET.
- C. Để tạo giao diện người dùng (UI) cho ứng dụng.
- D. Để quản lý và tích hợp các thư viện và packages bên ngoài vào dự án .NET, giúp tái sử dụng code và quản lý dependencies.
Câu 29: Cho đoạn code C# sử dụng `async Task`:
```csharp
public static async Task CalculateSumAsync(int a, int b)
{
await Task.Delay(1000);
return a + b;
}
// ...
int sum = await CalculateSumAsync(5, 10);
Console.WriteLine(sum);
```
Phương thức `CalculateSumAsync` trả về kiểu dữ liệu gì và ý nghĩa của `Task` là gì?
- A. `void`, `Task` không có ý nghĩa gì.
- B. `Task`, đại diện cho một asynchronous operation (tác vụ bất đồng bộ) sẽ trả về một giá trị kiểu `int` khi hoàn thành.
- C. `int`, `Task` chỉ là wrapper để phương thức có thể gọi `await`.
- D. `Task`, `Task` đại diện cho một tác vụ chạy song song, không liên quan đến kiểu trả về.
Câu 30: Trong .NET, Cross-Origin Resource Sharing (CORS) là gì và tại sao nó quan trọng trong phát triển web API?
- A. CORS là một kỹ thuật để tăng tốc độ tải trang web.
- B. CORS là một framework để phát triển front-end cho ứng dụng web.
- C. CORS (Cross-Origin Resource Sharing) là một cơ chế bảo mật trình duyệt, kiểm soát việc tài nguyên trên một domain (origin) có thể được truy cập từ domain khác. Quan trọng trong web API để cho phép các ứng dụng front-end từ domain khác (ví dụ: JavaScript chạy trên trình duyệt) truy cập API một cách an toàn.
- D. CORS là một công cụ để quản lý cơ sở dữ liệu trong ứng dụng web.