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ọcAdvanced Cross-Platform Application Programming With .NET - Lập trình ứng dụng đa nền tảng nâng cao với .NETĐề thi thử PRN222 - Bộ 50 câu FE có đáp án
Đề thi trắc nghiệm

Đề thi thử PRN222 - Bộ 50 câu FE có đáp án

50Câu hỏi
Advanced Cross-Platform Application Programming With .NET - Lập trình ứng dụng đa nền tảng nâng cao 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
50 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

50

Thời gian làm bài

Không giới hạn

Lượt xem

0

Câu có lời giải

50

Câu có link chi tiết

50

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
ASame instance for the entire application
New instance for each HTTP requestĐÚNG
CNew instance every time injected
DThread-local instance
Giải thích

Khi sử dụng phương thức Scoped trong Dependency Injection của .NET, OrderService sẽ được tạo mới cho mỗi yêu cầu HTTP. Điều này có nghĩa là mỗi lần OrderService được yêu cầu, một phiên bản mới sẽ được tạo và sử dụng cho đến khi yêu cầu đó kết thúc. Điều này giúp đảm bảo rằng mỗi yêu cầu HTTP có một phiên bản riêng biệt của OrderService, tránh được các vấn đề liên quan đến việc chia sẻ trạng thái giữa các yêu cầu khác nhau.

#002
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Registers ILogger so that each request gets a new ConsoleLogger instanceĐÚNG
BRegisters ILogger as a singleton
CRegisters ConsoleLogger directly without abstraction
DThrows an error since ILogger is abstract
Giải thích

Trong mã code này, đoạn địch vụ AddTransient được sử dụng để đăng ký một dịch vụ ILogger với một thực thể ConsoleLogger cụ thể. Đoạn địch vụ AddTransient cho phép mỗi yêu cầu nhận được một phiên bản mới của ConsoleLogger. Điều này có nghĩa là mỗi lần yêu cầu được xử lý, một phiên bản mới của ConsoleLogger sẽ được tạo ra và sử dụng, sau đó bị hủy bỏ khi yêu cầu được hoàn thành. Điều này giúp đảm bảo rằng mỗi yêu cầu nhận được một phiên bản mới và độc lập của ConsoleLogger, mà không bị ảnh hưởng bởi các yêu cầu khác.

#003
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA global application configuration.
A request-specific database context in a web application.ĐÚNG
CA stateless utility service.
DA single instance of a logger.
Giải thích

Một dịch vụ có thời gian sống đượcScoped là một dịch vụ có thể được tạo mới và hủy bỏ trong mỗi yêu cầu. Ví dụ về một tình huống nơi một dịch vụ có thời gian sống đượcScoped sẽ phù hợp là khi bạn cần một đối tượng cơ sở dữ liệu cụ thể cho mỗi yêu cầu trong một ứng dụng web. Điều này có thể giúp ngăn chặn các vấn đề về đồng bộ hóa và đảm bảo rằng mỗi yêu cầu có một đối tượng cơ sở dữ liệu độc lập.

#004
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo increase performance
To invert object creation responsibilityĐÚNG
CTo remove polymorphism
DTo disable inheritance
Giải thích

Inversion of Control (IoC) là một nguyên tắc thiết kế phần mềm quan trọng trong lập trình. Mục tiêu chính của IoC là đảo ngược trách nhiệm tạo đối tượng. Thay vì các đối tượng phụ thuộc vào các đối tượng khác để tạo ra, IoC cho phép các đối tượng được tạo ra và quản lý bởi một hệ thống trung tâm. Điều này giúp giảm sự phức tạp và tăng tính linh hoạt của mã nguồn. IoC cũng cho phép dễ dàng thay đổi hoặc thay thế các đối tượng mà không ảnh hưởng đến các đối tượng khác. Nói cách khác, IoC giúp giảm sự phụ thuộc giữa các đối tượng và tăng cường khả năng mở rộng của hệ thống.

#005
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AInjecting dependencies via properties.
BInjecting dependencies via method parameters.
Injecting dependencies through a class's constructor.ĐÚNG
DInjecting dependencies at runtime.
Giải thích

Constructor Injection là một kỹ thuật trong lập trình hướng đối tượng, giúp tạo ra các đối tượng có thể dễ dàng sử dụng và thử nghiệm. Nó liên quan đến việc cung cấp các phụ thuộc (dependencies) cho một lớp (class) thông qua phương thức (method) khởi tạo (constructor) của nó. Điều này cho phép các phụ thuộc được tạo ra và cung cấp cho lớp một cách tự động, giảm thiểu sự phức tạp và tăng cường tính linh hoạt của mã.

#006
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AThe same instance
Different instancesĐÚNG
CNull references
DRuntime error
Giải thích

Khi sử dụng AddTransient<EmailService, EmailService>(), mỗi lần inject vào controller sẽ tạo ra một instance mới của EmailService. Điều này có nghĩa là mỗi lần inject sẽ có một instance khác nhau. VìTransient là một loại lifestyle trong Dependency Injection, nó sẽ tạo ra một instance mới mỗi lần inject, không lưu trữ instance trước đó. Vì vậy, nếu inject vào controller hai lần, sẽ có hai instance khác nhau của EmailService.

