Ngân hàng câu hỏi môn Lập trình di động (Flutter) - Mobile Programming

Lập trình di động với Flutter là môn học xây dựng ứng dụng đa nền tảng Android và iOS bằng Flutter và ngôn ngữ Dart. Ngân hàng câu hỏi trắc nghiệm PRM393 có đáp án bao quát trọn bộ chương trình: cài đặt Flutter SDK, cấu trúc project, hot reload và DevTools, nền tảng Dart (kiểu dữ liệu, null safety, class, collection, Map, generics, mixin, package và import), lập trình bất đồng bộ với Future, async/await, Stream, StreamController và StreamBuilder, dựng giao diện bằng widget tree, Scaffold, ListView, ThemeData, bố cục Row/Column, GridView, Stack, LayoutBuilder, MediaQuery và responsive UI, điều hướng với Navigator 1.0/2.0, named route, deep link và guarded route, form với TextEditingController và validation, gọi REST API bằng http, parse JSON, FutureBuilder, phân trang và caching, lưu trữ cục bộ bằng SharedPreferences, SQLite (sqflite) và Hive, xác thực bằng token và refresh token, quản lý state với setState, Provider, BLoC và Cubit, animation với Tween cùng AnimatedSwitcher, tối ưu hiệu năng bằng RepaintBoundary và thu hẹp phạm vi rebuild, kiểm thử unit/widget/integration, quản lý mã nguồn bằng Git và build - release ứng dụng. Tài liệu ôn thi FE dành cho sinh viên FPT University.

Học từ ngân hàng câu hỏi

Bắt đầu một phiên học theo môn

Tiến độ của bạn sẽ luôn được tính toán và đồng bộ trực tiếp theo tổng số lượng câu hỏi mới nhất của môn học này.

512Ngân hàng hiện tại
--Tiến độ môn
Số câu hỏi
Độ khó
Phiên sắp tạo
512 câu Chế độ học Không giới hạn Trộn

Bạn cần đăng nhập để bắt đầu học từ ngân hàng câu hỏi và lưu tiến độ theo môn.

0Dễ · --
0Trung bình · --
0Khó · --
--Đã học
--Đang nắm chắc
Đăng nhập để xemLần hoàn tất gần nhất

Đang tải phân bố độ khó.

Đăng nhập để bắt đầu học từ ngân hàng câu hỏi, lưu tiến độ theo môn, resume phiên đang dở và cập nhật thống kê dài hạn.
Đang hiển thị 15 / 512 câu hỏi
Bấm vào từng câu để xem đáp án
#001
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
flutter_testĐÚNG
Bprovider
Chttp
Dsqflite
Giải thích

Đáp án đúng: A. flutter_test là gói kiểm thử chính thức đi kèm SDK, cung cấp testWidgets, WidgetTester, các matcher như findsOneWidget và các tiện ích bơm khung hình để kiểm thử unit lẫn widget; nó được khai báo trong dev_dependencies của pubspec.yaml. Provider (B) là giải pháp quản lý trạng thái, http (C) dùng để gọi API và sqflite (D) là cơ sở dữ liệu cục bộ - cả ba đều là gói chức năng của ứng dụng chứ không phải hạ tầng kiểm thử. Riêng kiểm thử tích hợp dùng thêm gói integration_test.

#002
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AContainer
ScaffoldĐÚNG
CColumn
DListView
Giải thích

Đáp án đúng: B. Scaffold là widget dựng khung cho một màn hình theo Material Design: nó cung cấp sẵn các khe cho appBar, body, floatingActionButton, drawer, bottomNavigationBar và snackBar, đồng thời xử lý đúng vùng an toàn cùng bàn phím. Container (A) chỉ là hộp trang trí và định kích thước cho một widget con; Column (C) sắp xếp các widget theo chiều dọc; ListView (D) hiển thị danh sách cuộn được. Cả ba đều thường nằm BÊN TRONG body của Scaffold chứ không thay thế được vai trò khung màn hình của nó.

#003
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA cloud hosting service
BA physical server
An emulator or physical deviceĐÚNG
DA database management system
Giải thích

Đáp án đúng: C. Để chạy và kiểm thử ứng dụng Flutter trên máy cá nhân, bạn cần một đích chạy thực sự: máy ảo Android, trình giả lập iOS hoặc một thiết bị vật lý kết nối qua USB - flutter devices sẽ liệt kê chúng. Dịch vụ lưu trữ đám mây (A) và máy chủ vật lý (B) là hạ tầng phía sau, không cần cho việc chạy ứng dụng di động cục bộ; hệ quản trị cơ sở dữ liệu (D) chỉ cần khi ứng dụng thực sự dùng tới, không phải điều kiện để khởi chạy.

#004
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AUnit Tests
BWidget Tests
Integration TestsĐÚNG
DDebug Tests
Giải thích

