1. Làm thế nào để tạo một luồng (thread) trong Java?
A. Chỉ bằng cách kế thừa lớp `Thread`.
B. Chỉ bằng cách implements interface `Runnable`.
C. Bằng cách kế thừa lớp `Thread` hoặc implements interface `Runnable`.
D. Không thể tạo luồng trong Java.
2. Trong Java, stream API được sử dụng để làm gì?
A. Để tạo ra các đối tượng đồ họa.
B. Để xử lý dữ liệu theo kiểu khai báo (declarative) và song song (parallel) trên các collection.
C. Để quản lý bộ nhớ.
D. Để tăng tốc độ biên dịch.
3. Trong Java, nguyên tắc SOLID là gì?
A. Một tập hợp các quy tắc đặt tên biến.
B. Một tập hợp các nguyên tắc thiết kế hướng đối tượng giúp tạo ra mã nguồn dễ bảo trì, mở rộng và tái sử dụng.
C. Một tập hợp các quy tắc định dạng mã nguồn.
D. Một tập hợp các quy tắc quản lý bộ nhớ.
4. Trong Java, thread pool được sử dụng để làm gì?
A. Để tạo ra các đối tượng đồ họa.
B. Để quản lý và tái sử dụng các luồng, giúp giảm chi phí tạo và hủy luồng.
C. Để tăng tốc độ biên dịch.
D. Để quản lý bộ nhớ.
5. Đâu là điểm khác biệt giữa `ArrayList` và `LinkedList` trong Java?
A. `ArrayList` sử dụng mảng động, trong khi `LinkedList` sử dụng danh sách liên kết đôi.
B. `ArrayList` cho phép truy cập ngẫu nhiên nhanh hơn, trong khi `LinkedList` cho phép thêm/xóa phần tử ở giữa nhanh hơn.
C. `ArrayList` an toàn luồng, trong khi `LinkedList` thì không.
D. Cả A và B đều đúng.
6. Trong Java, Reflection là gì?
A. Một kỹ thuật để tạo ra các bản sao của đối tượng.
B. Một API cho phép kiểm tra và sửa đổi các lớp, interface, field và method tại runtime.
C. Một kỹ thuật để tăng tốc độ thực thi của chương trình.
D. Một kỹ thuật để quản lý bộ nhớ.
7. Trong Java, mục đích của Design Pattern là gì?
A. Để tăng tốc độ thực thi của chương trình.
B. Để cung cấp các giải pháp đã được kiểm chứng cho các vấn đề thiết kế phần mềm thường gặp.
C. Để tạo ra các đối tượng đồ họa.
D. Để quản lý bộ nhớ.
8. Trong Java, Reactive Programming là gì?
A. Một phong cách lập trình tập trung vào việc xử lý các luồng dữ liệu bất đồng bộ và sự thay đổi dữ liệu, cho phép xây dựng các hệ thống phản ứng nhanh nhạy, đàn hồi và có khả năng mở rộng.
B. Một kỹ thuật để tăng tốc độ biên dịch.
C. Một kỹ thuật để quản lý bộ nhớ.
D. Một API để tạo ra các đối tượng đồ họa.
9. Đâu là lợi ích chính của việc sử dụng generics trong Java?
A. Giảm kích thước của file bytecode.
B. Tăng tốc độ biên dịch.
C. Cung cấp type safety (kiểm tra kiểu) tại thời điểm biên dịch và loại bỏ nhu cầu ép kiểu (casting).
D. Cho phép sử dụng nhiều luồng hơn.
10. Đâu là sự khác biệt chính giữa `==` và phương thức `.equals()` trong Java khi so sánh các đối tượng?
A. `==` so sánh giá trị của các đối tượng, còn `.equals()` so sánh tham chiếu của chúng.
B. `==` so sánh tham chiếu của các đối tượng, còn `.equals()` so sánh nội dung của chúng (nếu phương thức này được ghi đè).
C. Cả `==` và `.equals()` đều so sánh tham chiếu của các đối tượng.
D. Cả `==` và `.equals()` đều so sánh giá trị của các đối tượng.
11. Trong Java, Microservices là gì?
A. Một kiến trúc phần mềm trong đó ứng dụng được cấu trúc như một tập hợp các dịch vụ nhỏ, độc lập, giao tiếp với nhau qua mạng.
B. Một kỹ thuật để tăng tốc độ biên dịch.
C. Một kỹ thuật để quản lý bộ nhớ.
D. Một API để tạo ra các đối tượng đồ họa.
12. Trong Java, serialization là gì?
A. Quá trình chuyển đổi một đối tượng thành một chuỗi byte để có thể 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.
13. Lệnh nào sau đây dùng để biên dịch một file Java có tên `MyClass.java`?
A. java MyClass.java
B. javac MyClass
C. javac MyClass.java
D. java MyClass
14. Phương thức nào sau đây được gọi tự động khi một đối tượng được tạo ra trong Java?
A. finalize()
B. toString()
C. Constructor
D. main()
15. Trong Java, interface khác với abstract class như thế nào?
A. Interface có thể chứa các phương thức đã được triển khai, còn abstract class thì không.
B. Một lớp có thể implements nhiều interface, nhưng chỉ có thể kế thừa từ một abstract class.
C. Abstract class không thể chứa các biến thành viên, còn interface thì có thể.
D. Interface có thể có constructor, còn abstract class thì không.
16. Trong Java, JPA (Java Persistence API) là gì?
A. Một API để tạo ra các đối tượng đồ họa.
B. Một API đặc tả cách quản lý, truy cập và lưu trữ dữ liệu giữa các đối tượng Java và cơ sở dữ liệu quan hệ.
C. Một API để tăng tốc độ biên dịch.
D. Một API để quản lý bộ nhớ.
17. Trong Java, annotation được sử dụng để làm gì?
A. Để tạo ra các đối tượng đồ họa.
B. Để cung cấp metadata (dữ liệu về dữ liệu) cho trình biên dịch hoặc runtime environment.
C. Để định nghĩa các hằng số.
D. Để quản lý bộ nhớ.
18. 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 mà nó được khai báo.
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 cụ thể của lớp đó.
C. Biến hoặc phương thức không thể bị thay đổi giá trị sau khi được 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.
19. Trong Java, đặc điểm nào sau đây thể hiện tính đóng gói (encapsulation)?
A. Cho phép các đối tượng thuộc các lớp khác nhau sử dụng các phương thức của nhau.
B. Che giấu thông tin và hành vi bên trong của một đối tượng, chỉ cho phép truy cập thông qua các phương thức công khai.
C. Khả năng 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.
D. Khả năng một đối tượng có thể có nhiều hình thức khác nhau.
20. Trong Java, Dependency Injection (DI) là gì?
A. Một kỹ thuật để tạo ra các bản sao của đối tượng.
B. Một design pattern cho phép loại bỏ sự phụ thuộc cứng nhắc giữa các thành phần bằng cách cung cấp các dependency (phụ thuộc) cho một đối tượng thay vì để đối tượng tự tạo ra chúng.
C. Một kỹ thuật để tăng tốc độ thực thi của chương trình.
D. Một kỹ thuật để quản lý bộ nhớ.
21. Trong Java, mục đích của từ khóa `synchronized` là gì?
A. Để tạo ra một bản sao của một đối tượng.
B. Để đảm bảo rằng chỉ có một luồng có thể truy cập vào một đoạn mã hoặc một đối tượng tại một thời điểm.
C. Để tăng tốc độ thực thi của chương trình.
D. Để định nghĩa một hằng số.
22. Trong Java, exception (ngoại lệ) được sử dụng để làm gì?
A. Để tăng tốc độ thực thi của chương trình.
B. Để xử lý các lỗi và tình huống bất thường xảy ra trong quá trình thực thi chương trình.
C. Để định nghĩa các lớp và đối tượng.
D. Để tạo giao diện người dùng đồ họa.
23. Trong Java, final class là gì?
A. Một lớp không thể có bất kỳ phương thức nào.
B. Một lớp không thể có bất kỳ thuộc tính nào.
C. Một lớp không thể được kế thừa bởi bất kỳ lớp nào khác.
D. Một lớp không thể được khởi tạo.
24. Trong Java, thuật ngữ "đa hình" (polymorphism) có nghĩa là gì?
A. Một lớp có thể có nhiều thuộc tính.
B. Một phương thức có thể có nhiều tham số.
C. Một đối tượng có thể có nhiều hình thức khác nhau.
D. Một chương trình có thể chạy trên nhiều hệ điều hành.
25. 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 CPU.
B. Giải phóng bộ nhớ không còn được sử dụng bởi chương trình.
C. Ngăn chặn các cuộc tấn công bảo mật.
D. Quản lý các kết nối mạng.