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.100/20.347 câuCòn 15.247
AController class
BHTML page
CRepository/DAO class
DJSP scriptlet
Lời giải
Đáp án đúng: "Repository/DAO class". Trong ứng dụng Spring MVC kết hợp Hibernate theo kiến trúc phân lớp, thao tác cơ sở dữ liệu đặt ở lớp Repository hay DAO (Data Access Object, đối tượng truy cập dữ liệu), đánh dấu @Repository; lớp này dùng Session của Hibernate, EntityManager hoặc Spring Data, và Spring tự dịch ngoại lệ của Hibernate sang DataAccessException. Service gọi repository, controller gọi service. "Controller class" chỉ nên nhận yêu cầu và chọn view; viết truy vấn ở đây trộn tầng web với tầng dữ liệu, khó kiểm thử và tái sử dụng. "HTML page" là tầng hiển thị chạy ở trình duyệt, không thể và không được chạm cơ sở dữ liệu. "JSP scriptlet" là mã Java nhúng trong JSP; về kỹ thuật chạy được JDBC nhưng là cách làm lỗi thời, phá vỡ việc tách lớp của MVC.
Mở trang câu hỏi này →
ATo manage database connections.
BTo respond to user interactions.
CTo handle network requests.
DTo manage application configurations.
Lời giải
Đáp án đúng: "To respond to user interactions.". Ứng dụng JavaFX chạy theo hướng sự kiện: khi người dùng bấm nút, gõ phím, di chuột hay đóng cửa sổ, JavaFX tạo đối tượng sự kiện như ActionEvent, KeyEvent, MouseEvent rồi chuyển qua chuỗi điều phối tới nút đích, nơi các handler đăng ký bằng setOnAction, addEventHandler hoặc thuộc tính onAction trong FXML được gọi trên JavaFX Application Thread để phản hồi, như kiểm tra form rồi lưu dữ liệu. "To manage database connections." là việc của JDBC, bể kết nối hay EntityManagerFactory, không phải của cơ chế sự kiện. "To handle network requests." thuộc các API mạng như HttpClient, nên chạy ở luồng nền để không làm treo giao diện. "To manage application configurations." là việc của tệp properties hay Preferences, không liên quan tới xử lý thao tác người dùng.
Mở trang câu hỏi này →
ALabel
BButton
CTextField
DImageView
Lời giải
Đáp án đúng: "Label". Trong JavaFX, Label là control dùng để hiển thị một đoạn văn bản không chỉnh sửa được, như tiêu đề hay nhãn đặt cạnh ô nhập; nội dung đặt bằng setText() hoặc thuộc tính text trong FXML, có thể kèm một graphic. Người dùng chỉ đọc chứ không gõ vào Label. "Button" cũng mang chữ trên mặt nút, nhưng vai trò của nó là nhận thao tác nhấn và phát ActionEvent, không phải để hiển thị văn bản. "TextField" là ô nhập một dòng, dùng để người dùng gõ văn bản vào và chương trình đọc lại bằng getText(). "ImageView" dùng để hiển thị ảnh từ đối tượng Image chứ không hiển thị chữ.
Mở trang câu hỏi này →
AThe database table name.
BThe primary key of the "many" side entity.
CThe field in the "many" side entity that maps back to the "one" side entity.
DThe join table name.
Lời giải
Đáp án đúng: "The field in the "many" side entity that maps back to the "one" side entity.". Trong quan hệ hai chiều, ví dụ Department có danh sách employees đánh dấu @OneToMany và Employee có trường department đánh dấu @ManyToOne, mappedBy trên phía Department ghi tên trường department ở phía nhiều; nó báo JPA rằng phía nhiều mới là phía sở hữu quan hệ (owning side), nơi giữ cột khoá ngoại, còn phía một chỉ phản chiếu nên không sinh thêm cột hay bảng nối. "The database table name." sai vì tên bảng đặt bằng @Table. "The primary key of the "many" side entity." sai vì khoá chính của entity bên nhiều khai báo bằng @Id trong chính entity đó, mappedBy không nhắc tới khoá. "The join table name." sai vì bảng nối đặt bằng @JoinTable, và dùng mappedBy chính là để khỏi cần bảng nối mà tái dùng khoá ngoại phía nhiều.
Mở trang câu hỏi này →
5085What is an "advice" in Spring AOP?4 lựa chọn
AA point in the execution of a program.
BAn object being proxied.
CThe action taken at a particular join point.
DA collection of join points.
Lời giải
Đáp án đúng: "The action taken at a particular join point.". Theo thuật ngữ AOP mà Spring dùng, advice là hành động do aspect thực hiện tại một join point cụ thể, có các loại before, after returning, after throwing, after và around, ví dụ ghi log trước khi gọi một phương thức service. "A point in the execution of a program." là định nghĩa join point, trong Spring AOP luôn là một lần gọi phương thức. "An object being proxied." là target object, đối tượng được advise mà Spring bọc bằng proxy. "A collection of join points." gần với pointcut, tức biểu thức chọn ra tập join point mà advice sẽ áp vào; pointcut quyết định ở đâu, còn advice quyết định làm gì.
Mở trang câu hỏi này →
A@OneToOne
B@ManyToOne
C@OneToMany
D@ManyToMany
Lời giải
Đáp án đúng: "@OneToMany". Trong quan hệ một nhiều, phía một (ví dụ Department) giữ một tập hợp các entity phía nhiều (danh sách Employee), nên trường tập hợp đó được gắn @OneToMany, thường viết @OneToMany(mappedBy = "department") để chỉ ra phía nhiều mới là chủ quan hệ, nơi giữ cột khoá ngoại, kèm cascade hay orphanRemoval nếu cần. "@ManyToOne" là annotation của chiều ngược lại, đặt trên trường department trong Employee ở phía nhiều, trỏ tới một đối tượng đơn chứ không quản lý tập hợp. "@OneToOne" mô tả quan hệ một một, mỗi bên chỉ có tối đa một đối tượng. "@ManyToMany" mô tả quan hệ nhiều nhiều qua bảng nối, khi phần tử con có thể thuộc về nhiều cha cùng lúc, khác với một nhiều.
Mở trang câu hỏi này →
ABackground thread management
BWeb API development
CDesktop GUI development
DDatabase access
Lời giải
Đáp án đúng: "Desktop GUI development". JavaFX là bộ công cụ của Java để xây dựng giao diện đồ hoạ cho ứng dụng desktop: nó cung cấp Stage, Scene, cây Node với các control như Button, TextField, TableView, bố cục như GridPane, VBox, hỗ trợ FXML để tách giao diện khỏi mã, định dạng bằng CSS, hiệu ứng và đồ hoạ; nó là bản kế nhiệm Swing. "Background thread management" không phải mục đích chính, JavaFX chỉ có lớp hỗ trợ như Task và Service để chạy việc nền mà không làm treo giao diện, còn quản lý luồng nói chung thuộc java.util.concurrent. "Web API development" là phạm vi của Spring MVC hay Jakarta REST. "Database access" do JDBC, JPA hoặc Spring Data đảm nhận, JavaFX chỉ hiển thị dữ liệu.
Mở trang câu hỏi này →
AIncreased coupling between application layers.
BAbility to use only the modules needed, reducing application size.
CLimited support for different persistence technologies.
DDecreased flexibility in choosing application components.
Lời giải
Đáp án đúng: "Ability to use only the modules needed, reducing application size.". Spring Framework được chia thành nhiều mô-đun như spring-core, spring-beans, spring-context, spring-jdbc, spring-orm, spring-webmvc; ứng dụng chỉ khai báo những mô-đun mình dùng, ví dụ ứng dụng dòng lệnh không cần spring-webmvc, nhờ vậy giảm số thư viện phải đóng gói và giữ phụ thuộc gọn. "Increased coupling between application layers." sai vì mục tiêu của Spring là giảm phụ thuộc chặt (coupling) nhờ DI và lập trình qua interface. "Limited support for different persistence technologies." ngược với thực tế: Spring hỗ trợ JDBC, JPA, Hibernate, MyBatis và các kho NoSQL qua Spring Data. "Decreased flexibility in choosing application components." cũng ngược lại, vì kiến trúc mô-đun cho phép tự chọn và thay thế từng thành phần.
Mở trang câu hỏi này →
ATo manage database connections.
BTo handle HTTP requests and return a model and view.
CTo define user interfaces.
DTo configure application security.
Lời giải
Đáp án đúng: "To handle HTTP requests and return a model and view.". Trong Spring MVC, DispatcherServlet chuyển yêu cầu tới phương thức handler của controller (lớp @Controller với @GetMapping, @PostMapping); controller đọc tham số, gọi service, đặt dữ liệu vào Model rồi trả về tên view hoặc đối tượng ModelAndView để ViewResolver phân giải thành trang, ví dụ trang Thymeleaf. "To manage database connections." sai vì kết nối do DataSource và connection pool lo, còn truy cập dữ liệu nằm ở repository. "To define user interfaces." sai vì giao diện do view template định nghĩa, controller chỉ chọn view và cấp dữ liệu. "To configure application security." là việc của Spring Security qua SecurityFilterChain, chạy ở tầng filter trước khi yêu cầu tới controller.
Mở trang câu hỏi này →
AJDBC
BJPQL (Java Persistence Query Language)
CSQL
DXML
Lời giải

