Tất cả câu hỏi

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

Bấm vào từng câu để xem đáp án
#681
88%
ĐỘ CHÍNH XÁC
8
LƯỢT LÀM
5 LỰA CHỌN
NUCLEO-F411REĐÚNG
BESP32
CArduino Uno
DRaspberry Pi Pico
EAdafruit Feather
Giải thích

Trong phòng thí nghiệm, chúng ta thường sử dụng bảng phát triển (development board) để học hỏi và thực hành các kỹ thuật lập trình. Một trong những bảng phát triển được sử dụng phổ biến và giải thích chi tiết về bố cục chân cắm (pin layout) là NUCLEO-F411RE. Bảng phát triển này được thiết kế bởi STMicroelectronics và hỗ trợ cho các chương trình học về lập trình microcontroller. Nó cung cấp một cấu trúc đơn giản và dễ sử dụng, giúp sinh viên và người mới bắt đầu có thể dễ dàng học hỏi và thực hành các kỹ thuật lập trình.

#682
83%
ĐỘ CHÍNH XÁC
6
LƯỢT LÀM
4 LỰA CHỌN
AGroups multiple routes
BSwitches between states
Renders the first matching routeĐÚNG
DUsed to toggle views
Giải thích

Trong React Router, thành phần <Switch> đóng vai trò quan trọng trong việc định tuyến. Nó được sử dụng để nhóm nhiều tuyến đường lại với nhau và chỉ render tuyến đường đầu tiên mà nó gặp phải. Điều này có nghĩa là khi bạn sử dụng <Switch>, React Router sẽ chỉ render tuyến đường đầu tiên mà nó tìm thấy mà không cần phải render các tuyến đường khác. Điều này giúp tăng hiệu suất và giảm thiểu việc render không cần thiết. Ngoài ra, <Switch> cũng giúp bạn dễ dàng quản lý và tổ chức các tuyến đường trong ứng dụng của mình.

#683
100%
ĐỘ CHÍNH XÁC
7
LƯỢT LÀM
4 LỰA CHỌN
AwebEnvironment = NONE
BwebEnvironment = MOCK
CuseMockMvc = true
webEnvironment = DEFINED_PORTĐÚNG
Giải thích

Để kiểm tra các điểm cuối của controller sử dụng các cuộc gọi HTTP thực tế, bạn cần cấu hình @SpringBootTest để sử dụng môi trường web thực tế. Trong đó, bạn cần thiết lập thuộc tính webEnvironment thành DEFINED_PORT. Điều này cho phép Spring Boot tạo một ứng dụng web thực tế với một cổng cụ thể, và bạn có thể sử dụng các công cụ như Postman hoặc cURL để gửi các yêu cầu HTTP đến ứng dụng này. Điều này giúp bạn kiểm tra các điểm cuối của controller một cách chính xác và hiệu quả hơn.

#684
100%
ĐỘ CHÍNH XÁC
8
LƯỢT LÀM
4 LỰA CHỌN
AStarts the application with no web environment
BFails the test if no port is provided manually
CDisables the web server
Starts the embedded server on a random portĐÚNG
Giải thích

Khi sử dụng @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT), Spring Boot sẽ khởi động ứng dụng trong môi trường web ngẫu nhiên. Điều này có nghĩa là ứng dụng sẽ được chạy trên một cổng ngẫu nhiên, thay vì sử dụng cổng mặc định. Mục đích chính của việc này là để tránh xung đột cổng khi chạy nhiều ứng dụng cùng lúc. Ngoài ra, việc sử dụng môi trường web ngẫu nhiên cũng giúp tăng tính bảo mật cho ứng dụng, vì nó làm cho việc đoán cổng của ứng dụng trở nên khó khăn hơn. Khi ứng dụng được khởi động trong môi trường web ngẫu nhiên, Spring Boot sẽ tự động tạo một cổng ngẫu nhiên và cấu hình ứng dụng để sử dụng cổng đó. Điều này giúp đảm bảo rằng ứng dụng có thể được truy cập từ xa mà không cần phải biết cổng cụ thể của ứng dụng.

