Hỗ trợ đào tạo

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

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

SBA301 - Phát triển ứng dụng trang đơn (Single Page Application) là môn học kết hợp ReactJS ở phía client và Spring Boot REST ở phía server. Ngân hàng câu hỏi trắc nghiệm SBA301 có đáp án bao quát trọn bộ chương trình: JSX và component, React Hooks (useState, useEffect, useMemo, useCallback) cùng Rules of Hooks, quản lý state ở functional component và class component, React-Bootstrap, client-side routing với React Router v6 (useParams, route param, trang 404), giao tiếp bất đồng bộ bằng Promise, async/await và Axios, nền tảng HTTP và REST API, Spring Boot REST với @RequestBody, @PathVariable, @RequestParam, tài liệu API bằng Swagger 3 / OpenAPI, kiểm thử với spring-boot-starter-test, JPA và Hibernate (ORM, Slice, phân trang, khoá lạc quan, hbm2ddl, Session và Transaction), MongoDB, Spring Data MongoDB, MongoTemplate, MongoDB Atlas và bảo mật với Spring Security cùng JWT. Tài liệu ôn thi FE dành cho sinh viên FPT University.

Chủ đề học tập

Integrate single page application with Spring Boot

SBA301 - Chương 10: Bảo mật ứng dụng — Basic Auth, session và JWT

Xác thực và phân quyền cho dịch vụ REST bằng Spring Security. Phần Basic Authentication gồm định dạng header Authorization với base64 của tên đăng nhập và mật khẩu, phản hồi 401 kèm header WWW-Authenticate để trình duyệt bật hộp thoại đăng nhập, tính phi trạng thái và giới hạn an toàn của nó so với OAuth2. Phần phiên làm việc gồm header Cookie mang mã phiên và HttpSession.invalidate để huỷ phiên cùng toàn bộ thuộc tính. Phần JWT gồm vai trò của header trong token và trình tự các bước triển khai.

0Bộ đềbộ đề
12+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 11: Kiểm thử ứng dụng Spring Boot

Kiểm thử ứng dụng tích hợp: phân biệt kiểm thử đơn vị với kiểm thử tích hợp, gói spring-boot-starter-test, annotation SpringBootTest cùng tham số webEnvironment. RANDOM_PORT khởi động máy chủ nhúng trên cổng ngẫu nhiên và là điều kiện để tiêm TestRestTemplate, DEFINED_PORT dùng khi cần gọi HTTP thật vào cổng đã định, còn WebMvcTest chỉ nạp tầng web cho nhẹ. Kèm ExtendWith với SpringExtension khi chạy trên JUnit 5.

0Bộ đềbộ đề
7+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 1: Kiến trúc SPA và tích hợp với Spring Boot

Tổng quan ứng dụng trang đơn (Single Page Application) và cách nó ghép với backend Spring Boot: vì sao SPA chuyển trang nhanh hơn sau lần tải đầu, đánh đổi ở lần tải đầu tiên, cách SPA giảm tải cho máy chủ nhờ đẩy việc định tuyến và dựng giao diện xuống trình duyệt. Kèm những điểm phải tự xử lý mà trang truyền thống được sẵn: lịch sử duyệt web, công cụ phân tích như Google Analytics, và rủi ro bảo mật XSS do xử lý nặng phía client. Có cả vai trò của HTTP và của máy chủ backend trong kiến trúc này.

0Bộ đềbộ đề
13+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 2: React nền tảng — JSX, component, props, Virtual DOM

Những viên gạch đầu tiên của React: JSX là phần mở rộng cú pháp của JavaScript, cách nhúng biến bằng dấu ngoặc nhọn, cách truyền props từ component cha xuống con và trả dữ liệu ngược lên bằng hàm callback. Giải thích Virtual DOM và vì sao nó giúp cập nhật giao diện nhanh hơn thao tác trực tiếp lên DOM thật, vai trò của key trong danh sách, React Fragment để gói nhiều phần tử mà không sinh thêm nút DOM, kết xuất có điều kiện, cùng bộ component dựng sẵn React-Bootstrap và ý nghĩa của responsive.

0Bộ đềbộ đề
20+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 3: State và Hooks trong React

