Tất cả câu hỏi

Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.

5.140/20.347 câuCòn 15.207
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 →
ATo manage application configurations.
BTo manage persistent entities.
CTo handle user authentication.
DTo create user interfaces.
Lời giải
Đá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ữ.
Mở trang câu hỏi này →
AAutomatic repository implementation generation.
BSupport for JavaScript front-end development.
CBuilt-in load balancing.
DReal-time video streaming.
Lời giải
Đá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ệ.
Mở trang câu hỏi này →
ATo manage database connections.
BTo ensure the correctness of individual components.
CTo define user interfaces.
DTo configure application security.
Lời giải
Đá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ó.
Mở trang câu hỏi này →
Đề bài
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
Đá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.
Mở trang câu hỏi này →
A@Autowired
B@Transactional
C@Service
D@Entity
Lời giải
Đá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.
Mở trang câu hỏi này →
Aapplication.properties
Bdispatcher-servlet.xml
Cweb.xml
Dconfig.xml
Lời giải
Đá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.
Mở trang câu hỏi này →
ADispatcherServlet → HandlerMapping → HandlerAdapter → Controller → ViewResolver
BViewResolver → Controller → DispatcherServlet
CController → View → Model → DispatcherServlet
DHandler → Controller → DispatcherServlet
Lời giải
Đá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.
Mở trang câu hỏi này →
AEntityManager
BJdbcTemplate
CSessionFactory
DRepository
Lời giải
Đá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.
Mở trang câu hỏi này →
ALabel
BTextField
CTableView
DButton
Lời giải
Đá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.
Mở trang câu hỏi này →
AHBox/VBox
BBorderPane
CGridPane
DStackPane
Lời giải
Đá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.
Mở trang câu hỏi này →
AIn the View layer.
BIn the Controller or Service layer.
CDirectly in the Entity class.
DInside the JavaFX Application class.
Lời giải
Đá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.
Mở trang câu hỏi này →
Aem.persist(entity);
Bem.remove(entity);
Cem.find(Entity.class, id);
Dem.merge(entity);
Lời giải

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

Mở trang câu hỏi này →
Aem.persist(entity);
Bem.remove(entity);
Cem.find(Entity.class, id);
Dem.merge(entity);
Lời giải

Đáp án đúng: "em.merge(entity); ". Cập nhật một entity trong ứng dụng JavaFX thường diễn ra khi đối tượng đã được nạp từ trước, hiển thị trên form, người dùng sửa rồi bấm lưu; lúc đó entity đã ở trạng thái detached (tách khỏi persistence context) vì EntityManager cũ đã đóng, nên phải gọi merge trong một giao dịch: JPA chép trạng thái của nó vào bản managed có cùng khoá chính và khi commit sẽ sinh câu UPDATE. Chú ý merge trả về bản managed, còn đối tượng truyền vào vẫn detached. "em.persist(entity); " dùng cho entity mới, sinh INSERT và báo lỗi khi gặp entity detached. "em.remove(entity); " xoá entity, sinh DELETE. "em.find(Entity.class, id);"chỉ nạp entity theo khoá chính, là bước đọc chứ không ghi thay đổi; tuy entity vừa find rồi sửa trong cùng giao dịch cũng được cập nhật nhờ dirty checking, bản thân lệnh đó không thực hiện việc cập nhật.