Đáp án đúng: C. Kim tự tháp kiểm thử có đáy rộng là unit test - nhiều nhất vì nhanh, rẻ và dễ khoanh vùng lỗi; ở giữa là widget test (tương đương integration/component test trong các nền tảng khác); trên đỉnh là integration test chạy toàn ứng dụng trên thiết bị hoặc trình giả lập. Vì integration test chậm, đắt và dễ gãy nhất nên phải dùng ÍT nhất, chỉ cho các luồng nghiệp vụ then chốt. "Debug Tests" (D) không phải một loại kiểm thử trong kim tự tháp này.

#005
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AKotlin
BSwift
DartĐÚNG
DJavaScript
Giải thích

Đáp án đúng: C. Flutter dùng ngôn ngữ Dart do chính Google phát triển. Dart phù hợp với Flutter nhờ hai chế độ biên dịch: JIT khi phát triển để hỗ trợ hot reload, và AOT khi phát hành để sinh mã máy chạy nhanh; kèm theo là mô hình đơn luồng với isolate và cơ chế thu gom rác tối ưu cho việc dựng cây widget liên tục. Kotlin (A) và Swift (B) là ngôn ngữ native của Android và iOS, chỉ xuất hiện trong Flutter khi cần viết platform channel; JavaScript (D) là ngôn ngữ của React Native, không phải Flutter.

#006
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Alinear
BeaseIn
bounceOutĐÚNG
Ddecelerate
Giải thích

Đáp án đúng: C. Curves.bounceOut tạo hiệu ứng nảy ở CUỐI hoạt ảnh: giá trị vượt qua đích rồi nảy lại vài lần với biên độ giảm dần trước khi dừng hẳn, giống quả bóng rơi xuống sàn. Curves.linear (A) chạy đều tuyệt đối, không có gia tốc nên không nảy; Curves.easeIn (B) khởi động chậm rồi nhanh dần, kết thúc đột ngột; Curves.decelerate (D) bắt đầu nhanh rồi chậm dần tới đích. Ngoài bounceOut, họ đường cong nảy còn có bounceIn và bounceInOut cho hiệu ứng ở đầu hoặc cả hai đầu.

#007
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AFramework Layer
Engine LayerĐÚNG
CEmbedder Layer
DWidget Layer
Giải thích

Đáp án đúng: B. Kiến trúc Flutter gồm ba tầng. Tầng Framework viết bằng Dart, chứa widget, hoạt ảnh, cử chỉ. Tầng Engine viết bằng C++, chịu trách nhiệm kết xuất đồ hoạ thông qua Skia (nay là Impeller), quản lý bố cục ở mức thấp, chạy Dart runtime và xử lý văn bản. Tầng Embedder gắn engine vào từng nền tảng cụ thể, lo vòng đời ứng dụng và sự kiện đầu vào. Vì câu hỏi nói tới việc kết xuất bằng C++ với Skia nên đó chính là Engine Layer; Widget Layer (D) là một phần con của Framework, không phải một tầng riêng.

#008
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ASliverGrid
SliverListĐÚNG
CSliverAppBar
DSliverFillRemaining
Giải thích

Đáp án đúng: B. Trong CustomScrollView, các phần cuộn được tạo bởi các sliver. SliverList là sliver dùng để hiển thị một danh sách các phần tử theo chiều cuộn, tương đương ListView nhưng đặt được cạnh các sliver khác. SliverGrid (A) sắp phần tử theo lưới nhiều cột; SliverAppBar (C) là thanh tiêu đề co giãn hoặc ghim khi cuộn; SliverFillRemaining (D) lấp đầy phần không gian còn thừa của viewport. Cả ba đều là sliver hợp lệ nhưng không phải dạng dùng cho một danh sách cuộn thông thường.

#009
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ADynamic typing
BHot reload
Null safetyĐÚNG
DAsynchronous execution
Giải thích

Đáp án đúng: C. Null safety, có từ Dart 2.12, làm cho mọi kiểu mặc định KHÔNG nhận null; muốn cho phép null phải khai báo tường minh bằng dấu chấm hỏi như String?. Nhờ đó trình biên dịch phát hiện ngay lúc dịch những chỗ có thể truy cập vào biến null, thay vì để lỗi bùng ra lúc chạy. Kiểu động (A) làm điều ngược lại là trì hoãn kiểm tra tới lúc chạy; hot reload (B) chỉ giúp nạp nhanh thay đổi mã vào ứng dụng đang chạy; còn thực thi bất đồng bộ (D) liên quan tới Future và Stream, không dính dáng tới việc kiểm soát giá trị null.

#010
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AReduce UI size
Improve maintainabilityĐÚNG
CIncrease speed
DAvoid widgets
Giải thích

