Ngân hàng câu hỏi của chương

Câu hỏi: PRM393 - Bất đồng bộ: Future, async/await, Stream

46 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/3 — câu 21–40.

Danh sách câu hỏi

40/46 câuCòn 6
ATo determine the user's authentication state and route them to either the Home or Login screen.
BIt allows for the persistence of simple key-value pairs (like tokens or settings) on the device.
CIt allows a single codebase to render UI using its own engine across different platforms.
DIt pauses the execution of the async function until the Future completes and returns a value.
Lời giải
Trong ngữ cảnh lập trình bất đồng bộ, từ khóa `await` thực hiện chức năng gì? Từ khóa `await` được sử dụng để tạm dừng việc thực thi hàm async cho đến khi Future hoàn thành và trả về giá trị. Điều này cho phép chúng ta viết mã dễ dàng hơn và giảm thiểu sự phức tạp trong việc quản lý các tác vụ bất đồng bộ. Khi sử dụng `await`, chúng ta có thể viết mã như thể chúng ta đang thực thi các tác vụ đồng bộ, nhưng thực tế thì mã này vẫn được thực thi bất đồng bộ. Điều này giúp tăng hiệu suất và giảm thiểu sự tắc nghẽn trong ứng dụng.
Mở trang câu hỏi này →
Aflutter doctor
BWidget Inspector
CMicrotask queue
DAppBundle (.aab)
Lời giải
Trong vòng lặp sự kiện Dart, hàng đợi có ưu tiên cao hơn là hàng đợi microtask hay hàng đợi sự kiện. Hàng đợi microtask được ưu tiên cao hơn vì nó chứa các tác vụ cần được xử lý ngay lập tức, chẳng hạn như xử lý các sự kiện async/await. Điều này giúp đảm bảo rằng các tác vụ quan trọng được xử lý trước khi đến lượt các tác vụ khác trong hàng đợi sự kiện. Vì vậy, nếu bạn đang phát triển ứng dụng Flutter và muốn đảm bảo rằng các tác vụ của mình được xử lý một cách kịp thời, hãy ưu tiên sử dụng hàng đợi microtask.
Mở trang câu hỏi này →
ATo make code run faster always
BTo perform long-running tasks without blocking execution
CTo pause the program
DTo replace exceptions
Lời giải
Asynchronous lập trình trong Dart được sử dụng để thực hiện các tác vụ chạy trong thời gian dài mà không làm gián đoạn việc thực thi chương trình. Điều này cho phép các tác vụ chạy song song với nhau, giúp tăng hiệu suất và giảm thời gian chờ đợi. Ví dụ, khi tải dữ liệu từ internet, bạn có thể thực hiện các tác vụ khác trong khi chờ đợi dữ liệu được tải về. Điều này giúp chương trình trở nên mượt mà và không bị gián đoạn. Asynchronous lập trình cũng giúp giảm thiểu việc sử dụng tài nguyên hệ thống, giúp chương trình trở nên ổn định hơn.
Mở trang câu hỏi này →
Adart:math
Bdart:core
Cdart:async
Ddart:convert
Lời giải
Mỗi chương trình Dart đều tự động import một số thư viện cơ bản. Trong số các lựa chọn trên, thư viện được tự động import vào mọi chương trình Dart là "dart:core". Thư viện này cung cấp các lớp và hàm cơ bản để thực hiện các tác vụ cơ bản như số học, so sánh, thời gian, v.v. Nó là một phần không thể thiếu của mọi chương trình Dart.
Mở trang câu hỏi này →
ATrigger widget rebuild
BHandle async tasks
CPersist data
DNavigate screens
Lời giải
setState() là phương thức quan trọng trong React, giúp cập nhật trạng thái của một widget. Khi gọi setState(), React sẽ tự động thực hiện việc rebuild widget để hiển thị trạng thái mới. Điều này giúp đảm bảo rằng widget luôn hiển thị trạng thái cập nhật và chính xác. Ngoài ra, setState() cũng giúp xử lý các tác vụ phức tạp như xử lý dữ liệu, thực hiện các yêu cầu mạng, v.v. Tuy nhiên, setState() không phải là phương thức để lưu trữ dữ liệu vĩnh viễn hoặc di chuyển giữa các màn hình. Vì vậy, trong các lựa chọn trên, phương thức setState() chính xác nhất là Trigger widget rebuild.
Mở trang câu hỏi này →
AIt builds itself based on the latest snapshot of interaction with a Future.
BIt creates a stream that can be listened to by multiple subscribers simultaneously.
CIt encapsulates all network communication logic, separating it from the UI layer.
DUnit tests validate pure logic, while widget tests validate UI rendering and interaction.
Lời giải
Trong Dart, `StreamController.broadcast()` được sử dụng để tạo một luồng dữ liệu có thể được nghe bởi nhiều người đăng ký đồng thời. Điều này cho phép nhiều phần tử trong ứng dụng của bạn nhận và xử lý dữ liệu từ cùng một nguồn. Ví dụ, nếu bạn đang xây dựng một ứng dụng trò chuyện, bạn có thể sử dụng `StreamController.broadcast()` để tạo một luồng dữ liệu mà tất cả người dùng có thể nghe và gửi tin nhắn. Điều này giúp đơn giản hóa việc quản lý và xử lý dữ liệu trong ứng dụng của bạn.
Mở trang câu hỏi này →
AA feature that automatically triggers validation logic without waiting for a manual submit button press.
BIt is called exactly once when the widget is inserted into the tree, used for one-time initialisation.
CIt creates a Future that completes after a specified duration, often used to simulate network latency.
DIt allows for the persistence of simple key-value pairs (like tokens or settings) on the device.
Lời giải
Trong Dart, `Future.delayed()` được sử dụng để tạo ra một tương lai (Future) hoàn thành sau một khoảng thời gian xác định. Điều này cho phép bạn mô phỏng thời gian trễ của mạng (network latency) hoặc thực hiện một hành động sau một khoảng thời gian nhất định. Ví dụ, bạn có thể sử dụng `Future.delayed()` để tạo ra một tương lai hoàn thành sau 1 giây, sau đó sử dụng nó để thực hiện một hành động như tải dữ liệu từ mạng. Điều này giúp bạn viết mã dễ đọc và dễ bảo trì hơn, đồng thời cũng giúp bạn mô phỏng các tình huống thực tế trong ứng dụng của mình.
Mở trang câu hỏi này →
AIt creates a Future that completes after a specified duration, often used to simulate network latency.
BIt pauses the execution of the async function until the Future completes and returns a value.
CTo determine the user's authentication state and route them to either the Home or Login screen.
DIt allows for the persistence of simple key-value pairs (like tokens or settings) on the device.
Lời giải
SharedPreferences là một gói phần mềm trong Flutter giúp lưu trữ các dữ liệu đơn giản dưới dạng cặp khóa-giá trị (key-value pairs) trên thiết bị. Điều này cho phép bạn lưu trữ các thông tin như token, cài đặt người dùng, v.v. và truy cập chúng sau này. Ví dụ, bạn có thể sử dụng SharedPreferences để lưu trữ thông tin đăng nhập của người dùng và kiểm tra trạng thái đăng nhập của họ khi họ mở ứng dụng. Điều này giúp tăng cường trải nghiệm người dùng và cải thiện hiệu suất của ứng dụng.
Mở trang câu hỏi này →
Aint
BFuture<int>
CAsync<int>
DPromise<int>
Lời giải

