1. Đâu là cách khởi tạo đúng một đối tượng `Scanner` để đọc dữ liệu từ bàn phím trong Java?
A. Scanner scanner = new Scanner(System.out);
B. Scanner scanner = new Scanner(System.in);
C. Scanner scanner = System.in.Scanner();
D. Scanner scanner = System.out.Scanner();
2. Từ khóa `final` trong Java có thể được sử dụng với biến, phương thức và lớp. Khi dùng với lớp, nó có nghĩa là gì?
A. Lớp đó không thể được kế thừa (extended).
B. Lớp đó chỉ có thể chứa các phương thức static.
C. Lớp đó phải là lớp trừu tượng (abstract).
D. Lớp đó không thể tạo ra đối tượng (instance).
3. Kiểu dữ liệu trả về của phương thức `compareTo()` trong interface `Comparable` là gì?
A. boolean
B. String
C. int
D. void
4. Interface trong Java khác với abstract class ở điểm nào?
A. Interface có thể chứa các phương thức có thân, abstract class thì không.
B. Một lớp có thể implements nhiều interface nhưng chỉ có thể extends một abstract class.
C. Abstract class không thể chứa các biến thành viên, interface thì có thể.
D. Interface được sử dụng để tạo đối tượng, abstract class thì không.
5. Mục đích chính của việc sử dụng packages trong Java là gì?
A. Tăng tốc độ biên dịch chương trình.
B. Tổ chức và quản lý lớp (classes) và interface một cách có cấu trúc, tránh xung đột tên.
C. Tăng cường bảo mật cho mã nguồn.
D. Giảm kích thước file bytecode.
6. Toán tử `instanceof` trong Java được dùng để làm gì?
A. Kiểm tra xem hai đối tượng có bằng nhau không.
B. Kiểm tra xem một đối tượng có phải là thể hiện của một lớp hoặc interface nhất định không.
C. Tạo một thể hiện mới của một lớp.
D. Ép kiểu dữ liệu giữa các kiểu nguyên thủy.
7. Trong Java, 'constructor' là gì?
A. Một phương thức đặc biệt có cùng tên với lớp, được gọi tự động khi một đối tượng của lớp được tạo ra, dùng để khởi tạo đối tượng.
B. Một phương thức tĩnh (static) được sử dụng để tạo các đối tượng của lớp.
C. Một interface được sử dụng để định nghĩa cấu trúc của một lớp.
D. Một lớp trừu tượng (abstract class) được sử dụng làm lớp cha cho các lớp khác.
8. Kiểu dữ liệu `char` trong Java lưu trữ giá trị gì?
A. Số nguyên.
B. Số thực.
C. Ký tự Unicode.
D. Chuỗi ký tự.
9. Đâu là kiểu dữ liệu nguyên thủy (primitive data type) trong Java?
A. String
B. Integer
C. double
D. Object
10. Giao thức (protocol) nào thường được sử dụng cho việc truyền tải dữ liệu web trong Java?
A. FTP
B. SMTP
C. HTTP
D. TCP
11. Trong lập trình Java, thuật ngữ 'serialization' dùng để chỉ quá trình gì?
A. Chuyển đổi mã nguồn Java thành bytecode.
B. Chuyển đổi một đối tượng thành một chuỗi byte để lưu trữ hoặc truyền tải.
C. Kiểm tra và sửa lỗi trong mã nguồn.
D. Tối ưu hóa hiệu suất của chương trình.
12. Trong Java Collections Framework, interface nào là gốc của cấu trúc dữ liệu dạng danh sách (list)?
A. Set
B. Map
C. List
D. Collection
13. Từ khóa `static` trong Java có ý nghĩa gì khi áp dụng cho một biến thành viên?
A. Biến chỉ có thể được truy cập từ bên trong lớp chứa nó.
B. Biến thuộc về lớp chứ không phải thể hiện của lớp, và được chia sẻ bởi tất cả các thể hiện.
C. Biến không thể thay đổi giá trị sau khi khởi tạo.
D. Biến chỉ có thể được truy cập trong cùng một gói (package).
14. Ngoại lệ (Exception) `NullPointerException` xảy ra khi nào?
A. Khi cố gắng truy cập một biến cục bộ chưa được khởi tạo.
B. Khi cố gắng truy cập một đối tượng tham chiếu null.
C. Khi chia một số cho 0.
D. Khi chỉ số mảng vượt quá giới hạn.
15. Bộ nhớ 'heap' trong JVM chủ yếu được sử dụng để lưu trữ loại dữ liệu nào?
A. Biến cục bộ và tham số phương thức.
B. Đối tượng và thể hiện của lớp.
C. Mã bytecode của chương trình.
D. Thông tin về lớp và phương thức.
16. Vòng lặp `for-each` trong Java chủ yếu được sử dụng để làm gì?
A. Lặp qua các phần tử của một mảng hoặc tập hợp (collection).
B. Lặp vô hạn cho đến khi có điều kiện dừng.
C. Thực hiện một khối lệnh một số lần cố định dựa trên điều kiện.
D. Xử lý ngoại lệ trong chương trình.
17. Phương thức `substring()` trong lớp `String` của Java dùng để làm gì?
A. So sánh hai chuỗi.
B. Tìm kiếm một chuỗi con trong chuỗi.
C. Trích xuất một chuỗi con từ chuỗi gốc.
D. Nối hai chuỗi lại với nhau.
18. Phạm vi truy cập (access modifier) `protected` trong Java cho phép truy cập từ đâu?
A. Chỉ từ bên trong lớp chứa nó.
B. Từ bất kỳ đâu trong chương trình.
C. Từ bên trong lớp chứa nó, các lớp con (kể cả khác package), và các lớp trong cùng package.
D. Từ bên trong lớp chứa nó và các lớp con trực tiếp.
19. Trong lập trình hướng đối tượng Java, 'tính đóng gói' (encapsulation) nghĩa là gì?
A. Khả năng 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à chỉ cho phép truy cập dữ liệu thông qua các phương thức công khai.
C. Khả năng một đối tượng có nhiều hình thái khác nhau.
D. Quá trình chuyển đổi kiểu dữ liệu.
20. Phương thức `equals()` trong Java được sử dụng để làm gì?
A. So sánh tham chiếu của hai đối tượng.
B. So sánh giá trị của hai đối tượng.
C. Gán giá trị của một đối tượng cho đối tượng khác.
D. Kiểm tra xem một đối tượng có phải là thể hiện của một lớp nhất định không.
21. Đâu là cách khai báo một mảng các số nguyên (integers) trong Java?
A. int array[];
B. array int[];
C. int[] array;
D. []int array;
22. Trong Java, từ khóa nào được sử dụng để tạo một thể hiện (instance) của một lớp?
A. class
B. new
C. instanceof
D. extends
23. Phương thức `toString()` trong Java thường được ghi đè (overridden) để làm gì?
A. So sánh hai đối tượng.
B. Trả về một chuỗi đại diện cho đối tượng.
C. Giải phóng bộ nhớ của đối tượng.
D. Khởi tạo giá trị cho các biến thành viên của đối tượng.
24. Trong Java, garbage collection là quá trình gì?
A. Quá trình biên dịch mã nguồn Java thành bytecode.
B. Quá trình tự động thu hồi bộ nhớ không còn được sử dụng bởi chương trình.
C. Quá trình quản lý các luồng (threads) trong chương trình.
D. Quá trình xử lý ngoại lệ (exceptions) trong chương trình.
25. Phương thức `main()` trong Java phải có kiểu trả về nào?
A. int
B. String
C. void
D. boolean
26. Luồng (Thread) trong Java được sử dụng để làm gì?
A. Quản lý bộ nhớ heap.
B. Thực hiện đa nhiệm (multitasking) bằng cách cho phép nhiều phần của chương trình chạy đồng thời.
C. Xử lý ngoại lệ trong chương trình.
D. Đọc và ghi dữ liệu từ file.
27. Phương thức `parseInt()` thuộc lớp nào trong Java và dùng để làm gì?
A. Lớp `String`, dùng để chuyển đổi một chuỗi thành số nguyên.
B. Lớp `Integer`, dùng để chuyển đổi một chuỗi thành số nguyên.
C. Lớp `Math`, dùng để tính giá trị tuyệt đối của một số nguyên.
D. Lớp `System`, dùng để in ra số nguyên trên console.
28. Trong Java, 'đa hình' (polymorphism) thể hiện rõ nhất qua cơ chế nào?
A. Tính đóng gói (Encapsulation)
B. Tính kế thừa (Inheritance)
C. Nạp chồng phương thức (Method Overloading) và ghi đè phương thức (Method Overriding)
D. Tính trừu tượng (Abstraction)
29. Phương thức `finalize()` trong Java được gọi khi nào?
A. Khi đối tượng được tạo ra.
B. Khi đối tượng không còn được tham chiếu 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 phương thức static của lớp được gọi.
30. Annotation trong Java (ví dụ: `@Override`, `@Deprecated`) được sử dụng để làm gì?
A. Thay thế mã nguồn Java truyền thống.
B. Cung cấp siêu dữ liệu (metadata) về mã nguồn, có thể được sử dụng bởi trình biên dịch hoặc runtime.
C. Tăng tốc độ thực thi của chương trình.
D. Mã hóa mã nguồn để bảo mật.