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

64/171 câuCòn 107
45Which MongoDB command is used to retrieve documents from a collection?4 lựa chọnTrung bình67% trả lời đúng
Aupdate()
Bfind()
CinsertOne()
DdeleteMany()
Lời giải
Để lấy dữ liệu từ một collection trong MongoDB, bạn cần sử dụng lệnh find(). Lệnh này cho phép bạn tìm kiếm và trả về các tài liệu (documents) dựa trên các điều kiện cụ thể. Ví dụ, bạn có thể tìm kiếm các tài liệu có tên là 'John' hoặc các tài liệu có tuổi lớn hơn 18. Ngoài ra, lệnh find() còn cho phép bạn thực hiện các phép toán toán học, so sánh và các hàm khác để lọc dữ liệu.
Mở trang câu hỏi này →
AMongoRepository
BMongoClient
CMongoTemplate
DSimpleMongoRepository
Lời giải
Trong Spring Data MongoDB, có một số cách để tương tác với MongoDB. Tuy nhiên, nếu bạn muốn thực hiện các hoạt động cơ bản của MongoDB như insert, update, delete, thì bạn cần sử dụng một lớp mẫu (template) để thực hiện các hoạt động này. Lớp mẫu này được gọi là MongoTemplate. MongoTemplate cung cấp các phương thức để thực hiện các hoạt động cơ bản của MongoDB và cung cấp sự linh hoạt để tùy chỉnh các hoạt động này.
Mở trang câu hỏi này →
AList<Book> findByPublishedDateAfterOrderByTitleAsc(LocalDate date);
BList<Book> findAllBooksAfterDateAndSortByTitle(LocalDate date);
CList<Book> findByPublishedDate(LocalDate date, Sort sort);
DList<Book> queryAfterPublishedDateSortedByTitle(LocalDate date);
Lời giải
Để tìm kiếm tất cả các sách được xuất bản sau một ngày nhất định và sắp xếp chúng theo tiêu đề, chúng ta cần sử dụng phương thức truy vấn có tên findByPublishedDateAfterOrderByTitleAsc. Phương thức này cho phép chúng ta tìm kiếm sách dựa trên ngày xuất bản và sắp xếp chúng theo tiêu đề theo thứ tự từ A đến Z. Phương thức này được sử dụng trong Spring Data JPA, một công cụ phổ biến để truy vấn cơ sở dữ liệu trong các ứng dụng Java. Để sử dụng phương thức này, chúng ta cần tạo một interface có tên là BookRepository và thêm phương thức truy vấn vào đó. Sau đó, chúng ta có thể sử dụng phương thức này trong ứng dụng của mình để tìm kiếm sách theo các điều kiện cụ thể.
Mở trang câu hỏi này →
48What is a key advantage of using MongoTemplate?4 lựa chọnTrung bình57% trả lời đúng
AAutomatic generation of CRUD methods.
BFlexibility for complex queries and operations.
CSimplified data model definition.
DBuilt-in transaction management.
Lời giải
MongoTemplate là một công cụ mạnh mẽ trong Spring Data MongoDB, cung cấp nhiều lợi ích khi sử dụng. Một trong những lợi ích chính của MongoTemplate là tính linh hoạt trong việc thực hiện các truy vấn phức tạp và các hoạt động khác. Với MongoTemplate, bạn có thể dễ dàng tạo ra các truy vấn phức tạp bằng cách sử dụng các phương thức như find, update, remove và nhiều hơn nữa. Điều này giúp bạn có thể thực hiện các truy vấn và các hoạt động phức tạp mà không cần phải viết mã thủ công. Ngoài ra, MongoTemplate cũng cung cấp các tính năng như hỗ trợ các loại dữ liệu phức tạp, hỗ trợ các loại dữ liệu không xác định và hỗ trợ các tính năng khác của MongoDB. Tính linh hoạt của MongoTemplate giúp bạn có thể dễ dàng thích nghi với các yêu cầu phức tạp của dự án và tăng hiệu suất của ứng dụng.
Mở trang câu hỏi này →
49What is MongoDB Atlas?4 lựa chọnDễ100% trả lời đúng
AA local installation of MongoDB.
BA cloud-hosted database service by MongoDB.
CA Java driver for MongoDB.
DA tool for managing relational databases.
Lời giải
MongoDB Atlas là một dịch vụ cơ sở dữ liệu được lưu trữ trên đám mây do MongoDB cung cấp. Nó cho phép người dùng tạo và quản lý các cơ sở dữ liệu MongoDB trên các nền tảng đám mây như AWS, Google Cloud và Azure. Với MongoDB Atlas, người dùng có thể dễ dàng tạo và cấu hình các cơ sở dữ liệu, cũng như quản lý quyền truy cập và bảo mật. Ngoài ra, MongoDB Atlas cũng cung cấp các tính năng tự động hóa và giám sát để giúp người dùng tối ưu hóa hiệu suất và bảo mật của cơ sở dữ liệu. Điều này làm cho MongoDB Atlas trở thành một lựa chọn phổ biến cho các ứng dụng và dự án cần một cơ sở dữ liệu mạnh mẽ và linh hoạt.
Mở trang câu hỏi này →
ATo specify the local database path.
BTo authenticate the application with the MongoDB Atlas cluster.
CTo configure the JDBC driver.
DTo define the data model.
Lời giải
Khi cấu hình chuỗi kết nối cho MongoDB Atlas trong Spring Boot, mục đích bao gồm tên đăng nhập và mật khẩu là để xác thực ứng dụng với cụm MongoDB Atlas. Điều này giúp đảm bảo rằng ứng dụng có quyền truy cập vào dữ liệu trong cụm MongoDB Atlas. Khi bạn bao gồm tên đăng nhập và mật khẩu trong chuỗi kết nối, ứng dụng sẽ sử dụng chúng để xác thực với MongoDB Atlas và truy cập vào dữ liệu. Điều này là rất quan trọng để bảo vệ dữ liệu của bạn khỏi truy cập không hợp lệ.
Mở trang câu hỏi này →
51How do SPAs affect analytics and tracking tools like Google Analytics?4 lựa chọnKhó33% trả lời đúng
AAnalytics tools natively support SPAs without setup
BThey simplify tracking because everything is on one page
CSPAs automatically log page views
DThey require manual tracking for route changes
Lời giải
Các ứng dụng một trang (SPAs) có thể ảnh hưởng đến công cụ phân tích và theo dõi như Google Analytics. Khi sử dụng SPAs, người dùng không phải chuyển trang mà thay vào đó, nội dung sẽ được tải về và hiển thị trên cùng một trang. Điều này có thể gây khó khăn cho công cụ phân tích vì chúng không thể tự động theo dõi các trang khác nhau mà người dùng đã truy cập. Thay vào đó, người dùng phải thực hiện theo dõi thủ công cho các thay đổi đường dẫn. Điều này có nghĩa là người dùng phải tự động hóa việc theo dõi và phân tích dữ liệu để có được thông tin chính xác về hành vi người dùng.
Mở trang câu hỏi này →
AThey offer faster transitions between pages after the first load
BThey require no JavaScript
CThey offer faster initial page loads
DThey reduce server-side processing for all requests
Lời giải
Ở các ứng dụng một trang (Single Page Applications - SPAs), người dùng không cần phải tải lại toàn bộ trang khi chuyển đổi giữa các trang khác nhau. Điều này giúp giảm thiểu thời gian tải trang và cải thiện trải nghiệm người dùng. Sau khi tải trang lần đầu tiên, các trang khác sẽ được tải nhanh chóng và mượt mà, không cần phải chờ đợi quá lâu. Điều này là nhờ vào việc sử dụng JavaScript để tải và cập nhật nội dung trang mà không cần phải tải lại toàn bộ trang.
Mở trang câu hỏi này →
53Which of the following best explains why SPAs provide a better user experience?4 lựa chọnTrung bình40% trả lời đúng
AThey enable seamless navigation without full reloads
BThey are always faster than any server-rendered app
CThey use server-side rendering for every page
DThey refresh the entire browser page on each request
Lời giải
SPAs (Single-Page Applications) cung cấp trải nghiệm người dùng tốt hơn vì chúng cho phép người dùng di chuyển qua các trang web mà không cần tải lại toàn bộ trang. Điều này được thực hiện thông qua việc sử dụng JavaScript để tải nội dung mới vào trang web mà không cần phải tải lại toàn bộ trang. Điều này giúp cải thiện tốc độ và hiệu suất của trang web, đồng thời cũng giúp người dùng có trải nghiệm mượt mà hơn. Ngoài ra, SPAs cũng cho phép người dùng tương tác với trang web mà không cần phải chờ đợi trang web tải lại. Điều này giúp người dùng có thể tương tác với trang web một cách nhanh chóng và dễ dàng hơn.
Mở trang câu hỏi này →
AServer misconfiguration
BSSL certificate expiration
CDatabase injection
DCross-Site Scripting (XSS)
Lời giải
Các ứng dụng một trang (SPAs) thường thực hiện nhiều xử lý trên phía client, điều này làm tăng nguy cơ tấn công Cross-Site Scripting (XSS). XSS là một loại tấn công web mà kẻ tấn công có thể thực hiện mã độc trên trang web của nạn nhân, khiến nạn nhân thực hiện các hành động không mong muốn. Các ứng dụng một trang thường sử dụng JavaScript để thực hiện các hành động trên phía client, và nếu mã JavaScript bị tấn công, kẻ tấn công có thể thực hiện các hành động độc hại như sao chép dữ liệu, thực hiện các giao dịch không mong muốn, v.v. Vì vậy, các nhà phát triển cần phải chú ý đến việc bảo mật mã JavaScript của mình để tránh các tấn công XSS.
Mở trang câu hỏi này →
55What is one disadvantage of SPAs in terms of browser history and navigation?4 lựa chọnKhó33% trả lời đúng
AThey provide better back/forward navigation than traditional sites
BThey cannot support routing
CThey use standard browser navigation without modification
DManual configuration is needed to manage browser history correctly
Lời giải
Các ứng dụng đơn trang (SPAs) có một nhược điểm quan trọng liên quan đến lịch sử và điều hướng của trình duyệt. Khi bạn sử dụng một SPA, trình duyệt không thể lưu lại lịch sử trang web như một trang web truyền thống. Điều này có nghĩa là nếu bạn muốn quay lại trang trước đó, bạn không thể sử dụng tính năng quay lại (back) của trình duyệt. Thay vào đó, bạn phải sử dụng các tính năng riêng của ứng dụng để điều hướng. Một nhược điểm khác là bạn cần cấu hình thủ công để quản lý lịch sử trình duyệt một cách chính xác. Điều này có thể gây khó khăn cho người dùng khi họ muốn quay lại trang trước đó.
Mở trang câu hỏi này →
56Why are SPAs considered ideal for building responsive web applications?4 lựa chọnDễ100% trả lời đúng
AThey automatically convert to mobile apps
BThey provide dynamic and fast content updates
CThey completely avoid CSS
DThey can only be accessed on mobile devices
Lời giải
Các ứng dụng một trang (SPAs) được coi là lý tưởng để xây dựng các ứng dụng web phản hồi vì chúng cung cấp nội dung cập nhật nhanh chóng và động. Điều này đạt được thông qua việc sử dụng JavaScript để tải dữ liệu từ máy chủ và cập nhật nội dung trên trang web mà không cần tải lại trang. Điều này giúp cải thiện trải nghiệm người dùng và tăng tốc độ tải trang. Ngoài ra, các ứng dụng một trang thường được xây dựng trên cơ sở dữ liệu và có thể được truy cập từ bất kỳ thiết bị nào có kết nối internet, bao gồm cả máy tính để bàn và thiết bị di động. Điều này giúp tạo ra một ứng dụng web phản hồi linh hoạt và dễ sử dụng.
Mở trang câu hỏi này →
57How do SPAs typically reduce server load?4 lựa chọnTrung bình60% trả lời đúng
ABy disabling server-side APIs
BBy caching everything on the server
CBy offloading routing and rendering to the client
DBy avoiding use of databases
Lời giải
Các ứng dụng một trang (SPAs) thường giảm tải cho máy chủ bằng cách chuyển giao các chức năng định tuyến và hiển thị sang máy khách. Điều này có nghĩa là máy khách sẽ xử lý các yêu cầu của người dùng và không cần phải gửi yêu cầu đến máy chủ. Điều này giúp giảm tải cho máy chủ và cải thiện hiệu suất của ứng dụng. Ngoài ra, các SPAs cũng thường sử dụng các kỹ thuật như lưu trữ dữ liệu trong bộ nhớ đệm của máy khách để giảm thiểu số lần truy cập máy chủ. Điều này giúp giảm tải cho máy chủ và cải thiện hiệu suất của ứng dụng.
Mở trang câu hỏi này →
58What does "unidirectional data flow" in React mean?4 lựa chọnTrung bình67% trả lời đúng
AData flows only from server to client
BData is shared globally across all components
CData flows from parent to child via props
DData flows only from child to parent
Lời giải
Trong React, 'unidirectional data flow' ám chỉ một cách thức truyền dữ liệu một chiều từ cha sang con thông qua props. Điều này có nghĩa là dữ liệu sẽ được truyền từ một thành phần cha sang thành phần con, và không thể truyền ngược lại từ con sang cha. Điều này giúp dễ dàng theo dõi và quản lý dữ liệu trong ứng dụng, giảm thiểu sự phức tạp và lỗi. Ngoài ra, cách thức này cũng giúp đảm bảo tính nhất quán và bảo mật của dữ liệu. Khi sử dụng unidirectional data flow, các thành phần con sẽ không thể tự do thay đổi dữ liệu mà không thông báo cho thành phần cha, giúp duy trì trạng thái ứng dụng một cách chính xác.
Mở trang câu hỏi này →
A<Child prop=value />
B<Child {prop} />
CChild.prop = value
Dprop.Child = value
Lời giải

