Ngân hàng câu hỏi môn 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) 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.

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.
Đang hiển thị 15 / 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.

#009
71%
ĐỘ CHÍNH XÁC
7
LƯỢT LÀM
4 LỰA CHỌN
Aprops.state.
this.state.ĐÚNG
CuseState().
DgetState().
Giải thích

Trong các thành phần lớp (Class Components), trạng thái (state) có thể truy cập thông qua thuộc tính 'this.state'. Đây là cách truy cập trạng thái trong các thành phần lớp, nơi mà trạng thái được lưu trữ trong thuộc tính 'state' của lớp. Ví dụ, nếu bạn có một lớp như sau: class MyClass extends React.Component { constructor(props) { super(props); this.state = { count: 0 }; } render() { return ( <div> <p>Count: {this.state.count}</p> <button onClick={() => this.setState({ count: this.state.count + 1 })}>+</button> </div> ); } } Thì bạn có thể truy cập trạng thái bằng cách sử dụng 'this.state'. Tuy nhiên, trong các thành phần chức năng (Functional Components), trạng thái được truy cập thông qua hàm 'useState()'.

#010
75%
ĐỘ CHÍNH XÁC
4
LƯỢT LÀM
4 LỰA CHỌN
AGET
BPUT
Both GET and PUTĐÚNG
DPOST
Giải thích

HTTP phương thức idempotent là phương thức có thể thực hiện nhiều lần mà không gây ra tác động khác biệt. Trong các phương thức HTTP, phương thức GET và PUT được coi là idempotent. Phương thức GET được sử dụng để lấy dữ liệu từ server, trong khi phương thức PUT được sử dụng để cập nhật dữ liệu trên server. Vì cả hai phương thức này đều không gây ra tác động khác biệt khi thực hiện nhiều lần, nên chúng được coi là idempotent. Ví dụ, nếu bạn thực hiện GET nhiều lần để lấy dữ liệu, bạn sẽ nhận được dữ liệu giống nhau mỗi lần. Tương tự, nếu bạn thực hiện PUT nhiều lần để cập nhật dữ liệu, dữ liệu sẽ được cập nhật một lần duy nhất. Điều này giúp đảm bảo tính toàn vẹn và ổn định của dữ liệu trên server.

#011
73%
ĐỘ CHÍNH XÁC
15
LƯỢT LÀM
4 LỰA CHỌN
AServer misconfiguration
BSSL certificate expiration
CDatabase injection
Cross-Site Scripting (XSS)ĐÚNG
Giải thích

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.

#012
75%
ĐỘ CHÍNH XÁC
4
LƯỢT LÀM
4 LỰA CHỌN
AXML
JSON or YAMLĐÚNG
CHTML
DCSV
Giải thích

Swagger 3 (OpenAPI 3) là một tiêu chuẩn mở cho việc mô tả API. Để viết các đặc tả này, chúng ta có thể sử dụng hai định dạng file là JSON và YAML. JSON (JavaScript Object Notation) là một định dạng file phổ biến được sử dụng để lưu trữ và truyền tải dữ liệu. YAML (YAML Ain't Markup Language) là một định dạng file khác được sử dụng để lưu trữ và truyền tải dữ liệu. Cả hai định dạng file này đều có thể được sử dụng để viết các đặc tả Swagger 3. XML và CSV không phải là định dạng file được hỗ trợ bởi Swagger 3. HTML cũng không phải là định dạng file được hỗ trợ bởi Swagger 3. Vì vậy, đáp án đúng cho câu hỏi này là JSON hoặc YAML.

#013
69%
ĐỘ CHÍNH XÁC
16
LƯỢT LÀM
4 LỰA CHỌN
Aswagger.api.url
Bopenapi.swagger.path
Cspring.openapi.path
springdoc.api-docs.pathĐÚNG
Giải thích

Để 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".

#014
50%
ĐỘ CHÍNH XÁC
6
LƯỢT LÀM
4 LỰA CHỌN
AUsing useState().
BUsing this.setState().
By assigning a value to this.state in the constructor().ĐÚNG
DBy using props.state.
Giải thích

Trong khi khởi tạo một thành phần Class Component, bạn cần phải sử dụng hàm constructor() để khởi tạo trạng thái ban đầu của component. Hàm constructor() được gọi khi component được tạo mới và nó được sử dụng để khởi tạo trạng thái của component. Bạn có thể sử dụng từ khóa 'this.state' để truy cập vào trạng thái của component và gán giá trị cho nó. Ví dụ: constructor(props) { super(props); this.state = { trạng_thái: 'giá_trị' }; }. Điều này giúp bạn có thể truy cập và sử dụng trạng thái trong các phương thức khác của component.

#015
62%
ĐỘ CHÍNH XÁC
13
LƯỢT LÀM
4 LỰA CHỌN
A@MockBean
@ExtendWith(SpringExtension.class)ĐÚNG
C@DataJpaTest
D@TestConfiguration
Giải thích

Khi sử dụng JUnit 5, annotation thường được sử dụng cùng với @SpringBootTest là @ExtendWith(SpringExtension.class). Annotation này cho phép JUnit 5 sử dụng Spring Boot để chạy các test. Nó giúp tạo ra một môi trường thử nghiệm đầy đủ cho ứng dụng Spring Boot, bao gồm cả các tính năng như autowiring và dependency injection. Điều này cho phép các nhà phát triển viết các test đơn giản và hiệu quả hơn. Ngoài ra, @ExtendWith(SpringExtension.class) cũng giúp giảm thiểu số lượng mã cần thiết để cấu hình môi trường thử nghiệm.

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