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.180/20.347 câuCòn 15.167
AStage
BNode
CPane
DScene
Lời giải
Đáp án đúng: "Scene". JavaFX dùng hình ảnh sân khấu: Stage là cửa sổ, Scene là nội dung đặt trong cửa sổ đó, chứa đồ thị cảnh (scene graph) gồm một node gốc và mọi node con; gọi stage.setScene(scene) để hiển thị vùng nội dung này, và đổi Scene là đổi toàn bộ nội dung cửa sổ. "Stage" là chính cửa sổ cấp cao nhất với thanh tiêu đề, kích thước, nút đóng, không phải vùng nội dung bên trong. "Node" là lớp cơ sở của mọi phần tử trong đồ thị cảnh như Button hay Label, chỉ là một mảnh của nội dung. "Pane" là một layout chứa node con, thường làm node gốc của Scene, nhưng nó chỉ là một phần trong vùng nội dung, chưa phải lớp đại diện cho vùng nội dung của cửa sổ.
Mở trang câu hỏi này →
AObjects control the creation of their dependencies.
BThe framework or container controls the creation and management of objects.
CObjects are responsible for managing the application's flow.
DMethods control the instantiation of classes.
Lời giải
Đáp án đúng: "The framework or container controls the creation and management of objects.". Inversion of Control (đảo ngược điều khiển) nghĩa là đối tượng không tự new các phụ thuộc và không tự quyết định vòng đời của mình nữa; quyền đó chuyển cho container, trong Spring là ApplicationContext, nơi đọc cấu hình, tạo bean, tiêm phụ thuộc qua Dependency Injection, gọi các callback khởi tạo và huỷ. Mã ứng dụng chỉ khai báo mình cần gì. "Objects control the creation of their dependencies." mô tả đúng cách làm truyền thống mà IoC muốn đảo ngược, khi lớp tự gọi new cho phụ thuộc và bị gắn chặt vào cài đặt cụ thể. "Objects are responsible for managing the application's flow." cũng là kiểu điều khiển truyền thống, mã của ta gọi thư viện, trong khi với IoC chính framework gọi ngược vào mã của ta. "Methods control the instantiation of classes." chỉ là cách nói khác của việc tự tạo đối tượng, như factory method do lập trình viên tự viết, không chuyển quyền cho container.
Mở trang câu hỏi này →
ABy adding a foreign key column to one of the entities.
BBy adding a foreign key column to both entities.
CBy using a join table that contains foreign keys referencing both entities.
DBy storing the related entities in a serialized format within a single column.
Lời giải
Đáp án đúng: "By using a join table that contains foreign keys referencing both entities.". Trong mô hình quan hệ, một hàng ở bảng này có thể liên kết với nhiều hàng ở bảng kia và ngược lại, nên không cột khoá ngoại đơn nào diễn tả được; JPA dùng bảng nối (join table) mà mỗi hàng gồm hai khoá ngoại trỏ về khoá chính của hai thực thể, có thể đặt tên qua @JoinTable với joinColumns và inverseJoinColumns, ví dụ bảng student_course giữa Student và Course. "By adding a foreign key column to one of the entities." là cách biểu diễn quan hệ một nhiều hoặc một một, một cột chỉ chứa được một giá trị nên không chứa nổi nhiều liên kết. "By adding a foreign key column to both entities." vẫn chỉ cho mỗi hàng trỏ tới đúng một hàng bên kia, không thành nhiều nhiều. "By storing the related entities in a serialized format within a single column." phá vỡ chuẩn hoá, không truy vấn hay ràng buộc toàn vẹn được, JPA không dùng cách đó cho quan hệ.
Mở trang câu hỏi này →
AAspect
BAdvice
CJoin Point
DPointcut
Lời giải
Đáp án đúng: "Join Point". Join point (điểm nối) là một thời điểm cụ thể trong quá trình thực thi chương trình nơi advice có thể được áp vào, như lời gọi phương thức, xử lý ngoại lệ hay gán trường; Spring AOP dựa trên proxy nên chỉ hỗ trợ join point là việc thực thi phương thức của bean. "Aspect" là mô-đun gom một mối quan tâm cắt ngang như ghi log hay giao dịch, chứa cả advice lẫn pointcut, không phải một điểm trong luồng chạy. "Advice" là hành động được thực thi tại join point, ví dụ Before, After hay Around, tức là cái được áp vào chứ không phải nơi áp. "Pointcut" là biểu thức chọn ra những join point nào sẽ nhận advice, ví dụ một biểu thức execution chọn mọi phương thức trong gói service; nó lọc các điểm chứ bản thân không phải là một điểm thực thi.
Mở trang câu hỏi này →
ADispatcherServlet
BBeanFactory or ApplicationContext
CViewResolver
DHandlerMapping
Lời giải
Đáp án đúng: "BeanFactory or ApplicationContext". Spring Core Container chính là IoC container, với BeanFactory là interface gốc và ApplicationContext là bản mở rộng thường dùng; chúng đọc cấu hình, tạo bean, tiêm phụ thuộc, gọi các callback khởi tạo như @PostConstruct, quản lý phạm vi singleton hay prototype và gọi callback huỷ khi đóng context, tức nắm toàn bộ vòng đời bean. "DispatcherServlet" là front controller của Spring MVC, nhận yêu cầu HTTP và điều phối tới controller; nó lấy bean từ một WebApplicationContext chứ không tự quản lý vòng đời bean. "ViewResolver" chỉ ánh xạ tên view logic thành view thật như trang Thymeleaf. "HandlerMapping" chỉ tìm handler phù hợp cho một yêu cầu. Các thành phần web vừa kể đều nằm ngoài Core Container và chính chúng cũng là bean do container quản lý.
Mở trang câu hỏi này →
ADefining user interfaces.
BImplementing cross-cutting concerns like logging and security.
CManaging database transactions.
DCreating web service clients.
Lời giải
Đáp án đúng: "Implementing cross-cutting concerns like logging and security.". AOP (Aspect-Oriented Programming, lập trình hướng khía cạnh) tách những mối quan tâm cắt ngang (cross-cutting concern) như ghi log, kiểm tra quyền, đo thời gian, quản lý giao dịch ra khỏi mã nghiệp vụ: ta viết chúng một lần trong một aspect với advice như @Before hay @Around, chỉ định nơi áp dụng bằng pointcut, và Spring tạo proxy bọc quanh bean để chèn advice khi phương thức được gọi. "Defining user interfaces." là việc của tầng view như Thymeleaf hay JavaFX, không phải AOP. "Managing database transactions." là một ứng dụng cụ thể của AOP, vì @Transactional chạy qua proxy và advice giao dịch, nhưng đó chỉ là một trường hợp, còn mục đích chung của AOP rộng hơn nhiều. "Creating web service clients." thuộc RestTemplate, WebClient hay OpenFeign, không phải mục đích của AOP.
Mở trang câu hỏi này →
ARendering HTML views from Thymeleaf templates
BCreating, wiring, configuring beans and managing their lifecycle
CExecuting SQL statements without any JDBC driver
DCompiling Java sources at runtime
Lời giải
Đáp án đúng: "Creating, wiring, configuring beans and managing their lifecycle". IoC container (bộ chứa đảo ngược điều khiển) của Spring, cụ thể là BeanFactory và ApplicationContext, đọc cấu hình từ annotation, lớp @Configuration hoặc XML rồi tự tạo bean, tiêm phụ thuộc vào nhau, áp cấu hình và quản lý vòng đời từ khởi tạo, gọi @PostConstruct cho tới @PreDestroy khi đóng context; mã nghiệp vụ không còn tự new đối tượng nữa. "Rendering HTML views from Thymeleaf templates" là việc của engine template Thymeleaf cùng ViewResolver trong tầng web, container chỉ quản lý các bean đó chứ không tự render. "Executing SQL statements without any JDBC driver" là điều không thể, mọi truy cập cơ sở dữ liệu quan hệ trong Java đều cần driver JDBC. "Compiling Java sources at runtime" là việc của trình biên dịch javac hay công cụ build, container chỉ làm việc với lớp đã biên dịch.
Mở trang câu hỏi này →
AsearchBy
BfindBy
CgetWhere
DqueryFor
Lời giải
Đáp án đúng: "findBy". Trong Spring Data, chỉ cần khai báo phương thức như findByLastName(String lastName) trong interface kế thừa JpaRepository, bộ phân tích tên sẽ tách tiền tố findBy, nhận LastName là thuộc tính của entity và sinh truy vấn lọc theo cột tương ứng; findBy là tiền tố thông dụng nhất và được tài liệu Spring Data dùng làm ví dụ chuẩn cho derived query (truy vấn suy từ tên phương thức). "searchBy" thực ra cũng được các phiên bản Spring Data mới chấp nhận như một đồng nghĩa, nhưng ít dùng và không phải từ khoá tiêu biểu mà câu hỏi nhắm tới. "getWhere" sai vì thiếu By: get là tiền tố hợp lệ nhưng phải viết getBy, còn Where không phải từ khoá nên tên không được phân tích. "queryFor" sai tương tự, query chỉ hợp lệ khi đi cùng By, phần For không có nghĩa trong cú pháp này.
Mở trang câu hỏi này →
AJpaRepository
BCrudService
CEntityManager
DJdbcTemplate
Lời giải
Đáp án đúng: "JpaRepository". JpaRepository là interface của Spring Data JPA, kế thừa các interface CRUD và phân trang của Spring Data, nên khi khai báo một interface mở rộng JpaRepository cho thực thể Student với khoá Long, Spring tự sinh hiện thực có sẵn save, findById, findAll, deleteById, count cùng phân trang, sắp xếp và flush. "CrudService" không phải interface có trong Spring, chỉ là tên tự đặt. "EntityManager" là API của JPA có persist, find, merge, remove, tức làm được CRUD, nhưng đó là đối tượng quản lý persistence context ở tầng thấp, không phải interface repository cung cấp sẵn thao tác CRUD theo kiểu Spring Data. "JdbcTemplate" là lớp tiện ích của Spring JDBC để chạy câu SQL tự viết, không phải interface và không có sẵn phương thức CRUD theo thực thể.
Mở trang câu hỏi này →
5170Spring Data JPA is built on top of:4 lựa chọn
ASpring MVC
BSpring Core
CJPA
DServlets
Lời giải
Đáp án đúng: "JPA". Spring Data JPA là một module của dự án Spring Data, xây trên đặc tả JPA (Jakarta Persistence API): nó không tự ánh xạ đối tượng sang bảng mà dùng EntityManager của một JPA provider như Hibernate bên dưới, rồi bổ sung các repository như JpaRepository, sinh truy vấn từ tên phương thức và @Query để bớt mã lặp. Vì thế nền móng trực tiếp mà nó dựa vào là JPA. "Spring MVC" là framework web xử lý yêu cầu HTTP; Spring Data JPA dùng được cả trong ứng dụng không có web nên không phụ thuộc vào nó. "Spring Core" cung cấp container IoC mà mọi module Spring đều cần, nên Spring Data JPA đúng là chạy trong đó, nhưng câu hỏi nhắm tới công nghệ truy cập dữ liệu mà nó trừu tượng hoá. "Servlets" là API web của Jakarta EE, không liên quan tới tầng lưu trữ.
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 →
AlookupByEmailLikeIgnoreCase(String email)
BfindByEmailContainingIgnoreCase(String email)
CqueryWhereEmailContainsCaseInsensitive(String email)
DselectEmailContainsIgnoreCase(String email)
Lời giải
Đáp án đúng: "findByEmailContainingIgnoreCase(String email)". Spring Data JPA phân tích tên phương thức: tiền tố findBy mở phần điều kiện, Email là thuộc tính của entity, từ khoá Containing sinh điều kiện LIKE có ký tự đại diện ở hai đầu giá trị, còn IgnoreCase bọc cả hai vế bằng UPPER để so không phân biệt hoa thường. "lookupByEmailLikeIgnoreCase(String email)" sai vì lookup không phải tiền tố hợp lệ (chỉ có find, read, get, query, search, stream, count, exists, delete), và Like không tự thêm ký tự đại diện nên người gọi phải tự truyền dấu phần trăm. "queryWhereEmailContainsCaseInsensitive(String email)" sai vì thiếu chữ By ngăn tiền tố với điều kiện, còn Where và CaseInsensitive không phải từ khoá, nên dù Contains là đồng nghĩa của Containing thì tên vẫn không phân tích được. "selectEmailContainsIgnoreCase(String email)" sai vì select không phải tiền tố hợp lệ và cũng thiếu By, Spring Data coi cả chuỗi là tên thuộc tính không tồn tại.
Mở trang câu hỏi này →
ATo define the primary key of the entities.
BTo specify the join table and its columns.
CTo define the entity relationships.
DTo create a new database.
Lời giải
Đáp án đúng: "To specify the join table and its columns.". Trong quan hệ @ManyToMany, hai bảng thực thể được nối qua một bảng trung gian; @JoinTable đặt ở phía sở hữu quan hệ để khai báo tên bảng nối qua name, cột khoá ngoại trỏ về thực thể hiện tại qua joinColumns và cột trỏ về thực thể bên kia qua inverseJoinColumns. Nếu bỏ đi, JPA tự đặt tên bảng nối theo quy ước mặc định. "To define the primary key of the entities." sai vì khoá chính khai báo bằng @Id, có thể kèm @GeneratedValue. "To define the entity relationships." sai vì chính @ManyToMany mới định nghĩa quan hệ, @JoinTable chỉ cấu hình cách lưu quan hệ đó. "To create a new database." sai vì không annotation JPA nào tạo cơ sở dữ liệu; bảng nối có thể được sinh khi bật tính năng tạo schema, nhưng đó là bảng chứ không phải cơ sở dữ liệu.
Mở trang câu hỏi này →
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 →
AIt returns an HTML page
BIt converts the return value to JSON or XML
CIt binds request parameters
DIt sets the HTTP status code
Lời giải
Đáp án đúng: "It converts the return value to JSON or XML". Khi một phương thức handler có @ResponseBody, Spring MVC không coi giá trị trả về là tên view nữa mà đưa nó qua HttpMessageConverter phù hợp với header Accept và thư viện có trong classpath để ghi thẳng vào thân phản hồi HTTP, ví dụ đối tượng Java thành JSON nhờ Jackson hoặc thành XML nếu có bộ chuyển XML; @RestController chính là @Controller cộng @ResponseBody cho mọi phương thức. "It returns an HTML page" mô tả hành vi ngược lại, tức handler không có @ResponseBody trả về tên view để ViewResolver render template HTML. "It binds request parameters" là việc của @RequestParam, @PathVariable hay @ModelAttribute. "It sets the HTTP status code" là việc của @ResponseStatus hoặc ResponseEntity, @ResponseBody không đổi mã trạng thái.
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 →
5177Which class simplifies JDBC in Spring?4 lựa chọn
AJdbcTemplate
BJdbcManager
CEntityManager
DSqlHelper
Lời giải
Đáp án đúng: "JdbcTemplate". JdbcTemplate là lớp trung tâm của module Spring JDBC: nó tự mở và đóng Connection, tạo Statement, duyệt ResultSet, xử lý ngoại lệ và dịch SQLException thành DataAccessException, nên lập trình viên chỉ viết câu SQL và một RowMapper để ánh xạ dòng thành đối tượng, bớt hẳn mã lặp lại của JDBC thuần. "JdbcManager" không phải lớp có trong Spring Framework. "EntityManager" thuộc JPA, quản lý thực thể và persistence context, làm việc ở tầng ORM chứ không phải công cụ giản lược JDBC. "SqlHelper" cũng không phải lớp của Spring, chỉ là một cái tên chung chung đặt ra làm nhiễu, dễ gây nhầm với các lớp tiện ích tự viết trong dự án.
Mở trang câu hỏi này →
AViewResolver
BController
CDispatcherServlet
DResourceLoader
Lời giải
Đáp án đúng: "ViewResolver". Khi phương thức controller trả về một chuỗi như home, đó chỉ là tên view logic; DispatcherServlet hỏi các ViewResolver đã đăng ký để đổi tên này thành một đối tượng View thật, ví dụ ThymeleafViewResolver ghép tiền tố classpath:/templates/ và hậu tố .html để tìm tệp templates/home.html, còn InternalResourceViewResolver ghép đường dẫn tới tệp JSP. "Controller" chỉ tạo ra tên view và dữ liệu model, không biết template nằm ở đâu. "DispatcherServlet" điều phối toàn bộ luồng và là bên gọi ViewResolver, nhưng việc phân giải tên được uỷ cho ViewResolver chứ nó không tự làm. "ResourceLoader" là giao diện chung để nạp tài nguyên như tệp trên classpath hay hệ thống tệp theo đường dẫn, không có khái niệm tên view.
Mở trang câu hỏi này →
ATo define business logic.
BTo manage user sessions.
CTo provide an abstraction layer for database interactions.
DTo handle application security.
Lời giải
Đáp án đúng: "To provide an abstraction layer for database interactions.". DAO (Data Access Object, đối tượng truy cập dữ liệu) là mẫu thiết kế gom toàn bộ thao tác đọc ghi cơ sở dữ liệu vào một lớp có giao diện rõ ràng như findById, save, delete, giấu đi chi tiết JDBC, JPA hay SQL bên dưới; trong Spring, lớp DAO thường gắn @Repository để được quét thành bean và được dịch ngoại lệ sang DataAccessException, tầng service chỉ gọi DAO mà không biết dữ liệu nằm ở đâu. "To define business logic." là việc của tầng service, nơi điều phối quy tắc nghiệp vụ và gọi DAO. "To manage user sessions." thuộc tầng web hoặc HttpSession, Spring Session, không phải tầng dữ liệu. "To handle application security." là trách nhiệm của Spring Security với filter, xác thực và phân quyền, không phải của DAO.
Mở trang câu hỏi này →
ATo improve database performance.
BTo ensure data integrity and prevent errors.
CTo enhance user interface aesthetics.
DTo manage server configurations.
Lời giải
Đáp án đúng: "To ensure data integrity and prevent errors.". Trong ứng dụng JavaFX có thao tác CRUD (tạo, đọc, cập nhật, xoá), kiểm tra hợp lệ (validation) là bước kiểm dữ liệu người dùng nhập trên form, chẳng hạn trường bắt buộc không rỗng, email đúng định dạng, số lượng là số dương, trước khi gọi tầng service để lưu; dữ liệu sai bị chặn và báo lỗi ngay trên giao diện, nhờ vậy cơ sở dữ liệu giữ được tính toàn vẹn và tránh ngoại lệ do vi phạm ràng buộc. "To improve database performance." sai vì kiểm tra hợp lệ không làm truy vấn nhanh hơn; hiệu năng phụ thuộc chỉ mục và thiết kế truy vấn. "To enhance user interface aesthetics." sai vì thông báo lỗi có hiện trên giao diện nhưng mục đích là đúng dữ liệu, không phải thẩm mỹ. "To manage server configurations." sai vì cấu hình máy chủ là việc triển khai, không liên quan tới kiểm dữ liệu nhập.
Mở trang câu hỏi này →