Danh sách câu hỏi của đề

Câu hỏi: PRN222 Lập trình ứng dụng đa nền tảng nâng cao với .NET – Bộ ôn tập cuối kỳ số 3

50 câu trắc nghiệm kèm lời giải của 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, xếp đúng thứ tự trong đề. Trang 2/3 — câu 21–40.

Danh sách câu hỏi

40/50 câuCòn 10
21Which extension method is used to enable PLINQ on a data source?4 lựa chọnDễ100% trả lời đúng
AAsQueryable()
BAsEnumerable()
CAsParallel()
DParallelQuery()
Lời giải
Đáp án đúng: "AsParallel()". PLINQ (Parallel LINQ) được bật bằng phương thức mở rộng AsParallel trên một IEnumerable: nó trả về ParallelQuery, các toán tử Where, Select phía sau chia dữ liệu thành nhiều phân đoạn và chạy song song trên các lõi CPU, có thể thêm AsOrdered để giữ thứ tự hoặc AsSequential để quay về tuần tự. "AsQueryable()" sai vì nó đổi nguồn thành IQueryable để xây cây biểu thức cho nhà cung cấp như EF Core dịch sang SQL, không chạy song song. "AsEnumerable()" sai vì nó ép về IEnumerable để chạy LINQ to Objects tuần tự, thường dùng để kéo dữ liệu ra khỏi truy vấn phía cơ sở dữ liệu. "ParallelQuery()" sai vì ParallelQuery là tên lớp kết quả do AsParallel trả về, không phải phương thức mở rộng nên không gọi như vậy được.
Mở trang câu hỏi này →
AProgram.cs
BApp.cs
Cappsettings.json
DlaunchSettings.json
Lời giải
Đáp án đúng: "Program.cs". Mẫu Worker Service khởi tạo host trong Program.cs: gọi Host.CreateApplicationBuilder với args, đăng ký lớp Worker bằng builder.Services.AddHostedService, rồi Build và Run, mọi đăng ký dịch vụ và cấu hình logging cũng đặt tại đây. "App.cs" sai vì mẫu worker không có tệp này, nó không đóng vai trò gì trong khởi động host. "appsettings.json" sai vì tệp này chỉ chứa giá trị cấu hình như chuỗi kết nối, chu kỳ chạy hay mức log để worker đọc qua IConfiguration, không đăng ký hay khởi tạo dịch vụ. "launchSettings.json" sai vì tệp này chỉ dùng khi chạy từ Visual Studio hoặc dotnet run trong môi trường phát triển để đặt hồ sơ chạy và biến môi trường, không đi theo bản triển khai.
Mở trang câu hỏi này →
23Given the code:4 lựa chọncó codeDễ
Đề bài
builder.Services.AddScoped<IOrderService, OrderService>();

How will OrderService behave?

ASame instance for the entire application
BNew instance for each HTTP request
CNew instance every time injected
DThread-local instance
Lời giải
Đáp án đúng: "New instance for each HTTP request". AddScoped tạo một thể hiện cho mỗi scope, và ASP.NET Core mở một scope cho từng request HTTP, nên mọi chỗ tiêm IOrderService trong cùng request (controller, dịch vụ khác) dùng chung một OrderService, request sau nhận thể hiện mới và thể hiện cũ được Dispose khi request kết thúc. "Same instance for the entire application" sai vì đó là vòng đời Singleton đăng ký bằng AddSingleton. "New instance every time injected" sai vì đó là Transient đăng ký bằng AddTransient. "Thread-local instance" sai vì DI của .NET không có vòng đời gắn với luồng, một request bất đồng bộ có thể chuyển qua nhiều luồng giữa các lần await mà vẫn nằm trong cùng một scope.
Mở trang câu hỏi này →
ATo manage database connections.
BTo allow sending messages from outside a hub class.
CTo encrypt data.
DTo manage user sessions.
Lời giải
Đáp án đúng: "To allow sending messages from outside a hub class.". IHubContext gắn với kiểu hub cụ thể được tiêm vào controller, dịch vụ nền hay PageModel để gọi Clients.All.SendAsync hoặc gửi tới nhóm, người dùng cụ thể, nhờ vậy máy chủ đẩy thông báo khi có sự kiện mà không cần client gọi vào hub. Bản thân lớp Hub chỉ sống trong lúc xử lý một lời gọi nên không dùng được từ bên ngoài. "To manage database connections." sai vì IHubContext không chạm tới cơ sở dữ liệu, kết nối đó do DbContext quản lý. "To encrypt data." sai vì mã hoá do HTTPS/TLS của kết nối WebSocket đảm nhận. "To manage user sessions." sai vì IHubContext không có thông tin người gọi như Context.ConnectionId và không quản lý phiên, nó chỉ là cửa để gửi tin.
Mở trang câu hỏi này →
AUsing database queries.
BBy setting properties on the PageModel.
CUsing JavaScript only.
DUsing static HTML attributes.
Lời giải
Đáp án đúng: "By setting properties on the PageModel.". Trong Razor Pages, trang .cshtml khai báo @model trỏ tới lớp PageModel, handler như OnGet gán giá trị cho các thuộc tính public (ví dụ danh sách sản phẩm), rồi trang đọc lại qua Model và tên thuộc tính khi render, còn thuộc tính đánh dấu BindProperty nhận dữ liệu form theo chiều ngược lại. "Using database queries." sai vì truy vấn chỉ để lấy dữ liệu, kết quả vẫn phải gán vào thuộc tính của PageModel mới tới được trang, trang không nên tự truy vấn. "Using JavaScript only." sai vì Razor Pages render ở máy chủ, dữ liệu đi qua mô hình C#, JavaScript chỉ là tuỳ chọn ở trình duyệt. "Using static HTML attributes." sai vì thuộc tính HTML tĩnh viết cứng trong markup, không mang được dữ liệu động mà handler tính ra.
Mở trang câu hỏi này →
26Consider this C# code:4 lựa chọncó code
Đề bài
public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

