Danh sách câu hỏi của đề

Câu hỏi: HSF302 Làm việc với Spring Framework – Bộ ôn tập thi lại số 2

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

Danh sách câu hỏi

20/50 câuCòn 30
A@OneToOne
B@ManyToOne
C@OneToMany
D@ManyToMany
Lời giải
Đáp án đúng: "@ManyToMany". Annotation @ManyToMany của đặc tả JPA đánh dấu một thuộc tính tập hợp mà mỗi phía có thể liên kết với nhiều bản ghi của phía kia, ví dụ một sinh viên học nhiều khoá học và một khoá học có nhiều sinh viên; quan hệ này được lưu qua một bảng nối (join table), có thể đặt tên và cột bằng @JoinTable ở phía sở hữu, phía còn lại dùng mappedBy. "@OneToOne" chỉ dùng khi mỗi thực thể gắn với đúng một thực thể kia, như người dùng và hồ sơ cá nhân. "@ManyToOne" mô tả phía nhiều trỏ về một, như nhiều đơn hàng thuộc một khách hàng, khoá ngoại nằm trên bảng phía nhiều. "@OneToMany" là chiều ngược lại của quan hệ đó, một khách hàng có nhiều đơn hàng, nhưng mỗi đơn hàng vẫn chỉ thuộc một khách hàng nên không diễn tả được quan hệ nhiều-nhiều.
Mở trang câu hỏi này →
ATight coupling
BInversion of Control
CGlobal variables
DStatic imports
Lời giải
Đáp án đúng: "Inversion of Control". Inversion of Control (đảo ngược điều khiển) là nguyên lý nền của Spring: thay vì đối tượng tự tạo và tự tìm phụ thuộc, quyền điều khiển việc tạo, nối và quản lý vòng đời đối tượng được chuyển cho IoC container như ApplicationContext, và Dependency Injection là cách Spring hiện thực nguyên lý này. "Tight coupling" là điều Spring muốn tránh, vì lớp gắn chặt với hiện thực cụ thể thì khó thay thế và khó kiểm thử. "Global variables" là thói quen thiết kế xấu, trạng thái dùng chung khó kiểm soát; bean singleton của Spring được tiêm có chủ đích chứ không phải biến toàn cục. "Static imports" chỉ là cú pháp Java để gọi thành viên tĩnh không cần ghi tên lớp, không phải nguyên lý thiết kế.
Mở trang câu hỏi này →
A@OneToOne
B@ManyToOne
C@OneToMany
D@ManyToMany
Lời giải
Đáp án đúng: "@OneToMany". Trong quan hệ một nhiều, phía một (ví dụ Department) giữ một tập hợp các entity phía nhiều (danh sách Employee), nên trường tập hợp đó được gắn @OneToMany, thường viết @OneToMany(mappedBy = "department") để chỉ ra phía nhiều mới là chủ quan hệ, nơi giữ cột khoá ngoại, kèm cascade hay orphanRemoval nếu cần. "@ManyToOne" là annotation của chiều ngược lại, đặt trên trường department trong Employee ở phía nhiều, trỏ tới một đối tượng đơn chứ không quản lý tập hợp. "@OneToOne" mô tả quan hệ một một, mỗi bên chỉ có tối đa một đối tượng. "@ManyToMany" mô tả quan hệ nhiều nhiều qua bảng nối, khi phần tử con có thể thuộc về nhiều cha cùng lúc, khác với một nhiều.
Mở trang câu hỏi này →
ASetter Injection
BField Injection
CConstructor Injection
DMethod Injection
Lời giải
Đáp án đúng: "Constructor Injection". Với constructor injection, các phụ thuộc truyền qua tham số hàm tạo nên trường có thể khai báo final (bất biến), đối tượng luôn được tạo ra ở trạng thái đầy đủ, phụ thuộc bắt buộc lộ rõ, và khi viết unit test chỉ cần tạo lớp đó với mock mà không cần container; tài liệu Spring khuyến nghị cách này cho phụ thuộc bắt buộc, và lớp chỉ có một hàm tạo thì không cần @Autowired. "Setter Injection" hợp với phụ thuộc tuỳ chọn hoặc có thể đổi lại sau, nhưng trường không thể final và đối tượng có thể bị dùng khi chưa tiêm đủ. "Field Injection" (@Autowired trên trường) gọn nhưng giấu phụ thuộc, không cho final và buộc dùng reflection hoặc container khi test. "Method Injection" là kỹ thuật đặc biệt như lookup method để lấy bean prototype mới từ một bean singleton, không phải cách tiêm thông thường được khuyến nghị.
Mở trang câu hỏi này →
ASpring MVC
BSpring Security
CSpring Core Container
DSpring Data
Lời giải
Đáp án đúng: "Spring Core Container". Trong kiến trúc Spring Framework, Core Container gồm các module spring-core, spring-beans, spring-context và spring-expression, cung cấp IoC container, Dependency Injection, BeanFactory, ApplicationContext và SpEL; mọi module khác đều chạy trên nền này vì chúng đều là bean được container tạo và quản lý. "Spring MVC" là module web xây trên Core Container, dùng ApplicationContext để quản lý controller và DispatcherServlet. "Spring Security" là dự án bảo mật dựa vào container để cấu hình filter và bean xác thực, nên phụ thuộc vào nền chứ không phải nền. "Spring Data" là họ dự án truy cập dữ liệu, cũng dựng repository thành bean trong container, không phải nền tảng của các module còn lại.
Mở trang câu hỏi này →
ARendering HTML views from Thymeleaf templates
BCreating, wiring, configuring beans and managing their lifecycle
CExecuting SQL statements without any JDBC driver
DCompiling Java sources at runtime
Lời giải
Đáp án đúng: "Creating, wiring, configuring beans and managing their lifecycle". IoC container (bộ chứa đảo ngược điều khiển) của Spring, cụ thể là BeanFactory và ApplicationContext, đọc cấu hình từ annotation, lớp @Configuration hoặc XML rồi tự tạo bean, tiêm phụ thuộc vào nhau, áp cấu hình và quản lý vòng đời từ khởi tạo, gọi @PostConstruct cho tới @PreDestroy khi đóng context; mã nghiệp vụ không còn tự new đối tượng nữa. "Rendering HTML views from Thymeleaf templates" là việc của engine template Thymeleaf cùng ViewResolver trong tầng web, container chỉ quản lý các bean đó chứ không tự render. "Executing SQL statements without any JDBC driver" là điều không thể, mọi truy cập cơ sở dữ liệu quan hệ trong Java đều cần driver JDBC. "Compiling Java sources at runtime" là việc của trình biên dịch javac hay công cụ build, container chỉ làm việc với lớp đã biên dịch.
Mở trang câu hỏi này →
AScene
BNode
CStage
DPane
Lời giải
Đáp án đúng: "Stage". Stage là lớp JavaFX đại diện cho một cửa sổ cấp cao nhất; khi ứng dụng khởi động, nền tảng tạo primary stage (cửa sổ chính) và truyền vào phương thức start của lớp con Application, ta gọi setTitle, setScene rồi show để hiện cửa sổ. "Scene" là nội dung đặt bên trong cửa sổ, chứa scene graph với một nút gốc, và một cửa sổ tại mỗi thời điểm hiển thị một Scene. "Node" là lớp cơ sở trừu tượng của mọi phần tử trong scene graph như Button, Label hay các layout. "Pane" là lớp layout cơ bản chứa các nút con, tự nó là một Node nằm trong Scene chứ không phải cửa sổ. Có thể hình dung theo thứ bậc: Stage chứa Scene, Scene chứa cây Node.
Mở trang câu hỏi này →
ATo manage database connections.
BTo arrange UI elements within a container.
CTo handle network requests.
DTo manage application configurations.
Lời giải
Đáp án đúng: "To arrange UI elements within a container.". Layout pane của JavaFX như HBox, VBox, BorderPane, GridPane, StackPane, FlowPane là các node chứa, tự tính vị trí và kích thước của node con theo quy tắc riêng (hàng ngang, cột dọc, lưới, chồng lớp) và tự sắp xếp lại khi cửa sổ đổi kích thước, giúp không phải đặt toạ độ bằng tay. "To manage database connections." sai vì JavaFX là bộ công cụ giao diện, kết nối cơ sở dữ liệu thuộc JDBC hoặc JPA. "To handle network requests." sai vì giao tiếp mạng dùng HttpClient hay thư viện khác, không phải layout. "To manage application configurations." sai vì cấu hình ứng dụng nằm ở tệp properties hoặc lớp cấu hình riêng, layout không lưu cấu hình.
Mở trang câu hỏi này →
AHBox/VBox
BBorderPane
CGridPane
DStackPane
Lời giải
Đáp án đúng: "StackPane". StackPane xếp các node con chồng lên nhau theo trục z: node thêm sau nằm trên node thêm trước, và mặc định tất cả được căn giữa; cách này thường dùng để đặt chữ lên trên hình nền hoặc phủ một lớp lên nội dung. "HBox/VBox" xếp node thành một hàng ngang (HBox) hoặc một cột dọc (VBox), các node nằm cạnh nhau chứ không chồng. "BorderPane" chia vùng chứa thành năm vùng top, bottom, left, right, center, mỗi vùng một node. "GridPane" đặt node vào các ô của lưới hàng và cột như một bảng; về lý thuyết có thể đặt hai node cùng một ô để chúng chồng nhau, nhưng đó không phải mục đích của nó, còn StackPane được thiết kế đúng cho việc xếp chồng.
Mở trang câu hỏi này →
ALabel
BButton
CTextField
DImageView
Lời giải
Đáp án đúng: "ImageView". Trong JavaFX, ImageView là Node dùng để hiển thị một đối tượng Image đã nạp từ tệp hoặc URL, ví dụ new ImageView(new Image("logo.png")), và cho phép chỉnh kích thước bằng setFitWidth, setFitHeight hay giữ tỉ lệ bằng setPreserveRatio; Image chứa dữ liệu ảnh, còn ImageView là thứ vẽ nó lên Scene. "Label" dùng để hiển thị chữ, tuy có thể gắn kèm một graphic nhưng vai trò chính vẫn là nhãn văn bản và graphic đó thường lại chính là một ImageView. "Button" là nút bấm nhận thao tác nhấn và phát ActionEvent. "TextField" là ô cho người dùng gõ một dòng văn bản, không có chức năng hiển thị ảnh.
Mở trang câu hỏi này →
AIt's a controller method
BIt's a data access layer component
CIt's a view template
DIt's a security filter
Lời giải
Đáp án đúng: "It's a data access layer component". @Repository là stereotype annotation đánh dấu lớp thuộc tầng truy cập dữ liệu: nó được component scan đăng ký thành bean vì bản thân là một @Component, và Spring áp cơ chế dịch ngoại lệ, đổi lỗi riêng của JPA hay Hibernate sang DataAccessException; với interface kế thừa JpaRepository, Spring Data tự đăng ký bean nên annotation này thường không bắt buộc, nhưng ý nghĩa vẫn là thành phần tầng dữ liệu. "It's a controller method" sai vì phương thức xử lý yêu cầu được đánh dấu bằng @RequestMapping hoặc @GetMapping trong lớp @Controller. "It's a view template" sai vì template là tệp Thymeleaf hay JSP, không phải lớp Java gắn annotation. "It's a security filter" sai vì filter bảo mật thuộc Spring Security, cấu hình qua SecurityFilterChain.
Mở trang câu hỏi này →
AController
BHandlerMapping
CDispatcherServlet
DViewResolver
Lời giải
Đáp án đúng: "DispatcherServlet". Spring MVC theo mẫu front controller (bộ điều khiển đứng trước): DispatcherServlet được đăng ký là servlet nhận mọi yêu cầu khớp mẫu URL của ứng dụng, rồi điều phối phần còn lại của vòng đời. "HandlerMapping" chỉ được DispatcherServlet hỏi sau khi yêu cầu đã tới, để tìm handler phù hợp với URL và phương thức HTTP. "Controller" chỉ được gọi gián tiếp qua HandlerAdapter khi handler đã được xác định, nên nhận yêu cầu ở khâu giữa chứ không phải đầu tiên. "ViewResolver" đứng gần cuối chuỗi, đổi tên view logic do controller trả về thành view thực tế để dựng phản hồi. Các Filter của Servlet container, như bộ lọc của Spring Security, có thể chạm yêu cầu trước DispatcherServlet, nhưng trong các thành phần của Spring MVC thì DispatcherServlet là cửa vào đầu tiên.
Mở trang câu hỏi này →
AHandlerMapping
BHandlerAdapter
CViewResolver
DModelAndView
Lời giải
Đáp án đúng: "HandlerMapping". Trong luồng xử lý của Spring MVC, DispatcherServlet nhận mọi yêu cầu rồi hỏi các HandlerMapping, ví dụ RequestMappingHandlerMapping đọc @RequestMapping và @GetMapping, để tìm phương thức controller khớp với URL và phương thức HTTP; kết quả là một handler cùng chuỗi interceptor. "HandlerAdapter" đứng ở bước sau: khi đã biết handler nào, adapter mới thực sự gọi nó, lo phần gắn tham số và xử lý giá trị trả về, chứ không phải nơi tìm handler. "ViewResolver" làm việc ở cuối luồng, đổi tên view logic như home thành một View cụ thể như template Thymeleaf. "ModelAndView" chỉ là đối tượng chứa dữ liệu model và tên view mà handler trả về, không ánh xạ yêu cầu nào.
Mở trang câu hỏi này →
AObserver
BModel-View-Controller
CDecorator
DCommand
Lời giải
Đáp án đúng: "Model-View-Controller". Spring MVC được xây dựng theo mẫu MVC: Controller, các lớp gắn @Controller, nhận yêu cầu và gọi tầng nghiệp vụ; Model chứa dữ liệu cần hiển thị; View như template Thymeleaf hay JSP trình bày dữ liệu đó; tất cả được điều phối qua DispatcherServlet theo mẫu Front Controller. "Observer" là mẫu cho phép nhiều đối tượng đăng ký nhận thông báo khi một đối tượng thay đổi, Spring có dùng ý tưởng này cho ApplicationEvent nhưng Spring MVC không dựa trên nó. "Decorator" là mẫu bọc đối tượng để thêm hành vi, không phải nền tảng của framework web này. "Command" là mẫu đóng gói một yêu cầu thành đối tượng, cũng không phải kiến trúc tổng thể của Spring MVC.
Mở trang câu hỏi này →
AEnables Thymeleaf templating
BAutomatically configures beans based on dependencies
CAdds JSP support
DEnables Hibernate schema updates
Lời giải
Đáp án đúng: "Automatically configures beans based on dependencies". @EnableAutoConfiguration bật cơ chế tự cấu hình của Spring Boot: khi khởi động, Spring Boot nạp danh sách các lớp auto-configuration rồi áp dụng những lớp có điều kiện thoả mãn, dựa trên @ConditionalOnClass, @ConditionalOnMissingBean, @ConditionalOnProperty; ví dụ thấy spring-boot-starter-data-jpa và driver cơ sở dữ liệu trên classpath thì tự tạo DataSource, EntityManagerFactory, transaction manager, và lùi lại nếu ta đã tự khai báo bean đó. Annotation này nằm sẵn trong @SpringBootApplication. "Enables Thymeleaf templating" chỉ là một hệ quả có điều kiện: Thymeleaf được cấu hình khi có starter của nó, annotation không dành riêng cho Thymeleaf. "Adds JSP support" sai vì JSP cần thêm phụ thuộc và cấu hình riêng, Spring Boot còn khuyên tránh JSP khi chạy jar nhúng. "Enables Hibernate schema updates" là việc của thuộc tính spring.jpa.hibernate.ddl-auto, không phải của annotation này.
Mở trang câu hỏi này →
ATo manage database connections.
BTo process user requests and return a model and view.
CTo define user interfaces.
DTo configure application security.
Lời giải
Đáp án đúng: "To process user requests and return a model and view.". Trong Spring MVC, DispatcherServlet nhận yêu cầu HTTP rồi chuyển cho phương thức xử lý (handler) nằm trong lớp gắn @Controller; phương thức này đọc tham số, gọi tầng service, đặt dữ liệu vào Model và trả về tên view logic (hoặc một ModelAndView) để ViewResolver tìm template hiển thị, đúng vai trò bộ điều khiển trong mô hình Model–View–Controller. "To manage database connections." là việc của DataSource và bể kết nối như HikariCP, controller chỉ gọi gián tiếp qua service và repository. "To define user interfaces." thuộc về tầng View, tức các template Thymeleaf hay JSP, controller không mô tả giao diện. "To configure application security." do Spring Security đảm nhận qua chuỗi filter và bean cấu hình SecurityFilterChain, chạy trước khi yêu cầu tới controller.
Mở trang câu hỏi này →
AStackPane
BBorderPane
CHBox
DVBox
Lời giải
Đáp án đúng: "BorderPane". Yêu cầu chia cửa sổ thành top, bottom, center, left và right khớp đúng năm vùng của BorderPane: mỗi vùng giữ tối đa một nút, gán bằng setTop, setBottom, setLeft, setRight, setCenter; vùng trên và dưới kéo hết chiều ngang, vùng trái phải lấy theo chiều rộng ưa thích của nút, còn center giãn ra lấp phần còn lại khi cửa sổ đổi kích thước. "StackPane" chồng các nút con lên nhau tại cùng một vị trí, mặc định căn giữa, hợp với việc đặt chữ lên ảnh nền chứ không chia vùng. "HBox" chỉ xếp các nút theo một hàng ngang. "VBox" chỉ xếp các nút theo một cột dọc. Muốn có năm vùng bằng HBox hay VBox phải lồng nhiều layout, trong khi BorderPane làm sẵn việc đó.
Mở trang câu hỏi này →
AManual configuration
BSimplified setup with auto-configuration
CMore XML files
DNo dependency management
Lời giải
Đáp án đúng: "Simplified setup with auto-configuration". Lợi ích chính của Spring Boot là dựng ứng dụng Spring nhanh: auto-configuration dựa vào thư viện có trên classpath để tự tạo bean hợp lý, starter gom phụ thuộc tương thích, kèm server nhúng nên chạy được bằng một tệp jar, và mọi mặc định đều ghi đè được qua application.properties. "Manual configuration" ngược lại mục tiêu của Boot; vẫn có thể cấu hình tay khi cần nhưng đó không phải lợi ích. "More XML files" sai vì Boot hướng tới cấu hình bằng Java và tệp thuộc tính, hầu như không cần XML. "No dependency management" sai vì Boot quản lý phiên bản phụ thuộc rất chặt qua BOM spring-boot-dependencies và parent POM, nên lập trình viên khỏi ghi phiên bản từng thư viện.
Mở trang câu hỏi này →
ASpringApplication → compile JPQL; Actuator → serve JSP; DevTools → manage database migrations
BCLI → container orchestration; Actuator → live code reload; Autoconfiguration → command scheduling
CAutoconfiguration → configure beans from classpath & properties; Actuator → health/metrics endpoints; DevTools → auto-restart & LiveReload
DStarter POMs → replace the need for Maven/Gradle; Embedded servers → remove HTTP support
Lời giải

