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.220/20.347 câuCòn 15.127
ARepository layer
BService layer
CController layer
DView layer
Lời giải
Đáp án đúng: "Service layer". Trong kiến trúc phân lớp thường dùng với Spring, lớp dịch vụ đánh dấu bằng @Service chứa logic nghiệp vụ: kiểm tra quy tắc, tính toán, phối hợp nhiều repository và thường là nơi đặt ranh giới giao dịch @Transactional. "Repository layer" chỉ lo truy cập dữ liệu như lưu, tìm, xoá thực thể qua JpaRepository, không nên chứa quy tắc nghiệp vụ. "Controller layer" nhận yêu cầu HTTP, đọc tham số, gọi service rồi trả về view hoặc dữ liệu; nhồi logic nghiệp vụ vào đây làm controller phình to và khó tái sử dụng. "View layer" chỉ hiển thị dữ liệu cho người dùng, ví dụ trang Thymeleaf, không quyết định nghiệp vụ. Tách như vậy giúp mỗi lớp có một trách nhiệm và kiểm thử riêng được.
Mở trang câu hỏi này →
5202Which object holds model data?4 lựa chọn
AModel
BEntity
CView
DContext
Lời giải
Đáp án đúng: "Model". Trong Spring MVC, phương thức controller có thể khai báo tham số kiểu Model (org.springframework.ui.Model) rồi gọi addAttribute để đặt dữ liệu; sau khi phương thức trả về tên view, DispatcherServlet chuyển các thuộc tính này cho template, nên Thymeleaf đọc được chúng bằng biểu thức như ${products}. Model vì thế là đối tượng giữ dữ liệu đi từ controller sang view. "Entity" là lớp gắn @Entity ánh xạ tới bảng trong cơ sở dữ liệu; một entity có thể được đặt vào Model như một thuộc tính, nhưng bản thân nó là dữ liệu nghiệp vụ chứ không phải nơi chứa dữ liệu cho view. "View" là thành phần hiển thị, nó đọc dữ liệu từ model chứ không giữ dữ liệu. "Context" gợi tới ApplicationContext, tức container IoC quản lý bean, không phải chỗ truyền dữ liệu của một yêu cầu tới giao diện.
Mở trang câu hỏi này →
Đề bài
public class AppStarter {
  public static void main(String[] args) {
    SpringApplication.run(AppStarter.class, args);
  }
}
A@SpringBoot
B@App
C@SpringApplication
D@SpringBootApplication
Lời giải
Đáp án đúng: "@SpringBootApplication". Annotation này đánh dấu lớp chính của ứng dụng Spring Boot và là annotation gộp của ba thứ: @SpringBootConfiguration (lớp là nguồn cấu hình), @EnableAutoConfiguration (bật tự cấu hình dựa trên thư viện có trong classpath) và @ComponentScan (quét bean trong gói của lớp và các gói con); phương thức main gọi SpringApplication.run(AppStarter.class, args) để dựng ApplicationContext và khởi động server nhúng. "@SpringBoot" không phải annotation có thật trong Spring Boot, chỉ là tên rút gọn gây nhầm. "@App" cũng không tồn tại trong Spring. "@SpringApplication" dễ nhầm nhất vì SpringApplication đúng là có thật, nhưng đó là một lớp với phương thức tĩnh run dùng trong main, không phải annotation để gắn lên lớp.
Mở trang câu hỏi này →
A@PathVariable binds a query parameter; @RequestParam binds a URI template variable
B@PathVariable binds a URI template variable; @RequestParam binds a query parameter or form field
CBoth only bind data from HTTP headers
DBoth require a ModelAndView return type
Lời giải
Đáp án đúng: "@PathVariable binds a URI template variable; @RequestParam binds a query parameter or form field". Với ánh xạ @GetMapping("/users/{id}"), @PathVariable lấy giá trị của biến mẫu id nằm ngay trong đường dẫn, ví dụ /users/42 cho id bằng 42; còn @RequestParam đọc tham số truy vấn sau dấu hỏi như /users?page=2, và với Servlet API thì cũng đọc được trường của form gửi lên dạng application/x-www-form-urlencoded. "@PathVariable binds a query parameter; @RequestParam binds a URI template variable" đảo ngược đúng hai vai trò này. "Both only bind data from HTTP headers" sai vì đọc header là việc của @RequestHeader, còn hai annotation được hỏi đọc dữ liệu từ URI và tham số yêu cầu. "Both require a ModelAndView return type" sai vì kiểu trả về của phương thức xử lý độc lập với cách gắn tham số: có thể trả String tên view, đối tượng được chuyển thành JSON trong @RestController, ResponseEntity hay void.
Mở trang câu hỏi này →
AIt tightly couples the components
BIt reduces testability of code
CIt promotes loose coupling between components
DIt is required only for web apps
Lời giải
Đáp án đúng: "It promotes loose coupling between components". Dependency Injection (tiêm phụ thuộc) nghĩa là đối tượng không tự new các phụ thuộc mà được IoC container của Spring đưa vào qua constructor, setter hoặc trường; lớp chỉ phụ thuộc vào interface nên có thể thay hiện thực khác mà không sửa mã, đó chính là liên kết lỏng (loose coupling). "It tightly couples the components" nói ngược bản chất, liên kết chặt là tình trạng lớp tự tạo phụ thuộc cụ thể, thứ DI loại bỏ. "It reduces testability of code" cũng ngược lại: nhờ phụ thuộc được truyền từ ngoài, khi kiểm thử đơn vị ta dễ đưa vào mock hoặc stub thay cho cơ sở dữ liệu hay dịch vụ thật. "It is required only for web apps" sai vì DI là cơ chế của Spring Core, dùng cho mọi loại ứng dụng từ ứng dụng dòng lệnh, ứng dụng desktop tới dịch vụ web, và không phải yêu cầu riêng của ứng dụng web.
Mở trang câu hỏi này →
ATo manage database connections.
BTo process user requests and return a model and view.
CTo define user interfaces.
DTo configure application security.
Lời giải
Đáp án đúng: "To process user requests and return a model and view.". Trong Spring MVC, DispatcherServlet nhận yêu cầu HTTP rồi chuyển cho phương thức xử lý (handler) nằm trong lớp gắn @Controller; phương thức này đọc tham số, gọi tầng service, đặt dữ liệu vào Model và trả về tên view logic (hoặc một ModelAndView) để ViewResolver tìm template hiển thị, đúng vai trò bộ điều khiển trong mô hình Model–View–Controller. "To manage database connections." là việc của DataSource và bể kết nối như HikariCP, controller chỉ gọi gián tiếp qua service và repository. "To define user interfaces." thuộc về tầng View, tức các template Thymeleaf hay JSP, controller không mô tả giao diện. "To configure application security." do Spring Security đảm nhận qua chuỗi filter và bean cấu hình SecurityFilterChain, chạy trước khi yêu cầu tới controller.
Mở trang câu hỏi này →
5207Which method launches a JavaFX app?4 lựa chọn
Amain()
Bstart()
Claunch()
Drun()
Lời giải
Đáp án đúng: "launch()". Phương thức tĩnh Application.launch() là thứ khởi động một ứng dụng JavaFX: nó dựng runtime JavaFX, tạo một thể hiện của lớp con Application, gọi init() rồi gọi start(Stage) trên luồng JavaFX Application Thread với Stage chính đã được tạo sẵn, và chỉ trả về khi ứng dụng thoát. "main()" là điểm vào của JVM; trong ứng dụng JavaFX, main thường chỉ có một dòng gọi launch(args), tự nó không khởi động bộ công cụ đồ hoạ. "start()" là phương thức trừu tượng mà lập trình viên ghi đè để dựng Scene, nó được runtime gọi sau khi launch chạy chứ người lập trình không gọi trực tiếp để khởi động ứng dụng. "run()" là phương thức của Runnable hay Thread, dùng cho luồng thông thường hoặc Platform.runLater, không phải cách khởi chạy ứng dụng JavaFX.
Mở trang câu hỏi này →
ATo define database connections.
BTo initialize and show the application window.
CTo handle network requests.
DTo manage application configurations.
Lời giải
Đáp án đúng: "To initialize and show the application window.". Khi một ứng dụng JavaFX khởi chạy, runtime gọi init() rồi gọi start(Stage primaryStage) trên luồng JavaFX Application Thread, truyền vào primaryStage là cửa sổ chính do nền tảng tạo sẵn; trong start, lập trình viên dựng scene graph, gắn Scene vào Stage, đặt tiêu đề rồi gọi primaryStage.show() để cửa sổ hiện ra. "To define database connections." sai vì kết nối cơ sở dữ liệu thuộc tầng truy cập dữ liệu, không phải nhiệm vụ của phương thức vòng đời này, và mở kết nối nặng trong start còn làm treo giao diện. "To handle network requests." sai vì JavaFX không định tuyến yêu cầu mạng qua start; việc đó nên chạy trong Task hoặc luồng nền. "To manage application configurations." sai vì cấu hình thường đọc từ tệp hoặc tham số qua getParameters(), có thể làm trong init(), còn mục đích cốt lõi của start là dựng và hiển thị cửa sổ.
Mở trang câu hỏi này →
A<fxml controller="MyController" />
B<fx:controller type="MyController" />
C<fx:controller fx:id="controller" value="MyController" />
D<fx:controller value="MyController" />
Lời giải

