Tất cả câu hỏi

Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.

9.140/16.078 câuCòn 6.938
9121Which statements about Promises in Node.js are true?4 lựa chọnTrung bình67% trả lời đúng
AA Promise represents the eventual completion (or failure) of an asynchronous operation and its resulting value.
BPromises are used to handle synchronous operations.
CA Promise is in one of three states: pending, fulfilled, or rejected.
DPromises can only handle one asynchronous operation at a time.
Lời giải
Đáp án đúng gồm hai ý: "A Promise represents the eventual completion (or failure) of an asynchronous operation and its resulting value." và "A Promise is in one of three states: pending, fulfilled, or rejected.". Promise là đối tượng đại diện cho kết quả sẽ có trong tương lai của một thao tác bất đồng bộ: lúc tạo nó ở trạng thái pending, khi thao tác xong thì chuyển sang fulfilled kèm giá trị hoặc rejected kèm lý do lỗi, và đã chuyển rồi thì không đổi nữa; then, catch hay await dùng để nhận kết quả đó. "Promises are used to handle synchronous operations." sai vì mục đích của Promise là thao tác bất đồng bộ; bọc giá trị đồng bộ bằng Promise.resolve được nhưng không phải công dụng chính, và callback của then luôn chạy bất đồng bộ. "Promises can only handle one asynchronous operation at a time." sai vì có thể chạy nhiều Promise song song rồi gom chúng bằng Promise.all, Promise.allSettled hay Promise.race.
Mở trang câu hỏi này →
9122Which runtime environment allows JavaScript to run on the server side?4 lựa chọnDễ100% trả lời đúng
AAngular
BNodeJS
CReact
DVueJS
Lời giải
Đáp án đúng: "NodeJS". Node.js là môi trường chạy JavaScript ngoài trình duyệt, dựng trên engine V8 kèm thư viện libuv lo I/O bất đồng bộ và vòng lặp sự kiện, cung cấp các module như http, fs để viết máy chủ web; Express và NestJS đều chạy trên nó. "Angular" là framework giao diện của Google chạy trong trình duyệt để dựng ứng dụng một trang. "React" là thư viện dựng giao diện theo component, chạy ở trình duyệt; nó có thể render phía máy chủ nhưng khi đó chính Node.js mới là môi trường chạy. "VueJS" là framework giao diện kiểu tiến dần (progressive) cho phía client, không phải runtime phía máy chủ.
Mở trang câu hỏi này →
9123Which Node.js built-in module is used for creating servers?4 lựa chọnTrung bình67% trả lời đúng
Afs
Bhttp
Curl
Dnet
Lời giải
Đáp án đúng: "http". Module http có sẵn của Node.js cung cấp http.createServer, nhận một hàm xử lý với hai đối số req và res, trả về đối tượng server; gọi server.listen với số cổng thì máy chủ web bắt đầu nhận request. Express hay các framework khác cũng dựng trên module này. "fs" lo việc đọc ghi tệp và thư mục, không tạo máy chủ. "url" dùng để phân tích và dựng chuỗi URL, như tách pathname hay query, không lắng nghe kết nối. "net" thật ra cũng có net.createServer, nhưng nó tạo máy chủ TCP ở mức thấp, chỉ nhận luồng byte thô và không hiểu HTTP; module http được xây trên net để thêm phần phân tích request và response HTTP, nên khi nói tạo máy chủ cho ứng dụng web thì module được dùng là http.
Mở trang câu hỏi này →
9124Which an asynchronous method of fs module is used to check a file exists?4 lựa chọnTrung bình67% trả lời đúng
Afs.existsFile(filePath, function(exists) { . . . } );
Bfs.exists(filePath, function(exists) { . . . } );
Cfs.fileExists(filePath, function(exists) { . . . } );
Dfs.access(filePath, fs.constants.F_OK, (err) => {...});
Lời giải

Đáp án đúng: "

Lời giải
fs.access(filePath, fs.constants.F_OK, (err) => {
  ...
}

);". fs.access kiểm tra quyền truy cập của tiến trình tới một đường dẫn; truyền cờ fs.constants.F_OK nghĩa là chỉ hỏi tệp có tồn tại hay không, và callback nhận err (thường mang mã ENOENT) khi tệp không có, nhận null khi có, đúng quy ước lỗi trước (error-first) của Node.js. Chỗ dễ tranh cãi là "

