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

44/171 câuCòn 127
A@PathVariable
B@RequestParam
C@RequestBody
D@RequestHeader
Lời giải
Trong Spring Boot REST, để ánh xạ cơ thể yêu cầu HTTP đến tham số phương thức, chúng ta sử dụng annotation @RequestBody. Annotation này cho phép chúng ta ánh xạ dữ liệu từ cơ thể yêu cầu HTTP đến một đối tượng Java. Ví dụ, khi chúng ta tạo một phương thức REST để tạo mới một tài nguyên, chúng ta có thể sử dụng @RequestBody để ánh xạ dữ liệu từ cơ thể yêu cầu HTTP đến đối tượng Java mà chúng ta muốn tạo mới. Điều này giúp chúng ta có thể dễ dàng xử lý dữ liệu từ cơ thể yêu cầu HTTP và tạo mới tài nguyên một cách dễ dàng.
Mở trang câu hỏi này →
26When should you use PUT instead of PATCH?4 lựa chọnDễ
AWhen updating only part of a resource
BWhen replacing the entire resource
CWhen deleting a resource
DWhen creating new resource
Lời giải
Khi nào bạn nên sử dụng PUT thay vì PATCH? PUT và PATCH đều được sử dụng để cập nhật dữ liệu, nhưng chúng có cách sử dụng khác nhau. PUT thường được sử dụng khi bạn muốn thay thế toàn bộ tài nguyên, trong khi PATCH được sử dụng khi bạn muốn cập nhật một phần của tài nguyên. Ví dụ, nếu bạn muốn thay thế toàn bộ thông tin về một người dùng, bạn nên sử dụng PUT. Ngược lại, nếu bạn chỉ muốn cập nhật thông tin về địa chỉ email của người dùng, bạn nên sử dụng PATCH. Sử dụng PUT thay vì PATCH khi bạn muốn thay thế toàn bộ tài nguyên.
Mở trang câu hỏi này →
A@RequestBody
B@RequestParam
C@PathVariable
D@RequestHeader
Lời giải

Trong Spring Boot REST, annotation được sử dụng để trích xuất các biến đường dẫn từ URL là @PathVariable. Annotation này cho phép bạn truy cập vào các phần của URL và sử dụng chúng như là các biến trong phương thức của controller. Ví dụ, nếu bạn có một phương thức như sau: @GetMapping("/users/{id}")

Lời giải
public String getUser(@PathVariable Long id) {
    // code here
}

Trong ví dụ trên, @PathVariable được sử dụng để trích xuất giá trị của id từ URL và sử dụng nó như là một biến trong phương thức getUser.

