Qiz HUB Logo
QizHUB
QUESTION LIBRARY

Trang chủ
Môn học
Chủ đề
Đề thi
Câu hỏi
Thẻ

Đăng nhập
Qiz HUB Logo
QizHUB
QUESTION LIBRARY PLATFORM
Trang chủMôn họcChủ đềNhóm họcThẻ
Luyện đề ngayĐăng nhập
PrivacyTermsCookieAdsads.txtrobotssitemap
Trang chủMôn họcPRN232 - Xây dựng ứng dụng back-end đa nền tảng với .NETĐề ôn tập PRN232 - 49 câu tổng hợp có đáp án
Đề thi trắc nghiệm

Đề ôn tập PRN232 - 49 câu tổng hợp có đáp án

49Câu hỏi
PRN232 - Xây dựng ứng dụng back-end đa nền tảng với .NETMôn học

01Chọn hình thức làm bài

02Số câu hỏi

03Thời gian làm bài(chỉ áp dụng cho thi thử)

04Tuỳ chọn

Trộn thứ tự câu hỏi

Xáo trộn câu để tránh học vẹt.

Trộn thứ tự đáp án

Xáo trộn vị trí A B C D ở từng câu.

Tổng quan lượt làm

Hình thức
Chế độ học
Số câu
49 câu
Thời gian
Không giới hạn
Bạn cần đăng nhập để làm bài, lưu tiến độ và tiếp tục lần học trước.

Vui lòng đăng nhập để bắt đầu làm bài.

Tổng câu hỏi

49

Thời gian làm bài

Không giới hạn

Lượt xem

1

Câu có lời giải

47

Câu có link chi tiết

49

Xem trước 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
ACsvFormatter
BTextOutputFormatter
TextInputFormatterĐÚNG
DOutputFormatter
Giải thích

Để tạo một trình định dạng đầu vào tùy chỉnh cho loại phương tiện text/csv, bạn cần kế thừa từ lớp cơ sở nào?

#002
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
GET /Products?$filter=endswith(Name, 'Edition')ĐÚNG
BGET /Products?$filter=Name.endsWith('Edition')
CGET /Products?$filter=last(Name) eq 'Edition'
DGET /Products?$filter=Name like '%Edition'
Giải thích

Để tìm kiếm tất cả các sản phẩm có tên kết thúc bằng chuỗi 'Edition', chúng ta cần sử dụng hàm 'endswith' trong truy vấn OData. Hàm này giúp chúng ta kiểm tra xem chuỗi nào kết thúc bằng chuỗi khác. Trong trường hợp này, chúng ta muốn tìm kiếm các sản phẩm có tên kết thúc bằng 'Edition'.

#003
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo provide a database management interface.
To describe the capabilities of your API and provide interactive documentation.ĐÚNG
CTo automatically handle user authentication and authorization.
DTo monitor the performance of the API in real-time.
Giải thích

Swagger (OpenAPI) là một công cụ quan trọng trong việc xây dựng và quản lý API. Mục đích chính của Swagger là mô tả khả năng của API và cung cấp tài liệu interact được. Điều này giúp cho các nhà phát triển và người dùng dễ dàng hiểu được cách sử dụng API, bao gồm các phương thức HTTP, tham số, phản hồi và các thông tin khác. Swagger cũng cho phép tạo ra tài liệu API tự động, giúp giảm thiểu thời gian và công sức trong việc tạo và duy trì tài liệu. Ngoài ra, Swagger còn hỗ trợ các tính năng như tạo mẫu mã, thử nghiệm API và phân tích hiệu suất, giúp cho việc phát triển và quản lý API trở nên dễ dàng hơn.