Quản lý trạng thái trong component hàm: useState trả về giá trị và hàm cập nhật, vì sao sửa thẳng biến state thì React bỏ qua, useEffect thay cho componentDidMount để chạy tác dụng phụ và ý nghĩa của mảng phụ thuộc. Bao gồm useMemo để ghi nhớ kết quả tính toán tốn kém, useReducer, phân biệt hook hợp lệ với tên bịa, Rules of Hooks (không gọi hook trong vòng lặp hay nhánh điều kiện), component có kiểm soát, kỹ thuật nâng state lên tổ tiên chung gần nhất, và cách đọc state trong component lớp.

0Bộ đềbộ đề
24+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 4: React Router — điều hướng phía client

Định tuyến trong ứng dụng React bằng react-router-dom: bọc toàn bộ route trong Router hoặc BrowserRouter, khai báo tham số đường dẫn bằng dấu hai chấm và đọc nó bằng hook useParams. Trình bày component Outlet cho route lồng nhau, vai trò của Switch trong bản v5 là kết xuất route khớp đầu tiên, cách bắt trang 404 bằng route dấu sao đặt cuối cùng, và vì sao định tuyến phía client cho trải nghiệm mượt hơn nhờ giảm số lần gọi về máy chủ.

0Bộ đềbộ đề
10+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 5: Gọi API từ client — fetch, Axios và Promise

Cách phía React lấy dữ liệu từ dịch vụ REST: hàm fetch trả về Promise, mặc định dùng phương thức GET, và chuỗi xử lý đúng là then lấy response rồi gọi response.json(). Phần Axios gồm axios.get và axios.post, đặt địa chỉ gốc bằng axios.defaults.baseURL, bắt lỗi bằng catch, các phương thức HTTP mà Axios hỗ trợ, và chọn put hay patch khi cập nhật tài nguyên. Kèm nền tảng bất đồng bộ của JavaScript: khởi tạo Promise và từ khoá await.

0Bộ đềbộ đề
15+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 6: Spring Boot REST — annotation và xử lý request, response

Xây dựng dịch vụ REST bằng Spring Boot: GetMapping và PostMapping để ánh xạ phương thức HTTP, RequestParam cho tham số truy vấn, PathVariable cho biến đường dẫn, RequestHeader cho header tuỳ ý, RequestBody để chuyển thân yêu cầu thành đối tượng Java. Giải thích RestController đã bao hàm ResponseBody cho mọi phương thức, cách ấn định mã trạng thái bằng ResponseStatus, ResponseEntity để tự do đặt thân, mã trạng thái và header, ràng buộc kiểu dữ liệu qua consumes và produces, cùng lựa chọn giữa PUT và PATCH.

0Bộ đềbộ đề
20+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 7: Truy cập dữ liệu quan hệ với JPA và Hibernate

Lớp ánh xạ đối tượng - quan hệ trong Spring Boot: JPA che phần JDBC thủ công, Hibernate với tệp cấu hình hibernate.cfg.xml và thẻ mapping resource trỏ tới tệp ánh xạ lớp Java sang bảng, giao diện Transaction để quản lý giao dịch, tính năng hbm2ddl tự sinh lược đồ. Kèm khoá lạc quan (optimistic locking) chống xung đột khi ghi đồng thời, phương thức truy vấn suy diễn từ tên hàm trong Spring Data JPA, và thời điểm nên dùng Slice thay cho Page để khỏi đếm toàn bộ bản ghi.

0Bộ đềbộ đề
14+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 8: MongoDB và Spring Data MongoDB

Làm việc với cơ sở dữ liệu tài liệu: lược đồ linh hoạt cho phép các tài liệu trong cùng collection có tập trường khác nhau, các lệnh shell như find, insertOne, createIndex, phép nối $lookup và projection để chỉ lấy trường cần. Phía Spring Boot gồm gói khởi tạo spring-boot-starter-data-mongodb, thuộc tính spring.data.mongodb.database, annotation Document và DBRef, giao diện MongoRepository cho CRUD và lớp MongoTemplate cùng Criteria cho truy vấn phức tạp. Có thêm chỉ mục duy nhất, chỉ mục ghép, replica set và MongoDB Atlas.

