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
64/179 câuCòn 115
ATo define the primary key of the entities.
BTo specify the join table and its columns.
CTo define the entity relationships.
DTo create a new database.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To specify the join table and its columns.". Trong quan hệ @ManyToMany, hai bảng thực thể được nối qua một bảng trung gian; @JoinTable đặt ở phía sở hữu quan hệ để khai báo tên bảng nối qua name, cột khoá ngoại trỏ về thực thể hiện tại qua joinColumns và cột trỏ về thực thể bên kia qua inverseJoinColumns. Nếu bỏ đi, JPA tự đặt tên bảng nối theo quy ước mặc định. "To define the primary key of the entities." sai vì khoá chính khai báo bằng @Id, có thể kèm @GeneratedValue. "To define the entity relationships." sai vì chính @ManyToMany mới định nghĩa quan hệ, @JoinTable chỉ cấu hình cách lưu quan hệ đó. "To create a new database." sai vì không annotation JPA nào tạo cơ sở dữ liệu; bảng nối có thể được sinh khi bật tính năng tạo schema, nhưng đó là bảng chứ không phải cơ sở dữ liệu.
A
lookupByEmailLikeIgnoreCase(String email)B
findByEmailContainingIgnoreCase(String email)C
queryWhereEmailContainsCaseInsensitive(String email)D
selectEmailContainsIgnoreCase(String email)Lời giải
Mở trang câu hỏi này →Đáp án đúng: "findByEmailContainingIgnoreCase(String email)". Spring Data JPA phân tích tên phương thức: tiền tố findBy mở phần điều kiện, Email là thuộc tính của entity, từ khoá Containing sinh điều kiện LIKE có ký tự đại diện ở hai đầu giá trị, còn IgnoreCase bọc cả hai vế bằng UPPER để so không phân biệt hoa thường. "lookupByEmailLikeIgnoreCase(String email)" sai vì lookup không phải tiền tố hợp lệ (chỉ có find, read, get, query, search, stream, count, exists, delete), và Like không tự thêm ký tự đại diện nên người gọi phải tự truyền dấu phần trăm. "queryWhereEmailContainsCaseInsensitive(String email)" sai vì thiếu chữ By ngăn tiền tố với điều kiện, còn Where và CaseInsensitive không phải từ khoá, nên dù Contains là đồng nghĩa của Containing thì tên vẫn không phân tích được. "selectEmailContainsIgnoreCase(String email)" sai vì select không phải tiền tố hợp lệ và cũng thiếu By, Spring Data coi cả chuỗi là tên thuộc tính không tồn tại.
A@OneToOne
B@ManyToOne
C@OneToMany
D@ManyToMany
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "@OneToMany". Annotation @OneToMany của JPA khai báo một thực thể giữ tập hợp nhiều thực thể kia, ví dụ một Department có List<Employee>; thường đi kèm mappedBy trỏ tới trường @ManyToOne ở phía Employee, và trong cơ sở dữ liệu quan hệ này được thể hiện bằng cột khoá ngoại đặt ở bảng phía nhiều. "@OneToOne" dành cho quan hệ một một, như User với Profile, mỗi bên chỉ gắn với đúng một bản ghi bên kia. "@ManyToOne" là chiều ngược lại của quan hệ một nhiều, gắn ở phía nhiều như Employee trỏ về một Department; nó cũng tham gia quan hệ này nhưng câu hỏi hỏi annotation khai báo phía một giữ nhiều. "@ManyToMany" dành cho quan hệ nhiều nhiều như Student với Course, thường cần bảng nối.
48Spring Data JPA is built on top of:4 lựa chọn
ASpring MVC
BSpring Core
CJPA
DServlets
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "JPA". Spring Data JPA là một module của dự án Spring Data, xây trên đặc tả JPA (Jakarta Persistence API): nó không tự ánh xạ đối tượng sang bảng mà dùng EntityManager của một JPA provider như Hibernate bên dưới, rồi bổ sung các repository như JpaRepository, sinh truy vấn từ tên phương thức và @Query để bớt mã lặp. Vì thế nền móng trực tiếp mà nó dựa vào là JPA. "Spring MVC" là framework web xử lý yêu cầu HTTP; Spring Data JPA dùng được cả trong ứng dụng không có web nên không phụ thuộc vào nó. "Spring Core" cung cấp container IoC mà mọi module Spring đều cần, nên Spring Data JPA đúng là chạy trong đó, nhưng câu hỏi nhắm tới công nghệ truy cập dữ liệu mà nó trừu tượng hoá. "Servlets" là API web của Jakarta EE, không liên quan tới tầng lưu trữ.
49Which interface provides CRUD operations?4 lựa chọn
A
JpaRepositoryB
CrudServiceC
EntityManagerD
JdbcTemplateLời giải
Mở trang câu hỏi này →Đáp án đúng: "JpaRepository". JpaRepository là interface của Spring Data JPA, kế thừa các interface CRUD và phân trang của Spring Data, nên khi khai báo một interface mở rộng JpaRepository cho thực thể Student với khoá Long, Spring tự sinh hiện thực có sẵn save, findById, findAll, deleteById, count cùng phân trang, sắp xếp và flush. "CrudService" không phải interface có trong Spring, chỉ là tên tự đặt. "EntityManager" là API của JPA có persist, find, merge, remove, tức làm được CRUD, nhưng đó là đối tượng quản lý persistence context ở tầng thấp, không phải interface repository cung cấp sẵn thao tác CRUD theo kiểu Spring Data. "JdbcTemplate" là lớp tiện ích của Spring JDBC để chạy câu SQL tự viết, không phải interface và không có sẵn phương thức CRUD theo thực thể.
A
searchByB
findByC
getWhereD
queryForLời giải
Mở trang câu hỏi này →Đáp án đúng: "findBy". Trong Spring Data, chỉ cần khai báo phương thức như findByLastName(String lastName) trong interface kế thừa JpaRepository, bộ phân tích tên sẽ tách tiền tố findBy, nhận LastName là thuộc tính của entity và sinh truy vấn lọc theo cột tương ứng; findBy là tiền tố thông dụng nhất và được tài liệu Spring Data dùng làm ví dụ chuẩn cho derived query (truy vấn suy từ tên phương thức). "searchBy" thực ra cũng được các phiên bản Spring Data mới chấp nhận như một đồng nghĩa, nhưng ít dùng và không phải từ khoá tiêu biểu mà câu hỏi nhắm tới. "getWhere" sai vì thiếu By: get là tiền tố hợp lệ nhưng phải viết getBy, còn Where không phải từ khoá nên tên không được phân tích. "queryFor" sai tương tự, query chỉ hợp lệ khi đi cùng By, phần For không có nghĩa trong cú pháp 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
Mở trang câu hỏi này →Đá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.
ADefining user interfaces.
BImplementing cross-cutting concerns like logging and security.
CManaging database transactions.
DCreating web service clients.
Lời giải
Mở trang câu hỏi này →Đá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.
ADispatcherServlet
BBeanFactory or ApplicationContext
CViewResolver
DHandlerMapping
Lời giải
Mở trang câu hỏi này →Đá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ý.
54Which AOP concept defines a point in the execution of the application where an advice can be applied?4 lựa chọn
AAspect
BAdvice
CJoin Point
DPointcut
Lời giải
Mở trang câu hỏi này →Đá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.
55In a JPA Many-to-Many relationship, how is the relationship typically represented in the database?4 lựa chọn
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
Mở trang câu hỏi này →Đá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ệ.
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
Mở trang câu hỏi này →Đá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.
AStage
BNode
CPane
DScene
Lời giải
Mở trang câu hỏi này →Đá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ổ.
A
persist()B
insert()C
save()D
update()Lời giải
Mở trang câu hỏi này →Đá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.
A
LabelB
ButtonC
TextFieldD
ImageViewLời giải
Mở trang câu hỏi này →Đá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.
60Which layout arranges nodes in border regions?4 lựa chọn
A
GridPaneB
BorderPaneC
VBoxD
HBoxLời giải
Mở trang câu hỏi này →Đá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.
AEncrypt API data
BRender views
CManage database transactions programmatically
DBuild Spring Boot jars
Lời giải
Mở trang câu hỏi này →Đá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.
AA database connection.
BA model and view.
CA user interface.
DA security token.
Lời giải
Mở trang câu hỏi này →Đá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.
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
Mở trang câu hỏi này →Đá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.
64Which annotation marks a controller?4 lựa chọn
A@Controller
B@Service
C@Repository
D@RestResource
Lời giải
Mở trang câu hỏi này →Đá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.