Thi lại · PRN222 · Spring 2026

Ôn tập thi lại PRN222 Spring 2026

50 câu gom từ 1 đề ôn của kỳ Spring 2026.

Đề gốc

Bấm để làm trọn một đề thay vì tra từng câu

50 câu hỏi

Trang 2 / 3
AOnly for the duration of an HTTP request.
BUntil the application is manually stopped.
COnly for the duration of a database transaction.
DOnly for the duration of a user session.
Lời giải
Một Worker Service trong ASP.NET Core là một loại ứng dụng web không tương tác, chạy nền và không có giao diện người dùng. Nó được sử dụng để thực hiện các tác vụ lặp đi lặp lại, chẳng hạn như gửi email, cập nhật dữ liệu 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 với người dùng. Thời gian tồn tại của một Worker Service thường kéo dài cho đến khi ứng dụng được dừng lại thủ công. Điều này có nghĩa là Worker Service sẽ tiếp tục chạy cho đến khi ứng dụng được dừng lại hoặc bị lỗi. Điều này cho phép Worker Service thực hiện các tác vụ lặp đi lặp lại mà không cần phải khởi động lại sau mỗi lần thực hiện.
Mở trang câu hỏi này →
ATo manage database connections.
BTo send messages to connected clients.
CTo encrypt data.
DTo manage user sessions.
Lời giải
Mục đích của đối tượng Clients trong một hub SignalR là để quản lý các kết nối với các khách hàng đã kết nối. Đối tượng này cho phép bạn gửi tin nhắn đến các khách hàng cụ thể hoặc tất cả khách hàng đã kết nối. Điều này giúp bạn có thể tương tác với các khách hàng một cách linh hoạt và hiệu quả. Ví dụ, bạn có thể sử dụng đối tượng Clients để gửi thông báo đến tất cả khách hàng khi có một sự kiện xảy ra. Ngoài ra, bạn cũng có thể sử dụng nó để gửi tin nhắn riêng tư đến một khách hàng cụ thể. Tóm lại, đối tượng Clients là một công cụ quan trọng trong SignalR giúp bạn quản lý và tương tác với các khách hàng một cách hiệu quả.
Mở trang câu hỏi này →
AConstructor Injection
BProperty Injection
CMethod Injection
DAmbient Context
Lời giải
Mẫu thiết kế DI (Dependency Injection) cung cấp tùy chọn phụ thuộc là Property Injection. Trong Property Injection, phụ thuộc được cung cấp cho đối tượng thông qua thuộc tính của nó. Điều này cho phép phụ thuộc được cung cấp một cách linh hoạt và có thể được thay đổi trong thời gian chạy. Điều này đặc biệt hữu ích khi cần phải cung cấp phụ thuộc tùy thuộc vào tình huống cụ thể hoặc môi trường cụ thể. Ví dụ, một đối tượng có thể được thiết kế để sử dụng một cơ sở dữ liệu cụ thể trong môi trường sản xuất nhưng sử dụng một cơ sở dữ liệu khác trong môi trường thử nghiệm. Property Injection cho phép thực hiện điều này một cách dễ dàng và linh hoạt.
Mở trang câu hỏi này →
How many tasks does the following code create?4 lựa chọncó code
Đề bài
for (int i = 0; i < 3; i++) {
  Task t = new Task(() => Console.WriteLine(i));
  t.Start();
}
A1
B2
C3
D6
Lời giải
Mã nguồn trên tạo ra 3 nhiệm vụ. Khi sử dụng vòng lặp for để tạo ra các nhiệm vụ, mỗi lần lặp sẽ tạo ra một nhiệm vụ mới. Trong trường hợp này, mã nguồn sẽ lặp 3 lần, tạo ra 3 nhiệm vụ. Tuy nhiên, cần lưu ý rằng mỗi nhiệm vụ sẽ thực hiện một hành động tương tự, đó là in ra giá trị của biến i. Do đó, mặc dù có 3 nhiệm vụ nhưng giá trị in ra sẽ chỉ là 0, 1 và 2 lần lượt trong 3 nhiệm vụ đầu tiên. Nhiệm vụ thứ 4 sẽ không được tạo ra vì điều kiện vòng lặp là i < 3.
Mở trang câu hỏi này →
AaddToGroup()
BgroupAdd()
CGroups.AddToGroupAsync()
DaddClientToGroup()
Lời giải
Để thêm một khách hàng vào một nhóm SignalR, bạn cần sử dụng phương thức Groups.AddToGroupAsync(). Phương thức này cho phép bạn thêm một khách hàng vào một nhóm đã tồn tại. Bạn có thể sử dụng nó trong một ứng dụng SignalR để quản lý các nhóm và khách hàng. Ví dụ, bạn có thể sử dụng nó để thêm một khách hàng vào một nhóm khi họ đăng ký hoặc khi họ thực hiện một hành động cụ thể. Phương thức này rất hữu ích khi bạn cần quản lý các nhóm và khách hàng trong ứng dụng của mình.
Mở trang câu hỏi này →
AHandleGet(), HandlePost()
BOnGet(), OnPost()
CGetHandler(), PostHandler()
DProcessGet(), ProcessPost()
Lời giải
Trong Razor Pages, phương thức xử lý (handler method) thường được đặt tên theo quy tắc sau: phương thức xử lý cho hành động GET được đặt tên là OnGet(), phương thức xử lý cho hành động POST được đặt tên là OnPost(). Ví dụ, nếu bạn muốn tạo một trang Razor Pages để hiển thị dữ liệu khi người dùng truy cập trang đó bằng cách sử dụng GET, bạn sẽ tạo một phương thức OnGet() để xử lý yêu cầu này. Tương tự, nếu bạn muốn tạo một trang để xử lý dữ liệu khi người dùng gửi yêu cầu POST, bạn sẽ tạo một phương thức OnPost() để xử lý yêu cầu này. Quy tắc đặt tên này giúp cho việc viết mã và đọc mã trở nên dễ dàng hơn.
Mở trang câu hỏi này →
Aawait task;
Btask.Wait();
Ctask.ContinueWith(...)
Dawait Task.WhenAll(tasks);
Lời giải

