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 đề. Trang 3/3 — câu 41–50.

Danh sách câu hỏi

50/50 câuHết danh sách
AController
BModel
CView
DDAO
Lời giải
Đáp án đúng: "View". Trong mô hình MVC, View là thành phần lấy dữ liệu đã chuẩn bị sẵn và dựng thành giao diện người dùng; ở Spring MVC đó là template Thymeleaf, trang JSP hay bất kỳ cài đặt nào của giao diện View, được ViewResolver chọn ra rồi render với dữ liệu trong model để sinh HTML trả về trình duyệt. "Controller" nhận yêu cầu, gọi logic nghiệp vụ và quyết định view nào sẽ hiển thị, nhưng không tự vẽ giao diện. "Model" chỉ là nơi chứa dữ liệu chuyển sang view, không có khả năng hiển thị. "DAO" (Data Access Object, đối tượng truy cập dữ liệu) nằm ở tầng dưới cùng, đọc ghi cơ sở dữ liệu, hoàn toàn tách khỏi giao diện.
Mở trang câu hỏi này →
A@Component
B@Service
C@Entity
D@Controller
Lời giải
Đáp án đúng: "@Entity". Khi dùng Spring ORM với Hibernate qua JPA, @Entity đánh dấu một lớp Java là thực thể được ánh xạ sang một bảng trong cơ sở dữ liệu, mặc định trùng tên lớp, có thể đổi bằng @Table(name = ...); lớp phải có trường khoá chính gắn @Id và constructor không tham số để Hibernate tạo đối tượng khi nạp dữ liệu. "@Component" chỉ đánh dấu lớp là bean chung để component scan đăng ký vào IoC container, không ánh xạ bảng nào. "@Service" là một dạng @Component cho lớp tầng nghiệp vụ. "@Controller" đánh dấu lớp tầng web xử lý yêu cầu HTTP; cả ba đều là annotation quản lý bean của Spring chứ không phải annotation ánh xạ của JPA.
Mở trang câu hỏi này →
AHibernate
BEclipseLink
CMyBatis
DAll of the above
Lời giải
Đáp án đúng: "All of the above". Spring không tự làm ORM (ánh xạ đối tượng – quan hệ) mà tích hợp các công cụ có sẵn: Hibernate và EclipseLink là hai bản cài đặt JPA, được nối vào qua lớp hỗ trợ ORM/JPA của Spring như LocalContainerEntityManagerFactoryBean và JpaTransactionManager; MyBatis tích hợp qua dự án mybatis-spring với SqlSessionFactoryBean, dùng chung DataSource và quản lý giao dịch của Spring. Nói chặt chẽ thì MyBatis là công cụ ánh xạ SQL (SQL mapper) chứ không hẳn là ORM, vì lập trình viên tự viết câu SQL còn nó chỉ ánh xạ kết quả sang đối tượng, không quản lý trạng thái entity; tuy vậy cả ba đều dùng được cùng Spring nên đáp án là phương án gộp. Chọn riêng "Hibernate" là bỏ sót, dù đây là provider mặc định của Spring Boot. Chọn riêng "EclipseLink" cũng bỏ sót, dù nó là bản cài đặt tham chiếu của JPA. Chọn riêng "MyBatis" còn kém hơn vì đó lại là công cụ ít giống ORM nhất trong ba.
Mở trang câu hỏi này →
AA relational database bundled with the JDK
BA JPA implementation that replaces the specification
CAn abstraction on top of JPA providers that simplifies data access and reduces boilerplate
DA testing framework for JPQL queries only
Lời giải
Đáp án đúng: "An abstraction on top of JPA providers that simplifies data access and reduces boilerplate". Spring Data JPA không phải một JPA provider mà là lớp trừu tượng đặt trên JPA và provider như Hibernate: ta chỉ khai báo interface kế thừa JpaRepository, Spring sinh cài đặt lúc chạy với sẵn save, findById, findAll, delete, phân trang, sắp xếp, cộng truy vấn suy ra từ tên phương thức như findByEmail và @Query, giảm hẳn mã lặp khi làm việc với EntityManager. "A relational database bundled with the JDK" sai vì nó không phải cơ sở dữ liệu, JDK cũng không kèm hệ quản trị quan hệ nào; cơ sở dữ liệu như MySQL hay H2 là thành phần riêng. "A JPA implementation that replaces the specification" sai vì cài đặt JPA là việc của Hibernate hay EclipseLink, và Spring Data JPA dựa trên đặc tả chứ không thay thế nó. "A testing framework for JPQL queries only" sai vì nó dùng cho mã truy cập dữ liệu thật trong ứng dụng, còn kiểm thử là việc của JUnit cùng @DataJpaTest.
Mở trang câu hỏi này →
Đề bài
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
Đá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.
Mở trang câu hỏi này →
A@OneToOne
B@ManyToOne
C@OneToMany
D@ManyToMany
Lời giải