Đáp án đúng: "<fx:controller fx:id="controller" value="MyController" />". Cần nói thẳng: trong FXML thật không có phần tử nào tên fx:controller; controller được gắn bằng thuộc tính fx:controller đặt trên phần tử gốc của tệp, ví dụ <VBox fx:controller="com.foo.MyController">, rồi FXMLLoader tạo đối tượng lớp đó và tiêm các trường @FXML theo fx:id. Vì vậy cả bốn phương án đều không phải cú pháp chạy được, và đáp án ở đây được giữ theo khoá của đề chứ không có căn cứ kỹ thuật nào để xếp nó trên phương án chỉ có value: cả hai cùng mang ý khai báo lớp controller MyController qua tên fx:controller, còn thuộc tính fx:id thêm vào không đóng vai trò gì trong việc gắn controller, nó chỉ đặt định danh cho một phần tử. "<fxml controller="MyController" /> " sai vì FXML không có thẻ fxml, và controller ở đây thiếu tiền tố fx. "<fx:controller type="MyController" />" sai vì type không phải thuộc tính dùng để gắn controller. "<fx:controller value="MyController" />" cũng sai cú pháp y như vậy vì vẫn dùng một phần tử fx:controller không tồn tại.

Mở trang câu hỏi này →
AScene scene = new Scene(new Button("Click Me"));
BStage stage = new Stage(new Button("Click Me"));
CButton button = new Button("Click Me");
DNode node = new Node(new Button("Click Me"));
Lời giải

