1. Trong Java, từ khóa nào được sử dụng để khai báo một biến hằng số?
A. static
B. final
C. const
D. immutable
2. Phương thức `main` trong Java có kiểu trả về nào?
A. int
B. String[]
C. void
D. Object
3. Đâu là đặc điểm của lập trình hướng đối tượng (OOP) KHÔNG được thể hiện rõ trong Java?
A. Tính đóng gói (Encapsulation)
B. Tính đa hình (Polymorphism)
C. Tính kế thừa (Inheritance)
D. Đa kế thừa lớp (Multiple inheritance of classes)
4. Trong Java, interface khác biệt chính so với abstract class ở điểm nào?
A. Interface có thể chứa các phương thức có thân hàm, abstract class thì không.
B. Một class có thể implement nhiều interface, nhưng chỉ kế thừa một abstract class.
C. Abstract class không thể chứa biến thành viên, interface thì có thể.
D. Interface sử dụng từ khóa `extends`, abstract class sử dụng `implements`.
5. Kiểu dữ liệu nào sau đây KHÔNG phải là kiểu dữ liệu nguyên thủy (primitive type) trong Java?
A. int
B. float
C. boolean
D. String
6. Trong Java, cơ chế xử lý ngoại lệ (Exception Handling) được thực hiện thông qua các khối lệnh nào?
A. if-else
B. for-loop
C. try-catch-finally
D. switch-case
7. Mục đích chính của việc sử dụng Garbage Collection trong Java là gì?
A. Tăng tốc độ biên dịch mã nguồn.
B. Quản lý bộ nhớ tự động, giải phóng bộ nhớ không còn được sử dụng.
C. Kiểm soát truy cập đồng thời vào tài nguyên.
D. Nâng cao tính bảo mật của ứng dụng.
8. Trong Java, từ khóa nào dùng để gọi constructor của lớp cha (superclass) từ constructor của lớp con (subclass)?
A. this
B. super
C. parent
D. base
9. Vòng lặp `do-while` trong Java khác biệt so với vòng lặp `while` ở điểm nào?
A. Vòng `do-while` luôn thực hiện ít nhất một lần, ngay cả khi điều kiện sai từ đầu.
B. Vòng `do-while` không cần điều kiện lặp.
C. Vòng `do-while` chỉ dùng để lặp qua mảng.
D. Vòng `do-while` nhanh hơn vòng `while`.
10. Trong Java, Collection Framework cung cấp cấu trúc dữ liệu nào sau đây?
A. Mảng (Array) nguyên thủy
B. Con trỏ (Pointer)
C. Danh sách liên kết (LinkedList)
D. Biến toàn cục (Global variable)
11. Phương thức `equals()` và toán tử `==` trong Java khác nhau như thế nào khi so sánh các đối tượng?
A. `equals()` so sánh tham chiếu đối tượng, `==` so sánh giá trị thuộc tính.
B. `equals()` so sánh giá trị thuộc tính của đối tượng, `==` so sánh tham chiếu đối tượng.
C. Cả hai đều so sánh tham chiếu đối tượng.
D. Cả hai đều so sánh giá trị thuộc tính của đối tượng.
12. Tính chất `tính đóng gói` (Encapsulation) trong OOP Java mang lại lợi ích chính nào?
A. Tăng tốc độ thực thi chương trình.
B. Giảm dung lượng bộ nhớ sử dụng.
C. Che giấu thông tin và bảo vệ dữ liệu, tăng tính bảo trì.
D. Cho phép đa kế thừa lớp.
13. Trong Java, luồng (Thread) là gì?
A. Một loại biến đặc biệt để lưu trữ dữ liệu đa luồng.
B. Một tiến trình độc lập chạy song song với chương trình chính.
C. Một đơn vị thực thi nhỏ nhất trong một tiến trình, cho phép thực hiện đa nhiệm.
D. Một cơ chế bảo mật để kiểm soát truy cập tài nguyên.
14. Annotation `@Override` trong Java được sử dụng để làm gì?
A. Khai báo một biến static.
B. Đánh dấu một phương thức ghi đè (override) phương thức của lớp cha.
C. Tạo một constructor mặc định.
D. Báo hiệu một phương thức là abstract.
15. Trong lập trình Java, SOLID là tập hợp các nguyên tắc thiết kế hướng đối tượng. Chữ `L` trong SOLID đại diện cho nguyên tắc nào?
A. Liskov Substitution Principle
B. Law of Demeter
C. Least Knowledge Principle
D. Lazy Loading
16. Khi nào nên sử dụng `ArrayList` thay vì `LinkedList` trong Java?
A. Khi cần thêm hoặc xóa phần tử ở đầu danh sách thường xuyên.
B. Khi cần truy cập phần tử ngẫu nhiên (theo chỉ số) một cách nhanh chóng.
C. Khi cần tiết kiệm bộ nhớ tuyệt đối.
D. Khi cần đảm bảo thứ tự các phần tử được sắp xếp.
17. Serialization trong Java là quá trình gì?
A. Biên dịch mã nguồn Java thành bytecode.
B. Chuyển đổi đối tượng thành một chuỗi byte để lưu trữ hoặc truyền tải.
C. Tối ưu hóa hiệu suất của ứng dụng Java.
D. Kiểm tra lỗi cú pháp trong mã Java.
18. Trong Java, Dependency Injection (DI) là gì và lợi ích chính của nó?
A. Một kỹ thuật để tạo ra các đối tượng singleton.
B. Một pattern thiết kế giúp giảm sự phụ thuộc giữa các thành phần, tăng tính linh hoạt và dễ kiểm thử.
C. Một phương pháp để quản lý bộ nhớ hiệu quả hơn.
D. Một cách để tăng cường bảo mật cho ứng dụng.
19. JDBC (Java Database Connectivity) được sử dụng để làm gì?
A. Thiết kế giao diện người dùng (GUI) cho ứng dụng Java.
B. Kết nối và tương tác với cơ sở dữ liệu từ ứng dụng Java.
C. Phát triển ứng dụng web sử dụng Java.
D. Quản lý bộ nhớ và garbage collection trong Java.
20. Trong Java, `checked exception` khác với `unchecked exception` như thế nào?
A. Checked exception xảy ra khi có lỗi cú pháp, unchecked exception xảy ra khi có lỗi logic.
B. Checked exception phải được xử lý (try-catch hoặc throws) tại thời điểm biên dịch, unchecked exception thì không bắt buộc.
C. Checked exception chỉ xảy ra trong môi trường đa luồng, unchecked exception xảy ra trong đơn luồng.
D. Checked exception có hiệu suất xử lý tốt hơn unchecked exception.
21. Mục đích sử dụng của `HashSet` trong Java Collection Framework là gì?
A. Lưu trữ các phần tử theo thứ tự chèn vào.
B. Lưu trữ các phần tử duy nhất và cho phép truy cập nhanh (thời gian hằng số trung bình).
C. Lưu trữ các phần tử theo thứ tự tăng dần.
D. Lưu trữ các phần tử có thể trùng lặp.
22. Trong Java, Stream API được giới thiệu từ phiên bản nào và mục đích chính của nó là gì?
A. Java 5, để quản lý bộ nhớ.
B. Java 8, để xử lý dữ liệu dạng collection theo kiểu hàm (functional).
C. Java 7, để cải thiện hiệu suất đa luồng.
D. Java 9, để module hóa ứng dụng.
23. Lambda expression trong Java là gì và nó thường được sử dụng cùng với interface nào?
A. Một loại vòng lặp mới, thường dùng với interface Iterable.
B. Một cách viết ngắn gọn cho anonymous inner class, thường dùng với functional interface.
C. Một cơ chế xử lý ngoại lệ mới, thường dùng với interface ExceptionHandler.
D. Một kiểu dữ liệu mới để biểu diễn hàm số, thường dùng với interface Function.
24. Trong Java, `static` keyword có thể được áp dụng cho những thành phần nào của class?
A. Chỉ cho biến thành viên (member variables).
B. Cho biến thành viên, phương thức thành viên, inner class và block khởi tạo.
C. Chỉ cho phương thức thành viên (member methods).
D. Chỉ cho class và interface.
25. Ứng dụng thực tế của Design Pattern Singleton trong Java là gì?
A. Tạo ra nhiều instance của một class để tăng hiệu suất.
B. Đảm bảo rằng một class chỉ có duy nhất một instance và cung cấp một điểm truy cập toàn cục đến instance đó.
C. Thực hiện đa luồng một cách an toàn.
D. Quản lý bộ nhớ hiệu quả hơn.
26. Giả sử bạn có một class `Dog` kế thừa từ class `Animal`. Nếu bạn muốn ép kiểu (cast) một đối tượng `Animal` về `Dog`, bạn cần phải kiểm tra điều gì trước khi ép kiểu?
A. Kiểm tra xem đối tượng `Animal` có phải là null hay không.
B. Kiểm tra xem đối tượng `Animal` thực sự là một instance của class `Dog` hay không (sử dụng `instanceof`).
C. Kiểm tra xem class `Dog` có implement interface `Comparable` hay không.
D. Không cần kiểm tra gì cả, ép kiểu trực tiếp luôn.
27. Trong Java, Reflection API cho phép làm gì?
A. Tạo ra các hiệu ứng đồ họa phức tạp.
B. Kiểm tra và thao tác thông tin về class, interface, method, field... tại runtime.
C. Tối ưu hóa mã bytecode để tăng tốc độ thực thi.
D. Quản lý phiên bản (version control) của dự án.
28. Giả sử bạn có một mảng số nguyên `int[] numbers = {1, 5, 2, 8, 3};`. Sử dụng Stream API, làm thế nào để tính tổng các số chẵn trong mảng này?
A. `numbers.stream().filter(n -> n % 2 == 0).sum();`
B. `numbers.filter(n -> n % 2 == 0).sum();`
C. `Stream.of(numbers).filter(n -> n % 2 == 0).sum();`
D. `Arrays.asList(numbers).stream().filter(n -> n % 2 == 0).sum();`
29. Trong môi trường đa luồng, vấn đề `race condition` có thể xảy ra khi nào?
A. Khi nhiều luồng cố gắng truy cập vào cùng một tài nguyên chia sẻ (shared resource) đồng thời, và ít nhất một trong số đó là thao tác ghi.
B. Khi các luồng không được ưu tiên thực hiện đúng thứ tự.
C. Khi một luồng bị treo (deadlock).
D. Khi một luồng thực hiện quá nhanh so với các luồng khác.
30. Giả sử bạn cần tạo một ứng dụng web Java. Framework nào sau đây thường được sử dụng cho mục đích này?
A. JavaFX
B. Swing
C. Spring MVC
D. AWT