0Bộ đềbộ đề
25+Câu hỏicâu hỏi
đăng ngày
Integrate single page application with Spring Boot

SBA301 - Chương 9: Tài liệu hoá API với OpenAPI và Swagger

Sinh tài liệu sống cho dịch vụ REST bằng Springdoc OpenAPI 3: thư viện springdoc-openapi-ui, thuộc tính springdoc.api-docs.path để đổi đường dẫn mặc định, annotation Tag để gom nhóm endpoint trong Swagger UI, ApiResponses và ApiResponse để mô tả từng mã trạng thái trả về như 200 hay 404, RequestBody của gói swagger để mô tả nội dung thân yêu cầu, và annotation Hidden để giấu endpoint khỏi tài liệu. Kèm những thành phần thường thấy trong một bản tài liệu REST và thứ không thuộc về nó.

0Bộ đềbộ đề
11+Câu hỏicâu hỏi
đăng ngày

Đề thi trắc nghiệm

Xem tất cả
Học từ ngân hàng câu hỏi

Bắt đầu một phiên học theo môn

Tiến độ của bạn sẽ luôn được tính toán và đồng bộ trực tiếp theo tổng số lượng câu hỏi mới nhất của môn học này.

171Ngân hàng hiện tại
--Tiến độ môn
Số câu hỏi
Độ khó
Phiên sắp tạo
171 câu Chế độ học Không giới hạn Trộn

Bạn cần đăng nhập để bắt đầu học từ ngân hàng câu hỏi và lưu tiến độ theo môn.

0Dễ · --
0Trung bình · --
0Khó · --
--Đã học
--Đang nắm chắc
Đăng nhập để xemLần hoàn tất gần nhất

Đang tải phân bố độ khó.

Đăng nhập để bắt đầu học từ ngân hàng câu hỏi, lưu tiến độ theo môn, resume phiên đang dở và cập nhật thống kê dài hạn.

Ngân hàng câu hỏi

Xem trước · Cuộn vô hạn
Xem tất cả
Đang hiển thị 8 / 171 câu hỏi
Bấm vào từng câu để xem đáp án
#001
63%
ĐỘ CHÍNH XÁC
8
LƯỢT LÀM
4 LỰA CHỌN
<div class="my-class">Hello</div>ĐÚNG
B<component style="my-style">World</component>
C<for (let i = 0; i < 5; i++)>Loop</for>
D<if (true) {}>
Giải thích

Trong JSX, các biểu thức hợp lệ phải tuân theo các quy tắc sau: - Các thẻ HTML phải được viết theo cú pháp mở và đóng đúng. - Các thuộc tính phải được viết theo cú pháp <div class="my-class">. - Các biểu thức JavaScript không được sử dụng trong JSX. - Các biểu thức JSX không được sử dụng trong JavaScript. - Các thẻ không được sử dụng trong JSX. Vậy, trong các lựa chọn trên, chỉ có "<div class="my-class">Hello</div>" là một biểu thức JSX hợp lệ.

#002
71%
ĐỘ CHÍNH XÁC
7
LƯỢT LÀM
4 LỰA CHỌN
Agit branch create feature-login
Bgit new branch feature-login
git branch feature-loginĐÚNG
Dgit checkout feature-login
Giải thích

Để tạo một nhánh mới trong Git, bạn cần sử dụng lệnh 'git branch'. Lệnh này được sử dụng để tạo một nhánh mới từ một điểm cụ thể trong lịch sử commit của dự án. Trong câu hỏi này, bạn cần tạo một nhánh mới có tên là 'feature-login'. Lệnh đúng để tạo nhánh mới là 'git branch feature-login'. Lệnh này sẽ tạo một nhánh mới có tên là 'feature-login' và nó sẽ được tạo từ điểm hiện tại của nhánh hiện tại. Nếu bạn muốn chuyển sang nhánh mới ngay lập tức, bạn cần sử dụng lệnh 'git checkout' sau khi tạo nhánh mới.

#003
38%
ĐỘ CHÍNH XÁC
8
LƯỢT LÀM
4 LỰA CHỌN
AThe component re-renders.
BAn error is thrown.
The change is ignored.ĐÚNG
DThe component updates, but it is not recommended.
Giải thích

