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.060/16.752 câuCòn 7.692
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Trong một dự án Flutter, các đơn vị kiểm thử (unit tests) nên được lưu trữ trong thư mục 'test/'. Điều này giúp phân biệt rõ ràng giữa mã nguồn chính thức và mã nguồn kiểm thử, đồng thời cũng giúp dễ dàng tìm kiếm và chạy các đơn vị kiểm thử. Việc lưu trữ các đơn vị kiểm thử trong thư mục 'test/' cũng giúp duy trì tính nhất quán và dễ dàng bảo trì dự án.
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Mẫu AAA trong kiểm thử là một phương pháp kiểm thử đơn vị được sử dụng để viết các trường hợp kiểm thử đơn giản và hiệu quả. Mẫu AAA được chia thành ba phần chính: Arrange, Act và Assert.
Arrange: Đây là phần đầu tiên trong mẫu AAA, nơi bạn sẽ chuẩn bị dữ liệu và môi trường cần thiết cho trường hợp kiểm thử. Bạn sẽ tạo các đối tượng, thiết lập các giá trị và tạo ra các điều kiện cần thiết để thực hiện trường hợp kiểm thử.
Act: Đây là phần thực hiện của mẫu AAA, nơi bạn sẽ thực hiện hành động hoặc phương thức cần kiểm thử. Bạn sẽ gọi phương thức, thực hiện hành động và tạo ra các kết quả mong muốn.
Assert: Đây là phần cuối cùng của mẫu AAA, nơi bạn sẽ xác minh kết quả thực hiện trong phần Act. Bạn sẽ so sánh kết quả thực hiện với kết quả mong muốn và xác định xem trường hợp kiểm thử đã thành công hay chưa.
Mẫu AAA giúp các nhà phát triển viết các trường hợp kiểm thử đơn giản và hiệu quả, giúp họ có thể dễ dàng xác định và sửa lỗi các vấn đề trong mã nguồn.
AIt ensures the UI avoids system intrusions like notches, status bars, and camera cutouts.
BIt encapsulates all network communication logic, separating it from the UI layer.
CUnit tests validate pure logic, while widget tests validate UI rendering and interaction.
DTo improve performance and prevent sensitive information from being logged in production.
Lời giải
Mở trang câu hỏi này →Trong Lab 12, việc xóa bỏ các câu lệnh `print()` trước khi xây dựng bản phát hành Release là rất quan trọng. Điều này giúp cải thiện hiệu suất và ngăn chặn thông tin nhạy cảm được ghi lại trong môi trường sản xuất. Khi bạn chạy ứng dụng trong môi trường phát triển, việc in ra console thông tin như giá trị biến, trạng thái ứng dụng,... là hoàn toàn bình thường. Tuy nhiên, trong môi trường sản xuất, việc in ra console có thể gây ra vấn đề bảo mật và ảnh hưởng đến hiệu suất ứng dụng. Vì vậy, việc xóa bỏ các câu lệnh `print()` trước khi xây dựng bản phát hành Release giúp đảm bảo ứng dụng hoạt động ổn định và an toàn trong môi trường sản xuất.
9044In Lab 11.2, which function is used to enter text into a `TextField` during a widget test?4 lựa chọn
A
precacheImage()B
tester.enterText()C
ListView.builderD
Navigator.pushNamedLời giải
Mở trang câu hỏi này →Trong Lab 11.2, chúng ta cần tìm hiểu về cách nhập văn bản vào một TextField trong quá trình kiểm tra widget. Để thực hiện điều này, chúng ta sử dụng hàm tester.enterText(). Hàm này cho phép chúng ta nhập văn bản vào TextField một cách dễ dàng và chính xác. Ví dụ, nếu chúng ta muốn nhập văn bản 'Hello World' vào TextField, chúng ta có thể sử dụng lệnh tester.enterText('Hello World'). Điều này giúp chúng ta kiểm tra chức năng của TextField một cách hiệu quả.
ANot in Flutter
BWindows only
CIdentical
DIntegration runs E2E on device/emulator with a driver; widget tests use the test engine
Lời giải
Mở trang câu hỏi này →Câu hỏi này hỏi về sự khác biệt giữa **`integration_test`** và `flutter_test`. **`integration_test`** và `flutter_test` đều là các công cụ kiểm tra trong Flutter, nhưng chúng phục vụ cho các mục đích khác nhau. **`flutter_test`** là một công cụ kiểm tra widget, nó kiểm tra các widget và các hành vi của chúng. Trong khi đó, **`integration_test`** là một công cụ kiểm tra tích hợp, nó kiểm tra các tính năng và các giao diện của ứng dụng từ đầu đến cuối (end-to-end) trên thiết bị hoặc máy ảo. Điều này có nghĩa là **`integration_test`** sẽ kiểm tra toàn bộ ứng dụng, bao gồm cả các giao diện người dùng và các tính năng, trong khi **`flutter_test`** chỉ kiểm tra các widget và các hành vi của chúng.
9046`pump()` vs `pumpAndSettle()` in widget tests?4 lựa chọn
ASame
B`pump` is integration-only
C`pump` advances a frame/short work; `pumpAndSettle` waits for animations/timers to finish
DNeither after tap
Lời giải
Mở trang câu hỏi này →Trong các bài kiểm tra widget, `pump()` và `pumpAndSettle()` là hai phương thức được sử dụng để tiến hành các tác vụ. `pump()` chỉ tiến hành một khung hình hoặc một số tác vụ ngắn, trong khi `pumpAndSettle()` chờ đợi cho đến khi các hiệu ứng animation hoặc timer được hoàn tất. Điều này có nghĩa là nếu bạn chỉ cần tiến hành một tác vụ đơn giản, `pump()` sẽ đủ. Tuy nhiên, nếu tác vụ của bạn bao gồm các hiệu ứng animation hoặc timer, bạn cần sử dụng `pumpAndSettle()` để đảm bảo rằng tác vụ được hoàn tất trước khi tiếp tục kiểm tra.
9047'pumpWidget()' is the function used in widget testing to render the UI for inspection.2 lựa chọn
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Trong quá trình kiểm tra widget, 'pumpWidget()' là một hàm được sử dụng để render giao diện người dùng (UI) cho phép kiểm tra. Hàm này giúp tạo ra một bản sao của giao diện để chúng ta có thể xem xét và kiểm tra. Nó cho phép chúng ta kiểm tra xem giao diện có hoạt động đúng như mong đợi hay không, đồng thời cũng giúp chúng ta xác định được nguyên nhân của các lỗi. Vì vậy, câu trả lời đúng cho câu hỏi này là 'True'.
9048Why use **HTTPS** in production?4 lựa chọn
AWeb only
BHTTPS banned on mobile
CSlows the app
DProtects tokens/data in transit against eavesdropping
Lời giải
Mở trang câu hỏi này →HTTPS được sử dụng trong sản xuất vì nhiều lý do quan trọng. Trước hết, nó giúp bảo vệ thông tin người dùng, bao gồm cả token và dữ liệu nhạy cảm, khỏi việc bị nghe trộm (eavesdropping) khi truyền qua internet. Điều này đặc biệt quan trọng khi người dùng truy cập vào các trang web hoặc ứng dụng yêu cầu đăng nhập hoặc gửi thông tin nhạy cảm. Ngoài ra, HTTPS còn giúp ngăn chặn các cuộc tấn công từ bên ngoài, chẳng hạn như tấn công man-in-the-middle (MITM), nơi kẻ tấn công cố gắng giả mạo giao tiếp giữa người dùng và trang web hoặc ứng dụng.
9049What is session expiration?4 lựa chọn
ATheme reset
BAutomatic logout after inactivity
CUI timeout
DAPI limit
Lời giải
Mở trang câu hỏi này →Session expiration là một tính năng quan trọng trong các hệ thống bảo mật và quản lý truy cập. Nó cho phép hệ thống tự động thoát người dùng khỏi phiên làm việc sau một khoảng thời gian không hoạt động nhất định. Điều này giúp ngăn chặn các cuộc tấn công từ xa và bảo vệ dữ liệu nhạy cảm khỏi bị truy cập trái phép. Khi session expiration được kích hoạt, hệ thống sẽ tự động thoát người dùng khỏi phiên làm việc sau một khoảng thời gian không hoạt động, chẳng hạn như 15 phút, 30 phút hoặc 1 giờ. Điều này giúp đảm bảo rằng người dùng không thể giữ phiên làm việc mở quá lâu và truy cập vào dữ liệu nhạy cảm mà không được phép.
9050Typical logout: what to do with locally stored tokens?4 lựa chọn
APost token to social media
BKeep forever
CRemove token/session from storage and navigate to login
DClear UI only
Lời giải
Mở trang câu hỏi này →Khi thực hiện logout, việc xóa bỏ các token được lưu trữ cục bộ là một bước quan trọng để đảm bảo bảo mật và ngăn chặn truy cập trái phép. Việc giữ lại các token có thể khiến cho thông tin người dùng bị lộ và bị lợi dụng bởi kẻ tấn công. Vì vậy, khi logout, chúng ta cần xóa bỏ các token và phiên làm việc khỏi bộ nhớ lưu trữ và chuyển hướng người dùng đến trang đăng nhập. Điều này sẽ giúp đảm bảo rằng người dùng phải đăng nhập lại để tiếp tục sử dụng dịch vụ.
APayload is usually Base64URL — readable; signature prevents tampering, not hiding payload
BOnly servers can read it
CThere is no payload
DYes, always AES
Lời giải
Mở trang câu hỏi này →JWT (JSON Web Token) là một loại token được sử dụng để xác thực người dùng. Payload của JWT chứa các thông tin về người dùng, chẳng hạn như tên, email, v.v. Tuy nhiên, payload không được mã hóa theo cách bí mật như AES. Thay vào đó, nó được mã hóa bằng Base64URL, một phương thức mã hóa không bí mật. Điều này có nghĩa là bất kỳ ai cũng có thể đọc được payload của JWT, nhưng không thể thay đổi hoặc giả mạo nó mà không bị phát hiện. Signature của JWT được tạo bằng cách sử dụng một thuật toán kĩ thuật số, chẳng hạn như HMAC, và được sử dụng để xác thực tính hợp lệ của payload. Vì vậy, mặc dù payload của JWT có thể đọc được, nhưng signature giúp ngăn chặn việc giả mạo hoặc thay đổi payload.
9052Integration tests validate the entire flow of an application, from login to data retrieval.2 lựa chọn
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Các bài kiểm tra tích hợp xác minh toàn bộ luồng của một ứng dụng, từ đăng nhập đến việc truy xuất dữ liệu. Các bài kiểm tra này giúp đảm bảo rằng ứng dụng hoạt động chính xác và toàn diện, bao gồm cả việc kiểm tra các chức năng liên quan đến dữ liệu và giao diện người dùng. Việc kiểm tra toàn bộ luồng ứng dụng giúp phát hiện ra các lỗi và vấn đề tiềm ẩn, từ đó giúp cải thiện chất lượng và độ tin cậy của ứng dụng.
9053Integration of Firebase Google Sign-In requires the configuration of SHA keys in the Firebase project.2 lựa chọn
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Để thực hiện tích hợp Google Sign-In với Firebase, bạn cần cấu hình các khóa SHA trong dự án Firebase. Điều này giúp xác thực và bảo mật thông tin đăng nhập của người dùng. Khi bạn thêm ứng dụng của mình vào Firebase, bạn sẽ được yêu cầu cung cấp khóa SHA để xác thực quyền truy cập. Việc cấu hình khóa SHA này là bước quan trọng để đảm bảo an toàn và bảo mật cho ứng dụng của bạn khi sử dụng Google Sign-In.
9054How is a Bearer access token usually sent?4 lựa chọn
A`Token: ...`
B`Bearer` is not used in HTTP
C`Authorization: Bearer <token>`
D`Cookie: token=...` is always correct
9055How do access and refresh tokens usually differ?4 lựa chọn
AAccess short-lived for API calls; refresh longer to obtain new access
BAccess is never sent over HTTP
CIdentical
DRefresh is web-only
Lời giải
Mở trang câu hỏi này →Access và refresh token thường có sự khác biệt trong thời gian tồn tại và mục đích sử dụng. Access token thường có thời gian tồn tại ngắn hạn, thường chỉ từ vài phút đến vài giờ, và được sử dụng để thực hiện các yêu cầu API. Ngược lại, refresh token có thời gian tồn tại dài hơn, thường từ vài giờ đến vài ngày, và được sử dụng để yêu cầu một access token mới khi access token hiện tại đã hết hạn. Điều này cho phép người dùng tiếp tục sử dụng ứng dụng mà không cần phải đăng nhập lại. Ngoài ra, access token thường được gửi qua HTTP trong mỗi yêu cầu API, trong khi refresh token thường không được gửi qua HTTP.
9056Google Sign-In on Android — SHA fingerprint is for?4 lựa chọn
ACosmetic only
BRename the app
CNot needed in debug
DFirebase/Android verify the app — misconfig often breaks sign-in
Lời giải
Mở trang câu hỏi này →SHA (Secure Hash Algorithm) fingerprint là một chuỗi mã hóa được sử dụng để xác thực ứng dụng Android với Google Sign-In. Nó giúp xác định danh tính của ứng dụng và ngăn chặn các cuộc tấn công giả mạo. Khi bạn đăng ký ứng dụng Android với Google Sign-In, bạn cần cung cấp SHA fingerprint để xác thực danh tính của ứng dụng. Nếu SHA fingerprint không được cung cấp hoặc không chính xác, ứng dụng có thể không thể đăng nhập thành công vào Google Sign-In. Điều này thường xảy ra khi cấu hình Firebase hoặc Android không đúng, dẫn đến việc xác thực bị phá vỡ.
9057Authentication vs Authorization?4 lựa chọn
AiOS only
BAuthorization means login
CSame
DAuth: who you are; Authorization: what you may do
Lời giải
Mở trang câu hỏi này →Authentication và Authorization là hai khái niệm quan trọng trong bảo mật thông tin. Authentication là quá trình xác thực danh tính của một người dùng, giúp xác định ai đang truy cập vào hệ thống. Authorization là quá trình kiểm soát quyền truy cập vào các tài nguyên hệ thống, giúp xác định những gì người dùng được phép làm. Ví dụ, khi bạn đăng nhập vào một trang web, bạn đã thực hiện quá trình Authentication. Sau đó, bạn có thể thực hiện các hành động như xem trang chủ, đăng bài viết, v.v. Đây là quá trình Authorization. Tóm lại, Authentication giúp xác định ai bạn là, trong khi Authorization giúp xác định những gì bạn được phép làm.
9058A Flutter 'SplashScreen' is often used to determine the initial route based on existing session tokens.2 lựa chọn
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Trong Flutter, 'SplashScreen' thường được sử dụng để xác định tuyến ban đầu dựa trên token phiên hiện có. Khi ứng dụng được khởi động, 'SplashScreen' sẽ được hiển thị trước khi chuyển đến màn hình chính. Trong thời gian này, ứng dụng có thể kiểm tra xem có token phiên hiện có hay không. Nếu có, ứng dụng có thể sử dụng token đó để xác định tuyến ban đầu và chuyển đến màn hình phù hợp. Điều này giúp ứng dụng có thể tự động chuyển đến màn hình mà người dùng đã mở trước đó, mà không cần phải nhập lại thông tin đăng nhập.
AString, int, double, bool, `List<String>` — complex objects often `jsonEncode` → String
Bbool only
CSQLite only
DAny Dart object
Lời giải
Mở trang câu hỏi này →SharedPreferences trong Dart hỗ trợ các loại dữ liệu sau: String, int, double, bool. Ngoài ra, bạn còn có thể lưu trữ danh sách các String bằng cách sử dụng List<String>. Tuy nhiên, nếu bạn muốn lưu trữ các đối tượng phức tạp, bạn cần phải chuyển đổi chúng thành chuỗi bằng cách sử dụng jsonEncode. Điều này cho phép bạn lưu trữ các dữ liệu phức tạp như các đối tượng JSON, nhưng bạn cần phải tự thực hiện việc chuyển đổi.
9060Which package is used to find the correct local file system paths (e.g., Documents directory) on Android and iOS?4 lựa chọn
Apath_provider
Bpubspec.yaml
Cdart:convert
DprecacheImage()
Lời giải
Mở trang câu hỏi này →Để tìm kiếm các đường dẫn hệ thống tệp cục bộ chính xác (ví dụ: thư mục Tài liệu) trên Android và iOS, bạn cần sử dụng gói thư viện phù hợp. Trong trường hợp này, gói thư viện được sử dụng để tìm kiếm các đường dẫn hệ thống tệp cục bộ chính xác là 'path_provider'. Gói này cung cấp các phương thức để tìm kiếm các thư mục hệ thống như Documents, Pictures, Music, v.v. trên cả Android và iOS. Điều này giúp cho các nhà phát triển có thể dễ dàng truy cập và sử dụng các thư mục hệ thống này trong ứng dụng của mình.