Thi lại · PRN222 · Summer 2026
Ôn tập thi lại PRN222 Summer 2026
50 câu gom từ 1 đề ôn của kỳ Summer 2026.
Đề gốc
Bấm để làm trọn một đề thay vì tra từng câu
50 câu hỏi
Trang 2 / 3ATo create tightly coupled classes.
BTo depend on abstractions, not concretions.
CTo create large, monolithic classes.
DTo avoid using interfaces.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: B. Nguyên lý Đảo ngược Phụ thuộc phát biểu rằng mô-đun cấp cao và mô-đun cấp thấp đều phải phụ thuộc vào TRỪU TƯỢNG, và trừu tượng không phụ thuộc vào chi tiết mà ngược lại. Mục đích là cắt đứt sự ràng buộc cứng giữa các lớp, giúp thay thế hiện thực, viết kiểm thử với đối tượng giả và mở rộng hệ thống dễ dàng. Phương án A đi ngược mục tiêu vì tạo ra ghép nối chặt; phương án C nói về lớp lớn monolithic, thuộc vấn đề của SRP; phương án D sai hoàn toàn vì DIP dựa chính vào interface.
AEvent-based Asynchronous Pattern (EAP)
BAsynchronous Programming Model (APM)
CTask-based Asynchronous Pattern (TAP)
DDelegate pattern
Lời giải
Mở trang câu hỏi này →Đáp án đúng: C. async/await trong C# được xây trên Task-based Asynchronous Pattern: một phương thức bất đồng bộ trả về Task hoặc Task<T>, và await tạm dừng phương thức cho tới khi Task hoàn tất mà không chặn luồng. TAP ra đời từ .NET 4 và là mẫu được khuyến nghị hiện nay. Event-based Asynchronous Pattern (A) là mẫu cũ dùng cặp phương thức MethodAsync kèm sự kiện MethodCompleted; Asynchronous Programming Model (B) là mẫu còn cũ hơn với cặp BeginXxx/EndXxx và IAsyncResult; mẫu delegate (D) không phải một mô hình bất đồng bộ chuẩn.
Consider this C# code:4 lựa chọncó code
public class FileLogger {
public void Log(string message) => Console.WriteLine(message);
}
public class OrderService {
private FileLogger logger = new FileLogger();
}Which principle is violated here?
ASingle Responsibility Principle
BOpen/Closed Principle
CDependency Inversion Principle
DInterface Segregation Principle
Lời giải
Mở trang câu hỏi này →Đáp án đúng: C. OrderService tự khởi tạo một FileLogger cụ thể bằng new, nghĩa là mô-đun cấp cao phụ thuộc trực tiếp vào lớp hiện thực cấp thấp thay vì vào một trừu tượng như ILogger. Đó chính là vi phạm Nguyên lý Đảo ngược Phụ thuộc; cách sửa là khai báo interface ILogger, cho OrderService nhận nó qua constructor và để DI container cung cấp. Trách nhiệm của OrderService vẫn đơn nhất nên chưa vi phạm SRP (A); không có chỗ nào phải sửa mã cũ để mở rộng nên chưa động tới OCP (B); và cũng không có interface phình to nào để nói tới ISP (D).
Which method stops a hosted service?4 lựa chọn
A
StopAsync()B
EndAsync()C
seAsync()D
ShutdownAsync()Lời giải
Mở trang câu hỏi này →Đáp án đúng: A. Giao diện IHostedService định nghĩa đúng hai phương thức: StartAsync(CancellationToken) được host gọi khi khởi động và StopAsync(CancellationToken) được gọi khi ứng dụng tắt để dịch vụ dọn dẹp và kết thúc êm. Lớp BackgroundService hiện thực hoá sẵn cặp này và cho ta ghi đè ExecuteAsync. Các tên EndAsync(), seAsync() và ShutdownAsync() (B, C, D) không tồn tại trong hợp đồng IHostedService nên đều không phải phương thức dừng dịch vụ.
AA system with multiple CPUs.
BA system with a single CPU.
CA system with multiple cores.
DA distributed system.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: B. Hệ thống đơn bộ xử lý (mono-processor, còn gọi uniprocessor) là hệ chỉ có MỘT CPU đảm nhiệm toàn bộ việc thực thi lệnh; tại một thời điểm nó chỉ chạy được một luồng lệnh, và cảm giác đa nhiệm có được là nhờ hệ điều hành luân phiên chia thời gian. Hệ nhiều CPU (A) là multi-processor; hệ một CPU nhiều lõi (C) đã có khả năng thực thi song song thật sự nên không còn là mono-processor theo nghĩa cổ điển; hệ phân tán (D) gồm nhiều máy độc lập nối mạng, thuộc phạm trù hoàn toàn khác.
AIt stores data in memory only.
BIt stores data in session state or cookies, depending on configuration.
CIt stores data in the database.
DIt stores data in the file system.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: B. TempData dùng để giữ dữ liệu qua ĐÚNG một lần chuyển hướng, và nơi lưu phụ thuộc vào provider được cấu hình: mặc định trong ASP.NET Core là CookieTempDataProvider - lưu vào cookie đã mã hoá; nếu đăng ký SessionStateTempDataProvider thì dữ liệu nằm trong session state. Vì vậy phát biểu đúng là lưu trong session hoặc cookie tuỳ cấu hình. Phương án A sai vì dữ liệu không chỉ nằm trong bộ nhớ tiến trình; phương án C và D sai vì TempData không ghi xuống cơ sở dữ liệu hay hệ thống tệp.
ABy writing JavaScript code.
BBy installing NuGet packages and configuring the DbContext.
CBy using static HTML files.
DBy using a database management system.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: B. Để dùng Entity Framework Core trong một dự án Blazor Web App, ta cài các gói NuGet cần thiết như Microsoft.EntityFrameworkCore, gói provider tương ứng (SqlServer, Sqlite...) và Microsoft.EntityFrameworkCore.Tools; sau đó định nghĩa lớp DbContext và đăng ký nó vào DI bằng builder.Services.AddDbContext hoặc AddDbContextFactory cùng chuỗi kết nối. Viết JavaScript (A) và dùng tệp HTML tĩnh (C) không liên quan tới truy cập dữ liệu; còn phương án D chỉ nói tới hệ quản trị cơ sở dữ liệu - thứ nằm ở phía máy chủ, không phải cách thêm EF Core vào dự án.
A
Program.csB
Routes.razorC
App.razorD
Startup.csLời giải
Mở trang câu hỏi này →Đáp án đúng: C. Trong các dự án Blazor Server và Blazor WebAssembly, thành phần Router được khai báo trong App.razor: nó nhận AppAssembly để quét các trang có chỉ thị @page, định nghĩa Found và NotFound, và bọc trong RouteView để dựng layout. Program.cs (A) chỉ đăng ký dịch vụ và cấu hình pipeline; Startup.cs (D) là kiểu tổ chức cũ đã bị gộp vào Program.cs từ .NET 6. Lưu ý mẫu Blazor Web App của .NET 8 tách phần Router sang Routes.razor (B), nhưng trong phạm vi Blazor Server/WebAssembly của môn học thì App.razor là câu trả lời.
What is Inversion of Control (IoC)?4 lựa chọn
AA programming paradigm where the control flow of a program is inverted compared to traditional procedural programming.
BA method for managing memory allocation.
CA technique for optimizing network traffic.
DA way to encrypt data.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: A. Inversion of Control là nguyên lý trong đó luồng điều khiển bị ĐẢO NGƯỢC so với lập trình thủ tục truyền thống: thay vì mã của bạn tự khởi tạo và gọi các thành phần phụ thuộc, framework hoặc container sẽ nắm quyền điều khiển và cung cấp chúng cho bạn - Dependency Injection chính là một cách hiện thực hoá IoC. Nhờ đó lớp chỉ khai báo cái nó cần chứ không quyết định cái nó dùng, giúp giảm ghép nối và dễ kiểm thử. Các phương án B, C, D nói về quản lý bộ nhớ, tối ưu lưu lượng mạng và mã hoá, đều không liên quan.
AUses a single processor
BExecutes one instruction at a time
CInstructions are executed sequentially
DAll instructions run in parallel streams
Lời giải
Mở trang câu hỏi này →Đáp án đúng: D. Tính toán tuần tự nghĩa là chương trình chạy trên MỘT bộ xử lý, các lệnh được thực hiện lần lượt, mỗi thời điểm chỉ một lệnh - đúng như các phát biểu A, B và C. Vì vậy phát biểu "tất cả các lệnh chạy song song trên nhiều luồng" là điều KHÔNG đúng với tính toán tuần tự; đó chính là đặc trưng của tính toán song song, nơi bài toán được chia nhỏ và thực hiện đồng thời trên nhiều lõi hoặc nhiều bộ xử lý. Câu hỏi yêu cầu chọn phát biểu SAI nên đáp án là D.
AWorker Service integrates better with .NET features like DI and Logging
BWorker Service is UI-based
CWorker Service cannot be published
DWorker Service only runs on Windows
Lời giải
Mở trang câu hỏi này →Đáp án đúng: A. Worker Service là mẫu dự án .NET dựng sẵn Generic Host, nhờ đó có ngay Dependency Injection, Logging, Configuration, IHostedService và quản lý vòng đời khởi động - tắt êm. Đó là lý do chính để chọn nó thay vì viết Windows Service thuần. Phương án B sai vì Worker Service không có giao diện; phương án C sai vì hoàn toàn xuất bản và cài đặt được như một dịch vụ Windows hoặc systemd; phương án D sai vì đây là ứng dụng .NET đa nền tảng, chạy được cả trên Linux và trong container.
A
TCPB
UDPC
HTTPD
FTPLời giải
Mở trang câu hỏi này →Đáp án đúng: B. UDP là giao thức phi kết nối ở tầng giao vận: nó gửi datagram đi mà không thiết lập kết nối trước, không đánh số thứ tự, không báo nhận và không truyền lại, nên nhanh và nhẹ nhưng không bảo đảm gói tin tới nơi hay tới đúng thứ tự. TCP (A) ngược lại, hướng kết nối với bắt tay ba bước, báo nhận và truyền lại nên bảo đảm tin cậy. HTTP (C) và FTP (D) là giao thức tầng ứng dụng và đều chạy trên nền TCP, do đó thừa hưởng tính tin cậy của TCP.
A
OnSubmit()B
OnPost()C
SubmitForm()D
Post()Lời giải
Mở trang câu hỏi này →Đáp án đúng: B. Razor Pages ánh xạ phương thức HTTP tới handler theo quy ước tên: OnGet cho GET, OnPost cho POST, kèm biến thể bất đồng bộ OnPostAsync và biến thể có tên như OnPostDeleteAsync khi dùng asp-page-handler. Vì biểu mẫu gửi lên bằng POST nên OnPost() là phương thức xử lý. Các tên OnSubmit() (A), SubmitForm() (C) và Post() (D) không nằm trong quy ước đặt tên handler của Razor Pages nên sẽ không bao giờ được framework gọi tới.
A
SingletonB
ScopedC
TransientD
IsolatedLời giải
Mở trang câu hỏi này →Đáp án đúng: C. Trong DI của ASP.NET Core có ba vòng đời. Transient tạo một thể hiện MỚI mỗi lần được yêu cầu, phù hợp với dịch vụ nhẹ, không giữ trạng thái. Scoped (B) tạo một thể hiện cho mỗi phạm vi, trong ứng dụng web là mỗi HTTP request - điển hình là DbContext. Singleton (A) chỉ tạo một thể hiện duy nhất dùng suốt vòng đời ứng dụng. "Isolated" (D) không phải một vòng đời trong hệ thống DI tích hợp sẵn của .NET.
public IActionResult Index() {
ViewBag.Message = "Hello from ViewBag!";
ViewData["Title"] = "My Page Title";
return View();
}// View
<p>@ViewBag.Message</p>
<h1>@ViewData["Title"]</h1>ATo store data persistently across multiple requests.
BTo pass data from a controller action to a view.
CTo manage user sessions.
DTo encrypt sensitive data.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: B. ViewBag và ViewData là hai cơ chế truyền dữ liệu MỘT CHIỀU từ action của controller sang view trong phạm vi cùng một request: ViewData là từ điển kiểu object nên phải ép kiểu khi dùng, còn ViewBag là lớp bọc dynamic quanh chính từ điển đó nên viết gọn hơn. Cả hai đều mất giá trị ngay khi request kết thúc, vì vậy phương án A sai - muốn giữ dữ liệu qua nhiều request phải dùng TempData hoặc Session. Quản lý phiên (C) là việc của Session; còn mã hoá dữ liệu (D) không liên quan gì tới hai cơ chế này.
AOnGet() only
BOnGetAsync() only
CCompilation error
DRuntime error
Lời giải
Mở trang câu hỏi này →Đáp án đúng: D. Khi chọn handler, Razor Pages bỏ hậu tố "Async" khỏi tên phương thức. Do đó OnGet và OnGetAsync cùng quy về một handler cho phương thức GET, và bộ chọn DefaultPageHandlerMethodSelector tìm thấy HAI ứng viên cùng khớp nên ném InvalidOperationException với thông báo nhiều handler cùng khớp. Đây là lỗi phát sinh LÚC CHẠY. Trình biên dịch không báo lỗi vì hai phương thức có tên khác nhau hoàn toàn hợp lệ trong C#, nên phương án C bị loại; và framework không tự ưu tiên bản đồng bộ hay bất đồng bộ, nên A và B đều sai.
AA unique identifier for a network interface.
BA network protocol.
CA type of network cable.
DA network security measure.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: A. Địa chỉ IP là một định danh duy nhất gán cho một giao diện mạng của thiết bị trong mạng dùng bộ giao thức TCP/IP, nhờ đó các gói tin biết được nơi gửi và nơi nhận. Một máy có nhiều card mạng sẽ có nhiều địa chỉ IP, đúng theo cách nói "định danh cho một giao diện mạng" chứ không phải cho cả máy. Phương án B nhầm sang khái niệm giao thức - tập quy tắc truyền dữ liệu như TCP hay UDP; phương án C mô tả phần cứng vật lý là dây cáp; phương án D nhầm sang các biện pháp bảo mật như tường lửa, đều không phải bản chất của địa chỉ IP.
<p>Number: @((int)ViewData["Number"])</p>
<p>Text: @ViewBag.Text</p>AViewBag is strongly typed, while ViewData is dynamically typed.
BViewData is strongly typed, while ViewBag is dynamically typed.
CBoth ViewBag and ViewData are strongly typed.
DBoth ViewBag and ViewData are dynamically typed.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: D. Cả ViewBag lẫn ViewData đều KHÔNG phải kiểu mạnh. ViewData là ViewDataDictionary, tức từ điển chuỗi - object, nên khi lấy ra phải ép kiểu như @((int)ViewData["Number"]) và lỗi ép kiểu chỉ lộ ra lúc chạy. ViewBag chỉ là lớp bọc dynamic quanh chính ViewData, nhờ dynamic mà viết @ViewBag.Text không cần ép kiểu nhưng cũng không được trình biên dịch kiểm tra. Vì vậy A, B và C đều sai khi gán nhãn "strongly typed" cho một trong hai. Muốn kiểu mạnh thì phải dùng view model với chỉ thị @model.
What is a multi-processor system?4 lựa chọn
AA system with a single CPU core.
BA system with multiple CPUs.
CA system with a single thread.
DA system with no network connection.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: B. Hệ đa bộ xử lý là hệ thống có từ hai CPU trở lên cùng chia sẻ bộ nhớ và hệ điều hành, nhờ đó nhiều luồng lệnh thực sự chạy đồng thời chứ không chỉ luân phiên chia thời gian. Đây là nền tảng phần cứng cho lập trình song song với Task Parallel Library hay Parallel.For trong .NET. Hệ một lõi CPU (A) chính là mono-processor; hệ chỉ có một luồng (C) nói về mô hình thực thi phần mềm chứ không phải cấu hình phần cứng; và việc có hay không kết nối mạng (D) hoàn toàn không liên quan tới số bộ xử lý.
AIncreased memory usage.
BReduced network bandwidth.
CSimplified debugging.
DData races and inconsistent results.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: D. Khi nhiều luồng cùng đọc và ghi lên một vùng dữ liệu chia sẻ mà không có cơ chế đồng bộ như lock, Monitor, Interlocked hay các bộ sưu tập concurrent, thì thứ tự thao tác trở nên bất định và sinh ra data race: kết quả sai lệch, thay đổi giữa các lần chạy và rất khó tái hiện khi gỡ lỗi. Đó là rủi ro nghiêm trọng nhất của lập trình song song. Tăng bộ nhớ (A) chỉ là chi phí phụ; giảm băng thông mạng (B) không liên quan; và gỡ lỗi trở nên KHÓ hơn chứ không đơn giản hơn nên C sai hẳn.
Đi tiếp từ đây
Kỳ khác cùng môn
Spring 2026Về lát
Thi lại · PRN222