#007
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo define a database connection.
To specify the route for the component.ĐÚNG
CTo encrypt data.
DTo manage user sessions.
Giải thích

Mục đích của chỉ thị @page trong một thành phần Blazor là để xác định trang web hoặc trang in. Nó cho phép bạn định nghĩa các trang web hoặc trang in độc lập, bao gồm cả bố cục và nội dung. Điều này giúp bạn có thể quản lý và tùy chỉnh trang web hoặc trang in một cách dễ dàng. Ví dụ, bạn có thể sử dụng chỉ thị @page để tạo ra một trang web có bố cục độc đáo hoặc để tạo ra một trang in có nội dung cụ thể. Chỉ thị @page cũng cho phép bạn định nghĩa các trang web hoặc trang in dựa trên các điều kiện cụ thể, chẳng hạn như dựa trên loại thiết bị hoặc dựa trên ngôn ngữ.

#008
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AHigher server load.
Initial download size and performance.ĐÚNG
CLimited browser compatibility.
DLack of SignalR support.
Giải thích

Blazor WebAssembly là một công nghệ cho phép chạy ứng dụng Blazor trên máy khách, nhưng điều này cũng có thể gây ra một số bất lợi. Một trong những nhược điểm chính của Blazor WebAssembly so với Blazor Server là kích thước tải xuống ban đầu và hiệu suất. Khi bạn chạy ứng dụng Blazor WebAssembly, toàn bộ mã nguồn và dữ liệu sẽ được tải xuống máy khách, điều này có thể gây ra sự chậm chạp và khó khăn trong việc tải xuống ban đầu. Ngoài ra, kích thước tải xuống ban đầu lớn cũng có thể gây ra vấn đề về hiệu suất, đặc biệt là trên các thiết bị có cấu hình thấp. Điều này có thể ảnh hưởng đến trải nghiệm người dùng và làm giảm hiệu suất của ứng dụng.

#009
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AYou can only use C# on the server, not the client.
C# can be used for both client-side and server-side logic.ĐÚNG
CC# must be compiled into JavaScript first.
DBlazor only supports JavaScript for client-side interactivity.
Giải thích

Tính năng 'C# Everywhere' của Blazor cho phép bạn sử dụng C# cho cả logic phía client và phía server. Điều này có nghĩa là bạn có thể viết mã C# để thực hiện các tác vụ phía client, như tương tác với giao diện người dùng, và cũng có thể sử dụng C# để thực hiện các tác vụ phía server, như xử lý dữ liệu và tương tác với cơ sở dữ liệu. Tính năng này giúp giảm thiểu sự phức tạp và tăng cường khả năng bảo mật của ứng dụng. Với 'C# Everywhere', bạn có thể tập trung vào việc viết mã C# mà không cần phải lo lắng về việc chuyển đổi sang JavaScript hoặc các ngôn ngữ khác.

#010
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA JavaScript framework.
A framework for building interactive web UIs using C# instead of JavaScript.ĐÚNG
CA database management system.
DA server-side scripting language.
Giải thích

Blazor là một công cụ giúp xây dựng giao diện người dùng (UI) web tương tác bằng cách sử dụng ngôn ngữ lập trình C# thay vì JavaScript. Nó cho phép các nhà phát triển xây dựng các ứng dụng web động bằng cách sử dụng các thành phần và các yếu tố UI được xây dựng bằng C#. Blazor sử dụng mô hình hai chiều (two-way data binding), điều này có nghĩa là dữ liệu được đồng bộ hóa giữa phía client và phía server. Điều này giúp giảm thiểu sự phức tạp và tăng cường hiệu suất của ứng dụng. Blazor cũng hỗ trợ các tính năng như sự kiện, giao tiếp giữa các thành phần và các tính năng bảo mật.

#011
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Blazor ServerĐÚNG
Blazor WebAssemblyĐÚNG
CBlazor Desktop
DBlazor Native
Giải thích

Blazor hỗ trợ hai mô hình hosting chính là Blazor Server và Blazor WebAssembly. Mô hình Blazor Server cho phép ứng dụng được chạy trên máy chủ, trong khi đó Blazor WebAssembly cho phép ứng dụng được chạy trực tiếp trên trình duyệt của người dùng. Mô hình Blazor Server thường được sử dụng khi cần có khả năng tương tác thực-time và cập nhật dữ liệu ngay lập tức, trong khi mô hình Blazor WebAssembly thường được sử dụng khi cần có khả năng chạy ứng dụng độc lập và không cần kết nối internet.

#012
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIndex.razor
BRoutes.razor
App.razorĐÚNG
DMainLayout.razor
Giải thích

Trong một ứng dụng Blazor, thành phần gốc (root component) là nơi chứa các thông tin cấu hình cơ bản của ứng dụng. Nó được sử dụng để định nghĩa các thành phần khác nhau của ứng dụng, bao gồm layout, routing và các thành phần khác. Thành phần gốc thường được gọi là App.razor và nó được sử dụng để tạo ra một ứng dụng Blazor mới. Trong App.razor, bạn có thể định nghĩa các thành phần khác nhau của ứng dụng, chẳng hạn như layout, routing và các thành phần khác. Nó cũng được sử dụng để cấu hình các tính năng khác nhau của ứng dụng, chẳng hạn như bảo mật và lưu trữ dữ liệu. Vì vậy, App.razor là thành phần gốc của một ứng dụng Blazor và nó được sử dụng để tạo ra một ứng dụng mới.