Khi bạn trực tiếp sửa đổi biến trạng thái được trả về bởi useState() trong một thành phần chức năng, thì thay đổi này sẽ bị bỏ qua. Điều này là vì useState() sử dụng một đối tượng trạng thái riêng biệt để lưu trữ giá trị của biến trạng thái. Khi bạn sửa đổi biến trạng thái trực tiếp, bạn không thay đổi giá trị được lưu trữ trong đối tượng trạng thái. Thay vào đó, bạn đang sửa đổi một bản sao của giá trị đó. Vì vậy, khi useState() được gọi lại trong vòng đời của thành phần, nó sẽ trả về giá trị ban đầu, không phải giá trị đã được sửa đổi.

#004
64%
ĐỘ CHÍNH XÁC
14
LƯỢT LÀM
4 LỰA CHỌN
AThey provide better back/forward navigation than traditional sites
BThey cannot support routing
CThey use standard browser navigation without modification
Manual configuration is needed to manage browser history correctlyĐÚNG
Giải thích

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 đó.

#005
29%
ĐỘ CHÍNH XÁC
7
LƯỢT LÀM
4 LỰA CHỌN
ATo define CSS styles.
To make HTTP requests.ĐÚNG
CTo manage database connections.
DTo handle client-side rendering exclusively.
Giải thích

Axios là một thư viện JavaScript phổ biến được sử dụng để thực hiện các yêu cầu HTTP trong các ứng dụng JavaScript. Nó cho phép bạn dễ dàng gửi và nhận dữ liệu từ máy chủ bằng cách sử dụng các phương thức HTTP khác nhau như GET, POST, PUT, DELETE, v.v. Axios cung cấp một cách đơn giản và dễ sử dụng để quản lý các yêu cầu HTTP, giúp giảm thiểu thời gian phát triển và tăng hiệu suất của ứng dụng. Ngoài ra, Axios cũng hỗ trợ các tính năng như hủy bỏ yêu cầu, quản lý trạng thái, và xử lý lỗi, giúp bạn có thể xây dựng các ứng dụng web mạnh mẽ và đáng tin cậy.

#006
67%
ĐỘ CHÍNH XÁC
6
LƯỢT LÀM
4 LỰA CHỌN
useContext()ĐÚNG
BuseProps()
CuseValue()
DuseContextValue()
Giải thích

Trong lập trình React, khi sử dụng các thành phần chức năng (Functional Components), chúng ta có thể truy cập vào giá trị của ngữ cảnh (context) bằng cách sử dụng Hook. Hook là một hàm đặc biệt được sử dụng để truy cập vào các giá trị và hành vi của React. Trong trường hợp này, chúng ta cần sử dụng Hook để truy cập vào giá trị của ngữ cảnh. Có một số lựa chọn cho chúng ta: useProps(), useValue(), useContextValue(), useContext(). Tuy nhiên, chỉ có một trong số đó là đúng. Đó là useContext(). Hook useContext() cho phép chúng ta truy cập vào giá trị của ngữ cảnh và sử dụng nó trong thành phần chức năng của mình.

#007
29%
ĐỘ CHÍNH XÁC
7
LƯỢT LÀM
4 LỰA CHỌN
Athis.state = { newValue: 'new' };
this.setState({ newValue: 'new' });ĐÚNG
CuseState('new');
Dstate.update({newValue: 'new'});
Giải thích

Để cập nhật trạng thái trong một Component lớp, chúng ta có thể sử dụng phương thức setState(). Phương thức này cho phép cập nhật trạng thái của Component một cách an toàn và hiệu quả. Khi sử dụng setState(), Component sẽ được cập nhật ngay lập tức và trạng thái mới sẽ được lưu trữ trong bộ nhớ đệm. Sau đó, trạng thái mới sẽ được cập nhật vào bộ nhớ chính trong vòng đời của Component. Điều này giúp đảm bảo rằng trạng thái của Component luôn được cập nhật một cách đồng bộ và chính xác.

#008
73%
ĐỘ CHÍNH XÁC
15
LƯỢT LÀM
4 LỰA CHỌN
<Child prop=value />ĐÚNG
B<Child {prop} />
CChild.prop = value
Dprop.Child = value
Giải thích

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.

Cuộn để tải thêm…