1. Trong Java, khi nào nên sử dụng Composition thay vì Inheritance?
A. Khi muốn tái sử dụng code mà không muốn tạo ra một mối quan hệ "is-a".
B. Khi muốn tạo ra một mối quan hệ "is-a".
C. Khi muốn tăng hiệu suất của chương trình.
D. Khi muốn giảm độ phức tạp của code.
2. Trong Java, AOP là gì và nó giải quyết vấn đề gì?
A. Một kỹ thuật để tạo ra các đối tượng mới, giải quyết vấn đề tạo đối tượng phức tạp.
B. Một phương pháp lập trình cho phép modular hóa các mối quan tâm cắt ngang (cross-cutting concerns) như logging và bảo mật, giải quyết vấn đề code trùng lặp và khó bảo trì.
C. Một cách để xử lý ngoại lệ, giải quyết vấn đề ngoại lệ không được xử lý.
D. Một kỹ thuật để tối ưu hóa hiệu suất, giải quyết vấn đề hiệu suất chậm.
3. Đâu là sự khác biệt chính giữa `ArrayList` và `LinkedList` trong Java?
A. `ArrayList` sử dụng mảng động, `LinkedList` sử dụng danh sách liên kết.
B. `ArrayList` cho phép truy cập ngẫu nhiên nhanh hơn, `LinkedList` chèn/xóa phần tử nhanh hơn.
C. `ArrayList` an toàn luồng, `LinkedList` thì không.
D. Cả A và B.
4. Trong Java, JDBC được sử dụng để làm gì?
A. Để tạo giao diện người dùng.
B. Để kết nối và tương tác với cơ sở dữ liệu.
C. Để xử lý các sự kiện.
D. Để tạo các luồng.
5. Trong Java, đặc điểm nào sau đây KHÔNG phải là một lợi ích của tính đóng gói (encapsulation)?
A. Tăng tính bảo mật bằng cách ẩn giấu dữ liệu.
B. Giảm sự phụ thuộc giữa các thành phần của chương trình.
C. Cho phép thay đổi nội bộ của một lớp mà không ảnh hưởng đến các lớp khác.
D. Cho phép truy cập trực tiếp vào dữ liệu từ bên ngoài lớp.
6. Trong Java, khi sử dụng try-with-resources, tài nguyên nào sẽ được tự động đóng?
A. Tất cả các tài nguyên được sử dụng trong khối try.
B. Chỉ các tài nguyên implements interface `AutoCloseable`.
C. Chỉ các tài nguyên được khai báo với từ khóa `final`.
D. Không có tài nguyên nào được tự động đóng.
7. Trong Java, interface có thể chứa gì?
A. Chỉ các phương thức trừu tượng.
B. Chỉ các biến final static.
C. Các phương thức trừu tượng và các biến final static.
D. Các phương thức concrete và các biến.
8. Trong Java, Annotation được sử dụng để làm gì?
A. Để tạo ra các đối tượng mới.
B. Để cung cấp siêu dữ liệu về code.
C. Để thực hiện các phép toán.
D. Để định nghĩa các lớp.
9. Trong Java, lambda expression là gì?
A. Một cách để tạo ra các lớp ẩn danh.
B. Một cách để biểu diễn một thể hiện của một interface hàm.
C. Một cách để định nghĩa các hằng số.
D. Một cách để xử lý ngoại lệ.
10. Trong Java, Dependency Injection (DI) là gì?
A. Một kỹ thuật để tạo ra các đối tượng mới.
B. Một mẫu thiết kế mà các dependency của một đối tượng được cung cấp cho đối tượng đó thay vì đối tượng tự tạo ra chúng.
C. Một cách để xử lý ngoại lệ.
D. Một kỹ thuật để tối ưu hóa hiệu suất.
11. Trong Java, mục đích của `transient` keyword là gì?
A. Nó ngăn một biến được serialized.
B. Nó làm cho một biến có thể truy cập được từ bất kỳ đâu.
C. Nó làm cho một biến trở thành hằng số.
D. Nó cho phép một biến được ghi đè.
12. Trong Java, JPA là gì?
A. Một thư viện để tạo giao diện người dùng.
B. Một API đặc tả cách truy cập, quản lý và duy trì dữ liệu giữa các đối tượng Java và một cơ sở dữ liệu quan hệ.
C. Một công cụ để debug chương trình.
D. Một framework để phát triển ứng dụng web.
13. Trong Java, mục đích của phương thức `clone()` là gì?
A. Để so sánh hai đối tượng.
B. Để tạo một bản sao của một đối tượng.
C. Để chuyển đổi một đối tượng thành một chuỗi.
D. Để kiểm tra kiểu dữ liệu của một đối tượng.
14. Trong Java, khi nào nên sử dụng `StringBuilder` thay vì `String`?
A. Khi cần thực hiện nhiều thao tác sửa đổi chuỗi.
B. Khi cần so sánh hai chuỗi.
C. Khi cần lưu trữ một chuỗi hằng.
D. Khi cần tạo một chuỗi mới.
15. Trong Java, mục đích của từ khóa `synchronized` là gì?
A. Để tạo ra một luồng mới.
B. Để đảm bảo rằng chỉ có một luồng có thể truy cập vào một đoạn mã tại một thời điểm.
C. Để tạm dừng một luồng.
D. Để kết thúc một luồng.
16. Trong Java, Stream API được sử dụng để làm gì?
A. Để tạo giao diện người dùng.
B. Để xử lý dữ liệu theo kiểu hàm (functional programming) trên các tập hợp.
C. Để kết nối với cơ sở dữ liệu.
D. Để tạo các luồng (threads).
17. Trong Java, `HashSet` và `TreeSet` khác nhau như thế nào?
A. `HashSet` duy trì thứ tự chèn, `TreeSet` thì không.
B. `HashSet` nhanh hơn trong các thao tác thêm/xóa/tìm kiếm, `TreeSet` duy trì các phần tử được sắp xếp.
C. `HashSet` cho phép các phần tử trùng lặp, `TreeSet` thì không.
D. Cả hai đều giống nhau.
18. Trong Java, sự khác biệt giữa abstract class và interface là gì?
A. Abstract class có thể có các phương thức concrete, interface thì không.
B. Interface có thể có các biến instance, abstract class thì không.
C. Abstract class có thể kế thừa từ nhiều class, interface thì không.
D. Cả hai đều giống nhau.
19. Trong Java, garbage collection là gì?
A. Một kỹ thuật để tối ưu hóa hiệu suất của chương trình.
B. Một quá trình tự động giải phóng bộ nhớ không còn được sử dụng.
C. Một cách để xử lý các ngoại lệ.
D. Một công cụ để debug chương trình.
20. Trong Java, từ khóa nào được sử dụng để tạo một hằng số?
A. static
B. const
C. final
D. immutable
21. Trong Java, design pattern Singleton được sử dụng để làm gì?
A. Để tạo ra nhiều thể hiện 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 lớp trừu tượng.
D. Để tạo ra các interface.
22. Trong Java, mục đích của từ khóa `volatile` là gì?
A. Để tạo ra một biến không thể thay đổi.
B. Để đảm bảo rằng một biến được đọc từ bộ nhớ chính, không phải từ cache của luồng.
C. Để tạo ra một luồng mới.
D. Để khóa một đối tượng.
23. Trong Java, mục đích của Maven hoặc Gradle là gì?
A. Để tạo giao diện người dùng.
B. Để quản lý dependencies và build project.
C. Để debug chương trình.
D. Để tối ưu hóa hiệu suất.
24. Trong Java, phương thức `toString()` được sử dụng để làm gì?
A. Để so sánh hai đối tượng.
B. Để chuyển đổi một đối tượng thành một chuỗi.
C. Để tạo một bản sao của một đối tượng.
D. Để kiểm tra kiểu dữ liệu của một đối tượng.
25. Trong Java, exception `NullPointerException` xảy ra khi nào?
A. Khi truy cập một biến chưa được khởi tạo.
B. Khi truy cập một đối tượng có giá trị null.
C. Khi cố gắng ép kiểu một đối tượng không phù hợp.
D. Khi thực hiện phép chia cho 0.
26. Trong Java, mục đích chính của Serialization là gì?
A. Tăng tốc độ thực thi chương trình.
B. Chuyển đổi đối tượng thành một định dạng có thể lưu trữ hoặc truyền tải.
C. Bảo vệ đối tượng khỏi bị truy cập trái phép.
D. Tối ưu hóa việc sử dụng bộ nhớ.
27. Trong Java, sự khác biệt giữa `==` và phương thức `equals()` khi so sánh các đối tượng String là gì?
A. `==` so sánh nội dung chuỗi, `equals()` so sánh tham chiếu.
B. `==` so sánh tham chiếu, `equals()` so sánh nội dung chuỗi.
C. Cả hai đều so sánh tham chiếu.
D. Cả hai đều so sánh nội dung chuỗi.
28. 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. Kiểm tra xem hai đối tượng có cùng kiểu dữ liệu hay không.
D. Gán giá trị của một đối tượng cho đối tượng khác.
29. Trong Java, ConcurrentHashMap khác gì so với HashMap khi sử dụng trong môi trường đa luồng?
A. ConcurrentHashMap không cho phép null keys hoặc null values.
B. ConcurrentHashMap an toàn hơn cho các hoạt động đồng thời vì nó sử dụng khóa phân đoạn (segment locking).
C. HashMap nhanh hơn ConcurrentHashMap trong môi trường đa luồng.
D. Cả A và B.
30. 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 trong thời gian biên dịch, Unchecked Exception xảy ra trong thời gian chạy.
D. Cả hai đều phải được xử lý.