Ngân hàng câu hỏi môn Advanced Cross-Platform Application Programming With .NET - Lập trình ứng dụng đa nền tảng nâng cao với .NET

PRN222 - Lập trình ứng dụng đa nền tảng nâng cao với .NET là môn học xây dựng ứng dụng web đa nền tảng bằng C# 12 và .NET 8 với ASP.NET Core. Ngân hàng câu hỏi trắc nghiệm PRN222 có đáp án bao quát trọn bộ chương trình: lập trình mạng trong .NET (địa chỉ IP, hostname, DNS, URI, giao thức mạng, TCP và UDP, TcpListener, TcpClient, Socket, AcceptSocketAsync, lớp Stream, HttpClient và GetAsync), lập trình bất đồng bộ và song song (async/await, Task, Task.Wait, Task.WhenAll, System.Threading.Tasks, Parallel.ForEach, Task Parallel Library, PLINQ và AsParallel, tác vụ I/O-bound và CPU-bound), Dependency Injection cùng Inversion of Control và nguyên lý SOLID (AddScoped, AddTransient, AddSingleton, vòng đời service, constructor injection, property injection, IServiceProvider, Dependency Inversion, Open Closed), ASP.NET Core MVC (controller, action, IActionResult, ViewResult, HttpPost, Bind, Compare, directive @model, cú pháp Razor, ViewData và ViewBag, PartialView, thư mục wwwroot, model binding, model validation với ModelState), Razor Pages (file .cshtml, thư mục Pages, PageModel, handler OnGet và OnPost, AddRazorPages, BindProperty, _Layout.cshtml, TempData, Session, Cookies, tiêm phụ thuộc vào PageModel, kiểm tra dữ liệu phía client bằng jQuery Unobtrusive Validation), Blazor (Blazor Server và Blazor WebAssembly, hai chế độ render, component, App.razor, directive @page, @bind, @inject, khối @code, thuộc tính Parameter, C# Everywhere), giao tiếp thời gian thực với SignalR (lớp Hub, IHubContext, Clients, Groups.AddToGroupAsync, Hub filters, MessagePack, tự động kết nối lại, namespace Microsoft.AspNetCore.SignalR, AddSignalR, Context, User) và Worker Service cùng BackgroundService (IHostedService, Microsoft.Extensions.Hosting, ExecuteAsync, StartAsync, StopAsync, CancellationToken, appsettings.json, tác vụ nền, xử lý hàng đợi), kèm Entity Framework Core và DbContext. Tài liệu ôn thi FE dành cho sinh viên FPT University.

Học từ ngân hàng câu hỏi

Bắt đầu một phiên học theo môn

Tiến độ của bạn sẽ luôn được tính toán và đồng bộ trực tiếp theo tổng số lượng câu hỏi mới nhất của môn học này.

175Ngân hàng hiện tại
--Tiến độ môn
Số câu hỏi
Độ khó
Phiên sắp tạo
175 câu Chế độ học Không giới hạn Trộn

Bạn cần đăng nhập để bắt đầu học từ ngân hàng câu hỏi và lưu tiến độ theo môn.

0Dễ · --
0Trung bình · --
0Khó · --
--Đã học
--Đang nắm chắc
Đăng nhập để xemLần hoàn tất gần nhất

Đang tải phân bố độ khó.

Đăng nhập để bắt đầu học từ ngân hàng câu hỏi, lưu tiến độ theo môn, resume phiên đang dở và cập nhật thống kê dài hạn.
Đang hiển thị 15 / 175 câu hỏi
Bấm vào từng câu để xem đáp án
#001
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA system with a single CPU core.
A system with multiple CPUs.ĐÚNG
CA system with a single thread.
DA system with no network connection.
Giải thích

Đá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ý.

#002
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIncreased memory usage.
BReduced network bandwidth.
CSimplified debugging.
Data races and inconsistent results.ĐÚNG
Giải thích

Đá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.

#003
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
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.
Both ViewBag and ViewData are dynamically typed.ĐÚNG
Giải thích

Đá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.

#004
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AEvent-based Asynchronous Pattern (EAP)
BAsynchronous Programming Model (APM)
Task-based Asynchronous Pattern (TAP)ĐÚNG
DDelegate pattern
Giải thích

