SBA301DễKỳ 7Chuyên ngành Cập nhật 04/08/2026

Tích hợp ứng dụng trang đơn với Spring Boot - Integrate single page application with Spring Boot

SBA301 - Phát triển ứng dụng trang đơn (Single Page Application) dạy cách dựng một ứng dụng web có hai nửa ghép lại: ReactJS chạy trong trình duyệt và dịch vụ REST viết bằng Spring Boot chạy trên máy chủ. Câu hỏi xuyên suốt là ranh giới giữa hai nửa đó nằm ở đâu, dữ liệu đi qua lại thế nào và ai chịu trách nhiệm phần nào. Nửa trình duyệt bắt đầu từ JSX cùng cách chia giao diện thành component, rồi tới trạng thái: React Hooks với useState, useEffect, useMemo, useCallback, các ràng buộc của Rules of Hooks, và lối giữ state ở component hàm đặt cạnh lối cũ ở component lớp. Bộ component dựng sẵn React-Bootstrap lo phần trình bày. Việc chuyển trang không còn do máy chủ đảm nhận mà do định tuyến phía client với React Router v6, kèm tham số đường dẫn đọc bằng useParams và trang 404 bắt ở cuối bảng route. Để lấy dữ liệu, môn đi qua nền bất đồng bộ của JavaScript gồm Promise và async/await, rồi tới thư viện Axios cho các lời gọi thực tế. Nửa máy chủ mở bằng nền tảng HTTP và nguyên tắc của một REST API, sau đó dựng dịch vụ bằng Spring Boot với các chú giải ánh xạ yêu cầu như RequestBody, PathVariable, RequestParam, cách đặt mã trạng thái và thân phản hồi. Tài liệu cho dịch vụ được sinh sống bằng OpenAPI và Swagger, còn phần kiểm thử dùng bộ khởi tạo spring-boot-starter-test để chạy thử cả tầng web lẫn toàn bộ ứng dụng. Tầng dữ liệu có hai nhánh. Nhánh quan hệ dùng JPA và Hibernate với ánh xạ đối tượng sang bảng, Session và Transaction, khoá lạc quan chống xung đột khi ghi đồng thời, phân trang cùng lựa chọn Slice khi không cần đếm toàn bộ bản ghi, và hbm2ddl sinh lược đồ. Nhánh tài liệu dùng MongoDB với lược đồ linh hoạt, Spring Data MongoDB, MongoTemplate cho truy vấn phức tạp và dịch vụ đám mây MongoDB Atlas. Khép môn là bảo mật với Spring Security, từ xác thực cơ bản và phiên làm việc tới token JWT cho dịch vụ phi trạng thái. Học xong, người học dựng được trọn một ứng dụng trang đơn có đăng nhập, gọi dịch vụ REST, lưu dữ liệu ở cả cơ sở dữ liệu quan hệ lẫn cơ sở dữ liệu tài liệu, và có tài liệu mô tả giao diện lập trình kèm theo.

171Câu hỏi
2Bộ đề
11Chủ đề

Câu hỏi của môn

124/171 câuCòn 47
105Which command is used to insert a single document into a collection?4 lựa chọnDễ80% trả lời đúng
Adb.collection.create()
Bdb.collection.insertOne()
Cdb.collection.insertDocument()
Ddb.collection.add()
Lời giải

Để thêm một bản ghi duy nhất vào một bộ sưu tập trong MongoDB, bạn cần sử dụng lệnh insertOne(). Lệnh này cho phép bạn thêm một bản ghi mới vào bộ sưu tập đã tồn tại. Ví dụ, nếu bạn muốn thêm một bản ghi mới vào bộ sưu tập 'users', bạn có thể sử dụng lệnh

Lời giải
db.users.insertOne({
  name: 'John Doe', age: 30
}

). Lệnh insertOne() rất hữu ích khi bạn muốn thêm một bản ghi mới vào bộ sưu tập mà không cần phải thêm nhiều bản ghi cùng lúc. Ngoài ra, lệnh này cũng giúp bạn kiểm soát được dữ liệu được thêm vào bộ sưu tập, tránh được các lỗi nhập dữ liệu không mong muốn.

