Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Java - Đề 10 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, khái niệm nào sau đây thể hiện tính đóng gói (encapsulation) một cách rõ ràng nhất?
- A. Tính đa hình (Polymorphism)
- B. Lớp (Class) và đối tượng (Object)
- C. Tính kế thừa (Inheritance)
- D. Giao diện (Interface)
Câu 2: Xem xét đoạn mã Java sau:
```java
public class Vehicle {
protected String modelName;
public Vehicle(String model) {
this.modelName = model;
}
}
public class Car extends Vehicle {
public Car(String model) {
super(model);
}
public String getModel() {
return modelName;
}
}
```
Điều gì xảy ra nếu bạn cố gắng truy cập `modelName` trực tiếp từ một đối tượng `Car` bên ngoài lớp `Car`?
- A. Truy cập thành công và trả về tên model.
- B. Gây ra lỗi biên dịch vì `modelName` là private.
- C. Gây ra lỗi biên dịch vì `modelName` là protected và truy cập từ ngoài package hoặc lớp không phải con.
- D. Truy cập thành công nhưng trả về giá trị null.
Câu 3: 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. Không có sự khác biệt, cả hai đều so sánh giá trị của chuỗi.
- B. Cả hai đều so sánh tham chiếu của đối tượng String.
- C. `==` so sánh giá trị, `equals()` so sánh tham chiếu.
- D. `equals()` so sánh giá trị nội dung chuỗi, `==` so sánh tham chiếu đối tượng String.
Câu 4: Cho đoạn mã sau:
```java
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
if (i % 2 != 0) {
continue;
}
System.out.print(numbers[i] +
- A. 1 3 5
- B. 2 4
- C. 1 2 3 4 5
- D. Không in ra gì
Câu 5: Trong Java, interface và abstract class khác nhau cơ bản ở điểm nào?
- A. Interface có thể có phương thức concrete, abstract class thì không.
- B. Interface chỉ chứa phương thức abstract và hằng số, abstract class có thể chứa cả phương thức abstract và concrete, biến thành viên.
- C. Abstract class hỗ trợ đa kế thừa, interface thì không.
- D. Không có sự khác biệt đáng kể giữa interface và abstract class.
Câu 6: Giải thích ngắn gọn mục đích chính của garbage collection trong Java.
- A. Tối ưu hóa hiệu suất CPU.
- B. Quản lý việc cấp phát bộ nhớ cho các đối tượng.
- C. Tự động giải phóng bộ nhớ không còn được tham chiếu bởi chương trình, ngăn ngừa rò rỉ bộ nhớ.
- D. Kiểm soát truy cập bộ nhớ của các threads.
Câu 7: Phương thức `parseInt()` thuộc lớp nào và dùng để làm gì?
- A. Lớp `String`, dùng để chuyển đổi số nguyên sang chuỗi.
- B. Lớp `Scanner`, dùng để đọc số nguyên từ input.
- C. Lớp `Math`, dùng để tính căn bậc hai của một số nguyên.
- D. Lớp `Integer`, dùng để chuyển đổi một chuỗi biểu diễn số nguyên thành kiểu `int`.
Câu 8: Khi nào thì một biến thành viên (instance variable) của một lớp được khởi tạo?
- A. Khi lớp được load vào bộ nhớ.
- B. Khi một đối tượng (instance) của lớp được tạo ra.
- C. Khi chương trình Java bắt đầu thực thi.
- D. Khi phương thức main() của lớp được gọi.
Câu 9: Điều gì sẽ xảy ra nếu bạn cố gắng biên dịch và chạy một chương trình Java có nhiều lớp `public static void main(String[] args)`?
- A. Chương trình sẽ biên dịch lỗi vì có nhiều điểm vào.
- B. Chương trình sẽ chạy lần lượt tất cả các phương thức `main`.
- C. Chương trình sẽ biên dịch thành công, nhưng chỉ phương thức `main` của lớp được chỉ định khi chạy chương trình (thường là lớp đầu tiên được biên dịch hoặc chỉ định khi chạy) sẽ được thực thi.
- D. Chương trình sẽ chọn ngẫu nhiên một phương thức `main` để thực thi.
Câu 10: Trong Java, từ khóa `final` được sử dụng để làm gì?
- A. Khai báo một lớp abstract.
- B. Bắt buộc một lớp phải được kế thừa.
- C. Định nghĩa một phương thức abstract.
- D. Ngăn không cho một biến bị thay đổi giá trị sau khi khởi tạo, ngăn không cho một phương thức bị override, và ngăn không cho một lớp bị kế thừa.
Câu 11: Phân biệt checked exception và unchecked exception trong Java. Cho ví dụ minh họa mỗi loại.
- A. Checked exception (ví dụ: `IOException`) phải được xử lý tại thời điểm biên dịch, unchecked exception (ví dụ: `NullPointerException`) thì không bắt buộc.
- B. Checked exception chỉ xảy ra trong quá trình chạy, unchecked exception xảy ra khi biên dịch.
- C. Checked exception là lỗi do người dùng nhập liệu, unchecked exception là lỗi hệ thống.
- D. Không có sự khác biệt giữa checked và unchecked exception.
Câu 12: Đoạn code sau in ra kết quả gì?
```java
public class Test {
public static void main(String[] args) {
int x = 5;
increment(x);
System.out.println(x);
}
public static void increment(int value) {
value++;
}
}
```
- A. 6
- B. 5
- C. Lỗi biên dịch
- D. Không in ra gì
Câu 13: Giả sử bạn có một lớp `Person` và muốn sắp xếp một danh sách các đối tượng `Person` theo tên. Bạn sẽ hiện thực interface nào và phương thức nào để làm điều này trong Java?
- A. Interface `Comparator` và phương thức `compare()`.
- B. Interface `Serializable` và phương thức `writeObject()`.
- C. Interface `Comparable` và phương thức `compareTo()`.
- D. Interface `Cloneable` và phương thức `clone()`.
Câu 14: Giải thích sự khác biệt giữa `ArrayList` và `LinkedList` trong Java, và khi nào nên sử dụng loại nào?
- A. `ArrayList` nhanh hơn trong việc thêm/xóa phần tử ở đầu danh sách, `LinkedList` nhanh hơn trong việc truy cập phần tử ngẫu nhiên.
- B. Không có sự khác biệt về hiệu suất giữa `ArrayList` và `LinkedList`.
- C. `ArrayList` sử dụng bộ nhớ hiệu quả hơn `LinkedList` trong mọi trường hợp.
- D. `ArrayList` dựa trên mảng động, truy cập phần tử nhanh (O(1)), thêm/xóa ở cuối nhanh, chèn/xóa ở giữa chậm (O(n)). `LinkedList` dựa trên danh sách liên kết, chèn/xóa ở bất kỳ đâu nhanh (O(1)), truy cập phần tử chậm (O(n)). Dùng `ArrayList` khi truy cập nhiều, `LinkedList` khi chèn/xóa nhiều.
Câu 15: Trong Java, thread là gì và tại sao chúng ta sử dụng đa luồng (multithreading)?
- A. Thread là một loại biến đặc biệt trong Java.
- B. Thread là một luồng thực thi riêng biệt trong một chương trình. Đa luồng cho phép thực hiện đồng thời nhiều tác vụ, tăng hiệu suất và tính phản hồi của ứng dụng.
- C. Thread chỉ được sử dụng để xử lý lỗi trong Java.
- D. Thread là một khái niệm chỉ liên quan đến lập trình web với Java.
Câu 16: Cho đoạn code sau:
```java
String str1 =
- A. true
true
- B. false
false
- C. false
true
- D. true
false
Câu 17: Mục đích của từ khóa `static` trong Java là gì?
- A. Tạo ra các thành viên của lớp (biến và phương thức) mà không cần tạo đối tượng của lớp để truy cập. Các thành viên static thuộc về lớp chứ không phải đối tượng.
- B. Khai báo một biến là hằng số (constant).
- C. Cho phép một phương thức được override trong lớp con.
- D. Tạo ra các đối tượng có thể thay đổi trạng thái.
Câu 18: Phương thức `toString()` được sử dụng để làm gì và tại sao nó quan trọng trong Java?
- A. Để chuyển đổi một đối tượng sang kiểu dữ liệu String.
- B. Để trả về một chuỗi đại diện cho đối tượng. Nó quan trọng vì giúp hiển thị thông tin đối tượng một cách dễ đọc khi in hoặc debug.
- C. Để so sánh hai đối tượng String.
- D. Để tạo một bản sao của đối tượng.
Câu 19: Hãy mô tả ngắn gọn về nguyên tắc SOLID trong lập trình hướng đối tượng và cho biết chữ "L" trong SOLID đại diện cho nguyên tắc nào.
- A. SOLID là các quy tắc đặt tên biến và phương thức. "L" là nguyên tắc "Law of Demeter".
- B. SOLID là các pattern thiết kế phổ biến trong Java. "L" là nguyên tắc "Loose Coupling".
- C. SOLID là tập hợp các nguyên tắc thiết kế hướng đối tượng giúp code dễ bảo trì và mở rộng. "L" là Liskov Substitution Principle (Nguyên tắc thay thế Liskov).
- D. SOLID là các kỹ thuật tối ưu hóa hiệu suất. "L" là nguyên tắc "Load Balancing".
Câu 20: Trong Java, lambda expression là gì và lợi ích chính của việc sử dụng lambda expression là gì?
- A. Lambda expression là một loại vòng lặp mới trong Java.
- B. Lambda expression là một cách khai báo biến hằng số.
- C. Lambda expression là một cơ chế xử lý ngoại lệ mới.
- D. Lambda expression là một cách viết ngắn gọn cho anonymous inner class, đặc biệt hữu ích khi làm việc với functional interface, giúp code ngắn gọn và dễ đọc hơn.
Câu 21: Giải thích cơ chế hoạt động của try-with-resources statement trong Java và lợi ích của nó.
- A. Try-with-resources là một cơ chế mới để tạo thread trong Java.
- B. Try-with-resources đảm bảo các resource (ví dụ: file, connection) được tự động đóng lại sau khi khối `try` kết thúc, giúp tránh rò rỉ resource và làm code exception handling gọn gàng hơn.
- C. Try-with-resources chỉ được sử dụng để xử lý các checked exception.
- D. Try-with-resources làm tăng hiệu suất đọc/ghi file trong Java.
Câu 22: Sự khác biệt giữa method overriding và method overloading trong Java là gì?
- A. Overriding là việc tạo ra nhiều constructor trong một lớp, overloading là việc kế thừa phương thức từ lớp cha.
- B. Overloading chỉ áp dụng cho phương thức static, overriding chỉ áp dụng cho phương thức instance.
- C. Overriding là việc lớp con định nghĩa lại một phương thức có cùng tên và signature với lớp cha (thể hiện tính đa hình runtime). Overloading là việc định nghĩa nhiều phương thức cùng tên nhưng khác signature (khác số lượng hoặc kiểu tham số) trong cùng một lớp (thể hiện tính đa hình compile-time).
- D. Không có sự khác biệt lớn giữa overriding và overloading.
Câu 23: Cho đoạn code sau:
```java
Integer num1 = 100;
Integer num2 = 100;
Integer num3 = 500;
Integer num4 = 500;
System.out.println(num1 == num2);
System.out.println(num3 == num4);
```
Kết quả in ra màn hình là gì và tại sao?
- A. true
true
Vì tất cả các đối tượng Integer được so sánh bằng giá trị.
- B. false
false
Vì `==` luôn so sánh tham chiếu đối với đối tượng.
- C. true
false
Vì Integer caching chỉ áp dụng cho giá trị nhỏ.
- D. true
false
Vì Integer caching được áp dụng cho giá trị từ -128 đến 127. `num1` và `num2` tham chiếu đến cùng một đối tượng trong cache, `num3` và `num4` thì không.
Câu 24: Giải thích khái niệm functional interface trong Java và cho ví dụ về một functional interface phổ biến trong Java 8.
- A. Functional interface là interface chỉ có một phương thức abstract duy nhất. Ví dụ: `Predicate`, `Consumer`, `Function`, `Supplier`.
- B. Functional interface là interface không chứa phương thức nào.
- C. Functional interface là interface chỉ chứa phương thức static.
- D. Functional interface là interface chỉ chứa phương thức default.
Câu 25: Stream API trong Java 8 được sử dụng để làm gì và nó khác biệt như thế nào so với cách xử lý collection truyền thống (ví dụ: vòng lặp for-each)?
- A. Stream API chỉ dùng để đọc dữ liệu từ file trong Java 8.
- B. Stream API cung cấp một cách tiếp cận functional, declarative để xử lý collections. Nó cho phép thực hiện các thao tác như filter, map, reduce một cách ngắn gọn và hiệu quả, hỗ trợ parallel processing tốt hơn so với vòng lặp truyền thống.
- C. Stream API làm cho code phức tạp hơn và khó đọc hơn so với vòng lặp for-each.
- D. Stream API không có sự khác biệt đáng kể so với cách xử lý collection truyền thống.
Câu 26: Giả sử bạn có một lớp `BankAccount` với phương thức `deposit(double amount)` và `withdraw(double amount)`. Trong môi trường đa luồng, làm thế nào để đảm bảo tính toàn vẹn dữ liệu khi nhiều threads cùng truy cập và thay đổi số dư tài khoản?
- A. Không cần biện pháp đặc biệt, Java tự động đảm bảo tính toàn vẹn dữ liệu.
- B. Sử dụng volatile keyword cho biến số dư tài khoản.
- C. Sử dụng synchronization (ví dụ: synchronized method hoặc block, Lock) để kiểm soát truy cập đồng thời vào phương thức `deposit()` và `withdraw()` và biến số dư.
- D. Chỉ cho phép một thread duy nhất chạy chương trình tại một thời điểm.
Câu 27: Dependency Injection (DI) là gì và lợi ích chính của việc sử dụng DI trong phát triển ứng dụng Java?
- A. DI là một pattern để tạo ra các singleton object.
- B. DI là một kỹ thuật để tối ưu hóa hiệu suất ứng dụng Java.
- C. DI là một cách để quản lý bộ nhớ hiệu quả hơn trong Java.
- D. Dependency Injection (DI) là một pattern thiết kế giúp giảm sự phụ thuộc giữa các components bằng cách "inject" dependencies vào đối tượng thay vì để đối tượng tự tạo hoặc tìm kiếm dependencies. Lợi ích: giảm coupling, tăng tính module hóa, dễ test và bảo trì.
Câu 28: Annotation trong Java là gì và chúng được sử dụng để làm gì?
- A. Annotation là một loại comment đặc biệt trong Java.
- B. Annotation là metadata (dữ liệu về dữ liệu) được thêm vào code Java. Chúng có thể được sử dụng để cung cấp thông tin cho compiler, runtime environment hoặc các tools khác, ví dụ: kiểm tra lỗi biên dịch, thay đổi hành vi runtime qua reflection, sinh code tự động.
- C. Annotation là một cơ chế xử lý ngoại lệ nâng cao trong Java.
- D. Annotation chỉ được sử dụng trong lập trình web với Java.
Câu 29: JPA (Java Persistence API) là gì và nó giúp ích gì trong việc phát triển ứng dụng Java?
- A. JPA là một thư viện để xây dựng giao diện người dùng đồ họa (GUI) trong Java.
- B. JPA là một framework để phát triển ứng dụng web server bằng Java.
- C. JPA (Java Persistence API) là một спецификация Java для ORM (Object-Relational Mapping). Nó cung cấp một cách chuẩn hóa để ánh xạ các đối tượng Java với các bảng trong database, giúp đơn giản hóa việc tương tác với database và giảm code boilerplate.
- D. JPA là một công cụ để debug và profile ứng dụng Java.
Câu 30: Giả sử bạn muốn lưu trữ một tập hợp các đối tượng duy nhất mà không quan tâm đến thứ tự. Cấu trúc dữ liệu Collection nào trong Java là phù hợp nhất?
- A. `Set` (ví dụ: `HashSet`)
- B. `List` (ví dụ: `ArrayList`)
- C. `Map` (ví dụ: `HashMap`)
- D. `Queue` (ví dụ: `LinkedList`)