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.060/20.347 câuCòn 15.287
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 →
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 →
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 →
AReact.js
BAngular.js
CThymeleaf
DNode.js
Lời giải
Đáp án đúng: "Thymeleaf". Thymeleaf là template engine Java chạy phía máy chủ, tích hợp với Spring MVC qua ThymeleafViewResolver: controller trả tên view, Thymeleaf đọc tệp HTML có các thuộc tính như th:text, th:each, th:if rồi thay dữ liệu từ model vào để sinh trang hoàn chỉnh; ưu điểm là tệp mẫu vẫn là HTML hợp lệ, mở thẳng trên trình duyệt được (natural templating). "React.js" là thư viện giao diện JavaScript chạy phía trình duyệt, không phải template engine của Spring MVC; nó thường gọi REST API do Spring cung cấp. "Angular.js" là framework JavaScript phía client, cũng nằm ngoài cơ chế ViewResolver. "Node.js" là môi trường chạy JavaScript phía máy chủ, một nền tảng backend riêng chứ không phải công cụ dựng view trong ứng dụng Spring.
Mở trang câu hỏi này →
5045What is JPQL primarily used for?4 lựa chọn
AQuerying entities and their relationships in an object-oriented way
BDefining database connection pools
CGenerating database schemas automatically from UML
DEncrypting fields before persistence
Lời giải
Đáp án đúng: "Querying entities and their relationships in an object-oriented way". JPQL (Java Persistence Query Language) là ngôn ngữ truy vấn của JPA viết trên tên lớp thực thể và thuộc tính chứ không trên tên bảng, cột, ví dụ SELECT s FROM Student s JOIN s.courses c. Persistence provider dịch nó sang SQL của từng cơ sở dữ liệu, và có thể đi theo quan hệ giữa các thực thể bằng dấu chấm hoặc JOIN. "Defining database connection pools" là việc của cấu hình DataSource và pool như HikariCP. "Generating database schemas automatically from UML" sai vì JPQL không đọc UML; việc sinh schema từ thực thể do provider làm qua thuộc tính như hibernate.hbm2ddl.auto, không liên quan JPQL. "Encrypting fields before persistence" thuộc AttributeConverter hoặc thư viện mã hoá, không phải ngôn ngữ truy vấn.
Mở trang câu hỏi này →
Aem.detach(entity)
Bem.persist(entity)
Cem.clear()
Dem.flush()
Lời giải
Đáp án đúng: "em.persist(entity)". Entity ở trạng thái transient (tạm thời) là đối tượng vừa new, chưa gắn với persistence context và chưa có dòng tương ứng trong cơ sở dữ liệu; gọi persist trong một giao dịch sẽ đưa nó sang trạng thái managed, provider lên lịch câu INSERT và thực thi khi flush hoặc commit, còn khoá chính có thể được gán ngay nếu dùng chiến lược IDENTITY. "em.detach(entity)" làm ngược lại, tách một entity managed ra khỏi persistence context để nó thành detached. "em.clear()" tách toàn bộ entity đang được quản lý, xoá sạch persistence context. "em.flush()" chỉ đẩy các thay đổi đang chờ của entity đã managed xuống cơ sở dữ liệu; nó không đưa một đối tượng transient vào quản lý, nên entity mới tạo mà chưa persist sẽ không được ghi.
Mở trang câu hỏi này →
ADispatcherServlet
BEntityManager
CJdbcTemplate
DApplicationContext
Lời giải
Đáp án đúng: "DispatcherServlet". Trong Spring Web MVC, DispatcherServlet là front controller (bộ điều khiển trung tâm) nhận mọi yêu cầu HTTP, hỏi HandlerMapping để tìm controller phù hợp, nhờ HandlerAdapter gọi phương thức, rồi dùng ViewResolver hoặc HttpMessageConverter để tạo phản hồi; Spring Boot tự đăng ký servlet này cho đường dẫn gốc. "EntityManager" là giao diện của JPA để thao tác thực thể với cơ sở dữ liệu, thuộc tầng dữ liệu chứ không nhận yêu cầu HTTP. "JdbcTemplate" là lớp tiện ích chạy câu lệnh SQL qua JDBC. "ApplicationContext" là IoC container chứa và quản lý mọi bean, kể cả DispatcherServlet, nhưng bản thân nó không xử lý yêu cầu HTTP.
Mở trang câu hỏi này →
ASpringApplication → compile JPQL; Actuator → serve JSP; DevTools → manage database migrations
BCLI → container orchestration; Actuator → live code reload; Autoconfiguration → command scheduling
CAutoconfiguration → configure beans from classpath & properties; Actuator → health/metrics endpoints; DevTools → auto-restart & LiveReload
DStarter POMs → replace the need for Maven/Gradle; Embedded servers → remove HTTP support
Lời giải

