Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình .net - Đề 03 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) đóng vai trò trung tâm. Chức năng chính nào sau đây KHÔNG thuộc về CLR?
- A. Quản lý bộ nhớ và thu gom rác (Garbage Collection)
- B. Biên dịch Just-In-Time (JIT) để thực thi mã trên các nền tảng khác nhau
- C. Biên dịch mã nguồn C# thành mã máy (machine code)
- D. Cung cấp các dịch vụ an ninh và quản lý kiểu dữ liệu
Câu 2: Cho đoạn mã C# sau:
```csharp
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 và nó đại diện cho điều gì?
- A. `List` và chứa các số chẵn từ danh sách ban đầu.
- B. `IEnumerable` và đại diện cho một truy vấn sẽ trả về các số chẵn khi được thực thi.
- C. `IQueryable` và chứa kết quả truy vấn CSDL các số chẵn.
- D. `int[]` và chứa một mảng các số chẵn đã được lọc.
Câu 3: Trong lập trình hướng đối tượng với C#, "tính đóng gói" (encapsulation) mang lại lợi ích chính nào sau đây?
- A. Tăng tốc độ thực thi chương trình.
- B. Cho phép kế thừa đa lớp phức tạp.
- C. Giảm dung lượng bộ nhớ sử dụng.
- D. Che giấu thông tin và kiểm soát truy cập đến dữ liệu và phương thức của đối tượng.
Câu 4: Phương thức mở rộng (Extension method) trong C# cho phép bạn làm gì?
- A. Thay thế các phương thức hiện có của một lớp.
- B. Tạo ra một lớp con kế thừa từ lớp gốc và thêm phương thức mới.
- C. Thêm phương thức mới vào một kiểu dữ liệu đã tồn tại mà không cần sửa đổi trực tiếp kiểu đó.
- D. Thay đổi phạm vi truy cập của các phương thức hiện có.
Câu 5: Cho đoạn code C# sau:
```csharp
string message = null;
try
{
Console.WriteLine(message.Length);
}
catch (NullReferenceException ex)
{
Console.WriteLine(
- A. Lỗi: Object reference not set to an instance of an object.
Khối finally luôn được thực thi
- B. Khối finally luôn được thực thi
Lỗi: Object reference not set to an instance of an object.
- C. Chương trình sẽ bị crash và không in ra gì.
- D. 0
Khối finally luôn được thực thi
Câu 6: Trong ASP.NET Core, Middleware pipeline đóng vai trò quan trọng trong việc xử lý request. Middleware KHÔNG chịu trách nhiệm cho công việc nào sau đây?
- A. Xác thực người dùng (Authentication)
- B. Biên dịch mã C# thành mã máy (Compilation)
- C. Ghi log request (Logging)
- D. Định tuyến request đến controller thích hợp (Routing)
Câu 7: Dependency Injection (DI) là một nguyên tắc thiết kế quan trọng trong .NET. Lợi ích chính của việc sử dụng DI là gì?
- A. Tăng hiệu suất thực thi của ứng dụng.
- B. Giảm số lượng code cần viết.
- C. Tăng tính module hóa và khả năng kiểm thử của ứng dụng.
- D. Tự động tạo tài liệu API cho ứng dụng.
Câu 8: Trong Entity Framework Core, "Migrations" được sử dụng để làm gì?
- A. Quản lý và áp dụng các thay đổi schema database khi mô hình dữ liệu thay đổi.
- B. Tối ưu hóa hiệu suất truy vấn database.
- C. Tạo database context tự động từ database đã có.
- D. Sao lưu và phục hồi database.
Câu 9: Async và Await trong C# được sử dụng để giải quyết vấn đề gì chính trong lập trình?
- A. Tăng tốc độ xử lý đồng bộ.
- B. Xử lý các tác vụ I/O hoặc CPU-bound mà không block thread chính của ứng dụng.
- C. Đơn giản hóa việc quản lý bộ nhớ.
- D. Bảo vệ ứng dụng khỏi các cuộc tấn công bảo mật.
Câu 10: Cho đoạn code C# sau:
```csharp
public interface ICalculator
{
int Add(int a, int b);
}
public class BasicCalculator : ICalculator
{
public int Add(int a, int b) => a + b;
}
public class AdvancedCalculator : ICalculator
{
public int Add(int a, int b) => a + b + 10; // Thêm 10
}
public class CalculatorService
{
private readonly ICalculator _calculator;
public CalculatorService(ICalculator calculator)
{
_calculator = calculator;
}
public int PerformCalculation(int x, int y)
{
return _calculator.Add(x, y);
}
}
// ... trong Startup.cs hoặc Program.cs:
// services.AddScoped();
// ... ở đâu đó trong code:
// var service = serviceProvider.GetService();
// int result = service.PerformCalculation(5, 3);
```
Nếu cấu hình Dependency Injection được thiết lập để `ICalculator` được resolve thành `BasicCalculator`, giá trị của `result` sẽ là bao nhiêu?
- A. 8
- B. 18
- C. 53
- D. Mã sẽ gây ra lỗi compile-time do cấu hình DI không hợp lệ.
Câu 11: Delegate trong C# là gì và nó thường được sử dụng cho mục đích nào?
- 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 phương thức, thường dùng cho callback và xử lý sự kiện.
- D. Một cách để tạo ra các lớp kế thừa đa hình.
Câu 12: Sự khác biệt chính giữa `List` và `HashSet` trong .NET Collections là gì?
- A. `List` là bất biến (immutable), còn `HashSet` là khả biến (mutable).
- B. `List` duy trì thứ tự các phần tử và cho phép trùng lặp, trong khi `HashSet` không duy trì thứ tự và không cho phép trùng lặp.
- C. `List` được tối ưu hóa cho tìm kiếm phần tử, còn `HashSet` được tối ưu hóa cho thêm/xóa phần tử.
- D. `List` chỉ chứa các kiểu dữ liệu giá trị, còn `HashSet` chỉ chứa các kiểu dữ liệu tham chiếu.
Câu 13: Cho đoạn code C# sau:
```csharp
int? nullableInt = null;
int regularInt = 10;
int result = nullableInt ?? regularInt;
```
Giá trị của `result` sau khi đoạn code trên thực thi là bao nhiêu và toán tử `??` trong C# được gọi là gì?
- A. null, toán tử null-conditional.
- B. 0, toán tử null-forgiving.
- C. Giá trị sẽ không xác định, toán tử null-propagation.
- D. 10, toán tử null-coalescing.
Câu 14: `ValueTask` trong C# được giới thiệu để cải thiện hiệu suất trong trường hợp nào so với `Task`?
- A. Khi cần thực hiện các tác vụ CPU-bound nặng.
- B. Khi làm việc với các tác vụ I/O kéo dài.
- C. Khi tác vụ bất đồng bộ có khả năng hoàn thành đồng bộ (synchronously) một cách nhanh chóng.
- D. Khi cần quản lý số lượng lớn các tác vụ bất đồng bộ.
Câu 15: Cho đoạn code C# sau:
```csharp
using System;
public class Example
{
public static void Main(string[] args)
{
Action greet = name =>
{
string greeting =
- A. Generic delegate,
- B. Biểu thức Lambda và Delegate,
- C. Anonymous type,
- D. Local function,
Câu 16: Interface và Abstract Class trong C# có điểm chung và khác biệt gì? Điểm khác biệt quan trọng nhất là gì?
- A. Interface hỗ trợ đa kế thừa, Abstract Class thì không.
- B. Abstract Class có thể chứa các thành viên private, Interface thì không.
- C. Lớp có thể implement nhiều Interface nhưng chỉ kế thừa một Abstract Class.
- D. Interface chỉ dùng cho kiểu dữ liệu giá trị, Abstract Class dùng cho kiểu dữ liệu tham chiếu.
Câu 17: Cho đoạn code C# sau:
```csharp
public class Counter
{
private int _count = 0;
public event EventHandler CountChanged;
public void Increment()
{
_count++;
OnCountChanged(EventArgs.Empty);
}
protected virtual void OnCountChanged(EventArgs e)
{
CountChanged?.Invoke(this, e);
}
public int Count => _count;
}
public class Subscriber
{
public void HandleCountChanged(object sender, EventArgs e)
{
Console.WriteLine(
- A. Singleton pattern, không in ra gì.
- B. Factory pattern,
- C. Strategy pattern,
- D. Observer pattern (Events),
Câu 18: Attribute trong C# được sử dụng để làm gì và chúng có ảnh hưởng trực tiếp đến runtime behavior của ứng dụng như thế nào?
- A. Định nghĩa các quy tắc bảo mật cho ứng dụng.
- B. Cung cấp metadata (thông tin mô tả) về code, có thể được reflection sử dụng để ảnh hưởng đến runtime behavior.
- C. Tối ưu hóa hiệu suất thực thi của ứng dụng.
- D. Thay đổi cấu trúc của assembly sau khi biên dịch.
Câu 19: Cho đoạn code C# sau:
```csharp
using System;
using System.Collections.Generic;
public class Example
{
public static void Main(string[] args)
{
List numbers = new List { 1, 2, 3, 4, 5 };
IEnumerable evenNumbersQuery = from num in numbers
where num % 2 == 0
select num;
foreach (int number in evenNumbersQuery)
{
Console.WriteLine(number);
}
}
}
```
Đoạn code trên sử dụng tính năng ngôn ngữ C# nào để truy vấn dữ liệu và nó sẽ in ra các số nào?
- A. Reflection, in ra tất cả các số từ 1 đến 5.
- B. Delegates, in ra số 0.
- C. LINQ Query Syntax, in ra số 2 và 4.
- D. Iterator, không in ra gì do lỗi cú pháp.
Câu 20: Phương thức `Dispose()` và interface `IDisposable` trong .NET được sử dụng để quản lý loại tài nguyên nào và tại sao?
- A. Tài nguyên unmanaged (ví dụ: file handles, database connections) để giải phóng chúng một cách chủ động.
- B. Bộ nhớ heap để tối ưu hóa việc sử dụng bộ nhớ.
- C. CPU cycles để giảm tải cho bộ xử lý.
- D. Các đối tượng .NET nói chung để thu gom rác nhanh hơn.
Câu 21: Sự khác biệt chính giữa `StringBuilder` và `string` trong C# khi làm việc với chuỗi là gì?
- A. `string` nhanh hơn `StringBuilder` trong hầu hết các trường hợp.
- B. `string` là immutable, còn `StringBuilder` là mutable, nên `StringBuilder` hiệu quả hơn cho thao tác chuỗi phức tạp.
- C. `StringBuilder` chỉ dùng cho chuỗi số, còn `string` dùng cho chuỗi văn bản.
- D. `string` tự động quản lý bộ nhớ, còn `StringBuilder` yêu cầu giải phóng bộ nhớ thủ công.
Câu 22: Cho đoạn code C# sau:
```csharp
using System;
public class Example
{
public static void Main(string[] args)
{
int[] numbers = { 1, 2, 3, 4, 5 };
Span span = numbers.AsSpan().Slice(1, 3);
foreach (int number in span)
{
Console.WriteLine(number);
}
}
}
```
Đoạn code trên sử dụng kiểu dữ liệu `Span` để làm gì và nó sẽ in ra các số nào?
- A. Tạo bản sao của mảng, in ra tất cả các số từ 1 đến 5.
- B. Đảo ngược mảng, in ra số 5, 4, 3.
- C. Tạo view (slice) của mảng mà không copy dữ liệu, in ra số 2, 3, 4.
- D. Chuyển đổi mảng sang List, in ra số 1, 3, 5.
Câu 23: `async void` method trong C# nên được sử dụng trong trường hợp nào và có những rủi ro gì khi sử dụng?
- A. Khi cần trả về một giá trị từ tác vụ bất đồng bộ.
- B. Khi muốn thực hiện các tác vụ song song.
- C. Khi cần tối ưu hóa hiệu suất của ứng dụng web.
- D. Chủ yếu dùng cho event handlers; rủi ro là khó bắt lỗi và xử lý ngoại lệ trong method.
Câu 24: Sự khác biệt chính giữa `struct` và `class` trong C# là gì về mặt bản chất và cách chúng được lưu trữ trong bộ nhớ?
- A. `struct` là kiểu giá trị (value type), lưu trên stack; `class` là kiểu tham chiếu (reference type), lưu trên heap.
- B. `struct` hỗ trợ kế thừa, `class` thì không.
- C. `struct` tự động thu gom rác, `class` cần `Dispose()` để giải phóng tài nguyên.
- D. `struct` chỉ chứa dữ liệu, `class` có thể chứa cả dữ liệu và phương thức.
Câu 25: Cho đoạn code C# sau:
```csharp
using System;
public class Example
{
public static void Main(string[] args)
{
string str1 =
- A. false, so sánh phân biệt chữ hoa chữ thường.
- B. true, so sánh không phân biệt chữ hoa chữ thường.
- C. false, so sánh dựa trên collation theo văn hóa hiện tại.
- D. true, so sánh dựa trên độ dài chuỗi.
Câu 26: Generic trong C# giúp giải quyết vấn đề gì và mang lại lợi ích chính nào trong lập trình?
- A. Tăng tốc độ biên dịch của chương trình.
- B. Giảm dung lượng bộ nhớ sử dụng bởi ứng dụng.
- C. Tái sử dụng code, type safety và hiệu suất cao hơn khi làm việc với nhiều kiểu dữ liệu.
- D. Cho phép kế thừa đa lớp trong C#.
Câu 27: Cho đoạn code C# sau:
```csharp
using System;
public class Example
{
public static void Main(string[] args)
{
int x = 5;
Action closure = () => Console.WriteLine(x);
x = 10;
closure();
}
}
```
Đoạn code trên minh họa khái niệm closure trong C# và nó sẽ in ra giá trị nào?
- A. 5, do biến x được capture theo giá trị.
- B. Không in ra gì, do lỗi biên dịch.
- C. Giá trị không xác định, do race condition.
- D. 10, do closure capture biến x theo tham chiếu.
Câu 28: Extension methods trong C# có thể được sử dụng để mở rộng các kiểu dữ liệu nào?
- A. Chỉ các lớp không sealed.
- B. Chỉ các interface và abstract classes.
- C. Chỉ các kiểu dữ liệu value type (structs và enums).
- D. Bất kỳ kiểu dữ liệu nào, bao gồm cả sealed classes, structs, interfaces và generic types.
Câu 29: Cho đoạn code C# sau:
```csharp
using System;
public class Example
{
public static void Main(string[] args)
{
var numbers = new int[] { 1, 2, 3, 4, 5 };
ref int firstElement = ref numbers[0];
firstElement = 100;
Console.WriteLine(numbers[0]);
}
}
```
Đoạn code trên sử dụng `ref` keyword để làm gì và nó sẽ in ra giá trị nào?
- A. Tạo bản sao của phần tử mảng, in ra 1.
- B. Tạo tham chiếu đến phần tử mảng, in ra 100.
- C. Truy cập phần tử mảng một cách bất đồng bộ, in ra giá trị ngẫu nhiên.
- D. Không biên dịch được, do sử dụng `ref` không đúng cách.
Câu 30: Trong ngữ cảnh đa luồng (.NET Threading), race condition là gì và làm thế nào để phòng tránh nó?
- A. Một lỗi xảy ra khi có quá nhiều luồng được tạo ra.
- B. Tình trạng deadlock khi các luồng chờ đợi lẫn nhau vô thời hạn.
- C. Xảy ra khi kết quả phụ thuộc vào thứ tự thực thi không xác định của các luồng; phòng tránh bằng đồng bộ hóa truy cập tài nguyên chia sẻ.
- D. Một loại exception xảy ra khi truy cập bộ nhớ ngoài phạm vi.