Câu hỏi: PRM393 - REST API và JSON
31 câu trắc nghiệm kèm lời giải của môn Lập trình di động (Flutter) - Mobile Programming, xếp theo thứ tự nhập vào ngân hàng. Trang 2/2 — câu 21–31.
Danh sách câu hỏi
31/31 câuHết danh sách
AThey are the same
BReload never works
CRestart only changes the theme color
DRestart restarts the Dart isolate—state is lost; Reload tries to keep state
Lời giải
Mở trang câu hỏi này →Hot Restart và Hot Reload là hai tính năng giúp bạn nhanh chóng thử nghiệm và phát triển ứng dụng Flutter mà không cần phải khởi động lại ứng dụng. Tuy nhiên, có một số khác biệt giữa hai tính năng này. Hot Restart cho phép bạn nhanh chóng thử nghiệm và phát triển ứng dụng mà không cần phải khởi động lại ứng dụng. Khi bạn sử dụng Hot Restart, ứng dụng sẽ được khởi động lại nhưng trạng thái của ứng dụng sẽ bị mất. Điều này có nghĩa là bất kỳ trạng thái nào mà người dùng đã lưu trữ trong ứng dụng sẽ bị mất khi bạn sử dụng Hot Restart. Hot Reload, mặt khác, cho phép bạn nhanh chóng thử nghiệm và phát triển ứng dụng mà không cần phải khởi động lại ứng dụng. Khi bạn sử dụng Hot Reload, trạng thái của ứng dụng sẽ được giữ lại. Điều này có nghĩa là bất kỳ trạng thái nào mà người dùng đã lưu trữ trong ứng dụng sẽ được giữ lại khi bạn sử dụng Hot Reload. Vì vậy, sự khác biệt chính giữa Hot Restart và Hot Reload là Hot Restart sẽ khởi động lại ứng dụng và mất trạng thái, trong khi Hot Reload sẽ giữ trạng thái của ứng dụng.
AIt creates a stream that can be listened to by multiple subscribers simultaneously.
BIt forces a child to fill the remaining available space in the main axis.
CIt provides a default value if the expression on its left is null.
DIt builds itself based on the latest snapshot of interaction with a Future.
Lời giải
Mở trang câu hỏi này →FutureBuilder là một widget trong Flutter được sử dụng để xây dựng một widget dựa trên kết quả của một Future. Future là một đối tượng có thể được sử dụng để thực hiện một hành động nền, chẳng hạn như tải dữ liệu từ mạng hoặc thực hiện một tác vụ phức tạp. Khi Future được thực hiện, nó sẽ trả về một giá trị hoặc một lỗi. FutureBuilder sẽ sử dụng giá trị này để xây dựng một widget mới. Điều này cho phép bạn xây dựng một widget động dựa trên kết quả của một Future. Ví dụ, bạn có thể sử dụng FutureBuilder để tải dữ liệu từ mạng và sau đó xây dựng một widget để hiển thị dữ liệu đó.
A`dart:convert`
B`package:http/http.dart`
C`flutter/material.dart`
D`dart:io` only
Lời giải
Mở trang câu hỏi này →Thư viện nào cung cấp hàm `jsonEncode` / `jsonDecode`?
AService Layer pattern
BAn authentication token.
CFirebase Authentication
Dint and double
Lời giải
Mở trang câu hỏi này →Mẫu thiết kế UI sử dụng một lớp controller duy nhất để xử lý logic kinh doanh và trạng thái, như trong nhiệm vụ ApiService của Lab 8. Mẫu thiết kế này thường được sử dụng để tách rời logic kinh doanh khỏi lớp trình bày, giúp dễ dàng bảo trì và mở rộng hệ thống. Trong ví dụ này, lớp ApiService đóng vai trò là lớp controller duy nhất chịu trách nhiệm xử lý logic kinh doanh và trạng thái, giúp phân tách logic kinh doanh khỏi lớp trình bày.
ANo problem
BEach rebuild may repeat the API call
C`FutureBuilder` does not exist
DCompile error
Lời giải
Mở trang câu hỏi này →Khi sử dụng `FutureBuilder` để xây dựng giao diện người dùng, việc tạo một `Future` mới trong mỗi lần rebuild có thể dẫn đến việc gọi API nhiều lần. Điều này có thể gây ra vấn đề hiệu suất và thậm chí là lỗi ứng dụng. Khi bạn tạo một `Future` mới trong mỗi lần rebuild, ứng dụng sẽ gọi API để lấy dữ liệu mới, ngay cả khi dữ liệu đó không thay đổi. Điều này có thể dẫn đến việc gọi API nhiều lần trong một khoảng thời gian ngắn, gây ra vấn đề hiệu suất và thậm chí là lỗi ứng dụng. Vì vậy, để tránh vấn đề này, bạn nên sử dụng một `Future` duy nhất và cập nhật dữ liệu khi cần thiết.
26Why split a repository from the widget?4 lựa chọn
ASlower
BForces SQLite
CNo benefit
DEasier to test/mock HTTP; one place for endpoints + parsing + errors
Lời giải
Mở trang câu hỏi này →Khi tách một repository khỏi widget, mục đích chính là để dễ dàng kiểm tra và mô phỏng HTTP trong ứng dụng. Điều này giúp tập trung tất cả các điểm kết nối, xử lý và lỗi vào một nơi duy nhất, làm cho việc kiểm tra và bảo trì trở nên dễ dàng hơn. Ngoài ra, việc tách repository còn giúp giảm thiểu sự phức tạp và tăng cường khả năng mở rộng của ứng dụng. Điều này đặc biệt quan trọng khi ứng dụng trở nên lớn hơn và phức tạp hơn, vì nó cho phép các nhà phát triển tập trung vào các phần cụ thể của ứng dụng mà không bị ảnh hưởng bởi các phần khác.
27What is implicit animation?4 lựa chọn
ANavigation animation
BAPI animation
CAnimation without controller
DManual animation control
Lời giải
Mở trang câu hỏi này →Implicit animation là một loại animation được tạo ra mà không cần sử dụng controller. Trong khi animation được tạo ra bằng cách sử dụng controller thường được gọi là explicit animation, implicit animation lại được tạo ra tự động mà không cần sự can thiệp của người dùng. Ví dụ, khi bạn di chuyển một view trên màn hình, implicit animation sẽ tự động được tạo ra để tạo ra một hiệu ứng chuyển động mượt mà. Điều này giúp tạo ra một trải nghiệm người dùng tốt hơn và tạo ra một giao diện người dùng thân thiện hơn.
28What is the purpose of parsing JSON?4 lựa chọn
AEncrypt data
BCache responses
CSend requests
DConvert JSON into Dart objects
Lời giải
Mở trang câu hỏi này →Mục đích của việc phân tích JSON (parsing JSON) là chuyển đổi dữ liệu JSON thành các đối tượng có thể sử dụng được trong ứng dụng. Điều này cho phép chúng ta dễ dàng truy cập và sử dụng dữ liệu JSON trong mã nguồn của mình. Ví dụ, khi chúng ta nhận được dữ liệu JSON từ một API, chúng ta có thể sử dụng phương thức parsing để chuyển đổi dữ liệu đó thành các đối tượng có thể sử dụng được trong ứng dụng của mình. Điều này giúp chúng ta dễ dàng truy cập và sử dụng dữ liệu, cũng như giảm thiểu lỗi khi làm việc với dữ liệu JSON.
A
StreamBuilderB
ListViewC
FutureBuilderD
FormLời giải
Mở trang câu hỏi này →Trong Flutter, có một số widget có thể phản hồi với các thay đổi trạng thái xác thực. Trong số các lựa chọn trên, widget StreamBuilder là một trong những widget quan trọng nhất. StreamBuilder là một widget có thể lắng nghe các luồng dữ liệu và phản hồi khi dữ liệu thay đổi. Trong trường hợp xác thực, StreamBuilder có thể lắng nghe các thay đổi trạng thái xác thực và cập nhật giao diện người dùng theo đó. Điều này có nghĩa là khi trạng thái xác thực thay đổi, giao diện người dùng cũng sẽ thay đổi theo. Ví dụ, khi người dùng đăng nhập thành công, giao diện người dùng có thể hiển thị thông tin người dùng, còn khi người dùng đăng nhập thất bại, giao diện người dùng có thể hiển thị thông báo lỗi.
A
DELETEB
PUTC
POSTD
GETLời giải
Mở trang câu hỏi này →Phương thức HTTP được sử dụng để lấy dữ liệu thường là GET. Phương thức GET được sử dụng để yêu cầu dữ liệu từ máy chủ mà không thay đổi dữ liệu hiện có. Nó thường được sử dụng để lấy dữ liệu từ một nguồn cụ thể, chẳng hạn như một trang web hoặc một API. Ví dụ, 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 GET đến máy chủ để lấy dữ liệu trang web đó. Phương thức GET thường được sử dụng trong các trường hợp như lấy dữ liệu, liệt kê tài nguyên, hoặc lấy thông tin về một tài nguyên cụ thể.
31What format is most commonly used in REST APIs?4 lựa chọn
A
XMLB
CSVC
JSOND
BinaryLời giải
Mở trang câu hỏi này →Đáp án đúng: C. JSON là định dạng trao đổi dữ liệu phổ biến nhất trong các REST API hiện nay vì gọn nhẹ, dễ đọc với con người, ánh xạ tự nhiên sang cấu trúc đối tượng của hầu hết ngôn ngữ và được hỗ trợ sẵn ở cả trình duyệt lẫn máy chủ. Trong Flutter, dữ liệu JSON được xử lý bằng dart:convert với jsonDecode và jsonEncode. XML (A) từng thống trị thời SOAP nhưng nay ít dùng vì dài dòng; CSV (B) chỉ phù hợp dữ liệu bảng phẳng; còn định dạng nhị phân (D) chỉ dùng trong các trường hợp đặc thù cần hiệu năng cao như gRPC hay Protobuf.