1. Trong Java, từ khóa nào được sử dụng để khai báo một hằng số?
A. static
B. const
C. final
D. immutable
2. Trong Java, mục đích chính của việc sử dụng Generics là gì?
A. Để tăng hiệu suất của chương trình.
B. Để cung cấp type safety tại thời điểm biên dịch và giảm số lượng lỗi runtime.
C. Để tạo ra code dễ đọc hơn.
D. Để giảm kích thước của chương trình.
3. Đoạn code sau in ra kết quả gì?
```java
int[] arr = {1, 2, 3, 4, 5};System.out.println(arr.length);```
A. 4
B. 5
C. 6
D. Lỗi biên dịch
4. Trong Java, thread là gì?
A. Một chương trình độc lập chạy trên hệ điều hành.
B. Một đơn vị thực thi nhỏ nhất trong một tiến trình.
C. Một biến toàn cục được chia sẻ giữa các tiến trình.
D. Một cơ chế để bảo vệ bộ nhớ khỏi bị truy cập trái phép.
5. Sự khác biệt chính giữa `ArrayList` và `LinkedList` trong Java là gì?
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/xóa phần tử ở giữa nhanh hơn.
C. Cả hai đều đúng.
D. `ArrayList` nhanh hơn `LinkedList` trong mọi trường hợp.
6. Trong Java, hãy giải thích ngắn gọn về khái niệm "immutable object".
A. Một đối tượng không thể thay đổi trạng thái sau khi được tạo.
B. Một đối tượng có thể thay đổi trạng thái sau khi được tạo.
C. Một đối tượng chỉ có thể được truy cập từ một thread duy nhất.
D. Một đối tượng có thể được lưu trữ trong bộ nhớ cache.
7. Sự khác biệt giữa `throw` và `throws` trong Java là gì?
A. `throw` dùng để khai báo exception, `throws` dùng để ném exception.
B. `throw` dùng để ném exception, `throws` dùng để khai báo exception mà một phương thức có thể ném ra.
C. Cả hai đều có thể dùng để ném và khai báo exception.
D. Không có sự khác biệt.
8. 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 một đối tượng có phải là null hay không.
D. Sao chép một đối tượng.
9. Trong Java, ORM (Object-Relational Mapping) là gì?
A. Một kỹ thuật để tối ưu hóa truy vấn cơ sở dữ liệu.
B. Một kỹ thuật để ánh xạ dữ liệu giữa các đối tượng Java và các bảng trong cơ sở dữ liệu quan hệ.
C. Một kỹ thuật để tạo giao diện người dùng đồ họa.
D. Một kỹ thuật để quản lý bộ nhớ.
10. Trong Java, Annotations là gì?
A. Các comment đặc biệt trong code.
B. Metadata cung cấp thông tin về code cho compiler hoặc runtime environment.
C. Các biến global.
D. Các phương thức static.
11. Mục đích của từ khóa `super` trong Java là gì?
A. Để gọi một phương thức từ lớp hiện tại.
B. Để gọi một phương thức hoặc constructor từ lớp cha.
C. Để tạo một đối tượng mới của lớp cha.
D. Để kiểm tra xem một đối tượng có phải là instance của một lớp cha hay không.
12. Khi nào nên sử dụng abstract class thay vì interface trong Java?
A. Khi muốn định nghĩa một contract mà các lớp triển khai phải tuân theo.
B. Khi muốn cung cấp một số implementation mặc định cho các lớp con.
C. Khi muốn đa kế thừa.
D. Khi không quan tâm đến việc các lớp con có thể ghi đè phương thức hay không.
13. Trong Java, hãy giải thích ngắn gọn về khái niệm "đa hình" (polymorphism).
A. Khả năng một đối tượng có nhiều thuộc tính.
B. Khả năng một đối tượng có thể có nhiều hình dạng hoặc hành vi khác nhau tùy thuộc vào ngữ cảnh.
C. Khả năng một class có nhiều constructor.
D. Khả năng một chương trình có nhiều thread.
14. Trong Java, interface có thể chứa những gì?
A. Chỉ các phương thức abstract.
B. Chỉ các biến final static.
C. Các phương thức abstract và các biến final static.
D. Các phương thức concrete và các biến instance.
15. Phát biểu nào sau đây là đúng về lambda expression trong Java?
A. Lambda expression chỉ có thể được sử dụng với các interface có một phương thức abstract (Functional Interface).
B. Lambda expression có thể được sử dụng với bất kỳ interface nào.
C. Lambda expression là một cách để tạo các lớp ẩn danh.
D. Lambda expression không thể truy cập các biến local trong phạm vi của nó.
16. Trong Java, thế nào là một Functional Interface?
A. Một interface không có phương thức nào.
B. Một interface có đúng một phương thức abstract.
C. Một interface có nhiều phương thức abstract.
D. Một interface có các phương thức static.
17. Trong Java, serialization là gì?
A. 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.
B. Quá trình mã hóa dữ liệu để bảo mật.
C. Quá trình nén dữ liệu để giảm kích thước.
D. Quá trình chuyển đổi một chuỗi byte thành một đối tượng.
18. 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 cơ chế tự động giải phóng bộ nhớ không còn được sử dụng bởi chương trình.
C. Một công cụ để tìm và sửa lỗi trong chương trình.
D. Một thư viện chứa các hàm tiện ích.
19. Trong Java, Stream API được sử dụng để làm gì?
A. Để tạo giao diện người dùng đồ họa.
B. Để xử lý dữ liệu tuần tự (sequences) một cách hiệu quả và khai báo.
C. Để kết nối cơ sở dữ liệu.
D. Để quản lý bộ nhớ.
20. Trong Java, thế nào là một Singleton Pattern?
A. Một pattern để tạo ra nhiều instance của một class.
B. Một pattern để đảm bảo rằng một class chỉ có một instance duy nhất và cung cấp một điểm truy cập global đến instance đó.
C. Một pattern để tạo ra các class abstract.
D. Một pattern để quản lý bộ nhớ.
21. 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 code dễ bảo trì và mở rộng.
C. Một tập hợp các công cụ debug.
D. Một tập hợp các thuật toán sắp xếp.
22. Trong Java, phương thức `main()` phải có signature như thế nào?
A. public static void main(String args[])
B. static public void main(String[] args)
C. public void main(String[] args)
D. void main(String[] args)
23. Trong Java, JDBC được sử dụng để làm gì?
A. Để tạo giao diện người dùng đồ họa.
B. Để kết nối và tương tác với cơ sở dữ liệu.
C. Để quản lý bộ nhớ.
D. Để thực hiện các phép toán số học.
24. Trong Java, vai trò của class `Scanner` là gì?
A. Tạo giao diện đồ họa.
B. Đọc dữ liệu từ input stream (ví dụ: bàn phím, file).
C. Kết nối cơ sở dữ liệu.
D. Thực hiện các phép toán số học.
25. Trong Java, Dependency Injection (DI) là gì?
A. Một kỹ thuật để tạo các đối tượng singleton.
B. Một pattern 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 kỹ thuật để tối ưu hóa hiệu suất của chương trình.
D. Một cách để quản lý bộ nhớ.
26. Trong Java, phát biểu nào sau đây là đúng về tính đóng gói (encapsulation)?
A. Tính đóng gói chỉ áp dụng cho các biến instance, không áp dụng cho phương thức.
B. Tính đóng gói là cơ chế ẩn giấu dữ liệu và phương thức bên trong một lớp, ngăn chặn truy cập trực tiếp từ bên ngoài và bảo vệ tính toàn vẹn của dữ liệu.
C. Tính đóng gói cho phép truy cập trực tiếp vào các thuộc tính của đối tượng từ bất kỳ đâu trong chương trình.
D. Tính đóng gói là kỹ thuật chỉ sử dụng các lớp abstract.
27. Đoạn code sau in ra kết quả gì?
```java
String str1 = "Hello";String str2 = new String("Hello");System.out.println(str1 == str2);System.out.println(str1.equals(str2));```
A. true
true
B. false
false
C. true
false
D. false
true
28. Trong Java, hãy nêu sự khác biệt chính giữa checked exception và unchecked exception.
A. Checked exception phải được xử lý hoặc khai báo trong phương thức, còn unchecked exception thì không.
B. Unchecked exception phải được xử lý hoặc khai báo trong phương thức, còn checked exception thì không.
C. Checked exception xảy ra khi có lỗi cú pháp, còn unchecked exception xảy ra khi có lỗi logic.
D. Không có sự khác biệt giữa checked exception và unchecked exception.
29. 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 chia một số cho 0.
D. Khi cố gắng truy cập một phần tử ngoài phạm vi của mảng.
30. Trong Java, mục đích của từ khóa `volatile` là gì?
A. Để đảm bảo rằng một biến chỉ có thể được truy cập bởi một thread duy nhất.
B. Để đảm bảo rằng một biến được lưu trữ trong bộ nhớ cache của CPU.
C. Để đảm bảo rằng một biến được đọc trực tiếp từ bộ nhớ chính và không được lưu trong cache của thread.
D. Để khai báo một hằng số.