Đá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.

Mở trang câu hỏi này →
AReduced boilerplate code for data access.
BEnhanced security for front-end applications.
CSimplified network configuration.
DImproved performance for video encoding.
Lời giải
Đá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.
Mở trang câu hỏi này →
A@Column
B@Id
C@GeneratedValue
D@Table
Lời giải
Đáp án đúng: "@Table". Annotation @Table của JPA đặt trên lớp thực thể để chỉ định tên bảng qua thuộc tính name, kèm schema, catalog, uniqueConstraints và indexes; nếu không có, tên bảng mặc định suy ra từ tên thực thể, và Hibernate trong Spring Boot còn đổi tên đó sang dạng chữ thường nối gạch dưới. Ví dụ lớp Student muốn lưu vào bảng students thì đặt @Table với name là students. @Entity khai báo lớp là thực thể, còn @Table chỉ tinh chỉnh ánh xạ bảng. "@Column" đặt tên và cấu hình cho một cột, không phải cho bảng. "@Id" đánh dấu trường khoá chính. "@GeneratedValue" chỉ định cách sinh giá trị khoá chính như IDENTITY, SEQUENCE, AUTO, không liên quan tên bảng.
Mở trang câu hỏi này →
ANoSQL databases.
BRelational databases using the Java Persistence API (JPA).
CMessage queues.
DCloud storage.
Lời giải
Đáp án đúng: "Relational databases using the Java Persistence API (JPA).". Spring Data JPA là mô-đun của họ Spring Data dành cho cơ sở dữ liệu quan hệ: nó dựa trên JPA (đặc tả ánh xạ đối tượng – quan hệ của Java) và provider như Hibernate để ánh xạ entity sang bảng, rồi bổ sung repository tự sinh, truy vấn suy từ tên phương thức, phân trang và auditing, giảm mạnh mã truy cập dữ liệu lặp lại. "NoSQL databases." sai vì kho NoSQL có các mô-đun riêng như Spring Data MongoDB hay Spring Data Redis, không đi qua JPA. "Message queues." sai vì hàng đợi thông điệp dùng Spring AMQP, Spring for Apache Kafka hoặc JMS. "Cloud storage." sai vì lưu trữ đám mây như S3 dùng SDK của nhà cung cấp hoặc Spring Cloud AWS, nằm ngoài phạm vi Spring Data JPA.
Mở trang câu hỏi này →
AIt only supports relational databases via raw JDBC
BIt excludes JPA to encourage NoSQL usage
CIt offers seamless integration with relational databases, NoSQL stores, and JPA
DIt requires a custom driver for each vendor and does not integrate with Spring Data
Lời giải
Đáp án đúng: "It offers seamless integration with relational databases, NoSQL stores, and JPA". Spring Boot hỗ trợ truy cập dữ liệu rất rộng: có starter cho JDBC với JdbcTemplate, cho Data JPA với Hibernate, cho các kho NoSQL như MongoDB, Redis, Cassandra, và tự cấu hình DataSource, EntityManagerFactory hay client tương ứng dựa trên thư viện có trong classpath cùng thuộc tính trong application.properties, đều tích hợp với Spring Data. "It only supports relational databases via raw JDBC" sai vì ngoài JDBC thuần Spring Boot còn hỗ trợ JPA và NoSQL. "It excludes JPA to encourage NoSQL usage" sai vì JPA chính là một trong những lựa chọn chủ lực qua spring-boot-starter-data-jpa. "It requires a custom driver for each vendor and does not integrate with Spring Data" sai ở cả hai vế: Spring Boot dùng driver JDBC chuẩn của nhà cung cấp, thường tự nhận ra driver từ URL kết nối, và tích hợp chặt với Spring Data.
Mở trang câu hỏi này →