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

Câu hỏi: PRM393 - Hiệu năng và triển khai

45 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.

Danh sách câu hỏi

20/45 câuCòn 25
1What is the role of BuildContext in Flutter?4 lựa chọnDễ100% trả lời đúng
AStore application data
BLocate widgets in the widget tree
CManage navigation history
DRender UI pixels
Lời giải
BuildContext trong Flutter đóng vai trò quan trọng trong việc xác định vị trí của các widget trong cây widget. Nó cung cấp thông tin về vị trí của widget hiện tại, bao gồm cả bố cục và các widget lân cận. BuildContext được sử dụng để truy cập các phương thức và thuộc tính của widget cha, chẳng hạn như tìm kiếm các widget con, cập nhật trạng thái, và quản lý sự kiện. Nó cũng giúp Flutter xác định xem widget nào cần được cập nhật khi có thay đổi trong cây widget. BuildContext được sử dụng rộng rãi trong các ứng dụng Flutter để xây dựng các ứng dụng phức tạp và linh hoạt.
Mở trang câu hỏi này →
ALarge widget trees
BSplitting widgets
CGlobal state
DFrequent rebuilds
Lời giải
Để cải thiện hiệu suất rendering, người dùng cần hiểu về các yếu tố ảnh hưởng đến hiệu suất này. Trong các lựa chọn trên, "Splitting widgets" là phương pháp hiệu quả nhất. Khi widget được chia nhỏ, mỗi phần sẽ được render độc lập, giảm thiểu thời gian cần thiết để render toàn bộ widget. Điều này đặc biệt hữu ích khi widget có nhiều thành phần hoặc cần render nhanh chóng. Ngoài ra, việc chia nhỏ widget cũng giúp giảm thiểu việc sử dụng tài nguyên hệ thống, cải thiện hiệu suất tổng thể của ứng dụng.
Mở trang câu hỏi này →
AOn every frame
BWhen state changes
COnly when app restarts
DOnly during hot restart
Lời giải
Flutter sẽ rebuild cây widget khi nào? Cây widget trong Flutter là một cấu trúc dữ liệu được sử dụng để hiển thị giao diện người dùng. Khi một widget thay đổi trạng thái, Flutter sẽ rebuild cây widget để cập nhật giao diện người dùng. Điều này xảy ra vì Flutter sử dụng một phương pháp gọi là "build once, run many" để tối ưu hóa hiệu suất. Khi một widget thay đổi trạng thái, Flutter sẽ gọi lại phương thức build() của widget đó để tạo lại cây widget mới. Điều này giúp đảm bảo rằng giao diện người dùng luôn được cập nhật và chính xác.
Mở trang câu hỏi này →
AInspector
BDevTools
CEmulator
DHot reload
Lời giải
Để phân tích hiệu suất giao diện người dùng (UI) trong Flutter, bạn cần sử dụng công cụ phù hợp. Trong số các lựa chọn trên, công cụ giúp phân tích hiệu suất UI trong Flutter là DevTools. DevTools là một công cụ mạnh mẽ giúp bạn phân tích hiệu suất ứng dụng, bao gồm cả hiệu suất UI. Nó cho phép bạn xem xét các thông số như thời gian phản hồi, thời gian tải trang và các thông số khác. Ngoài ra, DevTools còn giúp bạn tìm kiếm và sửa lỗi hiệu suất ứng dụng một cách hiệu quả.
Mở trang câu hỏi này →
AA screen
BA widget tree describing the UI
CApplication state
DRendered pixels
Lời giải
Phương thức build() trong một widget là một phần quan trọng trong quá trình tạo ra giao diện người dùng. Nó được sử dụng để xác định cấu trúc của giao diện người dùng. Khi bạn gọi phương thức build(), nó sẽ trả về một cây widget mô tả giao diện người dùng. Cây widget này bao gồm tất cả các widget con và các thuộc tính của chúng. Điều này cho phép bạn tạo ra giao diện người dùng phức tạp và linh hoạt. Ví dụ, bạn có thể tạo ra một cây widget mô tả một màn hình đăng nhập với các widget con như trường nhập liệu và nút đăng nhập. Phương thức build() là một công cụ mạnh mẽ giúp bạn tạo ra giao diện người dùng tùy chỉnh và hiệu quả.
Mở trang câu hỏi này →
ADeployment is UI logic
BApps can be tested without publishing
CIt replaces authentication
DIt handles APIs
Lời giải
Chương 14 được coi là tùy chọn (Plus) vì nó cung cấp một số tính năng đặc biệt mà không phải tất cả các dự án đều cần. Một trong những lý do chính là ứng dụng có thể được thử nghiệm mà không cần xuất bản. Điều này cho phép các nhà phát triển kiểm tra và thử nghiệm ứng dụng của mình mà không cần phải xuất bản nó lên môi trường sản xuất. Điều này giúp tiết kiệm thời gian và giảm thiểu rủi ro khi thử nghiệm ứng dụng.
Mở trang câu hỏi này →
7What is rebuild scope optimization in Flutter?4 lựa chọnDễ100% trả lời đúng
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 →
ATrue
BFalse
Lời giải
Khi xây dựng ứng dụng Flutter, việc kiểm soát kích thước của ứng dụng là rất quan trọng để đảm bảo hiệu suất và trải nghiệm người dùng tốt hơn. Command 'flutter build apk --analyze-size' được sử dụng để phân tích và đánh giá các thành phần nào đóng góp nhiều nhất vào kích thước của ứng dụng. Điều này giúp nhà phát triển có thể xác định và tối ưu hóa các thành phần không cần thiết hoặc có thể được giảm kích thước để giảm kích thước tổng thể của ứng dụng. Việc sử dụng command này cũng giúp nhà phát triển có thể tối ưu hóa quy trình xây dựng và phân phối ứng dụng của mình.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Chế độ Profile Mode được sử dụng để kiểm tra các tính năng hiệu suất của ứng dụng như FPS và jank trước khi triển khai. Điều này cho phép các nhà phát triển đánh giá và cải thiện hiệu suất của ứng dụng mà không cần phải triển khai nó. Chế độ Profile Mode thường được sử dụng trong quá trình phát triển và thử nghiệm để đảm bảo rằng ứng dụng hoạt động mượt mà và không có sự gián đoạn. Nó cũng giúp các nhà phát triển xác định và giải quyết các vấn đề hiệu suất trước khi ứng dụng được phát hành.
Mở trang câu hỏi này →
ALong lists — builder only builds items in the viewport (lazy)
BAlways same performance
CBuilder never works
DEven for 1000 items always use `children`
Lời giải
Khi sử dụng ListView trong Flutter, bạn có thể chọn giữa hai cách khác nhau để tạo danh sách: sử dụng thuộc tính children hoặc ListView.builder. Trong trường hợp sử dụng children, bạn cần tạo tất cả các item trong danh sách trước khi hiển thị. Điều này có thể dẫn đến việc sử dụng nhiều tài nguyên và giảm hiệu suất, đặc biệt khi danh sách rất dài. Ngược lại, ListView.builder cho phép bạn tạo các item chỉ khi chúng được hiển thị trong viewport. Điều này giúp tiết kiệm tài nguyên và cải thiện hiệu suất. Vì vậy, ListView.builder là lựa chọn tốt hơn khi bạn cần hiển thị danh sách dài.
Mở trang câu hỏi này →
AiOS only
BSame
CBoth entered by users on Play
D`versionCode` integer bumps each upload; `versionName` user-visible string
Lời giải
Trong phát triển ứng dụng Android, `versionCode` và `versionName` là hai thuộc tính quan trọng trong tệp AndroidManifest.xml. `versionCode` là một số nguyên tăng dần sau mỗi lần cập nhật ứng dụng, giúp hệ thống quản lý phiên bản (version management) xác định phiên bản ứng dụng hiện tại. `versionName`, mặt khác, là một chuỗi ký tự được sử dụng để hiển thị phiên bản ứng dụng cho người dùng. Điều này có nghĩa là `versionCode` được tự động tăng lên sau mỗi lần cập nhật, trong khi `versionName` có thể được cập nhật theo ý muốn của nhà phát triển để hiển thị cho người dùng. Ví dụ, phiên bản ứng dụng có thể là 1.2, nhưng `versionCode` có thể là 5, nếu đã có 4 lần cập nhật trước đó.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Một 'Release Build' thực sự không bao gồm tất cả thông tin debug để giúp khắc phục các vấn đề trên thiết bị vật lý. Thay vào đó, nó được thiết kế để chạy trên các thiết bị sản xuất và thường được sử dụng để phân phối phần mềm cho người dùng cuối. Thông tin debug có thể làm tăng kích thước của file executable và có thể chứa thông tin nhạy cảm về mã nguồn, vì vậy nó thường được loại bỏ trong quá trình xây dựng release. Điều này giúp đảm bảo rằng phần mềm được phân phối là ổn định và an toàn để sử dụng.
Mở trang câu hỏi này →
APlay prefers/requires AAB for splits/optimization; APK often for sideload/internal
BSame
CAAB is iOS-only
DAPK cannot install
Lời giải
AAB (Android App Bundle) và APK (file cài đặt Android) là hai định dạng khác nhau của ứng dụng Android. Khi phân phối ứng dụng trên Google Play, AAB được ưu tiên vì nó cho phép Google Play Store phân phối ứng dụng theo các phiên bản khác nhau dựa trên thiết bị và hệ điều hành của người dùng. Điều này giúp tối ưu hóa kích thước ứng dụng và giảm thiểu thời gian tải xuống. Tuy nhiên, trong một số trường hợp, APK vẫn được sử dụng, chẳng hạn như khi người dùng muốn cài đặt ứng dụng từ nguồn bên ngoài hoặc khi cần cài đặt ứng dụng trên thiết bị không có kết nối Internet.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Một AppBundle (.aab) là định dạng được khuyến nghị để xuất bản ứng dụng Flutter lên Google Play. Khi xuất bản ứng dụng Flutter lên Google Play, bạn cần tạo một tệp tin AppBundle (.aab) thay vì tệp tin APK (.apk). Định dạng AppBundle (.aab) cung cấp nhiều lợi ích, bao gồm khả năng phân phối ứng dụng lên Google Play Store một cách dễ dàng hơn và khả năng cập nhật ứng dụng một cách tự động. Ngoài ra, định dạng AppBundle (.aab) cũng giúp giảm thiểu kích thước tệp tin ứng dụng và tăng tốc độ tải xuống. Vì vậy, nếu bạn muốn xuất bản ứng dụng Flutter lên Google Play, bạn nên sử dụng định dạng AppBundle (.aab).
Mở trang câu hỏi này →
15build(BuildContext context) returns?4 lựa chọn
AFunction
BState
CWidget
DTheme
Lời giải
Khi xây dựng một ứng dụng Flutter, bạn sẽ thường xuyên gặp hàm build(BuildContext context). Hàm này có nhiệm vụ tạo ra một widget mới dựa trên trạng thái của ứng dụng. Widget là một phần tử cơ bản trong giao diện người dùng của ứng dụng Flutter. Nó có thể là một text, một hình ảnh, một button, hoặc bất kỳ thứ gì khác. Hàm build(BuildContext context) sẽ trả về một widget mới, và widget này sẽ được thêm vào cây widget của ứng dụng. Điều này sẽ giúp ứng dụng của bạn được cập nhật theo thời gian và phản ứng với các sự kiện của người dùng.
Mở trang câu hỏi này →
Aflutter build apk --release --analyze-size
Bflutter clean
Cflutter pub get --analyze
Ddart fix --apply
Lời giải
Để phân tích kích thước của bản phát hành (release build size), bạn cần sử dụng lệnh phù hợp. Trong các lựa chọn trên, lệnh "flutter build apk --release --analyze-size" là lựa chọn đúng. Lệnh này cho phép bạn phân tích kích thước của bản phát hành APK mà không cần phải xây dựng nó. Điều này giúp bạn có thể dự đoán kích thước của ứng dụng trên thiết bị di động trước khi xây dựng nó. Ngoài ra, lệnh này cũng cho phép bạn phân tích kích thước của các tệp tin và thư viện được sử dụng trong ứng dụng của bạn. Điều này giúp bạn có thể tối ưu hóa kích thước của ứng dụng và giảm thiểu thời gian tải xuống.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Khi bạn tách một mục danh sách phức tạp thành một widget riêng biệt, hiệu suất có thể được cải thiện bằng cách giảm thiểu các rebuild không cần thiết. Điều này xảy ra vì widget riêng biệt không phải rebuild lại khi danh sách phức tạp thay đổi. Ví dụ, nếu bạn có một danh sách phức tạp với nhiều mục và bạn muốn thêm hoặc xóa một mục, widget riêng biệt sẽ không bị ảnh hưởng bởi sự thay đổi này. Điều này giúp giảm thiểu thời gian rebuild và cải thiện hiệu suất tổng thể của ứng dụng.
Mở trang câu hỏi này →
APerformance Timeline in DevTools
Bflutter build apk --analyze-size
Cfactory Model.fromJson(Map<String, dynamic> json)
DString interpolation using `${expression}`
Lời giải

