Tất cả câu hỏi

Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.

9.400/15.301 câuCòn 5.901
AArrange, Act, and Assert.
Bflutter build apk --analyze-size
CString interpolation using `${expression}`
DPerformance Timeline in DevTools
Lời giải
Để xác định các thành phần nào đang đóng góp nhiều nhất vào kích thước APK cuối cùng của ứng dụng, bạn cần sử dụng lệnh được cho phép phân tích kích thước APK. Trong Flutter, lệnh này được gọi là "flutter build apk --analyze-size". Lệnh này sẽ giúp bạn thấy được các thành phần nào đang chiếm nhiều không gian nhất trong APK của bạn, từ đó bạn có thể tối ưu hóa và giảm thiểu kích thước APK để ứng dụng của mình trở nên mỏng nhẹ hơn và tải nhanh hơn.
Mở trang câu hỏi này →
AIt allows a constructor to return an existing instance or a subclass instance instead of always creating a new one.
BProfile mode is for performance testing with some debugging tools, while Release mode is fully optimised for deployment.
CIt allows a widget to rebuild only when a specific part of a model changes, rather than the entire model.
DIt allows a single child widget to be scrollable when it exceeds the screen's vertical or horizontal space.
Lời giải
Trong Dart, một 'factory' constructor là một loại constructor đặc biệt. Nó cho phép constructor tạo ra một đối tượng mới hoặc một đối tượng con thay vì luôn tạo ra một đối tượng mới. Điều này có nghĩa là factory constructor có thể trả về một đối tượng đã tồn tại hoặc một đối tượng con thay vì luôn tạo ra một đối tượng mới. Điều này rất hữu ích khi bạn muốn tạo ra một đối tượng mới dựa trên một đối tượng đã tồn tại hoặc khi bạn muốn tạo ra một đối tượng con từ một đối tượng cha. Ví dụ, bạn có thể sử dụng factory constructor để tạo ra một đối tượng mới dựa trên một đối tượng đã tồn tại hoặc để tạo ra một đối tượng con từ một đối tượng cha.
Mở trang câu hỏi này →
AIt allows a single child widget to be scrollable when it exceeds the screen's vertical or horizontal space.
BProfile mode is for performance testing with some debugging tools, while Release mode is fully optimised for deployment.
CIt manages the focus state of a specific widget, such as a text field, and handles keyboard events.
DIt allows a constructor to return an existing instance or a subclass instance instead of always creating a new one.
Lời giải
Khi chạy ứng dụng Flutter, có hai chế độ chạy chính là 'Profile mode' và 'Release mode'. 'Profile mode' được sử dụng để kiểm tra hiệu suất và thử nghiệm với một số công cụ debug. Trong khi đó, 'Release mode' được tối ưu hóa hoàn toàn cho việc triển khai ứng dụng. Điều này có nghĩa là khi bạn chạy ứng dụng trong 'Release mode', ứng dụng sẽ được tối ưu hóa để chạy nhanh và ổn định hơn, nhưng đồng thời cũng sẽ mất đi một số tính năng debug và kiểm tra hiệu suất. Vì vậy, 'Profile mode' thường được sử dụng trong quá trình phát triển và thử nghiệm, trong khi 'Release mode' được sử dụng khi ứng dụng đã sẵn sàng để triển khai.
Mở trang câu hỏi này →
9384What is BuildContext used for?4 lựa chọn
AStore data
BWidget location in widget tree
CAPI calls
DAnimation
Lời giải
BuildContext là một đối tượng quan trọng trong Flutter, giúp xác định vị trí của một widget trong cây widget. Nó cung cấp thông tin về vị trí của widget, bao gồm cả vị trí của cha, mẹ và các anh chị em của nó. BuildContext cũng giúp bạn truy cập vào các phương thức và thuộc tính của widget cha, chẳng hạn như kích thước, vị trí và trạng thái của widget. Điều này cho phép bạn xây dựng các ứng dụng phức tạp hơn và dễ dàng hơn bằng cách chia nhỏ ứng dụng thành các phần nhỏ hơn và dễ quản lý hơn.
Mở trang câu hỏi này →
AReplaces Hot Reload
BOnly applies to WebView
CRemoves unreferenced code in release builds (smaller size)
DIncreases app size
Lời giải
Tree shaking trong Dart/Flutter là một tính năng giúp loại bỏ mã không được sử dụng trong ứng dụng. Điều này có nghĩa là bất kỳ mã nào không được sử dụng trong mã nguồn sẽ không được bao gồm trong bản phát hành cuối cùng của ứng dụng. Điều này giúp giảm kích thước của ứng dụng và cải thiện hiệu suất. Khi bạn sử dụng tree shaking, Dart sẽ tự động loại bỏ mã không cần thiết, giúp bạn tiết kiệm thời gian và công sức. Điều này đặc biệt hữu ích khi bạn đang phát triển ứng dụng lớn và muốn đảm bảo rằng mã của bạn được tối ưu hóa.
Mở trang câu hỏi này →
AOnly measure build time
BBreak down APK/AAB size (treemap, report)
CAutomatically remove unused dependencies
DMust run on iOS only
Lời giải
Tùy chọn `flutter build apk --analyze-size` giúp phân tích kích thước của tệp APK hoặc AAB. Khi chạy lệnh này, Flutter sẽ tạo ra một bản phân tích chi tiết về kích thước của từng phần trong tệp APK hoặc AAB, bao gồm cả hình ảnh, mã nguồn, thư viện phụ thuộc, v.v. Điều này giúp bạn dễ dàng xác định được phần nào trong ứng dụng chiếm nhiều không gian nhất và có thể giúp bạn tối ưu hóa kích thước của ứng dụng để giảm thiểu thời gian tải xuống và tăng tốc độ hoạt động.
Mở trang câu hỏi này →
ANo effect
BRequired for performance
CBest optimization
DFlutter treats every item as new — loses scroll/selection state
Lời giải
Khi sử dụng `UniqueKey()` cho mỗi item trong `ListView.builder` trong quá trình `build`, mục đích chính là để giúp Flutter xác định từng item là duy nhất. Điều này đặc biệt quan trọng khi bạn muốn giữ nguyên trạng thái cuộn và chọn lựa của người dùng sau khi item được xây dựng lại. Nếu không sử dụng `UniqueKey()`, Flutter sẽ coi mỗi item là mới và sẽ mất trạng thái cuộn và chọn lựa hiện tại. Vì vậy, việc sử dụng `UniqueKey()` là cần thiết để đảm bảo rằng trạng thái của người dùng không bị mất khi item được xây dựng lại.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Công cụ 'Widget Inspector' trong DevTools cho phép các nhà phát triển visual hóa cây widget và các ràng buộc bố cục. Công cụ này giúp các nhà phát triển hiểu rõ hơn về cách widget được sắp xếp và bố trí trên màn hình. Nó cho phép họ xem xét và chỉnh sửa các ràng buộc bố cục, từ đó giúp cải thiện hiệu suất và tính thẩm mỹ của ứng dụng. Việc sử dụng công cụ này cũng giúp các nhà phát triển xác định và giải quyết các vấn đề liên quan đến bố cục và widget.
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 →
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 →
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 →
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 →
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 →
9394build(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 →
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 →
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 '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 →
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 →
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 →
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 →