Đáp án đúng: "Scene scene = new Scene(new Button("Click Me")); ". Trong JavaFX, Scene là vùng chứa toàn bộ đồ thị nút (scene graph) và constructor của nó nhận một Parent làm nút gốc; Button kế thừa Control, Control kế thừa Region rồi Parent, nên truyền thẳng một Button vào constructor của Scene là hợp lệ và nút đó trở thành gốc của cảnh, tức đã được đưa vào scene. "Stage stage = new Stage(new Button("Click Me")); " không biên dịch được vì Stage là cửa sổ, chỉ có constructor rỗng hoặc nhận StageStyle, và nội dung được gắn vào Stage qua setScene chứ không phải qua một nút. "Button button = new Button("Click Me"); " chỉ tạo ra đối tượng nút trong bộ nhớ, chưa gắn vào layout hay Scene nào nên chưa hiện lên màn hình. "Node node = new Node(new Button("Click Me")); " sai vì Node là lớp trừu tượng, không thể new trực tiếp và cũng không có constructor nhận một nút con.

Mở trang câu hỏi này →
ALabel
BButton
CTextField
DImageView
Lời giải
Đáp án đúng: "TextField". Trong JavaFX, TextField là control (thành phần điều khiển) cho phép người dùng gõ một dòng văn bản; chương trình đọc nội dung bằng getText() và đặt nội dung bằng setText(), còn khi cần nhập nhiều dòng thì dùng TextArea, nhập mật khẩu thì dùng PasswordField, đều là họ hàng của TextInputControl. "Label" chỉ hiển thị một đoạn chữ tĩnh, người dùng không gõ vào được, thường đặt cạnh ô nhập để làm nhãn. "Button" là nút bấm, nhận thao tác nhấn và phát ActionEvent chứ không nhận văn bản gõ vào. "ImageView" dùng để hiển thị một đối tượng Image như ảnh PNG hay JPG trên giao diện, hoàn toàn không có chức năng nhập liệu.
Mở trang câu hỏi này →
AAfter
BAfterReturning
CBefore
DAround
Lời giải
Đáp án đúng: "Before". Trong AOP (lập trình hướng khía cạnh) của Spring, advice là đoạn mã được chèn vào tại một join point (điểm nối, với Spring AOP là lời gọi phương thức); advice loại Before, khai báo bằng @Before, chạy trước khi phương thức đích thực thi và không chặn được lời gọi trừ khi ném ngoại lệ. "After" (@After) chạy sau khi phương thức kết thúc bất kể trả về bình thường hay ném ngoại lệ, giống khối finally. "AfterReturning" (@AfterReturning) chỉ chạy sau khi phương thức trả về thành công và có thể đọc giá trị trả về. "Around" (@Around) bao quanh join point, có thể chạy mã cả trước lẫn sau và tự quyết định có gọi proceed() hay không; nó làm được việc chạy trước nhưng không phải loại advice được định nghĩa riêng cho thời điểm trước join point.
Mở trang câu hỏi này →
A@OneToOne
B@ManyToOne
C@OneToMany
D@ManyToMany
Lời giải
Đáp án đúng: "@ManyToMany". Annotation @ManyToMany của đặc tả JPA đánh dấu một thuộc tính tập hợp mà mỗi phía có thể liên kết với nhiều bản ghi của phía kia, ví dụ một sinh viên học nhiều khoá học và một khoá học có nhiều sinh viên; quan hệ này được lưu qua một bảng nối (join table), có thể đặt tên và cột bằng @JoinTable ở phía sở hữu, phía còn lại dùng mappedBy. "@OneToOne" chỉ dùng khi mỗi thực thể gắn với đúng một thực thể kia, như người dùng và hồ sơ cá nhân. "@ManyToOne" mô tả phía nhiều trỏ về một, như nhiều đơn hàng thuộc một khách hàng, khoá ngoại nằm trên bảng phía nhiều. "@OneToMany" là chiều ngược lại của quan hệ đó, một khách hàng có nhiều đơn hàng, nhưng mỗi đơn hàng vẫn chỉ thuộc một khách hàng nên không diễn tả được quan hệ nhiều-nhiều.
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". Constructor Injection (tiêm phụ thuộc qua hàm khởi tạo) là cách container Spring truyền các đối tượng phụ thuộc vào tham số của constructor khi tạo bean, nhờ đó trường có thể khai báo final, đối tượng luôn ở trạng thái đầy đủ ngay khi sinh ra và dễ viết unit test vì có thể tự new với mock; từ Spring 4.3, lớp chỉ có một constructor thì không cần ghi @Autowired. "Setter Injection" truyền phụ thuộc qua phương thức setter sau khi đối tượng đã được tạo, phù hợp với phụ thuộc tuỳ chọn chứ không đi qua constructor. "Field Injection" đặt @Autowired thẳng lên trường và Spring gán giá trị bằng reflection, không có tham số khởi tạo nào. "Method Injection" là kỹ thuật Spring ghi đè một phương thức (lookup method, @Lookup) để mỗi lần gọi trả về một bean mới, thường dùng khi bean singleton cần bean prototype, cũng không liên quan tới constructor.
Mở trang câu hỏi này →
5215Consider the following Java code snippet:4 lựa chọncó code
Đề bài
public class MyService {
    private MyDependency dependency;

