Đề ôn · PRM393

PRM393 Lập trình di động (Flutter) – Bộ ôn tập cuối kỳ số 1 (50 câu)

50 câu · Cuối kỳ · Summer 2026

50câu trong đề
PRM393môn

Câu hỏi của đề

15/50 câuCòn 35
AsaveInt()
BputInt()
CsetInt()
DwriteInt()
Lời giải

Đáp án đúng: C. Trong Flutter, gói shared_preferences cung cấp các phương thức đặt giá trị theo kiểu dữ liệu: setInt, setString, setBool, setDouble và setStringList, đi kèm các phương thức đọc getInt, getString... Vì vậy để lưu một số nguyên ta gọi prefs.setInt('key', value). Cần phân biệt với SharedPreferences NATIVE của Android, nơi API là editor.putInt() - đó chính là bẫy của phương án B. Các phương án saveInt() (A) và writeInt() (D) không tồn tại trong cả hai nền tảng. Lưu ý các phương thức set này trả về Future<bool> nên thường được await.

Mở trang câu hỏi này →
ATo store application data permanently
BTo provide tools and libraries for Flutter development
CTo deploy applications directly to app stores
DTo replace the operating system of a device
Lời giải
Đáp án đúng: B. Flutter SDK là bộ công cụ phát triển gồm framework widget, công cụ dòng lệnh (flutter run, flutter build), trình biên dịch Dart, engine kết xuất và các thư viện hỗ trợ. Nói ngắn gọn, nó cung cấp CÔNG CỤ VÀ THƯ VIỆN để lập trình viên xây dựng ứng dụng Flutter. Phương án A nhầm sang vai trò của các giải pháp lưu trữ như shared_preferences, Hive hay sqflite; phương án C sai vì việc phát hành lên cửa hàng ứng dụng do các công cụ và quy trình riêng của Google Play hoặc App Store đảm nhiệm; phương án D vô lý vì SDK chạy trên hệ điều hành chứ không thay thế nó.
Mở trang câu hỏi này →
AReducing widget tree depth
BLimiting rebuild to affected widgets
CCaching API responses
DUsing global state
Lời giải
Tối ưu hóa phạm vi xây dựng lại (rebuild scope optimization) trong Flutter là một kỹ thuật giúp tối ưu hóa hiệu suất ứng dụng bằng cách hạn chế việc xây dựng lại (rebuild) các widget không cần thiết. Khi một widget thay đổi, Flutter sẽ tự động xây dựng lại toàn bộ cây widget để phản ánh sự thay đổi này. Tuy nhiên, việc này có thể dẫn đến lãng phí tài nguyên và giảm hiệu suất ứng dụng. Tối ưu hóa phạm vi xây dựng lại giúp Flutter chỉ xây dựng lại các widget bị ảnh hưởng trực tiếp bởi sự thay đổi, từ đó giảm thiểu lãng phí tài nguyên và tăng hiệu suất ứng dụng.
Mở trang câu hỏi này →
4Which widget enables custom scroll effects in Flutter?4 lựa chọnTrung bình40% trả lời đúng
AListView
BSingleChildScrollView
CCustomScrollView
DColumn
Lời giải
Trong Flutter, CustomScrollView là một widget cho phép tạo ra các hiệu ứng cuộn tùy chỉnh. Nó cung cấp các phương thức để tạo ra các hiệu ứng cuộn phức tạp như cuộn theo chiều ngang, cuộn theo chiều dọc, hoặc thậm chí là cuộn theo cả hai chiều cùng lúc. CustomScrollView cũng cho phép bạn thêm các widget khác vào bên trong nó, tạo ra một cấu trúc dữ liệu phức tạp và linh hoạt. Điều này làm cho CustomScrollView trở thành một lựa chọn tuyệt vời cho các ứng dụng cần có hiệu ứng cuộn tùy chỉnh.
Mở trang câu hỏi này →
ACompiling Dart code
BManaging databases
CHandling network requests
DDescribing the user interface
Lời giải
Trong Flutter, các widget đóng vai trò quan trọng trong việc mô tả giao diện người dùng (UI). Chúng là các thành phần cơ bản của ứng dụng, bao gồm các yếu tố như text, hình ảnh, nút bấm, danh sách và nhiều hơn nữa. Mỗi widget có thể được sử dụng độc lập hoặc kết hợp lại với nhau để tạo nên giao diện phức tạp. Widget giúp developers dễ dàng xây dựng và tùy chỉnh giao diện của ứng dụng mà không cần phải viết mã phức tạp. Ngoài ra, widget cũng giúp ứng dụng trở nên linh hoạt và dễ dàng thích nghi với các thiết bị và kích thước màn hình khác nhau.
Mở trang câu hỏi này →
AFix layout
BSpeed up builds
CPrevent memory leaks
DImprove UI
Lời giải
Animations trong ứng dụng thường tạo ra các đối tượng tạm thời, nếu không được xóa bỏ đúng cách sẽ dẫn đến tình trạng "nhớ" bộ nhớ, gây ra hiện tượng "memory leaks". Điều này có thể khiến ứng dụng trở nên chậm chạp và thậm chí bị treo. Vì vậy, việc xóa bỏ animations một cách hợp lý là rất quan trọng để đảm bảo ứng dụng hoạt động trơn tru và hiệu suất cao.
Mở trang câu hỏi này →
Ahttp
Bflutter_bloc
Csqflite
Dprovider
Lời giải
BLoC (Business Logic Component) là một kiến trúc ứng dụng được sử dụng trong Flutter để quản lý logic kinh doanh. Để sử dụng kiến trúc BLoC trong Flutter, chúng ta cần sử dụng gói flutter_bloc. Gói này cung cấp các lớp và phương thức cần thiết để xây dựng và quản lý logic kinh doanh trong ứng dụng. Nó giúp chúng ta tách rời logic kinh doanh khỏi giao diện người dùng và tạo ra ứng dụng có khả năng mở rộng và dễ bảo trì hơn.
Mở trang câu hỏi này →
8What is the role of events in BLoC?4 lựa chọn
AStore UI
BTrigger state changes
CHandle layout
DRender widgets
Lời giải
Trong mô hình BLoC, các sự kiện đóng vai trò quan trọng trong việc điều khiển trạng thái ứng dụng. Khi một sự kiện được kích hoạt, nó sẽ truyền thông tin đến BLoC (Business Logic Component), sau đó BLoC sẽ xử lý thông tin đó và cập nhật trạng thái ứng dụng. Điều này giúp ứng dụng trở nên linh hoạt và dễ dàng quản lý trạng thái. Ví dụ, khi người dùng nhập thông tin vào một trường văn bản, sự kiện 'nhập thông tin' sẽ được kích hoạt và truyền thông tin đó đến BLoC. BLoC sẽ xử lý thông tin đó và cập nhật trạng thái ứng dụng, chẳng hạn như cập nhật dữ liệu trong cơ sở dữ liệu hoặc hiển thị thông báo cho người dùng.
Mở trang câu hỏi này →
ASimplify syntax
BReduce code
CImprove theme
DAvoid blocking UI thread
Lời giải
Các hoạt động cơ sở dữ liệu nên được thực hiện theo cách đồng bộ vì nó giúp tránh chặn luồng UI. Khi một ứng dụng thực hiện các yêu cầu cơ sở dữ liệu đồng bộ, nó sẽ tạm dừng mọi hoạt động khác cho đến khi yêu cầu được hoàn thành. Điều này có thể dẫn đến trải nghiệm người dùng không mượt mà và ứng dụng có thể trở nên chậm chạp. Ngược lại, các hoạt động cơ sở dữ liệu được thực hiện theo cách đồng bộ cho phép ứng dụng tiếp tục thực hiện các tác vụ khác trong khi chờ đợi kết quả từ cơ sở dữ liệu. Điều này giúp cải thiện hiệu suất và trải nghiệm người dùng.
Mở trang câu hỏi này →
AFree memory
BEnd user session securely
CImprove UI
DChange theme
Lời giải
Đáp án đúng: B. Chức năng đăng xuất tồn tại vì lý do BẢO MẬT: nó kết thúc phiên làm việc một cách an toàn, xoá token đang lưu, xoá thông tin nhạy cảm khỏi bộ nhớ và bộ nhớ cục bộ, đồng thời báo cho máy chủ thu hồi phiên. Nếu thiếu, người dùng tiếp theo trên cùng thiết bị vẫn truy cập được tài khoản cũ. Giải phóng bộ nhớ (A) chỉ là hệ quả phụ không đáng kể; cải thiện giao diện (C) và đổi giao diện màu sắc (D) hoàn toàn không liên quan tới mục đích của thao tác đăng xuất.
Mở trang câu hỏi này →
11What is Cubit in BLoC?4 lựa chọnDễ100% trả lời đúng
AUI widget
BSimplified BLoC without events
CDatabase layer
DAnimation helper
Lời giải
Cubit là một khái niệm quan trọng trong kiến trúc BLoC của Flutter. Nó được định nghĩa là một lớp trừu tượng hóa các logic nghiệp vụ, giúp phân tách logic kinh doanh khỏi logic giao diện người dùng. Trong BLoC, Cubit được sử dụng như một lớp trạng thái trung gian, giúp lưu trữ và cập nhật trạng thái ứng dụng. Nó không phải là một UI widget, cũng không phải là một lớp cơ sở dữ liệu, cũng không phải là một lớp trợ giúp cho animation. Thay vào đó, Cubit là một lớp trừu tượng hóa các logic nghiệp vụ, giúp phân tách logic kinh doanh khỏi logic giao diện người dùng. Nó giúp chúng ta xây dựng các ứng dụng có khả năng mở rộng, dễ dàng bảo trì và sửa lỗi.
Mở trang câu hỏi này →
AContainer
BRepaintBoundary
CColumn
DFutureBuilder
Lời giải
Widget giúp tránh tái xây dựng các phần giao diện không thay đổi là RepaintBoundary. Khi một widget được thay đổi, Flutter sẽ tự động tái xây dựng lại giao diện. Tuy nhiên, nếu một phần giao diện không thay đổi, việc tái xây dựng lại không cần thiết và có thể gây lãng phí tài nguyên. RepaintBoundary giúp ngăn chặn việc tái xây dựng lại các phần giao diện không thay đổi, giúp cải thiện hiệu suất của ứng dụng.
Mở trang câu hỏi này →
Aasync
Bawait
Cfuture
Ddelay
Lời giải
Đáp án đúng: B. Từ khoá await tạm dừng việc thực thi hàm hiện tại cho tới khi Future hoàn tất rồi trả về giá trị của Future đó, giúp viết mã bất đồng bộ theo phong cách tuần tự dễ đọc. Nó chỉ dùng được bên trong hàm đã được đánh dấu async, và đó chính là vai trò của từ khoá async (A): đánh dấu hàm trả về Future chứ bản thân nó không tạm dừng gì cả. Future (C) là KIỂU dữ liệu biểu diễn một giá trị sẽ có trong tương lai, không phải từ khoá điều khiển; còn delay (D) không phải từ khoá của Dart - liên quan là hàm Future.delayed.
Mở trang câu hỏi này →
14What does an integration test verify?4 lựa chọnTrung bình50% trả lời đúng
ASingle function
BWidget rendering
CEnd-to-end app behavior
DTheme consistency
Lời giải
Một bài kiểm tra tích hợp (integration test) là một loại kiểm tra phần mềm được sử dụng để xác minh rằng các thành phần khác nhau của một ứng dụng hoạt động cùng nhau một cách chính xác. Bài kiểm tra này không chỉ kiểm tra một chức năng đơn lẻ mà còn kiểm tra cách các chức năng khác nhau tương tác với nhau. Ví dụ, một bài kiểm tra tích hợp có thể kiểm tra việc đăng nhập vào ứng dụng, sau đó thêm một sản phẩm vào giỏ hàng và cuối cùng thực hiện thanh toán. Điều này giúp đảm bảo rằng ứng dụng hoạt động một cách trơn tru và không có lỗi khi người dùng tương tác với nó.
Mở trang câu hỏi này →
Asqflite
BFirebase Authentication
CProvider
Dhttp
Lời giải
Đáp án đúng: B. Firebase Authentication là dịch vụ xác thực sẵn có, hỗ trợ đăng nhập bằng email/mật khẩu, số điện thoại và các nhà cung cấp như Google, Facebook, Apple; nó quản lý token, làm mới phiên và trạng thái đăng nhập giúp lập trình viên, nên đơn giản hoá đáng kể việc triển khai xác thực trong Flutter. Các phương án còn lại là những gói phục vụ mục đích khác: sqflite (A) là cơ sở dữ liệu SQLite cục bộ, Provider (C) là giải pháp quản lý trạng thái, http (D) là thư viện gọi API - không gói nào tự thân cung cấp cơ chế xác thực.
Mở trang câu hỏi này →