HSF302Chưa đoKỳ 5Tự chọn Cập nhật 1 ngày trước
HSF302 - Làm việc với Spring Framework
179Câu hỏi
5Bộ đề
9Chủ đề
Câu hỏi của môn
104/179 câuCòn 75
A
em.persist(entity);B
em.remove(entity);C
em.find(Entity.class, id);D
em.merge(entity);Lời giải
Mở trang câu hỏi này →Đáp án đúng: "em.find(Entity.class, id); ". Phương thức find của EntityManager tìm thực thể theo khoá chính: trước hết nó tra trong persistence context, nếu chưa có thì phát câu SELECT, rồi trả về đối tượng đã được quản lý hoặc null nếu không tồn tại; đây là thao tác đọc (Read) trong CRUD. "em.persist(entity); " đưa một thực thể mới vào trạng thái được quản lý để INSERT khi flush, tức thao tác tạo. "em.remove(entity); " đánh dấu thực thể đang được quản lý để xoá, sinh DELETE khi flush. "em.merge(entity);"chép trạng thái của một thực thể tách rời (detached) vào bản được quản lý và trả về bản đó, dùng để cập nhật chứ không phải đọc.
86In a JavaFX application with JPA, where is the EntityManager typically created and managed?4 lựa chọn
AIn the View layer.
BIn the Controller or Service layer.
CDirectly in the Entity class.
DInside the JavaFX Application class.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "In the Controller or Service layer.". EntityManager là giao diện JPA thao tác với persistence context (ngữ cảnh lưu trữ), được tạo từ EntityManagerFactory; trong ứng dụng JavaFX không có Spring quản lý, nó thường được tạo và đóng ở tầng xử lý phía sau giao diện, mỗi thao tác hoặc mỗi giao dịch một EntityManager. Nói chặt chẽ thì thiết kế chuẩn đặt EntityManager ở tầng service hoặc DAO, còn controller JavaFX chỉ nên gọi service, nên việc gộp cả Controller vào đây hơi lỏng; dù vậy đây vẫn là lựa chọn duy nhất chỉ đúng vùng xử lý nghiệp vụ. "In the View layer." sai vì tầng giao diện chỉ hiển thị, đưa truy cập dữ liệu vào đó phá vỡ việc tách lớp. "Directly in the Entity class." sai vì entity là đối tượng được EntityManager quản lý, để nó tự giữ EntityManager là đảo ngược quan hệ. "Inside the JavaFX Application class." sai vì lớp Application lo vòng đời cửa sổ, đặt EntityManager ở đó là trộn giao diện với truy cập dữ liệu.
87Which JavaFX layout component is often used to arrange input fields and buttons in a CRUD form?4 lựa chọn
AHBox/VBox
BBorderPane
CGridPane
DStackPane
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "GridPane". GridPane xếp các Node theo lưới hàng và cột, mỗi phần tử đặt bằng add(node, cột, hàng), nên trong form CRUD có thể đặt nhãn ở cột trái, ô nhập ở cột phải, mọi hàng thẳng cột với nhau và hàng nút ở dưới cùng; đó là bố cục điển hình cho form nhập liệu. "HBox/VBox" là chỗ có thể tranh cãi: lồng VBox chứa nhiều HBox cũng dựng được một form đơn giản, nhưng mỗi HBox tính độ rộng riêng nên nhãn và ô nhập không tự thẳng hàng giữa các dòng, phải chỉnh tay, vì thế với form nhiều trường GridPane vẫn là lựa chọn tiêu biểu. "BorderPane" chia vùng thành top, bottom, left, right, center, hợp cho khung tổng thể của cửa sổ, và form thường được đặt vào vùng center của nó. "StackPane" xếp chồng các Node lên nhau, hợp cho lớp phủ hay căn giữa một phần tử, không hợp để xếp nhiều trường nhập.
A
LabelB
TextFieldC
TableViewD
ButtonLời giải
Mở trang câu hỏi này →Đáp án đúng: "TableView". TableView là control của JavaFX hiển thị danh sách đối tượng dạng bảng: mỗi cột là một TableColumn gắn cellValueFactory, thường là PropertyValueFactory hoặc lambda trỏ tới thuộc tính của đối tượng, còn dữ liệu là một ObservableList nên khi danh sách thay đổi bảng tự cập nhật; nó hỗ trợ sắp xếp theo cột, chọn dòng và sửa ô, rất hợp để hiện kết quả truy vấn JPA. "Label" chỉ hiển thị một đoạn chữ hoặc biểu tượng tĩnh. "TextField" là ô nhập một dòng văn bản để người dùng gõ dữ liệu. "Button" là nút bấm phát sinh sự kiện ActionEvent khi được nhấn. Không control nào trong số này có cấu trúc hàng và cột để trình bày dữ liệu dạng bảng.
A
EntityManagerB
JdbcTemplateC
SessionFactoryD
RepositoryLời giải
Mở trang câu hỏi này →Đáp án đúng: "JdbcTemplate". Trong Spring JDBC, JdbcTemplate là lớp chạy câu SQL: query với RowMapper để đọc nhiều dòng, queryForObject để lấy một giá trị, update để thêm, sửa, xoá; nó lo mở, đóng kết nối và dịch SQLException thành DataAccessException. "EntityManager" là API của JPA, làm việc với thực thể và JPQL chứ không phải công cụ của Spring JDBC. "SessionFactory" là của Hibernate gốc, tạo Session để thao tác ORM, cũng không thuộc Spring JDBC. "Repository" là khái niệm tầng truy cập dữ liệu, ứng với annotation @Repository hoặc interface của Spring Data; bên trong một repository có thể dùng JdbcTemplate, nhưng bản thân Repository không phải lớp thực thi SQL.
ADispatcherServlet → HandlerMapping → HandlerAdapter → Controller → ViewResolver
BViewResolver → Controller → DispatcherServlet
CController → View → Model → DispatcherServlet
DHandler → Controller → DispatcherServlet
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "DispatcherServlet → HandlerMapping → HandlerAdapter → Controller → ViewResolver". Yêu cầu tới DispatcherServlet trước tiên; DispatcherServlet hỏi HandlerMapping để tìm handler khớp URL, rồi nhờ HandlerAdapter (thường là RequestMappingHandlerAdapter) gọi phương thức controller với các tham số đã gắn; controller trả tên view và model, DispatcherServlet đưa tên view cho ViewResolver để lấy đối tượng View rồi dựng phản hồi. "ViewResolver → Controller → DispatcherServlet" đảo ngược hoàn toàn: ViewResolver chỉ có việc khi controller đã trả về tên view, không thể đứng đầu. "Controller → View → Model → DispatcherServlet" sai vì controller không nhận yêu cầu trực tiếp, model được chuẩn bị trước khi dựng view, và DispatcherServlet là điểm vào chứ không phải điểm cuối. "Handler → Controller → DispatcherServlet" sai vì bỏ qua HandlerMapping, HandlerAdapter, ViewResolver và lại đặt DispatcherServlet ở cuối, trong khi handler chính là controller được tìm thấy sau khi DispatcherServlet nhận yêu cầu.
91In a Spring MVC application, which file is typically used to configure the DispatcherServlet?4 lựa chọn
Aapplication.properties
Bdispatcher-servlet.xml
Cweb.xml
Dconfig.xml
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "web.xml". Trong ứng dụng Spring MVC kiểu truyền thống triển khai dạng war, DispatcherServlet được khai báo và ánh xạ trong tệp mô tả triển khai WEB-INF/web.xml bằng thẻ servlet và servlet-mapping, kèm init-param contextConfigLocation trỏ tới tệp cấu hình bean. "dispatcher-servlet.xml" là điểm dễ gây tranh cãi vì tên nó gợi tới DispatcherServlet, nhưng đó là tệp chứa định nghĩa bean cho ngữ cảnh web riêng của servlet như controller và ViewResolver, theo quy ước tên servlet cộng -servlet.xml, chứ không phải nơi khai báo servlet; servlet phải có trong web.xml thì tệp này mới được nạp. "application.properties" là tệp cấu hình của Spring Boot, mà Spring Boot tự đăng ký DispatcherServlet nên không cần cả web.xml lẫn dispatcher-servlet.xml. "config.xml" không phải tên tệp chuẩn nào của Spring MVC.
92Which Spring annotation manages transactions?4 lựa chọn
A@Autowired
B@Transactional
C@Service
D@Entity
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "@Transactional". @Transactional đặt trên lớp hoặc phương thức để Spring bọc lời gọi trong một giao dịch: proxy AOP mở giao dịch qua PlatformTransactionManager trước khi chạy phương thức, commit nếu kết thúc bình thường và rollback nếu ném RuntimeException hay Error; có thể chỉnh propagation, isolation, readOnly, timeout, rollbackFor. Lưu ý lời gọi từ chính bên trong cùng lớp không đi qua proxy nên không được áp giao dịch. "@Autowired" chỉ tiêm phụ thuộc vào bean. "@Service" đánh dấu bean tầng nghiệp vụ; tầng này thường là nơi đặt @Transactional nhưng bản thân annotation đó không mở giao dịch nào. "@Entity" đánh dấu lớp được JPA ánh xạ tới bảng, mô tả dữ liệu chứ không điều khiển giao dịch.
93What will be rendered in browser from this Spring MVC controller method?
@GetMapping("/hello")
@ResponseBody4 lựa chọncó code
public String sayHello() {
return "Hello, Spring!";
}AA view named "Hello, Spring!"
BA JSON response
CA plain text response: Hello, Spring!
DAn HTML file from the templates directory
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "A plain text response: Hello, Spring!". Lần theo mã: @GetMapping với đường dẫn /hello ánh xạ yêu cầu GET /hello vào phương thức sayHello, và @ResponseBody báo Spring MVC ghi giá trị trả về thẳng vào thân phản hồi thay vì coi nó là tên view; giá trị kiểu String được StringHttpMessageConverter ghi nguyên văn, nên trình duyệt hiện đúng chuỗi Hello, Spring! dưới dạng văn bản. "A view named "Hello, Spring!"" chỉ xảy ra khi bỏ @ResponseBody, lúc đó chuỗi trả về mới được ViewResolver hiểu là tên view. "A JSON response" sai vì với kiểu String, converter chuỗi được ưu tiên trước Jackson nên chuỗi không bị bọc thành JSON. "An HTML file from the templates directory" sai vì không có view nào được phân giải, thư mục templates chỉ được dùng khi trả về tên view mà không có @ResponseBody.
ATo manage database connections.
BTo ensure the correctness of individual components.
CTo define user interfaces.
DTo configure application security.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To ensure the correctness of individual components.". Unit test (kiểm thử đơn vị) kiểm từng thành phần nhỏ như một phương thức service hay một lớp tiện ích một cách cô lập: các phụ thuộc như repository được thay bằng đối tượng giả (mock) qua Mockito, rồi so kết quả với kỳ vọng bằng JUnit; nhờ constructor injection, có thể tự tạo lớp cần kiểm và truyền mock vào mà không cần khởi động cả Spring context, giúp phát hiện lỗi sớm và tự tin khi sửa mã. "To manage database connections." sai vì quản lý kết nối là việc của DataSource và connection pool, còn unit test thường cố tình không chạm cơ sở dữ liệu thật. "To define user interfaces." sai vì giao diện được định nghĩa bằng template hoặc mã view; test chỉ kiểm hành vi. "To configure application security." sai vì bảo mật được cấu hình bằng Spring Security; test có thể kiểm cấu hình ấy hoạt động đúng nhưng không phải nơi cấu hình nó.
AAutomatic repository implementation generation.
BSupport for JavaScript front-end development.
CBuilt-in load balancing.
DReal-time video streaming.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Automatic repository implementation generation.". Điểm mạnh then chốt của Spring Data JPA là lập trình viên chỉ cần khai báo một interface kế thừa JpaRepository hay CrudRepository, Spring tự sinh lớp hiện thực lúc chạy, có sẵn save, findById, findAll, delete, và còn tự suy câu truy vấn từ tên phương thức như findByEmail hay findByAgeGreaterThan, nhờ vậy gần như không phải viết DAO thủ công. "Support for JavaScript front-end development." không thuộc phạm vi Spring Data JPA, đây là thư viện truy cập dữ liệu phía server. "Built-in load balancing." là việc của hạ tầng như Spring Cloud LoadBalancer hay bộ cân bằng tải, không phải tầng repository. "Real-time video streaming." hoàn toàn không liên quan tới truy cập cơ sở dữ liệu quan hệ.
96What is the purpose of the EntityManager in JPA?4 lựa chọn
ATo manage application configurations.
BTo manage persistent entities.
CTo handle user authentication.
DTo create user interfaces.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To manage persistent entities.". EntityManager là giao diện JPA gắn với một persistence context, tập các entity đang ở trạng thái managed; nó cung cấp persist, find, merge, remove, refresh, detach, flush và createQuery, đồng thời theo dõi thay đổi trên các entity managed để tự đồng bộ xuống cơ sở dữ liệu khi flush hoặc commit giao dịch. Trong Spring, EntityManager được tiêm bằng @PersistenceContext và các repository của Spring Data JPA cũng gọi nó bên dưới. "To manage application configurations." là việc của Environment và cơ chế properties của Spring Boot. "To handle user authentication." là việc của Spring Security với AuthenticationManager. "To create user interfaces." thuộc tầng hiển thị như Thymeleaf hay JavaFX, không phải tầng lưu trữ.
AReduced boilerplate code for data access.
BEnhanced security for front-end applications.
CSimplified network configuration.
DImproved performance for video encoding.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Reduced boilerplate code for data access.". Spring Data JPA cho phép chỉ khai báo một interface kế thừa JpaRepository, Spring tự sinh hiện thực lúc chạy với sẵn các thao tác CRUD, phân trang, sắp xếp, còn suy ra truy vấn từ tên phương thức như findByEmail hoặc nhận JPQL qua @Query; nhờ vậy bỏ được phần lớn mã lặp lại (boilerplate) như tự viết DAO, gọi EntityManager, dựng truy vấn. "Enhanced security for front-end applications." sai vì bảo mật thuộc Spring Security, và Spring Data JPA chạy ở phía server, không liên quan giao diện front-end. "Simplified network configuration." sai vì nó không cấu hình mạng; kết nối cơ sở dữ liệu vẫn do DataSource đảm nhận. "Improved performance for video encoding." hoàn toàn ngoài phạm vi, Spring Data JPA chỉ lo truy cập dữ liệu qua JPA.
A
findAllSortByLastNameAsc()B
findByOrderLastNameAsc()C
findByAgeGreaterThanOrderByLastNameAsc(int age)D
orderByLastNameAscFindAll()Lời giải
Mở trang câu hỏi này →Đáp án đúng: "findByAgeGreaterThanOrderByLastNameAsc(int age)". Cú pháp derived query của Spring Data là tiền tố kết thúc bằng By, tiếp theo là điều kiện, rồi mệnh đề OrderBy kèm thuộc tính và Asc hoặc Desc ở cuối; tên này phân tích thành lọc age lớn hơn tham số và sắp theo lastName tăng dần. Tên này còn lọc thêm theo age chứ không chỉ sắp xếp, nhưng nó là tên duy nhất hợp lệ trong số được đưa ra vì OrderBy đứng sau điều kiện và có đủ chữ By, và kết quả vẫn sắp theo lastName tăng dần như câu hỏi yêu cầu. "findAllSortByLastNameAsc()" sai vì Sort không phải từ khoá: bộ phân tích coi LastNameAsc là điều kiện lọc theo thuộc tính lastNameAsc không tồn tại. "findByOrderLastNameAsc()" sai vì thiếu By sau Order nên OrderLastNameAsc bị coi là tên thuộc tính. "orderByLastNameAscFindAll()" sai vì không mở bằng tiền tố như find, và mệnh đề sắp xếp phải nằm cuối.
99Which annotation marks repository class?4 lựa chọn
A@Repository
B@Entity
C@Service
D@Bean
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "@Repository". @Repository là stereotype annotation (annotation khuôn mẫu) đánh dấu một lớp thuộc tầng truy cập dữ liệu: nó là một dạng @Component nên được component scan đăng ký thành bean, và còn được PersistenceExceptionTranslationPostProcessor bọc để dịch ngoại lệ riêng của JPA hay Hibernate thành DataAccessException thống nhất của Spring. "@Entity" là annotation của JPA đánh dấu lớp được ánh xạ sang bảng, tức lớp dữ liệu chứ không phải lớp repository. "@Service" đánh dấu lớp tầng nghiệp vụ, cũng là @Component nhưng không có cơ chế dịch ngoại lệ dữ liệu. "@Bean" không gắn lên lớp mà gắn lên phương thức trong lớp @Configuration để khai báo bean thủ công.
100In Spring Data JPA, what does the method signature4 lựa chọncó code
List<Entity> findByPropertyOrderByPropertyAsc(String property);do?
AFinds entities where property is equal to String property, ordered by property descending.
BFinds entities where property is equal to String property, ordered by property ascending.
CFinds entities where property contains String property, ordered by property ascending.
DFinds entities where property is less than String property, ordered by property ascending.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Finds entities where property is equal to String property, ordered by property ascending.". Spring Data JPA phân tích tên phương thức để sinh truy vấn: tiền tố findBy mở phần điều kiện, Property không đi kèm từ khoá nào nên mặc định là phép so sánh bằng với tham số String property, còn OrderByPropertyAsc thêm mệnh đề sắp xếp tăng dần theo chính thuộc tính đó; truy vấn tương đương là WHERE property = ?1 ORDER BY property ASC, trả về List các entity. "Finds entities where property is equal to String property, ordered by property descending." sai ở chiều sắp xếp, vì Asc là tăng dần, muốn giảm dần phải viết Desc. "Finds entities where property contains String property, ordered by property ascending." cần từ khoá Containing trong tên, như findByPropertyContaining, để sinh LIKE có ký tự đại diện hai đầu. "Finds entities where property is less than String property, ordered by property ascending." cần từ khoá LessThan, như findByPropertyLessThan.
AA web templating engine
BA library for UI development
CA JPA implementation that simplifies ORM
DA Java compiler extension
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "A JPA implementation that simplifies ORM". Hibernate là framework ORM (Object Relational Mapping, ánh xạ đối tượng sang quan hệ) cho Java và là hiện thực JPA phổ biến nhất, cũng là persistence provider mặc định của Spring Boot khi dùng spring-boot-starter-data-jpa; nó ánh xạ lớp thực thể thành bảng, tự sinh SQL, quản lý persistence context, lazy loading và bộ đệm, giúp lập trình viên thao tác đối tượng thay vì viết JDBC thủ công. "A web templating engine" mô tả Thymeleaf hoặc FreeMarker, những công cụ sinh trang HTML. "A library for UI development" mô tả JavaFX hay Swing, không liên quan tầng dữ liệu. "A Java compiler extension" sai vì Hibernate là thư viện chạy lúc runtime, không mở rộng trình biên dịch; dù có công cụ sinh metamodel lúc biên dịch, đó không phải bản chất của nó.
AStage
BScene
CNode
DPane
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Scene". Trong JavaFX, Scene là vùng chứa toàn bộ nội dung của scene graph (đồ thị cảnh): nó giữ một nút gốc, thường là một Pane, và mọi Button, Label, hình vẽ đều nằm dưới nút gốc đó. "Stage" là cửa sổ cấp cao nhất do hệ điều hành cung cấp; nó bao ngoài và chứa Scene qua setScene chứ không trực tiếp chứa các nút giao diện, đổi Scene là đổi toàn bộ nội dung trong cùng một cửa sổ. "Node" là lớp cơ sở của từng phần tử trong scene graph, mỗi node chỉ là một mảnh nội dung chứ không phải vùng chứa tất cả. "Pane" là một node bố cục có thể chứa các node con và hay được dùng làm nút gốc, nhưng nó chỉ chứa phần nội dung đặt trong nó và bản thân vẫn phải nằm trong một Scene mới hiển thị được.
103What is the result of calling the following code in a Spring MVC controller?
@RequestMapping("/")4 lựa chọncó code
public String index() {
return "home";
}ARenders the "home.html" page directly
BReturns plain text "home"
CRedirects to "/home"
DResolves "home" as a view name using ViewResolver
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Resolves "home" as a view name using ViewResolver". Trong một @Controller thường, phương thức trả về String mà không có @ResponseBody thì chuỗi đó được hiểu là tên view logic; DispatcherServlet chuyển tên home cho ViewResolver, ví dụ ThymeleafViewResolver ghép tiền tố classpath:/templates/ và hậu tố .html để tìm template, rồi View mới render ra HTML. "Renders the "home.html" page directly" sai ở chữ trực tiếp: controller không tự mở tệp nào, mọi việc phải qua bước phân giải view, và tên tệp thật phụ thuộc cấu hình resolver. "Returns plain text "home"" chỉ đúng khi có @ResponseBody hoặc lớp là @RestController. "Redirects to "/home"" chỉ xảy ra khi chuỗi trả về có tiền tố redirect:, như redirect:/home.
104In a ManyToMany relationship, which table is used to store the relationship between the two entities?4 lựa chọn
AThe table of the first entity.
BThe table of the second entity.
CA join table.
DA temporary table.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "A join table.". Quan hệ nhiều nhiều không thể biểu diễn bằng một cột khoá ngoại ở bảng nào, vì mỗi dòng bên này ứng với nhiều dòng bên kia và ngược lại; JPA vì thế dùng một bảng nối (join table) chứa hai cột khoá ngoại trỏ tới khoá chính của hai entity, ví dụ bảng student_course gồm student_id và course_id, mô tả bằng @ManyToMany kèm @JoinTable với joinColumns và inverseJoinColumns. "The table of the first entity." không làm được vì một cột chỉ chứa một giá trị khoá ngoại, không lưu được nhiều liên kết cho cùng một dòng. "The table of the second entity." gặp đúng vấn đề đó theo chiều ngược lại. "A temporary table." chỉ tồn tại trong phiên làm việc hoặc giao dịch rồi biến mất, không giữ được quan hệ lâu dài.