    public void setDependency(MyDependency dependency) {
        this.dependency = dependency;
    }

    public void performAction() {
        dependency.doSomething();
    }
}

Which Spring Core Container feature is being demonstrated in this code?

AAspect-Oriented Programming (AOP)
BDependency Injection (DI)
CResource Management
DEvent Handling
Lời giải
Đáp án đúng: "Dependency Injection (DI)". Lớp MyService không tự tạo MyDependency bằng new mà khai báo một setter setDependency để bên ngoài truyền đối tượng phụ thuộc vào; đây chính là setter injection, một dạng Dependency Injection (tiêm phụ thuộc), tính năng cốt lõi của Spring Core Container: IoC container tạo bean MyDependency rồi gọi setter để gắn nó vào MyService, nhờ vậy performAction chỉ việc gọi dependency.doSomething() mà không quan tâm đối tượng được tạo ở đâu. "Aspect-Oriented Programming (AOP)" là lập trình hướng khía cạnh, dùng để tách các mối quan tâm cắt ngang như log hay transaction bằng advice và pointcut, trong mã không có thứ gì như vậy. "Resource Management" nói về việc nạp và giải phóng tài nguyên như tệp, kết nối qua Resource hay ResourceLoader, không phải chuyện gắn đối tượng phụ thuộc. "Event Handling" là cơ chế phát và lắng nghe sự kiện qua ApplicationEvent và ApplicationListener, đoạn mã không phát hay nhận sự kiện nào.
Mở trang câu hỏi này →
AJava VM
BSpring IoC Container
CJDBC Driver
DREST Controller
Lời giải
Đáp án đúng: "Spring IoC Container". Trong Spring, bean là đối tượng do IoC container (vùng chứa đảo ngược điều khiển), cụ thể là BeanFactory và ApplicationContext, tạo ra, tiêm phụ thuộc, gọi các callback khởi tạo, quản lý phạm vi (scope) và huỷ khi đóng ngữ cảnh; mã ứng dụng không tự new các đối tượng đó mà nhận chúng từ container. "Java VM" là máy ảo chạy bytecode và cấp phát bộ nhớ cho mọi đối tượng Java, nhưng nó không biết gì về định nghĩa bean, quan hệ phụ thuộc hay vòng đời theo cấu hình Spring. "JDBC Driver" chỉ là trình điều khiển giúp mã Java nói chuyện với một hệ quản trị cơ sở dữ liệu cụ thể. "REST Controller" là một loại bean xử lý yêu cầu HTTP, tức là đối tượng được container quản lý chứ không phải thứ quản lý các bean khác.
Mở trang câu hỏi này →
ABy querying the Student entity with a join on the Course entity.
BBy querying the join table directly.
CBy querying the Course entity and accessing its students collection.
DBy querying the Student entity and filtering based on the course ID in the Student table.
Lời giải
Đáp án đúng: "By querying the Student entity with a join on the Course entity.". Trong JPA, quan hệ Many-to-Many được ánh xạ thành thuộc tính tập hợp, chẳng hạn Student có courses, nên truy vấn JPQL (Java Persistence Query Language, ngôn ngữ truy vấn trên thực thể) điển hình là SELECT s FROM Student s JOIN s.courses c WHERE c.id = :courseId, lấy đúng tập sinh viên cần trong một câu truy vấn. Phương án "By querying the Course entity and accessing its students collection." cũng lấy được dữ liệu, nhưng đó là nạp một Course rồi duyệt quan hệ (thường kích hoạt lazy loading thêm một truy vấn) chứ không phải dựng một truy vấn JPA lọc sinh viên, nên không phải cách cấu trúc truy vấn được hỏi. "By querying the join table directly." sai vì bảng nối không phải thực thể, JPQL không truy vấn được nó trừ khi viết SQL thuần, làm mất lợi ích của ORM. "By querying the Student entity and filtering based on the course ID in the Student table." sai vì với Many-to-Many, bảng Student không có cột course ID; khoá ngoại nằm ở bảng nối.
Mở trang câu hỏi này →
Athe vocabulary of a text
Bthe structure, organisation and layout of a text
Cthe meaning behind the vocabulary of a text
Dthe mode of a text
Lời giải
Đáp án đúng: "the structure, organisation and layout of a text". Diễn ngôn (discourse) là ngôn ngữ ở mức vượt trên câu: cách các câu nối và sắp xếp thành một văn bản mạch lạc, gồm cấu trúc, cách tổ chức đoạn, trình tự ý và bố cục; trong NLP, mức discourse xử lý liên kết giữa các câu như đại từ trỏ về đâu hay quan hệ nguyên nhân và kết quả giữa hai đoạn. "the vocabulary of a text" chỉ là lớp từ vựng, thuộc mức từ chứ không phải tổ chức văn bản. "the meaning behind the vocabulary of a text" là ngữ nghĩa (semantics) của từ ngữ, quan tâm từ ngữ biểu đạt gì chứ không phải chúng được sắp xếp thành văn bản ra sao. "the mode of a text" là phương thức truyền đạt, nói hay viết, in hay số, một đặc điểm ngữ cảnh chứ không phải định nghĩa của diễn ngôn.
Mở trang câu hỏi này →
AAll of the mentioned
BAutomatic Text Summarization
CAutomatic Question-Answering Systems
DInformation Retrieval
Lời giải
Đáp án đúng: "All of the mentioned". NLP được ứng dụng ở mọi nơi máy cần hiểu hoặc sinh ngôn ngữ con người. "Automatic Text Summarization" (tóm tắt văn bản tự động) rút gọn tài liệu dài, theo kiểu trích chọn câu quan trọng hoặc sinh lại câu mới, là ứng dụng NLP điển hình. "Automatic Question-Answering Systems" (hệ hỏi đáp tự động) phải hiểu câu hỏi, tìm và trích câu trả lời từ tài liệu hay cơ sở tri thức. "Information Retrieval" (truy xuất thông tin) như máy tìm kiếm dùng token hoá, chuẩn hoá, TF-IDF hay embedding để xếp hạng tài liệu theo truy vấn. Cả ba ứng dụng đều đúng, nên chọn riêng một cái thì bỏ sót những ứng dụng đúng khác cũng thuộc NLP; chỉ phương án gộp mới bao trọn.
Mở trang câu hỏi này →
5220BERT stands for:4 lựa chọn
ABidirectional Encoder Representations from Transformers
BBinary Encoder for Recursive Trees
CBayesian Embedding Representation Transformer
DBest Encoder Representation Tokenizer
Lời giải
Đáp án đúng: "Bidirectional Encoder Representations from Transformers". BERT là mô hình ngôn ngữ do Google công bố năm 2018, chỉ dùng phần encoder của Transformer và học biểu diễn hai chiều: mỗi từ được mã hoá dựa vào cả ngữ cảnh bên trái lẫn bên phải. Mô hình được huấn luyện trước bằng masked language modeling (che ngẫu nhiên một số token rồi đoán lại) và next sentence prediction, sau đó tinh chỉnh cho phân loại, NER, hỏi đáp. "Binary Encoder for Recursive Trees" sai vì BERT không mã hoá nhị phân và không làm việc trên cây đệ quy mà trên chuỗi token. "Bayesian Embedding Representation Transformer" sai vì BERT không phải mô hình Bayes, chữ B là Bidirectional. "Best Encoder Representation Tokenizer" sai vì BERT là mô hình biểu diễn chứ không phải bộ tách từ; nó có dùng tokenizer WordPiece nhưng đó chỉ là bước tiền xử lý.
Mở trang câu hỏi này →