Đáp án đúng: B. Khi logic điều hướng được tổ chức tốt - đặt tên route tập trung, tách phần định nghĩa route ra khỏi widget, dùng router có cấu trúc - thì việc thêm màn hình mới, đổi luồng đi hay xử lý deep link đều gọn gàng và ít gây lỗi lan truyền. Đó chính là cải thiện khả năng BẢO TRÌ. Phương án A và C nhầm sang kích thước giao diện và tốc độ chạy, vốn không phụ thuộc vào cách tổ chức route; phương án D vô nghĩa vì điều hướng luôn làm việc với các widget màn hình chứ không nhằm né tránh chúng.

#011
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Adds space inside a widgetĐÚNG
BAdds space between widgets
CAligns widgets
DControls widget size
Giải thích

Đáp án đúng: A. Padding là widget bọc quanh một widget con và chèn thêm khoảng trống Ở BÊN TRONG nó, giữa biên của Padding và widget con, theo giá trị EdgeInsets được truyền vào. Nói cách khác nó tạo lề trong cho phần nội dung mà nó bao. Phương án B mô tả khoảng cách GIỮA các widget anh em, thường đạt được bằng SizedBox, Spacer hoặc thuộc tính spacing của Row/Column; phương án C là việc của Align hay Center; phương án D thuộc về SizedBox, ConstrainedBox hoặc thuộc tính width và height của Container.

#012
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AStoring passwords locally
Encrypting credentialsĐÚNG
CUsing HTTP
DHardcoding tokens
Giải thích

Đáp án đúng: B. Mã hoá thông tin xác thực - dùng HTTPS khi truyền, băm mật khẩu phía máy chủ, lưu token trong kho an toàn của hệ điều hành như flutter_secure_storage - là thực hành cốt lõi để bảo vệ danh tính người dùng. Ngược lại, lưu mật khẩu ở dạng thô trên thiết bị (A) tạo ra điểm rò rỉ trực tiếp; dùng HTTP không mã hoá (C) khiến thông tin bị nghe lén trên đường truyền; và nhúng cứng token vào mã nguồn (D) là lỗi nghiêm trọng vì token sẽ lộ ngay khi ứng dụng bị dịch ngược.

#013
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ALong forms
BMinimal validation
Clear labels and feedbackĐÚNG
DHidden errors
Giải thích

Đáp án đúng: C. Nguyên tắc thiết kế nâng cao trải nghiệm biểu mẫu là nhãn rõ ràng và phản hồi tức thời: mỗi trường có nhãn dễ hiểu, gợi ý định dạng, và khi nhập sai thì thông báo lỗi hiện ngay cạnh trường với hướng dẫn cách sửa. Trong Flutter, InputDecoration cùng validator của TextFormField phục vụ đúng mục đích này. Biểu mẫu quá dài (A) làm người dùng bỏ cuộc; kiểm tra dữ liệu sơ sài (B) đẩy lỗi xuống phía sau; ẩn thông báo lỗi (D) khiến người dùng không biết phải sửa gì - cả ba đều làm giảm tính khả dụng.

#014
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ACannot persist data
BOnly works on web
Not suitable for large or complex dataĐÚNG
DRequires SQL queries
Giải thích

Đáp án đúng: C. SharedPreferences chỉ được thiết kế để lưu các cặp khoá - giá trị nhỏ, kiểu nguyên thuỷ như cờ đã đăng nhập, chế độ sáng tối, ngôn ngữ đã chọn. Toàn bộ nội dung được nạp vào bộ nhớ và ghi ra một tệp phẳng, nên nó KHÔNG phù hợp với dữ liệu lớn, có cấu trúc phức tạp hay cần truy vấn - những trường hợp đó phải dùng sqflite hoặc Hive. Phương án A sai vì dữ liệu vẫn được lưu bền qua các lần mở ứng dụng; phương án B sai vì gói hoạt động trên mọi nền tảng; phương án D sai vì SharedPreferences không dùng SQL.

#015
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AScreens are arranged in a grid layout
Screens are managed using a stack (push and pop)ĐÚNG
CScreens are loaded randomly
DScreens are replaced automatically without control
Giải thích

Đáp án đúng: B. Navigator quản lý các màn hình theo cấu trúc NGĂN XẾP: Navigator.push đặt một route mới lên đỉnh ngăn xếp, Navigator.pop lấy route trên cùng ra và quay lại màn hình trước đó. Chính mô hình này khiến nút Back của hệ thống hoạt động đúng như người dùng kỳ vọng, và cho phép truyền dữ liệu trả về khi pop. Phương án A nhầm sang cách bố trí widget dạng lưới; phương án C mô tả hành vi ngẫu nhiên không tồn tại; phương án D sai vì lập trình viên hoàn toàn kiểm soát việc đẩy và gỡ route.

Cuộn để tải thêm…