Đáp án đúng: "Autoconfiguration → configure beans from classpath & properties; Actuator → health/metrics endpoints; DevTools → auto-restart & LiveReload". Auto-configuration xem thư viện có trên classpath và các thuộc tính trong application.properties để tự tạo bean phù hợp, ví dụ thấy Hibernate và DataSource thì dựng EntityManagerFactory; Actuator mở các endpoint giám sát như health, metrics, info; DevTools tự khởi động lại khi mã thay đổi và kích hoạt LiveReload cho trình duyệt, nên cả ba cặp đều khớp. "SpringApplication → compile JPQL; Actuator → serve JSP; DevTools → manage database migrations" sai cả ba: SpringApplication khởi động ứng dụng, JPQL do JPA provider dịch, Actuator không phục vụ JSP, còn migration là việc của Flyway hay Liquibase. "CLI → container orchestration; Actuator → live code reload; Autoconfiguration → command scheduling" sai vì Spring Boot CLI dùng để chạy nhanh script và tạo dự án chứ không điều phối container, nạp lại mã là việc của DevTools, còn lên lịch tác vụ dùng @Scheduled. "Starter POMs → replace the need for Maven/Gradle; Embedded servers → remove HTTP support" sai vì starter là gói phụ thuộc vẫn cần Maven hoặc Gradle để quản lý, còn máy chủ nhúng như Tomcat chính là thứ cung cấp HTTP.