#685
88%
ĐỘ CHÍNH XÁC
8
LƯỢT LÀM
4 LỰA CHỌN
AAuthorization: Bearer (token)
Authorization: Basic (base64(username:password))ĐÚNG
CAuthorization: Token username:password
DAuth: Basic (JWT)
Giải thích

Trong Basic Authentication, định dạng của tiêu đề Authorization sẽ trông như thế nào? Đây là một dạng xác thực cơ bản sử dụng tiêu đề Authorization để xác thực người dùng. Khi sử dụng Basic Authentication, người dùng sẽ gửi tiêu đề Authorization với nội dung là 'Basic' kèm theo mã hóa base64 của chuỗi 'username:password'. Ví dụ, nếu username là 'user' và password là 'pass', thì tiêu đề Authorization sẽ được gửi dưới dạng 'Authorization: Basic dXNlcjpwYXNzd29yZA=='. Mã hóa base64 được sử dụng để bảo mật thông tin người dùng.

#686
89%
ĐỘ CHÍNH XÁC
9
LƯỢT LÀM
4 LỰA CHỌN
By including WWW-Authenticate: Basic realm='RealmName' in a 401 responseĐÚNG
BBy sending a Set-Cookie header with a token
CBy returning 403 with Login-Required: true
DBy using JavaScript redirect
Giải thích

Để một máy chủ yêu cầu trình duyệt hiển thị hộp thoại đăng nhập cho Basic Auth, máy chủ cần gửi một phản hồi 401 (Không được phép) với tiêu đề HTTP WWW-Authenticate. Tiêu đề này chứa thông tin về tên miền (realm) mà máy chủ đang yêu cầu. Ví dụ, máy chủ có thể gửi phản hồi 401 với tiêu đề WWW-Authenticate: Basic realm='RealmName'. Điều này sẽ yêu cầu trình duyệt hiển thị hộp thoại đăng nhập cho người dùng, nơi họ có thể nhập tên người dùng và mật khẩu. Sau khi người dùng nhập thông tin đăng nhập, trình duyệt sẽ gửi lại yêu cầu đến máy chủ với tiêu đề Authorization chứa thông tin đăng nhập. Máy chủ sẽ kiểm tra thông tin đăng nhập và trả lại phản hồi 200 nếu thông tin đúng, hoặc tiếp tục trả lại phản hồi 401 nếu thông tin sai.

#687
100%
ĐỘ CHÍNH XÁC
6
LƯỢT LÀM
4 LỰA CHỌN
AServer responds with 200 OK and empty body
Server responds with 401 Unauthorized and WWW-Authenticate headerĐÚNG
CServer closes the connection immediately
DServer automatically redirects to login page
Giải thích

Nếu một khách hàng gửi một yêu cầu mà không có tiêu đề Authorization và máy chủ yêu cầu Basic Auth, máy chủ sẽ phản hồi với mã trạng thái 401 Unauthorized và tiêu đề WWW-Authenticate. Điều này là bởi vì máy chủ yêu cầu khách hàng phải cung cấp thông tin xác thực trước khi truy cập vào tài nguyên được bảo vệ. Tiêu đề WWW-Authenticate sẽ chứa thông tin về phương thức xác thực được yêu cầu, trong trường hợp này là Basic Auth. Khách hàng sẽ phải gửi lại yêu cầu với tiêu đề Authorization chứa thông tin xác thực để máy chủ xác thực và cấp quyền truy cập vào tài nguyên.

#688
100%
ĐỘ CHÍNH XÁC
7
LƯỢT LÀM
4 LỰA CHỌN
Remove the current session and all its attributesĐÚNG
BRestart the session with the same session ID
CEncrypt the session data
DExtend session timeout
Giải thích