Mở trang câu hỏi này →
106What does the MongoTemplate class provide in Spring Data MongoDB?4 lựa chọnDễ100% trả lời đúng
AMapping of SQL queries to documents
BAutomatic index creation
CA low-level interface to MongoDB operations
DAutomatic data validation
Lời giải
MongoTemplate là một lớp cung cấp một giao diện cao cấp để tương tác với MongoDB trong ứng dụng Spring Data MongoDB. Nó cung cấp một số tính năng quan trọng như ánh xạ các câu lệnh SQL sang tài liệu, tự động tạo chỉ mục, tạo một giao diện thấp cấp để thực hiện các hoạt động MongoDB và tự động kiểm tra dữ liệu. Tuy nhiên, trong các lựa chọn trên, chỉ có một lựa chọn chính xác. Lựa chọn "A low-level interface to MongoDB operations" là đúng vì MongoTemplate cung cấp một giao diện thấp cấp để thực hiện các hoạt động MongoDB.
Mở trang câu hỏi này →
107Which class is used to create complex criteria queries with MongoTemplate?4 lựa chọnDễ71% trả lời đúng
ACriteria
BQueryDSL
CMongoQuery
DCriteriaBuilder
Lời giải
Để tạo các câu hỏi phức tạp với MongoTemplate, bạn cần sử dụng lớp Criteria. Criteria cho phép bạn xây dựng các câu hỏi phức tạp bằng cách sử dụng các phương thức như and(), or(), not(). Điều này giúp bạn tạo ra các câu hỏi phức tạp mà không cần phải viết mã phức tạp.
Mở trang câu hỏi này →
108Which annotation is used to define a MongoDB document in Spring Data MongoDB?4 lựa chọnDễ100% trả lời đúng
A@Collection
B@MongoEntity
C@Document
D@Entity
Lời giải
Để định nghĩa một tài liệu MongoDB trong Spring Data MongoDB, bạn cần sử dụng annotation @Document. Annotation này được sử dụng để chỉ định tên của collection trong cơ sở dữ liệu MongoDB. Ví dụ, nếu bạn muốn tạo một tài liệu có tên là 'users', bạn có thể sử dụng @Document(collection = "users") trên class của bạn. Ngoài ra, bạn cũng có thể sử dụng @Document mà không cần chỉ định tên collection, trong trường hợp đó, tên collection sẽ được tự động tạo dựa trên tên của class.
Mở trang câu hỏi này →
109Which interface in Spring Data MongoDB is used to perform CRUD operations?4 lựa chọnDễ100% trả lời đúng
AJpaRepository
BMongoRepository
CRepository
DCrudRepository
Lời giải
Để thực hiện các hoạt động CRUD (Tạo, Đọc, Sửa, Xóa) trong Spring Data MongoDB, bạn cần sử dụng interface MongoRepository. Interface này cung cấp các phương thức mặc định để thực hiện các hoạt động CRUD trên các đối tượng MongoDB. Ví dụ, bạn có thể sử dụng phương thức save() để tạo mới một đối tượng, find() để đọc một đối tượng, update() để sửa một đối tượng và delete() để xóa một đối tượng. Ngoài ra, bạn cũng có thể sử dụng các phương thức khác như findById(), findAll(), existsById() để thực hiện các hoạt động khác trên các đối tượng MongoDB.
Mở trang câu hỏi này →
110Which of the following best describes a compound index?4 lựa chọnTrung bình43% trả lời đúng
AAn index with a TTL (Time To Live)
BA temporary index created at runtime
CAn index on an embedded document only
DAn index on multiple fields in a document
Lời giải
Một chỉ số hợp chất (compound index) là một loại chỉ số được tạo trên nhiều trường (field) trong một tài liệu (document). Nó cho phép MongoDB tìm kiếm và sắp xếp dữ liệu dựa trên nhiều tiêu chí khác nhau. Ví dụ, nếu bạn có một tài liệu có các trường 'tên', 'tuổi' và 'thành phố', một chỉ số hợp chất có thể được tạo trên các trường này để tìm kiếm và sắp xếp dữ liệu dựa trên các tiêu chí này. Chỉ số hợp chất giúp tăng tốc độ tìm kiếm và sắp xếp dữ liệu, đặc biệt là khi dữ liệu lớn và phức tạp.
Mở trang câu hỏi này →
Aspring.data.mongo.name
Bspring.mongodb.dbname
Cspring.data.mongodb.database
Dspring.mongo.database
Lời giải
Để đặt tên cơ sở dữ liệu MongoDB trong ứng dụng, bạn cần sử dụng thuộc tính thích hợp trong file application.properties. Trong các lựa chọn đã cho, thuộc tính nào được sử dụng để đặt tên cơ sở dữ liệu MongoDB?
Mở trang câu hỏi này →
112When using MongoTemplate, how would you insert a new document?4 lựa chọnDễ75% trả lời đúng
AmongoTemplate.create(object)
BmongoTemplate.insert(object)
CmongoTemplate.save(object)
DmongoTemplate.add(object)
Lời giải
Khi sử dụng MongoTemplate, bạn muốn thêm một tài liệu mới vào cơ sở dữ liệu MongoDB. Để thực hiện điều này, bạn cần sử dụng phương thức insert() của MongoTemplate. Phương thức này cho phép bạn thêm một tài liệu mới vào cơ sở dữ liệu. Ví dụ, bạn có thể sử dụng nó như sau: mongoTemplate.insert(object). Phương thức này sẽ tự động tạo một tài liệu mới và thêm nó vào cơ sở dữ liệu. Ngoài ra, bạn cũng có thể sử dụng phương thức save() để thêm hoặc cập nhật một tài liệu. Tuy nhiên, phương thức save() chỉ được sử dụng khi bạn muốn thêm hoặc cập nhật một tài liệu đã tồn tại. Vì vậy, phương thức insert() là lựa chọn tốt nhất khi bạn muốn thêm một tài liệu mới.
Mở trang câu hỏi này →
113Which of the following is used to create an index on a field in MongoDB?4 lựa chọnTrung bình50% trả lời đúng
Adb.collection.setIndex()
Bdb.collection.index()
Cdb.collection.createIndex()
Ddb.collection.makeIndex()
Lời giải

