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
164/179 câuCòn 15
145Which feature of Spring Boot provides pre-configured dependencies and auto-configuration?4 lựa chọn
ASpring MVC
BSpring Data JPA
CStarter dependencies
DSpring Security
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Starter dependencies". Spring Boot starter là các gói phụ thuộc gom sẵn như spring-boot-starter-web hay spring-boot-starter-data-jpa: thêm một starter là kéo về bộ thư viện tương thích phiên bản với nhau, và việc các thư viện đó xuất hiện trên classpath kích hoạt auto-configuration tạo sẵn bean như DispatcherServlet, DataSource, EntityManagerFactory. Nói chặt, auto-configuration là một cơ chế riêng, nhưng starter là phần đưa phụ thuộc vào để nó hoạt động, nên đây là tính năng khớp mô tả. "Spring MVC" là framework web, thứ được starter web cấu hình, không phải tính năng cấu hình sẵn. "Spring Data JPA" là mô-đun truy cập dữ liệu, cũng chỉ là đối tượng được cấu hình. "Spring Security" là framework bảo mật, cung cấp xác thực, phân quyền chứ không phải cơ chế gom phụ thuộc.
ATo define a database entity.
BTo enable Spring MVC functionality.
CTo combine @Configuration, @EnableAutoConfiguration, and @ComponentScan.
DTo define a RESTful endpoint.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To combine @Configuration, @EnableAutoConfiguration, and @ComponentScan.". @SpringBootApplication là meta-annotation (annotation gộp) gồm @SpringBootConfiguration, một dạng @Configuration cho phép khai báo @Bean, cùng @EnableAutoConfiguration tự cấu hình bean dựa trên thư viện có trên classpath và thuộc tính, và @ComponentScan quét gói chứa lớp main cùng các gói con để tìm @Component, @Service, @Controller; đặt nó lên lớp chứa main rồi gọi SpringApplication.run là đủ khởi động ứng dụng. "To define a database entity." sai vì entity khai báo bằng @Entity. "To enable Spring MVC functionality." chỉ đúng gián tiếp: Spring MVC được auto-configuration bật khi có spring-boot-starter-web, còn bản thân annotation không dành riêng cho MVC. "To define a RESTful endpoint." sai vì endpoint REST khai báo bằng @RestController kèm @GetMapping hay @PostMapping.
AURL expressions.
BMessage expressions.
CVariable expressions.
DFragment expressions.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Variable expressions.". Trong cú pháp biểu thức chuẩn của Thymeleaf, ${...} là biểu thức biến: nó được đánh giá trên ngữ cảnh, tức các thuộc tính mà controller đã đưa vào Model, bằng OGNL hoặc SpEL khi tích hợp Spring, ví dụ th:text="${user.name}" lấy thuộc tính name của đối tượng user. "URL expressions." là cú pháp @{...}, dùng để dựng đường dẫn liên kết có context path. "Message expressions." là cú pháp #{...}, dùng để tra khoá 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 vào trang.
148Which JPA annotation maps a primary key?4 lựa chọn
A@Entity
B@Table
C@Id
D@JoinColumn
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "@Id". @Id đánh dấu trường làm khoá chính của entity, tương ứng cột primary key trong bảng; JPA dùng giá trị này để định danh entity trong persistence context, cho em.find tra cứu, và thường đi kèm @GeneratedValue để cơ sở dữ liệu hoặc provider sinh giá trị, ví dụ chiến lược IDENTITY hay SEQUENCE. Mỗi entity bắt buộc có khoá chính. "@Entity" đánh dấu cả lớp là một entity được JPA quản lý, không chỉ định trường nào là khoá. "@Table" đặt tên bảng, schema hay ràng buộc unique cho entity, ở cấp lớp. "@JoinColumn" chỉ định cột khoá ngoại trong một quan hệ như @ManyToOne, tức trỏ tới khoá chính của bảng khác chứ không khai báo khoá chính của bảng mình.
149What does ORM stand for in JPA?4 lựa chọn
AObject Relational Mapping
BOpen Resource Management
COptimized Runtime Module
DOperational Reference Model
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Object Relational Mapping". ORM nghĩa là ánh xạ đối tượng sang quan hệ: kỹ thuật nối mô hình hướng đối tượng của Java (lớp, thuộc tính, tham chiếu) với mô hình quan hệ của cơ sở dữ liệu (bảng, cột, khoá ngoại), để lớp thực thể tương ứng với bảng và mỗi đối tượng tương ứng với một dòng. JPA là đặc tả ORM chuẩn của Java, còn Hibernate là một hiện thực của nó. "Open Resource Management" không phải thuật ngữ của JPA, tên này nghe như quản lý tài nguyên chung. "Optimized Runtime Module" cũng là cụm đặt ra, không gắn với ánh xạ dữ liệu. "Operational Reference Model" không phải nghĩa của ORM trong ngữ cảnh JPA, cụm này không liên quan đối tượng hay bảng.
ATo handle user authentication
BTo ensure data integrity and consistency
CTo manage network traffic
DTo optimize web page loading
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To ensure data integrity and consistency". Giao dịch (transaction) gom nhiều thao tác ghi thành một đơn vị theo tính chất ACID: hoặc tất cả được commit, hoặc khi có lỗi thì rollback toàn bộ, nên dữ liệu không bị bỏ dở nửa chừng; ví dụ chuyển tiền phải trừ tài khoản này và cộng tài khoản kia cùng lúc. Trong JPA, các thay đổi entity được flush xuống cơ sở dữ liệu trong phạm vi giao dịch, và Spring quản lý phạm vi đó bằng @Transactional. "To handle user authentication" sai vì xác thực người dùng là việc của Spring Security. "To manage network traffic" sai vì giao dịch cơ sở dữ liệu không điều phối lưu lượng mạng. "To optimize web page loading" sai vì tốc độ tải trang phụ thuộc bộ nhớ đệm và kích thước tài nguyên, không phải mục đích của quản lý giao dịch.
AManaging user interfaces
BProviding RESTful API support
CManaging relational data through ORM
DRunning multithreaded processes
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Managing relational data through ORM". Vai trò chính của JPA là quản lý dữ liệu quan hệ thông qua ORM (Object-Relational Mapping, ánh xạ đối tượng sang quan hệ): lập trình viên làm việc với đối tượng Java gắn @Entity, còn EntityManager cùng nhà cung cấp như Hibernate lo sinh SQL, đồng bộ thay đổi trong persistence context xuống bảng và nạp hàng trong bảng lên thành đối tượng. "Managing user interfaces" là việc của JavaFX, Swing hoặc tầng view như Thymeleaf. "Providing RESTful API support" thuộc về Spring MVC với @RestController hay Jakarta REST, JPA chỉ lo phần lưu trữ phía sau. "Running multithreaded processes" là phạm vi của java.util.concurrent, ExecutorService, không phải đặc tả lưu trữ dữ liệu.
ALabel or Alert
BButton
CTableView
DTextField
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Label or Alert". Thông báo lỗi validation cần được hiển thị cho người dùng đọc: Label đặt ngay cạnh hoặc dưới ô nhập, đổi chữ và màu đỏ bằng setText và setStyle, hợp để báo lỗi tại chỗ từng trường; còn Alert là hộp thoại kiểu AlertType.ERROR hay AlertType.WARNING bật lên bằng showAndWait, hợp để báo lỗi tổng hợp khi bấm lưu. "Button" là control để người dùng kích hoạt hành động, không dùng để trình bày thông báo. "TableView" hiển thị danh sách dữ liệu nhiều hàng nhiều cột, quá nặng và sai mục đích cho một câu báo lỗi. "TextField" là ô cho người dùng nhập liệu; nhét thông báo lỗi vào đó sẽ lẫn với dữ liệu người dùng gõ, dù có thể tô viền đỏ ô này để đánh dấu trường sai bên cạnh Label.
153In JavaFX, consider:4 lựa chọncó code
Button btn = new Button("Click");
btn.setOnAction(e -> System.out.println("Pressed"));What happens when user clicks the button?
ANothing
BCompilation error
CText 'Pressed' is printed in console
DButton disappears
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Text 'Pressed' is printed in console". Lần theo mã: dòng đầu tạo Button có nhãn Click; dòng hai gọi setOnAction với một biểu thức lambda, đăng ký trình xử lý cho sự kiện ActionEvent. Khi người dùng bấm nút (giả sử nút đã nằm trong Scene đang hiển thị), JavaFX phát ActionEvent và gọi lambda trên luồng JavaFX Application Thread, lệnh System.out.println ghi chữ Pressed ra console, còn nút vẫn giữ nguyên trên giao diện. "Nothing" sai vì trình xử lý đã được gắn nên lần bấm có hiệu ứng. "Compilation error" sai vì lambda nhận tham số e và gọi println khớp đúng interface EventHandler cho ActionEvent, biên dịch bình thường. "Button disappears" sai vì không có dòng nào gọi setVisible(false) hay gỡ nút khỏi layout.
ATo define user interfaces.
BTo represent domain objects and data.
CTo manage HTTP requests.
DTo handle application deployment.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To represent domain objects and data.". Dù hiểu Model theo nghĩa thành phần M trong mẫu MVC, tức các đối tượng miền như Product, Order mang dữ liệu và quy tắc nghiệp vụ, hay theo nghĩa interface Model của Spring MVC, nơi controller gọi model.addAttribute để chuyển dữ liệu sang view, thì Model đều là nơi chứa và mang dữ liệu. "To define user interfaces." sai vì giao diện là phần View, như template Thymeleaf, chỉ đọc dữ liệu từ model để hiển thị. "To manage HTTP requests." sai vì nhận và xử lý yêu cầu HTTP là việc của DispatcherServlet và Controller. "To handle application deployment." sai vì triển khai ứng dụng là việc đóng gói và cấu hình máy chủ, không thuộc thành phần nào của MVC.
155Which benefit does JdbcTemplate provide?4 lựa chọn
ASimplifies error handling
BAutomatic query optimization
CUI rendering
DThread pool creation
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Simplifies error handling". JdbcTemplate của Spring gánh phần lặp lại của JDBC thuần: mở và đóng Connection, Statement, ResultSet đúng cách, và quan trọng là bắt SQLException kiểu checked rồi dịch sang cây ngoại lệ DataAccessException kiểu unchecked, có nghĩa rõ như DuplicateKeyException hay EmptyResultDataAccessException, nhờ vậy mã không còn đầy khối try-catch-finally. "Automatic query optimization" sai vì JdbcTemplate chạy nguyên câu SQL lập trình viên viết, việc tối ưu kế hoạch thực thi là của hệ quản trị cơ sở dữ liệu. "UI rendering" thuộc tầng giao diện như Thymeleaf, không liên quan tới JDBC. "Thread pool creation" là việc của ExecutorService hay ThreadPoolTaskExecutor, JdbcTemplate không tạo luồng; nhóm kết nối cũng do DataSource như HikariCP lo.
AHandling UI rendering on the client
BActing as the front controller to dispatch requests to appropriate handlers
CEncrypting HTTP requests
DManaging database transactions
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Acting as the front controller to dispatch requests to appropriate handlers". DispatcherServlet là front controller (bộ điều khiển trung tâm) của Spring MVC: mọi yêu cầu HTTP đi vào một điểm duy nhất này, nó hỏi HandlerMapping để tìm phương thức controller khớp đường dẫn và phương thức HTTP, gọi qua HandlerAdapter, nhận về tên view và model rồi nhờ ViewResolver render, hoặc ghi thẳng dữ liệu ra phản hồi với @ResponseBody, đồng thời xử lý exception qua HandlerExceptionResolver. "Handling UI rendering on the client" sai vì DispatcherServlet chạy trên máy chủ, còn render phía trình duyệt là việc của JavaScript; ngay cả render phía máy chủ nó cũng uỷ cho View. "Encrypting HTTP requests" là việc của TLS ở tầng kết nối HTTPS, do máy chủ web như Tomcat cấu hình. "Managing database transactions" thuộc @Transactional và transaction manager ở tầng service.
157Which annotation is used to define a named query?4 lựa chọn
A@Query
B@NamedQuery
C@StoredProcedure
D@NativeQuery
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "@NamedQuery". Theo JPA, @NamedQuery đặt trên lớp thực thể khai báo một câu JPQL tĩnh có tên qua hai thuộc tính name và query, ví dụ tên Student.findByName; truy vấn được kiểm tra khi khởi động và gọi lại bằng em.createNamedQuery hoặc qua phương thức repository trùng tên. "@Query" là annotation của Spring Data, gắn câu JPQL hoặc SQL trực tiếp lên một phương thức repository; nó có truy vấn nhưng không định nghĩa named query, vì truy vấn đó không có tên dùng chung và chỉ thuộc về đúng phương thức ấy. "@StoredProcedure" không phải annotation của JPA; thủ tục lưu sẵn được khai báo bằng @NamedStoredProcedureQuery. "@NativeQuery" không phải cách định nghĩa named query trong JPA; Spring Data bản mới có annotation này nhưng chỉ là dạng tắt của @Query cho SQL thuần, còn truy vấn SQL thuần có tên dùng @NamedNativeQuery.
158What 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
Mở trang câu hỏi này →Đá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.
AJPQL
BSQL-92 only
CHQL only
DNative database-specific SQL
Lời giải
Mở trang câu hỏi này →Đá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ả.
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
Mở trang câu hỏi này →Đá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.
161Spring follows which design principle?4 lựa chọn
ATight coupling
BInversion of Control
CGlobal variables
DStatic imports
Lời giải
Mở trang câu hỏi này →Đá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ế.
162Which DI type is generally considered the most recommended due to its immutability and testability benefits?4 lựa chọn
ASetter Injection
BField Injection
CConstructor Injection
DMethod Injection
Lời giải
Mở trang câu hỏi này →Đá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ị.
163In the Spring Framework architecture, which module forms the foundation of all other modules?4 lựa chọn
ASpring MVC
BSpring Security
CSpring Core Container
DSpring Data
Lời giải
Mở trang câu hỏi này →Đá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.
AScene
BNode
CStage
DPane
Lời giải
Mở trang câu hỏi này →Đá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.