Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Java - Đề 02 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Trong lập trình Java, phát biểu nào sau đây mô tả đúng nhất về tính đóng gói (encapsulation)?
- A. Tính chất cho phép một lớp kế thừa các thuộc tính và phương thức từ lớp khác.
- B. Cơ chế ẩn giấu thông tin và bảo vệ dữ liệu của đối tượng, chỉ cho phép truy cập thông qua các phương thức công khai.
- C. Khả năng một đối tượng có thể có nhiều hình thức khác nhau.
- D. Cách thức tổ chức mã nguồn thành các gói (package) để quản lý và tái sử dụng.
Câu 2: Cho đoạn mã Java sau:
```java
public class Vehicle {
protected String modelName =
- A. Đóng gói (Encapsulation)
- B. Kế thừa (Inheritance)
- C. Đa hình (Polymorphism)
- D. Trừu tượng hóa (Abstraction)
Câu 3: Trong Java, interface và abstract class khác nhau cơ bản ở điểm nào?
- A. Interface có thể chứa các biến thành viên, abstract class thì không.
- B. Abstract class hỗ trợ đa kế thừa, interface thì không.
- C. Interface có thể có constructor, abstract class thì không.
- D. Interface chỉ định nghĩa hành vi (phương thức trừu tượng), abstract class có thể vừa định nghĩa hành vi vừa hiện thực hóa một phần hành vi đó.
Câu 4: Khi nào nên sử dụng `ArrayList` thay vì `LinkedList` trong Java Collections Framework?
- A. Khi cần truy cập ngẫu nhiên đến các phần tử trong danh sách một cách thường xuyên.
- B. Khi cần chèn hoặc xóa các phần tử ở đầu hoặc cuối danh sách thường xuyên.
- C. Khi cần đảm bảo thứ tự các phần tử được thêm vào là duy nhất.
- D. Khi cần một cấu trúc dữ liệu hoạt động theo cơ chế FIFO (First-In, First-Out).
Câu 5: Cho đoạn code Java sau:
```java
try {
int result = 10 / 0;
System.out.println(
- A. Result: Infinity
Finally block executed
Program continues after try-catch-finally
- B. Caught ArithmeticException: / by zero
Finally block executed
Program continues after try-catch-finally
- C. Result: 0
Program continues after try-catch-finally
- D. Caught ArithmeticException: / by zero
Program continues after try-catch-finally
Câu 6: Trong Java, từ khóa `static` có ý nghĩa gì khi được sử dụng cho một biến thành viên (member variable) của một lớp?
- A. Biến chỉ có thể được truy cập từ bên trong cùng một gói (package).
- B. Biến không thể bị thay đổi giá trị sau khi khởi tạo.
- C. Biến thuộc về lớp chứ không phải là một thể hiện cụ thể của lớp, và được chia sẻ bởi tất cả các đối tượng của lớp đó.
- D. Biến chỉ có thể được truy cập từ các phương thức `static` khác trong cùng một lớp.
Câu 7: Phương thức `equals()` và toán tử `==` khác nhau như thế nào khi so sánh các đối tượng String trong Java?
- A. `==` so sánh nội dung chuỗi, `equals()` so sánh tham chiếu đối tượng.
- B. `==` so sánh tham chiếu đối tượng (vị trí bộ nhớ), `equals()` so sánh nội dung chuỗi.
- C. Cả `==` và `equals()` đều so sánh nội dung chuỗi đối với kiểu String.
- D. Cả `==` và `equals()` đều so sánh tham chiếu đối tượng đối với kiểu String.
Câu 8: Cho hai lớp `Animal` và `Dog` trong Java, với `Dog` kế thừa từ `Animal`. Phát biểu nào sau đây là đúng?
- A. Một đối tượng của lớp `Animal` luôn có thể được ép kiểu ngầm định thành một đối tượng của lớp `Dog`.
- B. Lớp `Animal` có thể truy cập trực tiếp các thuộc tính và phương thức `private` của lớp `Dog`.
- C. Một đối tượng của lớp `Dog` có thể được gán cho một biến tham chiếu kiểu `Animal`.
- D. Lớp `Dog` không thể ghi đè (override) các phương thức của lớp `Animal`.
Câu 9: Trong Java, cơ chế garbage collection hoạt động như thế nào?
- A. Lập trình viên phải tự giải phóng bộ nhớ bằng từ khóa `delete` khi đối tượng không còn cần thiết.
- B. Garbage collector chỉ chạy khi chương trình kết thúc để giải phóng toàn bộ bộ nhớ đã sử dụng.
- C. Garbage collector là một tiến trình chạy nền, định kỳ kiểm tra và giải phóng bộ nhớ của các đối tượng vẫn còn được tham chiếu.
- D. Garbage collector là một tiến trình chạy nền, định kỳ kiểm tra và giải phóng bộ nhớ của các đối tượng không còn được tham chiếu đến từ bất kỳ đâu trong chương trình.
Câu 10: Để tạo một luồng (thread) mới trong Java, bạn có thể sử dụng cách nào?
- A. Chỉ có thể tạo luồng bằng cách kế thừa lớp `Thread`.
- B. Chỉ có thể tạo luồng bằng cách hiện thực hóa interface `Callable`.
- C. Có thể tạo luồng bằng cách kế thừa lớp `Thread` hoặc hiện thực hóa interface `Runnable`.
- D. Luồng chỉ có thể được tạo ra bởi hệ điều hành, Java không cung cấp cơ chế tạo luồng.
Câu 11: Giả sử bạn có một mảng các số nguyên đã được sắp xếp. Thuật toán tìm kiếm nào hiệu quả nhất để tìm kiếm một giá trị cụ thể trong mảng này?
- A. Tìm kiếm tuyến tính (Linear Search)
- B. Tìm kiếm nhị phân (Binary Search)
- C. Tìm kiếm theo chiều rộng (Breadth-First Search)
- D. Tìm kiếm theo chiều sâu (Depth-First Search)
Câu 12: Trong Java, annotation (chú thích) được sử dụng để làm gì?
- A. Thay thế cho việc sử dụng comment để giải thích code.
- B. Định nghĩa các phương thức trừu tượng trong interface.
- C. Thực hiện kiểm tra kiểu dữ liệu tại thời gian biên dịch.
- D. Cung cấp metadata (dữ liệu về dữ liệu) cho compiler, runtime environment hoặc các công cụ khác.
Câu 13: Cho đoạn code Java sau:
```java
List names = Arrays.asList(
- A. Lọc và in ra các tên trong danh sách bắt đầu bằng chữ "C".
- B. Sắp xếp danh sách tên theo thứ tự bảng chữ cái.
- C. Đếm số lượng tên trong danh sách.
- D. Chuyển đổi danh sách tên thành chữ hoa.
Câu 14: Trong Java, serialization (tuần tự hóa) là quá trình gì?
- A. Quá trình chuyển đổi mã nguồn Java thành bytecode.
- B. Quá trình chuyển đổi trạng thái của một đối tượng thành một chuỗi byte để có thể lưu trữ hoặc truyền tải qua mạng.
- C. Quá trình kiểm tra và sửa lỗi trong mã nguồn Java.
- D. Quá trình tối ưu hóa hiệu suất của chương trình Java.
Câu 15: Để đảm bảo tính bất biến (immutability) của một đối tượng trong Java, bạn cần tuân thủ nguyên tắc nào?
- A. Sử dụng từ khóa `synchronized` cho tất cả các phương thức của lớp.
- B. Khai báo lớp là `final` để ngăn chặn kế thừa.
- C. Đảm bảo rằng trạng thái của đối tượng không thể thay đổi sau khi nó được tạo ra, ví dụ bằng cách làm cho tất cả các trường là `final` và `private` và không cung cấp các phương thức setter.
- D. Sử dụng design pattern Singleton để đảm bảo chỉ có một thể hiện duy nhất của lớp.
Câu 16: Trong Java, Dependency Injection (DI) là một design pattern giúp giải quyết vấn đề gì?
- A. Vấn đề về hiệu suất khi làm việc với cơ sở dữ liệu.
- B. Vấn đề về sự phụ thuộc chặt chẽ giữa các thành phần phần mềm, giúp giảm coupling và tăng tính module hóa.
- C. Vấn đề về quản lý bộ nhớ và garbage collection.
- D. Vấn đề về bảo mật và xác thực người dùng.
Câu 17: Cho đoạn code Java sau:
```java
public interface Drawable {
void draw();
}
public class Circle implements Drawable {
@Override
public void draw() {
System.out.println(
- A. Single Responsibility Principle (SRP)
- B. Open/Closed Principle (OCP)
- C. Liskov Substitution Principle (LSP)
- D. Interface Segregation Principle (ISP)
Câu 18: Trong Java, JDBC (Java Database Connectivity) được sử dụng để làm gì?
- A. Để kết nối và tương tác với các hệ quản trị cơ sở dữ liệu từ ứng dụng Java.
- B. Để xây dựng giao diện người dùng đồ họa (GUI) cho ứng dụng Java.
- C. Để quản lý bộ nhớ và garbage collection trong Java.
- D. Để thực hiện các hoạt động mạng trong Java.
Câu 19: Phát biểu nào sau đây mô tả đúng nhất về khái niệm "lambda expression" trong Java?
- A. Một loại vòng lặp mới được giới thiệu trong Java 8.
- B. Một cách thức biểu diễn một anonymous function (hàm vô danh), cho phép viết code ngắn gọn và biểu cảm hơn, đặc biệt khi làm việc với functional interfaces.
- C. Một cơ chế để xử lý ngoại lệ trong Java.
- D. Một cách để định nghĩa interface trong Java.
Câu 20: Trong Java, "functional interface" là gì?
- A. Interface được sử dụng để định nghĩa các hàm toán học.
- B. Interface có thể có nhiều phương thức `default`.
- C. Interface chỉ có duy nhất một phương thức trừu tượng.
- D. Interface không chứa bất kỳ phương thức nào.
Câu 21: Cho đoạn code Java sau:
```java
Optional name = Optional.ofNullable(null);
String result = name.orElse(
- A. Để tạo ra các đối tượng tùy biến (customizable objects).
- B. Để quản lý các tùy chọn cấu hình của ứng dụng.
- C. Để thực hiện các phép toán tùy chọn (optional operations).
- D. Để xử lý các giá trị có thể null một cách an toàn và tránh NullPointerException.
Câu 22: Trong Java, RESTful API thường được xây dựng dựa trên giao thức nào?
- A. HTTP
- B. TCP
- C. UDP
- D. SMTP
Câu 23: Khi làm việc với Java NIO (Non-blocking I/O), "channel" đại diện cho khái niệm gì?
- A. Một vùng bộ nhớ đệm (buffer) để lưu trữ dữ liệu.
- B. Một kết nối đến một entity có khả năng thực hiện các hoạt động I/O, ví dụ như file hoặc socket.
- C. Một luồng xử lý dữ liệu tuần tự.
- D. Một cơ chế để quản lý đa luồng trong Java.
Câu 24: Trong Java, JPA (Java Persistence API) là một...
- A. Thư viện để xây dựng giao diện người dùng web.
- B. Framework để phát triển ứng dụng di động Android.
- C. Đặc tả (specification) cho việc quản lý dữ liệu bền vững (persistence) và ORM (Object-Relational Mapping) trong Java EE.
- D. Công cụ để biên dịch mã nguồn Java thành bytecode.
Câu 25: Cho đoạn code Java sử dụng Generics:
```java
public class Box {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
public static void main(String[] args) {
Box integerBox = new Box<>();
integerBox.setContent(10);
Integer value = integerBox.getContent();
System.out.println(value);
}}
```
Generics trong Java giúp giải quyết vấn đề chính nào?
- A. Giảm kích thước bytecode của chương trình.
- B. Tăng cường type safety bằng cách phát hiện lỗi kiểu dữ liệu tại thời gian biên dịch (compile time) thay vì runtime, và loại bỏ sự cần thiết của việc ép kiểu (casting).
- C. Tăng hiệu suất thực thi của chương trình.
- D. Đơn giản hóa việc quản lý bộ nhớ.
Câu 26: Trong ngữ cảnh của Java Web Application, Servlet container (ví dụ: Tomcat, Jetty) có vai trò gì?
- A. Biên dịch mã nguồn Java thành bytecode.
- B. Quản lý kết nối cơ sở dữ liệu cho ứng dụng web.
- C. Cung cấp runtime environment cho servlets, quản lý lifecycle của servlets, và xử lý các request từ client và response trả về.
- D. Xây dựng giao diện người dùng cho ứng dụng web.
Câu 27: Phát biểu nào sau đây đúng về Java Virtual Machine (JVM)?
- A. JVM là một trình biên dịch mã nguồn Java.
- B. JVM chỉ chạy được trên hệ điều hành Windows.
- C. JVM chịu trách nhiệm quản lý bộ nhớ nhưng không thực hiện garbage collection.
- D. JVM là một môi trường runtime cho phép thực thi bytecode Java và cung cấp tính độc lập nền tảng (platform independence).
Câu 28: Trong Java, từ khóa `transient` được sử dụng để làm gì khi khai báo một biến thành viên?
- A. Đảm bảo biến luôn được khởi tạo giá trị mặc định.
- B. Ngăn không cho biến được tuần tự hóa (serialized) khi đối tượng chứa nó được tuần tự hóa.
- C. Khai báo biến là hằng số (constant).
- D. Cho phép biến được truy cập từ bất kỳ đâu trong chương trình.
Câu 29: Cho đoạn code Java sau:
```java
public class Example {
public static void main(String[] args) {
String str1 = new String(
- A. true
true
- B. false
false
- C. false
true
- D. true
false
Câu 30: Trong Java, design pattern Singleton được sử dụng để làm gì?
- A. Tạo ra một lớp không thể bị kế thừa.
- B. Đảm bảo tính bất biến của đối tượng.
- C. Quản lý vòng đời của các đối tượng trong ứng dụng.
- D. Đảm bảo rằng một lớp chỉ có một instance duy nhất và cung cấp một điểm truy cập toàn cục đến instance đó.