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.

5.420/20.347 câuCòn 14.927
AMVC
BRepository pattern
CSingleton
DFactory
Lời giải
Đáp án đúng: "Repository pattern". Repository pattern (mẫu kho dữ liệu) đặt một lớp trung gian giữa tầng logic, giao diện và các nguồn dữ liệu: repository cung cấp phương thức như getUsers hay saveNote, còn bên trong tự quyết định đọc từ API, sqflite hay SharedPreferences. Giao diện chỉ gọi repository nên không biết dữ liệu lưu ở đâu; đổi nguồn lưu trữ hay thay bằng bản giả khi test đều không phải sửa giao diện. "MVC" là mẫu chia Model, View, Controller cho cả ứng dụng, không chuyên tách logic lưu trữ. "Singleton" chỉ bảo đảm một lớp có một thể hiện duy nhất; repository có thể là singleton nhưng mẫu này không tạo ra sự tách biệt. "Factory" là mẫu khởi tạo đối tượng, giấu cách tạo chứ không giấu nơi lưu dữ liệu.
Mở trang câu hỏi này →
5402What does REST stand for?4 lựa chọn
ARemote State Transfer
BRepresentational State Transfer
CReactive Service Transport
DRequest State Transfer
Lời giải
Đáp án đúng: "Representational State Transfer". REST là kiểu kiến trúc do Roy Fielding mô tả trong luận án tiến sĩ năm 2000: máy khách thao tác trên tài nguyên định danh bằng URL thông qua các phương thức HTTP như GET, POST, PUT, DELETE, máy chủ trả về biểu diễn (representation) của trạng thái tài nguyên, thường là JSON, và mỗi yêu cầu không lưu trạng thái phiên. Ứng dụng Flutter gọi REST API bằng gói http hoặc dio. "Remote State Transfer" sai vì chữ R là Representational, nhấn mạnh việc truyền biểu diễn của tài nguyên chứ không phải trạng thái từ xa. "Reactive Service Transport" sai vì REST không liên quan tới lập trình phản ứng hay một giao thức vận chuyển dịch vụ. "Request State Transfer" sai vì nó cũng bịa nghĩa chữ R, trong khi REST nói về biểu diễn tài nguyên.
Mở trang câu hỏi này →
ALarge datasets
BSimple primitive values
CImages
DComplex objects
Lời giải
Đáp án đúng: "Simple primitive values". SharedPreferences lưu dữ liệu dạng khoá giá trị trên máy, dựa trên SharedPreferences của Android và NSUserDefaults của iOS; nó chỉ hỗ trợ int, double, bool, String và danh sách String, hợp với cờ đã xem màn hình giới thiệu, chế độ tối hay token đăng nhập. "Large datasets" sai vì dữ liệu được nạp cả vào bộ nhớ và không có truy vấn, nên dữ liệu lớn nên dùng sqflite, Hive hay drift. "Images" sai vì tệp ảnh nên lưu vào thư mục của ứng dụng, lấy đường dẫn bằng gói path_provider, rồi chỉ giữ đường dẫn đó. "Complex objects" sai vì nó không lưu trực tiếp được đối tượng; muốn lưu phải tự mã hoá thành chuỗi JSON, và dữ liệu có cấu trúc phức tạp hợp với cơ sở dữ liệu hơn.
Mở trang câu hỏi này →
5404Which practice improves API security?4 lựa chọn
AHardcoding keys
BUsing HTTPS
CIgnoring errors
DUsing globals
Lời giải
Đáp án đúng: "Using HTTPS". HTTPS là HTTP chạy trên TLS: dữ liệu giữa ứng dụng và máy chủ được mã hoá và máy chủ được xác minh bằng chứng chỉ, nên token, mật khẩu hay dữ liệu cá nhân không bị nghe lén hay sửa giữa đường trên mạng Wi-Fi công cộng; Android từ bản 9 còn chặn HTTP thường theo mặc định. "Hardcoding keys" sai vì nhúng khoá API thẳng vào mã khiến ai giải nén APK cũng lấy được; khoá nên giữ phía máy chủ hoặc nạp qua cấu hình an toàn. "Ignoring errors" sai vì bỏ qua lỗi như 401 hay lỗi chứng chỉ có thể để ứng dụng tiếp tục với phiên không hợp lệ và che giấu tấn công. "Using globals" sai vì biến toàn cục chứa token dễ bị truy cập và sửa từ bất kỳ đâu trong mã, làm khó kiểm soát; đó là thói quen xấu chứ không tăng bảo mật.
Mở trang câu hỏi này →
AAnimatedBuilder
BFutureBuilder
CStreamBuilder
DLayoutBuilder
Lời giải
Đáp án đúng: "AnimatedBuilder". AnimatedBuilder nhận tham số animation, thường là AnimationController hay một Animation tạo từ Tween, lắng nghe nó và gọi lại hàm builder mỗi khi giá trị đổi, tức là gần như mỗi khung hình trong lúc hoạt ảnh chạy; phần không đổi có thể truyền qua tham số child để khỏi dựng lại. "FutureBuilder" sai vì nó chỉ dựng lại khi Future chuyển trạng thái, từ đang chờ sang có dữ liệu hoặc lỗi. "StreamBuilder" sai vì nó dựng lại khi Stream phát giá trị mới, như dữ liệu thời gian thực, không gắn với hoạt ảnh. "LayoutBuilder" sai vì nó dựng lại khi ràng buộc kích thước từ widget cha thay đổi, như khi xoay màn hình, dùng để làm giao diện thích ứng.
Mở trang câu hỏi này →
AAccess theme
BAccess Navigator
CAccess state
DAccess layout
Lời giải
Đáp án đúng: "Access Navigator". Navigator là widget nằm trong cây (thường do MaterialApp tạo), nên muốn đẩy hay gỡ màn hình phải tìm tới nó từ vị trí hiện tại: Navigator.push(context, route) và Navigator.pop(context) bên trong đều gọi Navigator.of(context), đi ngược từ BuildContext lên tổ tiên để tìm NavigatorState gần nhất. Không có context đúng vị trí thì không biết ngăn xếp route nào cần thao tác. "Access theme" sai vì Theme.of(context) cũng dùng context nhưng để đọc màu sắc và kiểu chữ, không phải lý do context cần thiết khi điều hướng. "Access state" sai vì trạng thái của widget hay Provider có thể đọc qua context, nhưng điều hướng không cần nó. "Access layout" sai vì thông tin bố cục như kích thước đến từ MediaQuery hay LayoutBuilder, không liên quan việc chuyển màn hình.
Mở trang câu hỏi này →
AAfter API integration
BDuring UI/UX design phase
COnly at deployment
DOnly for testing
Lời giải
Đáp án đúng: "During UI/UX design phase". Theme trong Flutter, qua ThemeData với colorScheme, textTheme và theme của từng thành phần, gom màu sắc, kiểu chữ, hình dáng nút vào một chỗ và truyền xuống cả cây widget, đọc bằng Theme.of(context). Nên quyết định nó từ giai đoạn thiết kế UI/UX, khi đã có bảng màu và kiểu chữ, để mọi màn hình viết sau đều dùng chung, tránh phải sửa màu cứng rải rác khắp mã. "After API integration" sai vì kết nối API là việc của tầng dữ liệu, không liên quan và không phải điều kiện để làm theme. "Only at deployment" sai vì để tới lúc phát hành mới làm theme thì phải sửa lại toàn bộ giao diện đã viết. "Only for testing" sai vì theme phục vụ người dùng thật; kiểm thử có thể dùng nó nhưng đó không phải lý do tạo ra nó.
Mở trang câu hỏi này →
AImprove UI design
BEnsure app quality and correctness
CSpeed up builds
DManage state
Lời giải
Đáp án đúng: "Ensure app quality and correctness". Kiểm thử trong Flutter gồm ba mức: unit test kiểm hàm và lớp logic, widget test dùng WidgetTester dựng widget rồi tìm bằng find và khẳng định bằng expect, integration test chạy cả ứng dụng trên thiết bị. Mục đích chung là chứng minh ứng dụng làm đúng yêu cầu, phát hiện lỗi sớm và tránh lỗi cũ quay lại khi sửa mã (regression). "Improve UI design" sai vì kiểm thử chỉ xác minh giao diện hoạt động đúng, không thiết kế cho nó đẹp hơn. "Speed up builds" sai vì chạy kiểm thử còn thêm thời gian vào quy trình build. "Manage state" sai vì quản lý trạng thái là việc của setState, Provider, Bloc; kiểm thử chỉ xác nhận chúng chạy đúng.
Mở trang câu hỏi này →
5409What is the role of v-sync in Flutter?4 lựa chọn
ASync data
BOptimize animation resources
CControl layout
DHandle navigation
Lời giải
Đáp án đúng: "Optimize animation resources". Tham số vsync của AnimationController nhận một TickerProvider, thường là State trộn SingleTickerProviderStateMixin; nó cấp Ticker đồng bộ với nhịp làm tươi màn hình, nên controller chỉ tính giá trị đúng một lần mỗi khung hình thật, và Ticker bị tắt khi widget không hiển thị (ví dụ màn hình đã bị route khác che), nhờ vậy không tốn CPU và pin cho khung hình thừa. Cách gọi của phương án là rút gọn: việc trực tiếp của vsync là đồng bộ với màn hình, còn tiết kiệm tài nguyên hoạt ảnh là kết quả của việc đồng bộ đó, nên đây vẫn là mô tả đúng nhất trong bốn lựa chọn. "Sync data" sai vì chữ sync dễ gây hiểu nhầm, vsync không đồng bộ dữ liệu giữa ứng dụng và máy chủ. "Control layout" sai vì bố cục do hệ thống ràng buộc kích thước quyết định. "Handle navigation" sai vì chuyển màn hình là việc của Navigator.
Mở trang câu hỏi này →
5410What does status code 200 indicate?4 lựa chọn
AClient error
BServer error
CSuccess
DRedirect
Lời giải
Đáp án đúng: "Success". Mã trạng thái HTTP được chia nhóm theo chữ số đầu, và 200 OK thuộc nhóm 2xx nghĩa là yêu cầu đã được máy chủ xử lý thành công, thân phản hồi chứa dữ liệu yêu cầu. Trong Flutter, sau await http.get(...) ta thường kiểm tra response.statusCode == 200 rồi mới gọi jsonDecode(response.body), ngược lại thì báo lỗi. "Client error" sai vì lỗi phía máy khách là nhóm 4xx, như 400 yêu cầu sai, 401 chưa xác thực, 404 không tìm thấy. "Server error" sai vì lỗi phía máy chủ là nhóm 5xx, như 500 lỗi nội bộ hay 503 dịch vụ tạm ngưng. "Redirect" sai vì chuyển hướng là nhóm 3xx, như 301 chuyển vĩnh viễn hay 302 chuyển tạm, kèm tiêu đề Location chỉ địa chỉ mới.
Mở trang câu hỏi này →
AThe variable can be reassigned later
BThe variable value is fixed after assignment
CThe variable is global
DThe variable is private
Lời giải
Đáp án đúng: "The variable value is fixed after assignment". Biến khai báo final chỉ được gán đúng một lần, ví dụ final name = 'An'; sau đó gán lại sẽ bị báo lỗi biên dịch. Khác với const, giá trị của final có thể được tính lúc chạy như final now = DateTime.now(), còn const phải biết từ lúc biên dịch. Lưu ý final cố định tham chiếu chứ không làm đối tượng bất biến: một List khai báo final vẫn gọi add được. "The variable can be reassigned later" mô tả biến var thông thường, trái hẳn với final. "The variable is global" sai vì final dùng được cho biến cục bộ, trường của lớp hay biến cấp cao nhất; phạm vi do vị trí khai báo quyết định. "The variable is private" sai vì tính riêng tư trong Dart do dấu gạch dưới ở đầu tên quyết định, như _count.
Mở trang câu hỏi này →
AImprove UI colors
BEnsure smooth and responsive UI
CReduce code size
DAdd features
Lời giải
Đáp án đúng: "Ensure smooth and responsive UI". Tối ưu hiệu năng trong Flutter nhắm tới việc mỗi khung hình được dựng và vẽ kịp trong ngân sách thời gian, khoảng 16 ms ở 60 khung mỗi giây, để cuộn, hoạt ảnh không giật và chạm vào là phản hồi ngay; các kỹ thuật như dùng const, ListView.builder, tránh việc nặng trong build, đưa tính toán lớn sang isolate đều phục vụ mục tiêu đó và được đo bằng DevTools. "Improve UI colors" sai vì màu sắc là thiết kế thẩm mỹ, không liên quan tới tốc độ. "Reduce code size" sai vì giảm kích thước ứng dụng là một mối quan tâm riêng (tải về, dung lượng), có ích nhưng không phải mục tiêu chính của tối ưu hiệu năng lúc chạy. "Add features" sai vì thêm tính năng là phát triển sản phẩm, thường còn làm tăng tải cần tối ưu.
Mở trang câu hỏi này →
AGET
BDELETE
CPOST
DHEAD
Lời giải
Đáp án đúng: "POST". POST gửi dữ liệu trong thân yêu cầu để máy chủ tạo tài nguyên mới, thường nhận lại mã 201 Created; trong Flutter dùng http.post với body là chuỗi JSON tạo bằng jsonEncode và header Content-Type là application/json. "GET" dùng để lấy dữ liệu, tham số nằm trên URL, không nên làm thay đổi dữ liệu trên máy chủ. "DELETE" yêu cầu xoá một tài nguyên đã có, không gửi dữ liệu mới. "HEAD" giống GET nhưng máy chủ chỉ trả header mà không trả thân, dùng để kiểm tra tài nguyên có tồn tại hay xem kích thước của nó. Cập nhật tài nguyên có sẵn thì dùng PUT hoặc PATCH, còn tạo mới thì dùng POST.
Mở trang câu hỏi này →
AListView
BCustomScrollView
CGridView
DStack
Lời giải
Đáp án đúng: "CustomScrollView". CustomScrollView ghép nhiều sliver (mảnh cuộn) vào cùng một vùng cuộn, nhờ đó SliverAppBar có thể co lại, giãn ra, nổi lên hay ghim ở đầu màn hình khi người dùng cuộn SliverList hay SliverGrid bên dưới, vì thanh tiêu đề và nội dung chia sẻ chung một vị trí cuộn. "ListView" sai vì nó chỉ cuộn một danh sách tuyến tính; đặt AppBar phía trên ListView thì AppBar đứng yên, không phản ứng với việc cuộn. "GridView" sai vì nó chỉ cuộn một lưới ô, cũng không chứa được thanh tiêu đề dạng sliver. "Stack" sai vì nó xếp chồng các widget lên nhau và bản thân không cuộn được, nên không có tương tác nào giữa cuộn và thanh tiêu đề.
Mở trang câu hỏi này →
ATextInputType.number
BTextInputType.emailAddress
CTextInputType.text
DTextInputType.url
Lời giải
Đáp án đúng: "TextInputType.emailAddress". Gán keyboardType: TextInputType.emailAddress cho TextField hay TextFormField báo hệ điều hành hiện bàn phím dành cho thư điện tử, có sẵn phím @ và dấu chấm, thường tắt tự sửa chính tả, nên người dùng gõ địa chỉ nhanh và ít sai hơn. "TextInputType.number" sai vì nó bật bàn phím số, không có chữ cái và ký tự @, chỉ hợp với ô nhập số lượng hay mã số. "TextInputType.text" sai vì đây là bàn phím chữ mặc định, dùng được nhưng không tối ưu gì cho địa chỉ thư, người dùng phải tự chuyển trang ký tự để tìm @. "TextInputType.url" sai vì bàn phím này tối ưu cho địa chỉ web với phím gạch chéo và .com, hợp với ô nhập đường dẫn chứ không phải thư điện tử.
Mở trang câu hỏi này →
AMVC
BBLoC
CSingleton
DFactory
Lời giải
Đáp án đúng: "BLoC". BLoC (Business Logic Component) tách logic nghiệp vụ khỏi widget: giao diện gửi event, Bloc xử lý và phát state mới qua Stream, widget dùng BlocBuilder để dựng lại; mỗi tính năng có Bloc riêng, kiểm thử độc lập được, nên phù hợp ứng dụng lớn, nhiều người cùng phát triển. "MVC" (Model–View–Controller) là mẫu kiến trúc chung, ít được dùng trong Flutter cho quản lý trạng thái vì controller dễ phình to và không gắn với cơ chế dựng lại widget. "Singleton" là mẫu thiết kế bảo đảm một lớp chỉ có một thể hiện; dùng nó giữ trạng thái chung tạo phụ thuộc toàn cục và không tự báo cho giao diện khi dữ liệu đổi. "Factory" là mẫu khởi tạo đối tượng (Dart có factory constructor), không liên quan tới quản lý trạng thái.
Mở trang câu hỏi này →
AThe app restarts
BThe widget tree is rebuilt
CData is saved permanently
DNavigation occurs
Lời giải
Đáp án đúng: "The widget tree is rebuilt". Gọi setState trong một StatefulWidget báo cho framework rằng trạng thái của State đó đã đổi; widget được đánh dấu cần dựng lại, và ở khung hình kế tiếp phương thức build chạy lại, tạo cây con mới cho widget ấy. Framework so cây mới với cây cũ, tái sử dụng Element và RenderObject khi được, chỉ cập nhật phần thật sự thay đổi lên màn hình; đối tượng State vẫn giữ nguyên nên các biến khác không mất. "The app restarts" sai vì chỉ phần cây dưới widget đó dựng lại, ứng dụng không khởi động lại và trạng thái không bị xoá. "Data is saved permanently" sai vì setState chỉ đổi dữ liệu trong bộ nhớ, không ghi xuống ổ đĩa. "Navigation occurs" sai vì setState không đổi màn hình; điều hướng cần Navigator.
Mở trang câu hỏi này →
AAPI delay
BState duplication
CTheme conflict
DNavigation error
Lời giải
Đáp án đúng: "State duplication". Nâng trạng thái (state hoisting, hay lifting state up) là đưa dữ liệu mà nhiều widget cùng cần lên tổ tiên chung gần nhất, rồi truyền giá trị xuống qua tham số và truyền hàm gọi lại như onChanged lên trên; nhờ đó chỉ có một nguồn sự thật, tránh việc mỗi widget giữ một bản sao riêng rồi lệch nhau. "API delay" sai vì độ trễ mạng được xử lý bằng Future, trạng thái chờ và bộ nhớ đệm, không phụ thuộc trạng thái đặt ở đâu trong cây. "Theme conflict" sai vì giao diện màu sắc được thống nhất qua ThemeData và Theme.of(context), một cơ chế khác hẳn. "Navigation error" sai vì lỗi điều hướng như route không tồn tại hay pop sai ngăn xếp thuộc về Navigator, không phải vấn đề mà việc nâng trạng thái nhắm tới.
Mở trang câu hỏi này →
5419What causes unnecessary widget rebuilds?4 lựa chọn
AState changes
BOverusing setState()
CUsing Provider
DUsing const widgets
Lời giải
Đáp án đúng: "Overusing setState()". Mỗi lần gọi setState, Flutter đánh dấu State đó cần dựng lại và chạy lại build cùng cả cây con; gọi nó quá thường xuyên, ở widget quá cao, hoặc khi dữ liệu thực ra không đổi, sẽ dựng lại nhiều phần không cần thiết và tốn thời gian khung hình. "State changes" sai vì thay đổi trạng thái là lý do chính đáng để dựng lại; giao diện phải cập nhật khi dữ liệu đổi, đó là dựng lại cần thiết chứ không thừa. "Using Provider" sai vì Provider dùng đúng cách với Consumer, Selector hay context.select còn giúp khoanh vùng widget lắng nghe, giảm dựng lại; nó chỉ gây thừa khi đặt lắng nghe quá rộng. "Using const widgets" sai vì widget const được dùng chung một thể hiện nên Flutter bỏ qua việc dựng lại chúng, tức là biện pháp chống dựng lại thừa.
Mở trang câu hỏi này →
AAnimatedContainer
BAnimationController
CTween
DTicker
Lời giải
Đáp án đúng: "AnimatedContainer". Hoạt ảnh ngầm định (implicit animation) là widget tự lo toàn bộ hoạt ảnh: ta chỉ đổi giá trị thuộc tính như width, color, padding rồi gọi setState, AnimatedContainer tự chuyển dần từ giá trị cũ sang mới theo duration và curve đã khai báo, không cần tự tạo controller. Nó thuộc họ ImplicitlyAnimatedWidget cùng AnimatedOpacity, AnimatedPadding. "AnimationController" sai vì đây là công cụ của hoạt ảnh tường minh (explicit animation): ta phải tự tạo với vsync, gọi forward, reverse và dispose. "Tween" sai vì Tween chỉ ánh xạ khoảng giá trị từ begin tới end, phải gắn với một Animation hay controller mới chạy được, bản thân không phải widget. "Ticker" sai vì Ticker là cơ chế cấp thấp gọi hàm mỗi khung hình, là nền móng mà AnimationController dùng bên dưới.
Mở trang câu hỏi này →