Một hàm async trong lập trình là một hàm có thể thực hiện đồng thời nhiều tác vụ. Khi một hàm async được gọi, nó sẽ tạo ra một luồng thực thi riêng biệt. Khi hàm async hoàn thành, nó sẽ trả về một giá trị. Trong trường hợp này, hàm async được yêu cầu trả về một số nguyên (integer). Trả về giá trị của một hàm async được gọi là 'Future' trong ngôn ngữ lập trình Java và các ngôn ngữ khác. 'Future' đại diện cho một giá trị sẽ được trả về trong tương lai. Vì vậy, trả về giá trị của một hàm async trong trường hợp này là '

Lời giải
Future<int>'.
Mở trang câu hỏi này →
Adelay
Bwait
Cawait
Dasync
Lời giải
Trong lập trình bất đồng bộ, async function là một hàm có thể chạy song song với các tác vụ khác. Để chờ đợi một Future hoàn thành, chúng ta cần sử dụng một từ khóa đặc biệt. Từ khóa này cho phép chúng ta tạm dừng việc thực hiện của hàm async cho đến khi Future được hoàn thành. Từ khóa này được sử dụng để chờ đợi một Future, một Promise hoặc một giá trị trả về từ một hàm async khác. Nó cho phép chúng ta viết mã bất đồng bộ một cách dễ dàng và hiệu quả.
Mở trang câu hỏi này →
31What will this code print?4 lựa chọncó code
Đề bài
Future<void> main() async {
  print('A');
  await Future.delayed(Duration(seconds: 1));
  print('B');
}
AA B immediately
BA (pause 1 second) B
CB A
DError
Lời giải
Mã nguồn trên sử dụng hàm `await Future.delayed(Duration(seconds: 1))` để tạo một tương lai được trì hoãn trong 1 giây. Khi chạy chương trình, đầu tiên sẽ in ra 'A', sau đó trì hoãn trong 1 giây và cuối cùng in ra 'B'. Điều này có nghĩa là chương trình sẽ tạm dừng trong 1 giây trước khi in ra 'B'.
Mở trang câu hỏi này →
AMicrotask queue
Bflutter doctor
CWidget Inspector
DAppBundle (.aab)
Lời giải
Để phân phối ứng dụng trên Google Play Store và tối ưu kích thước ứng dụng cho các thiết bị khác nhau, bạn nên chọn loại tệp tin build nào?
Mở trang câu hỏi này →
APromise
BAsync
CFuture
DDelay
Lời giải
Trong lập trình, chúng ta thường gặp các tình huống cần xử lý các giá trị sẽ được sẵn sàng trong tương lai. Ví dụ, khi tải dữ liệu từ mạng, chúng ta không thể biết ngay lập tức khi nào dữ liệu sẽ sẵn sàng. Trong trường hợp này, chúng ta cần sử dụng một lớp đại diện cho giá trị sẽ sẵn sàng trong tương lai. Trong các lựa chọn trên, lớp đại diện cho giá trị sẽ sẵn sàng trong tương lai là "Future".
Mở trang câu hỏi này →
AMicrotask queue
Bflutter clean
CWidget Inspector
Dflutter doctor
Lời giải
Để xóa thư mục `build/` và khôi phục trạng thái dự án trước khi thực hiện build cuối cùng, bạn cần sử dụng lệnh `flutter clean`. Lệnh này sẽ xóa tất cả các tệp tin tạm thời và thư mục tạm thời được tạo ra trong quá trình build dự án. Điều này giúp đảm bảo rằng dự án của bạn được reset về trạng thái ban đầu, giúp bạn có thể thực hiện build lại từ đầu mà không gặp phải các vấn đề liên quan đến tệp tin tạm thời.
Mở trang câu hỏi này →
AWidget Inspector
Bflutter clean
Cflutter doctor
DMicrotask queue
Lời giải
Để xác minh rằng bộ công cụ Flutter và tất cả các công cụ cần thiết đã được cấu hình đúng cách, bạn cần sử dụng lệnh nào? Lời giải đúng là "flutter doctor". Lệnh này sẽ giúp bạn kiểm tra xem tất cả các thành phần cần thiết đã được cài đặt và cấu hình đúng cách hay chưa. Nếu có bất kỳ vấn đề nào, lệnh này sẽ thông báo cho bạn biết để bạn có thể sửa lỗi. Điều này giúp đảm bảo rằng bạn có thể xây dựng và chạy các ứng dụng Flutter một cách hiệu quả.
Mở trang câu hỏi này →
Afinal
BStream
Cmap()
Dextends
Lời giải
Trong lập trình Dart, một chuỗi các sự kiện bất đồng bộ được quản lý bằng cách sử dụng lớp Stream. Stream là một lớp cơ bản trong Dart, cho phép bạn tạo và quản lý các chuỗi các sự kiện bất đồng bộ. Nó cung cấp các phương thức như listen(), map(), reduce(), và nhiều phương thức khác để xử lý các sự kiện trong chuỗi. Sử dụng Stream giúp bạn dễ dàng quản lý và xử lý các sự kiện bất đồng bộ trong ứng dụng của mình.
Mở trang câu hỏi này →
Amap()
Bfinal
CCard
DStream
Lời giải
Trong Dart, khi chúng ta cần biến đổi các giá trị trong một luồng dữ liệu (Stream) thành các giá trị mới, chúng ta có thể sử dụng phương thức map(). Phương thức map() sẽ áp dụng một hàm biến đổi lên từng giá trị trong Stream và trả về một Stream mới với các giá trị đã được biến đổi. Ví dụ, nếu chúng ta có một Stream chứa các số nguyên và muốn biến đổi chúng thành các số nguyên khác, chúng ta có thể sử dụng phương thức map() như sau: stream.map((value) => value * 2). Đây là một ví dụ đơn giản về việc sử dụng phương thức map() để biến đổi các giá trị trong một Stream.
Mở trang câu hỏi này →
AIntegration testing
BAppBundle (.aab)
CMicrotask queue
DWidget Inspector
Lời giải
Để đánh giá toàn bộ trải nghiệm của người dùng trong ứng dụng, bạn cần sử dụng phương pháp kiểm thử Flutter nào? Trong các lựa chọn, Integration testing là phương pháp phù hợp nhất. Phương pháp này cho phép bạn kiểm thử toàn bộ luồng hoạt động của ứng dụng từ đầu đến cuối, bao gồm cả các giao diện người dùng, logic kinh doanh và kết nối mạng. Điều này giúp bạn đảm bảo rằng ứng dụng của mình hoạt động đúng cách và đáp ứng được yêu cầu của người dùng.
Mở trang câu hỏi này →
Await
Bthrow
Cawait
Dasync
Lời giải
Khi sử dụng các hàm async, chúng ta cần sử dụng từ khóa 'await' để chờ đợi kết quả trả về từ các hàm async khác. Tuy nhiên, trong quá trình thực hiện, có thể xảy ra lỗi. Để xử lý lỗi này, chúng ta sử dụng từ khóa 'try' để thực hiện các lệnh và 'catch' để bắt lỗi. Từ khóa có thể được sử dụng cùng với 'try' và 'catch' trong các hàm async để xử lý lỗi là 'await'. Từ khóa 'await' cho phép chúng ta chờ đợi kết quả trả về từ các hàm async khác và xử lý lỗi một cách hiệu quả.
Mở trang câu hỏi này →
Adart:math
Bdart:core
Cdart:async
DAll of the above
Lời giải
Câu hỏi này hỏi về các thư viện cơ bản của Dart. Dart:math, Dart:core và Dart:async đều là các thư viện cơ bản của Dart. Dart:math cung cấp các hàm toán học cơ bản, Dart:core cung cấp các hàm cơ bản như số, chuỗi, mảng, v.v. và Dart:async cung cấp các hàm để xử lý các tác vụ bất đồng bộ. Vì vậy, đáp án đúng là tất cả các lựa chọn trên.
Mở trang câu hỏi này →