1. Trong Java, mục đích của annotation là gì?
A. Cung cấp siêu dữ liệu về code.
B. Thực thi code tại runtime.
C. Thay thế cho comment.
D. Tăng tốc độ biên dịch.
2. Trong Java, Stream API cung cấp một cách để xử lý dữ liệu một cách tuần tự hoặc song song. Lợi ích chính của việc sử dụng Stream API là gì?
A. Giảm thiểu số lượng code cần viết.
B. Cho phép thực hiện các phép toán trên tập dữ liệu một cách dễ dàng và hiệu quả.
C. Hỗ trợ xử lý song song để tăng hiệu suất.
D. Tất cả các đáp án trên.
3. Trong Java, điểm khác biệt cơ bản giữa `List` và `Set` là gì?
A. `List` cho phép các phần tử trùng lặp, `Set` thì không.
B. `Set` cho phép các phần tử trùng lặp, `List` thì không.
C. `List` là interface, `Set` là class.
D. `Set` cho phép truy cập phần tử theo index, `List` thì không.
4. Trong Java, mục đích của từ khóa `volatile` là gì?
A. Đảm bảo rằng một biến được lưu trữ trong bộ nhớ cache của CPU.
B. Đảm bảo rằng một biến được đọc trực tiếp từ bộ nhớ chính, không từ cache của thread.
C. Ngăn chặn việc kế thừa một class.
D. Tạo ra một biến chỉ có thể truy cập từ bên trong class.
5. Trong Java, mục đích của từ khóa `static` là gì?
A. Tạo ra một biến hoặc phương thức chỉ có thể truy cập từ bên trong class.
B. Tạo ra một biến hoặc phương thức thuộc về class chứ không phải instance của class.
C. Ngăn chặn việc kế thừa một class.
D. Cho phép đa kế thừa.
6. Trong Java, thế nào là một Singleton pattern và khi nào nên sử dụng nó?
A. Một pattern cho phép tạo ra nhiều instance của một class.
B. Một pattern đảm bảo rằng chỉ có một instance của một class được tạo ra và cung cấp một điểm truy cập toàn cục đến instance đó.
C. Một pattern để tạo ra các class immutable.
D. Một pattern để quản lý các kết nối cơ sở dữ liệu.
7. Trong Java, khi nào nên sử dụng `StringBuilder` thay vì `String`?
A. Khi thực hiện nhiều thao tác sửa đổi chuỗi.
B. Khi chuỗi không cần thay đổi.
C. Khi cần so sánh chuỗi.
D. Khi chuỗi cần được mã hóa.
8. Trong Java, Spring Framework là gì và nó cung cấp những lợi ích gì?
A. Một framework để tạo giao diện người dùng.
B. Một framework toàn diện để xây dựng các ứng dụng Java enterprise, cung cấp DI, IoC, AOP và nhiều tính năng khác.
C. Một công cụ để quản lý bộ nhớ.
D. Một thư viện để xử lý các exception.
9. Trong Java, sự khác biệt giữa `throw` và `throws` là gì?
A. `throw` được sử dụng để khai báo một exception, `throws` được sử dụng để ném một exception.
B. `throw` được sử dụng để ném một exception, `throws` được sử dụng để khai báo một exception mà một phương thức có thể ném ra.
C. Cả hai đều có thể thay thế cho nhau.
D. `throw` chỉ được sử dụng trong các interface, `throws` chỉ được sử dụng trong các class.
10. Trong Java, Interface và Abstract class có những điểm khác biệt quan trọng nào?
A. Interface chỉ có thể chứa các phương thức abstract, còn Abstract class có thể chứa cả phương thức abstract và non-abstract.
B. Một class có thể implements nhiều Interface, nhưng chỉ có thể extends một Abstract class.
C. Interface không có constructor, còn Abstract class có constructor.
D. Tất cả các đáp án trên.
11. Trong Java, phương thức `equals()` được sử dụng để so sánh hai đối tượng. Điều gì xảy ra nếu một lớp không ghi đè phương thức `equals()`?
A. Các đối tượng sẽ không thể so sánh được.
B. Phương thức `equals()` sẽ so sánh tham chiếu của hai đối tượng, tương đương với toán tử `==`.
C. Một lỗi biên dịch sẽ xảy ra.
D. Phương thức `equals()` sẽ so sánh giá trị của các thuộc tính của hai đối tượng.
12. Trong Java, khi nào nên sử dụng `ExecutorService` thay vì tạo `Thread` trực tiếp?
A. Khi chỉ cần chạy một thread duy nhất.
B. Khi cần quản lý một pool các thread để tái sử dụng.
C. Khi cần tạo ra một thread không thể bị interrupt.
D. Khi cần tạo ra một thread có độ ưu tiên cao.
13. Trong Java, hãy giải thích ngắn gọn sự khác biệt giữa `==` và `.equals()` khi so sánh chuỗi (String).
A. `==` so sánh nội dung chuỗi, còn `.equals()` so sánh tham chiếu.
B. `==` so sánh tham chiếu, còn `.equals()` so sánh nội dung chuỗi.
C. Cả hai đều so sánh nội dung chuỗi.
D. Cả hai đều so sánh tham chiếu.
14. Trong Java, `Optional` class được sử dụng để làm gì?
A. Để thay thế cho kiểu dữ liệu nguyên thủy.
B. Để xử lý các giá trị null một cách an toàn hơn.
C. Để tạo ra các đối tượng immutable.
D. Để quản lý bộ nhớ.
15. Trong Java, khi nào nên sử dụng `HashSet` thay vì `ArrayList`?
A. Khi cần duy trì thứ tự của các phần tử.
B. Khi cần truy cập phần tử theo index.
C. Khi cần đảm bảo không có phần tử trùng lặp và hiệu suất tìm kiếm là quan trọng.
D. Khi cần lưu trữ các phần tử null.
16. Đâu là sự khác biệt chính 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 chèn và xóa phần tử ở giữa danh sách nhanh hơn.
C. Cả hai đáp án trên.
D. `LinkedList` sử dụng mảng động, trong khi `ArrayList` sử dụng danh sách liên kết đơn.
17. 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 đối tượng, `equals()` so sánh tham chiếu.
B. `==` so sánh tham chiếu của đối tượng, `equals()` có thể so sánh giá trị (nếu được ghi đè).
C. Cả hai đều so sánh tham chiếu.
D. Cả hai đều so sánh giá trị.
18. Trong Java, garbage collection là một quá trình tự động quản lý bộ nhớ. Nó hoạt động như thế nào?
A. Garbage collector giải phóng bộ nhớ mà lập trình viên chỉ định.
B. Garbage collector giải phóng bộ nhớ không còn được tham chiếu bởi bất kỳ đối tượng nào.
C. Garbage collector giải phóng bộ nhớ được sử dụng bởi các biến cục bộ.
D. Garbage collector giải phóng tất cả bộ nhớ khi chương trình kết thúc.
19. 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. Để quản lý bộ nhớ.
D. Để xử lý các exception.
20. Trong Java, exception handling là một cơ chế quan trọng để xử lý lỗi. Điều gì xảy ra nếu một exception không được bắt (catch) trong một chương trình Java?
A. Chương trình sẽ tiếp tục thực thi bình thường.
B. Chương trình sẽ bị crash và JVM sẽ in ra stack trace.
C. Exception sẽ tự động được xử lý bởi JVM.
D. Một cảnh báo sẽ được hiển thị, nhưng chương trình vẫn tiếp tục.
21. Trong Java, `final` có thể được sử dụng với biến, phương thức và lớp. Khi nào nên sử dụng từ khóa `final` cho một lớp?
A. Khi bạn muốn ngăn chặn việc kế thừa lớp đó.
B. Khi bạn muốn lớp đó chỉ có thể được khởi tạo một lần.
C. Khi bạn muốn tất cả các phương thức trong lớp đó đều là `static`.
D. Khi bạn muốn lớp đó không thể thay đổi.
22. Trong Java, lambda expression là gì và nó được sử dụng để làm gì?
A. Một cách để tạo ra các class ẩn danh.
B. Một cách ngắn gọn để biểu diễn một instance của một functional interface.
C. Một cách để tạo ra các thread.
D. Một cách để quản lý bộ nhớ.
23. Trong Java, sự khác biệt giữa checked và unchecked exceptions là gì?
A. Checked exceptions phải được xử lý hoặc khai báo trong phương thức, unchecked exceptions thì không.
B. Unchecked exceptions phải được xử lý hoặc khai báo trong phương thức, checked exceptions thì không.
C. Checked exceptions xảy ra tại runtime, unchecked exceptions xảy ra tại compile time.
D. Cả hai đều phải được xử lý.
24. Trong Java, hãy giải thích ngắn gọn về nguyên tắc Liskov Substitution Principle (LSP) trong lập trình hướng đối tượng.
A. Các lớp con phải có khả năng thay thế các lớp cha mà không làm thay đổi tính đúng đắn của chương trình.
B. Mỗi class chỉ nên có một lý do để thay đổi.
C. Các module cấp cao không nên phụ thuộc vào các module cấp thấp.
D. Interface nên nhỏ và tập trung vào một mục đích cụ thể.
25. Trong Java, mục đích của garbage collection là gì?
A. Tự động giải phóng bộ nhớ không còn được sử dụng bởi chương trình.
B. Tối ưu hóa hiệu suất của 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 cơ sở dữ liệu.
26. Trong Java, multithreading cho phép thực hiện đồng thời nhiều phần của một chương trình. Điều gì có thể xảy ra nếu nhiều thread cùng truy cập và sửa đổi một biến chia sẻ mà không có cơ chế đồng bộ hóa?
A. Chương trình sẽ chạy nhanh hơn.
B. Data race và inconsistent data có thể xảy ra.
C. Chương trình sẽ ném ra một exception.
D. Biến chia sẻ sẽ tự động được khóa để tránh xung đột.
27. Trong Java, mục đích chính của design pattern Factory là gì?
A. Định nghĩa một interface để tạo ra các đối tượng, nhưng để các lớp con quyết định lớp nào sẽ được khởi tạo.
B. Đảm bảo rằng chỉ có một instance của một class được tạo ra.
C. Cho phép thêm các trách nhiệm mới vào một đối tượng một cách động.
D. Chuyển đổi interface của một class thành một interface khác mà client mong đợi.
28. Trong Java, Serialization là 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. Điều gì cần thiết để một class có thể được serialized?
A. Class phải implements interface `Serializable`.
B. Class phải extends class `Object`.
C. Class phải có một constructor không tham số.
D. Class phải ghi đè phương thức `toString()`.
29. Trong Java, Dependency Injection (DI) là một design pattern quan trọng. Mục đích chính của DI là gì?
A. Giảm sự phụ thuộc giữa các class.
B. Tăng tính tái sử dụng của code.
C. Giúp dễ dàng unit test code.
D. Tất cả các đáp án trên.
30. 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. Để quản lý bộ nhớ.
D. Để xử lý các exception.