Để trả lời câu hỏi này, chúng ta cần hiểu về cách sử dụng các phương thức chờ đợi (wait) trong lập trình đa luồng. Trong lập trình đa luồng, các phương thức chờ đợi được sử dụng để ngăn chặn luồng hiện tại (thread) thực hiện các tác vụ khác cho đến khi một tác vụ cụ thể được hoàn thành. Có hai phương thức chờ đợi được sử dụng trong câu hỏi này: await task; và task.Wait();. await task; là một phương thức chờ đợi non-bloc (non-blocking), nó cho phép luồng hiện tại thực hiện các tác vụ khác trong khi chờ đợi tác vụ được chờ đợi được hoàn thành. Điều này có nghĩa là nếu có nhiều tác vụ được chờ đợi, luồng hiện tại sẽ không bị chặn. task.Wait(); là một phương thức chờ đợi bloc (blocking), nó sẽ ngăn chặn luồng hiện tại thực hiện các tác vụ khác cho đến khi tác vụ được chờ đợi được hoàn thành. Điều này có nghĩa là nếu có nhiều tác vụ được chờ đợi, luồng hiện tại sẽ bị chặn. task.ContinueWith(...) và await Task.WhenAll(tasks); không phải là phương thức chờ đợi, mà là các phương thức được sử dụng để thực hiện các tác vụ khác khi một tác vụ được chờ đợi được hoàn thành hoặc khi tất cả các tác vụ được chờ đợi được hoàn thành. Tóm lại, để trả lời câu hỏi này, chúng ta cần hiểu về cách sử dụng các phương thức chờ đợi non-bloc và bloc trong lập trình đa luồng.

