Đề thi trắc nghiệm

SBA301 - Bộ ôn thi cuối kỳ 84 câu

84Câu hỏi
Tích hợp ứng dụng trang đơn với Spring Boot - Integrate single page application with Spring BootMôn học

Phiên có lưu tiến độ dùng toàn bộ 84 câu của bộ đề để tiến độ khớp với máy chủ.

Phiên sắp tạo
84 câu Chế độ học Không giới hạn

Bạn cần đăng nhập để bắt đầu làm bài và lưu tiến độ.

Tổng câu hỏi

84

Thời gian làm bài

Không giới hạn

Lượt xem

15

Câu có lời giải

84

Câu có link chi tiết

84

Xem trước câu hỏi

Bấm vào từng câu để xem đáp án
#001
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Areact-navigation
react-router-domĐÚNG
Creact-router-native
Dreact-router-core
Giải thích

Trong React, việc định tuyến (routing) là một phần quan trọng của ứng dụng. Để quản lý các đường dẫn trong ứng dụng, chúng ta cần sử dụng các gói (package) chuyên dụng. Một trong những gói phổ biến nhất được sử dụng cho định tuyến trong ứng dụng React là react-router-dom. Gói này cho phép chúng ta tạo ra các đường dẫn và chuyển đổi giữa các trang trong ứng dụng một cách dễ dàng. Nó cũng cung cấp các tính năng như quản lý lịch sử trang, tạo ra các đường dẫn động và nhiều hơn nữa. Ngoài ra, gói này cũng được sử dụng để tạo ra các ứng dụng đa màn hình (multi-screen) và ứng dụng di động.

#002
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
fetch(url).then(response => response.json()).then(data => console.log(data));ĐÚNG
Bfetch(url).then(data => data.json()).then(console.log(data));
Cfetch(url).data().then(console.log);
Dfetch(url).json().then(data => console.log(data));
Giải thích

Để xử lý một yêu cầu fetch thành công, chúng ta cần sử dụng hàm then để thực hiện các hành động tiếp theo sau khi dữ liệu được tải về. Trong ví dụ này, chúng ta cần chuyển đổi dữ liệu từ dạng JSON sang dạng dễ đọc hơn bằng cách sử dụng hàm response.json(). Sau đó, chúng ta có thể sử dụng hàm console.log() để in ra dữ liệu đã được chuyển đổi. Vì vậy, câu trả lời đúng là fetch(url).then(response => response.json()).then(data => console.log(data));. Câu trả lời này cho phép chúng ta xử lý dữ liệu một cách linh hoạt và dễ dàng.

#003
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AMaps headers to method parameters
BBinds form data to method parameters
CMaps path variables to fields
Maps query parameters to method parametersĐÚNG
Giải thích

Annotation @RequestParam được sử dụng trong Spring MVC để ánh xạ các tham số truy vấn (query parameters) trong URL đến các tham số phương thức (method parameters) của một phương thức controller. Điều này cho phép bạn dễ dàng lấy giá trị của các tham số truy vấn và sử dụng chúng trong logic của phương thức. Ví dụ, nếu bạn có một phương thức controller như sau: @GetMapping("/users") public String getUsers(@RequestParam("name") String name, @RequestParam("age") int age) { ... } thì @RequestParam("name") và @RequestParam("age") sẽ ánh xạ các tham số truy vấn "name" và "age" trong URL đến các tham số phương thức "name" và "age".

#004
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A@RequestGet
B@Get
C@HttpGet
@GetMappingĐÚNG
Giải thích