#013
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
HubĐÚNG
BController
CPageModel
DService
Giải thích

Trong SignalR, lớp chính được sử dụng cho giao tiếp là Hub. Hub là một lớp trung gian giúp các client kết nối với nhau và thực hiện các hành động như gửi tin nhắn, cập nhật trạng thái. Nó giống như một trung tâm điều khiển, nơi mà các client có thể gửi và nhận thông tin. Khi một client gửi tin nhắn qua Hub, nó sẽ được gửi đến tất cả các client khác đang kết nối với Hub đó. Điều này giúp tạo ra một môi trường giao tiếp thực-time giữa các client.

#014
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo manage database connections.
To provide information about the current connection.ĐÚNG
CTo encrypt data.
DTo manage user sessions.
Giải thích

Mục đích của đối tượng Context trong một Hub SignalR là cung cấp thông tin về kết nối hiện tại của khách hàng. Đối tượng Context chứa các thuộc tính và phương thức giúp bạn có thể truy cập và quản lý thông tin về kết nối, chẳng hạn như ID kết nối, địa chỉ IP, v.v. Điều này cho phép bạn có thể thực hiện các hành động tùy chỉnh dựa trên thông tin về kết nối, chẳng hạn như lưu trữ thông tin về khách hàng, kiểm tra quyền truy cập, v.v. Ngoài ra, đối tượng Context cũng cung cấp phương thức để bạn có thể gửi thông điệp đến khách hàng dựa trên ID kết nối.

#015
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy defining JavaScript functions.
By creating classes that inherit from Hub.ĐÚNG
CBy using static HTML files.
DBy using database queries.
Giải thích

Để sử dụng các hub trong SignalR cho ASP.NET Core, bạn cần tạo các lớp (class) mới mà kế thừa từ lớp Hub. Các lớp này sẽ chứa các phương thức (method) được gọi khi có kết nối đến từ các ứng dụng khách (client). Các phương thức này có thể gửi tin nhắn đến các ứng dụng khách đã kết nối. Ví dụ, bạn có thể tạo một lớp Hub có tên là 'ChatHub' và chứa phương thức 'SendMesssage' để gửi tin nhắn đến các ứng dụng khách đã kết nối. Khi một ứng dụng khách gửi tin nhắn đến server, server sẽ gọi phương thức 'SendMesssage' để gửi tin nhắn đến các ứng dụng khách khác. Điều này cho phép các ứng dụng khách tương tác với nhau trong thời gian thực.

#016
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy writing CSS styles.
By using JavaScript event listeners on the connection object.ĐÚNG
CBy using static HTML files.
DBy using database queries.
Giải thích

Để xử lý sự kiện cho một kết nối SignalR trên phía client, bạn cần sử dụng JavaScript. Bạn có thể sử dụng phương thức on() để đăng ký một sự kiện và phương thức off() để hủy đăng ký. Ví dụ, bạn có thể sử dụng phương thức on('connected', function() { ... }) để đăng ký một sự kiện khi kết nối được thiết lập thành công. Ngoài ra, bạn cũng có thể sử dụng phương thức on('reconnected', function() { ... }) để đăng ký một sự kiện khi kết nối được phục hồi sau khi bị mất kết nối. Điều này cho phép bạn thực hiện các hành động cụ thể khi kết nối thay đổi trạng thái.

#017
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo manage database connections.
To send messages to clients based on their authenticated user identity.ĐÚNG
CTo encrypt data.
DTo manage user sessions.
Giải thích

Tính năng User trong SignalR được sử dụng để quản lý và gửi tin nhắn đến các khách hàng dựa trên danh tính người dùng đã xác thực. Điều này cho phép các ứng dụng thực hiện các hành động dựa trên danh tính người dùng, chẳng hạn như gửi thông báo hoặc cập nhật trạng thái. Tính năng này cũng giúp các nhà phát triển xây dựng các ứng dụng có tính bảo mật cao hơn, bằng cách đảm bảo rằng các tin nhắn được gửi đến đúng người dùng. Ngoài ra, tính năng User cũng giúp các nhà phát triển quản lý và phân loại các khách hàng dựa trên danh tính người dùng, giúp họ dễ dàng quản lý và theo dõi các hoạt động của khách hàng.

#018
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AMicrosoft.Extensions.DependencyInjection
Microsoft.AspNetCore.SignalRĐÚNG
CSystem.Threading.Tasks
DMicrosoft.AspNetCore.Mvc
Giải thích

Để sử dụng Hub, bạn cần import namespace là Microsoft.AspNetCore.SignalR. Đây là namespace được sử dụng để tạo và quản lý các Hub trong ứng dụng ASP.NET Core. Hub là một tính năng quan trọng trong SignalR, cho phép bạn tạo các ứng dụng thực-time và tương tác với người dùng. Khi bạn import namespace này, bạn có thể sử dụng các lớp và phương thức của SignalR để tạo và quản lý các Hub.