Hàm HttpSession.invalidate() trong bảo mật dựa trên phiên (session-based security) có mục đích xóa bỏ phiên hiện tại và tất cả các thuộc tính của nó. Khi gọi hàm này, phiên sẽ bị hủy bỏ và không thể tiếp tục sử dụng. Điều này giúp ngăn chặn việc truy cập trái phép vào dữ liệu của phiên đã bị xóa. Ngoài ra, hàm này cũng giúp giải phóng tài nguyên hệ thống đã được sử dụng bởi phiên bị xóa. Tùy chọn này thường được sử dụng trong trường hợp người dùng đăng xuất khỏi hệ thống hoặc khi phiên đã hết hạn.

#689
100%
ĐỘ CHÍNH XÁC
8
LƯỢT LÀM
4 LỰA CHỌN
springdoc-openapi-uiĐÚNG
Bspring-boot-devtools
Cspringfox-swagger2
Dspring-boot-starter-jdbc
Giải thích

Trong Spring Boot, có nhiều tùy chọn để tích hợp OpenAPI 3. Tuy nhiên, tùy chọn phổ biến nhất là sử dụng springdoc-openapi-ui. Đây là một thư viện mở nguồn cung cấp một số tính năng mạnh mẽ để tạo và quản lý API, bao gồm việc tạo tài liệu OpenAPI, tạo giao diện người dùng và hỗ trợ tích hợp với các công cụ khác. Để sử dụng springdoc-openapi-ui trong dự án Spring Boot của mình, bạn cần thêm dependency vào file pom.xml (nếu bạn đang sử dụng Maven) hoặc build.gradle (nếu bạn đang sử dụng Gradle). Sau đó, bạn có thể cấu hình và sử dụng các tính năng của springdoc-openapi-ui để tạo và quản lý API của mình.

#690
100%
ĐỘ CHÍNH XÁC
7
LƯỢT LÀM
4 LỰA CHỌN
AUsing @Group
Using @Tag(name = 'GroupName')ĐÚNG
CUsing @SwaggerGroup
DUsing application.yaml grouping
Giải thích

Để nhóm các API trong Swagger UI bằng cách sử dụng Springdoc OpenAPI, bạn có thể sử dụng một số cách khác nhau. Một trong những cách phổ biến nhất là sử dụng @Tag. @Tag cho phép bạn tạo ra các nhóm API dựa trên các thuộc tính như tên nhóm, mô tả nhóm, v.v. Ví dụ, bạn có thể tạo một nhóm API có tên là 'GroupName' bằng cách sử dụng @Tag như sau: @Tag(name = 'GroupName'). Sau đó, bạn có thể sử dụng @Operation để thêm các phương thức API vào nhóm này. Ngoài ra, bạn cũng có thể sử dụng @Api để tạo ra các nhóm API có tên và mô tả. Tuy nhiên, cách sử dụng @Tag là phổ biến nhất và được khuyến khích sử dụng.

#691
100%
ĐỘ CHÍNH XÁC
8
LƯỢT LÀM
4 LỰA CHỌN
A@ApiBody
B@RequestContent
@RequestBody (from swagger package)ĐÚNG
D@RequestDoc
Giải thích

Để mô tả nội dung của request body trong một hoạt động OpenAPI, bạn cần sử dụng annotation nào? Các lựa chọn bao gồm @ApiBody, @RequestContent, @RequestBody (từ gói swagger) và @RequestDoc. Annotation @RequestBody (từ gói swagger) là lựa chọn đúng. Nó được sử dụng để mô tả nội dung của request body, bao gồm cả dữ liệu JSON, XML hoặc các định dạng khác. Annotation này cho phép bạn định nghĩa cấu trúc của dữ liệu request body, bao gồm các trường và loại dữ liệu của chúng. Điều này giúp cho việc phát triển và kiểm tra API trở nên dễ dàng hơn.

#692
100%
ĐỘ CHÍNH XÁC
7
LƯỢT LÀM
4 LỰA CHỌN
ACompound index
Unique indexĐÚNG
CHashed index
DText index
Giải thích