What will this hub method do?

ASend a message only to the calling client.
BSend a message to all connected clients.
CSend a message only to a specific group.
DSave the message in the database automatically.
Lời giải
Đáp án đúng: "Send a message to all connected clients.". Khi một client gọi SendMessage với user và message, Clients.All chọn mọi kết nối đang mở tới ChatHub, kể cả chính người gọi, rồi SendAsync yêu cầu từng client chạy phương thức ReceiveMessage đã đăng ký phía client với hai đối số đó, await chờ việc gửi đi xong. "Send a message only to the calling client." sai vì muốn chỉ trả về người gọi phải dùng Clients.Caller. "Send a message only to a specific group." sai vì gửi theo nhóm phải dùng Clients.Group kèm tên nhóm, sau khi đã thêm kết nối vào nhóm bằng Groups.AddToGroupAsync. "Save the message in the database automatically." sai vì SignalR chỉ chuyển tin theo thời gian thực, không lưu gì, muốn lưu phải tự gọi DbContext trong phương thức hub.
Mở trang câu hỏi này →
AStores data permanently in the database
BPersists data only for a single request
CWorks like cookies
DMust be strongly typed
Lời giải
Đáp án đúng: "Persists data only for a single request". TempData (TempDataDictionary) giữ dữ liệu sống qua đúng một lần chuyển request, điển hình là mẫu Post-Redirect-Get: action POST gán thông báo rồi redirect, request GET kế tiếp đọc và hiển thị nó một lần, sau đó giá trị bị đánh dấu xoá. Tài liệu API ASP.NET Core mô tả nó là dữ liệu chỉ tồn tại từ request này sang request kế tiếp. Nói chặt thì câu chữ này chưa thật chính xác, vì TempData sống tới khi được đọc ở request sau (Keep hoặc Peek còn giữ lại lâu hơn) chứ không chỉ gói trong một request, nhưng nó vẫn là phát biểu đúng bản chất ngắn hạn, dùng một lần của TempData. "Stores data permanently in the database" sai vì TempData mặc định lưu trong cookie hoặc session, không bao giờ lưu vĩnh viễn. "Works like cookies" chỉ đúng về nơi lưu mặc định (CookieTempDataProvider), không mô tả bản chất: cookie sống tới khi hết hạn, còn TempData bị xoá ngay sau khi đọc. "Must be strongly typed" sai vì TempData là từ điển khoá chuỗi giá trị object, không bắt buộc kiểu mạnh.
Mở trang câu hỏi này →
ABy writing JavaScript functions.
BBy using appsettings.json and dependency injection.
CBy using static HTML files.
DBy using database queries.
Lời giải
Đáp án đúng: "By using appsettings.json and dependency injection.". Generic Host của worker nạp cấu hình từ appsettings.json, tệp appsettings theo môi trường, biến môi trường và đối số dòng lệnh vào IConfiguration, worker nhận IConfiguration hoặc IOptions của một lớp cấu hình qua hàm khởi tạo theo mẫu Options (đăng ký bằng services.Configure), nên giá trị đổi được mà không sửa mã. "By writing JavaScript functions." sai vì worker là tiến trình .NET, không chạy JavaScript. "By using static HTML files." sai vì HTML dùng cho giao diện, worker không có giao diện nào để hiển thị. "By using database queries." sai vì có thể viết nhà cung cấp cấu hình tuỳ biến đọc từ cơ sở dữ liệu nhưng đó không phải cách chuẩn, và chuỗi kết nối tới cơ sở dữ liệu vẫn phải có trong cấu hình từ trước.
Mở trang câu hỏi này →
Awww.example.com.vn
Bmyaccount@gmail.com
C192.168.1.1
DHTTP/1.1
Lời giải
Đáp án đúng: "192.168.1.1". Địa chỉ IPv4 dài 32 bit, viết thành bốn số thập phân từ 0 đến 255 ngăn cách bởi dấu chấm, 192.168.1.1 đúng khuôn đó và thuộc dải địa chỉ riêng 192.168.0.0/16, thường gặp làm địa chỉ của router trong mạng gia đình. "www.example.com.vn" sai vì đó là tên miền, phải nhờ DNS phân giải mới ra địa chỉ IP. "myaccount@gmail.com" sai vì đó là địa chỉ email gồm tên hộp thư và tên miền máy chủ thư, không phải địa chỉ của một máy trên mạng. "HTTP/1.1" sai vì đó là tên và phiên bản của giao thức HTTP, xuất hiện ở dòng đầu của request và response, không định danh máy nào.
Mở trang câu hỏi này →
A.razor
B.cshtml
C.html
D.blazor
Lời giải
Đáp án đúng: ".razor". Component Blazor là tệp .razor kết hợp markup HTML với C# theo cú pháp Razor, logic đặt trong khối @code, khi biên dịch mỗi tệp sinh ra một lớp C# cùng tên kế thừa ComponentBase, dùng lại được như một thẻ trong component khác. ".cshtml" sai vì đó là Razor view hoặc Razor Page của MVC và Razor Pages, render ở máy chủ theo từng request chứ không phải component tương tác. ".html" sai vì HTML tĩnh không chứa C#, như wwwroot/index.html của Blazor WebAssembly chỉ là trang vỏ nạp ứng dụng. ".blazor" sai vì không tồn tại đuôi tệp này, trình biên dịch Razor chỉ nhận .razor cho component.
Mở trang câu hỏi này →
31Which method stops a hosted service?4 lựa chọn
AStopAsync()
BEndAsync()
CseAsync()
DShutdownAsync()
Lời giải
Đáp án đúng: "StopAsync()". Giao diện IHostedService chỉ có hai phương thức: StartAsync được host gọi khi ứng dụng khởi động, và StopAsync(CancellationToken) được gọi khi host tắt một cách êm (graceful shutdown) để dịch vụ dừng công việc và dọn tài nguyên; với BackgroundService, StopAsync báo huỷ stoppingToken rồi chờ ExecuteAsync kết thúc. "EndAsync()" sai vì không có phương thức này trong IHostedService hay BackgroundService. "seAsync()" là một tên in cụt, không phải phương thức nào của IHostedService; giao diện này không có thành viên nào khác ngoài StartAsync và StopAsync, nên nó không thể là cách dừng dịch vụ. "ShutdownAsync()" sai vì tên nghe giống việc tắt nhưng không thuộc giao diện; ở cấp ứng dụng muốn yêu cầu tắt host thì gọi StopApplication của IHostApplicationLifetime, sau đó host mới gọi StopAsync của từng hosted service.
Mở trang câu hỏi này →
AUsing app.MapControllerRoute().
BUsing services.AddHostedService<YourWorker>().
CUsing app.UseStaticFiles().
DUsing services.AddDbContext<YourDbContext>().
Lời giải

