1. Trong Java, từ khóa `final` có thể được sử dụng với biến, phương thức và lớp. Khi được sử dụng với lớp, `final` có nghĩa là gì?
A. Lớp không thể được khởi tạo đối tượng.
B. Lớp không thể có phương thức `main()`.
C. Lớp không thể được kế thừa.
D. Lớp không thể truy cập được từ bên ngoài package.
2. Phương thức `main()` trong Java có kiểu trả về là gì?
A. int
B. void
C. String
D. static
3. Từ khóa `static` trong Java được sử dụng để làm gì?
A. Tạo ra các đối tượng không thể thay đổi.
B. Khai báo một biến hoặc phương thức thuộc về lớp chứ không phải là thể hiện của lớp.
C. Ngăn chặn việc kế thừa lớp.
D. Đảm bảo rằng một biến chỉ được khởi tạo một lần duy nhất.
4. Trong Java, interface khác biệt so với abstract class như thế nào?
A. Interface có thể chứa các phương thức có thân, abstract class thì không.
B. Một lớp có thể implements nhiều interface nhưng chỉ có thể extends một abstract class.
C. Abstract class không thể có constructor, interface thì có thể.
D. Interface có thể chứa các biến instance, abstract class thì không.
5. Công cụ build tự động phổ biến nào thường được sử dụng cho dự án Java?
A. javac
B. java
C. Maven hoặc Gradle
D. jar
6. Lambda expression trong Java là gì và nó thường được sử dụng với interface nào?
A. Một cách khai báo biến cục bộ, thường dùng với interface Serializable.
B. Một cách định nghĩa anonymous inner class, thường dùng với interface Runnable.
C. Một cách biểu diễn concise của anonymous function, thường dùng với functional interface.
D. Một cách tạo ra thread, thường dùng với interface Thread.
7. Phương thức `Collectors.toList()` và `Collectors.toSet()` trong Java Stream API được sử dụng để làm gì?
A. Lọc các phần tử trùng lặp từ stream.
B. Sắp xếp các phần tử trong stream.
C. Thu thập các phần tử của stream vào một `List` hoặc `Set` tương ứng.
D. Chuyển đổi stream thành một mảng.
8. Trong Java, JDBC (Java Database Connectivity) được sử dụng để làm gì?
A. Tạo giao diện người dùng đồ họa (GUI).
B. Kết nối và tương tác với database.
C. Phát triển ứng dụng web server.
D. Quản lý bộ nhớ và garbage collection.
9. Phương thức nào sau đây KHÔNG phải là phương thức của lớp `Object` trong Java?
A. toString()
B. equals()
C. finalize()
D. compareTo()
10. Sự khác biệt chính giữa checked exception và unchecked exception trong Java là gì?
A. Checked exception xảy ra trong quá trình biên dịch, unchecked exception xảy ra trong quá trình chạy.
B. Checked exception phải được xử lý (try-catch hoặc throws), unchecked exception thì không bắt buộc.
C. Unchecked exception là lỗi cú pháp, checked exception là lỗi logic.
D. Checked exception chỉ xảy ra trong thư viện chuẩn Java, unchecked exception xảy ra trong code người dùng viết.
11. Trong Java, Dependency Injection (DI) là gì và lợi ích của nó?
A. Một pattern thiết kế để tạo ra các singleton object.
B. Một kỹ thuật để giảm sự phụ thuộc (coupling) giữa các thành phần của ứng dụng bằng cách 'inject' dependencies vào đối tượng.
C. Một phương pháp để tối ưu hóa hiệu suất của ứng dụng database.
D. Một cơ chế để xử lý ngoại lệ một cách tập trung.
12. Trong Java, microservices architecture là gì và nó khác biệt so với monolithic architecture như thế nào?
A. Microservices là một kiểu kiến trúc monolithic được viết bằng ngôn ngữ Java.
B. Microservices là một kiến trúc ứng dụng đơn khối, monolithic là kiến trúc ứng dụng phân tán.
C. Microservices là một kiến trúc phân tán, xây dựng ứng dụng từ các service nhỏ, độc lập; monolithic là kiến trúc ứng dụng đơn khối, tất cả chức năng đóng gói trong một unit.
D. Không có sự khác biệt, microservices và monolithic chỉ là hai tên gọi khác nhau cho cùng một kiến trúc.
13. Trong Java, `ArrayList` và `LinkedList` khác nhau chủ yếu ở điểm nào?
A. `ArrayList` cho phép truy cập ngẫu nhiên nhanh hơn, `LinkedList` chèn/xóa phần tử ở giữa nhanh hơn.
B. `LinkedList` sử dụng mảng động, `ArrayList` sử dụng danh sách liên kết.
C. `ArrayList` đồng bộ hóa (synchronized), `LinkedList` thì không.
D. `LinkedList` chỉ lưu trữ các đối tượng, `ArrayList` lưu trữ các kiểu dữ liệu nguyên thủy.
14. Đâu là cách sử dụng try-with-resources đúng trong Java?
A. try (Resource res = new Resource()) { // code } catch (Exception e) {}
B. try { Resource res = new Resource(); // code } resources (res)
C. try { Resource res = new Resource(); resources (res) } catch (Exception e) {}
D. try { // code } resources (Resource res = new Resource()) catch (Exception e) {}
15. Điều gì xảy ra khi một ngoại lệ (exception) không được xử lý trong Java?
A. Chương trình tiếp tục chạy bình thường.
B. Chương trình biên dịch thành công nhưng không chạy được.
C. Chương trình kết thúc một cách bất thường và thông báo lỗi.
D. Ngoại lệ tự động được xử lý bởi bộ thu gom rác (garbage collector).
16. Đâu là cách khai báo một mảng các số nguyên trong Java?
A. int array[];
B. array int[];
C. int[] array;
D. array[] int;
17. Annotation `@Override` trong Java được sử dụng để làm gì?
A. Đánh dấu một phương thức là abstract.
B. Chỉ định rằng một phương thức trong lớp con đang ghi đè (override) một phương thức từ lớp cha.
C. Tạo ra một phương thức static.
D. Bảo vệ một phương thức khỏi bị ghi đè.
18. Phương thức `hashCode()` trong Java thường được ghi đè cùng với phương thức nào?
A. toString()
B. equals()
C. clone()
D. finalize()
19. Trong Java, kiểu dữ liệu nguyên thủy nào được sử dụng để lưu trữ giá trị logic (true hoặc false)?
A. int
B. char
C. boolean
D. float
20. Đâu là phát biểu đúng về tính đóng gói (encapsulation) trong lập trình hướng đối tượng?
A. Cho phép truy cập trực tiếp vào dữ liệu bên trong đối tượng.
B. Ẩn thông tin và bảo vệ dữ liệu của đối tượng khỏi sự truy cập trực tiếp từ bên ngoài.
C. Tạo ra các lớp con từ lớp cha.
D. Định nghĩa các hành vi chung cho các đối tượng.
21. Trong Java, Garbage Collection (GC) là gì và nó hoạt động như thế nào?
A. GC là một cơ chế quản lý bộ nhớ tự động, giải phóng bộ nhớ không còn được sử dụng bởi chương trình.
B. GC là một cơ chế biên dịch mã nguồn thành bytecode.
C. GC là một cơ chế quản lý ngoại lệ trong Java.
D. GC là một cơ chế đồng bộ hóa luồng.
22. 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 đối tượng.
B. `==` so sánh tham chiếu đối tượng, `equals()` so sánh nội dung (giá trị) của đối tượng.
C. Cả hai đều so sánh tham chiếu đối tượng.
D. Cả hai đều so sánh nội dung (giá trị) của đối tượng.
23. Trong Java, thread pool được sử dụng để làm gì?
A. Quản lý bộ nhớ heap.
B. Quản lý kết nối database.
C. Tái sử dụng các thread đã được tạo ra để thực hiện các task (nhiệm vụ) một cách hiệu quả.
D. Đồng bộ hóa truy cập vào các tài nguyên chung.
24. Bộ nhớ heap và stack trong Java được sử dụng để làm gì?
A. Heap lưu trữ các biến cục bộ và tham số phương thức, stack lưu trữ đối tượng và biến instance.
B. Stack lưu trữ các biến cục bộ và tham số phương thức, heap lưu trữ đối tượng và biến instance.
C. Cả heap và stack đều lưu trữ đối tượng.
D. Cả heap và stack đều lưu trữ biến cục bộ.
25. Đặc điểm nào sau đây KHÔNG phải là một đặc điểm của lập trình hướng đối tượng (OOP)?
A. Tính kế thừa (Inheritance)
B. Tính đa hình (Polymorphism)
C. Tính trừu tượng (Abstraction)
D. Tính tuần tự (Sequential)
26. ORM (Object-Relational Mapping) framework trong Java (ví dụ: Hibernate) giúp ích gì cho lập trình viên?
A. Tăng tốc độ biên dịch mã nguồn Java.
B. Tự động quản lý bộ nhớ garbage collection.
C. Giản hóa việc tương tác với database bằng cách ánh xạ đối tượng Java với bảng trong database.
D. Tạo giao diện người dùng đồ họa (GUI) cho ứng dụng Java.
27. Trong Java, từ khóa nào được sử dụng để tạo một thể hiện của một lớp (instance of a class)?
A. class
B. new
C. instanceof
D. extends
28. 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ớ hiệu quả hơn.
B. Java 7, để cải thiện hiệu suất I/O.
C. Java 8, để xử lý dữ liệu theo kiểu hàm (functional) và song song (parallel).
D. Java 9, để module hóa codebase.
29. Trong Java, Serialization là gì?
A. Quá trình chuyển đổi mã nguồn Java thành bytecode.
B. 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.
C. Quá trình kiểm tra và xác thực dữ liệu đầu vào.
D. Quá trình tối ưu hóa hiệu suất của ứng dụng Java.
30. Vòng lặp `for-each` trong Java được sử dụng chủ yếu để làm gì?
A. Lặp lại một khối lệnh với số lần biết trước.
B. Lặp lại một khối lệnh cho đến khi một điều kiện sai.
C. Duyệt qua các phần tử của một mảng hoặc collection.
D. Thực hiện một khối lệnh ít nhất một lần và sau đó lặp lại nếu điều kiện đúng.