Mở trang câu hỏi này →
5049What is the main benefit of Spring Boot?4 lựa chọn
AManual configuration
BSimplified setup with auto-configuration
CMore XML files
DNo dependency management
Lời giải
Đáp án đúng: "Simplified setup with auto-configuration". Lợi ích chính của Spring Boot là dựng ứng dụng Spring nhanh: auto-configuration dựa vào thư viện có trên classpath để tự tạo bean hợp lý, starter gom phụ thuộc tương thích, kèm server nhúng nên chạy được bằng một tệp jar, và mọi mặc định đều ghi đè được qua application.properties. "Manual configuration" ngược lại mục tiêu của Boot; vẫn có thể cấu hình tay khi cần nhưng đó không phải lợi ích. "More XML files" sai vì Boot hướng tới cấu hình bằng Java và tệp thuộc tính, hầu như không cần XML. "No dependency management" sai vì Boot quản lý phiên bản phụ thuộc rất chặt qua BOM spring-boot-dependencies và parent POM, nên lập trình viên khỏi ghi phiên bản từng thư viện.
Mở trang câu hỏi này →
AEnables Thymeleaf templating
BAutomatically configures beans based on dependencies
CAdds JSP support
DEnables Hibernate schema updates
Lời giải
Đáp án đúng: "Automatically configures beans based on dependencies". @EnableAutoConfiguration bật cơ chế tự cấu hình của Spring Boot: khi khởi động, Spring Boot nạp danh sách các lớp auto-configuration rồi áp dụng những lớp có điều kiện thoả mãn, dựa trên @ConditionalOnClass, @ConditionalOnMissingBean, @ConditionalOnProperty; ví dụ thấy spring-boot-starter-data-jpa và driver cơ sở dữ liệu trên classpath thì tự tạo DataSource, EntityManagerFactory, transaction manager, và lùi lại nếu ta đã tự khai báo bean đó. Annotation này nằm sẵn trong @SpringBootApplication. "Enables Thymeleaf templating" chỉ là một hệ quả có điều kiện: Thymeleaf được cấu hình khi có starter của nó, annotation không dành riêng cho Thymeleaf. "Adds JSP support" sai vì JSP cần thêm phụ thuộc và cấu hình riêng, Spring Boot còn khuyên tránh JSP khi chạy jar nhúng. "Enables Hibernate schema updates" là việc của thuộc tính spring.jpa.hibernate.ddl-auto, không phải của annotation này.
Mở trang câu hỏi này →
AIt's a controller method
BIt's a data access layer component
CIt's a view template
DIt's a security filter
Lời giải
Đáp án đúng: "It's a data access layer component". @Repository là stereotype annotation đánh dấu lớp thuộc tầng truy cập dữ liệu: nó được component scan đăng ký thành bean vì bản thân là một @Component, và Spring áp cơ chế dịch ngoại lệ, đổi lỗi riêng của JPA hay Hibernate sang DataAccessException; với interface kế thừa JpaRepository, Spring Data tự đăng ký bean nên annotation này thường không bắt buộc, nhưng ý nghĩa vẫn là thành phần tầng dữ liệu. "It's a controller method" sai vì phương thức xử lý yêu cầu được đánh dấu bằng @RequestMapping hoặc @GetMapping trong lớp @Controller. "It's a view template" sai vì template là tệp Thymeleaf hay JSP, không phải lớp Java gắn annotation. "It's a security filter" sai vì filter bảo mật thuộc Spring Security, cấu hình qua SecurityFilterChain.
Mở trang câu hỏi này →
AHBox/VBox
BBorderPane
CGridPane
DStackPane
Lời giải
Đáp án đúng: "StackPane". StackPane xếp các node con chồng lên nhau theo trục z: node thêm sau nằm trên node thêm trước, và mặc định tất cả được căn giữa; cách này thường dùng để đặt chữ lên trên hình nền hoặc phủ một lớp lên nội dung. "HBox/VBox" xếp node thành một hàng ngang (HBox) hoặc một cột dọc (VBox), các node nằm cạnh nhau chứ không chồng. "BorderPane" chia vùng chứa thành năm vùng top, bottom, left, right, center, mỗi vùng một node. "GridPane" đặt node vào các ô của lưới hàng và cột như một bảng; về lý thuyết có thể đặt hai node cùng một ô để chúng chồng nhau, nhưng đó không phải mục đích của nó, còn StackPane được thiết kế đúng cho việc xếp chồng.
Mở trang câu hỏi này →
ATo manage database connections.
BTo arrange UI elements within a container.
CTo handle network requests.
DTo manage application configurations.
Lời giải
Đáp án đúng: "To arrange UI elements within a container.". Layout pane của JavaFX như HBox, VBox, BorderPane, GridPane, StackPane, FlowPane là các node chứa, tự tính vị trí và kích thước của node con theo quy tắc riêng (hàng ngang, cột dọc, lưới, chồng lớp) và tự sắp xếp lại khi cửa sổ đổi kích thước, giúp không phải đặt toạ độ bằng tay. "To manage database connections." sai vì JavaFX là bộ công cụ giao diện, kết nối cơ sở dữ liệu thuộc JDBC hoặc JPA. "To handle network requests." sai vì giao tiếp mạng dùng HttpClient hay thư viện khác, không phải layout. "To manage application configurations." sai vì cấu hình ứng dụng nằm ở tệp properties hoặc lớp cấu hình riêng, layout không lưu cấu hình.
Mở trang câu hỏi này →
AScene
BNode
CStage
DPane
Lời giải
Đáp án đúng: "Stage". Stage là lớp JavaFX đại diện cho một cửa sổ cấp cao nhất; khi ứng dụng khởi động, nền tảng tạo primary stage (cửa sổ chính) và truyền vào phương thức start của lớp con Application, ta gọi setTitle, setScene rồi show để hiện cửa sổ. "Scene" là nội dung đặt bên trong cửa sổ, chứa scene graph với một nút gốc, và một cửa sổ tại mỗi thời điểm hiển thị một Scene. "Node" là lớp cơ sở trừu tượng của mọi phần tử trong scene graph như Button, Label hay các layout. "Pane" là lớp layout cơ bản chứa các nút con, tự nó là một Node nằm trong Scene chứ không phải cửa sổ. Có thể hình dung theo thứ bậc: Stage chứa Scene, Scene chứa cây Node.
Mở trang câu hỏi này →
ASpring MVC
BSpring Security
CSpring Core Container
DSpring Data
Lời giải
Đáp án đúng: "Spring Core Container". Trong kiến trúc Spring Framework, Core Container gồm các module spring-core, spring-beans, spring-context và spring-expression, cung cấp IoC container, Dependency Injection, BeanFactory, ApplicationContext và SpEL; mọi module khác đều chạy trên nền này vì chúng đều là bean được container tạo và quản lý. "Spring MVC" là module web xây trên Core Container, dùng ApplicationContext để quản lý controller và DispatcherServlet. "Spring Security" là dự án bảo mật dựa vào container để cấu hình filter và bean xác thực, nên phụ thuộc vào nền chứ không phải nền. "Spring Data" là họ dự án truy cập dữ liệu, cũng dựng repository thành bean trong container, không phải nền tảng của các module còn lại.
Mở trang câu hỏi này →
ASetter Injection
BField Injection
CConstructor Injection
DMethod Injection
Lời giải
Đáp án đúng: "Constructor Injection". Với constructor injection, các phụ thuộc truyền qua tham số hàm tạo nên trường có thể khai báo final (bất biến), đối tượng luôn được tạo ra ở trạng thái đầy đủ, phụ thuộc bắt buộc lộ rõ, và khi viết unit test chỉ cần tạo lớp đó với mock mà không cần container; tài liệu Spring khuyến nghị cách này cho phụ thuộc bắt buộc, và lớp chỉ có một hàm tạo thì không cần @Autowired. "Setter Injection" hợp với phụ thuộc tuỳ chọn hoặc có thể đổi lại sau, nhưng trường không thể final và đối tượng có thể bị dùng khi chưa tiêm đủ. "Field Injection" (@Autowired trên trường) gọn nhưng giấu phụ thuộc, không cho final và buộc dùng reflection hoặc container khi test. "Method Injection" là kỹ thuật đặc biệt như lookup method để lấy bean prototype mới từ một bean singleton, không phải cách tiêm thông thường được khuyến nghị.
Mở trang câu hỏi này →
5057Spring follows which design principle?4 lựa chọn
ATight coupling
BInversion of Control
CGlobal variables
DStatic imports
Lời giải
Đáp án đúng: "Inversion of Control". Inversion of Control (đảo ngược điều khiển) là nguyên lý nền của Spring: thay vì đối tượng tự tạo và tự tìm phụ thuộc, quyền điều khiển việc tạo, nối và quản lý vòng đời đối tượng được chuyển cho IoC container như ApplicationContext, và Dependency Injection là cách Spring hiện thực nguyên lý này. "Tight coupling" là điều Spring muốn tránh, vì lớp gắn chặt với hiện thực cụ thể thì khó thay thế và khó kiểm thử. "Global variables" là thói quen thiết kế xấu, trạng thái dùng chung khó kiểm soát; bean singleton của Spring được tiêm có chủ đích chứ không phải biến toàn cục. "Static imports" chỉ là cú pháp Java để gọi thành viên tĩnh không cần ghi tên lớp, không phải nguyên lý thiết kế.
Mở trang câu hỏi này →
ATo manage user sessions.
BTo ensure data consistency by grouping database operations into a single unit.
CTo handle file uploads.
DTo create REST endpoints.
Lời giải
Đáp án đúng: "To ensure data consistency by grouping database operations into a single unit.". @Transactional gom các thao tác cơ sở dữ liệu trong một phương thức thành một giao dịch nguyên tử: hoặc tất cả cùng được commit, hoặc khi có RuntimeException thì tất cả bị rollback, ví dụ chuyển tiền gồm trừ tài khoản này và cộng tài khoản kia không thể chỉ xong một nửa. Trong Spring Data JPA, các phương thức của SimpleJpaRepository đã mặc định có @Transactional, phương thức đọc ở chế độ readOnly, còn ở tầng service ta tự đặt để nhiều lời gọi repository chung một giao dịch và một persistence context. "To manage user sessions." là việc của HttpSession hay Spring Session, không liên quan tới giao dịch cơ sở dữ liệu. "To handle file uploads." do MultipartFile và MultipartResolver xử lý. "To create REST endpoints." là vai trò của @RestController kèm @GetMapping, @PostMapping.
Mở trang câu hỏi này →
AJPQL
BSQL-92 only
CHQL only
DNative database-specific SQL
Lời giải
Đáp án đúng: "JPQL". Trong Spring Data JPA, chuỗi trong @Query mặc định được hiểu là JPQL (Java Persistence Query Language), ngôn ngữ truy vấn hướng đối tượng của JPA viết theo tên thực thể và tên trường, ví dụ select u from User u where u.email = :email, rồi nhà cung cấp JPA dịch sang SQL của cơ sở dữ liệu đang dùng. "Native database-specific SQL" chỉ được dùng khi khai báo tường minh nativeQuery = true, lúc đó câu lệnh viết theo tên bảng và cột thật. "HQL only" sai vì HQL là ngôn ngữ riêng của Hibernate; Hibernate chấp nhận JPQL như một tập con của HQL, nhưng @Query được định nghĩa theo JPQL để không phụ thuộc nhà cung cấp. "SQL-92 only" sai vì @Query mặc định không nhận SQL thuần theo chuẩn nào cả.
Mở trang câu hỏi này →
5060What best describes Spring Data JPA?4 lựa chọn
AA NoSQL database engine
BA higher-level abstraction on top of JPA that simplifies repository-based data access
CA replacement for the Spring Framework core container
DA message broker for JMS-based applications
Lời giải
Đáp án đúng: "A higher-level abstraction on top of JPA that simplifies repository-based data access". Spring Data JPA nằm trên JPA và provider như Hibernate: ta chỉ khai báo interface kế thừa JpaRepository, Spring tự sinh cài đặt lúc chạy với sẵn save, findById, findAll, phân trang, sắp xếp, và suy truy vấn từ tên phương thức hoặc @Query, nên không phải tự viết mã EntityManager lặp lại. "A NoSQL database engine" sai vì nó không phải cơ sở dữ liệu mà là thư viện truy cập dữ liệu, làm việc với cơ sở dữ liệu quan hệ qua JPA (kho NoSQL có các mô-đun Spring Data khác như Spring Data MongoDB). "A replacement for the Spring Framework core container" sai vì nó dựa vào chính IoC container để đăng ký repository làm bean chứ không thay thế container. "A message broker for JMS-based applications" sai vì môi giới thông điệp là việc của ActiveMQ hay RabbitMQ, không liên quan tới truy cập dữ liệu.
Mở trang câu hỏi này →