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

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: "@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 →
A@Aspect
B@Controller
C@Repository
D@Configuration
Lời giải
Đáp án đúng: "@Aspect". Trong Spring AOP (lập trình hướng khía cạnh), @Aspect lấy từ AspectJ đánh dấu một lớp là aspect, tức mô-đun gom logic cắt ngang như ghi log, đo thời gian; bên trong khai báo pointcut bằng @Pointcut và advice bằng @Before, @After, @Around. Lớp này phải đồng thời là bean (thêm @Component) và cần bật hỗ trợ bằng @EnableAspectJAutoProxy, hoặc được Spring Boot bật tự động, khi đó Spring tạo proxy bọc các bean khớp pointcut. "@Controller" đánh dấu lớp xử lý yêu cầu web trong Spring MVC. "@Repository" đánh dấu lớp truy cập dữ liệu và bật dịch ngoại lệ sang DataAccessException. "@Configuration" đánh dấu lớp chứa các phương thức @Bean khai báo cấu hình; nó có thể dùng kèm để bật AOP nhưng không định nghĩa aspect.
Mở trang câu hỏi này →
AIncreased coupling between application layers.
BAbility to use only the modules needed, reducing application size.
CLimited support for different persistence technologies.
DDecreased flexibility in choosing application components.
Lời giải
Đáp án đúng: "Ability to use only the modules needed, reducing application size.". Spring Framework được chia thành nhiều mô-đun như spring-core, spring-beans, spring-context, spring-jdbc, spring-orm, spring-webmvc; ứng dụng chỉ khai báo những mô-đun mình dùng, ví dụ ứng dụng dòng lệnh không cần spring-webmvc, nhờ vậy giảm số thư viện phải đóng gói và giữ phụ thuộc gọn. "Increased coupling between application layers." sai vì mục tiêu của Spring là giảm phụ thuộc chặt (coupling) nhờ DI và lập trình qua interface. "Limited support for different persistence technologies." ngược với thực tế: Spring hỗ trợ JDBC, JPA, Hibernate, MyBatis và các kho NoSQL qua Spring Data. "Decreased flexibility in choosing application components." cũng ngược lại, vì kiến trúc mô-đun cho phép tự chọn và thay thế từng thành phần.
Mở trang câu hỏi này →
ARobust transaction management.
BComprehensive web development support through Spring MVC.
CAutomatic generation of user interfaces.
DStrong community support and extensive documentation.
Lời giải
Đáp án đúng: "Automatic generation of user interfaces.". Câu hỏi tìm điều KHÔNG phải ưu điểm chung của Spring, và Spring không hề tự sinh giao diện người dùng: lập trình viên vẫn phải tự viết template Thymeleaf, JSP hoặc front-end riêng, Spring chỉ cung cấp hạ tầng để nối dữ liệu vào view. "Robust transaction management." là ưu điểm thật, vì @Transactional và PlatformTransactionManager cho phép quản lý giao dịch khai báo, thống nhất cho JDBC, JPA hay JTA, nên không được chọn. "Comprehensive web development support through Spring MVC." cũng đúng, Spring MVC cung cấp DispatcherServlet, controller, data binding, validation và REST. "Strong community support and extensive documentation." đúng nốt, Spring có cộng đồng rất lớn và tài liệu tham khảo chính thức đầy đủ, nên cũng không phải đáp án.
Mở trang câu hỏi này →
5What is an "advice" in Spring AOP?4 lựa chọn
AA point in the execution of a program.
BAn object being proxied.
CThe action taken at a particular join point.
DA collection of join points.
Lời giải
Đáp án đúng: "The action taken at a particular join point.". Theo thuật ngữ AOP mà Spring dùng, advice là hành động do aspect thực hiện tại một join point cụ thể, có các loại before, after returning, after throwing, after và around, ví dụ ghi log trước khi gọi một phương thức service. "A point in the execution of a program." là định nghĩa join point, trong Spring AOP luôn là một lần gọi phương thức. "An object being proxied." là target object, đối tượng được advise mà Spring bọc bằng proxy. "A collection of join points." gần với pointcut, tức biểu thức chọn ra tập join point mà advice sẽ áp vào; pointcut quyết định ở đâu, còn advice quyết định làm gì.
Mở trang câu hỏi này →
AThe database table name.
BThe primary key of the "many" side entity.
CThe field in the "many" side entity that maps back to the "one" side entity.
DThe join table name.
Lời giải
Đáp án đúng: "The field in the "many" side entity that maps back to the "one" side entity.". Trong quan hệ hai chiều, ví dụ Department có danh sách employees đánh dấu @OneToMany và Employee có trường department đánh dấu @ManyToOne, mappedBy trên phía Department ghi tên trường department ở phía nhiều; nó báo JPA rằng phía nhiều mới là phía sở hữu quan hệ (owning side), nơi giữ cột khoá ngoại, còn phía một chỉ phản chiếu nên không sinh thêm cột hay bảng nối. "The database table name." sai vì tên bảng đặt bằng @Table. "The primary key of the "many" side entity." sai vì khoá chính của entity bên nhiều khai báo bằng @Id trong chính entity đó, mappedBy không nhắc tới khoá. "The join table name." sai vì bảng nối đặt bằng @JoinTable, và dùng mappedBy chính là để khỏi cần bảng nối mà tái dùng khoá ngoại phía nhiều.
Mở trang câu hỏi này →
ALabel
BButton
CTextField
DImageView
Lời giải
Đáp án đúng: "Label". Trong JavaFX, Label là control dùng để hiển thị một đoạn văn bản không chỉnh sửa được, như tiêu đề hay nhãn đặt cạnh ô nhập; nội dung đặt bằng setText() hoặc thuộc tính text trong FXML, có thể kèm một graphic. Người dùng chỉ đọc chứ không gõ vào Label. "Button" cũng mang chữ trên mặt nút, nhưng vai trò của nó là nhận thao tác nhấn và phát ActionEvent, không phải để hiển thị văn bản. "TextField" là ô nhập một dòng, dùng để người dùng gõ văn bản vào và chương trình đọc lại bằng getText(). "ImageView" dùng để hiển thị ảnh từ đối tượng Image chứ không hiển thị chữ.
Mở trang câu hỏi này →
ATo manage database connections.
BTo respond to user interactions.
CTo handle network requests.
DTo manage application configurations.
Lời giải
Đáp án đúng: "To respond to user interactions.". Ứng dụng JavaFX chạy theo hướng sự kiện: khi người dùng bấm nút, gõ phím, di chuột hay đóng cửa sổ, JavaFX tạo đối tượng sự kiện như ActionEvent, KeyEvent, MouseEvent rồi chuyển qua chuỗi điều phối tới nút đích, nơi các handler đăng ký bằng setOnAction, addEventHandler hoặc thuộc tính onAction trong FXML được gọi trên JavaFX Application Thread để phản hồi, như kiểm tra form rồi lưu dữ liệu. "To manage database connections." là việc của JDBC, bể kết nối hay EntityManagerFactory, không phải của cơ chế sự kiện. "To handle network requests." thuộc các API mạng như HttpClient, nên chạy ở luồng nền để không làm treo giao diện. "To manage application configurations." là việc của tệp properties hay Preferences, không liên quan tới xử lý thao tác người dùng.
Mở trang câu hỏi này →
AController class
BHTML page
CRepository/DAO class
DJSP scriptlet
Lời giải
Đáp án đúng: "Repository/DAO class". Trong ứng dụng Spring MVC kết hợp Hibernate theo kiến trúc phân lớp, thao tác cơ sở dữ liệu đặt ở lớp Repository hay DAO (Data Access Object, đối tượng truy cập dữ liệu), đánh dấu @Repository; lớp này dùng Session của Hibernate, EntityManager hoặc Spring Data, và Spring tự dịch ngoại lệ của Hibernate sang DataAccessException. Service gọi repository, controller gọi service. "Controller class" chỉ nên nhận yêu cầu và chọn view; viết truy vấn ở đây trộn tầng web với tầng dữ liệu, khó kiểm thử và tái sử dụng. "HTML page" là tầng hiển thị chạy ở trình duyệt, không thể và không được chạm cơ sở dữ liệu. "JSP scriptlet" là mã Java nhúng trong JSP; về kỹ thuật chạy được JDBC nhưng là cách làm lỗi thời, phá vỡ việc tách lớp của MVC.
Mở trang câu hỏi này →
AStage
BNode
CPane
DScene
Lời giải
Đáp án đúng: "Scene". JavaFX dùng hình ảnh sân khấu: Stage là cửa sổ, Scene là nội dung đặt trong cửa sổ đó, chứa đồ thị cảnh (scene graph) gồm một node gốc và mọi node con; gọi stage.setScene(scene) để hiển thị vùng nội dung này, và đổi Scene là đổi toàn bộ nội dung cửa sổ. "Stage" là chính cửa sổ cấp cao nhất với thanh tiêu đề, kích thước, nút đóng, không phải vùng nội dung bên trong. "Node" là lớp cơ sở của mọi phần tử trong đồ thị cảnh như Button hay Label, chỉ là một mảnh của nội dung. "Pane" là một layout chứa node con, thường làm node gốc của Scene, nhưng nó chỉ là một phần trong vùng nội dung, chưa phải lớp đại diện cho vùng nội dung của cửa sổ.
Mở trang câu hỏi này →
11In JavaFX, what is a Property?4 lựa chọn
AA static variable.
BA dynamic, observable value.
CA database field.
DA network address.
Lời giải
Đáp án đúng: "A dynamic, observable value.". Trong JavaFX, property như StringProperty, IntegerProperty hay ObjectProperty là đối tượng bọc một giá trị có thể thay đổi và cho phép đăng ký listener (ChangeListener, InvalidationListener) để được báo khi giá trị đổi; nhờ tính quan sát được (observable) đó mà có binding, ví dụ label.textProperty().bind(nameProperty) giúp giao diện tự cập nhật theo dữ liệu. "A static variable." sai vì property thường là thành viên của từng đối tượng, và quan trọng hơn là nó phát thông báo khi thay đổi, điều một biến static thông thường không làm. "A database field." sai vì property là khái niệm của tầng giao diện, có thể được nạp từ một cột nhưng bản thân không gắn với cơ sở dữ liệu. "A network address." sai vì property không liên quan gì tới mạng.
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 →
AAs a listener.
BAs a filter.
CAs a servlet.
DAs a resource.
Lời giải
Đáp án đúng: "As a servlet.". DispatcherServlet bản chất là một lớp con của HttpServlet, nên trong web.xml nó được khai báo bằng thẻ servlet với servlet-name và servlet-class là org.springframework.web.servlet.DispatcherServlet, thường kèm init-param contextConfigLocation trỏ tới tệp cấu hình Spring và load-on-startup, rồi gắn đường dẫn bằng servlet-mapping, ví dụ url-pattern là dấu gạch chéo để nhận mọi yêu cầu. "As a listener." là cách khai báo ContextLoaderListener, thành phần khởi tạo root application context khi ứng dụng web khởi động, không phải DispatcherServlet. "As a filter." dùng cho các Filter như CharacterEncodingFilter hay DelegatingFilterProxy của Spring Security, chạy trước servlet. "As a resource." không phải cách đăng ký thành phần xử lý yêu cầu; thẻ resource-ref trong web.xml chỉ khai báo tham chiếu tới tài nguyên JNDI như DataSource.
Mở trang câu hỏi này →
AViewResolver
BHandlerMapping
CController
DModel
Lời giải
Đáp án đúng: "HandlerMapping". Luồng xử lý của DispatcherServlet: nhận yêu cầu, hỏi các HandlerMapping, chẳng hạn RequestMappingHandlerMapping đọc @RequestMapping, @GetMapping, để tìm handler (phương thức controller) cùng các interceptor phù hợp, rồi dùng HandlerAdapter gọi handler, nhận model và tên view, cuối cùng nhờ ViewResolver phân giải view. "ViewResolver" xuất hiện ở cuối luồng, đổi tên view logic thành view thật, không chọn controller. "Controller" là chính đối tượng cần được tìm ra, nó không tự quyết định yêu cầu nào thuộc về mình. "Model" chỉ là vùng chứa dữ liệu truyền từ controller sang view, không tham gia việc định tuyến yêu cầu.
Mở trang câu hỏi này →
AUnrelated to Spring MVC and cannot bind to model attributes
BBinding-aware JSP tags that integrate with Spring MVC to bind form fields to model properties
CA replacement for HTML input elements and attributes
DOnly supports GET forms and not POST
Lời giải
Đáp án đúng: "Binding-aware JSP tags that integrate with Spring MVC to bind form fields to model properties". Thư viện thẻ form của Spring cung cấp các thẻ JSP như form:form, form:input, form:select, form:errors; thẻ form:form gắn với một đối tượng trong model qua modelAttribute, mỗi form:input với thuộc tính path đọc giá trị thuộc tính tương ứng để điền sẵn và đặt tên trường đúng, để khi gửi lên data binding của Spring MVC gán ngược vào đối tượng, còn form:errors hiển thị lỗi kiểm hợp lệ. "Unrelated to Spring MVC and cannot bind to model attributes" sai vì gắn với model attribute chính là lý do thư viện tồn tại. "A replacement for HTML input elements and attributes" sai vì các thẻ này cuối cùng vẫn sinh ra thẻ HTML input, select chuẩn và cho truyền thuộc tính HTML qua; chúng bổ sung khả năng binding chứ không thay thế HTML. "Only supports GET forms and not POST" sai vì form:form mặc định dùng POST và còn hỗ trợ PUT, DELETE qua trường ẩn kết hợp HiddenHttpMethodFilter.
Mở trang câu hỏi này →
ATo handle user input.
BTo display data to the user.
CTo manage the application's data and business logic.
DTo route requests to the appropriate handlers.
Lời giải
Đáp án đúng: "To manage the application's data and business logic.". Trong mẫu MVC (Model-View-Controller), Model là phần nắm dữ liệu và quy tắc nghiệp vụ của ứng dụng, độc lập với cách hiển thị; trong Spring MVC, phần này gồm các thực thể, service và repository, còn đối tượng Model truyền sang view chỉ là chỗ đựng dữ liệu mà controller đã chuẩn bị. "To handle user input." là vai trò của Controller, nơi nhận yêu cầu, đọc tham số rồi gọi Model. "To display data to the user." là vai trò của View, như template Thymeleaf hoặc trang JSP, chỉ trình bày dữ liệu nhận được. "To route requests to the appropriate handlers." là việc của bộ điều phối như DispatcherServlet cùng HandlerMapping trong Spring MVC, thuộc khung xử lý chứ không phải Model.
Mở trang câu hỏi này →
A@ExceptionHandler methods handle exceptions across all controllers by default; @ControllerAdvice limits them to one controller
B@ExceptionHandler only works with REST controllers; @ControllerAdvice only with MVC controllers
C@ExceptionHandler in a controller handles exceptions for that controller; @ControllerAdvice can apply such handlers globally
DBoth are deprecated in favor of filters
Lời giải