Mở trang câu hỏi này →
ARequires .NET runtime installed on the client
BLarger initial download size
CNo component model
DNo data binding support
Lời giải
Blazor WebAssembly là một công nghệ phát triển ứng dụng web sử dụng mã nguồn mở .NET. Mặc dù nó mang lại nhiều lợi ích, nhưng cũng có một số nhược điểm. Một trong những nhược điểm chính của Blazor WebAssembly là kích thước tải về ban đầu lớn hơn so với các công nghệ khác. Điều này có thể gây khó khăn cho người dùng có kết nối internet chậm hoặc thiết bị có bộ nhớ hạn chế. Ngoài ra, kích thước lớn của Blazor WebAssembly cũng có thể ảnh hưởng đến hiệu suất của ứng dụng. Tuy nhiên, cần lưu ý rằng kích thước tải về ban đầu có thể được giảm thiểu bằng cách sử dụng các công nghệ như mã hóa và nén.
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
IHubContext là một giao diện quan trọng trong ASP.NET Core SignalR, cho phép bạn gửi tin nhắn từ bên ngoài một lớp trung tâm (hub class). Điều này cho phép bạn tương tác với các phương thức trong lớp trung tâm từ các lớp khác, giúp tăng tính linh hoạt và khả năng mở rộng của ứng dụng. Khi sử dụng IHubContext, bạn có thể gửi tin nhắn đến các khách hàng (clients) đã kết nối với lớp trung tâm, giúp cập nhật trạng thái hoặc thực hiện các hành động khác. Điều này đặc biệt hữu ích khi bạn cần tương tác với lớp trung tâm từ các lớp khác trong ứng dụng.
Mở trang câu hỏi này →
What are Hub filters in SignalR?4 lựa chọn
ADatabase query filters.
BMiddleware components that can intercept and modify hub method invocations.
CCSS style filters.
DJavaScript event filters.
Lời giải
Trong SignalR, Hub filters là các thành phần trung gian có thể chặn và sửa đổi các phương thức hub. Chúng cho phép bạn thực hiện các hành động trước và sau khi gọi phương thức hub, chẳng hạn như xác thực người dùng, kiểm tra quyền truy cập, hoặc thậm chí là thay đổi dữ liệu được gửi qua mạng. Hub filters hoạt động như các lớp trung gian giữa các phương thức hub và các phương thức thực thi, cho phép bạn tách biệt logic kinh doanh khỏi logic mạng. Điều này giúp bạn dễ dàng quản lý và bảo trì các ứng dụng SignalR phức tạp hơn.
Mở trang câu hỏi này →
ATo create dependencies inside a class
BTo remove hard-coded dependencies
CTo increase code complexity
DTo avoid using interfaces
Lời giải
Dependency Injection (DI) là một kỹ thuật lập trình giúp giảm sự phụ thuộc giữa các lớp hoặc mô-đun trong một ứng dụng. Mục đích chính của DI là loại bỏ các phụ thuộc cứng (hard-coded dependencies) giữa các lớp, giúp tăng tính linh hoạt và dễ dàng bảo trì của ứng dụng. Khi sử dụng DI, bạn có thể dễ dàng thay thế các phụ thuộc bằng các implementation khác nhau mà không cần phải thay đổi mã nguồn của lớp sử dụng phụ thuộc. Điều này giúp giảm sự phức tạp và tăng tính tái sử dụng của mã nguồn. Ngoài ra, DI cũng giúp giảm sự phụ thuộc vào các framework hoặc thư viện cụ thể, giúp ứng dụng trở nên dễ dàng di chuyển sang các nền tảng khác nhau.
Mở trang câu hỏi này →
ACore i3
BXeon server processors
CPentium 4
DCore i7
Lời giải
Công nghệ Hyper-Threading được giới thiệu lần đầu tiên trong các loại vi xử lý Xeon server processors. Công nghệ này cho phép mỗi lõi xử lý có thể thực hiện nhiều luồng xử lý cùng một lúc, giúp tăng hiệu suất và khả năng đa nhiệm của hệ thống. Xeon server processors là loại vi xử lý được thiết kế cho các máy chủ và hệ thống server, và công nghệ Hyper-Threading được sử dụng để tăng cường hiệu suất và khả năng xử lý dữ liệu của chúng. Điều này giúp các hệ thống server có thể xử lý nhiều tác vụ cùng một lúc, tăng cường hiệu suất và giảm thời gian chờ đợi.
Mở trang câu hỏi này →
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
Lớp IServiceProvider là một giao diện quan trọng trong mô hình Dependency Injection (DI). Mục đích chính của giao diện này là cung cấp một cách thức để giải quyết các dịch vụ đã được đăng ký trong container DI. Khi một ứng dụng sử dụng mô hình DI, nó sẽ đăng ký các dịch vụ cần thiết vào container. Sau đó, khi ứng dụng cần sử dụng một dịch vụ, nó sẽ sử dụng giao diện IServiceProvider để giải quyết dịch vụ đó từ container. Điều này giúp ứng dụng trở nên linh hoạt và dễ dàng quản lý các dịch vụ của mình.
Mở trang câu hỏi này →
AA combination of Controller and ViewModel
BA replacement for HTML
CAn Entity Framework class
DA database entity
Lời giải
PageModel trong Razor Pages được mô tả tốt nhất là một sự kết hợp giữa Controller và ViewModel. Nó chứa các thuộc tính và phương thức để xử lý dữ liệu và giao diện người dùng. PageModel thừa hưởng từ PageModelBase và có thể được sử dụng để tạo ra các trang web động. Nó cho phép bạn tách biệt logic kinh doanh và giao diện người dùng, giúp dễ dàng bảo trì và mở rộng ứng dụng. PageModel cũng cung cấp các tính năng như validation, authorization và caching, giúp bạn có thể xây dựng các ứng dụng web mạnh mẽ và hiệu quả.
Mở trang câu hỏi này →
ATo define a database connection.
BTo declare that the file is a Razor Page.
CTo encrypt data.
DTo manage user sessions.
Lời giải
Mục đích của chỉ thị @page ở đầu trang Razor Page là để xác định trang web đó là một trang Razor Page. Khi bạn tạo một trang Razor Page mới, bạn sẽ thấy một dòng mã ở đầu trang như sau: @page. Chỉ thị này cho biết trang đó được tạo dựa trên mô hình Razor Page và có thể chứa các yếu tố như layout, model, view, v.v. Nó giúp cho trình biên dịch biết cách xử lý trang đó và cung cấp các tính năng như layout động, model động, v.v. Ngoài ra, chỉ thị @page cũng giúp cho trình biên dịch xác định các trang Razor Page khác nhau và tránh nhầm lẫn giữa chúng.
Mở trang câu hỏi này →
ATempData
BApplication Variables
CHibernate
DCookies
Lời giải
Razor Pages cung cấp một số cách quản lý trạng thái, bao gồm TempData, Application Variables và Cookies. Tuy nhiên, Hibernate không phải là một trong những cách được hỗ trợ. Hibernate là một framework quản lý trạng thái trong các ứng dụng web, nhưng nó không được tích hợp trực tiếp vào Razor Pages. Thay vào đó, các nhà phát triển có thể sử dụng các cách quản lý trạng thái khác như TempData, Application Variables và Cookies để quản lý dữ liệu trong ứng dụng.
Mở trang câu hỏi này →
APhysically transfer files between computers
BIdentify a resource on the internet or LAN
CEncrypt data during transmission
DDefine network hardware speed
Lời giải
Một URI (Uniform Resource Identifier) chủ yếu được sử dụng để xác định một tài nguyên trên internet hoặc mạng LAN. Nó cung cấp một cách duy nhất để truy cập và tham chiếu đến tài nguyên này. Ví dụ, một URI có thể được sử dụng để truy cập một trang web, một tệp tin hoặc một dịch vụ mạng. URI giúp người dùng và máy tính xác định vị trí và tính chất của tài nguyên, từ đó có thể thực hiện các hành động như tải xuống, xem hoặc sử dụng tài nguyên đó. Trong khi các lựa chọn khác như truyền tệp tin, mã hóa dữ liệu và định nghĩa tốc độ mạng hardware không liên quan trực tiếp đến chức năng chính của URI.
Mở trang câu hỏi này →
AAMVC and MVVM
BBlazor Server and Blazor WebAssembly
CREST and SOAP
DSignalR and gRPC
Lời giải
Blazor hỗ trợ hai mô hình hosting chính là Blazor Server và Blazor WebAssembly. Blazor Server là mô hình hosting chạy ứng dụng Blazor trên máy chủ, giúp giảm tải công việc xử lý trên máy khách. Trong khi đó, Blazor WebAssembly là mô hình hosting chạy ứng dụng Blazor trên máy khách, giúp tăng tốc độ tải trang và cải thiện trải nghiệm người dùng. Cả hai mô hình hosting đều có ưu và nhược điểm riêng, nhưng đều hỗ trợ xây dựng ứng dụng web động và tương tác cao.
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
Để xử lý các thiết lập cấu hình trong một Worker Service, bạn có thể sử dụng file appsettings.json và dependency injection. File appsettings.json được sử dụng để lưu trữ các giá trị cấu hình dưới dạng key-value, trong khi dependency injection giúp bạn có thể dễ dàng inject các giá trị cấu hình vào các lớp của ứng dụng. Điều này giúp bạn có thể dễ dàng quản lý và thay đổi các thiết lập cấu hình mà không cần phải sửa đổi mã nguồn của ứng dụng. Ngoài ra, sử dụng appsettings.json và dependency injection còn giúp bạn có thể dễ dàng phân chia và quản lý các giá trị cấu hình giữa các môi trường khác nhau, chẳng hạn như môi trường phát triển, thử nghiệm và sản xuất.
Mở trang câu hỏi này →
What is a Blazor Component?4 lựa chọn
AA database query.
BA reusable UI element written in C# and HTML.
CA JavaScript function.
DA network protocol.
Lời giải
Một Blazor Component là một phần tử UI có thể tái sử dụng được viết bằng C# và HTML. Nó cho phép bạn tạo ra các phần tử UI độc lập có thể được sử dụng lại trong nhiều trang web khác nhau. Các component có thể chứa logic kinh doanh, giao diện người dùng và dữ liệu, giúp bạn tạo ra các ứng dụng web phức tạp và dễ dàng bảo trì. Ví dụ, bạn có thể tạo ra một component để hiển thị thông tin về một sản phẩm, và sau đó sử dụng component đó trên nhiều trang web khác nhau. Điều này giúp giảm thiểu mã nguồn và tăng cường tính linh hoạt của ứng dụng.
Mở trang câu hỏi này →
Đi tiếp từ đây