1. Trong Java, Dependency Injection (DI) là gì?
A. Một kỹ thuật để giảm sự phụ thuộc giữa các lớp.
B. Một kỹ thuật để tăng sự phụ thuộc giữa các lớp.
C. Một kỹ thuật để tạo ra các đối tượng singleton.
D. Một kỹ thuật để tối ưu hóa hiệu suất của chương trình.
2. Trong Java, phương thức `wait()`, `notify()` và `notifyAll()` được sử dụng để làm gì?
A. Quản lý bộ nhớ.
B. Đồng bộ hóa các luồng (threads).
C. Xử lý ngoại lệ (exceptions).
D. Thực hiện garbage collection.
3. Trong Java, từ khóa `static` có ý nghĩa gì?
A. Biến hoặc phương thức chỉ có thể được truy cập từ bên trong lớp.
B. Biến hoặc phương thức thuộc về lớp chứ không phải là một thể hiện (instance) của lớp.
C. Biến hoặc phương thức không thể được thay đổi sau khi khởi tạo.
D. Biến hoặc phương thức chỉ có thể được truy cập bởi các lớp con.
4. Trong lập trình hướng đối tượng Java, đặc điểm nào sau đây thể hiện khả năng một đối tượng có nhiều hình dạng khác nhau?
A. Đóng gói (Encapsulation)
B. Kế thừa (Inheritance)
C. Đa hình (Polymorphism)
D. Trừu tượng (Abstraction)
5. Trong Java, sự khác biệt giữa Checked Exception và Unchecked Exception là gì?
A. Checked Exception phải được xử lý hoặc khai báo trong phương thức, Unchecked Exception thì không.
B. Unchecked Exception phải được xử lý hoặc khai báo trong phương thức, Checked Exception thì không.
C. Checked Exception xảy ra tại runtime, Unchecked Exception xảy ra tại compile time.
D. Không có sự khác biệt, cả hai đều phải được xử lý hoặc khai báo.
6. Trong Java, thuật ngữ "serialization" dùng để chỉ điều gì?
A. Quá trình chuyển đổi một đối tượng thành một chuỗi byte để lưu trữ hoặc truyền tải.
B. Quá trình chuyển đổi một chuỗi byte thành một đối tượng.
C. Quá trình mã hóa dữ liệu.
D. Quá trình giải mã dữ liệu.
7. Trong Java, mục đích chính của Reflection là gì?
A. Để tạo ra các lớp mới.
B. Để kiểm tra và thao tác các lớp, interface, fields và methods tại runtime.
C. Để tối ưu hóa hiệu suất của chương trình.
D. Để quản lý bộ nhớ.
8. Phương thức nào sau đây được gọi tự động khi một đối tượng Java được tạo?
A. finalize()
B. start()
C. run()
D. constructor()
9. Trong Java, từ khóa nào được sử dụng để khai báo một hằng số?
A. static
B. const
C. final
D. immutable
10. Trong Java, điểm khác biệt chính giữa `HashSet` và `TreeSet` là gì?
A. `HashSet` duy trì thứ tự chèn, `TreeSet` không.
B. `TreeSet` duy trì thứ tự chèn, `HashSet` không.
C. `TreeSet` sắp xếp các phần tử, `HashSet` không.
D. Không có sự khác biệt, cả hai đều hoạt động giống nhau.
11. Đâu là cách khai báo đúng một mảng các số nguyên trong Java?
A. int array[];
B. array int[];
C. int[] array;
D. int array[5];
12. Trong Java, phương thức `equals()` được sử dụng để làm gì?
A. So sánh hai đối tượng có cùng tham chiếu (reference) hay không.
B. So sánh hai đối tượng có cùng giá trị hay không.
C. Kiểm tra xem một đối tượng có phải là null hay không.
D. Gán giá trị của một đối tượng cho một đối tượng khác.
13. Đâu là cách khai báo một phương thức trừu tượng (abstract method) trong Java?
A. public abstract method void myMethod() {}
B. abstract public void myMethod();
C. public void abstract myMethod() {}
D. public void myMethod() abstract {}
14. Trong Java, mục đích của từ khóa `transient` là gì?
A. Ngăn không cho một biến được truy cập từ bên ngoài lớp.
B. Ngăn không cho một biến được lưu trữ khi đối tượng được tuần tự hóa (serialized).
C. Khai báo một biến là hằng số (constant).
D. Chỉ ra rằng một biến có thể được thay đổi bởi nhiều luồng (thread) đồng thời.
15. Trong Java, design pattern Singleton được sử dụng để làm gì?
A. Tạo ra nhiều thể hiện (instances) của một lớp.
B. Đảm bảo rằng chỉ có một thể hiện duy nhất của một lớp được tạo ra.
C. Tạo ra các đối tượng bất biến (immutable).
D. Tạo ra các đối tượng có thể thay đổi (mutable).
16. Trong Java, khái niệm nào cho phép một lớp kế thừa các thuộc tính và phương thức từ một lớp khác?
A. Đa hình (Polymorphism)
B. Đóng gói (Encapsulation)
C. Kế thừa (Inheritance)
D. Trừu tượng (Abstraction)
17. Interface trong Java có thể chứa những gì?
A. Chỉ các phương thức trừu tượng (abstract methods)
B. Chỉ các biến static final
C. Các phương thức trừu tượng và các biến static final
D. Các phương thức concrete và các biến instance
18. Kiểu dữ liệu nào trong Java được sử dụng để lưu trữ một giá trị logic (true hoặc false)?
A. integer
B. boolean
C. character
D. string
19. Vòng lặp nào sau đây trong Java đảm bảo rằng khối lệnh bên trong nó được thực thi ít nhất một lần?
A. for
B. while
C. do-while
D. if
20. Trong Java, exception nào xảy ra khi cố gắng truy cập một phần tử của mảng vượt quá kích thước của mảng?
A. NullPointerException
B. IOException
C. ArrayIndexOutOfBoundsException
D. SQLException
21. Trong Java, mục đích của từ khóa `final` là gì?
A. Ngăn không cho một lớp bị kế thừa.
B. Ngăn không cho một phương thức bị ghi đè (override).
C. Khai báo một hằng số (constant).
D. Tất cả các đáp án trên.
22. Trong Java, annotation nào được sử dụng để chỉ ra rằng một phương thức ghi đè (override) một phương thức từ lớp cha?
A. @Override
B. @Overload
C. @Inherit
D. @Super
23. Trong Java, JPA (Java Persistence API) là gì?
A. Một thư viện để tạo giao diện người dùng (UI).
B. Một API để truy cập cơ sở dữ liệu quan hệ (relational database).
C. Một framework để phát triển ứng dụng web.
D. Một công cụ để quản lý bộ nhớ.
24. Trong Java, sự khác biệt chính giữa `==` và phương thức `equals()` khi so sánh các đối tượng là gì?
A. `==` so sánh giá trị của các đối tượng, `equals()` so sánh tham chiếu.
B. `==` so sánh tham chiếu của các đối tượng, `equals()` so sánh giá trị.
C. Không có sự khác biệt, cả hai đều so sánh giá trị.
D. Không có sự khác biệt, cả hai đều so sánh tham chiếu.
25. Trong Java, luồng (Stream) được sử dụng để làm gì?
A. Đọc và ghi dữ liệu từ/vào file.
B. Xử lý dữ liệu tuần tự từ một nguồn dữ liệu (ví dụ: Collection).
C. Tạo và quản lý các tiến trình (process).
D. Quản lý bộ nhớ.
26. Trong Java, từ khóa nào được sử dụng để tạo một thể hiện (instance) mới của một lớp?
A. class
B. instanceof
C. new
D. create
27. Phương thức nào được sử dụng để in một dòng văn bản ra console trong Java?
A. System.out.print()
B. System.out.write()
C. System.out.println()
D. System.out.format()
28. Trong Java, Collection nào không cho phép chứa các phần tử trùng lặp?
A. List
B. ArrayList
C. Set
D. LinkedList
29. Trong Java, `StringBuilder` khác với `String` như thế nào?
A. `String` là bất biến (immutable), `StringBuilder` là khả biến (mutable).
B. `String` là khả biến (mutable), `StringBuilder` là bất biến (immutable).
C. `String` được sử dụng cho các chuỗi ngắn, `StringBuilder` được sử dụng cho các chuỗi dài.
D. `String` sử dụng ít bộ nhớ hơn `StringBuilder`.
30. Trong Java, mục đích chính của garbage collection là gì?
A. Tối ưu hóa hiệu suất của chương trình.
B. Giải phóng bộ nhớ không còn được sử dụng.
C. Ngăn chặn tràn bộ nhớ (memory leak).
D. Tất cả các đáp án trên.