1. Đâu là từ khóa **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. float
2. Phương thức `main()` trong Java có vai trò gì?
A. Định nghĩa lớp (class).
B. Điểm bắt đầu thực thi của chương trình.
C. Khai báo biến toàn cục.
D. Xử lý ngoại lệ.
3. Trong lập trình hướng đối tượng Java, tính đóng gói (encapsulation) thể hiện qua việc:
A. Cho phép một lớp kế thừa thuộc tính và phương thức từ lớp khác.
B. Che giấu thông tin và hành vi bên trong đối tượng, chỉ cho phép truy cập thông qua giao diện công khai.
C. Khả năng một đối tượng thuộc nhiều lớp khác nhau.
D. Tạo ra các đối tượng có cùng kiểu dữ liệu.
4. Từ khóa nào sau đây được sử dụng để tạo một đối tượng (object) trong Java?
A. class
B. interface
C. new
D. extends
5. 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. `equals()` so sánh tham chiếu đối tượng, `==` so sánh giá trị chuỗi.
B. `equals()` so sánh giá trị chuỗi, `==` so sánh tham chiếu đối tượng.
C. Cả hai đều so sánh tham chiếu đối tượng.
D. Cả hai đều so sánh giá trị chuỗi.
6. Trong Java, `ArrayList` và `LinkedList` khác nhau chủ yếu ở khía cạnh nào?
A. Kích thước tối đa có thể chứa.
B. Cấu trúc dữ liệu bên trong và hiệu suất truy cập/thêm/xóa phần tử.
C. Khả năng lưu trữ các kiểu dữ liệu khác nhau.
D. Tính năng tự động sắp xếp các phần tử.
7. Exception (ngoại lệ) trong Java được sử dụng để làm gì?
A. Tối ưu hóa hiệu suất chương trình.
B. Quản lý bộ nhớ tự động.
C. Xử lý các tình huống lỗi hoặc bất thường xảy ra trong quá trình thực thi.
D. Định nghĩa các lớp và đối tượng.
8. Đâu là cách khai báo một hằng số (constant) trong Java?
A. static variable int CONSTANT_NAME = value;
B. final int CONSTANT_NAME = value;
C. public int CONSTANT_NAME = value;
D. const int CONSTANT_NAME = value;
9. Interface (giao diện) trong Java khác với Abstract class (lớp trừu tượng) ở điểm nào quan trọng?
A. Interface có thể chứa các phương thức có thân (method body), Abstract class thì không.
B. Một lớp có thể kế thừa nhiều Interface, nhưng chỉ có thể kế thừa một Abstract class.
C. Interface không thể chứa biến thành viên, Abstract class thì có thể.
D. Abstract class được sử dụng để tạo đối tượng, Interface thì không.
10. Vòng lặp `for-each` (enhanced for loop) trong Java thường được sử dụng để làm gì?
A. Lặp vô hạn.
B. Lặp qua các phần tử của một mảng hoặc collection.
C. Thực hiện các phép tính toán phức tạp.
D. Định nghĩa phương thức.
11. Phương thức `toString()` trong Java có mục đích chính là gì?
A. So sánh hai đối tượng.
B. Chuyển đổi một đối tượng thành chuỗi (String) để hiển thị hoặc ghi log.
C. Khởi tạo một đối tượng mới.
D. Giải phóng bộ nhớ của đối tượng.
12. Đâu là lợi ích chính của việc sử dụng đa luồng (multithreading) trong Java?
A. Giảm mức sử dụng bộ nhớ.
B. Tăng tốc độ biên dịch mã nguồn.
C. Cải thiện hiệu suất chương trình bằng cách thực hiện các tác vụ song song.
D. Đơn giản hóa cấu trúc code.
13. Trong Java, từ khóa `static` được sử dụng để làm gì?
A. Khai báo lớp trừu tượng.
B. Tạo ra các đối tượng không thể thay đổi.
C. Khai báo thành viên lớp (class members) thuộc về lớp chứ không phải đối tượng cụ thể.
D. Định nghĩa giao diện.
14. Phương thức `finalize()` trong Java được gọi khi nào?
A. Khi một đối tượng được tạo ra.
B. Khi một đối tượng không còn được tham chiếu đến và chuẩn bị được thu gom bởi Garbage Collector.
C. Khi chương trình Java kết thúc.
D. Khi một ngoại lệ (exception) được ném ra.
15. Serialization (Tuần tự hóa) trong Java là gì?
A. Quá trình chuyển đổi mã nguồn Java sang 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 để lưu trữ hoặc truyền tải.
C. Quá trình kiểm tra lỗi cú pháp trong mã nguồn.
D. Quá trình tối ưu hóa mã bytecode.
16. Annotation (Chú thích) trong Java được sử dụng để làm gì?
A. Thay thế cho comment (chú thích dòng lệnh).
B. Cung cấp metadata (siêu dữ liệu) về mã nguồn cho trình biên dịch, JVM hoặc các công cụ khác.
C. Tăng tốc độ thực thi chương trình.
D. Mã hóa mã nguồn.
17. Đâu là một ví dụ về Design Pattern (Mẫu thiết kế) thuộc nhóm Creational Patterns (Mẫu khởi tạo) trong lập trình hướng đối tượng?
A. Observer
B. Strategy
C. Singleton
D. Command
18. Trong Java, Garbage Collection (Thu gom rác) hoạt động như thế nào?
A. Lập trình viên phải tự giải phóng bộ nhớ đã cấp phát.
B. JVM tự động theo dõi và thu hồi bộ nhớ của các đối tượng không còn được tham chiếu đến.
C. Hệ điều hành quản lý việc thu gom rác.
D. Trình biên dịch tối ưu hóa bộ nhớ để không cần thu gom rác.
19. Lambda Expression (Biểu thức Lambda) trong Java 8 được sử dụng chủ yếu để làm gì?
A. Định nghĩa lớp (class).
B. Tạo ra các biến toàn cục.
C. Cung cấp một cách ngắn gọn để biểu diễn functional interface (giao diện hàm).
D. Xử lý ngoại lệ.
20. Stream API trong Java 8 cung cấp phương thức `filter()` để làm gì?
A. Sắp xếp các phần tử trong stream.
B. Chuyển đổi các phần tử trong stream sang kiểu dữ liệu khác.
C. Lọc các phần tử trong stream dựa trên một điều kiện cho trước.
D. Tính tổng các phần tử trong stream.
21. Giả sử bạn có một lớp `Dog` và lớp `Animal` là lớp cha của `Dog`. Ép kiểu (casting) nào sau đây là **KHÔNG HỢP LỆ** trong Java?
A. `Animal myAnimal = (Animal) new Dog();`
B. `Dog myDog = (Dog) myAnimal;` (với `Animal myAnimal = new Dog();`)
C. `Dog myDog = new Dog(); Animal myAnimal = myDog;`
D. `Dog myDog = (Dog) new Animal();`
22. Trong Java, từ khóa `transient` được sử dụng để làm gì khi serialization?
A. Đánh dấu một biến là hằng số (constant).
B. Đánh dấu một biến không nên được serialized (tuần tự hóa).
C. Đánh dấu một biến là static.
D. Đánh dấu một biến là volatile.
23. Phương thức `hashCode()` và `equals()` có mối quan hệ như thế nào trong Java?
A. Không có mối quan hệ.
B. Nếu hai đối tượng bằng nhau theo `equals()`, thì `hashCode()` của chúng phải trả về cùng một giá trị.
C. Nếu `hashCode()` của hai đối tượng bằng nhau, thì chúng phải bằng nhau theo `equals()`.
D. `equals()` gọi `hashCode()` để so sánh đối tượng.
24. Đâu là cách đúng để tạo một luồng (Thread) trong Java?
A. Kế thừa lớp `Runnable`.
B. Kế thừa lớp `Thread` hoặc implement interface `Runnable`.
C. Implement interface `Callable`.
D. Kế thừa lớp `Object`.
25. Từ khóa `synchronized` trong Java được sử dụng để làm gì?
A. Tăng hiệu suất đa luồng.
B. Đảm bảo tính đồng bộ và loại trừ lẫn nhau (mutual exclusion) khi truy cập tài nguyên chung trong môi trường đa luồng.
C. Tạo ra các luồng ưu tiên cao.
D. Giải phóng bộ nhớ của luồng.
26. JDBC (Java Database Connectivity) được sử dụng để làm gì?
A. Xây dựng giao diện người dùng đồ họa (GUI).
B. Kết nối và tương tác với cơ sở dữ liệu từ ứng dụng Java.
C. Phát triển ứng dụng web phía máy chủ.
D. Quản lý bộ nhớ trong Java.
27. Giả sử bạn có đoạn code sau: `int[] numbers = {1, 2, 3, 4, 5}; System.out.println(numbers[5]);`. Đoạn code này sẽ gây ra lỗi gì khi chạy?
A. Lỗi biên dịch (Compilation error).
B. Lỗi NullPointerException.
C. Lỗi ArrayIndexOutOfBoundsException.
D. Đoạn code chạy thành công và in ra `5`.
28. Trong Java, Generic (Kiểu tham số hóa) được sử dụng để làm gì?
A. Tăng tốc độ thực thi chương trình.
B. Cho phép định nghĩa lớp, interface và phương thức có thể làm việc với nhiều kiểu dữ liệu khác nhau một cách type-safe (an toàn kiểu dữ liệu).
C. Giảm mức sử dụng bộ nhớ.
D. Đơn giản hóa cấu trúc code.
29. Hãy xem xét đoạn code sau: java public class Example { public static void main(String[] args) { try { int result = 10 / 0; } catch (Exception e) { System.out.println(`Lỗi`); } finally { System.out.println(`Finally block`); } } } Đoạn code trên sẽ in ra màn hình những gì?
A. Lỗi
B. Finally block
C. Lỗi
Finally block
D. Không in ra gì cả.
30. Trong mô hình MVC (Model-View-Controller), Controller có vai trò gì?
A. Hiển thị dữ liệu cho người dùng.
B. Lưu trữ và quản lý dữ liệu.
C. Xử lý tương tác người dùng và cập nhật Model và View.
D. Định nghĩa cấu trúc dữ liệu.