#019
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Aservices.AddHub()
services.AddSignalR()ĐÚNG
Capp.UseSignalR()
Dservices.RegisterSignalR()
Giải thích

Để đăng ký dịch vụ SignalR trong ứng dụng ASP.NET Core, bạn cần sử dụng phương thức services.AddSignalR(). Phương thức này được sử dụng trong lớp Startup.cs để thêm dịch vụ SignalR vào bộ dịch vụ. Điều này cho phép ứng dụng sử dụng các tính năng của SignalR, chẳng hạn như tạo và kết nối đến các hub. Các phương thức khác như services.AddHub(), app.UseSignalR() và services.RegisterSignalR() không được sử dụng để đăng ký dịch vụ SignalR. services.AddHub() thường được sử dụng để tạo các hub, trong khi app.UseSignalR() được sử dụng để cấu hình SignalR trong ứng dụng. services.RegisterSignalR() không phải là một phương thức hợp lệ trong ASP.NET Core. Vì vậy, phương thức chính xác để đăng ký dịch vụ SignalR là services.AddSignalR().

#020
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIdentify a physical device on a local network only
Provide logical addressing for devices across networksĐÚNG
CEncrypt data during transmission
DDefine the maximum transmission speed
Giải thích

Địa chỉ IP chủ yếu được sử dụng để xác định địa chỉ logic cho các thiết bị trên các mạng khác nhau. Điều này cho phép các thiết bị trên mạng khác nhau giao tiếp với nhau và gửi dữ liệu qua mạng. Địa chỉ IP là một chuỗi số được sử dụng để định danh một thiết bị trên mạng, giúp các thiết bị khác trên mạng biết cách liên lạc với nó. Nó giống như một địa chỉ nhà, giúp các thiết bị khác tìm thấy và liên lạc với thiết bị đó trên mạng. Ngoài ra, địa chỉ IP cũng giúp quản lý và quản trị mạng một cách hiệu quả hơn.

#021
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ASend data to a client
Accept a pending client connection asynchronouslyĐÚNG
CStop the listener
DBind to an IP address
Giải thích

Métodu AcceptSocketAsync() trong TcpListener được sử dụng để chấp nhận kết nối của một khách hàng đang chờ đợi một cách bất đồng bộ. Khi một khách hàng gửi yêu cầu kết nối đến máy chủ, thì phương thức này sẽ được gọi để chấp nhận yêu cầu đó và tạo ra một kết nối mới. Điều này cho phép máy chủ xử lý các yêu cầu kết nối một cách đồng thời và hiệu quả, đặc biệt là khi có nhiều khách hàng đang chờ đợi.

#022
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo encrypt network traffic.
To translate hostnames into IP addresses.ĐÚNG
CTo manage network security.
DTo route network packets.
Giải thích

Hệ thống tên miền (DNS) là một cơ sở dữ liệu phân tán được sử dụng để ánh xạ tên miền vào địa chỉ IP. Khi bạn nhập địa chỉ URL vào trình duyệt, DNS sẽ chuyển đổi tên miền thành địa chỉ IP tương ứng, cho phép thiết bị của bạn kết nối với máy chủ web. Điều này giúp người dùng dễ dàng nhớ và truy cập vào các trang web bằng tên miền dễ đọc hơn so với địa chỉ IP phức tạp.

#023
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AUDP
BIP
TCPĐÚNG
DHTTP
Giải thích

Protocol liên kết có hướng và đảm bảo chuyển dữ liệu tin cậy là gì? Để trả lời câu hỏi này, chúng ta cần hiểu về các protocol mạng khác nhau. UDP (User Datagram Protocol) là một protocol không liên kết, không đảm bảo chuyển dữ liệu tin cậy. IP (Internet Protocol) là protocol định tuyến, không liên kết và không đảm bảo chuyển dữ liệu tin cậy. HTTP (Hypertext Transfer Protocol) là protocol ứng dụng, không liên kết và không đảm bảo chuyển dữ liệu tin cậy. TCP (Transmission Control Protocol) là một protocol liên kết có hướng, đảm bảo chuyển dữ liệu tin cậy. Nó sử dụng các kỹ thuật như gửi lại dữ liệu bị lỗi, sắp xếp lại dữ liệu và kiểm tra lỗi để đảm bảo dữ liệu được chuyển đến đích một cách chính xác. Vì vậy, TCP là protocol liên kết có hướng và đảm bảo chuyển dữ liệu tin cậy.

#024
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
APOST
BPUT
GETĐÚNG
DDELETE
Giải thích

Khi gọi GetAsync() trong HttpClient, phương thức HTTP mặc định là GET. Phương thức GET được sử dụng để yêu cầu dữ liệu từ một nguồn nào đó mà không cần thay đổi dữ liệu đó. Nó thường được sử dụng để lấy dữ liệu từ một trang web hoặc một API. Trong trường hợp này, GetAsync() sẽ gửi một yêu cầu GET đến nguồn dữ liệu và trả về dữ liệu đó. Điều này giúp cho việc lấy dữ liệu trở nên dễ dàng và hiệu quả hơn.

#025
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATcpClient
BUdpClient
TcpListenerĐÚNG
DSocket
Giải thích