Lời giải
fs.exists(filePath, function(exists) {
  . . .
}

);": đây cũng là hàm bất đồng bộ có thật, callback nhận một giá trị boolean, nhưng tài liệu Node.js đã đánh dấu nó deprecated (ngừng khuyên dùng) từ lâu chính vì callback không theo quy ước lỗi trước, và khuyên thay bằng fs.access hoặc fs.stat; vì vậy cách chuẩn hiện nay là fs.access. "

Lời giải
fs.existsFile(filePath, function(exists) {
  . . .
}

);" không tồn tại trong module fs. "

Lời giải
fs.fileExists(filePath, function(exists) {
  . . .
}

);" cũng là tên không có trong API, gọi sẽ báo lỗi không phải hàm.

Mở trang câu hỏi này →
Đề bài
new events.EventEmitter();
emitter.on('event', () => console.log('Event triggered'));
emitter.emit('event');
console.log('End');
AEvent triggered End
BEnd Event triggered
CTriggers the event but logs nothing due to timing
DOnly 'End' if event not emitted properly
Lời giải
Khi chạy mã Node.js này, chúng ta sẽ thấy hai dòng được in ra console. Đầu tiên là 'Event triggered' do sự kiện được kích hoạt và sau đó là 'End'. Điều này xảy ra vì chúng ta đã sử dụng phương thức emitter.on để lắng nghe sự kiện 'event' và phương thức emitter.emit để kích hoạt sự kiện này. Khi sự kiện được kích hoạt, hàm console.log('Event triggered') được thực thi và in ra 'Event triggered' vào console. Sau đó, chương trình tiếp tục thực thi dòng console.log('End') và in ra 'End'. Vì vậy, kết quả cuối cùng khi chạy mã này sẽ là 'Event triggered End'.
Mở trang câu hỏi này →
9126In Node.js, which function is used to read a file asynchronously?4 lựa chọnTrung bình67% trả lời đúng
Afs.readFileSync()
Bfs.readFile()
Cfs.open()
Dfs.load()
Lời giải
Đáp án đúng: "fs.readFile()". Hàm fs.readFile đọc toàn bộ nội dung tệp theo kiểu bất đồng bộ: nó giao việc đọc cho hệ thống bên dưới rồi trả quyền điều khiển ngay, khi đọc xong mới gọi callback với hai đối số err và data; nhờ vậy vòng lặp sự kiện (event loop) không bị chặn và máy chủ vẫn phục vụ request khác. Bản dùng Promise là fs.promises.readFile đi kèm await. "fs.readFileSync()" cũng đọc tệp nhưng đồng bộ, chặn cả tiến trình cho tới khi đọc xong và trả nội dung trực tiếp, nên không phải câu trả lời. "fs.open()" cũng bất đồng bộ nhưng chỉ mở tệp và trả về file descriptor, muốn lấy nội dung còn phải gọi thêm fs.read. "fs.load()" không tồn tại trong module fs của Node.js.
Mở trang câu hỏi này →
AOne service publishes an event to a message queue, and another service subscribes to it.
BService A makes a direct HTTP (e.g., REST or gRPC) call to Service B and waits for an immediate response.
CService A sends an email notification.
DService B processes a batch job overnight based on data from Service A.
Lời giải
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.
Mở trang câu hỏi này →
ATightly coupled modules
BIndependent deployment and scalability
CSingle technology stack only
DReduced system complexity
Lời giải
Microservices cung cấp nhiều lợi ích quan trọng, nhưng một trong những lợi ích chính là tính độc lập trong việc triển khai và mở rộng. Với kiến trúc Microservices, mỗi module được thiết kế và triển khai độc lập, cho phép mỗi module được mở rộng và sửa chữa mà không ảnh hưởng đến các module khác. Điều này giúp tăng cường độ linh hoạt và khả năng thích nghi của hệ thống, cũng như giảm thiểu rủi ro khi triển khai các thay đổi. Ngoài ra, tính độc lập trong triển khai và mở rộng cũng giúp giảm thiểu thời gian và chi phí cần thiết để triển khai các thay đổi, vì mỗi module có thể được triển khai và mở rộng độc lập.
Mở trang câu hỏi này →
9129Which of the following is a key attribute of a microservice?4 lựa chọnKhó0% trả lời đúng
AIt must be written in C#.
BIt is independently deployable and scalable.
CIt shares its database with many other services to ensure data consistency.
DIt contains the logic for the entire application.
Lời giải
Một trong những đặc điểm quan trọng của một microservice là tính độc lập trong việc triển khai và mở rộng. Điều này có nghĩa là mỗi microservice có thể được triển khai và mở rộng độc lập mà không ảnh hưởng đến các microservice khác. Điều này cho phép các microservice được thiết kế và triển khai theo cách linh hoạt và hiệu quả hơn. Ví dụ, nếu một microservice đang gặp vấn đề, nó có thể được sửa chữa hoặc thay thế mà không ảnh hưởng đến các microservice khác. Tính độc lập trong triển khai và mở rộng cũng cho phép các microservice được triển khai trên các nền tảng khác nhau, chẳng hạn như trên cloud hoặc trên máy chủ riêng. Điều này giúp tăng cường tính linh hoạt và hiệu suất của hệ thống.
Mở trang câu hỏi này →
AA single, large application that handles all business logic in one deployable unit.
BAn architectural style that structures an application as a collection of small, independently deployable services organized around business capabilities.
CA client-side framework for building single-page applications.
DA database design pattern for sharding data across multiple servers.
Lời giải
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.
Mở trang câu hỏi này →
9131Which is often used as an API Gateway in a Microservices architecture?4 lựa chọnKhó25% trả lời đúng
AIIS Express
BOcelot
CKestrel
DEntity Framework
Lời giải
Trong kiến trúc Microservices, API Gateway đóng vai trò là điểm truy cập chính để giao tiếp với các dịch vụ micro. Ocelot là một trong những lựa chọn phổ biến để sử dụng làm API Gateway. Nó cung cấp các tính năng như cân bằng tải, bảo mật, và phân phối yêu cầu đến các dịch vụ micro khác nhau. Ocelot cũng cho phép cấu hình linh hoạt và dễ dàng tích hợp với các dịch vụ khác nhau. Ngoài ra, Ocelot cũng hỗ trợ các giao thức như HTTP/1.1, WebSockets và gRPC. Vì vậy, Ocelot là một lựa chọn tốt để sử dụng làm API Gateway trong kiến trúc Microservices.
Mở trang câu hỏi này →
AIt increases the loose coupling between services.
BIt improves the overall fault tolerance of the system.
CIt creates runtime coupling, meaning if a downstream service is slow or unavailable, the calling service may be blocked or fail.
DIt is not supported by modern frameworks like ASP.NET Core.
Lời giải
Sử dụng giao tiếp đồng bộ hoàn toàn trong kiến trúc microservice có một nhược điểm chính. Khi một dịch vụ downstream chậm hoặc không khả dụng, dịch vụ gọi sẽ bị chặn hoặc thất bại. Điều này xảy ra vì giao tiếp đồng bộ yêu cầu dịch vụ gọi phải chờ phản hồi từ dịch vụ downstream trước khi tiếp tục thực hiện. Nếu dịch vụ downstream chậm hoặc không khả dụng, dịch vụ gọi sẽ bị ảnh hưởng và có thể bị chặn hoặc thất bại. Điều này làm giảm hiệu suất và độ tin cậy của hệ thống. Ngoài ra, giao tiếp đồng bộ cũng làm tăng độ phức tạp của hệ thống và khó khăn hơn trong việc quản lý và bảo trì.
Mở trang câu hỏi này →
AVirtual Machines (VMs)
BDocker
CWebDeploy
DFTP
Lời giải
Để đóng gói một microservice ASP.NET Core thành một container cho việc triển khai, công nghệ được sử dụng phổ biến nhất là Docker. Docker cho phép tạo ra một môi trường ảo hóa (container) độc lập, giúp đảm bảo ứng dụng chạy ổn định và không bị ảnh hưởng bởi môi trường hệ thống. Mỗi container có thể chứa một ứng dụng độc lập, cùng với tất cả các phụ thuộc và cấu hình cần thiết. Điều này giúp dễ dàng triển khai và quản lý các ứng dụng microservice trên nhiều môi trường khác nhau. Ngoài ra, Docker cũng hỗ trợ các tính năng như tự động hóa xây dựng, phân phối và giám sát ứng dụng, giúp tăng hiệu suất và giảm thiểu thời gian triển khai.
Mở trang câu hỏi này →
ADatabase
BShared configuration file
CMonolithic deployment
DUI layer
Lời giải
Trong mô hình Microservices, mỗi dịch vụ thường có cơ sở dữ liệu riêng. Điều này cho phép mỗi dịch vụ có thể được thiết kế và triển khai độc lập, mà không cần phải phụ thuộc vào các dịch vụ khác. Mỗi dịch vụ có thể sử dụng cơ sở dữ liệu phù hợp với nhu cầu của nó, giúp tăng cường khả năng mở rộng và độ tin cậy của hệ thống. Ngoài ra, việc sử dụng cơ sở dữ liệu riêng cho mỗi dịch vụ cũng giúp giảm thiểu tác động của lỗi hoặc sự cố đối với các dịch vụ khác.
Mở trang câu hỏi này →
9135In a typical microservice architecture, what is the role of an "API Gateway"?4 lựa chọnDễ100% trả lời đúng
AIt is the database used by all microservices.
BIt is a single entry point for all client requests, routing them to the appropriate downstream microservice and potentially handling cross-cutting concerns like authentication and SSL termination.
CIt is a tool for developers to test their services locally.
DIt is a message broker for asynchronous communication.
Lời giải
Trong kiến trúc microservice thông thường, vai trò của "API Gateway" là điểm truy cập duy nhất cho tất cả các yêu cầu từ khách hàng, chuyển hướng chúng đến microservice downstream phù hợp và có thể xử lý các vấn đề xuyên suốt như xác thực và kết thúc SSL. API Gateway đóng vai trò như một cầu nối giữa khách hàng và các microservice, giúp phân phối và quản lý các yêu cầu một cách hiệu quả. Nó cũng có thể xử lý các vấn đề như bảo mật, giám sát và phân tích dữ liệu, giúp tăng cường tính bảo mật và hiệu suất của hệ thống. Việc sử dụng API Gateway giúp giảm thiểu sự phức tạp và tăng cường khả năng mở rộng của hệ thống.
Mở trang câu hỏi này →
9136What is a primary advantage of using Protocol Buffers (Protobuf) over JSON?4 lựa chọnDễ100% trả lời đúng
AProtobuf is a human-readable text format, making it easier to debug.
BProtobuf uses a binary serialization format, which is typically smaller and faster to parse than text-based JSON.
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.
Lời giải
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.
Mở trang câu hỏi này →
9137What is a "channel" in gRPC?4 lựa chọn
AThe service implementation on the server.
BThe generated client-side code.
CA long-lived connection to a gRPC service, which can be reused for multiple calls.
DA specific type of streaming method.
Lời giải
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.
Mở trang câu hỏi này →
9138What is "Server Push" in HTTP/2?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.
CThe ability for the server to send resources to the client that it anticipates the client will need, without the client explicitly requesting them.
DA mechanism for streaming video content.
Lời giải
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.
Mở trang câu hỏi này →
9139What does gRPC stand for?4 lựa chọn
AGoogle RESTful Procedure Calls
BgRPC Remote Procedure Calls (a recursive acronym)
CGeneral Routing and Procedure-Calling
DGraph-based Procedure Calls
Lời giải
gRPC là một framework được sử dụng để xây dựng các ứng dụng phân tán. Nó cho phép các ứng dụng giao tiếp với nhau qua các cuộc gọi thủ tục. gRPC Remote Procedure Calls (RPC) là một trong những tính năng chính của gRPC. Nó cho phép các ứng dụng gọi các thủ tục trên các máy chủ khác nhau và nhận lại kết quả. gRPC sử dụng giao thức HTTP/2 để truyền tải dữ liệu và cho phép các ứng dụng giao tiếp với nhau một cách hiệu quả. gRPC Remote Procedure Calls (a recursive acronym) là tên chính thức của gRPC, nó được thiết kế để cho phép các ứng dụng giao tiếp với nhau một cách hiệu quả và linh hoạt.
Mở trang câu hỏi này →
Apublic override Task<HelloReply> SayHello(HelloRequest request)
Bpublic virtual HelloReply SayHello(HelloRequest request, ServerCallContext context)
Cpublic override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
Dpublic Task SayHello(HelloRequest request, HelloReply reply)
Lời giải

Để thực hiện SayHello RPC, bạn phải ghi đè phương thức nào trong lớp dịch vụ C# của mình? Trong khi xây dựng một dịch vụ RPC, bạn cần phải ghi đè phương thức SayHello để thực hiện chức năng này. Phương thức SayHello phải được ghi đè với các thuộc tính sau: - Nó phải là phương thức override (ghi đè) để đảm bảo rằng nó được gọi khi có yêu cầu RPC. - Nó phải có kiểu trả về là Task<HelloReply> để đảm bảo rằng phương thức này trả về một kết quả. - Nó phải có tham số đầu vào là HelloRequest request để nhận yêu cầu từ client. - Nó phải có tham số thứ hai là ServerCallContext context để có thể truy cập vào thông tin về cuộc gọi RPC. Vì vậy, phương thức SayHello phải được ghi đè như sau:

Lời giải
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
Mở trang câu hỏi này →