Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Java - Đề 09 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 hướng đối tượng Java, khái niệm nào cho phép một lớp con (subclass) kế thừa các thuộc tính và phương thức từ lớp cha (superclass), đồng thời có thể mở rộng hoặc sửa đổi chúng?
- A. Đóng gói (Encapsulation)
- B. Kế thừa (Inheritance)
- C. Đa hình (Polymorphism)
- D. Trừu tượng (Abstraction)
Câu 2: Cho đoạn mã Java sau:
```java
public class Vehicle {
public void startEngine() {
System.out.println(
- A. Kế thừa;
- B. Đóng gói;
- C. Đa hình;
- D. Trừu tượng;
Câu 3: Phương thức `equals()` và toán tử `==` trong Java khác nhau như thế nào khi so sánh các đối tượng?
- A. `equals()` so sánh tham chiếu, `==` so sánh giá trị
- B. Cả hai đều so sánh giá trị
- C. Cả hai đều so sánh tham chiếu
- D. `==` so sánh tham chiếu, `equals()` so sánh giá trị (nội dung) của đối tượng
Câu 4: Kiểu dữ liệu nào sau đây KHÔNG phải là kiểu dữ liệu nguyên thủy (primitive data type) trong Java?
- A. int
- B. boolean
- C. String
- D. char
Câu 5: Trong Java, từ khóa `static` được sử dụng để làm gì?
- A. Khai báo một biến cục bộ trong phương thức
- B. Tạo ra các biến và phương thức thuộc về lớp, không phải đối tượng cụ thể
- C. Ngăn chặn việc kế thừa lớp
- D. Chỉ định rằng một phương thức có thể bị ghi đè trong lớp con
Câu 6: Ngoại lệ (Exception) trong Java là gì và cơ chế xử lý ngoại lệ `try-catch-finally` dùng để làm gì?
- A. Lỗi xảy ra trong quá trình thực thi chương trình; để bắt và xử lý lỗi, đảm bảo chương trình không bị dừng đột ngột
- B. Lỗi cú pháp khi biên dịch; để sửa lỗi cú pháp trước khi chạy chương trình
- C. Cảnh báo từ trình biên dịch; để tối ưu hóa hiệu suất chương trình
- D. Một loại dữ liệu đặc biệt; để lưu trữ thông tin lỗi
Câu 7: Phương thức `main()` trong Java có vai trò gì và tại sao nó cần phải là `public static void`?
- A. Phương thức khởi tạo đối tượng; `public` để tạo đối tượng từ bên ngoài lớp, `static` để gọi mà không cần đối tượng, `void` vì không trả về giá trị
- B. Phương thức hủy đối tượng; `public` để gọi từ bất kỳ đâu, `static` để gọi khi lớp kết thúc, `void` vì không có giá trị trả về
- C. Điểm bắt đầu thực thi chương trình; `public` để JVM có thể truy cập, `static` để JVM gọi mà không cần tạo đối tượng lớp, `void` vì không trả về giá trị cho hệ điều hành
- D. Phương thức nhập dữ liệu; `public` để người dùng nhập dữ liệu, `static` để dùng chung cho tất cả đối tượng, `void` vì không trả về dữ liệu
Câu 8: Giao diện (Interface) trong Java khác với lớp trừu tượng (Abstract Class) như thế nào?
- A. Interface có thể chứa thuộc tính, Abstract Class thì không
- B. Lớp có thể kế thừa nhiều Interface, nhưng chỉ có thể kế thừa một Abstract Class
- C. Abstract Class chỉ chứa phương thức trừu tượng, Interface có thể chứa cả phương thức cụ thể
- D. Interface được sử dụng để tạo đối tượng, Abstract Class thì không
Câu 9: Cho đoạn mã Java sau:
```java
String str1 =
- A. true, true; Vì cả hai đều so sánh giá trị chuỗi
- B. false, false; Vì `String` là kiểu tham chiếu
- C. false, true; Vì `==` so sánh tham chiếu, `equals()` so sánh giá trị chuỗi
- D. true, false; Vì `str1` được tạo bằng literal, `str2` bằng constructor
Câu 10: Vòng lặp `for-each` (enhanced for loop) trong Java được sử dụng để làm gì và cú pháp của nó như thế nào?
- A. Lặp vô hạn; `for (;;) { ... }`
- B. Lặp có điều kiện; `for (condition) { ... }`
- C. Lặp theo chỉ số; `for (int i=0; i
- D. Duyệt qua các phần tử của mảng hoặc collection; `for (elementType element : collection) { ... }`
Câu 11: Phương thức `substring(int beginIndex, int endIndex)` của lớp `String` trong Java trả về giá trị gì?
- A. Vị trí của chuỗi con trong chuỗi gốc
- B. Một chuỗi con, bắt đầu từ `beginIndex` và kết thúc trước `endIndex`
- C. Chuỗi gốc sau khi loại bỏ chuỗi con từ `beginIndex` đến `endIndex`
- D. Số lượng ký tự trong chuỗi con từ `beginIndex` đến `endIndex`
Câu 12: Mức độ truy cập (access modifiers) `public`, `private`, `protected`, và default (package-private) trong Java khác nhau như thế nào về phạm vi truy cập?
- A. Không có sự khác biệt, chúng có thể thay thế lẫn nhau
- B. Chỉ khác nhau về tên gọi, phạm vi truy cập giống nhau
- C. `public` (mọi nơi), `protected` (cùng package và lớp con), default (cùng package), `private` (trong lớp)
- D. `public` (trong lớp), `protected` (cùng package), default (cùng package và lớp con), `private` (mọi nơi)
Câu 13: Bộ nhớ Heap và Stack trong JVM (Java Virtual Machine) được sử dụng để làm gì và khác nhau như thế nào?
- A. Heap cho biến nguyên thủy, Stack cho đối tượng; Heap nhanh hơn Stack
- B. Stack cho biến toàn cục, Heap cho biến cục bộ; Stack lớn hơn Heap
- C. Cả hai đều dùng cho đối tượng, chỉ khác nhau về tốc độ truy cập
- D. Heap cho đối tượng và biến instance, Stack cho biến cục bộ và stack frames; Heap quản lý động, Stack theo cơ chế LIFO
Câu 14: Garbage Collection (GC) trong Java là gì và nó hoạt động như thế nào?
- A. Quá trình tự động thu hồi bộ nhớ không còn được sử dụng bởi chương trình Java
- B. Quá trình giải phóng bộ nhớ được thực hiện thủ công bởi lập trình viên
- C. Một loại lỗi bộ nhớ trong Java, cần khởi động lại JVM để khắc phục
- D. Cơ chế tối ưu hóa hiệu suất chương trình bằng cách nén dữ liệu trong bộ nhớ
Câu 15: Hãy sắp xếp các bước sau theo đúng thứ tự trong quy trình phát triển và thực thi một chương trình Java:
A. Biên dịch mã nguồn Java (.java) thành bytecode (.class)
B. Viết mã nguồn Java (.java)
C. Thực thi bytecode (.class) trên JVM
D. Nạp bytecode (.class) vào bộ nhớ
- A. A-B-C-D
- B. B-A-D-C
- C. C-D-A-B
- D. D-C-B-A
Câu 16: Cho đoạn mã Java sau:
```java
int[] numbers = {1, 2, 3, 4, 5};
int sum = 0;
for (int number : numbers) {
if (number % 2 == 0) {
continue;
}
sum += number;
}
System.out.println(sum);
```
Kết quả in ra màn hình của đoạn mã trên là gì và từ khóa `continue` có tác dụng gì trong vòng lặp?
- A. 15; `continue` kết thúc vòng lặp
- B. 6; `continue` bỏ qua các lần lặp tiếp theo
- C. 9; `continue` bỏ qua phần còn lại của lần lặp hiện tại và chuyển sang lần lặp tiếp theo
- D. 0; `continue` không có tác dụng trong trường hợp này
Câu 17: Phương thức `parseInt()` của lớp `Integer` và `valueOf()` của lớp `String` có chức năng gì và trả về kiểu dữ liệu gì?
- A. `parseInt()`: String sang String, `valueOf()`: String sang Integer
- B. `parseInt()`: Integer sang String, `valueOf()`: Integer sang Integer
- C. `parseInt()`: String sang boolean, `valueOf()`: boolean sang String
- D. `parseInt()`: String sang int, `valueOf()`: primitive type hoặc String sang đối tượng tương ứng (Integer, String,...)
Câu 18: Cho đoạn mã Java sau:
```java
List names = new ArrayList<>();
names.add(
- A. 3; Xóa phần tử
- B. 2; Xóa phần tử ở vị trí index 1 (tức
- C. 3; Xóa phần tử đầu tiên (
- D. 1; Xóa tất cả phần tử có giá trị
Câu 19: Sự khác biệt chính giữa `ArrayList` và `LinkedList` trong Java Collections Framework là gì và khi nào nên sử dụng loại nào?
- A. `ArrayList` nhanh hơn `LinkedList` trong mọi thao tác; dùng `ArrayList` khi cần thêm/xóa nhiều
- B. `LinkedList` nhanh hơn `ArrayList` trong mọi thao tác; dùng `LinkedList` khi cần truy cập ngẫu nhiên
- C. `ArrayList` truy cập phần tử nhanh hơn, `LinkedList` thêm/xóa phần tử ở giữa nhanh hơn; dùng `ArrayList` khi truy cập nhiều, `LinkedList` khi thêm/xóa nhiều
- D. Không có sự khác biệt về hiệu suất; có thể dùng thay thế nhau trong mọi trường hợp
Câu 20: HashMap và HashSet trong Java Collections Framework khác nhau như thế nào về cấu trúc và mục đích sử dụng?
- A. `HashMap` lưu cặp key-value, cho phép truy xuất nhanh theo key; `HashSet` lưu tập hợp các phần tử duy nhất, kiểm tra sự tồn tại nhanh
- B. `HashMap` lưu danh sách có thứ tự, `HashSet` lưu danh sách không thứ tự
- C. `HashMap` chỉ lưu được số nguyên, `HashSet` lưu được mọi kiểu dữ liệu
- D. Không có sự khác biệt, chỉ khác nhau về tên gọi
Câu 21: Cho đoạn mã Java sau:
```java
int a = 5;
int b = 10;
int result = (a > b) ? a : b;
System.out.println(result);
```
Kết quả in ra màn hình là gì và toán tử `?:` trong Java được gọi là gì?
- A. 5; Toán tử logic AND
- B. true; Toán tử so sánh
- C. 10; Toán tử điều kiện (ternary operator)
- D. false; Toán tử gán
Câu 22: Từ khóa `final` trong Java có thể được sử dụng với biến, phương thức và lớp. Ý nghĩa của `final` trong mỗi trường hợp này là gì?
- A. Biến: hằng số, Phương thức: trừu tượng, Lớp: giao diện
- B. Biến: có thể thay đổi, Phương thức: có thể ghi đè, Lớp: có thể kế thừa
- C. Biến: chỉ đọc, Phương thức: tĩnh, Lớp: nội bộ
- D. Biến: không thể gán lại giá trị, Phương thức: không thể bị ghi đè, Lớp: không thể bị kế thừa
Câu 23: Annotation (chú thích) trong Java là gì và chúng được sử dụng để làm gì?
- A. Ghi chú giải thích mã nguồn cho người đọc
- B. Metadata cung cấp thông tin bổ sung về mã nguồn cho trình biên dịch và JVM, ví dụ `@Override`, `@Deprecated`
- C. Cú pháp đặc biệt để viết comment nhiều dòng
- D. Tên gọi khác của Interface trong Java
Câu 24: Stream API trong Java 8 (và các phiên bản sau) cung cấp cơ chế xử lý dữ liệu kiểu functional programming. Hãy mô tả ngắn gọn về Stream và một số phương thức phổ biến của Stream API (ví dụ: `map`, `filter`, `reduce`).
- A. Stream là một loại collection mới; `map`: tạo collection mới, `filter`: lọc collection, `reduce`: sắp xếp collection
- B. Stream là một interface; `map`: tạo interface mới, `filter`: lọc interface, `reduce`: giảm kích thước interface
- C. Stream là luồng dữ liệu trừu tượng; `map`: biến đổi từng phần tử, `filter`: lọc phần tử theo điều kiện, `reduce`: kết hợp các phần tử thành một giá trị
- D. Stream là một kiểu dữ liệu nguyên thủy; `map`: chuyển kiểu dữ liệu, `filter`: kiểm tra kiểu dữ liệu, `reduce`: tính toán trung bình kiểu dữ liệu
Câu 25: Lambda Expression trong Java 8 (và các phiên bản sau) là gì và nó giúp đơn giản hóa việc lập trình như thế nào?
- A. Một loại vòng lặp mới; giúp lặp qua các phần tử của collection nhanh hơn
- B. Biểu thức hàm vô danh (anonymous function); giúp viết mã ngắn gọn hơn, đặc biệt khi làm việc với functional interfaces
- C. Một cách khai báo biến mới; giúp khai báo biến cục bộ trong lambda scope
- D. Một cú pháp mới để khai báo class; giúp tạo class ẩn danh
Câu 26: Functional Interface trong Java 8 (và các phiên bản sau) là gì và nó liên quan đến Lambda Expression như thế nào?
- A. Interface có nhiều phương thức trừu tượng; Lambda Expression không thể dùng với Functional Interface
- B. Interface không có phương thức nào; Lambda Expression là cách hiện thực Functional Interface
- C. Interface chỉ chứa phương thức static; Lambda Expression gọi phương thức static của Functional Interface
- D. Interface có đúng một phương thức trừu tượng; Lambda Expression cung cấp cách hiện thực ngắn gọn cho phương thức trừu tượng đó
Câu 27: Multi-threading (đa luồng) trong Java là gì và lợi ích của việc sử dụng đa luồng trong lập trình?
- A. Khả năng thực thi đồng thời nhiều phần của chương trình (luồng) trong một tiến trình; tăng hiệu suất, cải thiện khả năng phản hồi
- B. Khả năng chia chương trình thành nhiều file mã nguồn; dễ quản lý mã nguồn lớn
- C. Khả năng chạy chương trình trên nhiều máy tính cùng lúc; tăng tốc độ xử lý
- D. Khả năng sử dụng nhiều kiểu dữ liệu khác nhau trong chương trình; tăng tính linh hoạt
Câu 28: Thread và Process (tiến trình) khác nhau như thế nào trong ngữ cảnh hệ điều hành và lập trình Java?
- A. Thread là chương trình đang chạy, Process là một phần của chương trình
- B. Process là đơn vị tài nguyên cấp phát bởi hệ điều hành, Thread là đơn vị thực thi trong Process; nhiều thread có thể chung process, chia sẻ bộ nhớ
- C. Thread và Process là như nhau, chỉ khác tên gọi
- D. Process chỉ dùng cho ứng dụng desktop, Thread chỉ dùng cho ứng dụng web
Câu 29: Hãy mô tả ngắn gọn về cơ chế Synchronization (đồng bộ hóa) trong Java và tại sao nó cần thiết trong lập trình đa luồng.
- A. Cơ chế tăng tốc độ thực thi chương trình đa luồng
- B. Cơ chế tạo ra nhiều thread trong Java
- C. Cơ chế kiểm soát truy cập vào tài nguyên chia sẻ bởi nhiều luồng, tránh xung đột và đảm bảo tính nhất quán dữ liệu
- D. Cơ chế quản lý bộ nhớ cho các thread
Câu 30: Serialization (tuần tự hóa) trong Java là gì và nó được sử dụng để làm gì?
- A. Quá trình mã hóa dữ liệu để bảo mật
- B. Quá trình tối ưu hóa hiệu suất chương trình
- C. Quá trình kiểm tra lỗi trong chương trình
- D. Quá trình chuyển đổi đối tượng thành luồng byte để lưu trữ hoặc truyền qua mạng, và ngược lại (deserialization)