Để lắng nghe các kết nối TCP vào một cổng cụ thể, bạn cần sử dụng lớp .NET TcpListener. TcpListener cho phép bạn tạo một máy chủ TCP và lắng nghe các yêu cầu kết nối từ các máy khách. Khi một máy khách kết nối đến máy chủ, bạn có thể sử dụng phương thức Accept để chấp nhận kết nối và bắt đầu giao tiếp với máy khách. TcpListener cũng cung cấp các phương thức để gửi và nhận dữ liệu qua TCP, giúp bạn xây dựng các ứng dụng mạng phức tạp. Ngoài ra, TcpListener cũng hỗ trợ các tính năng như xác thực và mã hóa để đảm bảo an toàn cho các giao tiếp mạng.

#026
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AValid
ErrorĐÚNG
CException
DNull
Giải thích

Nếu không có giá trị cho thuộc tính Age và Age được định nghĩa là kiểu int, thì khi thực hiện phương thức Save, chương trình sẽ không ném ra ngoại lệ. Thay vào đó, nó sẽ kiểm tra trạng thái hợp lệ của mô hình (ModelState.IsValid). Vì Age không được cung cấp, nên mô hình sẽ không hợp lệ. Do đó, phương thức sẽ trả về nội dung "Error".

#027
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AOK
Invalid!ĐÚNG
CException
DNull
Giải thích

Khi thực hiện việc lưu trữ thông tin người dùng với lớp Person, chúng ta cần kiểm tra xem dữ liệu đầu vào có hợp lệ hay không. Trong trường hợp này, lớp Person chỉ có một thuộc tính là Age, và dữ liệu đầu vào là một chuỗi 'abc'. Vì Age được định nghĩa là một số nguyên (int), nên khi chúng ta cố gắng lưu trữ chuỗi 'abc' vào thuộc tính Age, hệ thống sẽ phát hiện ra lỗi và trả về thông điệp 'Invalid!' để thông báo cho người dùng.

#028
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
@modelĐÚNG
B@view
C@bind
D@data
Giải thích

Để tạo một View được định nghĩa rõ ràng (strongly-typed View), bạn cần sử dụng một trong các chỉ thị sau. Trong đó, chỉ thị '@model' được sử dụng rộng rãi nhất để khai báo kiểu dữ liệu của View. Ví dụ, nếu bạn muốn tạo một View để hiển thị thông tin về một người dùng, bạn có thể sử dụng '@model' để khai báo kiểu dữ liệu là 'User'. Điều này giúp cho View của bạn được định nghĩa rõ ràng và dễ dàng sử dụng.

#029
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AdminĐÚNG
Bnull
CError
DNothing
Giải thích

Khi chạy mã C# trên, chúng ta sẽ thấy kết quả là "Admin". Lý do là vì trong phương thức Index(), chúng ta đã gán giá trị "Admin" vào ViewData với khóa "User". Sau đó, trong Razor, chúng ta sử dụng ViewBag.User để hiển thị giá trị này. Vì vậy, kết quả cuối cùng sẽ là "Admin".

#030
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA database connection.
The result of an action method.ĐÚNG
CA user session.
DA network request.
Giải thích

IActionResult là một giao diện trong ASP.NET Core, đại diện cho kết quả của một phương thức hành động. Nó cho phép bạn trả về nhiều loại kết quả khác nhau, chẳng hạn như một trang web, một chuyển hướng, một trạng thái HTTP, v.v. Khi một phương thức hành động được gọi, nó sẽ trả về một đối tượng thực thi IActionResult, đại diện cho kết quả của phương thức đó. Điều này cho phép bạn xử lý kết quả một cách linh hoạt và dễ dàng trong ứng dụng của mình.

#031
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AThe process of encrypting data.
The process of ensuring that user input meets specific criteria.ĐÚNG
CThe process of managing database connections.
DThe process of routing HTTP requests.
Giải thích

Trong ASP.NET Core MVC, "Model Validation" là quá trình đảm bảo rằng dữ liệu được nhập vào bởi người dùng đáp ứng các tiêu chí cụ thể. Quá trình này giúp ngăn chặn các dữ liệu không hợp lệ được lưu trữ vào cơ sở dữ liệu hoặc sử dụng trong ứng dụng. Model Validation thường được thực hiện bằng cách sử dụng các thuộc tính và phương thức đặc biệt trên mô hình dữ liệu (model) để xác minh tính hợp lệ của dữ liệu. Ví dụ, bạn có thể sử dụng thuộc tính `[Required]` để yêu cầu một trường dữ liệu không được bỏ trống, hoặc thuộc tính `[Range]` để xác định phạm vi giá trị cho một trường dữ liệu. Quá trình này giúp đảm bảo rằng dữ liệu được nhập vào là chính xác và đáng tin cậy, từ đó giúp ứng dụng hoạt động ổn định và hiệu quả.

#032
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy directly creating an instance of the service.
By adding the service as a constructor parameter.ĐÚNG
CBy using global variables.
DBy using static methods.
Giải thích

