Câu hỏi: HSF302 Làm việc với Spring Framework – Bộ ôn tập cuối kỳ số 1
50 câu trắc nghiệm kèm lời giải của môn HSF302 - Làm việc với Spring Framework, xếp đúng thứ tự trong đề. Trang 2/3 — câu 21–40.
Danh sách câu hỏi
40/50 câuCòn 10
A
VBoxB
FlowPaneC
BorderPaneD
HBoxLời giải
Mở trang câu hỏi này →Đáp án đúng: "HBox". Trong JavaFX, HBox (horizontal box) là layout pane xếp các node con thành một hàng ngang theo thứ tự thêm vào, có thể chỉnh khoảng cách bằng spacing và căn lề bằng alignment, padding. "VBox" là bản dọc tương ứng, xếp các node con thành một cột từ trên xuống dưới. "FlowPane" cũng xếp theo hàng ngang ở chế độ mặc định nhưng tự xuống dòng khi hết chiều rộng, tức bố cục chảy nhiều hàng chứ không giữ một hàng duy nhất, nên không phải layout chuyên cho một hàng ngang. "BorderPane" chia vùng thành năm khu top, bottom, left, right và center, dùng để dựng khung cửa sổ như thanh menu ở trên và nội dung ở giữa, chứ không xếp các con thành hàng.
22What is the purpose of Thymeleaf Layout Dialect?4 lựa chọn
AEnhancing security for the web application.
BProviding a way to create reusable template layouts.
CManaging database connections.
DOptimizing JavaScript performance.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Providing a way to create reusable template layouts.". Thymeleaf Layout Dialect là phần mở rộng thêm các thuộc tính như layout:decorate và layout:fragment: ta viết một trang khung (layout) chứa phần đầu, menu, chân trang dùng chung, rồi mỗi trang nội dung khai báo trang khung nào sẽ bao lấy nó và chỉ điền vào các vùng fragment riêng, nhờ vậy bố cục được tái sử dụng thay vì chép lặp ở mọi trang. "Enhancing security for the web application." sai vì bảo mật thuộc Spring Security, còn phần tích hợp Thymeleaf với bảo mật là một dialect khác (thymeleaf-extras-springsecurity). "Managing database connections." sai vì Thymeleaf chỉ là template engine (bộ máy dựng khuôn mẫu) ở tầng view, không chạm tới cơ sở dữ liệu. "Optimizing JavaScript performance." sai vì dialect này xử lý HTML phía máy chủ, không can thiệp vào hiệu năng mã JavaScript chạy trên trình duyệt.
ADatabase drivers.
BHTML attributes and elements.
CSecurity protocols.
DNetwork configurations.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "HTML attributes and elements.". Standard Dialect (phương ngữ chuẩn) của Thymeleaf là bộ processor định nghĩa các thuộc tính như th:text, th:each, th:if, th:href và phần tử như th:block, cùng cú pháp biểu thức chuẩn ${...}, *{...}, #{...}, @{...}; nhờ chúng mà tệp HTML vẫn mở được bằng trình duyệt như một bản mẫu tĩnh nhưng khi Thymeleaf xử lý thì được thay bằng dữ liệu thật. "Database drivers." là trình điều khiển JDBC để kết nối cơ sở dữ liệu, thuộc tầng truy cập dữ liệu chứ không thuộc engine template. "Security protocols." như TLS hay OAuth do tầng bảo mật như Spring Security đảm nhận, Thymeleaf chỉ có dialect bổ sung riêng để đọc thông tin bảo mật. "Network configurations." không liên quan, Thymeleaf chỉ sinh nội dung giao diện.
24Thymeleaf is primarily used for:4 lựa chọn
AHandling database transactions.
BGenerating dynamic HTML content.
CManaging application security.
DBuilding REST APIs.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Generating dynamic HTML content.". Thymeleaf là template engine (bộ máy mẫu) phía máy chủ: controller trả về tên view, ViewResolver tìm tệp .html trong thư mục templates, rồi Thymeleaf xử lý các thuộc tính như th:text, th:each, th:if để điền dữ liệu từ Model vào và sinh ra trang HTML hoàn chỉnh gửi cho trình duyệt. Điểm mạnh của nó là template vẫn là HTML hợp lệ, mở thẳng trên trình duyệt được (natural template). "Handling database transactions." là việc của @Transactional và PlatformTransactionManager ở tầng service, Thymeleaf không chạm vào cơ sở dữ liệu. "Managing application security." do Spring Security đảm nhận; Thymeleaf chỉ có module phụ để ẩn hiện phần tử theo quyền chứ không quản lý bảo mật. "Building REST APIs." dùng @RestController trả JSON trực tiếp vào thân phản hồi, không cần template HTML.
25Which data format is default in REST responses?4 lựa chọn
AXML
BJSON
CHTML
DCSV
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "JSON". Trong REST hiện đại và đặc biệt với Spring, khi controller @RestController trả về đối tượng Java, Spring MVC dùng HttpMessageConverter để chuyển đối tượng thành thân phản hồi, và Spring Boot cấu hình sẵn Jackson nên định dạng mặc định là JSON (JavaScript Object Notation), gọn, dễ đọc, trình duyệt và ứng dụng di động phân tích nhanh. "XML" vẫn dùng được nếu thêm thư viện jackson-dataformat-xml và client gửi Accept là application/xml, nhưng đó là lựa chọn bổ sung, không phải mặc định. "HTML" là định dạng của trang web hiển thị cho người, thường do view như Thymeleaf sinh, không phải định dạng dữ liệu của API REST. "CSV" chỉ hợp cho xuất bảng dữ liệu phẳng, không biểu diễn được đối tượng lồng nhau và không được Spring dùng mặc định.
26What is the result of this Thymeleaf fragment?4 lựa chọncó code
<span th:if="${user.loggedIn}">Welcome!</span>ARenders always
BDisplays if user.loggedIn is false
CDisplays nothing by default
DDisplays "Welcome!" only if user is logged in
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Displays "Welcome!" only if user is logged in". Thuộc tính th:if của Thymeleaf đánh giá biểu thức user.loggedIn trên đối tượng user trong model lúc dựng trang ở máy chủ; nếu kết quả là true thì thẻ span cùng dòng chữ Welcome! được giữ lại trong HTML trả về, còn nếu false hoặc null thì Thymeleaf loại bỏ hẳn cả thẻ khỏi đầu ra chứ không chỉ ẩn bằng CSS. "Renders always" sai vì phần tử mang th:if chỉ được dựng khi điều kiện đúng; muốn luôn hiển thị thì bỏ th:if đi. "Displays if user.loggedIn is false" đảo ngược điều kiện, đó là hành vi của th:unless chứ không phải th:if. "Displays nothing by default" sai vì không có cơ chế mặc định ẩn nào: kết quả phụ thuộc hoàn toàn vào giá trị loggedIn lúc dựng trang, đúng thì lời chào vẫn hiện ra.
27You have a controller:
@RestController4 lựa chọncó code
class TestController {
@GetMapping("/hello")
public String hello() { return "Hi"; }
}What is the response of GET /hello request?
AHTML page
BJSON object {"hello":"Hi"}
CPlain text 'Hi'
DError 404
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Plain text 'Hi'". @RestController là gộp của @Controller và @ResponseBody, nên giá trị trả về của hello() không bị coi là tên view mà được ghi thẳng vào thân phản hồi; vì kiểu trả về là String, Spring chọn StringHttpMessageConverter và gửi về đúng chuỗi Hi dạng văn bản thuần. "HTML page" chỉ xảy ra với @Controller thường, khi chuỗi trả về được ViewResolver hiểu là tên template cần render. "JSON object {"hello":"Hi"}" sai vì chỉ đối tượng như Map hay một lớp có trường hello mới được Jackson chuyển thành JSON có khoá, còn một String đơn lẻ được ghi ra nguyên văn, không tự gói vào khoá nào. "Error 404" sai vì @GetMapping("/hello") đã ánh xạ đúng đường dẫn và phương thức GET, nên yêu cầu tìm được handler.
AIt specifies the primary key field of an entity
BIt maps an entity field to a table column and allows setting column attributes
CIt marks a field that should not be persisted
DIt defines a many-to-many relationship
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It maps an entity field to a table column and allows setting column attributes". Trong JPA, mỗi trường persistent của entity mặc định ánh xạ tới cột cùng tên; @Column cho phép ghi rõ tên cột và các thuộc tính như name, nullable, unique, length, precision, scale, insertable, updatable, columnDefinition, ví dụ @Column(name = "full_name", nullable = false, length = 100). Hibernate dùng các thông tin này khi sinh DDL tạo bảng và khi dựng câu SQL. "It specifies the primary key field of an entity" là vai trò của @Id, thường đi cùng @GeneratedValue để sinh giá trị khoá. "It marks a field that should not be persisted" là @Transient, trường đó bị bỏ qua hoàn toàn khi lưu và nạp. "It defines a many-to-many relationship" là @ManyToMany, thường kèm @JoinTable để mô tả bảng nối giữa hai entity.
A@Table
B@Entity
C@Column
D@Id
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "@Entity". Theo đặc tả JPA, annotation @Entity đặt trên lớp báo cho persistence provider như Hibernate rằng lớp này là một thực thể được quản lý, ánh xạ tới một bảng, và EntityManager có thể persist, find, merge nó; mỗi thực thể bắt buộc có khoá chính. "@Table" chỉ là tuỳ chọn bổ sung để đặt tên bảng, schema khi tên mặc định không hợp, bản thân nó không biến lớp thành thực thể. "@Column" cấu hình ánh xạ của một trường tới cột như tên cột, độ dài, cho phép rỗng hay không. "@Id" đánh dấu trường khoá chính của thực thể; nó cần thiết bên trong một thực thể nhưng không phải dấu hiệu khai báo lớp là thực thể. Thiếu @Entity thì các annotation kia trên lớp đều không có tác dụng.
ADependency Injection
BAnnotations
CEntity Relationships
DTransactions
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Entity Relationships". JPA cho phép mô tả quan hệ giữa các entity, tương ứng với quan hệ khoá ngoại giữa các bảng, bằng các ánh xạ @OneToOne, @OneToMany, @ManyToOne và @ManyToMany kèm @JoinColumn hoặc @JoinTable; nhờ đó có thể đi từ đối tượng này sang đối tượng liên quan, ví dụ order.getCustomer(), thay vì tự viết câu JOIN. "Dependency Injection" là cơ chế của Spring tiêm phụ thuộc giữa các bean, không liên quan tới quan hệ dữ liệu giữa bảng. "Annotations" là cú pháp khai báo siêu dữ liệu nói chung; ánh xạ quan hệ quả thật được viết bằng annotation, nhưng annotation chỉ là phương tiện và còn dùng cho vô số việc khác như @Id hay @Column, còn tính năng được hỏi là quan hệ entity. "Transactions" bảo đảm một nhóm thao tác cùng thành công hoặc cùng huỷ, không định nghĩa liên kết giữa các bảng.
AA low-level JDBC driver for vendor-specific SQL
BA specification for managing relational data in Java applications using object-relational mapping
CA GUI tool for database administration in IntelliJ IDEA
DA NoSQL database used by Java applications
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "A specification for managing relational data in Java applications using object-relational mapping". JPA là một đặc tả (specification) của Java, nay thuộc Jakarta EE, định nghĩa cách ánh xạ đối tượng sang bảng quan hệ (ORM) bằng annotation như @Entity, @Id, @OneToMany, cùng API EntityManager và ngôn ngữ truy vấn JPQL; bản thân JPA chỉ là bộ giao diện và luật, phần chạy thật do nhà cung cấp như Hibernate hoặc EclipseLink hiện thực. "A low-level JDBC driver for vendor-specific SQL" sai vì driver JDBC là tầng thấp hơn mà JPA dựa vào bên dưới, JPA còn giúp lập trình viên tránh viết SQL riêng của từng hãng. "A GUI tool for database administration in IntelliJ IDEA" sai vì JPA không phải công cụ giao diện, nó là API dùng trong mã nguồn. "A NoSQL database used by Java applications" sai vì JPA không phải cơ sở dữ liệu và được thiết kế cho dữ liệu quan hệ.
AServlet
BEntityManager
CJSP
DJDBC Driver
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "EntityManager". EntityManager là giao diện trung tâm của JPA, gắn với một persistence context (ngữ cảnh lưu trữ) là tập các entity đang được quản lý; qua nó ta gọi persist để đưa entity mới vào quản lý, find để nạp theo khoá chính, merge để gộp entity tách rời, remove để xoá và createQuery để chạy JPQL, còn thay đổi trên entity managed được tự động đồng bộ xuống cơ sở dữ liệu khi flush hoặc commit. "Servlet" là thành phần web của Jakarta EE xử lý yêu cầu HTTP, không biết gì về entity. "JSP" là công nghệ trang hiển thị phía máy chủ, thuộc tầng view. "JDBC Driver" là trình điều khiển cấp thấp để gửi câu SQL tới một hệ quản trị cụ thể; JPA provider như Hibernate dùng nó bên dưới, nhưng driver không theo dõi trạng thái entity.
A@Column
B@Entity
C@OneToMany
D@Transient
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "@OneToMany". Annotation quan hệ trong JPA mô tả cách một thực thể liên kết với thực thể khác; @OneToMany đặt trên thuộc tính tập hợp, ví dụ một Department có danh sách Employee, cho biết một bản ghi phía này gắn với nhiều bản ghi phía kia, thường đi cặp với @ManyToOne ở phía nhiều qua mappedBy. Cùng nhóm còn có @OneToOne, @ManyToOne và @ManyToMany. "@Column" chỉ cấu hình ánh xạ một trường kiểu đơn tới cột của bảng. "@Entity" khai báo lớp là thực thể, không mô tả liên kết giữa các thực thể. "@Transient" đánh dấu trường không được lưu xuống cơ sở dữ liệu, ngược hẳn với việc ánh xạ một quan hệ.
34Which class loads FXML files?4 lựa chọn
AFXMLLoader
BScene
CStage
DNode
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "FXMLLoader". FXMLLoader đọc tệp FXML (mô tả giao diện bằng XML), dựng cây node tương ứng, tạo đối tượng controller khai báo trong fx:controller, tiêm các trường đánh dấu @FXML rồi trả về nút gốc; cách gọi thường gặp là FXMLLoader.load với URL của tệp .fxml lấy từ getClass().getResource. "Scene" là vùng chứa toàn bộ nội dung của scene graph; nó nhận nút gốc đã được nạp chứ không tự đọc FXML. "Stage" là cửa sổ cấp cao nhất chứa Scene, chỉ lo hiển thị chứ không phân tích tệp. "Node" là lớp cơ sở của mọi thành phần trong scene graph như Button, Label, Pane; kết quả của việc nạp FXML là một Node nhưng bản thân Node không có khả năng nạp tệp giao diện.
35Which JavaFX element handles user input events?4 lựa chọn
A
EventHandlerB
SceneGraphC
ControllerD
ActionLời giải
Mở trang câu hỏi này →Đáp án đúng: "EventHandler". Trong JavaFX, interface EventHandler có phương thức handle nhận đối tượng sự kiện và chính kiểu này nhận và xử lý sự kiện người dùng, ví dụ setOnAction trên một nút là gắn một EventHandler cho ActionEvent, còn setOnKeyPressed gắn một EventHandler cho KeyEvent. "Controller" là chỗ dễ nhầm: lớp controller của FXML đúng là nơi viết các phương thức xử lý như onSaveClick, nhưng nó chỉ là lớp chứa mã, còn khi FXMLLoader nối thuộc tính onAction tới phương thức đó thì thứ được gắn lên control vẫn là một EventHandler, nên kiểu trực tiếp nhận và xử lý sự kiện là EventHandler. "SceneGraph" là cây các Node tạo nên giao diện, sự kiện đi qua cây này nhưng nó không xử lý sự kiện. "Action" không phải một kiểu xử lý trong JavaFX; thứ gần nhất là ActionEvent, tức đối tượng mô tả sự kiện, không phải bộ xử lý.
36Which CSS file customizes JavaFX UI?4 lựa chọn
A
styles.cssB
ui.cssC
design.cssD
theme.xmlLời giải
Mở trang câu hỏi này →Đáp án đúng: "styles.css". JavaFX cho phép định kiểu giao diện bằng CSS: ta nạp tệp bằng scene.getStylesheets().add(...) hoặc khai báo stylesheets trong FXML, rồi viết bộ chọn như .button với thuộc tính có tiền tố -fx-. Cần nói thẳng là JavaFX không bắt buộc tên tệp nào; giao diện mặc định lấy từ stylesheet nội bộ modena.css, còn styles.css chỉ là tên quen dùng mà các mẫu dự án tạo sẵn, nên đây là đáp án được chọn theo thông lệ. Theo đúng kỹ thuật, "ui.css" hay "design.css" vẫn hoạt động y hệt nếu được nạp vào Scene, chúng chỉ không phải tên thông dụng mà câu hỏi muốn nhắc tới. Riêng "theme.xml" sai hẳn vì đó là tệp XML, không phải CSS, và JavaFX không đọc định kiểu giao diện từ XML.
37What JavaFX class is used to create a popup dialog for displaying confirmation or error messages?4 lựa chọn
AStage
BScene
CAlert
DPane
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Alert". Lớp javafx.scene.control.Alert, kế thừa Dialog, tạo hộp thoại bật lên dựng sẵn với các loại AlertType như CONFIRMATION, ERROR, WARNING, INFORMATION; gọi showAndWait sẽ hiện hộp thoại và trả về nút người dùng bấm, rất hợp để xác nhận hoặc báo lỗi. "Stage" là cửa sổ cấp cao nhất của JavaFX; tự tạo một Stage mới cũng làm được cửa sổ phụ nhưng phải tự dựng toàn bộ nội dung và nút, không phải lớp chuyên cho hộp thoại thông báo. "Scene" là vùng chứa đồ thị cảnh (scene graph) đặt bên trong một Stage, không phải cửa sổ bật lên. "Pane" chỉ là layout chứa các node con, phải nằm trong một Scene, tự nó không hiển thị thành hộp thoại.
ATo improve database performance.
BTo ensure data integrity and prevent errors.
CTo enhance user interface aesthetics.
DTo manage server configurations.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To ensure data integrity and prevent errors.". Trong ứng dụng JavaFX có thao tác CRUD (tạo, đọc, cập nhật, xoá), kiểm tra hợp lệ (validation) là bước kiểm dữ liệu người dùng nhập trên form, chẳng hạn trường bắt buộc không rỗng, email đúng định dạng, số lượng là số dương, trước khi gọi tầng service để lưu; dữ liệu sai bị chặn và báo lỗi ngay trên giao diện, nhờ vậy cơ sở dữ liệu giữ được tính toàn vẹn và tránh ngoại lệ do vi phạm ràng buộc. "To improve database performance." sai vì kiểm tra hợp lệ không làm truy vấn nhanh hơn; hiệu năng phụ thuộc chỉ mục và thiết kế truy vấn. "To enhance user interface aesthetics." sai vì thông báo lỗi có hiện trên giao diện nhưng mục đích là đúng dữ liệu, không phải thẩm mỹ. "To manage server configurations." sai vì cấu hình máy chủ là việc triển khai, không liên quan tới kiểm dữ liệu nhập.
ATo define business logic.
BTo manage user sessions.
CTo provide an abstraction layer for database interactions.
DTo handle application security.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To provide an abstraction layer for database interactions.". DAO (Data Access Object, đối tượng truy cập dữ liệu) là mẫu thiết kế gom toàn bộ thao tác đọc ghi cơ sở dữ liệu vào một lớp có giao diện rõ ràng như findById, save, delete, giấu đi chi tiết JDBC, JPA hay SQL bên dưới; trong Spring, lớp DAO thường gắn @Repository để được quét thành bean và được dịch ngoại lệ sang DataAccessException, tầng service chỉ gọi DAO mà không biết dữ liệu nằm ở đâu. "To define business logic." là việc của tầng service, nơi điều phối quy tắc nghiệp vụ và gọi DAO. "To manage user sessions." thuộc tầng web hoặc HttpSession, Spring Session, không phải tầng dữ liệu. "To handle application security." là trách nhiệm của Spring Security với filter, xác thực và phân quyền, không phải của DAO.
A
ViewResolverB
ControllerC
DispatcherServletD
ResourceLoaderLời giải
Mở trang câu hỏi này →Đáp án đúng: "ViewResolver". Khi phương thức controller trả về một chuỗi như home, đó chỉ là tên view logic; DispatcherServlet hỏi các ViewResolver đã đăng ký để đổi tên này thành một đối tượng View thật, ví dụ ThymeleafViewResolver ghép tiền tố classpath:/templates/ và hậu tố .html để tìm tệp templates/home.html, còn InternalResourceViewResolver ghép đường dẫn tới tệp JSP. "Controller" chỉ tạo ra tên view và dữ liệu model, không biết template nằm ở đâu. "DispatcherServlet" điều phối toàn bộ luồng và là bên gọi ViewResolver, nhưng việc phân giải tên được uỷ cho ViewResolver chứ nó không tự làm. "ResourceLoader" là giao diện chung để nạp tài nguyên như tệp trên classpath hay hệ thống tệp theo đường dẫn, không có khái niệm tên view.