Đá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.

#005
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AOn the server.
In the browser using WebAssembly.ĐÚNG
CIn a separate desktop application.
DOn a mobile device.
Giải thích

Đáp án đúng: B. Trong Blazor WebAssembly, thời gian chạy .NET được biên dịch sang WebAssembly và tải về trình duyệt, nên toàn bộ mã C# thực thi NGAY TRONG TRÌNH DUYỆT ở phía máy khách. Nhờ vậy ứng dụng chạy được cả khi ngoại tuyến và không tốn kết nối thường trực tới máy chủ, đổi lại tải về ban đầu lớn hơn và mã có thể bị xem xét từ phía người dùng. Chạy trên máy chủ (A) là mô hình Blazor Server; C và D mô tả những môi trường thực thi không đúng với Blazor WebAssembly.

#006
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo create tightly coupled classes.
To depend on abstractions, not concretions.ĐÚNG
CTo create large, monolithic classes.
DTo avoid using interfaces.
Giải thích

Đá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.

#007
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ASingle Responsibility Principle
BOpen/Closed Principle
Dependency Inversion PrincipleĐÚNG
DInterface Segregation Principle
Giải thích

Đá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).

#008
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
StopAsync()ĐÚNG
BEndAsync()
CseAsync()
DShutdownAsync()
Giải thích

Đá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ụ.

#009
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA system with multiple CPUs.
A system with a single CPU.ĐÚNG
CA system with multiple cores.
DA distributed system.
Giải thích

Đá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.

#010
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt stores data in memory only.
It stores data in session state or cookies, depending on configuration.ĐÚNG
CIt stores data in the database.
DIt stores data in the file system.
Giải thích

Đá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.

#011
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIn the browser using WebAssembly.
On the server.ĐÚNG
CIn a separate desktop application.
DOn a mobile device.
Giải thích

Đáp án đúng: B. Trong Blazor Server, toàn bộ mã C# và cây component chạy TRÊN MÁY CHỦ. Trình duyệt chỉ giữ một kết nối SignalR thường trực, gửi sự kiện người dùng lên máy chủ và nhận về phần chênh lệch của DOM để cập nhật giao diện. Nhờ vậy tải tải về ban đầu rất nhẹ và mã nguồn không lộ ra máy khách, nhưng ứng dụng phụ thuộc vào độ trễ mạng và không chạy được khi mất kết nối. Chạy trong trình duyệt bằng WebAssembly (A) là mô hình của Blazor WebAssembly; C và D mô tả những môi trường không liên quan.

#012
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AUsing JavaScript only.
Using data annotations on the PageModel and validation tag helpers.ĐÚNG
CUsing database triggers.
DUsing static HTML validation attributes.
Giải thích

Đáp án đúng: B. Cách kiểm tra dữ liệu chuẩn trong Razor Pages là gắn data annotation lên thuộc tính của PageModel ([Required], [StringLength], [Range], [EmailAddress]...), rồi trong .cshtml dùng các tag helper asp-validation-for và asp-validation-summary để hiển thị lỗi; phía handler kiểm tra ModelState.IsValid trước khi xử lý. Cơ chế này chạy cả phía máy chủ lẫn phía trình duyệt. Chỉ dùng JavaScript (A) là không an toàn vì người dùng có thể bỏ qua; trigger cơ sở dữ liệu (C) quá muộn và sai tầng; thuộc tính HTML tĩnh (D) chỉ là lớp hỗ trợ, không thay được kiểm tra phía máy chủ.

#013
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy writing JavaScript code.
By installing NuGet packages and configuring the DbContext.ĐÚNG
CBy using static HTML files.
DBy using a database management system.
Giải thích

Đá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.

#014
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AProgram.cs
BRoutes.razor
App.razorĐÚNG
DStartup.cs
Giải thích

Đá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.

#015
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Worker Service integrates better with .NET features like DI and LoggingĐÚNG
BWorker Service is UI-based
CWorker Service cannot be published
DWorker Service only runs on Windows
Giải thích

Đá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.

Cuộn để tải thêm…