Trong React, để truyền props từ cha sang con, chúng ta sử dụng cú pháp đặc biệt. Câu trả lời đúng là <Child prop=value />, trong đó prop là tên của thuộc tính và value là giá trị mà chúng ta muốn truyền. Ví dụ, nếu chúng ta muốn truyền một chuỗi 'Xin chào' sang một thành phần con, chúng ta sẽ sử dụng cú pháp <Child message='Xin chào' />. Khi đó, thành phần con có thể sử dụng props để truy cập vào giá trị 'Xin chào'. Điều này giúp chúng ta dễ dàng chia sẻ dữ liệu giữa các thành phần trong ứng dụng React.

Mở trang câu hỏi này →
60What is JSX in React?4 lựa chọnDễ83% trả lời đúng
AA programming language
BA template engine
CA syntax extension for JavaScript
DA CSS preprocessor
Lời giải
JSX là một phần mở rộng ngữ nghĩa cho JavaScript trong framework React. Nó cho phép bạn viết mã HTML và JavaScript trong cùng một tệp, tạo nên một giao diện người dùng động và dễ dàng quản lý. JSX được sử dụng để tạo ra các thành phần UI trong ứng dụng React, giúp bạn có thể tái sử dụng mã và tăng hiệu suất phát triển. Khi bạn sử dụng JSX, bạn có thể viết mã như một tệp HTML thông thường, nhưng với các thuộc tính và phương thức đặc biệt của JavaScript. Điều này giúp bạn có thể dễ dàng tạo ra các giao diện người dùng phức tạp và tương tác mà không cần phải viết mã JavaScript thủ công.
Mở trang câu hỏi này →
61Which of the following is true about keys in React lists?4 lựa chọnDễ83% trả lời đúng
AKeys must be random numbers
BKeys help React identify which items changed
CKeys are required only for the first element
DKeys are the same as props
Lời giải
Trong React, các khóa (key) được sử dụng để xác định và theo dõi các phần tử trong danh sách. Khi danh sách được cập nhật, React sử dụng khóa để xác định phần tử nào đã thay đổi, thêm hoặc xóa. Điều này giúp React tối ưu hóa hiệu suất và đảm bảo rằng danh sách được cập nhật chính xác. Khóa không phải là một phần của dữ liệu thực tế mà là một giá trị duy nhất được gán cho mỗi phần tử trong danh sách. Nó không phải là một số ngẫu nhiên, cũng không phải là một thuộc tính (prop) của phần tử. Khóa giúp React xác định và theo dõi các phần tử trong danh sách, từ đó giúp tối ưu hóa hiệu suất và đảm bảo rằng danh sách được cập nhật chính xác.
Mở trang câu hỏi này →
62What is the purpose of React Fragment (<></>)?4 lựa chọnDễ100% trả lời đúng
AWrap multiple elements without adding extra DOM nodes
BReplace div tags in HTML
CCreate new component instances
DImprove routing
Lời giải
Trong React, Fragment (<></>) được sử dụng để chứa một nhóm các thành phần hoặc phần tử mà không cần thêm các nút DOM bổ sung. Điều này giúp giảm thiểu số lượng nút DOM trong ứng dụng, từ đó cải thiện hiệu suất và dễ dàng quản lý hơn. Fragment không có bất kỳ thuộc tính nào và không thể được sử dụng như một thành phần độc lập. Thay vào đó, nó được sử dụng để nhóm các thành phần khác nhau lại với nhau mà không cần thêm bất kỳ nút DOM nào. Ví dụ, nếu bạn muốn hiển thị một số thông tin trên cùng một dòng, bạn có thể sử dụng Fragment để nhóm các phần tử lại với nhau.
Mở trang câu hỏi này →
63In React, how do you conditionally render content?4 lựa chọnDễ80% trả lời đúng
AUsing if-else outside JSX
BUsing ternary operator or && in JSX
CUsing switch-case only
DReact does not support conditional rendering
Lời giải
Trong React, cách để render nội dung điều kiện là một câu hỏi thường gặp. Để trả lời câu hỏi này, chúng ta cần hiểu cách sử dụng điều kiện trong JSX. Trong JSX, chúng ta có thể sử dụng toán tử ba ngôi (ternary operator) hoặc toán tử AND (&&) để render nội dung điều kiện. Ví dụ, nếu chúng ta muốn render một đoạn văn bản nếu một biến là true, chúng ta có thể sử dụng toán tử ba ngôi như sau: { condition ? 'Nội dung khi true' : 'Nội dung khi false' }. Hoặc chúng ta có thể sử dụng toán tử AND như sau: { condition && 'Nội dung khi true' }. Điều này cho phép chúng ta render nội dung điều kiện một cách linh hoạt và dễ dàng.
Mở trang câu hỏi này →
64What is the virtual DOM in React?4 lựa chọnDễ100% trả lời đúng
AA browser feature
BAn actual copy of the DOM
CA lightweight copy of the real DOM used for performance
DA styling framework
Lời giải
Virtual DOM (DOM ảo) trong React là một khái niệm quan trọng giúp cải thiện hiệu suất của ứng dụng. Nó là một bản sao nhẹ nhàng của DOM thực tế, được sử dụng để tối ưu hóa quá trình render và cập nhật nội dung trên trang web. Khi dữ liệu thay đổi, React sẽ tạo ra một bản sao mới của DOM ảo, sau đó so sánh nó với bản sao cũ để xác định những phần cần được cập nhật. Điều này giúp giảm thiểu số lượng lần render và cập nhật DOM thực tế, từ đó cải thiện hiệu suất và tăng tốc độ tải trang. Ngoài ra, Virtual DOM cũng giúp bảo vệ ứng dụng khỏi những thay đổi không mong muốn trong DOM thực tế.
Mở trang câu hỏi này →