Trong Dart, để chèn giá trị của một biểu thức vào một chuỗi, chúng ta sử dụng cú pháp chèn chuỗi (string interpolation). Cú pháp này sử dụng dấu ngoặc nhọn `${expression}` để chèn giá trị của biểu thức vào chuỗi. Ví dụ:

Lời giải
var name = 'Dart';
print('Xin chào, tôi là $name');

Trong ví dụ trên, giá trị của biến `name` được chèn vào chuỗi 'Xin chào, tôi là ${name}'. Điều này giúp chúng ta tạo ra các chuỗi phức tạp và dễ đọc hơn.

Mở trang câu hỏi này →
Aflutter build apk --analyze-size
BAn authentication token.
CArrange, Act, and Assert.
DPerformance Timeline in DevTools
Lời giải
Trong Lab 11, mẫu 'AAA' được sử dụng để kiểm tra các chức năng của ứng dụng. Mỗi chữ cái trong 'AAA' đại diện cho một bước trong quá trình kiểm tra. 'A' là Arrange, bước này liên quan đến việc chuẩn bị dữ liệu và trạng thái ban đầu của ứng dụng. 'A' thứ hai là Act, bước này liên quan đến việc thực hiện hành động hoặc chức năng cần kiểm tra. 'A' thứ ba là Assert, bước này liên quan đến việc xác minh kết quả sau khi thực hiện hành động hoặc chức năng. Mẫu 'AAA' giúp các nhà phát triển tổ chức và thực hiện các thử nghiệm hiệu quả hơn.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Khi xây dựng danh sách dài, ListView.builder được coi là lựa chọn hiệu quả hơn so với ListView thông thường. Điều này là vì ListView.builder được thiết kế để xây dựng danh sách một cách động, nghĩa là nó chỉ tạo ra các yếu tố cần thiết trong danh sách khi chúng được hiển thị trên màn hình. Điều này giúp giảm thiểu việc tạo ra các yếu tố không cần thiết và cải thiện hiệu suất của ứng dụng. Trong khi đó, ListView thông thường sẽ tạo ra tất cả các yếu tố trong danh sách ngay từ đầu, ngay cả khi chúng không được hiển thị trên màn hình. Điều này có thể dẫn đến lãng phí tài nguyên và giảm hiệu suất của ứng dụng.
Mở trang câu hỏi này →