Để tạo chỉ mục trên một trường trong MongoDB, bạn cần sử dụng phương thức createIndex(). Phương thức này cho phép bạn tạo chỉ mục trên một hoặc nhiều trường trong một collection. Syntax của phương thức createIndex() như sau: db.collection.createIndex(keys, options). Trong đó, keys là đối tượng chứa tên và giá trị của các trường bạn muốn tạo chỉ mục, options là đối tượng chứa các tùy chọn cho chỉ mục. Ví dụ, bạn muốn tạo chỉ mục trên trường 'name' trong collection 'users', bạn có thể sử dụng lệnh sau:

Lời giải
db.users.createIndex({
  name: 1
}

). Phương thức createIndex() cho phép bạn tạo chỉ mục trên các trường khác nhau, bao gồm cả trường có giá trị là mảng hoặc đối tượng.

Mở trang câu hỏi này →
A$merge
B$match
C$unwind
D$lookup
Lời giải
Trong MongoDB, $lookup là một trong những phương thức cho phép kết hợp các tài liệu từ hai bộ sưu tập. Nó cho phép bạn thực hiện các phép join như inner join, left outer join, right outer join và full outer join. $lookup sử dụng một trong các phương thức sau để thực hiện phép join: let, pipeline và from.
Mở trang câu hỏi này →
115Which of the following is TRUE about MongoDB schema?4 lựa chọnDễ100% trả lời đúng
AMongoDB supports relational schema only
BCollections in MongoDB can have documents with different fields
CMongoDB requires a fixed schema
DAll fields in documents must be predefined
Lời giải
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".
Mở trang câu hỏi này →
116Which of the following is used to return only selected fields in a MongoDB query?4 lựa chọnTrung bình40% trả lời đúng
A$select
BReturnFields
CProjection
DSubset
Lời giải
Để trả về chỉ các trường được chọn trong một truy vấn MongoDB, bạn cần sử dụng một trong các phương thức sau.
Mở trang câu hỏi này →
117Which index type is used to ensure that a field's value is unique across documents?4 lựa chọnTrung bình60% trả lời đúng
ACompound index
BUnique index
CHashed index
DText index
Lời giải
Để đả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.
Mở trang câu hỏi này →
118Which annotation is used to describe the request body content in an OpenAPI operation?4 lựa chọnTrung bình63% trả lời đúng
A@ApiBody
B@RequestContent
C@RequestBody (from swagger package)
D@RequestDoc
Lời giải
Để 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.
Mở trang câu hỏi này →
119What Spring configuration property changes the default OpenAPI endpoint?4 lựa chọnDễ86% trả lời đúng
Aswagger.api.url
Bopenapi.swagger.path
Cspring.openapi.path
Dspringdoc.api-docs.path
Lời giải
Để thay đổi mặc định địa chỉ OpenAPI endpoint trong ứng dụng Spring, bạn cần sử dụng thuộc tính cấu hình Spring. Trong các lựa chọn trên, thuộc tính "springdoc.api-docs.path" là lựa chọn đúng. Nó cho phép bạn thay đổi địa chỉ mặc định của OpenAPI endpoint, giúp bạn có thể tùy chỉnh và quản lý API của mình một cách linh hoạt hơn. Ví dụ, bạn có thể sử dụng thuộc tính này để thay đổi địa chỉ OpenAPI endpoint thành một địa chỉ khác, chẳng hạn như "/api/docs" hoặc "/swagger".
Mở trang câu hỏi này →
120How do you group APIs in Swagger UI using Springdoc OpenAPI?4 lựa chọnDễ100% trả lời đúng
AUsing @Group
BUsing @Tag(name = 'GroupName')
CUsing @SwaggerGroup
DUsing application.yaml grouping
Lời giải
Để 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.
Mở trang câu hỏi này →
121Which dependency is commonly used in Spring Boot to integrate OpenAPI 3?4 lựa chọnDễ100% trả lời đúng
Aspringdoc-openapi-ui
Bspring-boot-devtools
Cspringfox-swagger2
Dspring-boot-starter-jdbc
Lời giải
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.
Mở trang câu hỏi này →
122How can you hide an endpoint from OpenAPI documentation?4 lựa chọnDễ80% trả lời đúng
ADisable the controller
BUse @IgnoreMapping
CAdd @Hidden annotation
DRename the method
Lời giải
Để ẩn một endpoint khỏi tài liệu 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 annotation @Hidden. Annotation này cho phép bạn ẩn một phương thức hoặc một endpoint khỏi tài liệu OpenAPI mà không cần phải xóa hoặc sửa đổi mã nguồn. Điều này rất hữu ích khi bạn muốn ẩn một endpoint chỉ dành cho mục đích nội bộ hoặc để bảo vệ thông tin nhạy cảm. Ngoài ra, bạn cũng có thể sử dụng cách khác như Disable controller hoặc Rename method, nhưng cách này có thể phức tạp hơn và không được khuyến khích sử dụng. Vì vậy, cách tốt nhất để ẩn một endpoint khỏi tài liệu OpenAPI là sử dụng annotation @Hidden.
Mở trang câu hỏi này →
123What is the purpose of HttpSession.invalidate() in session-based security?4 lựa chọnDễ100% trả lời đúng
ARemove the current session and all its attributes
BRestart the session with the same session ID
CEncrypt the session data
DExtend session timeout
Lời giải
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.
Mở trang câu hỏi này →
AServer responds with 200 OK and empty body
BServer responds with 401 Unauthorized and WWW-Authenticate header
CServer closes the connection immediately
DServer automatically redirects to login page
Lời giải
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.
Mở trang câu hỏi này →