Đáp án đúng: "Using

Lời giải
services.AddHostedService<YourWorker>().". AddHostedService

đăng ký lớp worker, thường kế thừa BackgroundService, như một IHostedService dạng Singleton, khi host khởi động nó gọi StartAsync và chạy ExecuteAsync của worker cho tới khi ứng dụng dừng. "Using app.MapControllerRoute()." sai vì phương thức này ánh xạ route quy ước cho controller MVC trong pipeline HTTP. "Using app.UseStaticFiles()." sai vì đó là middleware phục vụ tệp tĩnh từ thư mục wwwroot. "Using services.AddDbContext<YourDbContext>()." sai vì nó đăng ký DbContext của EF Core với vòng đời Scoped, không chạy gì nền, và worker muốn dùng DbContext còn phải tự tạo scope qua IServiceScopeFactory.

Mở trang câu hỏi này →
ATo return a view.
BTo return a file download.
CTo return data in JSON format.
DTo redirect to another action.
Lời giải
Đáp án đúng: "To return data in JSON format.". JsonResult, thường tạo bằng phương thức Json trong controller, tuần tự hoá đối tượng bằng System.Text.Json và đặt Content-Type là application/json, phù hợp cho API hoặc lời gọi AJAX từ trình duyệt. "To return a view." sai vì trả về giao diện là việc của ViewResult tạo bằng phương thức View. "To return a file download." sai vì tải tệp dùng FileResult và các lớp con như FileContentResult, PhysicalFileResult tạo bằng phương thức File. "To redirect to another action." sai vì chuyển hướng dùng RedirectToActionResult tạo bằng RedirectToAction, phản hồi là mã 302 kèm header Location chứ không phải nội dung JSON.
Mở trang câu hỏi này →
34What is the purpose of the @code block in a Blazor component?4 lựa chọnDễ75% trả lời đúng
ATo define CSS styles.
BTo write JavaScript code.
CTo write C# logic.
DTo define HTML structure.
Lời giải
Đáp án đúng: "To write C# logic.". Khối @code trong tệp .razor chứa mã C# của component: trường, thuộc tính có attribute Parameter, phương thức xử lý sự kiện và các phương thức vòng đời như OnInitializedAsync, tất cả trở thành thành viên của lớp component được sinh ra khi biên dịch. "To define CSS styles." sai vì CSS đặt trong thẻ style, tệp .css hoặc tệp CSS cô lập (CSS isolation) đi kèm component dạng .razor.css. "To write JavaScript code." sai vì JavaScript nằm trong tệp riêng và được gọi qua IJSRuntime theo cơ chế JS interop. "To define HTML structure." sai vì markup HTML của component viết ở phần thân tệp, bên ngoài khối @code.
Mở trang câu hỏi này →
35What is the Parallel.ForEach method used for?4 lựa chọnDễ100% trả lời đúng
AIterating over a collection in parallel.
BAsynchronous network operations.
CManaging system resources.
DEncrypting data.
Lời giải
Đáp án đúng: "Iterating over a collection in parallel.". Parallel.ForEach thuộc Task Parallel Library: nó chia các phần tử của một IEnumerable thành nhiều phân vùng và chạy thân vòng lặp đồng thời trên các luồng của thread pool, hợp với công việc nặng CPU mà các phần tử độc lập với nhau, thứ tự xử lý không được bảo đảm và lời gọi chỉ trả về khi mọi phần tử đã xong. "Asynchronous network operations." sai vì thao tác mạng nên dùng async/await (hoặc Parallel.ForEachAsync từ .NET 6), Parallel.ForEach là đồng bộ và giữ luồng trong lúc chờ. "Managing system resources." sai vì nó không quản lý tài nguyên hệ thống, chỉ phân việc cho các luồng. "Encrypting data." sai vì mã hoá thuộc System.Security.Cryptography, không phải mục đích của vòng lặp song song.
Mở trang câu hỏi này →
36What is a primary benefit of ASP.NET Core Blazor?4 lựa chọnDễ100% trả lời đúng
AReduced code reusability.
BAbility to write client-side logic in C#.
CIncreased reliance on JavaScript.
DLimited cross-platform support.
Lời giải
Đáp án đúng: "Ability to write client-side logic in C#.". Blazor cho phép viết giao diện tương tác bằng C# và Razor thay vì JavaScript: mã chạy ngay trong trình duyệt qua WebAssembly hoặc chạy ở máy chủ và đồng bộ giao diện qua SignalR, nên client và server dùng chung model, quy tắc kiểm tra hợp lệ và thư viện .NET. "Reduced code reusability." sai vì ngược lại, component và thư viện lớp C# dùng lại được giữa nhiều trang và cả phía máy chủ. "Increased reliance on JavaScript." sai vì Blazor giảm phụ thuộc JavaScript, JS interop chỉ dùng khi cần API riêng của trình duyệt. "Limited cross-platform support." sai vì Blazor chạy trên mọi trình duyệt hiện đại hỗ trợ WebAssembly, phía máy chủ chạy được trên Windows, Linux và macOS.
Mở trang câu hỏi này →
37What is the Parallel.For method used for?4 lựa chọnTrung bình
AAsynchronous file operations.
BExecuting a loop in parallel.
CHandling network requests.
DCreating user interfaces.
Lời giải
Đáp án đúng: "Executing a loop in parallel.". Parallel.For nhận chỉ số đầu, chỉ số cuối và thân vòng lặp, rồi chia dải chỉ số cho nhiều luồng của thread pool chạy cùng lúc, mỗi lần lặp nhận một giá trị i, hợp với tính toán độc lập như xử lý từng hàng của ma trận, có thể dừng sớm qua ParallelLoopState. "Asynchronous file operations." sai vì đọc ghi tệp bất đồng bộ dùng các phương thức như File.ReadAllTextAsync hoặc FileStream kèm await, không phải vòng lặp song song. "Handling network requests." sai vì request mạng được xử lý bởi HttpClient với async/await hoặc pipeline của ASP.NET Core. "Creating user interfaces." sai vì giao diện do WPF, MAUI hay Blazor dựng, và phần tử giao diện chỉ được cập nhật từ luồng UI nên không thể rải ra nhiều luồng bằng Parallel.For.
Mở trang câu hỏi này →
Đề bài
public class RegisterModel
{
    [???]
    public string Email { get; set; }
}
A[Url]
B[StringLength(50)]
C[EmailAddress]
D[Required]
Lời giải
Đáp án đúng: "[EmailAddress]". EmailAddressAttribute trong System.ComponentModel.DataAnnotations kiểm tra giá trị chuỗi có dạng địa chỉ email, khi model binding chạy, lỗi được ghi vào ModelState và tag helper còn sinh thuộc tính kiểm tra phía client cho trường Email. "[Url]" sai vì attribute này kiểm tra chuỗi là URL tuyệt đối bắt đầu bằng http, https hoặc ftp, không phải email. "[StringLength(50)]" sai vì nó chỉ giới hạn độ dài tối đa 50 ký tự, chuỗi bất kỳ ngắn hơn đều qua dù không phải email. "[Required]" sai vì nó chỉ bắt buộc trường có giá trị khác rỗng, không kiểm tra định dạng, nên thường được đặt cùng EmailAddress chứ không thay thế được nó.
Mở trang câu hỏi này →
39Which scenarios are most suitable for Worker Services?4 lựa chọnDễ100% trả lời đúng
AProcessing queue messages
BRunning Blazor UI
CDisplaying Razor Pages
DHosting REST APIs only
Lời giải
Đáp án đúng: "Processing queue messages". Worker Service chạy nền liên tục và không có giao diện, nên hợp nhất với việc lắng nghe một hàng đợi như Azure Service Bus hay RabbitMQ, lấy từng thông điệp ra xử lý, cùng các công việc định kỳ như dọn dữ liệu hay đồng bộ hệ thống. "Running Blazor UI" sai vì Blazor cần một ứng dụng web ASP.NET Core để render component và phục vụ trình duyệt. "Displaying Razor Pages" sai vì Razor Pages cần pipeline HTTP và máy chủ web của ASP.NET Core để trả HTML cho người dùng. "Hosting REST APIs only" sai vì API REST cần Kestrel và endpoint routing của dự án ASP.NET Core Web API, còn mẫu worker mặc định không mở máy chủ HTTP nào.
Mở trang câu hỏi này →
ATo store data for the duration of a single HTTP request.
BTo store data persistently across multiple requests.
CTo store data for a short period between two consecutive HTTP requests.
DTo manage user sessions.
Lời giải
Đáp án đúng: "To store data for a short period between two consecutive HTTP requests.". TempData dùng để chuyển dữ liệu ngắn hạn từ request này sang request kế tiếp, điển hình là thông báo sau khi lưu form: action POST gán TempData rồi redirect, request GET sau đọc ra hiển thị và giá trị bị xoá sau khi đọc (trừ khi gọi Keep hoặc Peek). "To store data for the duration of a single HTTP request." sai vì dữ liệu chỉ sống trong một request là ViewData, ViewBag hay HttpContext.Items, chúng mất khi request kết thúc nên không qua được redirect. "To store data persistently across multiple requests." sai vì lưu bền qua nhiều request cần session, cookie hoặc cơ sở dữ liệu, TempData bị xoá ngay khi đã đọc. "To manage user sessions." sai vì phiên do middleware Session và ISession quản lý, TempData có thể chọn session làm nơi lưu nhưng không quản lý phiên.
Mở trang câu hỏi này →