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 3/3 — câu 41–50.
Danh sách câu hỏi
50/50 câuHết danh sách
41With AddTransient<IEmailService, EmailService>(), injecting into a controller twice will produce:4 lựa chọn
AThe same instance
BDifferent instances
CNull references
DRuntime error
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Different instances". Vòng đời Transient tạo thể hiện mới ở mỗi lần container giải quyết dịch vụ, nên nếu hàm khởi tạo của controller có hai tham số cùng kiểu IEmailService thì hai tham số nhận hai đối tượng EmailService khác nhau, so sánh tham chiếu sẽ ra false. "The same instance" sai vì chỉ Singleton, hoặc Scoped trong cùng một request, mới trả về cùng một đối tượng. "Null references" sai vì IEmailService đã được đăng ký nên container luôn tạo được, null chỉ xuất hiện khi gọi GetService với kiểu chưa đăng ký. "Runtime error" sai vì tiêm hai lần một dịch vụ Transient là hoàn toàn hợp lệ, lỗi lúc chạy chỉ xảy ra khi EmailService cần phụ thuộc chưa được đăng ký.
42Consider this C# code:4 lựa chọncó codeDễ100% trả lời đúng
services.AddScoped<IRepository, CustomerRepository>();In an ASP.NET Core web app, how often is CustomerRepository created?
AOnce per application
BOnce per request
COnce per controller
DEvery time it’s injected
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Once per request". AddScoped đăng ký vòng đời Scoped, ASP.NET Core tạo một scope cho mỗi request HTTP nên CustomerRepository được tạo một lần trong mỗi request, mọi controller và dịch vụ cùng request dùng chung nó, và nó được Dispose khi request kết thúc, rất hợp với repository dùng DbContext cũng Scoped. "Once per application" sai vì đó là Singleton đăng ký bằng AddSingleton. "Once per controller" sai vì DI không có vòng đời gắn với controller, thể hiện Scoped được chia sẻ giữa controller và mọi dịch vụ khác trong cùng request chứ không riêng cho controller. "Every time it’s injected" sai vì đó là hành vi của Transient đăng ký bằng AddTransient.
43What is the purpose of a port number in networking?4 lựa chọnDễ100% trả lời đúng
ATo identify a specific network.
BTo identify a specific application or service on a host.
CTo route network traffic.
DTo encrypt network data.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To identify a specific application or service on a host.". Số cổng (port) là số 16 bit từ 0 đến 65535 nằm trong header TCP hoặc UDP: địa chỉ IP đưa gói tin tới đúng máy, còn cổng đưa tới đúng tiến trình đang lắng nghe, như 80 cho HTTP, 443 cho HTTPS, 5432 cho PostgreSQL, cặp địa chỉ IP và cổng tạo thành một socket. "To identify a specific network." sai vì mạng được xác định bởi phần mạng của địa chỉ IP cùng subnet mask. "To route network traffic." sai vì định tuyến do router dựa trên địa chỉ IP đích và bảng định tuyến. "To encrypt network data." sai vì mã hoá do TLS đảm nhận, cổng 443 chỉ là quy ước dành cho HTTPS chứ con số cổng không tự mã hoá gì.
44What does the term "hostname" refer to?4 lựa chọnDễ
AA numerical IP address.
BA human-readable name for a network device.
CA network protocol.
DA network security certificate.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "A human-readable name for a network device.". Hostname là tên dễ đọc gán cho một máy trên mạng, như web01 hoặc tên đầy đủ mail.example.com, được DNS hoặc tệp hosts ánh xạ sang địa chỉ IP, trong .NET lấy được bằng Dns.GetHostName và phân giải bằng Dns.GetHostEntry. "A numerical IP address." sai vì địa chỉ IP dạng số là thứ mà hostname được phân giải thành, không phải bản thân hostname. "A network protocol." sai vì giao thức là tập quy tắc truyền thông như TCP hay HTTP, không phải tên máy. "A network security certificate." sai vì chứng chỉ TLS dạng X.509 chỉ chứa hostname trong trường tên để chứng minh danh tính máy chủ, bản thân chứng chỉ không phải hostname.
A
call()B
invoke()C
execute()D
run()Lời giải
Mở trang câu hỏi này →Đáp án đúng: "invoke()". Thư viện client JavaScript của SignalR cung cấp connection.invoke nhận tên phương thức hub và các đối số, trả về Promise được hoàn tất bằng giá trị mà phương thức hub trả về, bên cạnh đó send() chỉ gửi mà không chờ kết quả, client .NET dùng InvokeAsync tương ứng. "call()" sai vì đó là Function.prototype.call của JavaScript, chỉ gọi một hàm cục bộ với giá trị this tuỳ chọn chứ không gửi gì qua kết nối. "execute()" sai vì HubConnection không có phương thức nào tên như vậy, gọi vào sẽ báo lỗi is not a function. "run()" sai vì cũng không tồn tại trên HubConnection, còn chiều ngược lại khi máy chủ gọi xuống thì client đăng ký hàm nhận bằng connection.on.
46Which of the following is an example of an "Action Result" in ASP.NET Core MVC?4 lựa chọnDễ100% trả lời đúng
A
DbContextB
ViewResultC
ServiceCollectionD
TaskLời giải
Mở trang câu hỏi này →Đáp án đúng: "ViewResult". ViewResult kế thừa ActionResult và cài IActionResult, action trả về nó bằng phương thức View để framework tìm tệp .cshtml tương ứng và render HTML làm phản hồi, cùng họ với JsonResult hay RedirectResult. "DbContext" sai vì đó là lớp của EF Core đại diện phiên làm việc với cơ sở dữ liệu, không tạo phản hồi HTTP. "ServiceCollection" sai vì đó là triển khai của IServiceCollection, danh sách đăng ký dịch vụ cho DI lúc khởi động ứng dụng. "Task" sai vì Task chỉ đại diện cho một thao tác bất đồng bộ, action async khai báo trả về Task bọc IActionResult nhưng thứ quyết định phản hồi là kết quả bên trong, bản thân Task không phải action result.
47What is the purpose of configuring CORS (Cross-Origin Resource Sharing) when using SignalR?4 lựa chọn
ATo manage database connections.
BTo allow clients from different origins to connect to the SignalR hub.
CTo encrypt data.
DTo manage user sessions.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To allow clients from different origins to connect to the SignalR hub.". Trình duyệt áp chính sách cùng nguồn (same-origin policy): trang chạy ở origin khác, tức khác scheme, tên miền hoặc cổng, gọi tới hub sẽ bị chặn trừ khi máy chủ trả header CORS cho phép. Vì vậy cần AddCors với policy liệt kê WithOrigins, AllowAnyHeader, AllowCredentials (client SignalR gửi kèm credentials) rồi UseCors trước khi ánh xạ hub. "To manage database connections." sai vì CORS chỉ là luật về header HTTP giữa trình duyệt và máy chủ, không liên quan tới cơ sở dữ liệu. "To encrypt data." sai vì mã hoá do HTTPS/TLS đảm nhận, CORS không mã hoá gì. "To manage user sessions." sai vì phiên do xác thực và cookie quản lý, CORS chỉ quyết định origin nào được phép gọi tới.
A.cshtml
B.razor
C.aspx
D.html
Lời giải
Mở trang câu hỏi này →Đáp án đúng: ".razor". Component Blazor được viết trong tệp .razor, trộn markup HTML với C# theo cú pháp Razor, phần logic đặt trong khối @code, và mỗi tệp được biên dịch thành một lớp C# cùng tên kế thừa ComponentBase để dùng như thẻ trong component khác. ".cshtml" sai vì đó là đuôi của Razor view trong MVC và Razor Page, render ở máy chủ theo từng request chứ không phải component. ".aspx" sai vì đó là trang Web Forms của ASP.NET cổ điển trên .NET Framework, không có trong ASP.NET Core. ".html" sai vì HTML tĩnh không chứa C#, trong Blazor WebAssembly tệp index.html chỉ là trang vỏ để nạp ứng dụng.
49What is the purpose of the IServiceProvider interface?4 lựa chọnDễ100% trả lời đúng
ATo define database connections.
BTo resolve registered services from the DI container.
CTo define network protocols.
DTo define user interface elements.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To resolve registered services from the DI container.". IServiceProvider là giao diện của container DI với phương thức GetService nhận một Type, kèm các phương thức mở rộng như GetRequiredService, nó được tạo khi builder.Build dựng ứng dụng từ các đăng ký trong IServiceCollection, và CreateScope tạo phạm vi con để lấy dịch vụ Scoped. Gọi trực tiếp kiểu service locator nên hạn chế, ưu tiên tiêm qua hàm khởi tạo. "To define database connections." sai vì kết nối cơ sở dữ liệu nằm ở chuỗi kết nối và DbContext. "To define network protocols." sai vì giao thức mạng không do DI định nghĩa. "To define user interface elements." sai vì giao diện do view, Razor Page hoặc component dựng, IServiceProvider chỉ trả về đối tượng đã đăng ký.
50The PageModel in Razor Pages is best described as:4 lựa chọnDễ
AA combination of Controller and ViewModel
BA replacement for HTML
CAn Entity Framework class
DA database entity
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "A combination of Controller and ViewModel". PageModel chứa các handler OnGet, OnPost xử lý request giống action của controller, đồng thời chứa thuộc tính dữ liệu mà trang hiển thị và thuộc tính BindProperty nhận dữ liệu form giống một ViewModel, gom cả hai vai trò vào một lớp gắn với đúng một trang. "A replacement for HTML" sai vì markup HTML vẫn nằm trong tệp .cshtml, PageModel chỉ cung cấp dữ liệu và logic cho nó. "An Entity Framework class" sai vì PageModel thuộc Microsoft.AspNetCore.Mvc.RazorPages, không thuộc EF Core, nó chỉ có thể nhận DbContext qua tiêm phụ thuộc. "A database entity" sai vì entity là lớp ánh xạ tới một bảng trong cơ sở dữ liệu, PageModel không ánh xạ tới bảng nào.