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 cuối kỳ 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
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 →
ADefining user interfaces.
BImplementing cross-cutting concerns like logging and security.
CManaging database transactions.
DCreating web service clients.
Lời giải
Đáp án đúng: "Implementing cross-cutting concerns like logging and security.". AOP (Aspect-Oriented Programming, lập trình hướng khía cạnh) tách những mối quan tâm cắt ngang (cross-cutting concern) như ghi log, kiểm tra quyền, đo thời gian, quản lý giao dịch ra khỏi mã nghiệp vụ: ta viết chúng một lần trong một aspect với advice như @Before hay @Around, chỉ định nơi áp dụng bằng pointcut, và Spring tạo proxy bọc quanh bean để chèn advice khi phương thức được gọi. "Defining user interfaces." là việc của tầng view như Thymeleaf hay JavaFX, không phải AOP. "Managing database transactions." là một ứng dụng cụ thể của AOP, vì @Transactional chạy qua proxy và advice giao dịch, nhưng đó chỉ là một trường hợp, còn mục đích chung của AOP rộng hơn nhiều. "Creating web service clients." thuộc RestTemplate, WebClient hay OpenFeign, không phải mục đích của AOP.
Mở trang câu hỏi này →
ADispatcherServlet
BBeanFactory or ApplicationContext
CViewResolver
DHandlerMapping
Lời giải
Đáp án đúng: "BeanFactory or ApplicationContext". Spring Core Container chính là IoC container, với BeanFactory là interface gốc và ApplicationContext là bản mở rộng thường dùng; chúng đọc cấu hình, tạo bean, tiêm phụ thuộc, gọi các callback khởi tạo như @PostConstruct, quản lý phạm vi singleton hay prototype và gọi callback huỷ khi đóng context, tức nắm toàn bộ vòng đời bean. "DispatcherServlet" là front controller của Spring MVC, nhận yêu cầu HTTP và điều phối tới controller; nó lấy bean từ một WebApplicationContext chứ không tự quản lý vòng đời bean. "ViewResolver" chỉ ánh xạ tên view logic thành view thật như trang Thymeleaf. "HandlerMapping" chỉ tìm handler phù hợp cho một yêu cầu. Các thành phần web vừa kể đều nằm ngoài Core Container và chính chúng cũng là bean do container quản lý.
Mở trang câu hỏi này →
AAspect
BAdvice
CJoin Point
DPointcut
Lời giải
Đáp án đúng: "Join Point". Join point (điểm nối) là một thời điểm cụ thể trong quá trình thực thi chương trình nơi advice có thể được áp vào, như lời gọi phương thức, xử lý ngoại lệ hay gán trường; Spring AOP dựa trên proxy nên chỉ hỗ trợ join point là việc thực thi phương thức của bean. "Aspect" là mô-đun gom một mối quan tâm cắt ngang như ghi log hay giao dịch, chứa cả advice lẫn pointcut, không phải một điểm trong luồng chạy. "Advice" là hành động được thực thi tại join point, ví dụ Before, After hay Around, tức là cái được áp vào chứ không phải nơi áp. "Pointcut" là biểu thức chọn ra những join point nào sẽ nhận advice, ví dụ một biểu thức execution chọn mọi phương thức trong gói service; nó lọc các điểm chứ bản thân không phải là một điểm thực thi.
Mở trang câu hỏi này →
ABy adding a foreign key column to one of the entities.
BBy adding a foreign key column to both entities.
CBy using a join table that contains foreign keys referencing both entities.
DBy storing the related entities in a serialized format within a single column.
Lời giải
Đáp án đúng: "By using a join table that contains foreign keys referencing both entities.". Trong mô hình quan hệ, một hàng ở bảng này có thể liên kết với nhiều hàng ở bảng kia và ngược lại, nên không cột khoá ngoại đơn nào diễn tả được; JPA dùng bảng nối (join table) mà mỗi hàng gồm hai khoá ngoại trỏ về khoá chính của hai thực thể, có thể đặt tên qua @JoinTable với joinColumns và inverseJoinColumns, ví dụ bảng student_course giữa Student và Course. "By adding a foreign key column to one of the entities." là cách biểu diễn quan hệ một nhiều hoặc một một, một cột chỉ chứa được một giá trị nên không chứa nổi nhiều liên kết. "By adding a foreign key column to both entities." vẫn chỉ cho mỗi hàng trỏ tới đúng một hàng bên kia, không thành nhiều nhiều. "By storing the related entities in a serialized format within a single column." phá vỡ chuẩn hoá, không truy vấn hay ràng buộc toàn vẹn được, JPA không dùng cách đó cho quan hệ.
Mở trang câu hỏi này →
AObjects control the creation of their dependencies.
BThe framework or container controls the creation and management of objects.
CObjects are responsible for managing the application's flow.
DMethods control the instantiation of classes.
Lời giải
Đáp án đúng: "The framework or container controls the creation and management of objects.". Inversion of Control (đảo ngược điều khiển) nghĩa là đối tượng không tự new các phụ thuộc và không tự quyết định vòng đời của mình nữa; quyền đó chuyển cho container, trong Spring là ApplicationContext, nơi đọc cấu hình, tạo bean, tiêm phụ thuộc qua Dependency Injection, gọi các callback khởi tạo và huỷ. Mã ứng dụng chỉ khai báo mình cần gì. "Objects control the creation of their dependencies." mô tả đúng cách làm truyền thống mà IoC muốn đảo ngược, khi lớp tự gọi new cho phụ thuộc và bị gắn chặt vào cài đặt cụ thể. "Objects are responsible for managing the application's flow." cũng là kiểu điều khiển truyền thống, mã của ta gọi thư viện, trong khi với IoC chính framework gọi ngược vào mã của ta. "Methods control the instantiation of classes." chỉ là cách nói khác của việc tự tạo đối tượng, như factory method do lập trình viên tự viết, không chuyển quyền cho container.
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 →
Apersist()
Binsert()
Csave()
Dupdate()
Lời giải
Đáp án đúng: "save()". JpaRepository kế thừa CrudRepository nên có save(S entity); cài đặt mặc định SimpleJpaRepository kiểm tra entity mới hay cũ (thường dựa vào id null hoặc trường @Version): entity mới thì gọi entityManager.persist để INSERT, entity đã có thì gọi entityManager.merge để UPDATE, rồi trả về thực thể đang được quản lý. "persist()" là phương thức của EntityManager trong JPA thuần, chỉ dùng cho entity mới và không nằm trong interface JpaRepository. "insert()" không tồn tại trong JpaRepository; Spring Data không tách riêng thao tác chèn. "update()" cũng không phải phương thức của JpaRepository; muốn cập nhật thì sửa entity rồi gọi save, hoặc viết phương thức có @Modifying kèm @Query.
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 →
AGridPane
BBorderPane
CVBox
DHBox
Lời giải
Đáp án đúng: "BorderPane". BorderPane là layout của JavaFX chia vùng chứa thành năm khu vực theo các cạnh: top, bottom, left, right và center, đặt nút bằng setTop, setBottom, setLeft, setRight, setCenter; vùng center chiếm phần diện tích còn lại, rất hợp cho bố cục cửa sổ có thanh menu ở trên, thanh trạng thái ở dưới và nội dung chính ở giữa. "GridPane" sắp nút theo lưới hàng và cột, định vị bằng chỉ số hàng cột chứ không theo vùng biên. "VBox" xếp các nút con thành một cột dọc từ trên xuống. "HBox" xếp các nút con thành một hàng ngang từ trái sang phải. Cả GridPane, VBox lẫn HBox đều không có khái niệm các vùng biên của cửa sổ, muốn có bố cục như vậy phải lồng nhiều layout.
Mở trang câu hỏi này →
AEncrypt API data
BRender views
CManage database transactions programmatically
DBuild Spring Boot jars
Lời giải
Đáp án đúng: "Manage database transactions programmatically". PlatformTransactionManager là interface trung tâm của hạ tầng giao dịch Spring, với các phương thức getTransaction, commit và rollback; có các hiện thực như DataSourceTransactionManager cho JDBC và JpaTransactionManager cho JPA. Lập trình viên có thể gọi trực tiếp hoặc qua TransactionTemplate để quản lý giao dịch bằng mã, và chính @Transactional kiểu khai báo cũng dựa vào nó phía sau. "Encrypt API data" sai vì mã hoá dữ liệu thuộc Spring Security hoặc thư viện mật mã, không liên quan giao dịch. "Render views" là việc của ViewResolver và view như Thymeleaf. "Build Spring Boot jars" là việc của công cụ build như plugin Maven hoặc Gradle của Spring Boot, không phải một bean chạy lúc ứng dụng hoạt động.
Mở trang câu hỏi này →
AA database connection.
BA model and view.
CA user interface.
DA security token.
Lời giải
Đáp án đúng: "A model and view.". Trong Spring MVC, sau khi phương thức controller xử lý xong, nó trả cho DispatcherServlet thông tin để dựng phản hồi: hoặc một đối tượng ModelAndView chứa dữ liệu và tên view, hoặc một String tên view kèm dữ liệu đã đặt vào Model; DispatcherServlet sau đó nhờ ViewResolver tìm view và dựng HTML từ model. Với @RestController thì đối tượng trả về được chuyển thẳng thành JSON, nhưng với controller dựng trang truyền thống thì model kèm view là kết quả điển hình. "A database connection." sai vì kết nối cơ sở dữ liệu do DataSource và tầng repository quản lý, controller không trao nó ra ngoài. "A user interface." sai vì controller không tự dựng giao diện; view mới là thứ hiển thị, controller chỉ chỉ ra view nào. "A security token." sai vì token bảo mật do Spring Security hoặc tầng xác thực phát hành, không phải kết quả thông thường của một controller.
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 →
14Which annotation marks a controller?4 lựa chọn
A@Controller
B@Service
C@Repository
D@RestResource
Lời giải
Đáp án đúng: "@Controller". @Controller là stereotype annotation (annotation đánh dấu vai trò) cho lớp xử lý yêu cầu web trong Spring MVC; nó được gắn @Component nên lớp được component scanning phát hiện và đăng ký làm bean, đồng thời Spring MVC quét các phương thức có @RequestMapping hay @GetMapping trong lớp đó để làm handler. Giá trị trả về thường là tên view. "@Service" cũng là một stereotype nhưng dành cho tầng nghiệp vụ, không được coi là handler web. "@Repository" đánh dấu tầng truy cập dữ liệu và còn bật cơ chế dịch exception của tầng lưu trữ sang DataAccessException của Spring. "@RestResource" là annotation của Spring Data REST dùng để tuỳ chỉnh đường dẫn hay ẩn hiện một repository khi được xuất thành tài nguyên REST, không đánh dấu controller.
Mở trang câu hỏi này →
AOnly for handling exceptions.
BOnly for mapping requests.
CFor cross cutting concerns like logging, authentication, and authorization.
DOnly for defining views.
Lời giải
Đáp án đúng: "For cross cutting concerns like logging, authentication, and authorization.". Interceptor trong Spring MVC là lớp hiện thực HandlerInterceptor, được DispatcherServlet gọi quanh việc xử lý của handler: preHandle trước controller, postHandle sau controller nhưng trước khi render view, và afterCompletion khi yêu cầu xong; nhờ vậy nó hợp cho các mối quan tâm cắt ngang (cross-cutting concerns) áp cho nhiều controller như ghi log, kiểm tra đăng nhập, phân quyền, đo thời gian. "Only for handling exceptions." sai vì xử lý ngoại lệ có @ExceptionHandler và @ControllerAdvice, interceptor chỉ được báo ngoại lệ trong afterCompletion. "Only for mapping requests." sai vì việc ánh xạ yêu cầu tới controller do HandlerMapping làm, interceptor chỉ được gắn vào kết quả ánh xạ đó. "Only for defining views." sai vì view do controller trả về và ViewResolver phân giải; postHandle có thể chỉnh ModelAndView nhưng đó không phải mục đích duy nhất, chữ Only làm phát biểu sai.
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 →
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 →
19Spring Boot embedded servers include:4 lựa chọn
AApache Tomcat
BJetty
CUndertow
DAll of the above
Lời giải
Đáp án đúng: "All of the above". Trong các bản Spring Boot 2.x và 3.x, ứng dụng servlet được hỗ trợ sẵn ba web server nhúng (embedded server): thêm spring-boot-starter-web thì mặc định là Tomcat, và có thể loại Tomcat ra rồi thêm starter tương ứng để đổi sang Jetty hoặc Undertow; server chạy ngay trong tiến trình khi khởi động ứng dụng từ tệp jar, không cần cài server ngoài. "Apache Tomcat" đúng nhưng chỉ là lựa chọn mặc định, chọn riêng nó bỏ sót hai server kia. "Jetty" là server nhúng nhẹ của Eclipse, được hỗ trợ qua spring-boot-starter-jetty, nhưng cũng chỉ là một phần của danh sách. "Undertow" là server hiệu năng cao của Red Hat, hỗ trợ qua spring-boot-starter-undertow, cũng chưa đủ. Vì câu hỏi liệt kê các server nhúng nên chọn đáp án bao gồm cả ba.
Mở trang câu hỏi này →
ADatabase connectivity.
BWeb application development.
CSecurity configuration.
DMessaging.
Lời giải
Đáp án đúng: "Web application development.". spring-boot-starter-web là starter POM (gói phụ thuộc khởi đầu) gom sẵn Spring MVC, Jackson để chuyển đổi JSON và Tomcat nhúng, đủ để viết ứng dụng web và REST API chỉ với một phụ thuộc; auto-configuration sẽ tự dựng DispatcherServlet và máy chủ nhúng khi thấy các thư viện này trên classpath. "Database connectivity." sai vì kết nối cơ sở dữ liệu đến từ spring-boot-starter-data-jpa hoặc spring-boot-starter-jdbc. "Security configuration." sai vì bảo mật có starter riêng là spring-boot-starter-security. "Messaging." sai vì nhắn tin dùng các starter như spring-boot-starter-amqp cho RabbitMQ hay thư viện spring-kafka, không nằm trong starter web.
Mở trang câu hỏi này →