Mở trang câu hỏi này →
AThe HTTP method (e.g., GET, POST)
BThe endpoint URL
CThe request and response payloads
DThe underlying database schema
Lời giải
Trong tài liệu REST của Spring, các yếu tố quan trọng thường được tìm thấy bao gồm phương thức HTTP (ví dụ: GET, POST), URL endpoint, và dữ liệu yêu cầu và phản hồi. Tuy nhiên, cấu trúc cơ sở dữ liệu ẩn dưới (the underlying database schema) không phải là một phần quan trọng trong tài liệu REST của Spring. Điều này là vì tài liệu REST thường tập trung vào giao diện và hành vi của API, chứ không phải là chi tiết về cơ sở dữ liệu.
Mở trang câu hỏi này →
ABy using the @ApiResponses and @ApiResponse annotations on the controller method.
BBy listing them in the method's Javadoc comments.
CBy configuring them in the application.yml file.
DBy creating separate methods for each possible response code.
Lời giải
Để ghi chép các phản hồi khả năng xảy ra khác nhau cho một điểm cuối, chẳng hạn như 200 OK hoặc 404 Not Found, bạn có thể sử dụng các annotation @ApiResponses và @ApiResponse trên phương thức controller. Các annotation này cho phép bạn mô tả các phản hồi khả năng xảy ra khác nhau cho một điểm cuối, bao gồm cả mã trạng thái HTTP và mô tả của phản hồi. Điều này giúp cho việc sử dụng và hiểu rõ về điểm cuối trở nên dễ dàng hơn.
Mở trang câu hỏi này →
30How can you group related API endpoints in Swagger 3?4 lựa chọnTrung bình67% trả lời đúng
ABy using different @Schema annotations.
BBy using the tags attribute in @Tag annotations.
CBy using different @OpenAPIDefinition annotations.
DBy using different @ApiResponse annotations.
Lời giải
Để nhóm các điểm cuối API liên quan trong Swagger 3, bạn có thể sử dụng thuộc tính tags trong @Tag annotations. Các điểm cuối API có cùng mục đích hoặc chức năng có thể được nhóm lại dưới cùng một thẻ (tag). Ví dụ, bạn có thể tạo một thẻ cho các điểm cuối API liên quan đến quản lý người dùng, một thẻ cho các điểm cuối API liên quan đến quản lý sản phẩm, v.v. Điều này giúp người dùng dễ dàng tìm kiếm và hiểu được chức năng của từng điểm cuối API.
Mở trang câu hỏi này →
31Which Spring Boot module provides support for integration testing?4 lựa chọnTrung bình50% trả lời đúng
Aspring-boot-starter-web
Bspring-boot-starter-data-jpa
Cspring-boot-starter-test
Dspring-boot-starter-security
Lời giải
Để viết các bài kiểm tra tích hợp trong ứng dụng Spring Boot, bạn cần sử dụng một số module đặc biệt. Module nào trong các lựa chọn dưới đây cung cấp hỗ trợ cho việc viết các bài kiểm tra tích hợp?
Mở trang câu hỏi này →
32When should you use the Slice interface in Spring Data JPA?4 lựa chọnDễ100% trả lời đúng
AWhen you need the total number of elements and total pages.
BWhen you want to avoid counting all elements and improve performance.
CWhen you need to sort the results with detailed page information.
DWhen you only need the data and a "previous" indicator.
Lời giải
Khi sử dụng Slice interface trong Spring Data JPA, bạn nên lưu ý rằng nó không phải là một cách thay thế cho Page interface. Slice interface được thiết kế để trả về một phần của dữ liệu, không bao gồm thông tin tổng số phần tử và tổng số trang. Điều này giúp cải thiện hiệu suất khi bạn không cần phải đếm tất cả các phần tử. Slice interface phù hợp khi bạn cần trả về một phần dữ liệu và chỉ cần biết có phần tử trước đó hay không. Ví dụ, khi bạn muốn trả về 10 phần tử đầu tiên và chỉ cần biết có phần tử trước đó hay không, bạn có thể sử dụng Slice interface. Tuy nhiên, nếu bạn cần biết tổng số phần tử và tổng số trang, bạn nên sử dụng Page interface.
Mở trang câu hỏi này →
AIntegration testing.
BEnd-to-end testing.
CUnit testing.
DPerformance testing.
Lời giải
Kiểm thử đơn vị là loại kiểm thử xác minh tính năng của các đơn vị mã nguồn riêng lẻ. Mục tiêu chính của kiểm thử đơn vị là đảm bảo từng đơn vị mã nguồn hoạt động chính xác và không có lỗi. Kiểm thử đơn vị thường được thực hiện trước khi tích hợp các đơn vị mã nguồn lại với nhau để kiểm thử chức năng toàn bộ hệ thống. Nó giúp phát hiện và sửa lỗi sớm, giảm thiểu thời gian và chi phí phát triển phần mềm. Kiểm thử đơn vị thường được thực hiện bằng cách tạo các trường hợp kiểm thử đơn vị, viết mã nguồn kiểm thử và chạy thử nghiệm.
Mở trang câu hỏi này →
34What is the primary reason for connecting a RESTful web service to JPA?4 lựa chọnDễ100% trả lời đúng
ATo increase API complexity.
BTo simplify data persistence and retrieval.
CTo hide database interactions.
DTo reduce API functionality.
Lời giải
Kết nối một dịch vụ web RESTful với JPA (Java Persistence API) là một phương pháp phổ biến trong lập trình web. Lý do chính để thực hiện điều này là để đơn giản hóa quá trình lưu trữ và truy xuất dữ liệu. JPA cung cấp một lớp trừu tượng giữa ứng dụng và cơ sở dữ liệu, giúp giảm thiểu sự phức tạp trong việc quản lý dữ liệu. Khi sử dụng JPA, bạn có thể tập trung vào việc phát triển logic kinh doanh của ứng dụng mà không cần lo lắng về việc tương tác với cơ sở dữ liệu. Điều này giúp tăng hiệu suất và giảm thiểu thời gian phát triển. Ngoài ra, JPA cũng hỗ trợ các tính năng như phân tích dữ liệu, tạo báo cáo và quản lý phiên bản dữ liệu, giúp bạn có thể dễ dàng quản lý và phân tích dữ liệu của ứng dụng.
Mở trang câu hỏi này →
ABy requiring manual SQL queries for every operation.
BBy providing an object-relational mapping (ORM) layer.
CBy hiding all data from the application.
DBy increasing the number of database connections.
Lời giải
JPA (Java Persistence API) giúp quản lý tương tác với cơ sở dữ liệu bằng cách cung cấp một lớp ánh xạ đối tượng-relational (ORM). Điều này cho phép các lập trình viên viết mã Java mà không cần phải viết mã SQL thủ công để tương tác với cơ sở dữ liệu. Thay vào đó, JPA sẽ tự động chuyển đổi các đối tượng Java thành các bản ghi trong cơ sở dữ liệu và ngược lại. Điều này giúp giảm thiểu sự phức tạp và tăng cường hiệu suất khi tương tác với cơ sở dữ liệu. Ngoài ra, JPA cũng cung cấp các tính năng như quản lý trạng thái, quản lý mối quan hệ và hỗ trợ các tính năng nâng cao khác.
Mở trang câu hỏi này →
ATo handle server-side logic and database interactions.
BTo create the user interface and handle client-side interactions.
CTo manage application security.
DTo define REST API endpoints.
Lời giải
Trong kiến trúc ứng dụng Spring Boot + React SPA, vai trò chính của ReactJS là tạo ra giao diện người dùng và xử lý các tương tác trên client-side. ReactJS là một thư viện JavaScript được sử dụng để xây dựng các ứng dụng web đơn hướng (Single Page Application - SPA) bằng cách tạo ra các thành phần UI động và tương tác. Nó giúp tạo ra các ứng dụng web nhanh chóng và hiệu quả, đồng thời cung cấp cho người dùng trải nghiệm sử dụng tốt hơn. Trong khi đó, Spring Boot sẽ xử lý các logic server-side và tương tác với cơ sở dữ liệu.
Mở trang câu hỏi này →
Aaxios.get()
Baxios.post()
Caxios.put() or axios.patch()
Daxios.delete()
Lời giải
Trong RESTful API, phương thức Axios thường được sử dụng để cập nhật một tài nguyên hiện có là phương thức PUT hoặc PATCH. Phương thức PUT thường được sử dụng để cập nhật toàn bộ tài nguyên, trong khi phương thức PATCH được sử dụng để cập nhật một phần của tài nguyên. Ví dụ, nếu bạn muốn cập nhật thông tin cá nhân của một người dùng, bạn có thể sử dụng phương thức PUT để cập nhật toàn bộ thông tin, hoặc sử dụng phương thức PATCH để cập nhật chỉ một số thông tin cụ thể. Việc lựa chọn phương thức nào phụ thuộc vào yêu cầu cụ thể của ứng dụng và cấu trúc dữ liệu của tài nguyên.
Mở trang câu hỏi này →
ATo manage database connections.
BTo provide authentication and authorization functionality.
CTo handle HTTP requests and responses.
DTo manage application configuration.
Lời giải
Mục đích chính của Spring Boot Security là cung cấp tính năng xác thực và ủy quyền cho ứng dụng. Nó cho phép bạn kiểm soát truy cập vào các tài nguyên của ứng dụng, đảm bảo rằng chỉ những người dùng được phép mới có thể truy cập vào chúng. Spring Boot Security cung cấp các tính năng như xác thực người dùng, ủy quyền, bảo vệ chống lại các cuộc tấn công như SQL injection và cross-site scripting (XSS). Nó cũng cho phép bạn cấu hình các chính sách bảo mật tùy chỉnh để đáp ứng nhu cầu của ứng dụng. Ngoài ra, Spring Boot Security cũng hỗ trợ các phương thức xác thực như xác thực dựa trên username và password, xác thực dựa trên token, và xác thực dựa trên OAuth.
Mở trang câu hỏi này →
39What is the purpose of the JWT header?4 lựa chọnDễ100% trả lời đúng
ATo store user data.
BTo store the signing algorithm and token type.
CTo store the signature.
DTo store the expiration time.
Lời giải
JWT (JSON Web Token) là một loại token được sử dụng để xác thực và truyền thông tin giữa các ứng dụng. Header của JWT chứa thông tin về thuật toán ký và loại token. Nó được sử dụng để xác định cách thức ký token và loại token được sử dụng. Ví dụ, nếu header chứa thông tin về thuật toán HMAC SHA256 và loại token là JWT, thì ứng dụng nhận được token có thể xác định được cách thức ký token và loại token được sử dụng. Điều này giúp ứng dụng nhận được token có thể xác thực và giải mã token một cách chính xác. Ngoài ra, header còn chứa thông tin về phiên bản của JWT, giúp ứng dụng nhận được token có thể xác định được phiên bản của token và xử lý token một cách phù hợp.
Mở trang câu hỏi này →
40What is the second step in implementing JWT in Spring REST?4 lựa chọnKhó0% trả lời đúng
ACreate a JWT utility class for generating and validating tokens.
BConfigure Spring Security.
CImplement user authentication.
DCreate a database schema.
Lời giải
Bước thứ hai trong việc triển khai JWT trong Spring REST là cấu hình bảo mật Spring. Để thực hiện bước này, bạn cần thêm các lớp bảo mật vào ứng dụng của mình. Điều này bao gồm việc tạo một lớp bảo mật dựa trên JWT và thêm nó vào ứng dụng. Lớp bảo mật này sẽ chịu trách nhiệm kiểm tra và xác thực các token JWT. Ngoài ra, bạn cũng cần cấu hình các tham số bảo mật như thời gian tồn tại của token, cách thức tạo token và cách thức xác thực token.
Mở trang câu hỏi này →
AIt prevents concurrent data conflicts
BIt improves UI rendering
CIt replaces caching
DIt manages database indexes
Lời giải
Optimistic locking trong JPA là một kỹ thuật giúp ngăn chặn các xung đột dữ liệu đồng thời. Khi một ứng dụng cố gắng cập nhật dữ liệu trong cơ sở dữ liệu, JPA sẽ kiểm tra xem bản ghi dữ liệu đó đã được cập nhật bởi người dùng khác hay chưa. Nếu dữ liệu đã được cập nhật, ứng dụng sẽ ném ra ngoại lệ, giúp ngăn chặn các xung đột dữ liệu đồng thời. Điều này giúp đảm bảo tính toàn vẹn và chính xác của dữ liệu trong cơ sở dữ liệu. Ngoài ra, optimistic locking cũng giúp cải thiện hiệu suất của ứng dụng, vì nó không yêu cầu các khóa ngoại (foreign key) để ngăn chặn các xung đột dữ liệu.
Mở trang câu hỏi này →
ACaching.
Bhbm2ddl (DDL auto feature)
CAutomatic dirty checking.
DTransaction management.
Lời giải
Tính năng chính của Hibernate cung cấp tự động tạo bảng và tạo schema là hbm2ddl (tính năng tự động DDL). Đây là tính năng cho phép Hibernate tự động tạo bảng và schema trong cơ sở dữ liệu khi bạn chạy ứng dụng. Khi bạn sử dụng hbm2ddl, Hibernate sẽ tự động tạo bảng và schema dựa trên các thông tin được định nghĩa trong các tệp mapping Hibernate (hbm.xml hoặc hibernate.cfg.xml). Điều này giúp bạn tiết kiệm thời gian và công sức khi tạo cơ sở dữ liệu cho ứng dụng của mình. Ngoài ra, tính năng này cũng giúp bạn dễ dàng quản lý và cập nhật cơ sở dữ liệu khi ứng dụng của bạn thay đổi.
Mở trang câu hỏi này →
ASession.
BTransaction.
CSessionFactory.
DConfiguration.
Lời giải
Trong Hibernate, giao diện được sử dụng để quản lý các giao dịch cơ sở dữ liệu là Transaction. Giao diện Transaction cho phép bạn bắt đầu, hoàn thành và hủy bỏ các giao dịch cơ sở dữ liệu. Điều này giúp bạn có thể quản lý các giao dịch cơ sở dữ liệu một cách hiệu quả và an toàn. Khi sử dụng giao diện Transaction, bạn có thể đảm bảo rằng các giao dịch cơ sở dữ liệu được thực hiện một cách nguyên tử và không bị ảnh hưởng bởi các lỗi hoặc sự cố khác. Ngoài ra, giao diện Transaction cũng cho phép bạn sử dụng các tính năng như rollback và commit để quản lý các giao dịch cơ sở dữ liệu.
Mở trang câu hỏi này →
AThe database connection URL.
BThe database dialect.
CThe location of a Hibernate mapping file that defines how a Java class is mapped to a database table.
DThe location of the Hibernate configuration file.
Lời giải

Dòng <mapping resource="User.hbm.xml"> trong file hibernate.cfg.xml chỉ định vị trí của một tệp định nghĩa ánh xạ Hibernate (Hibernate mapping file) mà định nghĩa cách ánh xạ một lớp Java sang một bảng trong cơ sở dữ liệu. Tệp này thường được gọi là tệp định nghĩa ánh xạ (mapping file) và thường có định dạng .hbm.xml. Mục đích chính của tệp này là định nghĩa cách ánh xạ các trường trong lớp Java sang các cột trong bảng cơ sở dữ liệu, cũng như các mối quan hệ giữa các bảng.

Mở trang câu hỏi này →