Để chèn một dịch vụ vào một Razor PageModel, bạn cần sử dụng một trong các phương pháp sau. Phương pháp chính xác là thêm dịch vụ vào tham số constructor. Điều này cho phép bạn sử dụng dịch vụ trong các phương thức của PageModel. Ví dụ, bạn có thể thêm dịch vụ vào constructor như sau: public class MyPageModel : PageModel { private readonly MyService _myService; public MyPageModel(MyService myService) { _myService = myService; } public void OnGet() { _myService.DoSomething(); } } Sau đó, bạn cần thêm dịch vụ vào DI container trong Startup.cs. services.AddTransient<MyService>(); Điều này cho phép bạn sử dụng dịch vụ trong PageModel.

#033
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
.cshtmlĐÚNG
B.razor
C.aspx
D.html
Giải thích

Câu hỏi này yêu cầu bạn chọn file extension phù hợp cho các file Razor Page. Razor Page là một loại file trong ASP.NET Core, được sử dụng để tạo các trang web động. Câu trả lời đúng là .cshtml, vì nó là file extension tiêu chuẩn cho các file Razor Page. Các file .cshtml chứa mã C# và HTML, giúp tạo ra các trang web động phức tạp. Các file .razor cũng có thể được sử dụng, nhưng nó không phải là file extension mặc định. Các file .aspx và .html không phù hợp cho các file Razor Page.

#034
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy directly creating instances of dependencies.
By injecting dependencies into the PageModel constructor.ĐÚNG
CBy using global variables.
DBy using static methods.
Giải thích

Tùy thuộc vào Razor Pages, Dependency Injection thường được sử dụng bằng cách chèn các phụ thuộc vào constructor của PageModel. Điều này cho phép bạn tách biệt logic kinh doanh khỏi logic trang web, giúp dễ dàng bảo trì và mở rộng ứng dụng. Khi bạn sử dụng Dependency Injection, bạn có thể dễ dàng thay thế các phụ thuộc bằng các phiên bản mới hoặc các phiên bản khác mà không cần thay đổi mã nguồn của trang web. Điều này giúp tăng cường tính linh hoạt và khả năng mở rộng của ứng dụng.

#035
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA list of HTML helpers
A dictionary for passing data from PageModel to Razor PageĐÚNG
CA type of middleware
DA static variable shared by all pages
Giải thích

Trong Razor Pages, ViewData là một đối tượng được sử dụng để truyền dữ liệu từ PageModel sang Razor Page. Nó được định nghĩa là một dictionary, cho phép bạn lưu trữ và truy xuất dữ liệu một cách dễ dàng. Khi bạn muốn truyền dữ liệu từ PageModel sang Razor Page, bạn có thể sử dụng ViewData để lưu trữ dữ liệu và sau đó truy xuất nó trong Razor Page. Điều này giúp bạn có thể chia sẻ dữ liệu giữa các phần của ứng dụng một cách dễ dàng. Ví dụ, bạn có thể sử dụng ViewData để lưu trữ dữ liệu người dùng và sau đó sử dụng nó để hiển thị thông tin người dùng trên Razor Page.

#036
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo define a database connection.
To bind form data to a PageModel property.ĐÚNG
CTo encrypt data.
DTo manage user sessions.
Giải thích

Trong Razor Pages, [BindProperty] là một thuộc tính quan trọng giúp liên kết dữ liệu từ form với các thuộc tính của PageModel. Khi bạn sử dụng [BindProperty] trên một thuộc tính của PageModel, bạn có thể tự động liên kết dữ liệu từ form với thuộc tính đó. Điều này giúp giảm thiểu mã code và tăng hiệu suất khi xử lý dữ liệu từ form. Ví dụ, nếu bạn có một form với trường nhập tên và địa chỉ, bạn có thể sử dụng [BindProperty] để liên kết dữ liệu từ form với các thuộc tính tên và địa chỉ của PageModel. Điều này giúp bạn dễ dàng truy cập và xử lý dữ liệu từ form trong code-behind của trang Razor Pages.

#037
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AASP.NET pipeline
jQuery Unobtrusive ValidationĐÚNG
CSignalR
DAJAX by default
Giải thích

Trong Razor Pages, xác thực ở phía khách hàng được kích hoạt bằng cách sử dụng jQuery Unobtrusive Validation. Điều này cho phép thực hiện xác thực trên trình duyệt mà không cần phải gửi yêu cầu đến máy chủ. Để sử dụng tính năng này, bạn cần thêm thư viện jQuery Unobtrusive Validation vào dự án của mình. Sau đó, bạn có thể sử dụng các thuộc tính dữ liệu (data attributes) để chỉ định các quy tắc xác thực cho các trường nhập liệu. Khi người dùng nhập dữ liệu vào các trường này, trình duyệt sẽ tự động thực hiện xác thực và hiển thị thông báo lỗi nếu dữ liệu không hợp lệ. Điều này giúp cải thiện trải nghiệm người dùng và giảm tải cho máy chủ.

#038
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Don't Repeat Yourself (DRY)ĐÚNG
BMaximum Reuse
CProcedural Programming
DLoose Session Coupling
Giải thích