Đáp án đúng: "Autoconfiguration → configure beans from classpath & properties; Actuator → health/metrics endpoints; DevTools → auto-restart & LiveReload". Auto-configuration xem thư viện có trên classpath và các thuộc tính trong application.properties để tự tạo bean phù hợp, ví dụ thấy Hibernate và DataSource thì dựng EntityManagerFactory; Actuator mở các endpoint giám sát như health, metrics, info; DevTools tự khởi động lại khi mã thay đổi và kích hoạt LiveReload cho trình duyệt, nên cả ba cặp đều khớp. "SpringApplication → compile JPQL; Actuator → serve JSP; DevTools → manage database migrations" sai cả ba: SpringApplication khởi động ứng dụng, JPQL do JPA provider dịch, Actuator không phục vụ JSP, còn migration là việc của Flyway hay Liquibase. "CLI → container orchestration; Actuator → live code reload; Autoconfiguration → command scheduling" sai vì Spring Boot CLI dùng để chạy nhanh script và tạo dự án chứ không điều phối container, nạp lại mã là việc của DevTools, còn lên lịch tác vụ dùng @Scheduled. "Starter POMs → replace the need for Maven/Gradle; Embedded servers → remove HTTP support" sai vì starter là gói phụ thuộc vẫn cần Maven hoặc Gradle để quản lý, còn máy chủ nhúng như Tomcat chính là thứ cung cấp HTTP.

Mở trang câu hỏi này →
AThey require separate installation and configuration.
BThey simplify deployment and reduce the need for external application servers.
CThey offer limited performance compared to external servers.
DThey are only compatible with specific operating systems.
Lời giải
Đáp án đúng: "They simplify deployment and reduce the need for external application servers.". Spring Boot đóng gói sẵn server nhúng (embedded server) như Tomcat, Jetty hoặc Undertow vào ứng dụng, nên toàn bộ ứng dụng thành một tệp jar chạy được bằng java -jar, không phải cài Tomcat riêng rồi triển khai tệp war vào đó; cấu hình cổng hay đường dẫn chỉ cần sửa trong application.properties, rất hợp với container và microservice. "They require separate installation and configuration." nói ngược lại bản chất, vì server nhúng đi kèm như một dependency, không cần cài đặt riêng. "They offer limited performance compared to external servers." sai vì server nhúng chính là Tomcat, Jetty hay Undertow thật, hiệu năng tương đương bản cài ngoài. "They are only compatible with specific operating systems." sai vì server nhúng là thư viện Java, chạy trên mọi hệ điều hành có JVM.
Mở trang câu hỏi này →