Để ánh xạ các yêu cầu HTTP GET đến một phương thức, chúng ta sử dụng annotation @GetMapping trong Spring. Annotation này cho phép chúng ta định nghĩa một phương thức có thể được gọi khi nhận được yêu cầu GET từ client. Ví dụ, nếu chúng ta có một phương thức như sau: @GetMapping("/users") public List<User> getUsers() { // logic để lấy danh sách người dùng } Thì khi client gửi yêu cầu GET đến đường dẫn /users, phương thức getUsers() sẽ được gọi và trả về danh sách người dùng. Annotation @GetMapping là một trong những annotation quan trọng trong Spring, giúp chúng ta xây dựng các ứng dụng web hiệu quả và dễ dàng quản lý.

#005
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AOnly GET and POST in the browser
GET, POST, PUT, DELETE, PATCH, OPTIONS, HEADĐÚNG
CGET, POST only
DGET, POST, DELETE only
Giải thích

Axios hỗ trợ các phương thức HTTP sau: GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD. Điều này có nghĩa là bạn có thể sử dụng bất kỳ phương thức nào trong số này khi sử dụng Axios để gửi yêu cầu HTTP. Ví dụ, bạn có thể sử dụng phương thức PUT để cập nhật dữ liệu, phương thức DELETE để xóa dữ liệu, phương thức PATCH để cập nhật một phần dữ liệu, v.v. Ngoài ra, bạn cũng có thể sử dụng phương thức OPTIONS để kiểm tra các phương thức HTTP được hỗ trợ bởi server, và phương thức HEAD để kiểm tra thông tin về tài nguyên mà không tải về dữ liệu.

#006
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy using HttpServletResponse
BYou cannot control the status code
By using @ResponseStatus annotationĐÚNG
DBy returning an int
Giải thích

Để chỉ định mã trạng thái phản hồi trong một controller REST, bạn có thể sử dụng một trong các phương pháp sau. Phương pháp đầu tiên là sử dụng HttpServletResponse. Tuy nhiên, phương pháp này không được khuyến khích vì nó yêu cầu bạn phải sử dụng phương thức sendError() để chỉ định mã trạng thái. Phương pháp thứ hai là bạn không thể kiểm soát mã trạng thái. Phương pháp thứ ba là sử dụng @ResponseStatus annotation. Đây là phương pháp được khuyến khích nhất vì nó cho phép bạn dễ dàng chỉ định mã trạng thái cho phương thức controller của mình. Phương pháp thứ tư là bằng cách trả về một giá trị int. Tuy nhiên, phương pháp này cũng không được khuyến khích vì nó có thể gây nhầm lẫn và khó bảo trì.

#007
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo render HTML content
To provide data through JSON or XML over HTTPĐÚNG
CTo connect to a database
DTo secure the application with OAuth2
Giải thích

Mục đích chính của một dịch vụ web RESTful trong Spring Boot là cung cấp dữ liệu thông qua JSON hoặc XML qua HTTP. Dịch vụ web RESTful sử dụng các phương thức HTTP như GET, POST, PUT, DELETE để tương tác với các nguồn dữ liệu. Khi một yêu cầu HTTP được gửi đến dịch vụ web RESTful, nó sẽ xử lý yêu cầu và trả về dữ liệu phù hợp theo định dạng JSON hoặc XML. Điều này cho phép các ứng dụng khác nhau có thể giao tiếp với dịch vụ web RESTful và sử dụng dữ liệu được cung cấp. Ví dụ, một ứng dụng web có thể sử dụng dịch vụ web RESTful để tải xuống dữ liệu từ một cơ sở dữ liệu và hiển thị dữ liệu đó trên trang web.

#008
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A@RestStatus
B@StatusCode
@ResponseStatusĐÚNG
D@HttpStatus
Giải thích

Để trả về một trạng thái HTTP cụ thể từ một phương thức, bạn cần sử dụng một trong các chú thích sau. Trong đó, chú thích @ResponseStatus là lựa chọn chính xác.

#009
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
@PostMapping and @RequestBodyĐÚNG
B@GetMapping and @PathVariable
C@PostMapping and @RequestParam
D@PostMapping and @ResponseBody
Giải thích

Để xác định một phương thức xử lý yêu cầu POST và chấp nhận cơ thể yêu cầu, bạn cần sử dụng hai annotation đặc biệt trong Spring MVC. Đầu tiên, bạn cần sử dụng @PostMapping để chỉ định phương thức xử lý yêu cầu POST. Thứ hai, bạn cần sử dụng @RequestBody để chỉ định rằng phương thức này sẽ chấp nhận cơ thể yêu cầu được gửi đi. Điều này cho phép bạn truy cập vào dữ liệu được gửi đi trong cơ thể yêu cầu. Ví dụ, nếu bạn muốn tạo một phương thức xử lý yêu cầu POST để tạo một tài khoản mới, bạn có thể sử dụng @PostMapping và @RequestBody như sau: @PostMapping("/taikhoan") public ResponseEntity<TaiKhoan> taoTaiKhoan(@RequestBody TaiKhoan taiKhoan) { // Xử lý tạo tài khoản } Trong ví dụ trên, @PostMapping chỉ định phương thức xử lý yêu cầu POST, và @RequestBody chỉ định rằng phương thức này sẽ chấp nhận cơ thể yêu cầu được gửi đi.

#010
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AAnalytics tools natively support SPAs without setup
BThey simplify tracking because everything is on one page
CSPAs automatically log page views
They require manual tracking for route changesĐÚNG
Giải thích

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.

#011
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ARoute components are automatically lazy-loaded
BReact Router only supports hash-based routing
C<Switch> is still used to group routes
Routes must be wrapped in <Router> or <BrowserRouter>ĐÚNG
Giải thích

React Router v6 là một công cụ giúp quản lý đường dẫn trong ứng dụng React. Nó cho phép bạn tạo ra các đường dẫn động và quản lý trạng thái ứng dụng. Để sử dụng React Router v6, bạn cần phải.wrap các tuyến đường trong <Router> hoặc <BrowserRouter>. Điều này giúp React Router biết được đường dẫn hiện tại và có thể điều hướng ứng dụng đến đúng tuyến đường. Ngoài ra, <Switch> vẫn được sử dụng để nhóm các tuyến đường, giúp ứng dụng có thể xử lý các tuyến đường trùng nhau một cách hiệu quả. Tuy nhiên, React Router v6 không hỗ trợ routing dựa trên hash, vì vậy bạn không thể sử dụng nó để tạo ra các đường dẫn dựa trên hash. Tóm lại, để sử dụng React Router v6, bạn cần phải.wrap các tuyến đường trong <Router> hoặc <BrowserRouter> và sử dụng <Switch> để nhóm các tuyến đường.

#012
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Aaxios.write('url', data)
Baxios.sendPost('url', data)
axios.post('url', data)ĐÚNG
Daxios.get('url', data)
Giải thích

Để gửi dữ liệu POST bằng Axios, bạn cần sử dụng phương thức post(). Phương thức này yêu cầu hai tham số: URL và dữ liệu cần gửi. Dữ liệu có thể là một đối tượng JSON hoặc một chuỗi. Ví dụ, bạn có thể sử dụng phương thức post() như sau: axios.post('url', dữ liệu). Phương thức này sẽ gửi một yêu cầu POST đến URL chỉ định với dữ liệu được gửi kèm theo. Ngoài ra, bạn cũng có thể sử dụng phương thức post() để gửi dữ liệu POST với các tùy chọn khác nhau, chẳng hạn như headers, params, hoặc data.

#013
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Maps the request body to a Java objectĐÚNG
BBinds a query parameter to a method
CInjects beans into controller
DValidates request parameters
Giải thích

Annotation @RequestBody được sử dụng để ánh xạ cơ thể yêu cầu (request body) sang một đối tượng Java. Điều này cho phép bạn nhận dữ liệu từ cơ thể yêu cầu và ánh xạ nó sang một đối tượng Java, sau đó sử dụng đối tượng này trong phương thức của controller. Ví dụ, nếu bạn có một phương thức controller với một đối tượng Java như là tham số, annotation @RequestBody sẽ ánh xạ dữ liệu từ cơ thể yêu cầu sang đối tượng đó. Điều này giúp bạn dễ dàng xử lý dữ liệu từ cơ thể yêu cầu và sử dụng nó trong ứng dụng của mình.

#014
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AString
BObject
CArray
PromiseĐÚNG
Giải thích

Khi thực hiện một yêu cầu bằng Axios, kết quả trả về sẽ là một đối tượng Promise. Đối tượng Promise là một loại đối tượng trong JavaScript được sử dụng để xử lý các tác vụ bất đồng bộ. Nó cho phép bạn thực hiện các tác vụ như gửi yêu cầu HTTP, đọc dữ liệu từ cơ sở dữ liệu, v.v. mà không phải chờ đợi kết quả. Khi tác vụ được thực hiện xong, đối tượng Promise sẽ được giải phóng và trả về kết quả. Trong trường hợp của Axios, đối tượng Promise sẽ được trả về sau khi gửi yêu cầu HTTP thành công. Bạn có thể sử dụng phương thức then() hoặc async/await để lấy kết quả từ đối tượng Promise này.

#015
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
APOST
GETĐÚNG
CDELETE
DPUT
Giải thích

Khi thực hiện yêu cầu fetch, phương thức HTTP mặc định được sử dụng là GET. Phương thức GET được sử dụng để yêu cầu dữ liệu từ một nguồn, thường được sử dụng để tải xuống dữ liệu từ một URL. Trong trường hợp fetch, phương thức GET được sử dụng mặc định vì nó phù hợp với mục đích của yêu cầu fetch, đó là tải xuống dữ liệu từ một nguồn. Tuy nhiên, người dùng có thể thay đổi phương thức HTTP được sử dụng bằng cách chỉ định phương thức cụ thể trong phương thức fetch.

#016
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
They offer faster transitions between pages after the first loadĐÚNG
BThey require no JavaScript
CThey offer faster initial page loads
DThey reduce server-side processing for all requests
Giải thích

Ở 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.

#017
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AAn XMLHttpRequest object
A PromiseĐÚNG
CA callback function
DA JSON object
Giải thích

Hàm fetch() trong JavaScript trả về một đối tượng Promise. Đối tượng Promise này sẽ được thực hiện khi hàm fetch() được gọi và sẽ trả về một đối tượng Response. Đối tượng Response này chứa dữ liệu được yêu cầu từ server. Đối tượng Promise này cho phép chúng ta sử dụng các phương thức như then(), catch() để xử lý dữ liệu trả về từ server.

#018
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
They enable seamless navigation without full reloadsĐÚNG
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
Giải thích

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.

#019
ĐỘ CHÍNH XÁC
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.

#020
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AUsing .error()
Using .catch()ĐÚNG
CUsing .handle()
DUsing .fail()
Giải thích

Để xử lý lỗi trong một yêu cầu Axios, bạn có thể sử dụng phương thức .catch(). Phương thức này được sử dụng để bắt các lỗi xảy ra trong quá trình thực hiện yêu cầu. Khi sử dụng .catch(), bạn có thể viết mã để xử lý lỗi và đảm bảo rằng ứng dụng của mình vẫn hoạt động bình thường ngay cả khi có lỗi xảy ra. Ví dụ, bạn có thể sử dụng .catch() để hiển thị thông báo lỗi cho người dùng hoặc để thực hiện hành động khác khi có lỗi xảy ra. Ngoài ra, bạn cũng có thể sử dụng phương thức .then() để thực hiện hành động khi yêu cầu được thực hiện thành công.

#021
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
It renders the matched child route elementĐÚNG
BIt fetches external data
CIt acts as a fallback route
DIt redirects to the home page
Giải thích

Trong React Router, <Outlet /> là một thành phần quan trọng trong việc quản lý các đường dẫn con (nested routes). Mục đích chính của <Outlet /> là render (hiển thị) phần tử con phù hợp với đường dẫn hiện tại. Khi bạn sử dụng <Outlet />, nó sẽ tìm kiếm và hiển thị phần tử con phù hợp với đường dẫn hiện tại, giúp bạn có thể tổ chức các đường dẫn một cách linh hoạt và dễ dàng quản lý.

#022
ĐỘ CHÍNH XÁC
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 đó.

#023
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A@RequestMapping(produces = "application/xml")
B@GetMapping(consumes = "application/json")
C@PostMapping(produces = "application/json")
@PostMapping(consumes = "application/xml")ĐÚNG
Giải thích

Để tạo một điểm cuối REST chỉ chấp nhận dữ liệu XML, bạn cần sử dụng annotation @PostMapping với thuộc tính consumes được đặt thành "application/xml". Điều này cho phép Spring MVC chỉ chấp nhận yêu cầu HTTP POST có nội dung dạng XML. Ví dụ, nếu bạn muốn tạo một điểm cuối REST để tạo mới một tài nguyên, bạn có thể sử dụng annotation @PostMapping với consumes được đặt thành "application/xml" như sau: @PostMapping(consumes = "application/xml") public ResponseEntity<Resource> createResource(@RequestBody Resource resource) { ... } Trong ví dụ trên, điểm cuối REST sẽ chỉ chấp nhận yêu cầu HTTP POST có nội dung dạng XML, và sẽ sử dụng phương thức createResource để xử lý yêu cầu đó.

#024
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A@JsonRequest
@PostMapping with @RequestBody and @ResponseBodyĐÚNG
C@Consumes and @Produces
D@RequestBody
Giải thích

Để định nghĩa một phương thức xử lý cả hai định dạng yêu cầu và phản hồi JSON, chúng ta cần sử dụng các annotation @PostMapping, @RequestBody và @ResponseBody. @PostMapping được sử dụng để chỉ định phương thức HTTP được sử dụng để gửi yêu cầu đến server. @RequestBody được sử dụng để ánh xạ dữ liệu từ yêu cầu HTTP sang một đối tượng Java. @ResponseBody được sử dụng để ánh xạ một đối tượng Java sang dữ liệu HTTP. Ví dụ, nếu chúng ta muốn tạo một phương thức xử lý yêu cầu và phản hồi JSON, chúng ta có thể sử dụng các annotation như sau: @PostMapping(value = "/example", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<String> example(@RequestBody String request) { // Xử lý yêu cầu và trả về phản hồi return ResponseEntity.ok("Phản hồi từ server"); } Bằng cách sử dụng các annotation này, chúng ta có thể định nghĩa một phương thức xử lý cả hai định dạng yêu cầu và phản hồi JSON.

#025
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt forces methods to return HTML views
It applies @ResponseBody to all methods by defaultĐÚNG
CIt disables automatic serialization
DIt disables exception handling
Giải thích

Khi sử dụng @RestController thay vì @Controller, bạn sẽ thấy một số thay đổi quan trọng. @RestController là một annotation đặc biệt trong Spring MVC, được thiết kế để tạo ra các RESTful API. Nó có tác dụng tự động áp dụng @ResponseBody cho tất cả các phương thức trong lớp, điều này có nghĩa là bất kỳ phương thức nào cũng sẽ trả về dữ liệu JSON hoặc XML theo mặc định. Điều này giúp giảm thiểu sự phức tạp khi tạo ra các API RESTful, vì bạn không cần phải thêm @ResponseBody vào từng phương thức. Ngoài ra, @RestController cũng tự động áp dụng các quy tắc về dữ liệu trả về, giúp đảm bảo rằng dữ liệu được trả về đúng định dạng và cấu trúc.

#026
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AData flows only from server to client
BData is shared globally across all components
Data flows from parent to child via propsĐÚNG
DData flows only from child to parent
Giải thích

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.

#027
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
axios.defaults.baseURL = 'https://api.example.com'ĐÚNG
Baxios.configure.baseURL = 'https://api.example.com'
Caxios.setBaseURL('https://api.example.com')
Daxios.baseURL('https://api.example.com')
Giải thích

Để đặt một URL cơ bản mặc định trong Axios, bạn có thể sử dụng thuộc tính `baseURL` của đối tượng `defaults`. Điều này cho phép bạn thiết lập một URL cơ bản mà tất cả các yêu cầu sẽ sử dụng. Ví dụ, nếu bạn muốn đặt URL cơ bản mặc định là `https://api.example.com`, bạn có thể thực hiện như sau: `axios.defaults.baseURL = 'https://api.example.com'`. Điều này sẽ áp dụng cho tất cả các yêu cầu được thực hiện sau đó. Ngoài ra, bạn cũng có thể sử dụng phương thức `defaults` để đặt URL cơ bản mặc định, nhưng cách này không được khuyến khích.

#028
ĐỘ CHÍNH XÁC
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.

#029
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AModifies props
Runs side effects like fetching dataĐÚNG
CStores component state
DRenders the component conditionally
Giải thích

Hàm useEffect trong React được sử dụng để chạy các tác dụng phụ như fetching dữ liệu, cập nhật trạng thái ứng dụng, hoặc thực hiện các hành động khác ngoài vòng đời của một thành phần. Nó cho phép bạn thực hiện các hành động này sau khi render thành phần một lần. Ví dụ, bạn có thể sử dụng useEffect để fetch dữ liệu từ API và cập nhật trạng thái ứng dụng khi dữ liệu được nhận về. Ngoài ra, bạn cũng có thể sử dụng nó để hủy các tác dụng phụ khi thành phần bị loại bỏ khỏi DOM.

#030
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA programming language
BA template engine
A syntax extension for JavaScriptĐÚNG
DA CSS preprocessor
Giải thích

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.

#031
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AuseClass
BuseEffect
useStateĐÚNG
DuseReducer
Giải thích

Trong React, khi chúng ta muốn quản lý trạng thái trong một thành phần chức năng (functional component), chúng ta cần sử dụng một hook đặc biệt. Hook là một hàm có thể được sử dụng trong các thành phần chức năng để truy cập các tính năng của React. Trong trường hợp này, chúng ta cần sử dụng hook "useState" để quản lý trạng thái. Hook "useState" cho phép chúng ta tạo một biến trạng thái và các hàm để cập nhật nó. Điều này giúp chúng ta có thể quản lý trạng thái của ứng dụng một cách dễ dàng và hiệu quả.

#032
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AStore state in the child component
Pass callback from parent to childĐÚNG
CUse Redux
DStore state in a global object
Giải thích

Khi nâng cấp trạng thái lên trong React, chúng ta cần lưu ý cách thức đúng đắn. Trước hết, chúng ta không nên lưu trạng thái trong thành phần con (Store state in the child component), vì điều này sẽ dẫn đến sự phức tạp và khó khăn trong việc quản lý trạng thái. Thay vào đó, chúng ta có thể sử dụng callback từ cha sang con (Pass callback from parent to child), nơi mà cha sẽ truyền một hàm callback xuống con, và con sẽ thực hiện hành động cần thiết khi nhận được callback. Ngoài ra, chúng ta cũng có thể sử dụng Redux, một thư viện quản lý trạng thái phổ biến trong React. Tuy nhiên, lưu trữ trạng thái trong một đối tượng toàn cầu (Store state in a global object) không phải là một lựa chọn tốt, vì nó có thể dẫn đến sự phức tạp và khó khăn trong việc quản lý trạng thái.

#033
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AcomponentWillMount
componentDidMountĐÚNG
CshouldComponentUpdate
DgetDerivedStateFromProps
Giải thích

Trong React, lifecycle method là các phương thức được gọi tại các giai đoạn khác nhau trong quá trình hoạt động của một thành phần. Trong các thành phần chức năng (functional components), useEffect được sử dụng để thay thế một số lifecycle method. Trong số các lựa chọn trên, phương thức được thay thế bởi useEffect là componentDidMount. Phương thức này được gọi sau khi thành phần đã được render và các thành phần con đã được render xong. Nó thường được sử dụng để thực hiện các hành động như tải dữ liệu từ server, đăng ký các sự kiện, v.v. Trong các thành phần chức năng, useEffect được sử dụng để thực hiện các hành động tương tự, nhưng với cách tiếp cận khác.

#034
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AReact DOM
React RouterĐÚNG
CReact Navigation
DReact Redux
Giải thích

Để xử lý việc chuyển hướng (routing) trong các ứng dụng React, người dùng có thể sử dụng một số thư viện khác nhau. Tuy nhiên, trong số các lựa chọn trên, chỉ có một thư viện được sử dụng phổ biến và rộng rãi để xử lý routing. Đó là React Router. Thư viện này cung cấp các tính năng như định nghĩa đường dẫn, chuyển hướng giữa các trang, và quản lý trạng thái của ứng dụng. Nó cho phép người dùng tạo ra các ứng dụng có giao diện người dùng phức tạp và dễ dàng quản lý.

#035
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ADirectly assign new value to state
Use setState or useState setterĐÚNG
CCall render() method
DUse forceUpdate() method
Giải thích

Để cập nhật trạng thái trong React, chúng ta cần sử dụng phương thức setState hoặc useState setter. Phương thức này giúp cập nhật trạng thái một cách an toàn và hiệu quả. Khi sử dụng setState hoặc useState setter, chúng ta có thể cập nhật trạng thái một cách dễ dàng và đảm bảo rằng trạng thái được cập nhật một cách đồng bộ. Phương thức này cũng giúp ngăn chặn việc cập nhật trạng thái không mong muốn, giúp ứng dụng của chúng ta trở nên ổn định và hiệu quả hơn. Ngoài ra, sử dụng setState hoặc useState setter cũng giúp chúng ta có thể theo dõi và quản lý trạng thái một cách dễ dàng hơn.

#036
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AComponent that stores data in global variables
BComponent that doesn't use state
Component whose input value is controlled by React stateĐÚNG
DComponent with internal timer
Giải thích

Trong React, một thành phần được kiểm soát (controlled component) là một thành phần có giá trị đầu vào được kiểm soát bởi trạng thái của ứng dụng. Điều này có nghĩa là giá trị của thành phần sẽ được cập nhật tự động khi trạng thái của ứng dụng thay đổi. Ví dụ, khi bạn nhập giá trị vào một trường văn bản trong một thành phần được kiểm soát, giá trị đó sẽ được lưu trữ trong trạng thái của ứng dụng và sẽ được cập nhật tự động khi bạn thay đổi giá trị đó. Điều này giúp đảm bảo rằng giá trị của thành phần luôn được đồng bộ với trạng thái của ứng dụng.

#037
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AKeys must be random numbers
Keys help React identify which items changedĐÚNG
CKeys are required only for the first element
DKeys are the same as props
Giải thích

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.

#038
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Wrap multiple elements without adding extra DOM nodesĐÚNG
BReplace div tags in HTML
CCreate new component instances
DImprove routing
Giải thích

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.

#039
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AuseState
useClassĐÚNG
CuseMemo
DuseEffect
Giải thích

Trong React, có một số hook được sử dụng để quản lý trạng thái và hiệu ứng trong ứng dụng. Các hook phổ biến bao gồm useState, useMemo, useEffect. Tuy nhiên, có một số hook không hợp lệ. Trong câu hỏi này, chúng ta cần xác định hook không hợp lệ. 'useState' và 'useMemo' là hai hook hợp lệ, được sử dụng để quản lý trạng thái và hiệu ứng trong ứng dụng. 'useEffect' cũng là một hook hợp lệ, được sử dụng để thực hiện hành động sau khi render. 'useClass' là một hook không hợp lệ, vì nó không tồn tại trong React. Vì vậy, câu trả lời đúng cho câu hỏi này là 'useClass'.

#040
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt can only store numbers
It returns the state value and a function to update itĐÚNG
CIt is used only in class components
DIt creates side effects
Giải thích

useState là một hàm trong React được sử dụng để quản lý trạng thái của một thành phần. Nó được sử dụng trong cả class và function components. Khi sử dụng useState, nó sẽ trả về một mảng có hai phần: giá trị hiện tại của trạng thái và một hàm để cập nhật trạng thái. Hàm này sẽ được sử dụng để thay đổi giá trị của trạng thái. Ví dụ, nếu bạn muốn tạo một button có thể tăng hoặc giảm giá trị, bạn sẽ sử dụng useState để quản lý giá trị này và hàm để cập nhật giá trị này khi button được click. Điều này giúp bạn có thể quản lý trạng thái của thành phần một cách dễ dàng và hiệu quả.

#041
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AUsing if-else outside JSX
Using ternary operator or && in JSXĐÚNG
CUsing switch-case only
DReact does not support conditional rendering
Giải thích

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.

#042
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA browser feature
BAn actual copy of the DOM
A lightweight copy of the real DOM used for performanceĐÚNG
DA styling framework
Giải thích

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ế.

#043
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AUsing props
Using callbacks passed from parentĐÚNG
CUsing context
DDirect variable reference
Giải thích

Trong React, phương pháp được sử dụng để truyền dữ liệu từ con sang cha là sử dụng props. Props là một tính chất độc lập của React, cho phép các thành phần con nhận dữ liệu từ thành phần cha mà không cần phải thay đổi trạng thái của thành phần cha. Tuy nhiên, trong một số trường hợp, chúng ta cần truyền dữ liệu từ con sang cha, và phương pháp này được gọi là sử dụng callbacks. Callbacks là các hàm được gọi khi một sự kiện xảy ra, và chúng ta có thể sử dụng chúng để truyền dữ liệu từ con sang cha. Ví dụ, khi một thành phần con được cập nhật, chúng ta có thể gọi một hàm callback được truyền từ thành phần cha để cập nhật dữ liệu của thành phần cha.

#044
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AuseEffect
BuseState
useMemoĐÚNG
DuseReducer
Giải thích

Khi thực hiện các tác vụ phức tạp trong ứng dụng React, chúng ta thường muốn tối ưu hóa hiệu suất bằng cách tránh thực hiện chúng không cần thiết. Để đạt được điều này, chúng ta có thể sử dụng hook `useMemo` để lưu trữ giá trị của một hàm tính toán và chỉ thực hiện lại khi dữ liệu đầu vào thay đổi. Điều này giúp giảm thiểu số lần thực hiện tác vụ và cải thiện hiệu suất của ứng dụng. Ví dụ, nếu chúng ta có một hàm tính toán phức tạp để tạo ra một mảng dữ liệu, chúng ta có thể sử dụng `useMemo` để lưu trữ kết quả của hàm này và chỉ thực hiện lại khi dữ liệu đầu vào thay đổi.

#045
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AGroups multiple routes
BSwitches between states
Renders the first matching routeĐÚNG
DUsed to toggle views
Giải thích

Trong React Router, thành phần <Switch> đóng vai trò quan trọng trong việc định tuyến. Nó được sử dụng để nhóm nhiều tuyến đường lại với nhau và chỉ render tuyến đường đầu tiên mà nó gặp phải. Điều này có nghĩa là khi bạn sử dụng <Switch>, React Router sẽ chỉ render tuyến đường đầu tiên mà nó tìm thấy mà không cần phải render các tuyến đường khác. Điều này giúp tăng hiệu suất và giảm thiểu việc render không cần thiết. Ngoài ra, <Switch> cũng giúp bạn dễ dàng quản lý và tổ chức các tuyến đường trong ứng dụng của mình.

#046
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AMoving state from parent to child
BMoving state to global context
Moving state to the nearest common ancestorĐÚNG
DMoving state to Redux store
Giải thích

Lifting state up là một kỹ thuật trong React giúp chia sẻ trạng thái giữa các thành phần con và cha. Khi nói đến việc nâng trạng thái lên, chúng ta đang nói về việc di chuyển trạng thái từ một thành phần con sang thành phần cha gần nhất. Điều này giúp giảm thiểu việc sử dụng props và tạo ra một cấu trúc dữ liệu được chia sẻ giữa các thành phần. Ví dụ, nếu bạn có một danh sách các thành phần con và mỗi thành phần con cần truy cập vào một trạng thái chung, thì việc nâng trạng thái lên sẽ giúp bạn chia sẻ trạng thái đó giữa các thành phần con mà không cần phải sử dụng props.

#047
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATheir state is managed by the DOM
Their state is managed by ReactĐÚNG
CThey use refs to access values
DThey can't be used in forms
Giải thích

Các thành phần được kiểm soát (controlled components) trong React là các thành phần có trạng thái được quản lý bởi React. Điều này có nghĩa là React sẽ quản lý và cập nhật trạng thái của thành phần đó thay vì DOM. Điều này giúp đảm bảo rằng trạng thái của thành phần luôn được đồng bộ và cập nhật chính xác. Trong các thành phần được kiểm soát, React sẽ quản lý giá trị của các trường nhập liệu (input) và đảm bảo rằng giá trị đó luôn được cập nhật chính xác. Điều này giúp ngăn chặn các vấn đề liên quan đến trạng thái không đồng bộ và đảm bảo rằng ứng dụng luôn hoạt động ổn định.

#048
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A@ApiBody
B@RequestContent
@RequestBody (from swagger package)ĐÚNG
D@RequestDoc
Giải thích

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

#049
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ATo map embedded documents
BTo index a document
To define a relationship between documents via referenceĐÚNG
DTo ignore the field during persistence
Giải thích

Trong Spring Data MongoDB, @DBRef là một annotation được sử dụng để định nghĩa mối quan hệ giữa các tài liệu MongoDB thông qua tham chiếu. Khi sử dụng @DBRef, bạn có thể định nghĩa một tài liệu tham chiếu đến một tài liệu khác trong cùng một cơ sở dữ liệu. Điều này cho phép bạn thực hiện các truy vấn phức tạp và quản lý mối quan hệ giữa các tài liệu một cách hiệu quả. Ví dụ, nếu bạn có một tài liệu người dùng và một tài liệu thông tin liên hệ, bạn có thể sử dụng @DBRef để định nghĩa mối quan hệ giữa hai tài liệu này. Điều này giúp bạn có thể truy vấn thông tin liên hệ của một người dùng một cách dễ dàng.

#050
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy using SQL mirroring
BBy using cron jobs for backup
Through replica sets with automatic failoverĐÚNG
DBy distributing indexes across servers
Giải thích

MongoDB đảm bảo tính sẵn sàng cao bằng cách sử dụng các tập bản sao (replica sets) với khả năng tự động chuyển đổi (automatic failover). Tập bản sao là một nhóm các máy chủ MongoDB hoạt động cùng nhau để lưu trữ dữ liệu và đảm bảo tính sẵn sàng cao. Khi một máy chủ trong tập bản sao gặp sự cố, các máy chủ khác trong tập bản sao sẽ tự động chuyển đổi sang trạng thái hoạt động, đảm bảo dữ liệu vẫn được truy cập và cập nhật một cách liên tục. Điều này giúp ngăn chặn sự cố mất dữ liệu và đảm bảo tính sẵn sàng cao của hệ thống.

#051
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Aspring-boot-mongodb
spring-boot-starter-data-mongodbĐÚNG
Cspring-boot-starter-data-jpa
Dspring-boot-starter-mongo
Giải thích

Để thêm hỗ trợ MongoDB vào ứng dụng Spring Boot, bạn cần thêm starter dependency có tên là spring-boot-starter-data-mongodb vào file pom.xml hoặc build.gradle của dự án. Starter này bao gồm các thư viện cần thiết để kết nối với MongoDB và thực hiện các hoạt động CRUD (Create, Read, Update, Delete) trên dữ liệu. Ngoài ra, nó cũng cung cấp các tính năng như hỗ trợ các loại dữ liệu khác nhau, kiểm tra dữ liệu, và các công cụ khác để giúp bạn quản lý dữ liệu hiệu quả hơn. Khi thêm starter này vào dự án, bạn có thể sử dụng các lớp như MongoTemplate để thực hiện các hoạt động CRUD và các phương thức khác để tương tác với MongoDB.

#052
ĐỘ CHÍNH XÁC
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".

#053
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Remove the current session and all its attributesĐÚNG
BRestart the session with the same session ID
CEncrypt the session data
DExtend session timeout
Giải thích

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.

#054
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AUsing @Group
Using @Tag(name = 'GroupName')ĐÚNG
CUsing @SwaggerGroup
DUsing application.yaml grouping
Giải thích

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

#055
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AServer responds with 200 OK and empty body
Server responds with 401 Unauthorized and WWW-Authenticate headerĐÚNG
CServer closes the connection immediately
DServer automatically redirects to login page
Giải thích

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.

#056
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AStarts the application with no web environment
BFails the test if no port is provided manually
CDisables the web server
Starts the embedded server on a random portĐÚNG
Giải thích

Khi sử dụng @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT), Spring Boot sẽ khởi động ứng dụng trong môi trường web ngẫu nhiên. Điều này có nghĩa là ứng dụng sẽ được chạy trên một cổng ngẫu nhiên, thay vì sử dụng cổng mặc định. Mục đích chính của việc này là để tránh xung đột cổng khi chạy nhiều ứng dụng cùng lúc. Ngoài ra, việc sử dụng môi trường web ngẫu nhiên cũng giúp tăng tính bảo mật cho ứng dụng, vì nó làm cho việc đoán cổng của ứng dụng trở nên khó khăn hơn. Khi ứng dụng được khởi động trong môi trường web ngẫu nhiên, Spring Boot sẽ tự động tạo một cổng ngẫu nhiên và cấu hình ứng dụng để sử dụng cổng đó. Điều này giúp đảm bảo rằng ứng dụng có thể được truy cập từ xa mà không cần phải biết cổng cụ thể của ứng dụng.

#057
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
springdoc-openapi-uiĐÚNG
Bspring-boot-devtools
Cspringfox-swagger2
Dspring-boot-starter-jdbc
Giải thích

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.

#058
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Adb.collection.create()
db.collection.insertOne()ĐÚNG
Cdb.collection.insertDocument()
Ddb.collection.add()
Giải thích

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

#059
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AUse @MockBean
BUse webEnvironment = WebEnvironment.NONE
CUse @WebMvcTest
Use webEnvironment = WebEnvironment.RANDOM_PORTĐÚNG
Giải thích

Để có thể sử dụng TestRestTemplate trong một @SpringBootTest, bạn cần sử dụng webEnvironment = WebEnvironment.RANDOM_PORT. Điều này cho phép Spring Boot tạo một server tạm thời để phục vụ cho việc kiểm thử. Khi sử dụng RANDOM_PORT, bạn có thể sử dụng TestRestTemplate để gửi yêu cầu đến server tạm thời này. Nếu bạn sử dụng NONE, thì TestRestTemplate sẽ không thể gửi yêu cầu đến server vì server không được tạo. Sử dụng @MockBean hoặc @WebMvcTest sẽ không giúp bạn tạo được server tạm thời để TestRestTemplate có thể gửi yêu cầu.

#060
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AMapping of SQL queries to documents
BAutomatic index creation
A low-level interface to MongoDB operationsĐÚNG
DAutomatic data validation
Giải thích

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, "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.

#061
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
CriteriaĐÚNG
BQueryDSL
CMongoQuery
DCriteriaBuilder
Giải thích

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

#062
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A@Collection
B@MongoEntity
@DocumentĐÚNG
D@Entity
Giải thích

Để đị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.

#063
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AJpaRepository
MongoRepositoryĐÚNG
CRepository
DCrudRepository
Giải thích

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

#064
ĐỘ CHÍNH XÁC
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.

#065
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
By including WWW-Authenticate: Basic realm='RealmName' in a 401 responseĐÚNG
BBy sending a Set-Cookie header with a token
CBy returning 403 with Login-Required: true
DBy using JavaScript redirect
Giải thích

Để một máy chủ yêu cầu trình duyệt hiển thị hộp thoại đăng nhập cho Basic Auth, máy chủ cần gửi một phản hồi 401 (Không được phép) với tiêu đề HTTP WWW-Authenticate. Tiêu đề này chứa thông tin về tên miền (realm) mà máy chủ đang yêu cầu. Ví dụ, máy chủ có thể gửi phản hồi 401 với tiêu đề WWW-Authenticate: Basic realm='RealmName'. Điều này sẽ yêu cầu trình duyệt hiển thị hộp thoại đăng nhập cho người dùng, nơi họ có thể nhập tên người dùng và mật khẩu. Sau khi người dùng nhập thông tin đăng nhập, trình duyệt sẽ gửi lại yêu cầu đến máy chủ với tiêu đề Authorization chứa thông tin đăng nhập. Máy chủ sẽ kiểm tra thông tin đăng nhập và trả lại phản hồi 200 nếu thông tin đúng, hoặc tiếp tục trả lại phản hồi 401 nếu thông tin sai.

#066
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AAuthorization: Bearer (token)
Authorization: Basic (base64(username:password))ĐÚNG
CAuthorization: Token username:password
DAuth: Basic (JWT)
Giải thích

Trong Basic Authentication, định dạng của tiêu đề Authorization sẽ trông như thế nào? Đây là một dạng xác thực cơ bản sử dụng tiêu đề Authorization để xác thực người dùng. Khi sử dụng Basic Authentication, người dùng sẽ gửi tiêu đề Authorization với nội dung là 'Basic' kèm theo mã hóa base64 của chuỗi 'username:password'. Ví dụ, nếu username là 'user' và password là 'pass', thì tiêu đề Authorization sẽ được gửi dưới dạng 'Authorization: Basic dXNlcjpwYXNzd29yZA=='. Mã hóa base64 được sử dụng để bảo mật thông tin người dùng.

#067
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AAn index with a TTL (Time To Live)
BA temporary index created at runtime
CAn index on an embedded document only
An index on multiple fields in a documentĐÚNG
Giải thích

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.

#068
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Aspring.data.mongo.name
Bspring.mongodb.dbname
spring.data.mongodb.databaseĐÚNG
Dspring.mongo.database
Giải thích

Để đặ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?

#069
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ADisable the controller
BUse @IgnoreMapping
Add @Hidden annotationĐÚNG
DRename the method
Giải thích

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

#070
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AmongoTemplate.create(object)
BmongoTemplate.insert(object)
mongoTemplate.save(object)ĐÚNG
DmongoTemplate.add(object)
Giải thích

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.

#071
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AwebEnvironment = NONE
BwebEnvironment = MOCK
CuseMockMvc = true
webEnvironment = DEFINED_PORTĐÚNG
Giải thích

Để kiểm tra các điểm cuối của controller sử dụng các cuộc gọi HTTP thực tế, bạn cần cấu hình @SpringBootTest để sử dụng môi trường web thực tế. Trong đó, bạn cần thiết lập thuộc tính webEnvironment thành DEFINED_PORT. Điều này cho phép Spring Boot tạo một ứng dụng web thực tế với một cổng cụ thể, và bạn có thể sử dụng các công cụ như Postman hoặc cURL để gửi các yêu cầu HTTP đến ứng dụng này. Điều này giúp bạn kiểm tra các điểm cuối của controller một cách chính xác và hiệu quả hơn.

#072
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Adb.collection.setIndex()
Bdb.collection.index()
db.collection.createIndex()ĐÚNG
Ddb.collection.makeIndex()
Giải thích

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

#073
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A$merge
B$match
C$unwind
$lookupĐÚNG
Giải thích

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.

#074
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AMongoDB supports relational schema only
Collections in MongoDB can have documents with different fieldsĐÚNG
CMongoDB requires a fixed schema
DAll fields in documents must be predefined
Giải thích

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

#075
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AAuthorization
CookieĐÚNG
CX-Session-Token
DSet-Header
Giải thích

HTTP header được sử dụng phổ biến để truyền tải ID phiên là Cookie. Cookie là một phần của HTTP header được sử dụng để lưu trữ thông tin về phiên làm việc của người dùng. Khi người dùng đăng nhập vào một trang web, trang web sẽ tạo một ID phiên và lưu trữ nó trong Cookie. Mỗi lần người dùng gửi yêu cầu đến trang web, Cookie sẽ được gửi kèm theo yêu cầu và trang web sẽ sử dụng ID phiên để xác thực người dùng. Điều này giúp trang web có thể lưu trữ thông tin về người dùng và cung cấp trải nghiệm cá nhân hóa. Ngoài ra, Cookie cũng được sử dụng để lưu trữ thông tin về các lựa chọn của người dùng, chẳng hạn như ngôn ngữ hoặc kích thước font.

#076
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A$select
BReturnFields
ProjectionĐÚNG
DSubset
Giải thích

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

#077
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ACompound index
Unique indexĐÚNG
CHashed index
DText index
Giải thích

Để đả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.

#078
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AIt does not require session on server
BIt is stateless
CIt can be used with REST APIs
It is considered more secure than OAuth2ĐÚNG
Giải thích

Basic Authentication là một phương thức xác thực cơ bản trong đó người dùng gửi thông tin đăng nhập (tên người dùng và mật khẩu) qua mỗi yêu cầu HTTP. Phương thức này không yêu cầu lưu trữ phiên trên máy chủ, vì vậy nó được coi là một phương thức stateless. Điều này có nghĩa là máy chủ không cần lưu trữ thông tin về phiên hiện tại của người dùng, giúp giảm thiểu khả năng bị tấn công từ chối dịch vụ (DDoS). Ngoài ra, Basic Authentication có thể được sử dụng với các API REST, vì nó cung cấp một cách đơn giản để xác thực người dùng. Tuy nhiên, phương thức này không được coi là an toàn hơn OAuth2. Trên thực tế, Basic Authentication gửi thông tin đăng nhập qua mỗi yêu cầu HTTP, điều này có thể dễ bị bắt trộm và sử dụng bởi kẻ tấn công. Do đó, OAuth2 được coi là một phương thức an toàn hơn vì nó yêu cầu người dùng xác thực thông qua một ứng dụng trung gian và không gửi thông tin đăng nhập qua mỗi yêu cầu.

#079
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A@Configuration
B@DataJpaTest
@WebMvcTestĐÚNG
D@EnableAutoConfiguration
Giải thích

Để kiểm tra chỉ lớp web, bạn có thể sử dụng annotation @WebMvcTest thay thế cho @SpringBootTest. Annotation này cho phép bạn kiểm tra lớp web mà không cần phải khởi tạo toàn bộ ứng dụng. @WebMvcTest sẽ tự động tạo một ứng dụng web nhỏ để kiểm tra lớp web của bạn. Điều này giúp bạn kiểm tra các lớp controller, service và repository mà không cần phải khởi tạo toàn bộ ứng dụng.

#080
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A flexible way to set body, status, and headersĐÚNG
BOnly status codes
CA way to redirect to views
DOnly body
Giải thích

Trong REST controller, ResponseEntity cung cấp một cách linh hoạt để thiết lập cơ thể, trạng thái và tiêu đề của phản hồi. Điều này cho phép bạn có nhiều quyền kiểm soát hơn đối với phản hồi của ứng dụng, bao gồm cả việc thiết lập trạng thái HTTP cụ thể, thêm tiêu đề tùy chỉnh và thiết lập cơ thể phản hồi theo cách mong muốn. Điều này đặc biệt hữu ích khi bạn cần trả về một phản hồi phức tạp hoặc cần thiết lập trạng thái HTTP cụ thể để thông báo cho khách hàng về kết quả của yêu cầu.

#081
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AThey automatically convert to mobile apps
They provide dynamic and fast content updatesĐÚNG
CThey completely avoid CSS
DThey can only be accessed on mobile devices
Giải thích

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.

#082
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
axios.get('https://api.example.com/data')ĐÚNG
Baxios.send('GET', 'https://api.example.com/data')
Caxios.fetch('https://api.example.com/data')
Dfetch.axios('https://api.example.com/data')
Giải thích

Để thực hiện một yêu cầu GET sử dụng Axios, bạn cần sử dụng phương thức get() của Axios. Phương thức này chấp nhận một tham số là URL của API mà bạn muốn yêu cầu. Ví dụ, để yêu cầu dữ liệu từ API 'https://api.example.com/data', bạn có thể sử dụng mã sau: axios.get('https://api.example.com/data'). Phương thức này sẽ gửi một yêu cầu GET đến API và trả về dữ liệu trong dạng JSON. Ngoài ra, bạn cũng có thể sử dụng các tham số khác như headers, params để tùy chỉnh yêu cầu của mình. Ví dụ, để thêm một header 'Authorization' với giá trị 'Bearer token', bạn có thể sử dụng mã sau: axios.get('https://api.example.com/data', { headers: { 'Authorization': 'Bearer token' } }).

#083
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ABy disabling server-side APIs
BBy caching everything on the server
By offloading routing and rendering to the clientĐÚNG
DBy avoiding use of databases
Giải thích

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.

#084
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
A@HeaderParam
@RequestHeaderĐÚNG
C@RequestBody
D@RequestParam
Giải thích

Để gắn giá trị của một tiêu đề tùy chỉnh từ một yêu cầu đến một tham số phương thức, bạn có thể sử dụng annotation @RequestHeader. Annotation này cho phép bạn gắn giá trị của một tiêu đề tùy chỉnh từ yêu cầu HTTP đến một tham số phương thức của phương thức hiện tại. Ví dụ, nếu bạn muốn gắn giá trị của tiêu đề 'Authorization' đến một tham số phương thức 'token', bạn có thể sử dụng @RequestHeader('Authorization') ở trên tham số phương thức 'token'.