Mở trang câu hỏi này →
Asave()
Binsert()
Cpersist()
Dstore()
Lời giải
Đáp án đúng: "persist()". Trong JPA, EntityManager.persist(entity) đưa một thực thể mới từ trạng thái transient (tạm thời) vào persistence context để nó thành managed; câu lệnh INSERT thực sự được gửi khi flush hoặc khi transaction commit. EntityManager còn có merge, remove, find, nhưng thêm mới là persist. "save()" là chỗ dễ nhầm: đó là phương thức của repository trong Spring Data JPA, và bên trong SimpleJpaRepository.save lại gọi persist hoặc merge tuỳ thực thể mới hay cũ, nó cũng có trong Session của Hibernate, nhưng không thuộc EntityManager. "insert()" không có trong API EntityManager, INSERT là câu SQL do JPA tự sinh. "store()" cũng không phải phương thức của EntityManager.
Mở trang câu hỏi này →
Đề bài
private Long id;
AIt creates a foreign key for the entity
BIt marks the field as a version column
CIt marks the field as the primary key with auto-increment strategy
DIt disables the persistence of the field
Lời giải
Đáp án đúng: "It marks the field as the primary key with auto-increment strategy". Lần theo mã: @Id đánh dấu trường id là khoá chính của entity, còn @GeneratedValue(strategy = GenerationType.IDENTITY) báo JPA không tự cấp giá trị mà để cột identity hay auto-increment của cơ sở dữ liệu sinh khi INSERT, sau đó provider đọc lại khoá vừa sinh và gán vào trường id kiểu Long. "It creates a foreign key for the entity" sai vì khoá ngoại khai báo bằng @ManyToOne hoặc @OneToOne kèm @JoinColumn, không phải @Id. "It marks the field as a version column" sai vì cột phiên bản cho khoá lạc quan (optimistic locking) dùng @Version. "It disables the persistence of the field" sai vì muốn một trường không được lưu xuống bảng thì dùng @Transient; ở đây trường id lại là trường quan trọng nhất được lưu.
Mở trang câu hỏi này →
ATo define a single named query
BTo define multiple named queries
CTo define a primary key
DTo define a foreign key
Lời giải
Đáp án đúng: "To define multiple named queries". Named query là câu JPQL được đặt tên, khai báo tĩnh trên lớp thực thể bằng @NamedQuery với name và query, rồi gọi qua em.createNamedQuery. Ở các bản JPA trước 2.2, @NamedQuery không lặp lại được trên cùng một lớp, nên @NamedQueries làm annotation chứa, nhận một mảng nhiều @NamedQuery; từ JPA 2.2 có thể lặp trực tiếp, nhưng @NamedQueries vẫn là cách gom nhiều truy vấn đặt tên. "To define a single named query" là việc của chính @NamedQuery. "To define a primary key" là việc của @Id hoặc @EmbeddedId. "To define a foreign key" thuộc về @JoinColumn trên quan hệ, hoặc @ForeignKey để đặt tên ràng buộc, không liên quan truy vấn đặt tên.
Mở trang câu hỏi này →
A@OneToMany
B@ManyToOne
C@OneToOne
D@Autowired
Lời giải
Đáp án đúng: "@Autowired". Câu hỏi tìm annotation KHÔNG thuộc nhóm quan hệ của JPA. @Autowired là annotation của Spring dùng để tiêm phụ thuộc, yêu cầu container tìm bean phù hợp theo kiểu rồi gán vào trường, setter hay constructor; nó không mô tả quan hệ giữa các entity. "@OneToMany" là annotation quan hệ chuẩn trong jakarta.persistence, đặt ở phía một để giữ tập hợp nhiều entity con, ví dụ một Department có nhiều Employee, nên nó thuộc nhóm và không được chọn. "@ManyToOne" cũng là quan hệ chuẩn, đặt ở phía nhiều và thường kèm @JoinColumn chỉ cột khoá ngoại. "@OneToOne" là quan hệ chuẩn một một, như User với hồ sơ Profile. Cùng với @ManyToMany, chúng tạo thành bốn annotation quan hệ của đặc tả JPA.
Mở trang câu hỏi này →
ASpring MVC
BHibernate
CJavaFX
DSwing
Lời giải
Đáp án đúng: "Hibernate". Hibernate là framework ORM (Object-Relational Mapping, ánh xạ đối tượng sang quan hệ) phổ biến nhất của Java: nó ánh xạ lớp Java sang bảng, tự sinh SQL cho thao tác thêm, sửa, xoá, truy vấn, quản lý persistence context và cache, đồng thời là nhà cung cấp JPA mặc định mà Spring Boot dùng khi thêm starter Data JPA. "Spring MVC" là framework web theo mẫu Model-View-Controller, xử lý yêu cầu HTTP qua DispatcherServlet chứ không ánh xạ đối tượng sang bảng. "JavaFX" là bộ công cụ xây dựng giao diện ứng dụng desktop. "Swing" cũng là thư viện giao diện desktop, ra đời trước JavaFX, không liên quan tới truy cập dữ liệu.
Mở trang câu hỏi này →
A@ManyToOne
B@OneToOne
C@OneToMany
D@ManyToMany
Lời giải
Đáp án đúng: "@OneToMany". @OneToMany đặt trên một trường kiểu tập hợp, ví dụ danh sách các Order trong entity Customer, cho biết một khách hàng có nhiều đơn hàng; nó thường đi kèm mappedBy trỏ tới trường ở phía nhiều để quan hệ hai chiều dùng chung một cột khoá ngoại. "@ManyToOne" mô tả chiều ngược lại, đặt ở phía nhiều, chẳng hạn trường customer trong Order, nơi giữ cột khoá ngoại; nó là nửa kia của quan hệ chứ không khai báo một-nhiều nhìn từ phía một. "@OneToOne" dành cho quan hệ một-một như User và Profile, mỗi bên chỉ có tối đa một đối tượng tương ứng. "@ManyToMany" dành cho quan hệ nhiều-nhiều như Student và Course, cần một bảng nối ở giữa.
Mở trang câu hỏi này →