Đáp án đúng: "JPQL (Java Persistence Query Language)". JPQL là ngôn ngữ truy vấn của đặc tả JPA, viết theo tên entity và tên trường của lớp Java thay vì tên bảng và tên cột, ví dụ SELECT s FROM Student s WHERE s.gpa > 3; JPA provider như Hibernate dịch câu đó sang SQL đúng phương ngữ của cơ sở dữ liệu, kết quả trả về là đối tượng entity, và nó hỗ trợ đi theo quan hệ bằng dấu chấm hay JOIN FETCH. "JDBC" là API cấp thấp để gửi câu SQL thô và đọc ResultSet, ta tự chuyển dòng thành đối tượng. "SQL" chính là ngôn ngữ thao tác trên bảng và cột mà câu hỏi muốn tránh; JPA vẫn cho chạy native query nhưng đó không phải truy vấn hướng đối tượng. "XML" là định dạng dữ liệu, dùng cho tệp cấu hình như persistence.xml chứ không phải ngôn ngữ truy vấn.

Mở trang câu hỏi này →
ACSS stylesheets.
BMessage resolvers.
CDatabase triggers.
DJavaScript libraries.
Lời giải
Đáp án đúng: "Message resolvers.". Thymeleaf hỗ trợ đa ngôn ngữ (internationalization, i18n) qua cơ chế message resolver: template dùng biểu thức #{...} như #{home.welcome}, engine nhờ message resolver tra khoá đó theo locale hiện tại; khi tích hợp với Spring, resolver này dựa vào MessageSource đọc các tệp messages.properties, messages_vi.properties, và LocaleResolver quyết định ngôn ngữ của từng yêu cầu. "CSS stylesheets." chỉ định dạng trình bày, không chứa hay chọn văn bản theo ngôn ngữ. "Database triggers." là đoạn mã chạy trong cơ sở dữ liệu khi có thao tác ghi, không liên quan tới engine template. "JavaScript libraries." có thể làm i18n phía trình duyệt, nhưng đó không phải cơ chế của Thymeleaf vốn render phía server.
Mở trang câu hỏi này →
A@Primary
B@Id
C@Generated
D@Key
Lời giải
Đáp án đúng: "@Id". Trong JPA, @Id đặt lên trường hoặc getter để chỉ định khoá chính của entity; mỗi entity bắt buộc có định danh như vậy (hoặc @EmbeddedId cho khoá ghép), persistence context dùng khoá này để nhận diện thực thể, và nó thường đi kèm @GeneratedValue để sinh giá trị tự động. "@Primary" là annotation của Spring, chọn bean ưu tiên khi có nhiều bean cùng kiểu để tiêm, không liên quan tới bảng. "@Generated" không phải annotation khoá chính của JPA: Hibernate có một annotation cùng tên để đọc lại giá trị cột do cơ sở dữ liệu sinh, còn jakarta.annotation.Generated đánh dấu mã nguồn được sinh tự động. "@Key" không tồn tại trong đặc tả JPA, có lẽ dễ nhầm với từ khoá PRIMARY KEY của SQL.
Mở trang câu hỏi này →
AA single monolithic library that replaces JPA
BAn umbrella project containing multiple modules for different data stores and data-access styles
CA JDBC driver for all relational databases
DA GUI client for managing databases
Lời giải
Đáp án đúng: "An umbrella project containing multiple modules for different data stores and data-access styles". Spring Data là dự án ô (umbrella project) gồm nhiều mô-đun có chung mô hình lập trình repository: Spring Data JPA, Spring Data JDBC, Spring Data MongoDB, Spring Data Redis, Spring Data Elasticsearch và nhiều mô-đun khác, mỗi cái dành cho một kiểu kho dữ liệu, cả quan hệ lẫn NoSQL, đồng bộ hay reactive, nhưng đều cung cấp interface repository, suy truy vấn từ tên phương thức và phân trang. "A single monolithic library that replaces JPA" sai hai chỗ: Spring Data không phải một thư viện đơn khối, và Spring Data JPA chạy trên JPA chứ không thay JPA, vẫn cần Hibernate làm provider. "A JDBC driver for all relational databases" sai vì driver JDBC do từng nhà cung cấp cơ sở dữ liệu phát hành. "A GUI client for managing databases" sai vì Spring Data là thư viện cho mã nguồn, không phải công cụ đồ hoạ như pgAdmin hay MySQL Workbench.
Mở trang câu hỏi này →
A@FXML
B@Bind
C@UI
D@Node
Lời giải
Đáp án đúng: "@FXML". Khi FXMLLoader nạp tệp FXML, nó tạo controller được chỉ định bằng fx:controller rồi tiêm các nút có fx:id vào trường cùng tên trong controller; trường hoặc phương thức xử lý sự kiện không public phải gắn @FXML thì loader mới truy cập được, ví dụ trường nameField kiểu TextField và phương thức handleSave được gọi từ thuộc tính onAction trong FXML. Như vậy @FXML là cầu nối giữa phần tử khai báo trong FXML và mã Java. "@Bind" không phải annotation của JavaFX; ràng buộc dữ liệu trong JavaFX làm bằng phương thức bind trên property. "@UI" không tồn tại trong API JavaFX. "@Node" cũng không phải annotation; Node là lớp cơ sở của mọi phần tử trong scene graph chứ không dùng để đánh dấu trường.
Mở trang câu hỏi này →
ASelection variable expressions.
BURL expressions.
CMessage expressions.
DFragment expressions.
Lời giải
Đáp án đúng: "Selection variable expressions.". Trong Thymeleaf, *{...} là biểu thức biến lựa chọn: nó được đánh giá trên đối tượng đang được chọn bằng th:object chứ không phải trên toàn bộ model, ví dụ form có th:object="${user}" thì bên trong th:field="*{name}" tương đương ${user.name}; đây là cách viết gọn rất hay dùng khi gắn form với đối tượng. "URL expressions." là cú pháp @{...}, dùng để dựng đường dẫn có context path và tham số. "Message expressions." là cú pháp #{...}, dùng để tra khoá thông điệp trong tệp messages phục vụ đa ngôn ngữ. "Fragment expressions." là cú pháp ~{...}, dùng với th:insert hoặc th:replace để chèn một mảnh template.
Mở trang câu hỏi này →
AReact
BVue.js
CThymeleaf
DAngular
Lời giải
Đáp án đúng: "Thymeleaf". Thymeleaf là template engine phía máy chủ: controller Spring MVC trả tên view, ThymeleafViewResolver tìm tệp HTML tương ứng trong thư mục templates rồi dựng trang từ dữ liệu trong model trước khi gửi về trình duyệt, nên nó là công nghệ view gắn trực tiếp với Spring MVC và được Spring Boot tự cấu hình qua spring-boot-starter-thymeleaf. "React" là thư viện JavaScript dựng giao diện phía trình duyệt; nó dùng được cùng ứng dụng Spring qua REST API nhưng là frontend tách rời, không phải view do Spring MVC dựng. "Vue.js" cũng là framework JavaScript phía client, quan hệ với Spring chỉ qua gọi API JSON. "Angular" là framework SPA (ứng dụng một trang) chạy trên trình duyệt, cùng lắm được phục vụ như tệp tĩnh chứ không đi qua ViewResolver.
Mở trang câu hỏi này →
AUser sessions
BEntity lifecycle and persistence
CNetwork connections
DWeb page rendering
Lời giải
Đáp án đúng: "Entity lifecycle and persistence". EntityManager là API trung tâm của JPA, gắn với một persistence context (ngữ cảnh lưu trữ): nó đưa thực thể qua các trạng thái new, managed, detached, removed bằng persist, merge, detach, remove, tìm thực thể bằng find, tạo truy vấn JPQL, và đồng bộ thay đổi xuống cơ sở dữ liệu khi flush hoặc commit nhờ dirty checking. "User sessions" là phiên HTTP do servlet container và HttpSession quản lý, không phải việc của tầng persistence. "Network connections" sai vì kết nối cơ sở dữ liệu do DataSource và connection pool như HikariCP lo, EntityManager chỉ dùng chúng. "Web page rendering" là việc của view như Thymeleaf, nằm ở tầng hiển thị chứ không ở tầng dữ liệu.
Mở trang câu hỏi này →
A.xml
B.conf
C.java
D.yml
Lời giải
Đáp án đúng: ".java". Cấu hình Spring dựa trên annotation (Java-based configuration) được viết thẳng bằng mã Java: một lớp gắn @Configuration chứa các phương thức @Bean, kết hợp @ComponentScan hay @EnableTransactionManagement, được lưu trong tệp nguồn Java rồi biên dịch như mọi lớp khác, thay cho cách khai báo bean trong XML truyền thống. ".xml" là phần mở rộng của cấu hình XML kiểu applicationContext với thẻ bean, chính là thứ cấu hình annotation thay thế. ".conf" không phải định dạng cấu hình chuẩn của Spring, thường gặp ở cấu hình máy chủ như Nginx. ".yml" là tệp YAML mà Spring Boot dùng cho application.yml để khai báo giá trị thuộc tính như cổng, URL cơ sở dữ liệu; nó chứa dữ liệu cấu hình chứ không định nghĩa bean bằng annotation.
Mở trang câu hỏi này →
AEAGER
BLAZY
CDEPENDENT
DCASCADE
Lời giải
Đáp án đúng: "LAZY". Theo đặc tả JPA, kiểu nạp mặc định của @ManyToMany là FetchType.LAZY, cũng như @OneToMany: vì phía kia là một tập hợp có thể rất lớn, JPA chỉ đặt một proxy hay collection bao ngoài và chỉ truy vấn bảng nối khi mã thực sự duyệt tập hợp đó, nhờ vậy tránh nạp thừa dữ liệu. "EAGER" là mặc định của các quan hệ trỏ tới một đối tượng đơn là @ManyToOne và @OneToOne, ở @ManyToMany chỉ có khi khai báo tường minh fetch = FetchType.EAGER. "DEPENDENT" không phải giá trị nào của enum FetchType, vốn chỉ có LAZY và EAGER. "CASCADE" là khái niệm khác, quy định thao tác như persist hay remove có lan sang thực thể liên quan không, được khai báo qua thuộc tính cascade chứ không phải kiểu nạp.
Mở trang câu hỏi này →
Aspring-boot-starter-web
Bspring-boot-starter-data-jpa
Cspring-boot-starter-test
Dspring-boot-devtools
Lời giải
Đáp án đúng: "spring-boot-starter-data-jpa". Starter này kéo theo Spring Data JPA, Hibernate làm JPA provider, spring-jdbc và HikariCP làm connection pool; khi thấy chúng trên classpath cùng thông tin spring.datasource, auto-configuration tự dựng DataSource, EntityManagerFactory, transaction manager và bật quét các interface repository. "spring-boot-starter-web" dùng cho Spring MVC và Tomcat nhúng, không chứa JPA. "spring-boot-starter-test" cung cấp JUnit, Mockito, AssertJ cho kiểm thử, thường đặt ở phạm vi test. "spring-boot-devtools" chỉ hỗ trợ lúc phát triển như tự khởi động lại và LiveReload, không thêm khả năng truy cập dữ liệu. Ngoài starter này vẫn cần driver của cơ sở dữ liệu cụ thể như mysql-connector-j, nhưng đó là phần bổ sung chứ không phải thứ bật Spring Data JPA.
Mở trang câu hỏi này →