Để đảm bảo giá trị của một trường trong một tài liệu là duy nhất, chúng ta sử dụng loại chỉ mục đặc biệt gọi là "Unique index". Chỉ mục này đảm bảo rằng giá trị của trường đó không được lặp lại trong bất kỳ tài liệu nào. Điều này giúp ngăn chặn việc trùng lặp dữ liệu và đảm bảo tính toàn vẹn của dữ liệu. Ví dụ, nếu chúng ta có một trường "ID người dùng" và muốn đảm bảo rằng mỗi người dùng đều có một ID duy nhất, chúng ta có thể sử dụng chỉ mục Unique index cho trường này. Điều này giúp hệ thống dữ liệu của chúng ta trở nên ổn định và đáng tin cậy hơn.

#693
100%
ĐỘ CHÍNH XÁC
8
LƯỢT LÀM
4 LỰA CHỌN
AMongoDB supports relational schema only
Collections in MongoDB can have documents with different fieldsĐÚNG
CMongoDB requires a fixed schema
DAll fields in documents must be predefined
Giải thích

MongoDB không hỗ trợ cấu trúc dữ liệu quan hệ như các cơ sở dữ liệu truyền thống. Thay vào đó, MongoDB sử dụng mô hình NoSQL, cho phép lưu trữ dữ liệu dưới dạng các tài liệu (documents) trong các tập hợp (collections). Mỗi tài liệu có thể có các trường (fields) khác nhau, cho phép tạo ra các cấu trúc dữ liệu linh hoạt và dễ dàng mở rộng. Điều này khác biệt với các cơ sở dữ liệu quan hệ, nơi mà mỗi bảng (table) phải có một cấu trúc cố định và các trường phải được định nghĩa trước khi tạo bảng. Vì vậy, câu trả lời đúng là "Collections in MongoDB có thể có tài liệu với các trường khác nhau".

#694
67%
ĐỘ CHÍNH XÁC
3
LƯỢT LÀM
4 LỰA CHỌN
AUsing XML layout files
BUsing HTML and CSS
Using a hierarchical widget treeĐÚNG
DUsing native UI components only
Giải thích

Flutter UI được xây dựng nội bộ bằng cách sử dụng một cây widget cấp bậc. Mỗi ứng dụng Flutter đều có một cây widget cấp bậc duy nhất, bắt đầu từ một widget gốc (root widget). Cây widget này được xây dựng bằng cách sử dụng các widget con, mỗi widget con được tạo ra từ một lớp widget cụ thể. Các widget con này được kết nối với nhau bằng cách sử dụng các thuộc tính như padding, margin, và vị trí. Điều này cho phép các nhà phát triển tạo ra các giao diện người dùng phức tạp và linh hoạt. Ngoài ra, cây widget cấp bậc cũng cho phép Flutter thực hiện hiệu suất cao và tối ưu hóa tài nguyên.

#695
67%
ĐỘ CHÍNH XÁC
3
LƯỢT LÀM
4 LỰA CHỌN
Ahive
Bmoor
sqfliteĐÚNG
Dshared_preferences
Giải thích

Flutter cung cấp nhiều plugin để hỗ trợ lưu trữ dữ liệu trên thiết bị di động. Trong đó, plugin SQLite hỗ trợ lưu trữ dữ liệu trong cơ sở dữ liệu SQLite. Plugin sqflite là một trong những plugin phổ biến nhất được sử dụng để hỗ trợ SQLite trên Flutter. Nó cho phép bạn tạo, đọc, cập nhật và xóa dữ liệu trong cơ sở dữ liệu SQLite.

#696
67%
ĐỘ CHÍNH XÁC
3
LƯỢT LÀM
4 LỰA CHỌN
AStatic app bar
Scrollable flexible app barĐÚNG
CBottom navigation
DDrawer control
Giải thích

SliverAppBar là một widget trong Flutter giúp tạo một thanh điều hướng có thể cuộn. Nó cho phép thanh điều hướng được ẩn khi người dùng cuộn lên, tạo ra một giao diện đẹp mắt và dễ sử dụng. Khi người dùng cuộn xuống, thanh điều hướng sẽ xuất hiện trở lại, giúp người dùng dễ dàng điều hướng qua các trang khác nhau trong ứng dụng. SliverAppBar cũng cho phép người dùng tùy chỉnh các thuộc tính như màu sắc, hình ảnh, và nội dung của thanh điều hướng.