DI (Dependency Injection) trong Razor Pages nhấn mạnh nguyên tắc không lặp lại (Don't Repeat Yourself, DRY). Nguyên tắc này cho phép giảm thiểu sự lặp lại mã nguồn và tăng cường khả năng tái sử dụng. DI giúp bạn tách biệt các phụ thuộc và cung cấp chúng một cách linh hoạt, từ đó giảm thiểu sự lặp lại mã nguồn và tăng cường tính linh hoạt của ứng dụng. Điều này giúp bạn dễ dàng thay đổi hoặc cập nhật các phụ thuộc mà không ảnh hưởng đến các phần khác của ứng dụng.

#039
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AHandling real-time user interactions.
Performing scheduled tasks or background processing.ĐÚNG
CRendering web pages.
DManaging user authentication.
Giải thích

Một Worker Service là một loại ứng dụng trong hệ thống phân tán, được thiết kế để thực hiện các tác vụ nền hoặc xử lý dữ liệu trong nền. Nó thường được sử dụng để thực hiện các nhiệm vụ lặp đi lặp lại, như gửi email hàng ngày, cập nhật dữ liệu trên cơ sở dữ liệu, hoặc thực hiện các tác vụ khác mà không cần tương tác trực tiếp với người dùng. Trong trường hợp này, câu trả lời đúng là "Thực hiện các tác vụ lặp đi lặp lại hoặc xử lý dữ liệu trong nền".

#040
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy writing JavaScript functions.
By overriding the ExecuteAsync(CancellationToken) method in a class derived from BackgroundService.ĐÚNG
CBy using static HTML files.
DBy using database queries.
Giải thích

Để thực hiện một nhiệm vụ nền (background task) bằng cách sử dụng dịch vụ Worker, bạn cần tạo một lớp kế thừa từ BackgroundService. Lớp này sẽ chứa phương thức ExecuteAsync, nơi bạn thực hiện logic của nhiệm vụ nền. Phương thức này sẽ được gọi tự động bởi dịch vụ Worker khi nó được khởi tạo. Bạn cũng có thể sử dụng phương thức StartAsync để bắt đầu nhiệm vụ nền ngay lập tức. Ngoài ra, bạn có thể sử dụng các thuộc tính và phương thức khác của lớp BackgroundService để quản lý và giám sát nhiệm vụ nền.

#041
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo manage database transactions.
To allow the service to be gracefully stopped.ĐÚNG
CTo encrypt data.
DTo manage user sessions.
Giải thích

CancellationToken là một tham số quan trọng trong phương thức ExecuteAsync(CancellationToken) trong lập trình. Mục đích chính của tham số này là cho phép dịch vụ được dừng một cách êm ái (gracefully stopped) khi cần thiết. Điều này có nghĩa là khi dịch vụ cần được dừng lại, tham số CancellationToken sẽ được đặt thành trạng thái đã hủy (canceled), từ đó cho phép dịch vụ thực hiện các hành động cần thiết để dừng lại một cách an toàn và không gây ra lỗi. Ví dụ, dịch vụ có thể thoát khỏi các nguồn hệ thống, đóng các kết nối mạng, hoặc thực hiện các hành động khác cần thiết để dừng lại một cách êm ái. Mục đích của CancellationToken là đảm bảo rằng dịch vụ được dừng lại một cách an toàn và không gây ra lỗi khi cần thiết.

#042
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
The entry point for background execution.ĐÚNG
BThe constructor.
CA logging method.
DA thread initializer.
Giải thích

Trong mã nguồn C#, ExecuteAsync là phương thức được sử dụng để thực hiện các tác vụ nền (background tasks). Nó là phương thức được gọi khi một đối tượng thực hiện các tác vụ nền (background service) được tạo ra. Phương thức này được sử dụng để thực hiện các tác vụ nền một cách độc lập và không ảnh hưởng đến luồng chính của chương trình. Trong ví dụ trên, Worker là một lớp thực hiện các tác vụ nền và ExecuteAsync là phương thức được sử dụng để thực hiện các tác vụ nền này. Phương thức ExecuteAsync được gọi khi Worker được tạo ra và nó sẽ thực hiện các tác vụ nền một cách độc lập.

#043
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Processing queue messagesĐÚNG
BRunning Blazor UI
CDisplaying Razor Pages
DHosting REST APIs only
Giải thích

Các kịch bản phù hợp nhất cho Worker Services là các trường hợp xử lý hàng đợi (queue messages). Worker Services được thiết kế để chạy trong nền và xử lý các tác vụ lặp đi lặp lại, chẳng hạn như xử lý hàng đợi. Điều này giúp giảm tải cho ứng dụng web và cải thiện hiệu suất. Ngoài ra, Worker Services cũng có thể được sử dụng để chạy các tác vụ độc lập, chẳng hạn như gửi email hoặc thông báo. Tuy nhiên, các kịch bản như chạy UI Blazor, hiển thị Razor Pages hoặc chỉ hosting REST APIs không phù hợp với Worker Services vì chúng yêu cầu tương tác trực tiếp với người dùng hoặc yêu cầu hiển thị UI.

#044
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo handle HTTP requests.
To define the main logic of the background task.ĐÚNG
CTo manage database connections.
DTo define user interfaces.
Giải thích

Phương thức ExecuteAsync(CancellationToken) trong lớp BackgroundService có vai trò quan trọng trong việc định nghĩa logic chính của nhiệm vụ chạy nền. Phương thức này được gọi khi BackgroundService được khởi tạo và sẽ chạy liên tục cho đến khi ứng dụng bị dừng. Trong phương thức này, bạn có thể thực hiện các tác vụ như đọc dữ liệu từ cơ sở dữ liệu, xử lý dữ liệu, gửi thông báo, v.v. Mục đích chính của phương thức này là thực hiện các tác vụ nền mà không ảnh hưởng đến giao diện người dùng. Ví dụ, bạn có thể sử dụng phương thức này để gửi thông báo hàng ngày hoặc hàng giờ, hoặc để cập nhật dữ liệu trên cơ sở dữ liệu.

#045
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AAutomatically turning them into multi-threaded
Improving performance for I/O-bound operationsĐÚNG
CNever blocking a thread
DAlways running faster than synchronous code
Giải thích

Tính chất không đồng bộ trong lập trình giúp cải thiện ứng dụng bằng cách cải thiện hiệu suất cho các hoạt động I/O. Điều này có nghĩa là các ứng dụng có thể thực hiện các tác vụ I/O như đọc hoặc ghi file, gửi hoặc nhận dữ liệu mạng mà không phải chờ đợi kết quả. Điều này giúp ứng dụng không bị chậm lại và có thể xử lý nhiều tác vụ cùng một lúc. Tính chất không đồng bộ cũng giúp giảm thiểu việc sử dụng các tài nguyên hệ thống như CPU và bộ nhớ, từ đó cải thiện hiệu suất tổng thể của ứng dụng.

#046
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AAsQueryable()
BAsEnumerable()
AsParallel()ĐÚNG
DParallelQuery()
Giải thích

Để có thể sử dụng PLINQ (Parallel Language Integrated Query) trên một nguồn dữ liệu, bạn cần sử dụng phương thức mở rộng AsParallel(). Phương thức này cho phép thực hiện truy vấn song song trên dữ liệu, giúp tăng hiệu suất và tốc độ xử lý. AsParallel() thường được sử dụng trong các trường hợp cần xử lý dữ liệu lớn và phức tạp. Ví dụ, bạn có thể sử dụng nó để thực hiện các phép tính toán toán học trên một tập dữ liệu lớn, hoặc để thực hiện các truy vấn phức tạp trên một cơ sở dữ liệu lớn.

#047
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt always increases electricity consumption
It saves time and reduces costsĐÚNG
CIt restricts the use of multiple processors
DIt prevents the use of distributed resources
Giải thích

Tính toán song song (parallel computing) so với tính toán tuần tự (serial computing) có một số ưu điểm quan trọng. Một trong những lợi thế chính của tính toán song song là nó có thể xử lý nhiều nhiệm vụ cùng một lúc, nhờ đó tiết kiệm thời gian và giảm chi phí. Điều này đặc biệt hữu ích trong các ứng dụng đòi hỏi xử lý dữ liệu lớn, chẳng hạn như mô hình hóa khí hậu, phân tích dữ liệu lớn và các ứng dụng khoa học tính toán khác. Tính toán song song cũng cho phép tận dụng được sức mạnh của nhiều bộ xử lý, điều này có thể dẫn đến tốc độ xử lý nhanh hơn và hiệu suất cao hơn. Tuy nhiên, cần lưu ý rằng tính toán song song cũng có thể tiêu thụ nhiều điện năng hơn, nhưng lợi ích về thời gian và chi phí tiết kiệm có thể vượt trội.

#048
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIncreased CPU usage.
Improved responsiveness and reduced blocking.ĐÚNG
CSimplified debugging.
DReduced memory consumption.
Giải thích

Asynchronous lập trình là một kỹ thuật cho phép thực hiện nhiều tác vụ đồng thời mà không cần chờ đợi kết quả của từng tác vụ. Điều này giúp cải thiện phản hồi và giảm thiểu tình trạng bị chặn (blocking). Khi sử dụng lập trình đồng bộ, chương trình sẽ bị dừng lại chờ đợi kết quả của từng tác vụ, dẫn đến giảm hiệu suất và phản hồi chậm. Ngược lại, lập trình bất đồng bộ cho phép chương trình tiếp tục thực hiện các tác vụ khác trong khi chờ đợi kết quả, giúp cải thiện hiệu suất và phản hồi nhanh chóng. Điều này đặc biệt quan trọng trong các ứng dụng cần xử lý nhiều dữ liệu hoặc yêu cầu phản hồi nhanh chóng, chẳng hạn như các ứng dụng trò chơi, ứng dụng di động và các ứng dụng web phức tạp.

#049
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AToParallel()
BParallelize()
AsParallel()ĐÚNG
DRunParallel()
Giải thích

Trong PLINQ, phương thức nào chuyển đổi một truy vấn LINQ thành một truy vấn song song?

#050
—
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo execute a single task.
To wait for all provided tasks to complete.ĐÚNG
CTo cancel a task.
DTo create a new thread.
Giải thích

Mục đích của phương thức Task.WhenAll() là chờ đợi tất cả các nhiệm vụ được cung cấp để hoàn thành. Khi sử dụng phương thức này, bạn có thể chờ đợi cho đến khi tất cả các nhiệm vụ được thực hiện xong trước khi tiếp tục thực hiện các hành động tiếp theo. Điều này giúp đảm bảo rằng các nhiệm vụ được thực hiện đồng thời đều đã hoàn thành trước khi tiếp tục.