Đáp án đúng: "@ExceptionHandler in a controller handles exceptions for that controller; @ControllerAdvice can apply such handlers globally". Phương thức @ExceptionHandler khai báo trong một controller chỉ bắt ngoại lệ ném ra từ các handler của chính controller đó; muốn dùng chung cho nhiều controller, ta đặt các phương thức @ExceptionHandler vào một lớp @ControllerAdvice hoặc @RestControllerAdvice, và mặc định lớp này áp cho mọi controller, có thể thu hẹp bằng basePackages hay assignableTypes. Phát biểu "handle exceptions across all controllers by default; @ControllerAdvice limits them to one controller" nói ngược hoàn toàn vai trò của hai annotation. Phát biểu "only works with REST controllers; @ControllerAdvice only with MVC controllers" sai vì cả hai dùng được cho controller trả view lẫn controller REST. "Both are deprecated in favor of filters" sai vì cả hai vẫn là cơ chế chính thức trong Spring hiện nay; filter chạy trước DispatcherServlet nên không thay được việc xử lý ngoại lệ ở tầng handler.

Mở trang câu hỏi này →
Aapplication.yml
Bpom.xml / build.gradle
Cbeans.xml
Dsettings.json
Lời giải
Đáp án đúng: "pom.xml / build.gradle". Dependency của dự án Spring Boot được khai báo trong tệp build: với Maven là pom.xml, thường kế thừa spring-boot-starter-parent và liệt kê các starter như spring-boot-starter-web; với Gradle là build.gradle dùng plugin org.springframework.boot. Công cụ build đọc tệp này để tải thư viện về classpath, rồi Spring Boot dựa vào thư viện có mặt mà tự cấu hình. "application.yml" là tệp cấu hình thuộc tính lúc chạy như cổng server hay chuỗi kết nối cơ sở dữ liệu, không khai báo thư viện. "beans.xml" là tệp định nghĩa bean kiểu XML của Spring truyền thống. "settings.json" là tệp cài đặt của trình soạn thảo như VS Code, không liên quan tới dependency của dự án.
Mở trang câu hỏi này →
A@Component
B@Service
C@SpringBootApplication
D@Repository
Lời giải
Đáp án đúng: "@SpringBootApplication". Lớp chứa phương thức main gọi SpringApplication.run thường được gắn @SpringBootApplication, một annotation tổng hợp gồm @SpringBootConfiguration (lớp cấu hình), @EnableAutoConfiguration (bật tự cấu hình theo thư viện có trên classpath) và @ComponentScan (quét bean bắt đầu từ package của chính lớp đó); vì vậy lớp main nên đặt ở package gốc. "@Component" chỉ đánh dấu một lớp là bean thông thường, không bật tự cấu hình hay quét thành phần. "@Service" là stereotype cho tầng nghiệp vụ. "@Repository" là stereotype cho tầng truy cập dữ liệu, kèm dịch exception lưu trữ. Gắn @Component, @Service hay @Repository lên lớp main chỉ biến nó thành bean chứ không khởi động được cơ chế của Spring Boot.
Mở trang câu hỏi này →
ASpring MVC
BSpring Data JPA
CStarter dependencies
DSpring Security
Lời giải
Đáp án đúng: "Starter dependencies". Spring Boot starter là các gói phụ thuộc gom sẵn như spring-boot-starter-web hay spring-boot-starter-data-jpa: thêm một starter là kéo về bộ thư viện tương thích phiên bản với nhau, và việc các thư viện đó xuất hiện trên classpath kích hoạt auto-configuration tạo sẵn bean như DispatcherServlet, DataSource, EntityManagerFactory. Nói chặt, auto-configuration là một cơ chế riêng, nhưng starter là phần đưa phụ thuộc vào để nó hoạt động, nên đây là tính năng khớp mô tả. "Spring MVC" là framework web, thứ được starter web cấu hình, không phải tính năng cấu hình sẵn. "Spring Data JPA" là mô-đun truy cập dữ liệu, cũng chỉ là đối tượng được cấu hình. "Spring Security" là framework bảo mật, cung cấp xác thực, phân quyền chứ không phải cơ chế gom phụ thuộc.
Mở trang câu hỏi này →