#004
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A[Email]
B[IsEmail]
[EmailAddress]ĐÚNG
D[RegularExpression(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$")]
Giải thích

Để xác định một thuộc tính là một địa chỉ email hợp lệ, bạn cần sử dụng thuộc tính [EmailAddress]. Đây là thuộc tính được sử dụng để xác minh rằng giá trị nhập vào có đúng định dạng email. Ví dụ, khi bạn nhập vào địa chỉ email như '[email protected]', thuộc tính [EmailAddress] sẽ xác nhận rằng nó có đúng định dạng và không có lỗi. Ngoài ra, bạn cũng có thể sử dụng thuộc tính [IsEmail] để thực hiện chức năng tương tự, nhưng [EmailAddress] là lựa chọn phổ biến hơn và được sử dụng rộng rãi trong các ứng dụng.

#005
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
$("a[target='_blank']")ĐÚNG
B$("a.target._blank")
C$("a where target is _blank")
D$("a{target:'_blank'}")
Giải thích

Để chọn tất cả các thẻ <a> có thuộc tính target bằng '_blank', bạn cần sử dụng selector đúng. Selector là một phần của CSS hoặc jQuery dùng để chọn phần tử HTML. Trong trường hợp này, bạn cần sử dụng selector có dạng 'a[target='_blank']'. Điều này sẽ chọn tất cả các thẻ <a> có thuộc tính target bằng '_blank'.

#006
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A"What can you do?"
"Who are you?"ĐÚNG
C"How long can you stay?"
D"Where are you from?"
Giải thích

Authentication là quá trình xác thực danh tính của một người dùng. Nó giúp xác định xem người dùng đó có phải là người thực sự hay không. Trong các câu hỏi được liệt kê, câu hỏi "Who are you?" (Ai bạn là?) là một câu hỏi phù hợp để xác thực danh tính của người dùng. Câu hỏi này giúp xác định xem người dùng có phải là người thực sự hay không, và có thể được sử dụng để xác thực thông tin đăng nhập của người dùng.

#007
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt can only accept JSON.
It prefers XML (q=1.0) over JSON (q=0.9).ĐÚNG
CIt can only accept XML.
DIt wants the response to be split between JSON and XML.
Giải thích

Khi một khách hàng gửi một tiêu đề Accept với giá trị application/json; q=0.9, application/xml; q=1.0, điều đó có nghĩa là khách hàng muốn nhận được phản hồi trong hai định dạng: JSON và XML. Giá trị q được sử dụng để chỉ định mức độ ưu tiên của mỗi định dạng. Trong trường hợp này, giá trị q=1.0 cho XML cao hơn giá trị q=0.9 cho JSON, điều đó có nghĩa là khách hàng muốn nhận được phản hồi trong định dạng XML nếu có thể, nhưng nếu không thể, họ cũng chấp nhận nhận được phản hồi trong định dạng JSON. Điều này cho thấy khách hàng có thể chấp nhận cả hai định dạng, nhưng có ưu tiên cho XML.

#008
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A[Expose]
B[WebMethod]
[OperationContract]ĐÚNG
D[ServiceMethod]
#009
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Yes, because the user has one of the required roles.ĐÚNG
BNo, because the user must have both the "Editor" and "Admin" roles.
CYes, because the comma indicates an OR relationship.
DIt depends on which role was assigned first.
Giải thích

Khi một người dùng có nhiều vai trò, chẳng hạn như "Biên tập viên" và "Tác giả", và một hành động được trang trí với [Authorize(Roles = "Biên tập viên,Admin")]. Người dùng có được truy cập không?

#010
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt scans the entire assembly for public classes.
Through the DbSet<T> properties defined in the DbContext.ĐÚNG
CIt relies on XML configuration files.
DYou must manually register each class using builder.Services.AddTransient<Product>().
Giải thích

EF Core biết được các lớp nào cần bao gồm trong mô hình cơ sở dữ liệu dựa trên các thuộc tính DbSet<T> được định nghĩa trong lớp DbContext. Khi bạn tạo một thuộc tính DbSet<T>, EF Core sẽ tự động phát hiện lớp tương ứng và bao gồm nó trong mô hình cơ sở dữ liệu. Điều này giúp bạn dễ dàng quản lý các lớp và mối quan hệ giữa chúng trong ứng dụng .NET 9 sử dụng EF Core.

#011
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo automatically generate API documentation.
To abstract the data access logic, making the application more modular and testable.ĐÚNG
CTo handle user authentication and authorization.
DTo define the routing rules for API endpoints.
Giải thích

Repository Pattern là một mô hình thiết kế được sử dụng rộng rãi trong ASP.NET Core để truy cập dữ liệu. Nó giúp abstract hóa logic truy cập dữ liệu, làm cho ứng dụng trở nên linh hoạt và dễ dàng kiểm tra hơn. Repository Pattern giúp tách biệt logic truy cập dữ liệu khỏi logic kinh doanh, giảm thiểu sự phụ thuộc và tăng cường khả năng mở rộng. Nó cũng giúp dễ dàng thay đổi cơ sở dữ liệu mà không ảnh hưởng đến logic kinh doanh. Ngoài ra, Repository Pattern giúp dễ dàng thực hiện các tính năng như caching, logging và phân trang dữ liệu.

#012
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
String, Number, Boolean, Array, Object, nullĐÚNG
BString, Integer, Float, Date, Array, Hashtable
CText, Decimal, Bit, List, Dictionary, null
DVarchar, Number, Boolean, Collection, Object, undefined
Giải thích

JSON hỗ trợ nhiều loại dữ liệu khác nhau. Trong đó có String, Number, Boolean, Array và Object. String được sử dụng để lưu trữ chuỗi ký tự, Number để lưu trữ số nguyên và số thực, Boolean để lưu trữ giá trị logic True hoặc False, Array để lưu trữ danh sách các giá trị và Object để lưu trữ các thuộc tính và giá trị. null được sử dụng để biểu thị giá trị không có. JSON không hỗ trợ các loại dữ liệu như Integer, Float, Date, Text, Decimal, Bit, List, Dictionary, Varchar, Number, Boolean, Collection, Object, undefined vì chúng không phải là các loại dữ liệu cơ bản trong JSON.

#013
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
APOST /Products?$filter=Id eq 123
DELETE /Products(123)ĐÚNG
CGET /Products(123)?action=delete
DREMOVE /Products/123
Giải thích

Để xóa một sản phẩm có ID là 123, chúng ta cần sử dụng phương thức HTTP phù hợp. Trong OData, phương thức HTTP để xóa một tài nguyên là DELETE. Khi sử dụng DELETE, chúng ta cần cung cấp đường dẫn đến tài nguyên cần xóa. Trong trường hợp này, đường dẫn đến sản phẩm có ID là 123 là /Products(123). Vì vậy, câu trả lời đúng là DELETE /Products(123).

#014
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AThe service implementation on the server.
BThe generated client-side code.
A long-lived connection to a gRPC service, which can be reused for multiple calls.ĐÚNG
DA specific type of streaming method.
Giải thích

Trong gRPC, một "kênh" (channel) được định nghĩa là một kết nối lâu dài đến một dịch vụ gRPC, có thể được tái sử dụng cho nhiều cuộc gọi. Điều này cho phép các ứng dụng gRPC thực hiện nhiều cuộc gọi đến một dịch vụ mà không cần phải thiết lập lại kết nối mới. Mỗi kênh được tạo ra bằng cách gọi phương thức `CreateChannel` và nó được sử dụng để thực hiện các cuộc gọi đến dịch vụ gRPC. Kênh có thể được sử dụng để thực hiện các cuộc gọi một chiều, hai chiều hoặc streaming. Việc sử dụng kênh giúp cải thiện hiệu suất và giảm thiểu thời gian thiết lập kết nối.

#015
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo convert C# model objects into JSON or XML for the response.
To create instances of C# objects by extracting data from an incoming HTTP request (e.g., from the route, query string, or body).ĐÚNG
CTo bind a database model to a DbContext.
DTo validate the properties of a model.
Giải thích

Trong ASP.NET Core, Model Binder đóng vai trò quan trọng trong việc tạo ra các đối tượng C# từ dữ liệu được gửi qua HTTP request. Nó có thể lấy dữ liệu từ các nguồn khác nhau như đường dẫn, chuỗi truy vấn hoặc cơ thể yêu cầu. Model Binder sẽ tạo ra các đối tượng C# dựa trên dữ liệu được gửi và giúp chúng ta dễ dàng truy cập và sử dụng dữ liệu đó trong ứng dụng. Ví dụ, khi gửi một form qua HTTP POST, Model Binder sẽ tạo ra một đối tượng C# dựa trên dữ liệu được gửi và giúp chúng ta dễ dàng truy cập các thuộc tính của đối tượng đó. Điều này giúp giảm thiểu mã code và tăng hiệu suất của ứng dụng.

#016
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA static class with methods for rendering HTML.
BAn interface defining controller actions.
A class with properties representing data, often called a POCO (Plain Old CLR Object).ĐÚNG
DAn attribute used for routing.
Giải thích

Trong lập trình C#, một Model class được sử dụng để đại diện cho dữ liệu trong ứng dụng ASP.NET Core. Nó thường được gọi là POCO (Plain Old CLR Object), tức là một lớp với các thuộc tính đại diện cho dữ liệu. Ví dụ, nếu bạn muốn tạo một lớp đại diện cho một người dùng, bạn có thể tạo một lớp có các thuộc tính như tên, tuổi, địa chỉ, v.v. Lớp này không chứa bất kỳ logic nào, chỉ đơn giản là đại diện cho dữ liệu. Điều này giúp cho việc quản lý dữ liệu trở nên dễ dàng hơn và giúp cho ứng dụng trở nên linh hoạt hơn.

#017
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A500 Internal Server Error
B404 Not Found
400 Bad RequestĐÚNG
D200 OK
Giải thích

Khi người dùng cung cấp dữ liệu không hợp lệ trong cơ thể yêu cầu, trạng thái HTTP phù hợp nhất để trả về là trạng thái lỗi yêu cầu không hợp lệ. Điều này xảy ra khi máy chủ nhận được yêu cầu nhưng không thể xử lý do dữ liệu không hợp lệ. Trạng thái lỗi này cho biết yêu cầu không hợp lệ và yêu cầu người dùng cung cấp dữ liệu hợp lệ. Ví dụ, khi người dùng nhập sai địa chỉ email hoặc mật khẩu, trạng thái lỗi này sẽ được trả về.

#018
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
The process of converting a .NET object into a format (like JSON or XML) that can be transmitted over the network.ĐÚNG
BThe process of converting a format (like JSON or XML) from a request into a .NET object.
CThe process of handling requests in a specific, sequential order.
DThe process of securing data before transmission.
Giải thích

Serialization trong bối cảnh của một Web API là quá trình chuyển đổi một đối tượng .NET thành một định dạng (như JSON hoặc XML) có thể được truyền qua mạng. Quá trình này rất quan trọng vì nó cho phép dữ liệu được truyền qua mạng một cách hiệu quả và an toàn. Khi một ứng dụng Web API nhận được yêu cầu, nó sẽ sử dụng serialization để chuyển đổi dữ liệu thành một định dạng có thể được truyền qua mạng. Sau đó, dữ liệu này sẽ được truyền qua mạng đến máy chủ hoặc thiết bị khác. Khi dữ liệu đến được đích, ứng dụng Web API sẽ sử dụng deserialization để chuyển đổi dữ liệu trở lại thành một đối tượng .NET có thể được sử dụng bởi ứng dụng.

#019
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy modifying the IdentityUser source code directly.
By creating a new class that inherits from IdentityUser and adding the new properties to it.ĐÚNG
CBy storing the extra data in a separate, manually-managed table.
DIt is not possible to extend the IdentityUser model.
Giải thích

Để thêm thuộc tính tùy chỉnh (ví dụ: FirstName, DateOfBirth) vào mô hình người dùng trong ASP.NET Core Identity, bạn có thể tạo một lớp mới kế thừa từ IdentityUser và thêm các thuộc tính mới vào đó. Điều này cho phép bạn mở rộng mô hình người dùng mà không cần phải sửa đổi mã nguồn của IdentityUser trực tiếp. Khi tạo lớp mới, bạn cần đảm bảo rằng lớp này có cùng tên với lớp IdentityUser và có cùng thuộc tính khóa chính (ví dụ: Id). Sau đó, bạn có thể thêm các thuộc tính mới vào lớp này, chẳng hạn như FirstName và DateOfBirth. Lớp mới này sẽ được sử dụng thay thế cho lớp IdentityUser trong mô hình người dùng của bạn.

#020
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt is the only way to define routes in minimal APIs.
It keeps the route definition next to the action method that it maps to, improving locality and discoverability.ĐÚNG
CIt offers significantly better performance than conventional routing.
DIt is required for enabling Swagger/OpenAPI documentation.
Giải thích

Attribute routing là một phương pháp định tuyến trong ASP.NET Core, giúp người lập trình viên định nghĩa các tuyến đường (route) dựa trên các thuộc tính (attribute) của phương thức hành động (action method). Điều này giúp cải thiện tính cục bộ (locality) và tính dễ khám phá (discoverability) của mã nguồn. Khi sử dụng attribute routing, người lập trình viên có thể định nghĩa các tuyến đường ngay trong phương thức hành động mà nó tương ứng, thay vì phải định nghĩa chúng trong một file riêng biệt. Điều này giúp giảm thiểu sự phức tạp và tăng cường tính dễ hiểu của mã nguồn.

#021
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt automatically creates database tables from DTOs.
BIt replaces the need for Dependency Injection.
It automates the process of converting one object type to another (e.g., an Entity to a DTO), reducing boilerplate code.ĐÚNG
DIt provides an alternative to JSON for data serialization.
Giải thích

AutoMapper là một thư viện giúp tự động hóa quá trình chuyển đổi giữa các loại đối tượng khác nhau. Ví dụ, khi bạn cần chuyển đổi một đối tượng Entity sang một đối tượng DTO (Data Transfer Object), AutoMapper sẽ giúp bạn thực hiện điều này một cách dễ dàng và giảm thiểu mã code lặp lại. Điều này giúp bạn tiết kiệm thời gian và công sức khi phát triển ứng dụng. Ngoài ra, AutoMapper cũng giúp bạn dễ dàng quản lý và cập nhật các mối quan hệ giữa các đối tượng, từ đó giúp bạn xây dựng các ứng dụng phức tạp và linh hoạt hơn.

#022
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
/$metadataĐÚNG
B/$help
C/$schema
D/$info
Giải thích

Endpoints của một dịch vụ OData thường được sử dụng để truy cập dữ liệu. Để biết thông tin chi tiết về cấu trúc dữ liệu của dịch vụ, chúng ta cần truy cập vào endpoint nào? Dưới đây là một số lựa chọn.

#023
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt registers the authentication services.
It adds the authentication and authorization middleware components to the request pipeline.ĐÚNG
CIt configures the default authentication scheme.
DIt is redundant and has no effect.
Giải thích

Trong mã .NET 8 ở Program.cs, mục đích của đoạn mã var app = builder.Build(); // ... app.UseAuthentication(); app.UseAuthorization(); // ... app.Run(); là thêm các thành phần middleware cho pipeline yêu cầu. Middleware là các lớp xử lý trung gian giúp thực hiện các tác vụ như xác thực và ủy quyền. Khi sử dụng UseAuthentication() và UseAuthorization(), chúng ta đang thêm các thành phần này vào pipeline để xử lý các yêu cầu liên quan đến xác thực và ủy quyền. Điều này giúp đảm bảo rằng ứng dụng của chúng ta có thể xác thực và ủy quyền người dùng một cách chính xác và an toàn.

#024
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
The server does not store any information about the client's state between requests.ĐÚNG
BThe client does not need to maintain any state about the server.
CThe communication protocol does not support sessions.
DThe server encrypts all state information.
Giải thích

Statelessness trong REST là một trong những đặc điểm quan trọng của kiến trúc này. Nó cho biết server không lưu trữ bất kỳ thông tin nào về trạng thái của client giữa các yêu cầu. Điều này có nghĩa là mỗi yêu cầu gửi đến server phải tự chứa đủ thông tin để thực hiện hành động mong muốn mà không cần dựa vào bất kỳ trạng thái nào được lưu trữ trước đó. Điều này giúp tăng tínhscalability và độ tin cậy của hệ thống, vì server không cần phải quản lý trạng thái của từng client. Tuy nhiên, điều này cũng đòi hỏi client phải gửi đủ thông tin để server có thể xử lý yêu cầu một cách độc lập.

#025
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo securely encrypt data transmissions.
To transfer hypertext documents across the internet.ĐÚNG
CTo manage and query databases.
DTo define the structure of a web page.
Giải thích

HTTP (Hypertext Transfer Protocol) là một giao thức mạng được sử dụng để truyền tải dữ liệu trên internet. Mục đích chính của giao thức HTTP là chuyển đổi các tài liệu siêu văn bản (hypertext documents) giữa các máy tính. Điều này bao gồm việc truyền tải các trang web, hình ảnh, âm thanh và các loại dữ liệu khác. Khi bạn nhập địa chỉ URL của một trang web vào trình duyệt, trình duyệt sẽ gửi một yêu cầu HTTP đến máy chủ lưu trữ trang web đó. Máy chủ sẽ trả lời yêu cầu bằng cách gửi lại trang web yêu cầu, và trình duyệt sẽ hiển thị trang web đó cho bạn. Vì vậy, mục đích chính của giao thức HTTP là truyền tải các tài liệu siêu văn bản trên internet.

#026
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AFrom the query string.
From the request body.ĐÚNG
CFrom the route data.
DFrom the request headers.
Giải thích

Khi sử dụng [ApiController] trong ASP.NET Core, model binder sẽ cố gắng lấy dữ liệu cho tham số kiểu phức tạp (như một lớp hoặc bản ghi) từ đâu? Theo mặc định, model binder sẽ lấy dữ liệu từ cơ thể yêu cầu (request body). Điều này có nghĩa là dữ liệu sẽ được gửi qua trong nội dung của yêu cầu HTTP, thường là dưới dạng JSON hoặc XML. Điều này giúp cho việc truyền dữ liệu phức tạp trở nên dễ dàng hơn và giúp cho việc xử lý dữ liệu trở nên linh hoạt hơn. Tuy nhiên, người dùng cũng có thể sử dụng các thuộc tính khác nhau để chỉ định nguồn dữ liệu cho model binder, chẳng hạn như [FromBody], [FromQuery] hoặc [FromRoute].

#027
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AOk()
NotFound()ĐÚNG
CBadRequest()
DNoContent()
#028
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A[FromQuery]
[FromBody]ĐÚNG
C[FromRoute]
D[FromHeader]
Giải thích

Theo các quy tắc suy luận, bất kỳ tham số kiểu phức tạp nào không được đăng ký trong hộp chứa DI và không khớp với tham số đường dẫn sẽ được suy luận đến từ đâu?

#029
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AGET
BPOST
PUTĐÚNG
DDELETE
Giải thích

Để xác định HTTP verb phù hợp cho hành động cập nhật sản phẩm, chúng ta cần xem xét mục đích của hành động này. Hành động cập nhật sản phẩm là một hành động thay đổi trạng thái của sản phẩm hiện có. Trong HTTP, có bốn phương thức chính: GET, POST, PUT và DELETE. Mỗi phương thức có một mục đích riêng biệt. GET dùng để đọc dữ liệu, POST dùng để tạo mới dữ liệu, PUT dùng để cập nhật dữ liệu và DELETE dùng để xóa dữ liệu. Vì hành động cập nhật sản phẩm là thay đổi trạng thái của sản phẩm hiện có, nên phương thức phù hợp nhất cho hành động này là PUT. Phương thức PUT cho phép gửi một bản sao của tài nguyên đã tồn tại đến máy chủ, và máy chủ sẽ cập nhật tài nguyên đó. Trong trường hợp này, hành động cập nhật sản phẩm được định nghĩa bằng phương thức PUT, và nó nhận một id sản phẩm và một bản sao của sản phẩm từ cơ thể yêu cầu. Sau khi cập nhật sản phẩm, hành động này trả về trạng thái 204 No Content, cho biết sản phẩm đã được cập nhật thành công.

#030
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
public class UserDto { public int Id { get; set; } public string Username { get; set; } }ĐÚNG
Bpublic class UserDto { public string HashedPassword { get; set; } }
CThe User entity itself should always be returned directly.
Dpublic class UserDto { public int Id { get; set; } public string Username { get; set; } public string HashedPassword { get; set; } public bool IsAdmin { get; set; } }
Giải thích

Khi xây dựng một ứng dụng web, việc bảo vệ thông tin người dùng là rất quan trọng. Trong trường hợp này, chúng ta có một thực thể User trong EF Core với các thuộc tính Id, Username, HashedPassword và IsAdmin. Nếu một client yêu cầu thông tin chi tiết về một người dùng, chúng ta cần quyết định thông tin nào nên được trả về.

#031
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AManually checking ModelState.IsValid in every action.
The [ApiController] attribute automatically handles it.ĐÚNG
CUsing a custom middleware to inspect every request.
DRelying on the database to throw an exception.
Giải thích

Trong một ứng dụng Web API .NET 8, cách xử lý lỗi xác thực mô hình tự động và trả về trạng thái 400 Bad Request được khuyến nghị như sau. Trước đây, để kiểm tra lỗi xác thực mô hình, chúng ta thường phải kiểm tra trạng thái `ModelState.IsValid` trong mỗi hành động. Tuy nhiên, từ .NET 6 trở lên, khi áp dụng tính năng API Controller, việc xử lý lỗi xác thực mô hình đã được tự động hóa. Khi áp dụng tính năng này, khi có lỗi xác thực mô hình, hệ thống sẽ tự động trả về trạng thái 400 Bad Request cùng với thông tin lỗi. Điều này giúp giảm thiểu mã nguồn và tăng cường tính bảo mật cho ứng dụng.

#032
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AGET /Categories(1)?$select=Products
GET /Categories(1)?$expand=ProductsĐÚNG
CGET /Categories(1),/Products
DGET /Categories(1)/Products?$fetch=all
Giải thích

Để lấy một đối tượng Category và tất cả các đối tượng Product liên quan trong một yêu cầu, bạn cần sử dụng truy vấn OData phù hợp. Trong trường hợp này, bạn có thể sử dụng truy vấn GET /Categories(1)?$expand=Products. Điều này cho phép bạn lấy một đối tượng Category với ID là 1 và tất cả các đối tượng Product liên quan. Cụ thể, $expand là một tham số trong OData cho phép bạn lấy các đối tượng liên quan trong một yêu cầu. Ví dụ, GET /Categories(1)?$expand=Products sẽ trả về một đối tượng Category với ID là 1 và tất cả các đối tượng Product liên quan.

#033
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AProtobuf is a human-readable text format, making it easier to debug.
Protobuf uses a binary serialization format, which is typically smaller and faster to parse than text-based JSON.ĐÚNG
CProtobuf is natively supported by all web browsers without any libraries.
DProtobuf has a more flexible schema that can be changed by the client at will.
Giải thích

Protobuf là một định dạng serialize binary, giúp giảm kích thước dữ liệu và tăng tốc độ parse so với định dạng JSON text-based. Điều này là do định dạng binary không cần phải được mã hóa thành chuỗi text như JSON, giúp giảm thiểu dữ liệu cần truyền tải và tăng tốc độ xử lý. Ngoài ra, định dạng binary cũng giúp giảm thiểu khả năng xảy ra lỗi khi truyền tải dữ liệu. Vì vậy, sử dụng Protobuf có thể giúp giảm thiểu thời gian truyền tải và tăng tốc độ xử lý dữ liệu, đặc biệt là khi cần truyền tải một lượng lớn dữ liệu.

#034
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt fetches all products, then filters and sorts them in the application's memory.
It generates a SQL query to select and order available products, which is then executed on the database server.ĐÚNG
CIt synchronously blocks the thread until the database returns all products.
DIt deletes all products that are not available.
Giải thích

Lệnh LINQ này được sử dụng trong một dịch vụ .NET 8 sử dụng EF Core. Nó thực hiện việc truy vấn dữ liệu từ cơ sở dữ liệu. Đầu tiên, nó lọc ra các sản phẩm có trạng thái 'IsAvailable' là true. Sau đó, nó sắp xếp các sản phẩm theo tên. Tất cả các bước này được thực hiện trên cơ sở dữ liệu, không phải trong bộ nhớ của ứng dụng. Điều này giúp giảm thiểu lượng dữ liệu cần truyền tải và xử lý.

#035
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
<note> <to>Tove</to> <from>Jani</from> </note>ĐÚNG
B<note> <to>Tove <from>Jani</from> </to> </note>
C<note> <to>Tove</to> <from>Jani <note>
D<note> <to>Tove</from><from>Jani</to> </note>
Giải thích

Một tài liệu XML được coi là hợp lệ nếu nó tuân theo các quy tắc về cấu trúc và ngữ nghĩa của XML. Trong các lựa chọn trên, tài liệu XML hợp lệ phải có các phần tử được đóng mở đúng cách và các phần tử con phải được đóng gói trong phần tử cha. Ví dụ, trong tài liệu XML «<note> <to>Tove</to> <from>Jani</from> </note>», phần tử «note» được mở và đóng đúng cách, và các phần tử «to» và «from» được đóng gói trong phần tử «note». Ngược lại, trong tài liệu XML «<note> <to>Tove <from>Jani</from> </to> </note>», phần tử «to» không được đóng đúng cách vì nó không có phần tử đóng. Trong tài liệu XML «<note> <to>Tove</to> <from>Jani <note>», phần tử «from» không được đóng đúng cách vì nó không có phần tử đóng. Cuối cùng, trong tài liệu XML «<note> <to>Tove</from><from>Jani</to> </note>», các phần tử «to» và «from» không được đóng gói trong phần tử «note». Vì vậy, chỉ có tài liệu XML «<note> <to>Tove</to> <from>Jani</from> </note>» là hợp lệ.

#036
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
InputFormatter and OutputFormatterĐÚNG
BFormatter and Serializer
CMediaTypeReader and MediaTypeWriter
DRequestFormatter and ResponseFormatter
Giải thích

Trong ASP.NET Core hiện đại, các lớp cơ sở tương ứng cho các định dạng đầu vào và đầu ra là InputFormatter và OutputFormatter. InputFormatter chịu trách nhiệm chuyển đổi dữ liệu từ yêu cầu HTTP sang một định dạng cụ thể, trong khi OutputFormatter thực hiện việc chuyển đổi dữ liệu từ một định dạng cụ thể sang phản hồi HTTP. Các lớp này được sử dụng để hỗ trợ các định dạng dữ liệu như JSON, XML, v.v. trong ứng dụng ASP.NET Core. Ví dụ, bạn có thể sử dụng lớp JsonInputFormatter để chuyển đổi dữ liệu từ JSON sang một đối tượng C# và lớp JsonOutputFormatter để chuyển đổi dữ liệu từ một đối tượng C# sang JSON.

#037
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AAn output formatter that can write XML.
An input formatter that can read XML.ĐÚNG
CThe default JSON formatter, which will cause an error.
DAny formatter that is registered with the application.
Giải thích

Khi một khách hàng gửi một yêu cầu với Content-Type: application/xml, thì pipeline ASP.NET Core sẽ cố gắng sử dụng loại trình tạo nào để đọc cơ thể yêu cầu? Để giải quyết vấn đề này, chúng ta cần hiểu về các trình tạo đầu vào và đầu ra trong ASP.NET Core. Trình tạo đầu vào là một thành phần quan trọng trong ASP.NET Core, có trách nhiệm đọc dữ liệu từ cơ thể yêu cầu và chuyển đổi nó thành một đối tượng .NET. Trong trường hợp này, trình tạo đầu vào sẽ cố gắng đọc dữ liệu XML từ cơ thể yêu cầu và chuyển đổi nó thành một đối tượng .NET. Điều này cho phép chúng ta sử dụng dữ liệu XML trong ứng dụng ASP.NET Core của mình. Vì vậy, câu trả lời đúng cho câu hỏi này là trình tạo đầu vào có thể đọc XML.

#038
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AThe ability for the client to push data to the server's cache.
BA security feature that pushes updates to the client.
The ability for the server to send resources to the client that it anticipates the client will need, without the client explicitly requesting them.ĐÚNG
DA mechanism for streaming video content.
Giải thích

Trong HTTP/2, 'Server Push' là tính năng cho phép máy chủ gửi tài nguyên đến khách hàng mà không cần khách hàng yêu cầu rõ ràng. Điều này cho phép máy chủ dự đoán những tài nguyên mà khách hàng sẽ cần trong tương lai và gửi chúng trước khi khách hàng yêu cầu. Tính năng này giúp cải thiện hiệu suất và giảm thời gian tải trang. Ví dụ, nếu khách hàng đang xem trang web có nhiều hình ảnh, máy chủ có thể gửi hình ảnh đó đến khách hàng trước khi khách hàng yêu cầu, giúp trang web tải nhanh hơn. Tính năng Server Push là một trong những tính năng quan trọng của HTTP/2 và giúp cải thiện hiệu suất của giao tiếp giữa máy chủ và khách hàng.

#039
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AREST APIs are strictly-typed, while gRPC is loosely-typed.
gRPC APIs are defined by a formal contract (.proto file), while REST APIs often rely on documentation (like OpenAPI) that is separate from the implementation.ĐÚNG
CgRPC can only be used for internal, server-to-server communication.
DREST APIs support streaming, while gRPC does not.
Giải thích

Một trong những điểm khác biệt chính giữa gRPC và một API HTTP REST thông thường là cách định nghĩa và quản lý các dịch vụ API. gRPC sử dụng một hợp đồng chính thức (.proto file) để định nghĩa các dịch vụ API, trong khi các API HTTP REST thường dựa vào tài liệu (như OpenAPI) riêng biệt với triển khai. Điều này giúp cho gRPC cung cấp tính nhất quán và bảo mật cao hơn trong việc triển khai và sử dụng các dịch vụ API. Ngoài ra, việc sử dụng hợp đồng chính thức cũng giúp cho gRPC hỗ trợ các tính năng như mã hóa và xác thực tự động, giúp tăng cường bảo mật cho các dịch vụ API.

#040
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AAlways.
Never; the client and server can read and write in any order, their streams operate independently.ĐÚNG
COnly if the client explicitly signals it has finished writing.
DThis is configured by the wait_for_client option in the .proto file.
Giải thích

Trong cuộc gọi streaming hai chiều, khi nào thì máy chủ chờ đợi khách hàng gửi tất cả các tin nhắn trước khi gửi tin nhắn của nó? Câu trả lời đúng là "Không bao giờ; khách hàng và máy chủ có thể đọc và viết theo bất kỳ thứ tự nào, các luồng của họ hoạt động độc lập". Điều này có nghĩa là trong một cuộc gọi streaming hai chiều, khách hàng và máy chủ có thể đọc và viết các luồng dữ liệu của họ mà không cần chờ đợi nhau. Điều này cho phép khách hàng và máy chủ tương tác với nhau một cách linh hoạt và hiệu quả hơn. Tuy nhiên, điều này cũng có thể dẫn đến tình huống phức tạp khi khách hàng và máy chủ cần đồng bộ hóa các luồng dữ liệu của họ.

#041
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AThe server should store the client's session state to validate every request.
Each request from a client must contain all the information needed for the server to authenticate and authorize it, without relying on a previous request's context.ĐÚNG
CSecurity is best handled by the client-side application, not the API.
DUsing HTTP instead of HTTPS is acceptable for internal services.
Giải thích

Một trong những nguyên tắc bảo mật cơ bản cho các dịch vụ RESTful không có trạng thái là mỗi yêu cầu từ phía khách hàng phải chứa tất cả thông tin cần thiết để máy chủ xác thực và cấp quyền cho nó mà không dựa trên bối cảnh của yêu cầu trước đó. Điều này có nghĩa là mỗi yêu cầu phải tự chứa thông tin xác thực và cấp quyền của mình, mà không dựa vào thông tin được lưu trữ trên máy chủ. Điều này giúp tăng cường bảo mật và giảm thiểu rủi ro do lỗi bảo mật của máy chủ. Ngoài ra, nguyên tắc này cũng giúp cải thiện khả năng mở rộng và tínhscalability của hệ thống, vì máy chủ không cần phải lưu trữ trạng thái của khách hàng.

#042
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A[Format]
B[Pattern]
C[StringLength]
[RegularExpression]ĐÚNG
Giải thích

Để xác minh một thuộc tính theo một mẫu tùy chỉnh, chẳng hạn như một định dạng cụ thể cho mã sản phẩm (ví dụ: "PROD-1234"), thì thuộc tính nào phù hợp nhất?

#043
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA single, large application that handles all business logic in one deployable unit.
An architectural style that structures an application as a collection of small, independently deployable services organized around business capabilities.ĐÚNG
CA client-side framework for building single-page applications.
DA database design pattern for sharding data across multiple servers.
Giải thích

Một kiến trúc vi mô (microservice architecture) là một phong cách kiến trúc ứng dụng được cấu trúc thành một tập hợp các dịch vụ nhỏ, có thể triển khai độc lập và được tổ chức xung quanh các khả năng kinh doanh. Mỗi dịch vụ có thể được triển khai bằng ngôn ngữ lập trình khác nhau và có thể được triển khai độc lập, điều này cho phép các dịch vụ được phát triển, thử nghiệm và triển khai nhanh chóng mà không ảnh hưởng đến các dịch vụ khác. Kiến trúc vi mô cho phép ứng dụng linh hoạt và dễ dàng mở rộng, đồng thời giảm thiểu rủi ro khi triển khai ứng dụng.

#044
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AThe request has been accepted for processing, but the processing has not been completed.
The server has successfully fulfilled the request.ĐÚNG
CThe requested resource could not be found.
DThe server understands the request but refuses to authorize it.
Giải thích

Mã trạng thái HTTP 200 OK cho biết yêu cầu đã được xử lý thành công. Khi một máy chủ web nhận được một yêu cầu HTTP, nó sẽ trả về một mã trạng thái HTTP để xác định kết quả của yêu cầu. Mã trạng thái 200 OK là một trong những mã trạng thái phổ biến nhất và cho biết máy chủ đã xử lý yêu cầu thành công. Điều này có nghĩa là máy chủ đã hiểu và thực hiện được yêu cầu của người dùng, và đã trả về nội dung yêu cầu như mong đợi. Ví dụ, khi bạn truy cập một trang web, máy chủ web sẽ trả về mã trạng thái 200 OK để xác nhận rằng trang web đã được tải xuống thành công. Mã trạng thái này cũng được sử dụng khi bạn gửi một yêu cầu HTTP để tạo hoặc cập nhật một tài nguyên trên máy chủ web.

#045
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AHTML
BXML
JSONĐÚNG
DYAML
Giải thích

Trong các lựa chọn trên, JSON (JavaScript Object Notation) là định dạng dữ liệu phổ biến nhất được sử dụng cho các gói tải phản hồi trong các API REST hiện đại. JSON cung cấp một cách đơn giản và dễ đọc để biểu diễn dữ liệu, giúp dễ dàng truyền tải và xử lý dữ liệu giữa các ứng dụng và hệ thống khác nhau. Nó cũng hỗ trợ các loại dữ liệu cơ bản như chuỗi, số, boolean, mảng và đối tượng, cũng như các thuộc tính và phương thức của đối tượng. Việc sử dụng JSON trong các API REST giúp giảm thiểu thời gian tải trang và tăng cường hiệu suất của ứng dụng. Ngoài ra, JSON cũng được hỗ trợ rộng rãi bởi các nền tảng và ngôn ngữ lập trình khác nhau, làm cho nó trở thành lựa chọn phổ biến cho các ứng dụng web và di động.

#046
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ACount the number of properties on an entity.
Retrieve the total number of items in a collection, often alongside the data itself.ĐÚNG
CLimit the number of results returned.
DCount the number of related entities.
Giải thích

Tùy chọn truy vấn $count được sử dụng để lấy tổng số lượng mục trong một tập hợp, thường đi kèm với dữ liệu chính.

#047
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Atext/json
application/jsonĐÚNG
Cdata/json
Djson/application
Giải thích

Loại định dạng Media Type cho JSON được sử dụng rộng rãi và được khuyến nghị là 'application/json'. Loại này được sử dụng để xác định rằng dữ liệu được gửi hoặc nhận là trong định dạng JSON. Ví dụ, khi gửi yêu cầu HTTP, bạn có thể sử dụng 'Content-Type: application/json' để chỉ định rằng dữ liệu được gửi là trong định dạng JSON. Ngoài ra, khi nhận dữ liệu, bạn có thể sử dụng 'Accept: application/json' để chỉ định rằng bạn muốn nhận dữ liệu trong định dạng JSON. Loại định dạng này được hỗ trợ bởi hầu hết các trình duyệt và ứng dụng web, vì vậy nó là lựa chọn tốt nhất cho việc gửi và nhận dữ liệu JSON.

#048
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
app.MapControllers();ĐÚNG
Bapp.UseControllerRouting();
Capp.EnableControllerSupport();
Dapp.UseStaticFiles();
Giải thích

Trong một ứng dụng Web API truyền thống dựa trên controller trong .NET 8/9, phương thức gọi trong Program.cs quan trọng nhất cho việc định tuyến đến các controller là app.MapControllers(). Phương thức này cho phép ứng dụng nhận biết và xử lý các yêu cầu HTTP đến các controller. Khi bạn gọi app.MapControllers(), bạn đang cho phép ứng dụng .NET sử dụng tính năng routing mặc định để định tuyến các yêu cầu đến các controller phù hợp. Điều này giúp bạn có thể sử dụng các controller để xử lý các yêu cầu HTTP và trả về các phản hồi phù hợp.

#049
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AOne service publishes an event to a message queue, and another service subscribes to it.
Service A makes a direct HTTP (e.g., REST or gRPC) call to Service B and waits for an immediate response.ĐÚNG
CService A sends an email notification.
DService B processes a batch job overnight based on data from Service A.
Giải thích

Sự giao tiếp đồng bộ giữa các microservice là một quá trình trao đổi thông tin giữa các dịch vụ trong thời gian thực. Ví dụ về giao tiếp đồng bộ giữa các microservice là khi Service A thực hiện một yêu cầu HTTP trực tiếp đến Service B và chờ đợi phản hồi ngay lập tức. Điều này cho phép Service A và Service B trao đổi thông tin và thực hiện các hành động dựa trên thông tin đó trong thời gian thực. Điều này khác với giao tiếp bất đồng bộ, nơi các dịch vụ trao đổi thông tin nhưng không chờ đợi phản hồi ngay lập tức. Giao tiếp đồng bộ thường được sử dụng trong các ứng dụng cần phản hồi nhanh chóng và chính xác, chẳng hạn như các ứng dụng thương mại điện tử hoặc các ứng dụng tài chính.