#697
67%
ĐỘ CHÍNH XÁC
3
LƯỢT LÀM
4 LỰA CHỌN
AFuture
StreamĐÚNG
CAnimation
DTheme
Giải thích

BLoC (Business Logic Component) là một mô hình thiết kế ứng dụng được sử dụng rộng rãi trong lập trình di động. Nó được thiết kế để tách biệt logic kinh doanh khỏi giao diện người dùng, giúp ứng dụng trở nên dễ dàng bảo trì và mở rộng hơn. BLoC dựa trên khái niệm Stream, một loại dữ liệu có thể thay đổi theo thời gian. Stream cho phép ứng dụng cập nhật trạng thái một cách dễ dàng và đồng bộ, giúp đảm bảo ứng dụng luôn hiển thị trạng thái mới nhất. Ngoài ra, Stream cũng cho phép ứng dụng xử lý các sự kiện và dữ liệu một cách linh hoạt và hiệu quả.

#698
50%
ĐỘ CHÍNH XÁC
4
LƯỢT LÀM
4 LỰA CHỌN
ASingle function
BWidget rendering
End-to-end app behaviorĐÚNG
DTheme consistency
Giải thích

Một bài kiểm tra tích hợp (integration test) là một loại kiểm tra phần mềm được sử dụng để xác minh rằng các thành phần khác nhau của một ứng dụng hoạt động cùng nhau một cách chính xác. Bài kiểm tra này không chỉ kiểm tra một chức năng đơn lẻ mà còn kiểm tra cách các chức năng khác nhau tương tác với nhau. Ví dụ, một bài kiểm tra tích hợp có thể kiểm tra việc đăng nhập vào ứng dụng, sau đó thêm một sản phẩm vào giỏ hàng và cuối cùng thực hiện thanh toán. Điều này giúp đảm bảo rằng ứng dụng hoạt động một cách trơn tru và không có lỗi khi người dùng tương tác với nó.

#699
67%
ĐỘ CHÍNH XÁC
3
LƯỢT LÀM
4 LỰA CHỌN
AUI speed
Predictable state changesĐÚNG
CMemory usage
DTheme control
Giải thích

Immutability trong các trạng thái BLoC là một tính chất quan trọng vì nó đảm bảo rằng trạng thái của ứng dụng luôn được dự đoán được. Khi một trạng thái được thay đổi, nó sẽ tạo ra một bản sao mới của trạng thái đó, thay vì thay đổi trực tiếp trạng thái hiện tại. Điều này giúp ngăn chặn các vấn đề liên quan đến trạng thái không được cập nhật một cách đồng bộ, từ đó cải thiện tốc độ và độ ổn định của ứng dụng. Ngoài ra, tính immutability còn giúp giảm thiểu các vấn đề liên quan đến đồng bộ hóa trạng thái giữa các phần tử trong ứng dụng, giúp ứng dụng trở nên dễ dàng hơn trong việc quản lý và bảo trì.

#700
67%
ĐỘ CHÍNH XÁC
3
LƯỢT LÀM
4 LỰA CHỌN
Asqflite
shared_preferencesĐÚNG
Cprovider
Dhttp
Giải thích

Flutter cung cấp nhiều cách để lưu trữ dữ liệu, nhưng khi nói đến việc lưu trữ giá trị cơ bản như chuỗi, số, boolean, v.v., thì package "shared_preferences" là lựa chọn phổ biến nhất. Package này cho phép bạn lưu trữ dữ liệu dưới dạng key-value, dễ dàng sử dụng và không yêu cầu cấu hình phức tạp. Bạn có thể sử dụng nó để lưu trữ thông tin người dùng, trạng thái ứng dụng, v.v. Package "shared_preferences" cũng hỗ trợ các phương thức như lưu trữ dữ liệu, đọc dữ liệu, xóa dữ liệu, v.v. Nó là một phần quan trọng của bất kỳ ứng dụng Flutter nào và được sử dụng rộng rãi trong cộng đồng phát triển Flutter.